The API is versioned under /v1. FastAPI exposes generated OpenAPI docs at /docs when the API server is running.
The no-dependency local product demo is available at /demo when the API server is running.
Local demo routes accept the built-in demo principal when no Authorization header is present.
API-key protected modular routes use:
X-API-Key: dev-api-key
The frontend reads this from NEXT_PUBLIC_DEMO_API_KEY and defaults to dev-api-key for local demo mode.
POST /v1/demo/analyzePOST /v1/demo/reportsGET /v1/demo/reportsDELETE /v1/demo/reportsGET /v1/demo/reports/exportPOST /v1/demo/reports/importGET /v1/demo/reports/summaryPOST /v1/demo/scenarioPOST /v1/organizationsGET /v1/mePOST /v1/brand-packsGET /v1/brand-packsPOST /v1/claim-evidenceGET /v1/claim-evidencePOST /v1/api-keysGET /v1/api-keysDELETE /v1/api-keys/{api_key_id}GET /v1/audit-logs
POST /v1/briefsGET /v1/briefsGET /v1/briefs/{brief_id}POST /v1/variants/generatePOST /v1/prompt-runsGET /v1/prompt-runs
POST /v1/creative-treatmentsGET /v1/creative-treatmentsGET /v1/creative-treatments/{creative_id}POST /v1/creative-treatments/{creative_id}/approvePOST /v1/creative-treatments/{creative_id}/reject
POST /v1/experimentsGET /v1/experimentsGET /v1/experiments/{experiment_id}GET /v1/experiments/{experiment_id}/assignGET /v1/experiments/{experiment_id}/insightsPOST /v1/experiments/{experiment_id}/startPOST /v1/experiments/{experiment_id}/pausePOST /v1/experiments/{experiment_id}/completeGET /v1/experiments/{experiment_id}/results
POST /v1/auth/registerPOST /v1/auth/loginPOST /v1/auth/logoutGET /v1/auth/session
GET /v1/eventsGET /v1/events/healthGET /v1/events/health/historyPOST /v1/events/ingest
GET /v1/measurement/summaryPOST /v1/measurement/mmm-runsGET /v1/measurement/mmm-runsPOST /v1/measurement/uplift-runsGET /v1/measurement/uplift-runsPOST /v1/uplift/runsGET /v1/uplift/runs/{run_id}POST /v1/mmms/runsGET /v1/mmms/runs/{run_id}
POST /v1/banditsPOST /v1/bandits/{bandit_id}/decidePOST /v1/bandits/{bandit_id}/update
POST /v1/connectorsGET /v1/connectorsPOST /v1/connectors/{connector_id}/sync
Core demo routes return the resource directly, for example GET /v1/briefs returns a JSON array.
Modular repository-backed routes return envelopes:
{
"data": [],
"meta": {
"total": 0,
"limit": 50,
"offset": 0
}
}