POST /v1/tts/stream synthesizes speech and streams the audio back as it is generated, so you can begin playback before the whole utterance is ready. It takes the same request fields as the synchronous endpoint, with a limit of 500 characters for chariot-v0 or 1,000 for chariot-multilingual-v1.
Request
VOICE_ID with a voice UUID that supports your model_type. See Models for model selection, speaking rates, and latency controls.
To measure first-audio latency and connection setup from your own environment, use the latency testing tool.
Response format
The body is a chunked stream of raw audio, not a container file:
There is no WAV/RIFF header on the stream. To play it, point your audio sink at a 44.1 kHz mono s16le source, or prepend your own WAV header. The
X-audio-url response header is sent before the body. It points to a WAV archive uploaded after generation; archiving is best effort.
Response headers
Consuming the stream
Error handling
The server checks the upstream response and waits for initial audio before returning200. Failures before that point return an HTTP error. A 200 still does not guarantee the whole stream succeeded: failures after the first audio chunk end the stream early. Guard against truncation:
- Track how much audio you received and treat an unexpectedly short stream as a failure.
- Credits are charged only after successful delivery. A generation that fails partway is not charged.
voice_id, text over the selected model’s limit, missing key) happen before streaming starts and return a normal JSON error with the appropriate status code. See Errors & status codes.
For token-by-token input or sessions with multiple utterances, use the WebSocket API instead.