05

Rastreo de API

Rastree el uso de endpoints API, latencia, tasas de error y patrones de uso con middleware Express o llamadas manuales.

Express middleware
import { BetterMeter } from "@bettermeter/node";
import express from "express";

const bm = new BetterMeter({
  siteId: "my-api",
  apiKey: "bm_...",
});

const app = express();

// Auto-track all requests
app.use(bm.expressMiddleware());
Manual tracking
bm.trackApi({
  method: "POST",
  endpoint: "/api/users",    // Use patterns, not actual paths with IDs
  statusCode: 201,
  durationMs: 45,
});

Qué se rastrea

Método HTTP, patrón de endpoint, código de estado y duración. Los cuerpos de solicitud/respuesta, encabezados, parámetros de consulta y parámetros de ruta nunca se envían. Use patrones de endpoint (/api/users/:id) no rutas reales (/api/users/abc123).

09

Referencia de API

Todos los endpoints de analíticas aceptan solicitudes GET con parámetros de consulta. Autentíquese con Authorization: Bearer <api_key>.

Ingestión de eventos

POST /api/eventIngerir un evento (web, CLI, MCP o API). Devuelve 202.

Los eventos web deben referenciar un sitio registrado y la URL del evento debe coincidir con el dominio del sitio. Los eventos CLI, MCP y API requieren Authorization: Bearer [api_key]; los encabezados forwarded user-agent y client-IP solo se confían después de validar esa clave para el sitio.

Event payload
{
  "site_id": "example.com",
  "event_name": "pageview",        // or "cli.command", "mcp.tool", "api.request"
  "event_source": "web",           // "web" | "cli" | "mcp" | "api"
  "url": "https://example.com/page",
  "pathname": "/page",
  "hostname": "example.com",
  "referrer": "https://google.com",
  "screen_width": 1920,
  "timezone": "America/New_York",
  "user_id": "optional_user_id",
  "properties": { "key": "value" }
}

Interés de registro

POST /api/waitlistCapturar inscripciones públicas y enviar un correo a farbour@paraito.ca por cada nuevo contacto. La alerta incluye indicios claramente identificados sobre el nombre y la organización derivados de la dirección, el estado de la cuenta, el interés del mismo dominio y un enlace al registro administrativo. Los duplicados no generan otra alerta.

Tiempo real y heartbeat

GET /api/analytics/live?activity=1&cursor=…Conteo de visitantes en vivo. Añade activity=1 para eventos humanos recientes, identificadores de visitantes activos, objetivos y un cursor reutilizable. Acepta ?siteId=...
POST /api/heartbeatRecibir heartbeats del navegador para rastreo de visitantes en vivo
POST /api/hAlias sigiloso para /api/heartbeat (resistente a bloqueadores de anuncios)

Endpoints de consulta

Todos aceptan ?siteId=...&from=YYYY-MM-DD&to=YYYY-MM-DD. Los endpoints de lista también aceptan limit=all cuando necesita el conjunto completo para paginación o búsqueda.

Los endpoints de tráfico humano excluyen por defecto el tráfico automatizado conocido y detectado con alta confianza. Usa includeBots=true para obtener totales sin filtrar. La respuesta de resumen incluye trafficFilter para que la exclusión sea auditable.

Analíticas web

GET /api/analytics/overviewVisitantes, vistas de página, sesiones + % de cambio y hasPreviousPeriodData para ventanas de comparación vacías
GET /api/analytics/pages?limit=allPáginas por número de visitantes. Agregue limit=all para devolver la lista completa y buscable.
GET /api/analytics/sources?limit=allFuentes de tráfico con detección de IA
GET /api/analytics/timeseriesTendencia diaria de visitantes/vistas de página
GET /api/analytics/ai-trafficDesglose de referencias de IA por plataforma
GET /api/analytics/bots?limit=allTráfico de bots/rastreadores
GET /api/analytics/countries?limit=allVisitantes por país
GET /api/analytics/devicesDesglose por tipo de dispositivo
GET /api/analytics/browsers?limit=allDesglose por navegador
GET /api/analytics/visitors?limit=allLista de visitantes con actividad
GET /api/analytics/visitors/[visitorId]Perfil con primera atribución, sesiones, ciclo de vida y cronología
PATCH /api/analytics/visitors/[visitorId]Actualizar identidad y ciclo de vida (Editor o Administrador)
GET /api/analytics/visitors/[visitorId]/propertiesLeer todas las propiedades clave/valor de un visitante, con la fuente que escribió cada una
PATCH /api/analytics/visitors/[visitorId]/propertiesEscribir o eliminar propiedades del visitante; un valor null elimina la clave (Editor o Admin)
POST /api/visitor-propertiesEndpoint público usado por setProperties() del tracker; el visitante se deriva de la petición, nunca lo aporta quien llama
GET /api/analytics/events?limit=allEventos personalizados
GET /api/analytics/campaigns?limit=allAtribución automática de URL de campaña (UTM + IDs de clic)
GET /api/analytics/campaigns/[campaign]Detalle de una campaña individual — calidad de las visitas (tasa de rebote, duración media, puntuación de calidad frente a la media del sitio), rendimiento de variantes y palabras clave, desgloses por dispositivo, navegador y país, patrón horario, eventos personalizados
GET /api/analytics/campaigns/[campaign]/visitorsLas personas que trajo una campaña, con la página de destino, la variante, el dispositivo, el país y la actividad tras el clic de cada una
GET /api/analytics/keywords?limit=allPalabras clave (utm_term) agregadas por campaña con calidad de las visitas (tasa de rebote, duración media) y atribución de campaña/origen
GET /api/analytics/marketingRendimiento de marketing: campañas, páginas de destino, mezcla de canales, tráfico de campaña frente al resto
GET /api/analytics/channelsDesglose por canal
GET /api/analytics/session-statsEstadísticas de sesiones
GET /api/analytics/sessions?limit=allLista de sesiones

