When to use it

Sound like one company

One cloned voice across every call, every notification and every recording, instead of a different stock voice per surface.

Sound like a person

Clone a founder, a presenter, a support lead — with their consent — and the product speaks in a voice customers already know.

Speak another language as yourself

A cloned voice carries into live interpretation.

Just need a voice?

The built-in library covers most cases and needs no upload.

The invariant

Every voice resolves to a stored reference clip. This is not a convention — it’s what keeps a voice stable.
The TTS model with no speaker conditioning samples a new random voice on every generate() call. In a batch job you’d notice a strange timbre; in a realtime session you get a caller whose agent changes voice between sentences. So:
  • Cloned voices store the audio you uploaded.
  • Built-in voices are designed once through the voice-design vocabulary, and the generated clip is frozen as their reference.
Two rules follow, and they matter if you’re working on this path:
  1. Never send prompt_key without ref_audio_url — the serving backends only read the cache key inside that branch.
  2. For realtime, write the voice to session.audio.output.voice. Nothing else is read.

Clone a voice

Three to ten seconds of clean speech is enough. Longer is not better; clean is better. One speaker, no music, no overlap — see Voice cloning best practices for what that means in a recording booth and why it matters so much. Cloning is a multipart/form-data upload, which the generated JSON client can’t express — create_voice is in the SDK but takes no arguments, so post the form directly:
Cloning is asynchronous — the voice appears immediately with a status that moves to ready once the reference clip is transcribed and encoded. Poll client.get_voice(voice_id) or just watch the library.

Built-in voices

Built-in voices are global rows shared across organizations, seeded per environment:
Idempotent, but it needs a live TTS backend — it synthesizes each voice’s reference clip. Until it runs, the library is empty and realtime falls back to the serving backend’s pinned default. If voices look missing in a fresh environment, this is almost always why.

Design a voice

Rather than cloning, describe one. The accepted vocabulary comes from the backend:

Preview

Preview synthesizes one fixed sentence with the voice and streams back mp3 — there is no text to choose, which is what makes two voices comparable. It isn’t in the SDK yet (the SDK decodes JSON, and this returns audio):
To hear arbitrary text in a voice, use text to speech with voice set to the voice id.

Going further

Voice cloning best practices

What makes a clip good, and the two failure modes that look like a bad model.

Text to speech

Realtime