Chapter 06 / 14
API reference
Contract shape
Sanic owns /api/v1/* and selected public pages. JSON errors have stable status families and correlation IDs. Request bodies are bounded before parsing. Unknown fields are rejected on security-sensitive routes. Streaming responses use bounded NDJSON or WebSocket frames with explicit event types.
Authentication and CORS
Public preparation routes can be anonymous. Account and operator routes require their own bearer-token class and server-side session. Presentation routes accept only the exact configured slides origins and never credentials. Preflight responses list only the method and headers a route needs; wildcard origins are rejected.
Important public surfaces
- Health and readiness distinguish process availability from dependency readiness.
- Questionnaire and results expose deterministic guidance and provenance.
- Form conversation returns questions, field bindings, ownership, and completion state.
- Form PDF returns a transient downloadable document with
Cache-Control: no-store. - Demo capabilities, coverage, and voice-call streams are bounded synthetic surfaces.
Idempotency and failures
Effectful tool and telephony requests use stable request identities. Validation failures are 4xx; disabled capability gates are 503; internal failures are redacted 5xx responses. Provider timeouts and circuit state do not leak vendor payloads. Clients may retry only contracts documented as idempotent.
The generated route inventory shipped with this site is the mechanical reference for methods and paths; service modules remain the authority for semantics.
| Method | Path | Framework |
|---|---|---|
| DELETE | /api/v1/account | Sanic |
| GET | /api/v1/account | Sanic |
| GET | /api/v1/account/export | Sanic |
| POST | /api/v1/account/password | Sanic |
| POST | /api/v1/account/password-reset | Sanic |
| POST | /api/v1/account/password-reset/confirm | Sanic |
| POST | /api/v1/account/refresh | Sanic |
| POST | /api/v1/account/register | Sanic |
| POST | /api/v1/account/sign-in | Sanic |
| POST | /api/v1/account/sign-out | Sanic |
| POST | /api/v1/account/sign-out-everywhere | Sanic |
| POST | /api/v1/account/verify-email | Sanic |
| POST | /api/v1/account/verify-email/confirm | Sanic |
| GET | /api/v1/address/autocomplete | Sanic |
| GET | /api/v1/address/reverse | Sanic |
| GET | /api/v1/admin/audit | Sanic |
| POST | /api/v1/admin/auth/logout | Sanic |
| POST | /api/v1/admin/auth/refresh | Sanic |
| GET | /api/v1/admin/auth/session | Sanic |
| POST | /api/v1/admin/auth/sign-in | Sanic |
| GET | /api/v1/admin/dashboard | Sanic |
| GET | /api/v1/admin/issues | Sanic |
| GET | /api/v1/admin/municipalities | Sanic |
| GET | /api/v1/admin/municipalities/<ags:str> | Sanic |
| GET | /api/v1/admin/revisions | Sanic |
| POST | /api/v1/admin/revisions | Sanic |
| POST | /api/v1/admin/revisions/<revision_id:int>/publish | Sanic |
| POST | /api/v1/admin/revisions/<revision_id:int>/restore | Sanic |
| POST | /api/v1/admin/revisions/<revision_id:int>/review | Sanic |
| POST | /api/v1/admin/revisions/<revision_id:int>/withdraw | Sanic |
| GET | /api/v1/admin/summary | Sanic |
| GET | /api/v1/admin/template-assets/<asset_id:int> | Sanic |
| POST | /api/v1/admin/templates/<entity_key:path>/assets | Sanic |
| POST | /api/v1/checkout | Sanic |
| GET | /api/v1/checkout/status | Sanic |
| POST | /api/v1/contact | Sanic |
| GET | /api/v1/conversation/capabilities | Sanic |
| POST | /api/v1/conversation/metrics | Sanic |
| POST | /api/v1/conversation/ticket | Sanic |
| GET | /api/v1/demo/capabilities | Sanic |
| GET | /api/v1/demo/coverage | Sanic |
| POST | /api/v1/demo/voice-call | Sanic |
| POST | /api/v1/diagnostics | Sanic |
| POST | /api/v1/events | Sanic |
| POST | /api/v1/extract | Sanic |
| POST | /api/v1/form/conversation | Sanic |
| POST | /api/v1/form/pdf | Sanic |
| POST | /api/v1/form/preview | Sanic |
| GET | /api/v1/gmail/appointments | Sanic |
| POST | /api/v1/gmail/authorize | Sanic |
| GET | /api/v1/gmail/callback | Sanic |
| POST | /api/v1/gmail/disconnect | Sanic |
| GET | /api/v1/gmail/status | Sanic |
| GET | /api/v1/health | Sanic |
| GET | /api/v1/health/db | Sanic |
| GET | /api/v1/office/<office_id:str> | Sanic |
| DELETE | /api/v1/profile | Sanic |
| GET | /api/v1/profile | Sanic |
| PUT | /api/v1/profile | Sanic |
| GET | /api/v1/questionnaire | Sanic |
| GET | /api/v1/ready | Sanic |
| POST | /api/v1/results | Sanic |
| GET | /api/v1/scope-tree | Sanic |
| POST | /api/v1/telephony/calls | Sanic |
| GET | /api/v1/telephony/calls/<call_id:str> | Sanic |
| POST | /api/v1/telephony/calls/<call_id:str>/dtmf | Sanic |
| POST | /api/v1/telephony/calls/<call_id:str>/hangup | Sanic |
| POST | /api/v1/telephony/calls/<call_id:str>/recording | Sanic |
| POST | /api/v1/telephony/calls/<call_id:str>/recording-consent | Sanic |
| POST | /api/v1/telephony/calls/<call_id:str>/recording/revoke | Sanic |
| POST | /api/v1/telephony/calls/<call_id:str>/transfer | Sanic |
| POST | /api/v1/telephony/webhooks/events | Sanic |
| GET | /api/v1/templates/<entity_key:path>/pdf | Sanic |
| DELETE | /api/v1/voice/<consent_id:int> | Sanic |
| POST | /api/v1/voice/<consent_id:int>/synthesize | Sanic |
| POST | /api/v1/voice/enroll | Sanic |
| GET | /api/v1/voice/export | Sanic |