Overview
Every Atlas voice is served two ways: a one-shot HTTP endpoint (POST /v1/audio/speech, OpenAI-compatible) and a WebSocket stream that returns audio sentence-by-sentence. Use the WebSocket service for interactive, real-time applications; use HTTP when you want a complete audio file per request.
HTTP endpoint reference
Full request/response reference for
POST /v1/audio/speech.Streaming reference
The WebSocket frame protocol for sentence-by-sentence audio.
Prerequisites
Account setup
- Sign in to the Atlas playground.
- Open API keys and create a key — the
sk_…plaintext is shown only once.
Required environment variables
Configuration
Request parameters
string
required
The voice id, e.g.
lylla. List available voices via /v1/models.string
required
The text to speak. May contain inline audio tags for laughs, pauses, and emotional delivery.
string
default:"wav"
Output audio format:
wav, mp3, pcm, opus, or flac. With pcm the HTTP response is streamed as it is synthesized.string
Accepted for OpenAI SDK compatibility but ignored — the voice selects the model. Pass any placeholder (e.g.
"atlas-tts").Response headers
Usage
Generate a clip (HTTP)
Stream sentence-by-sentence (WebSocket)
Python
Voice cloning
You can make your own voice from a short reference clip and its exact transcript, then use it like any other voice. Voices are cloned from the clip and its words together — cloning from the clip alone is not supported. Create clones from the API withPOST /v1/voices, or upload one in the playground.
Create a clone from the API
Send a WAV clip of 3–12 seconds of clean, single-speaker speech, base64-encoded, plusref_text: exactly what is said in it, word for word (fillers included). Include a name and confirm you have permission to clone the voice. The voice is saved to your account immediately.
cURL
id is the new voice id:
DELETE /v1/voices/{id}.
Create a clone in the playground
- In the Atlas playground, pick an English voice and click Upload your voice.
- Upload your clip, type exactly what is said in it, and confirm you have permission to clone the voice.
- Generate some speech to hear the result. When you are happy with it, give it a name and click Add to my library.
Use a clone
Saved clones appear in/v1/models with owned_by: "user". Pass the clone’s id as voice, the same as for a global voice:
Cloning is English-only. Multilingual (
indic-*) voices use fixed trained speakers and do not support cloning.Customizing speech
Delivery is controlled with inline tokens in theinput text — no SSML required.
Event tags insert a single transient sound:
ember voice uses free-form [bracket] cues instead ([chuckling], [whisper in small voice]). See the audio tags guide for both vocabularies, placement rules, and a worked example.
Notes
- The standard catalogue is English; Hindi voices are available to enterprise accounts — contact us for access.
- Hindi voices accept Devanagari or romanized Hindi (Hinglish) —
"Kya haal hai?"and"क्या हाल है?"both work; romanized input is transliterated before synthesis. - The WebSocket service emits one binary audio frame per sentence — begin playback on the first frame for the lowest perceived latency.
- Usage is metered per account in characters per day, with a per-minute request rate limit.
429responses carry aquota_errorbody — see Errors. - The
modelrequest field is ignored; thevoiceis the sole selector. - Clones need a transcript. A clone made before transcripts were required has none, and synthesis with it is rejected with
400naming the voice — create it again withref_text(API) or the transcript box (playground).