curl --request POST \
--url https://api.nineninesix.ai/tts/bytes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model_id": "gepard-1.0",
"transcript": "Today is a wonderful day to build something people love!",
"voice": {
"mode": "id",
"id": "5148a2db-5f7c-480c-8f7c-39c6414a4d5d"
},
"output_format": {
"container": "wav",
"encoding": "pcm_s16le",
"sample_rate": 22050
}
}
'"<string>"Text-to-Speech (Bytes)
Generate audio from text and return the complete audio file in a single response — the body is the raw audio in the requested format, and it arrives once generation finishes. Use this when you want the whole clip at once; for real-time playback use /tts/sse or the WebSocket endpoint instead. The wav container is available on this endpoint only.
Billing is all-or-nothing: any failure is an HTTP error with no audio and isn’t charged. A successful response is charged, even if the client disconnects while downloading it.
curl --request POST \
--url https://api.nineninesix.ai/tts/bytes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model_id": "gepard-1.0",
"transcript": "Today is a wonderful day to build something people love!",
"voice": {
"mode": "id",
"id": "5148a2db-5f7c-480c-8f7c-39c6414a4d5d"
},
"output_format": {
"container": "wav",
"encoding": "pcm_s16le",
"sample_rate": 22050
}
}
'"<string>"Authorizations
Pass your API key as a Bearer token: Authorization: Bearer sk_996_....
Body
The TTS model. Currently gepard-1.0.
gepard-1.0 The text to synthesize, at most 2,000 characters (about 1.5–2 minutes of speech). Characters are Unicode code points of the string as sent (after JSON decoding, no normalization), including leading and trailing whitespace and newlines — the same count used for billing at 1 credit per character. In JavaScript, count with [...text].length, not text.length. Over the limit → input_too_long (400), returned before any work starts and not billed; split longer text across requests. The request body is also capped at 64 KB (payload_too_large, 413).
2000Selects the voice to synthesize. Required — there is no default voice; a request that doesn't resolve to a voice returns an error (it is no longer silently substituted). The only accepted form is the nested object { "mode": "id", "id": "<voice-uuid>" }; a top-level voice_id is not supported.
Show child attributes
Show child attributes
Output audio format. Each field is validated against a fixed set; anything outside these values returns 400 with no silent fallback.
Show child attributes
Show child attributes
Optional BCP-47 language tag (e.g. en-US). Accepted for compatibility but has no effect on synthesis.
"en-US"
Response
The audio file in the requested format. A wav container is returned as Content-Type: audio/wav (the playground renders an audio player); a raw container is returned as application/octet-stream (raw PCM has no header and won't play in a browser).
The response is of type file.