Getting Started with Flux TTS Batch (REST)

Synthesize a complete block of text into a single audio file with the Flux TTS batch endpoint — POST /v2/speak — for pre-rendering fixed audio.

The batch (REST) transport synthesizes a complete block of text and returns the full audio in one response. Use it to pre-generate fixed audio — IVR prompts, notifications, audiobook lines — where the whole text is known up front and you don’t need incremental playback or interruption. For live, interruptible conversations, use the real-time WebSocket instead (see Batch vs Streaming).

Batch is stateless request/response: simple retries, high fan-out, no connection lifecycle to manage. It serves the same Flux voices as the streaming transport.

Make a request

$curl "https://api.deepgram.com/v2/speak?model=flux-haley-en" \
> -H "Authorization: Token YOUR_DEEPGRAM_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{ "text": "Your appointment is confirmed for 3pm tomorrow." }' \
> --output audio.mp3

The response body is the synthesized audio in the requested encoding. Per-request telemetry is returned as response headers, mirroring Aura’s REST conventions — character counts and the generic dg-warnings header.

Query parameters

ParameterDefaultDescription
modelRequired. A flux-{voice}-{language} model (e.g. flux-haley-en).
encodingmp3mp3, opus, flac, aac (containerized/compressed), or raw linear16 / mulaw / alaw.
bit_rateper-encoding defaultBit rate for compressed encodings. For mp3: 8000, 16000, 24000, 32000, 40000, 48000.
containerper-encoding defaultOutput container where applicable (e.g. wav for linear16, ogg for opus).
sample_ratemodel nativeSample rate; supported values depend on encoding. linear16: 8000, 16000, 24000, 32000, 44100, 48000. mulaw / alaw: 8000, 16000. flac: 8000, 16000, 22050, 32000, 48000. Not applicable to mp3 or opus.
speed1.0Speech-rate multiplier — one of 0.85, 0.9, 0.95, 1.0, 1.05, 1.1, 1.15. Not supported by every model or language; unsupported combinations return SPEED_NOT_SUPPORTED.
expressivity0Beta. Delivery register, -2 (calm) to 2 (animated). See Expressivity.
callbackURL to receive the result asynchronously, instead of on the response body.
callback_methodPOSTHTTP method for the callback request (POST or PUT).
priorityPrioritization for asynchronous (callback) requests. Only value: Low.
tagLabel requests for usage reporting. Repeatable.
mip_opt_outfalseOpt out of the Model Improvement Program.

Conversational constructs (Flush, Interrupt, speech_id, lifecycle events) do not apply to batch. model, speed, expressivity, and the media-output settings behave the same as on the streaming surface, so the contract doesn’t fragment across transports. Inline controls — pause and pronunciation — are coming soon on both transports.

When to use batch vs streaming

See Batch vs Streaming: Which Should I Use? for the decision guide.