All API requests use the following base URL:Documentation Index
Fetch the complete documentation index at: https://docs.cartesia.ai/llms.txt
Use this file to discover all available pages before exploring further.
https://api.cartesia.ai. (For WebSockets the corresponding protocol is wss://.)
Always send a Cartesia-Version header
Each request you send our API should have a Cartesia-Version header containing the date (YYYY-MM-DD) when you tested your integration. For WebSockets, you can alternately use the ?cartesia_version query parameter, which will take precedence.
This will help us provide you with timely deprecation notices and enable us to provide automatic backwards compatibility where possible.
For a given Cartesia-Version, we will preserve existing input and output fields, but we may make non-breaking changes, such as:
- Add optional request fields.
- Add additional response fields.
- Change conditions for specific error types
- Add variants to enum-like output values.
Use API keys when making requests from a server
Create a new API key at play.cartesia.ai/keys. IncludeAuthorization: Bearer <api_key> in the headers of your requests.
Use access tokens when making requests from a client app
Never use API keys in client apps; they grant full account access and can be extracted from browser or mobile code. Instead, your server can generate a short-lived access token and send it to the client. See the Access Token API Reference for how to generate one.-
For HTTP requests, include
Authorization: Bearer <access_token>in the headers. -
For WebSocket connections, pass the token as the
?access_token=<access_token>query parameter since browsers can’t set headers on WebSocket handshakes.
Check response codes
Our API uses standard HTTP response codes; refer to httpstatuses.io.Parse structured error responses
ForCartesia-Version values on or after 2026-03-01, Cartesia returns structured JSON errors.
For the full error reference (all current error codes, schemas, and field nullability), see API Errors.
HTTP error response (Cartesia-Version 2026-03-01 and newer)
error_code: machine-readable identifier for client logic; can benull.title: short human-readable summary.message: detailed human-readable explanation.request_id: request identifier for support/debugging.doc_url: optional link to docs for the specific error (when available).
error_code values today include quota_exceeded, concurrency_limited, voice_model_mismatch, voice_not_found, model_not_found, language_not_supported, file_too_large, unsupported_audio_format, and plan_upgrade_required.
WebSocket and SSE error events include the same error fields plus transport context:
WebSocket/SSE error event (Cartesia-Version 2026-03-01 and newer)
context_idappears for TTS WebSocket errors when available.status_codeis included in WebSocket/SSE error payloads; for HTTP, status remains in the HTTP response status line.request_idis always a string; HTTP and SSE request IDs are UUIDs, while WebSocket request IDs may include additional context.
Cartesia-Version values before 2026-03-01 (and invalid versions), legacy error formats are returned instead:
- HTTP errors are plain text in
Title: Messageformat. - WebSocket/SSE errors use legacy envelopes with string-only error messages.
Pass data according to the method
All GET requests use query parameters to pass data. All POST requests use a JSON body ormultipart/form-data.