Skip to main content

Overview

Stream audio in real-time with the lowest latency. Perfect for interactive assistants and live applications.
Passing numbers, IDs, dates, or currency as raw strings causes mispronunciations. See the Input Formatting Guide for correct formatting of phone numbers, account numbers, PINs, Aadhaar, vehicle registration numbers, GSTIN, currency, and more.

Models

Timbre v2.5 is now the recommended TTS model. Migrate from Timbre v2.0 to continue receiving the latest improvements. Timbre v2.0 will be deprecated soon.

Endpoint


Connection Headers

Pass all configuration as WebSocket upgrade headers. Headers cannot be changed mid-session — reconnect with new headers to change settings.

Connection Flow

  1. Client connects — opens a WebSocket to /api/v1/tts with all required headers.
  2. Client sends a synthesis message — JSON with text, voice, model, and audio_config.
  3. Server streams audio — returns base64-encoded audio chunks as JSON messages.
  4. Server completes — sends a final message with is_final: true. The client may send another request or close.
  5. Either side closes — client or server may close the connection at any time.
Send one synthesis request at a time and consume audio chunks as they arrive for the lowest end-to-end latency.

Request Parameters

string
required
The text to synthesize into speech. Pass numbers, dates, and currency as spoken words to avoid mispronunciations — see Input Formatting Guide.
string
required
Set to timbre-v2.5.
string
required
Voice name from the Timbre v2.5 catalog. See the Voice Catalog for preferred voices by language. Example: Nalini, Kaveri, Deepak.
string
required
Language of the input text. Controls text normalization and routing.
number | string
default:"1.0"
Playback speed multiplier. Numeric range: 0.85 (slowest) to 1.15 (fastest). String shortcuts: "slow" = 0.85, "medium" = 1.0, "fast" = 1.15.
object
Controls the format of the streamed audio chunks.

Audio Format Reference

Encoding aliases — produce identical output to the container rows above: bitrate only applies when container=mp3. container=mulaw/alaw override sample_rate to 8000 Hz.
When container=ogg or encoding=oggopus is requested, all audio is encoded into a single OGG Opus file and delivered as one chunk after synthesis completes.

Server Messages

start

Sent when the server begins synthesis for the current request.

Audio chunk

Each audio chunk arrives as a JSON message. Decode audio from base64 and append chunks in order.

complete

Sent when all audio for the current request has been streamed. is_final is true and audio is empty.

error

Sent when the server encounters an error. The connection remains open after recoverable errors.

Code Example


Available Voices

42 voices across 10 Indian languages, English, and Hinglish. See the full Voice Catalog for preferred voices by language, gender, persona, and description. Popular examples: Nalini (Hindi), Kaveri (English), Deepak (Hindi), Poorvi (Hinglish).

Python SDK

The SDK’s realtime client manages the WebSocket lifecycle and async iteration so you can focus on your application logic.

Installation

Requires Python 3.10+.

Authentication

Stream Audio Chunks in Real-Time

Collect All Audio at Once