GET /voices
Returns the voices available to your organization (the shared library plus any you’ve cloned). The list is paginated.Query Parameters
Response
Every library voice has a full dialect tag. The library has 45 voices across 14 language tags:
my-MM is Burmese and Malay is ms-MY — the tags are easy to mix up.
The language filter is an exact match, so filter with the full tag (?language=en-GB); ?language=en won’t match en-GB voices.
Example
GET /voices/{id}
Fetch metadata for a single voice. Supports expand[]=preview_file_url, which makes it the way to poll for a new clone’s preview.
DELETE /voices/{id}
Remove a cloned voice you own.
POST /voices/clone
Clone a voice from a reference audio clip (multipart upload). Use the returned voiceid in your /tts/bytes, /tts/sse, and /tts/websocket requests.
Form Fields
Audio Requirements
- Format: WAV is recommended. FLAC, OGG, MP3, and M4A also work.
- Length: 1–300 seconds.
- Size: under 20 MB.
Recording Tips
- 10–20 seconds of clean speech works best. Shorter clips sound noticeably less like the speaker.
- Record at the pace you want. The voice takes on the clip’s pace and pauses.
Using a Transcript
If you sendtranscript, the clone follows the speaker more closely, including their pace. Two conditions:
- The transcript must match the audio exactly.
- It’s ignored if the clip still has 20 seconds or more of speech after silence is trimmed. Send a clip under 20 seconds when you use a transcript.
transcript isn’t one of the Cartesia SDK’s clone parameters, so pass it as an extra field: extra_body in Python, or an extra key with a type cast in TypeScript. Don’t put the transcript in Cartesia’s tagline field.
Language
language must be a well-formed BCP-47 tag, such as en-US, en-GB, es-MX, th-TH, or ms-MY. It’s stored as metadata, used for listing and filtering voices, and doesn’t change how the voice sounds. The value is canonicalized on save (en-us → en-US). A malformed tag (en_US, en-USA, english_, 123) is rejected with invalid_language (400):
Preview
After a clone, a 48 kHz preview of the voice renders in the background, usually within a few seconds. The clone response returns before the preview exists and has nopreview_file_url field. If a render fails, it’s retried automatically within about 5 minutes.
Until the preview is ready, preview_file_url is null. Poll GET /voices/{id}?expand[]=preview_file_url, or show the preview as pending. Once it’s ready, preview_file_url is a signed URL you can play directly in a browser.
Errors
Clone errors come in two shapes. Audio problems return{ "detail": "..." }: 400 for a clip that can’t be decoded or is under 1 second, 413 for an upload over 20 MB or a clip over 300 seconds, and 503 while the service is starting. Other errors (invalid_language, clone_failed, db_unavailable) use { "error": "...", "message": "..." }. See Voice cloning errors.
Choosing a Voice
Browse and preview voices in the Playground before integrating them. Pass the voiceid in the voice field: