REST API
Everything in Cortex is a REST API call. The TypeScript SDK is a convenience layer over this exact API — so if you work in a language without an official SDK, you can build your own client against it with no loss of capability.
Open the interactive REST referenceBase URL
All endpoints are served under the /api prefix.
Authentication
Send credentials on every request. Two mechanisms are relevant to integrators:
API key (server-to-server) — either header form works:
JWT bearer token (dashboard/user sessions):
Create and scope API keys in the dashboard. See Authentication for the full picture (including scopes).
Conventions
- Project scoping — most resources live under a project:
/api/projects/{projectId}/sessions,/api/projects/{projectId}/gatherings, and so on. See Multi-Tenancy & Projects. - JSON — request and response bodies are
application/json. - Create / update / delete carry identifiers in the path and payloads in the
body;
GETendpoints use query parameters for optional filtering and pagination. - Errors use standard HTTP status codes —
401/403for auth,404for missing resources,422for validation,429for rate limits. The SDK maps these to typed errors.
Endpoint groups
The reference is organized by resource. The main groups:
| Group | What it covers |
|---|---|
| Sessions | Create, start, stop and read transcription sessions and their messages |
| Messages | Transcripts for a session (and debug audio) |
| Participants | Per-project speaker identities |
| Gatherings | Lobbies, appointments and open spaces; members and invitations |
| Sanctions | Moderation actions and their audit trail |
| Plugins / Plugin Instances | The plugin catalog and per-project activations |
| Functions | Serverless function settings, versions and deployment |
| Webhooks | Event subscriptions and the delivery log |
| Events | The real-time event stream (SSE) |
| API Keys / App Settings / Voice / Auth | Account, project configuration and tokens |
Building your own client
The reference is generated directly from the Cortex OpenAPI specification, so it’s an exact, machine-readable contract. You can:
- Point a generator (OpenAPI Generator,
openapi-typescript, etc.) at the spec to scaffold a client in your language. - Use the “Try it” console on each endpoint page to experiment with live requests.
The spec is available at https://ots.odin.4players.io/api/docs-json.
Real-time
For live updates, the API exposes a Server-Sent Events stream rather than requiring you
to poll. See Events & Real-time — and note the SDK’s
watch() builds on it for you.