Analíticas de CLI

GET /api/analytics/cli-overviewInvocaciones, usuarios, tasa de éxito
GET /api/analytics/cli-commands?limit=allComandos más usados
GET /api/analytics/cli-timeseriesActividad diaria de CLI

Analíticas de MCP

GET /api/analytics/mcp-overviewInvocaciones, usuarios, tasa de éxito
GET /api/analytics/mcp-tools?limit=allHerramientas más usadas
GET /api/analytics/mcp-clients?limit=allDesglose por cliente
GET /api/analytics/mcp-timeseriesActividad diaria de MCP

Analíticas de API

GET /api/analytics/api-overviewInvocaciones, usuarios, tasa de error
GET /api/analytics/api-endpoints?limit=allEndpoints más usados
GET /api/analytics/api-timeseriesActividad diaria de API

Conversion Goals

GET /api/analytics/goalsList all conversion goals with conversions, unique converters, and conversion rates
POST /api/analytics/goalsCreate a new conversion goal (pageview URL, custom event, outbound link, or download)
GET /api/analytics/goals/[goalId]Get human-only current/prior evolution, stable converters, first-touch acquisition, exposed-visitor efficiency, and momentum; includeBots=true opts into automation
PATCH /api/analytics/goals/[goalId]Update a conversion goal definition
DELETE /api/analytics/goals/[goalId]Delete a conversion goal
GET /api/analytics/goals/suggestAnalyze traffic patterns and suggest high-value conversion targets

Builder

GET /api/builders/dashboardsListar dashboards personalizados guardados de un sitio y su menú lateral de dashboards
POST /api/builders/dashboardsCrear un dashboard personalizado
GET /api/builders/dashboards/[dashboardId]Obtener un dashboard personalizado
PATCH /api/builders/dashboards/[dashboardId]Actualizar un dashboard personalizado
DELETE /api/builders/dashboards/[dashboardId]Eliminar un dashboard personalizado
GET /api/builders/reportsListar plantillas de reporte guardadas
POST /api/builders/reportsCrear una plantilla de reporte
GET /api/builders/reports/[reportId]Obtener una plantilla de reporte
PATCH /api/builders/reports/[reportId]Actualizar una plantilla de reporte
DELETE /api/builders/reports/[reportId]Eliminar una plantilla de reporte
POST /api/builders/reports/previewPrevisualizar el esquema de un reporte

Posicionamiento en búsqueda y visibilidad IA

GET /api/analytics/brandReporte de visibilidad en posicionamiento de búsqueda
GET /api/analytics/brand/historyDatos históricos de posicionamiento
GET /api/analytics/brand/compareComparación con competidores
GET /api/analytics/brand/alertsReglas de alerta de posicionamiento
GET /api/analytics/brand/exportExportar datos de posicionamiento
GET /api/analytics/backlinksPerfil de backlinks
GET /api/analytics/ai-mentionsMenciones de marca por chatbots de IA
GET /api/analytics/ai-mentions/historyHistorial de menciones de IA

Pulse AI

GET /api/pulse/insightsAnomalías, tendencias, oportunidades y cambios por dominio
GET /api/pulse/healthPuntuación de salud del producto (0-100)
GET /api/pulse/briefingBriefing diario o semanal
GET /api/pulse/forecastPronóstico de tráfico/uso
GET /api/pulse/compareComparación de períodos
GET /api/pulse/alertsListar alertas de monitoreo
POST /api/pulse/alertsCrear regla de alerta
DELETE /api/pulse/alertsEliminar regla de alerta
GET /api/pulse/notificationsObtener notificaciones
PATCH /api/pulse/notificationsMarcar notificaciones como leídas
POST /api/pulse/chatChat de Pulse en streaming con respuestas adaptativas vinculadas a visitantes
GET /api/pulse/conversationsListar tus hilos de conversación de Pulse para un sitio
POST /api/pulse/conversationsIniciar un nuevo hilo de conversación de Pulse
GET /api/pulse/conversations/[id]Un hilo con todo su historial de mensajes
PATCH /api/pulse/conversations/[id]Renombrar un hilo de conversación
DELETE /api/pulse/conversations/[id]Eliminar una conversación y sus mensajes
GET /api/pulse/screenshotCapturar una página de destino de tu sitio como imagen autenticada del mismo origen
GET /api/analytics/ad-spendGasto de campaña junto al tráfico medido
GET /api/integrations/adsListar las cuentas publicitarias conectadas de un sitio
POST /api/integrations/adsConectar una cuenta publicitaria de Meta con un token de usuario del sistema
POST /api/integrations/ads/syncTraer el gasto ahora en lugar de esperar la sincronización nocturna