Skip to main content
The fastest way to hear Bland is one HTTP request. No SDK, no WebSocket, no audio plumbing.

Prerequisites

1. Generate a WAV file

Open hello.wav. That is the whole integration.
container: "wav" is what makes the result playable. The default, raw, returns bare audio frames with no header. It is the right choice for streaming into a media transport, and the wrong one for a file you want to double-click.

2. Pick your own voice

The UUID above is Karen, one of the built-in voices. List everything available to you:
Pass any id from that response as voice. See Choosing a voice for what distinguishes them and how to clone your own.

3. Direct the delivery

Two controls shape the performance, both from 0.0 to 1.0:
<|0.4|> inserts a pause. Writing for speech covers pauses, numbers, punctuation, and the two controls in depth.

4. Choose the right endpoint for your app

You now have working audio. Which endpoint you ship depends on where the text comes from. Anything conversational wants the WebSocket. A voice agent that waits for a complete LLM response before starting synthesis adds the model’s entire generation time to every reply.

Realtime quickstart

Stream tokens into one session and get audio back as it renders.

Writing for speech

Pauses, numbers, punctuation, and the controls that shape delivery.

Streaming without the WebSocket

POST /v2/tts streams too. Drop container and read the response body as it arrives. This is useful when the text is already complete but you want playback to start early:
That is 48 kHz signed 16-bit little-endian mono, the rate BTTS_V3 renders natively.

Telephony

Phone networks want 8 kHz mu-law. Ask for it directly rather than converting afterwards:
Mu-law is fixed at 8 kHz; any other rate returns unsupported_sample_rate.
Docs for agents: llms.txt