Suivi API
Suivez l'utilisation des endpoints API, la latence, les taux d'erreur et les profils d'utilisation avec le middleware Express ou des appels manuels.
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,
});Ce qui est suivi
Méthode HTTP, modèle d'endpoint, code de statut et durée. Les corps de requête/réponse, les en-têtes, les paramètres de requête et les paramètres de chemin ne sont jamais envoyés. Utilisez des modèles d'endpoint (/api/users/:id) et non des chemins réels (/api/users/abc123).
Référence API
Tous les endpoints d'analytique acceptent les requêtes GET avec des paramètres de requête. Authentifiez-vous avec Authorization: Bearer <api_key>.
Ingestion d'événements
POST /api/eventIngérer un événement (web, CLI, MCP ou API). Retourne 202.Les événements web doivent référencer un site enregistré et l'URL de l'événement doit correspondre au domaine du site. Les événements CLI, MCP et API exigent Authorization: Bearer [api_key]; les en-têtes user-agent et client-IP transférés ne sont approuvés qu'après validation de cette clé pour le site.
{
"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" }
}Intérêt d'inscription
POST /api/waitlistCapturer les inscriptions publiques et envoyer un courriel à farbour@paraito.ca pour chaque nouveau prospect. L’alerte comprend des indices clairement identifiés sur le nom et l’organisation dérivés de l’adresse, l’état du compte, l’intérêt du même domaine et un lien vers la fiche d’administration. Un doublon ne déclenche pas une autre alerte.Temps réel et heartbeat
GET /api/analytics/live?activity=1&cursor=…Nombre de visiteurs en direct. Ajoutez activity=1 pour les événements humains récents, les identifiants de visiteurs actifs, les objectifs et un curseur réutilisable. Accepte ?siteId=...POST /api/heartbeatRecevoir les heartbeats du navigateur pour le suivi des visiteurs en directPOST /api/hAlias furtif pour /api/heartbeat (résistant aux bloqueurs de publicités)Endpoints de requête
Tous acceptent ?siteId=...&from=YYYY-MM-DD&to=YYYY-MM-DD. Les endpoints de liste acceptent aussi limit=all lorsque vous avez besoin du jeu complet pour la pagination ou la recherche.
Les routes de trafic humain excluent par défaut le trafic automatisé connu et détecté avec une forte confiance. Utilisez includeBots=true pour obtenir les totaux non filtrés. La réponse d’aperçu inclut trafficFilter afin de rendre l’exclusion vérifiable.
Analytique web
GET /api/analytics/overviewVisiteurs, pages vues, sessions + % de variation et hasPreviousPeriodData pour les fenêtres de comparaison videsGET /api/analytics/pages?limit=allPages par nombre de visiteurs. Ajoutez limit=all pour retourner la liste complète consultable.GET /api/analytics/sources?limit=allSources de trafic avec détection IAGET /api/analytics/timeseriesTendance quotidienne visiteurs/pages vuesGET /api/analytics/ai-trafficRépartition des référencements IA par plateformeGET /api/analytics/bots?limit=allTrafic robots/crawlersGET /api/analytics/countries?limit=allVisiteurs par paysGET /api/analytics/devicesRépartition par type d'appareilGET /api/analytics/browsers?limit=allRépartition par navigateurGET /api/analytics/visitors?limit=allListe des visiteurs avec activitéGET /api/analytics/visitors/[visitorId]Profil avec première attribution, sessions, cycle de vie et chronologiePATCH /api/analytics/visitors/[visitorId]Mettre à jour l'identité et le cycle de vie (éditeur ou administrateur)GET /api/analytics/visitors/[visitorId]/propertiesLire toutes les propriétés clé/valeur d'un visiteur, avec la source de chacunePATCH /api/analytics/visitors/[visitorId]/propertiesÉcrire ou supprimer des propriétés de visiteur ; une valeur null supprime la clé (Éditeur ou Admin)POST /api/visitor-propertiesPoint d'accès public utilisé par setProperties() du tracker ; le visiteur est déduit de la requête, jamais fourni par l'appelantGET /api/analytics/events?limit=allÉvénements personnalisésGET /api/analytics/campaigns?limit=allAttribution automatique des URL de campagne (UTM + identifiants de clic)GET /api/analytics/campaigns/[campaign]Détail d'une seule campagne — qualité des visites (taux de rebond, durée moyenne, score de qualité par rapport à la moyenne du site), performance des variantes et des mots-clés, répartitions par appareil, navigateur et pays, profil horaire, événements personnalisésGET /api/analytics/campaigns/[campaign]/visitorsLes personnes amenées par une campagne, avec pour chacune la page d'arrivée, la variante, l'appareil, le pays et l'activité après le clicGET /api/analytics/keywords?limit=allMots-clés (utm_term) agrégés par campagne avec qualité des visites (taux de rebond, durée moyenne) et attribution de campagne/sourceGET /api/analytics/marketingPerformance marketing : campagnes, pages d’atterrissage, mix de canaux, trafic de campagne vs autre traficGET /api/analytics/channelsRépartition par canalGET /api/analytics/session-statsStatistiques de sessionsGET /api/analytics/sessions?limit=allListe des sessionsAnalytique CLI
GET /api/analytics/cli-overviewInvocations, appelants, taux de succèsGET /api/analytics/cli-commands?limit=allCommandes les plus utiliséesGET /api/analytics/cli-timeseriesActivité CLI quotidienneAnalytique MCP
GET /api/analytics/mcp-overviewInvocations, appelants, taux de succèsGET /api/analytics/mcp-tools?limit=allOutils les plus utilisésGET /api/analytics/mcp-clients?limit=allRépartition par clientGET /api/analytics/mcp-timeseriesActivité MCP quotidienneAnalytique API
GET /api/analytics/api-overviewInvocations, appelants, taux d'erreurGET /api/analytics/api-endpoints?limit=allEndpoints les plus sollicitésGET /api/analytics/api-timeseriesActivité API quotidienneConversion Goals
GET /api/analytics/goalsList all conversion goals with conversions, unique converters, and conversion ratesPOST /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 automationPATCH /api/analytics/goals/[goalId]Update a conversion goal definitionDELETE /api/analytics/goals/[goalId]Delete a conversion goalGET /api/analytics/goals/suggestAnalyze traffic patterns and suggest high-value conversion targetsBuilder
GET /api/builders/dashboardsLister les dashboards personnalisés enregistrés d'un site et son menu latéral de dashboardsPOST /api/builders/dashboardsCréer un dashboard personnaliséGET /api/builders/dashboards/[dashboardId]Obtenir un dashboard personnaliséPATCH /api/builders/dashboards/[dashboardId]Mettre à jour un dashboard personnaliséDELETE /api/builders/dashboards/[dashboardId]Supprimer un dashboard personnaliséGET /api/builders/reportsLister les modèles de rapport enregistrésPOST /api/builders/reportsCréer un modèle de rapportGET /api/builders/reports/[reportId]Obtenir un modèle de rapportPATCH /api/builders/reports/[reportId]Mettre à jour un modèle de rapportDELETE /api/builders/reports/[reportId]Supprimer un modèle de rapportPOST /api/builders/reports/previewPrévisualiser le plan d'un rapportClassements de recherche et visibilité IA
GET /api/analytics/brandRapport de visibilité des classements de rechercheGET /api/analytics/brand/historyDonnées historiques de classementGET /api/analytics/brand/compareComparaison avec les concurrentsGET /api/analytics/brand/alertsRègles d'alerte de classementGET /api/analytics/brand/exportExporter les données de classementGET /api/analytics/backlinksProfil de backlinksGET /api/analytics/ai-mentionsMentions de marque par chatbots IAGET /api/analytics/ai-mentions/historyHistorique des mentions IAPulse AI
GET /api/pulse/insightsAnomalies, tendances, opportunités et variations par domaineGET /api/pulse/healthScore de santé produit (0-100)GET /api/pulse/briefingBriefing quotidien ou hebdomadaireGET /api/pulse/forecastPrévision de trafic/utilisationGET /api/pulse/compareComparaison de périodesGET /api/pulse/alertsLister les alertes de surveillancePOST /api/pulse/alertsCréer une règle d'alerteDELETE /api/pulse/alertsSupprimer une règle d'alerteGET /api/pulse/notificationsObtenir les notificationsPATCH /api/pulse/notificationsMarquer les notifications comme luesPOST /api/pulse/chatChat Pulse en continu avec des réponses adaptatives liées aux visiteursGET /api/pulse/conversationsLister vos fils de discussion Pulse pour un sitePOST /api/pulse/conversationsDémarrer un nouveau fil de discussion PulseGET /api/pulse/conversations/[id]Un fil avec tout son historique de messagesPATCH /api/pulse/conversations/[id]Renommer un fil de discussionDELETE /api/pulse/conversations/[id]Supprimer une discussion et ses messagesGET /api/pulse/screenshotCapturer une page d’atterrissage de votre site comme image authentifiée et de même origineGET /api/analytics/ad-spendDépenses de campagne rapprochées du trafic mesuréGET /api/integrations/adsLister les comptes publicitaires connectés d'un sitePOST /api/integrations/adsConnecter un compte publicitaire Meta avec un jeton d'utilisateur systèmePOST /api/integrations/ads/syncRécupérer les dépenses maintenant plutôt qu'attendre la synchronisation nocturne