Saltar al contenido
05

Rastreo de API

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

Middleware Express
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());
Seguimiento manual
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

La mayoría de los endpoints de analíticas son GET con parámetros de consulta; cada fila de abajo indica el método que realmente acepta. 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.

Carga útil del evento
{
  "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 al equipo de BetterMeter 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

La mayoría de los endpoints GET aceptan ?siteId=...&from=YYYY-MM-DD&to=YYYY-MM-DD; cualquier excepción se indica en la fila correspondiente. 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.

Sitios y acceso

GET /api/sitesTodos los sitios a los que el llamador tiene acceso, del más reciente al más antiguo
POST /api/sitesCrear un sitio. Solo con sesión del panel — una clave API recibe un 403 con dashboardOnly: true
GET /api/sites/[siteId]La configuración y los metadatos de un sitio
PATCH /api/sites/[siteId]Actualizar la configuración del sitio — nombre de marca, palabras clave, competidores, filtros de IP, moneda (Editor o Admin)
DELETE /api/sites/[siteId]Eliminar un sitio y todos los eventos que contiene. Admin, y solo con sesión del panel
GET /api/sites/[siteId]/membersMiembros, propietario e invitaciones pendientes (cualquier rol)
POST /api/sites/[siteId]/membersAñadir un miembro o enviar una invitación (Admin)
PATCH /api/sites/[siteId]/membersCambiar el rol de un miembro (Admin)
DELETE /api/sites/[siteId]/membersEliminar un miembro o cancelar una invitación pendiente (Admin)
POST /api/auth/verify-keyVerificar una clave API y devolver la cuenta a la que pertenece, junto con los sitios que esa cuenta posee. Limitado a 10 intentos por minuto y por IP
GET /api/billing/subscriptionPlan actual, estado de la suscripción, límites del plan y consumo hasta la fecha

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/all-sitesResumen consolidado de todos los sitios a los que el llamador tiene acceso; acepta from y to, sin siteId
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/findEncontrar un visitante por correo electrónico, id de contacto de CRM, o cualquier par clave/valor de propiedad (Editor o Admin, porque un correo identifica a una persona con nombre)
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/events/[eventName]Un evento personalizado en detalle — disparos totales, visitantes únicos y facetas de propiedades contadas en todo el periodo
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

Objetivos de conversión

GET /api/analytics/goalsListar todos los objetivos de conversión con conversiones, visitantes únicos convertidos y tasas de conversión
POST /api/analytics/goalsCrear un nuevo objetivo de conversión (URL de página vista, evento personalizado, enlace saliente o descarga)
GET /api/analytics/goals/[goalId]Obtener la evolución actual y anterior solo de tráfico humano, los visitantes convertidos estables, la adquisición de primer contacto, la eficiencia por visitante expuesto y el impulso; includeBots=true incluye el tráfico automatizado
PATCH /api/analytics/goals/[goalId]Actualizar la definición de un objetivo de conversión
DELETE /api/analytics/goals/[goalId]Eliminar un objetivo de conversión
GET /api/analytics/goals/suggestAnalizar los patrones de tráfico y sugerir objetivos de conversión de alto valor

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
POST /api/analytics/brandEjecutar un informe de marca completo y guardarlo para el seguimiento histórico; si no se indican consultas usa las palabras clave guardadas del sitio (Editor o Admin, plan con monitorización de marca)
GET /api/analytics/brand/historyDatos históricos de posicionamiento. Solo con sesión del panel — esta ruta no acepta una clave API
POST /api/analytics/brand/compareComparación con competidores — envíe siteId mediante POST, con competitors y queries opcionales (Editor o Admin, plan con monitorización de marca)
GET /api/analytics/brand/alertsReglas de alerta de posicionamiento
POST /api/analytics/brand/alertsCrear una regla de alerta de posicionamiento (Editor o Admin)
PATCH /api/analytics/brand/alertsActivar o desactivar una regla de alerta (Editor o Admin)
DELETE /api/analytics/brand/alerts?id=…Eliminar una regla de alerta; el id de la regla va en la cadena de consulta (Editor o Admin)
GET /api/analytics/brand/exportExportar datos de posicionamiento. Solo con sesión del panel — esta ruta no acepta una clave API
GET /api/analytics/backlinksPerfil de backlinks
GET /api/analytics/ai-mentionsMenciones de marca por chatbots de IA
POST /api/analytics/ai-mentionsIniciar en segundo plano un análisis de menciones de IA y devolver un id de tarea; consulte GET /api/analytics/ai-mentions/job?id=… para ver el progreso (Editor o Admin)
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

Gasto publicitario e ingresos

GET /api/analytics/ad-spendGasto de campaña junto al tráfico medido
GET /api/analytics/conversionsRegistros del CRM que llevaban uno de nuestros identificadores de clic publicitario; wonOnly=true solo para las oportunidades ganadas, withAds=true para resolver el anuncio detrás de cada una
GET /api/analytics/ad-creativeEl anuncio detrás de una visita — exacto si la URL llevaba el identificador del anuncio o su nombre, a nivel de campaña si solo se conoce la campaña, y sin coincidencia si no se conoce ninguno — o todos los anuncios sincronizados de una campaña con list=true. Resuelve una visita concreta y no un periodo, así que no admite rango de fechas
GET /api/analytics/ad-creative/[creativeId]/imageLa imagen del anuncio, servida desde nuestro propio origen para que las URL de los CDN de las plataformas nunca lleguen al navegador. Toma siteId y ningún rango de fechas
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
DELETE /api/integrations/ads?id=…Desconectar una cuenta publicitaria por su id; el gasto ya registrado se conserva (Admin)
POST /api/integrations/ads/syncTraer el gasto ahora en lugar de esperar la sincronización nocturna