{"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","eventBatchRetryClasses":["d1-budget","d1-overload","do-reset","unknown"],"featureFlags":[{"authority":"legacy-worker-binding","catalogDefault":"shadow","description":"Fold Kit inbound into actors rather than recording shadow evidence only.","evaluation":{"reason":"not-wired","revision":null,"servingValue":null},"key":"kit-webhook-fold","lifecycle":{"kind":"release","created":"2026-10-04","owner":"drovr desk","removalOutcome":"Remove the Kit fold/shadow branch after the Kit-retirement lane qualifies retirement.","removeBy":"2026-11-03"},"next":{"inspect":"/feature-flags/inspect?key=kit-webhook-fold","list":"/feature-flags"},"scopeSchema":{"dialect":"draft-2020-12","schema":{"type":"object","properties":{"_tag":{"type":"string","enum":["global"]},"stage":{"type":"string","minLength":1},"tenantId":{"type":"string","minLength":1}},"required":["_tag","stage","tenantId"],"additionalProperties":true},"definitions":{}},"valueSchema":{"dialect":"draft-2020-12","schema":{"type":"string","enum":["shadow","fold"]},"definitions":{}}}],"journeys":["value-path-skills-course","contact-directory","crash-course-evergreen-offer","shadow-newsletter","double-opt-in"],"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":["conversion_funnel","describe_surface","get_contact","get_feature_flag","get_receipts","get_review","get_status","get_vitals","get_wakes","inspect_metric","list_feature_flags","list_stranded_intents","list_tenant_actors","list_unsuppressed_directory_stops","resolve_directory_identities","trace_contact"],"tools":["search","execute","execute_writes"],"writes":["post_event","post_event_batch","record_signup","redrive_contact","release_journey","seed_contact_directory"]}},"openapi":"/openapi.json","permissions":{"DELETE /journeys/{id}/hold":"operate","GET /contacts":"read","GET /contacts/trace":"read","GET /content/messages":"read","GET /content/messages/{messageId}":"read","GET /content/messages/{messageId}/versions/{version}/render":"read","GET /content/publishes":"read","GET /content/pushes/{commit}":"read","GET /conversion":"read","GET /corpus/pushes/{visibility}/{commit}":"read","GET /corpus/search":"read","GET /corpus/sources/{id}":"read","GET /email-delivery":"read","GET /journeys/{id}/hold":"read","GET /metrics/{name}":"read","GET /receipts":"read","GET /review":"read","GET /status":"read","GET /stranded-intents":"read","GET /vitals":"read","GET /wakes":"read","POST /contact-sync/heartbeat":"operate","POST /contacts/redrive":"operate","POST /content/messages/new":"read","POST /content/messages/validate":"read","POST /events":"operate","POST /events/batch":"operate","POST /journeys/{id}/hold":"operate","POST /signups":"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, on requests whose key is refused, and on OAuth access tokens before they verify.","period":60},"key-read":{"appliesTo":"Per API key on read routes and POST /mcp; per OAuth grant (person and tenant, once its token verifies) on POST /mcp.","period":60},"key-write":{"appliesTo":"Per API key, on routes that operate a tenant.","period":10},"unsubscribe":{"appliesTo":"Per unsubscribe token, on one-click POST /unsubscribe (RFC 8058) with a token that verifies, instead of the client IP.","period":10}},"routes":["GET /","GET /llms.txt","GET /openapi.json","GET /.well-known/mcp.json","GET /.well-known/agent-configuration","GET /.well-known/oauth-protected-resource/mcp","GET /.well-known/oauth-authorization-server/api/auth","GET /oauth/device","POST /oauth/device","GET /oauth/tenant","POST /oauth/tenant","GET /oauth/consent","POST /oauth/consent","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 /events/redrive (operator; keys max 50, actors max 5)","POST /events/redrive/parked/pass (operator)","POST /signups","POST /contact-sync/heartbeat","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 /email-delivery?contact=&email=","GET /content/messages","GET /content/messages/{messageId}","GET /content/messages/{messageId}/versions/{version}/render","GET /content/publishes?message=&status=&limit=","GET /content/pushes/{commit}","POST /content/messages/new","POST /content/messages/validate","GET /corpus/pushes/{visibility}/{commit}","GET /corpus/search?query=&mode=&types=&limit=&rerank=","GET /corpus/sources/{id}","GET /tenants/{tenant}/actors?cursor=&limit= (operator)","GET /tenants/{tenant}/directory-stops?cursor=&limit= (operator)","GET /tenants/{tenant}/unfolded-events?since=&until=&scope=&cursor=&limit= (operator)","POST /tenants/{tenant}/actors/retire (operator; max 200)","POST /tenants/{tenant}/content/messages/{messageId}/versions (operator)","POST /tenants/{tenant}/content/pushes/{commit}/reprocess (operator)","POST /tenants/{tenant}/content/repo (operator)","POST /tenants/{tenant}/corpus/repo (operator)","POST /tenants/{tenant}/links/targets (operator)","POST /tenants/{tenant}/migrations/{planId}/dry-run (operator)","POST /tenants/{tenant}/migrations/{planId}/apply (operator)","POST /tenants/{tenant}/migrations/{planId}/rollback (operator)","POST /tenants/{tenant}/provision (operator)","POST /tenants/{tenant}/profile-sources/{journey} (operator)","POST /tenants/{tenant}/provider-ramps/{journey} (operator)","POST /provider-sync/requeue (operator)","POST /value-path/stops/backfill (operator; max 50)","POST /confirmations/resend (operator)","GET /intake/signups?tenantId=&formId=&cursor=&limit= (operator)","GET /feature-flags","GET /feature-flags/inspect?key=","GET /review?since=&until=&compare=previous","GET /metrics/{name}?since=&until=","GET /wakes?contact=&journey=&overdue=&limit=","POST /webhooks/front (Front-signed)","POST /webhooks/kit/{tenant} (Kit-signed)","POST /webhooks/postshiba (PostShiba-signed)","POST /wakes/poke (body: {actors: [{contactId, journeyId}] up to 50} or {overdue: minutes, limit?: up to 200})","GET /vitals","GET /status?deadline=&window=","GET /conversion?journey=&from=&to=&anchor=&until=","GET /stranded-intents","POST /unsubscribe","GET /unsubscribe?t=","GET /unsubscribe/state?t=","POST /confirm","GET /confirm?t=","GET /confirm/world?t=","GET /confirm/state?t=","POST /confirm/resend","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"}