Skip to main content
Chariot offers three ways to synthesize speech. They produce the same audio from the same voices. The difference is latency and how you deliver text.

Decision guide

REST (sync)

You have short, complete text and want one finished WAV file. Simplest to integrate.

HTTP streaming

You have one complete utterance but want playback to start as early as possible.

WebSocket

Text arrives incrementally (e.g. from an LLM), or you need a long, low-latency, interactive session.

Comparison

REST POST /v1/ttsHTTP stream POST /v1/tts/streamWebSocket /v1/tts/ws
ConnectionOne request/responseOne request, streamed responsePersistent, bidirectional
Time to first byteAfter full synthesisLow (as generated)Low (per sentence)
Text deliveryAll at onceAll at onceIncremental, across messages
OutputWAV fileRaw PCM (audio/L16)PCM or streaming-WAV frames per sentence
Max input500 characters500 charactersUnbounded across the session
BillingUp front, per requestUp front, refunded on failurePer sentence, as generated
AuthAPI key (header)API key (header)API key (header or ?api_key=)
Best forSimplicity, batchSingle low-latency utteranceReal-time and long-form

Rules of thumb

  • Start with REST. If you’re generating short clips and don’t need sub-second first audio, POST /v1/tts is the least code.
  • Reach for HTTP streaming when you already have the full sentence but want the user to hear audio sooner, for example reading a chat reply aloud.
  • Use the WebSocket when text is produced token-by-token (streaming from an LLM), when you’re driving a voice agent, or when a single utterance would exceed 500 characters. You send input.text messages as text becomes available and receive audio per sentence. See WebSocket streaming.
Concurrency limits are enforced per plan on the synchronous POST /v1/tts endpoint. If you need many simultaneous generations, see Rate limits & concurrency before choosing a transport.