05

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.

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,
});

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).

09

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.

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" }
}

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 direct
POST /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 vides
GET /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 IA
GET /api/analytics/timeseriesTendance quotidienne visiteurs/pages vues
GET /api/analytics/ai-trafficRépartition des référencements IA par plateforme
GET /api/analytics/bots?limit=allTrafic robots/crawlers
GET /api/analytics/countries?limit=allVisiteurs par pays
GET /api/analytics/devicesRépartition par type d'appareil
GET /api/analytics/browsers?limit=allRépartition par navigateur
GET /api/analytics/visitors?limit=allListe des visiteurs avec activité
GET /api/analytics/visitors/[visitorId]Profil avec première attribution, sessions, cycle de vie et chronologie
PATCH /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 chacune
PATCH /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'appelant
GET /api/analytics/events?limit=allÉvénements personnalisés
GET /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és
GET /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 clic
GET /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/source
GET /api/analytics/marketingPerformance marketing : campagnes, pages d’atterrissage, mix de canaux, trafic de campagne vs autre trafic
GET /api/analytics/channelsRépartition par canal
GET /api/analytics/session-statsStatistiques de sessions
GET /api/analytics/sessions?limit=allListe des sessions

Analytique CLI

GET /api/analytics/cli-overviewInvocations, appelants, taux de succès
GET /api/analytics/cli-commands?limit=allCommandes les plus utilisées
GET /api/analytics/cli-timeseriesActivité CLI quotidienne

Analytique MCP

GET /api/analytics/mcp-overviewInvocations, appelants, taux de succès
GET /api/analytics/mcp-tools?limit=allOutils les plus utilisés
GET /api/analytics/mcp-clients?limit=allRépartition par client
GET /api/analytics/mcp-timeseriesActivité MCP quotidienne

Analytique API

GET /api/analytics/api-overviewInvocations, appelants, taux d'erreur
GET /api/analytics/api-endpoints?limit=allEndpoints les plus sollicités
GET /api/analytics/api-timeseriesActivité API quotidienne

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/dashboardsLister les dashboards personnalisés enregistrés d'un site et son menu latéral de dashboards
POST /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és
POST /api/builders/reportsCréer un modèle de rapport
GET /api/builders/reports/[reportId]Obtenir un modèle de rapport
PATCH /api/builders/reports/[reportId]Mettre à jour un modèle de rapport
DELETE /api/builders/reports/[reportId]Supprimer un modèle de rapport
POST /api/builders/reports/previewPrévisualiser le plan d'un rapport

Classements de recherche et visibilité IA

GET /api/analytics/brandRapport de visibilité des classements de recherche
GET /api/analytics/brand/historyDonnées historiques de classement
GET /api/analytics/brand/compareComparaison avec les concurrents
GET /api/analytics/brand/alertsRègles d'alerte de classement
GET /api/analytics/brand/exportExporter les données de classement
GET /api/analytics/backlinksProfil de backlinks
GET /api/analytics/ai-mentionsMentions de marque par chatbots IA
GET /api/analytics/ai-mentions/historyHistorique des mentions IA

Pulse AI

GET /api/pulse/insightsAnomalies, tendances, opportunités et variations par domaine
GET /api/pulse/healthScore de santé produit (0-100)
GET /api/pulse/briefingBriefing quotidien ou hebdomadaire
GET /api/pulse/forecastPrévision de trafic/utilisation
GET /api/pulse/compareComparaison de périodes
GET /api/pulse/alertsLister les alertes de surveillance
POST /api/pulse/alertsCréer une règle d'alerte
DELETE /api/pulse/alertsSupprimer une règle d'alerte
GET /api/pulse/notificationsObtenir les notifications
PATCH /api/pulse/notificationsMarquer les notifications comme lues
POST /api/pulse/chatChat Pulse en continu avec des réponses adaptatives liées aux visiteurs
GET /api/pulse/conversationsLister vos fils de discussion Pulse pour un site
POST /api/pulse/conversationsDémarrer un nouveau fil de discussion Pulse
GET /api/pulse/conversations/[id]Un fil avec tout son historique de messages
PATCH /api/pulse/conversations/[id]Renommer un fil de discussion
DELETE /api/pulse/conversations/[id]Supprimer une discussion et ses messages
GET /api/pulse/screenshotCapturer une page d’atterrissage de votre site comme image authentifiée et de même origine
GET /api/analytics/ad-spendDépenses de campagne rapprochées du trafic mesuré
GET /api/integrations/adsLister les comptes publicitaires connectés d'un site
POST /api/integrations/adsConnecter un compte publicitaire Meta avec un jeton d'utilisateur système
POST /api/integrations/ads/syncRécupérer les dépenses maintenant plutôt qu'attendre la synchronisation nocturne