HTTP API
HTTP API
Ingest is public. Reads take a Bearer API key. days and actor filter most query routes.
Base URL
Self-host default: http://localhost:8080. Hosted: your project URL. The dashboard talks to NEXT_PUBLIC_API_URL.
Authentication
Create a key under Settings → API keys (POST /api/keys). Send it on every authenticated route:
header
Authorization: Bearer v5_live_…Login (POST /api/auth/login) returns a JWT for the admin operator. The dashboard uses that. Agents and scripts should use API keys. Authentication.
Shared filters
| Query | Values | Applies to |
|---|---|---|
days | 1, 7, 30 | stats, breakdown, ai, goals |
actor | human, human_via_ai, ai_crawler, ai_agent, bot, all | same |
field | source, page, country, device | breakdown only |
Catalog
endpoints
- POST/api/waitlistPublic early-access request
- POST/api/auth/loginOperator login → JWT
- GET/api/meCurrent principal
- POST/api/eventBrowser events from v5.js
- POST/api/hitServer hits from the middleware
- GET/api/sites/{domain}/manifestPublic collection manifest
- GET/api/crawler-indexRecognised AI crawlers
- GET/api/sitesList sites
- POST/api/sitesCreate a site
- PATCH/api/sites/{id}Update a site
- GET/api/sites/{id}/statsTotals + daily series
- GET/api/sites/{id}/breakdownsource | page | country | device
- GET/api/sites/{id}/realtimeHumans in the last 5 minutes
- GET/api/sites/{id}/aiCrawlers, referrals, crawl→referral
- GET/api/sites/{id}/goalsGoal conversions
- POST/api/sites/{id}/goalsCreate a goal
- DELETE/api/sites/{id}/goals/{goalID}Delete a goal
- GET/api/sites/{id}/insightsGenerated insights
- GET/api/sites/{id}/anomaliesAnomaly flags
- GET/api/sites/{id}/exportExport aggregates as JSON
- POST/api/sites/{id}/importImport history from CSV
- GET/api/keysList API keys
- POST/api/keysCreate an API key
- DELETE/api/keys/{id}Revoke an API key
- PATCH/api/team/llmConfigure the insight provider
- GET/healthLiveness
- GET/js/v5.jsTracker script
Something off? Open an issue · Edit on GitHub

