{"auth":"Authorization: Bearer <api key> — per-tenant keys, operator-minted.","description":"Event ingress and observability for drovr journeys: POST tenant contact events, read the committed transition receipts back.","docs":"/llms.txt","journeys":["value-path-skills-course","contact-directory","crash-course-evergreen-offer","shadow-newsletter"],"mcp":{"accept":"application/json, text/event-stream","card":"/.well-known/mcp.json","endpoint":"/mcp","protocolVersion":"2026-07-28","requiredMeta":["io.modelcontextprotocol/protocolVersion","io.modelcontextprotocol/clientCapabilities"],"codeMode":{"capabilities":["describe_surface","get_contact","get_receipts","get_review","get_status","get_wakes","inspect_metric","list_tenant_actors","resolve_directory_identities","trace_contact"],"tools":["search","execute","execute_writes"],"writes":["post_event","post_event_batch","redrive_contact","release_journey","seed_contact_directory"]}},"openapi":"/openapi.json","permissions":{"DELETE /journeys/{id}/hold":"operate","GET /contacts":"read","GET /contacts/trace":"read","GET /journeys/{id}/hold":"read","GET /metrics/{name}":"read","GET /receipts":"read","GET /review":"read","GET /status":"read","GET /wakes":"read","POST /contacts/redrive":"operate","POST /events":"operate","POST /events/batch":"operate","POST /journeys/{id}/hold":"operate","POST /wakes/poke":"operate","POST /journeys/contact-directory/identities":"read","POST /journeys/contact-directory/seed":"operate"},"rateLimits":{"auth":{"appliesTo":"Per client IP, on /api/auth/* (sign-in and OAuth).","period":60},"ip":{"appliesTo":"Per client IP, on requests without an API key, and on requests whose key is refused.","period":60},"key-read":{"appliesTo":"Per API key, on read routes and POST /mcp.","period":60},"key-write":{"appliesTo":"Per API key, on routes that operate a tenant.","period":10}},"routes":["GET /","GET /llms.txt","GET /openapi.json","GET /.well-known/mcp.json","GET /.well-known/oauth-protected-resource/mcp","GET /.well-known/oauth-authorization-server/api/auth","GET /health","GET /api/auth/*","POST /api/auth/*","GET /hud","GET /hud/account","POST /hud/labels","GET /contacts?contact=&journey=","GET /contacts/trace?contact=&journey=&since=&cursor=&confirm=actor","POST /contacts/redrive?contact=&journey=","POST /events","POST /events/batch","POST /journeys/contact-directory/seed (body: {afterId?, createdAfter?, limit?, dryRun?})","POST /journeys/contact-directory/identities (body: {kitSubscriberIds: string[] up to 1000})","GET /receipts?contact=&journey=&limit=","GET /tenants/{tenant}/actors?cursor=&limit= (operator)","POST /tenants/{tenant}/actors/retire (operator; max 200)","POST /tenants/{tenant}/provision (operator)","GET /review?since=&until=&compare=previous","GET /metrics/{name}?since=&until=","GET /wakes?contact=&journey=&overdue=&limit=","POST /wakes/poke (body: {actors: [{contactId, journeyId}] up to 50} or {overdue: minutes, limit?: up to 200})","GET /status?deadline=&window=","POST /unsubscribe","GET /unsubscribe?t=","GET /unsubscribe/state?t=","POST /journeys/{id}/hold","DELETE /journeys/{id}/hold","GET /journeys/{id}/hold","POST /mcp (MCP streamable HTTP, protocol 2026-07-28)","GET /parties/hud/{tenant} (WebSocket)"],"service":"drovr-api"}