tl;dr: All Rime models stream.
Rime’s TTS API streams audio as it is generated rather than waiting for the full utterance. Coda and Mist v3 stream over HTTP and WebSockets. Under typical conditions, the cloud API delivers sub-200ms end-to-end latency. For real-time voice agents, streaming is the default mode of operation.Choosing a transport
Rules of thumb:
- Building a voice agent on Coda? Use Coda WebSocket v1. A persistent connection avoids per-utterance handshakes, you can feed text in as your LLM generates it, and context cancellation lets you stop synthesis when a caller interrupts. Coda WebSocket v1 also returns word timestamps when you ask for them.
- Synthesizing complete sentences server-side? HTTP streaming is the simplest path: one POST, audio bytes stream back in the response body.
- Already using LiveKit, Pipecat, Vapi, or Daily? The integrations handle transport for you. Rime plugs in as the TTS stage of the pipeline.
HTTP streaming
A singlePOST to the model’s host, such as https://coda.api.rime.ai/, returns audio bytes in the response body as they are generated. The Accept header controls the format: Opus, MP3, WAV, PCM, or G.711 μ-law. See the full format table.
cURL
Python
Keep whole samples in raw PCM
Chunks follow the network, not the audio. With raw PCM (audio/L16), a chunk can end in the middle of a 16-bit sample. If your player plays that chunk as it is, every later sample shifts by one byte, and the rest of the audio plays as static. So keep the odd byte, and put it in front of the next chunk:
response is the streaming response from the example above. In Node.js, it is the result of fetch. The WebSocket APIs do not promise whole samples in each message either, so do the same with raw PCM from a WebSocket. Formats that you feed to one decoder, such as MP3, Opus, and WAV, need no extra step. G.711 μ-law has one byte per sample, so its samples never split.
WebSocket streaming
Use Coda WebSocket v1 when text arrives over time or you need to cancel individual turns. To send LLM tokens as they arrive, setsplitStrategy to SPLIT_STRATEGY_ACCUMULATE_SENTENCE, and the server joins them into sentences. Without it, send complete sentences, because the server normalizes each message separately. The connection stays open between turns. See the Coda WebSocket v1 reference for the lifecycle and message fields.
Use the JSON quickstart or the Protobuf quickstart for runnable clients. The LiveKit integration covers both encodings.
For Mist v3, use the same protocol at wss://mist.api.rime.ai/ws. The Mist v3 WebSocket reference covers what differs from Coda. Existing integrations on the legacy /ws3 endpoint keep working. Its protocol uses different operations, such as flush, clear, and eos, and the legacy Coda and Mist v3 /ws3 references still describe it. See Segmentation & behavior settings.
Streaming for telephony and IVR
For phone-based voice agents and IVR systems, request audio that matches the telephony codec directly. Rime synthesizes G.711 μ-law (audio/PCMU) and 8kHz-sampled audio natively, so no transcoding step sits between synthesis and the caller:
- Set
Accept: audio/PCMU(HTTP) oraudioParameters.audioFormat: "audio/pcmu"in a Coda WebSocket v1startfor μ-law output. On the legacy/ws3endpoint, setaudioFormat=mulawin the query string. - Set
samplingRate: 8000to match the telephony stream and shrink payloads. On Coda WebSocket v1, set it insideaudioParameters.
Latency
Listeners experience time to first audio, not total synthesis time, so streaming has the largest effect on perceived responsiveness. Under typical conditions, Rime’s cloud API delivers sub-200ms end-to-end latency. Withmistv3, typical time to first byte is well below 100ms. Coda achieves sub-100ms model latency on the GPU engine when self-hosted or on-prem.
Latency
Measured benchmarks per model, what affects response time, and how to reduce it; regional endpoints, payload sizing, and text normalization.

