> ## Documentation Index
> Fetch the complete documentation index at: https://brosbots.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Voice (TTS)

> Voice agents use TTS (speech synthesis) to turn LLM responses into the audio the caller hears.

The voice is set **per agent**: open the agent and go to the **Voice**
tab. By default you can choose from the Brosbots-managed stack - female
and male voices in various styles. Under the hood that is ElevenLabs on
**Eleven v4 turbo**; you do not pick the model, only the voice. Among the
advanced voice settings v4 reads only **stability** - speed, style and
similarity apply to the older ElevenLabs models on your own key.

On the **Business** plan all TTS providers are available (incl.
ElevenLabs, Cartesia, Soniox, Deepgram, OpenAI), along with **custom voices** -
after adding a provider key in **Account → Provider keys**. Pick the
voice ID according to the provider's documentation, matching the language
of your calls.

## Expression: a laugh, a sigh, warmth in the voice

Eleven v4 turbo (every managed Brosbots voice) and Eleven v3 understand
short cues in square brackets and **perform** them instead of reading them:
`[laughs]`, `[chuckles]`, `[sighs]`, `[exhales]`, `[warmly]`, `[excited]`,
`[curious]`, `[hesitates]`, `[whispers]`. The agent is told about them automatically,
during the call, and only when its voice supports them - an older
ElevenLabs model or another provider would read the word "chuckles" aloud.

The rules the agent gets with the list: at most one cue per turn and none
in most turns, only where a person would genuinely react that way (a short
laugh after the caller's joke, warmer when reassuring), only from the list,
and never inside details the agent repeats back. Cues do not show in the
transcript - you hear them on the recording. Nor do they go anywhere outside
the call: they are taken out of SMS, e-mails, Google Sheets notes and rows,
CRM fields and tool arguments before anything is sent or saved.

Prompts from the wizard now carry a paragraph on natural conversation: most
replies open with a spoken reaction to what the agent just heard ("mhm",
"uh-huh", "sure", "oh, great"), matched to the situation and never the same
one twice in a row; plus varied confirmations, the caller's name once or
twice, no echoing their words. Add that paragraph to an older
agent's prompt in the editor - an example is in
`CHANGELOG_2026-10-15-ekspresja.md`.

Before a tool call (a search, an order lookup, the calendar) the agent says no
reaction and no "one moment" - every agent with tools gets this rule
automatically. The tool starts at once, and the waiting line ("Let me check
that for you." or your own wait message) is said once, while it runs. If the
model asks for a moment by itself anyway, there is no second "one moment".

## When speech synthesis fails

A single synthesis error (a dropped connection) costs one sentence: on the
next one the agent connects to the provider afresh. A second error within
30 s, or an error that will not fix itself (characters used up, key
rejected), ends the call instead of leaving the caller in silence: the agent
plays a short apology recorded earlier in its own voice and hangs up with
the `service_failure` disposition.

The apology is recorded once per voice, on the first call that uses it, and
kept on the server - so it still plays when the key has just run out of
characters. This covers ElevenLabs voices (managed and on your own key);
with another provider, or when the voice fails before the apology was
recorded, the agent hangs up without it.

## Soniox

Soniox is the one provider you can put on both sides of the call:
transcription and voice on a single key (see [Transcription](transcriber)).

* **Model** - `tts-rt-v2`, the current real-time model. The previous
  `tts-rt-v1` was retired on 2026-08-31 and now routes to v2 server-side.
* **Voice** - picked from a list fetched live from your Soniox account
  (`Maya` among them); the field is the usual searchable voice picker.
* **Language** - the language code of the text, e.g. `pl`.
* **Speed** - `0.7`-`1.3`, where `1.0` is the normal rate. Values outside
  that range are clamped, since the API rejects them.
* **Natural delivery** - a toggle, off by default. With it on, every line is
  prefixed with a style tag (e.g. `[conversational]`) and v2 performs the line
  instead of reading it flat: natural hesitations, warmth, emphasis. The tag
  goes to synthesis only - it never appears in the transcript, the model's
  context, or the call summary.
* **Delivery style** - the tag used while natural delivery is on. The list
  suggests a few (`conversational`, `warm`, `calm`, `empathetic`, `excited`,
  `whispering`), but the field is free text, so you can use any tag from the
  Soniox docs without waiting for a code change.

Billing is about \$0.70 per hour of generated speech, roughly half the
ElevenLabs rate.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.