Skip to main content
POST
Text-to-Speech (SSE)

Authorizations

Authorization
string
header
required

Pass your API key as a Bearer token: Authorization: Bearer sk_996_....

Body

application/json

Same as TTSRequest, but output_format.container must be raw (streaming endpoints cannot emit a WAV header).

model_id
enum<string>
required

The TTS model. Currently gepard-1.0.

Available options:
gepard-1.0
transcript
string
required

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).

Maximum string length: 2000
voice
object
required

Selects 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.

output_format
object
required

Output audio format. Each field is validated against a fixed set; anything outside these values returns 400 with no silent fallback.

language
string

Optional BCP-47 language tag (e.g. en-US). Accepted for compatibility but has no effect on synthesis.

Example:

"en-US"

Response

A text/event-stream of chunk events followed by a done event. overloaded (429), engine_error (usually 502), and engine_unavailable (503) can also arrive mid-stream as an error event inside this 200 response; the stream then ends with no done. The request is charged for the full transcript once its first audio chunk has been delivered, even if it later ends with an error event; a stream that fails before its first chunk isn't charged.

The response is of type string.