Rastreo de API
Rastree el uso de endpoints API, latencia, tasas de error y patrones de uso con middleware Express o llamadas manuales.
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());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).
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.
{
"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 vivoPOST /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 antiguoPOST /api/sitesCrear un sitio. Solo con sesión del panel — una clave API recibe un 403 con dashboardOnly: trueGET /api/sites/[siteId]La configuración y los metadatos de un sitioPATCH /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 panelGET /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 IPGET /api/billing/subscriptionPlan actual, estado de la suscripción, límites del plan y consumo hasta la fechaAnalíticas web
GET /api/analytics/overviewVisitantes, vistas de página, sesiones + % de cambio y hasPreviousPeriodData para ventanas de comparación vacíasGET /api/analytics/all-sitesResumen consolidado de todos los sitios a los que el llamador tiene acceso; acepta from y to, sin siteIdGET /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 IAGET /api/analytics/timeseriesTendencia diaria de visitantes/vistas de páginaGET /api/analytics/ai-trafficDesglose de referencias de IA por plataformaGET /api/analytics/bots?limit=allTráfico de bots/rastreadoresGET /api/analytics/countries?limit=allVisitantes por paísGET /api/analytics/devicesDesglose por tipo de dispositivoGET /api/analytics/browsers?limit=allDesglose por navegadorGET /api/analytics/visitors?limit=allLista de visitantes con actividadGET /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íaPATCH /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 unaPATCH /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 llamaGET /api/analytics/events?limit=allEventos personalizadosGET /api/analytics/events/[eventName]Un evento personalizado en detalle — disparos totales, visitantes únicos y facetas de propiedades contadas en todo el periodoGET /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 personalizadosGET /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 unaGET /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/origenGET /api/analytics/marketingRendimiento de marketing: campañas, páginas de destino, mezcla de canales, tráfico de campaña frente al restoGET /api/analytics/channelsDesglose por canalGET /api/analytics/session-statsEstadísticas de sesionesGET /api/analytics/sessions?limit=allLista de sesionesAnalíticas de CLI
GET /api/analytics/cli-overviewInvocaciones, usuarios, tasa de éxitoGET /api/analytics/cli-commands?limit=allComandos más usadosGET /api/analytics/cli-timeseriesActividad diaria de CLIAnalíticas de MCP
GET /api/analytics/mcp-overviewInvocaciones, usuarios, tasa de éxitoGET /api/analytics/mcp-tools?limit=allHerramientas más usadasGET /api/analytics/mcp-clients?limit=allDesglose por clienteGET /api/analytics/mcp-timeseriesActividad diaria de MCPAnalíticas de API
GET /api/analytics/api-overviewInvocaciones, usuarios, tasa de errorGET /api/analytics/api-endpoints?limit=allEndpoints más usadosGET /api/analytics/api-timeseriesActividad diaria de APIObjetivos de conversión
GET /api/analytics/goalsListar todos los objetivos de conversión con conversiones, visitantes únicos convertidos y tasas de conversiónPOST /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 automatizadoPATCH /api/analytics/goals/[goalId]Actualizar la definición de un objetivo de conversiónDELETE /api/analytics/goals/[goalId]Eliminar un objetivo de conversiónGET /api/analytics/goals/suggestAnalizar los patrones de tráfico y sugerir objetivos de conversión de alto valorBuilder
GET /api/builders/dashboardsListar dashboards personalizados guardados de un sitio y su menú lateral de dashboardsPOST /api/builders/dashboardsCrear un dashboard personalizadoGET /api/builders/dashboards/[dashboardId]Obtener un dashboard personalizadoPATCH /api/builders/dashboards/[dashboardId]Actualizar un dashboard personalizadoDELETE /api/builders/dashboards/[dashboardId]Eliminar un dashboard personalizadoGET /api/builders/reportsListar plantillas de reporte guardadasPOST /api/builders/reportsCrear una plantilla de reporteGET /api/builders/reports/[reportId]Obtener una plantilla de reportePATCH /api/builders/reports/[reportId]Actualizar una plantilla de reporteDELETE /api/builders/reports/[reportId]Eliminar una plantilla de reportePOST /api/builders/reports/previewPrevisualizar el esquema de un reportePosicionamiento en búsqueda y visibilidad IA
GET /api/analytics/brandReporte de visibilidad en posicionamiento de búsquedaPOST /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 APIPOST /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 posicionamientoPOST /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 APIGET /api/analytics/backlinksPerfil de backlinksGET /api/analytics/ai-mentionsMenciones de marca por chatbots de IAPOST /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 IAPulse AI
GET /api/pulse/insightsAnomalías, tendencias, oportunidades y cambios por dominioGET /api/pulse/healthPuntuación de salud del producto (0-100)GET /api/pulse/briefingBriefing diario o semanalGET /api/pulse/forecastPronóstico de tráfico/usoGET /api/pulse/compareComparación de períodosGET /api/pulse/alertsListar alertas de monitoreoPOST /api/pulse/alertsCrear regla de alertaDELETE /api/pulse/alertsEliminar regla de alertaGET /api/pulse/notificationsObtener notificacionesPATCH /api/pulse/notificationsMarcar notificaciones como leídasPOST /api/pulse/chatChat de Pulse en streaming con respuestas adaptativas vinculadas a visitantesGET /api/pulse/conversationsListar tus hilos de conversación de Pulse para un sitioPOST /api/pulse/conversationsIniciar un nuevo hilo de conversación de PulseGET /api/pulse/conversations/[id]Un hilo con todo su historial de mensajesPATCH /api/pulse/conversations/[id]Renombrar un hilo de conversaciónDELETE /api/pulse/conversations/[id]Eliminar una conversación y sus mensajesGET /api/pulse/screenshotCapturar una página de destino de tu sitio como imagen autenticada del mismo origenGasto publicitario e ingresos
GET /api/analytics/ad-spendGasto de campaña junto al tráfico medidoGET /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 unaGET /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 fechasGET /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 fechasGET /api/integrations/adsListar las cuentas publicitarias conectadas de un sitioPOST /api/integrations/adsConectar una cuenta publicitaria de Meta con un token de usuario del sistemaDELETE /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