Voice Agent TTS Controls

Apply speed, expressivity, pronunciation, and pacing controls inside Voice Agent sessions.

If you’re building with the Voice Agent API, Deepgram’s TTS voice controls — speed, expressivity, pronunciation, and pacing — work inside your agent pipeline. Where you apply each control depends on what it does and what context the decision needs.

Speed applies to both Flux TTS (agent.speak.provider.version v2) and Aura (v1), with different accepted values for each. Expressivity applies to Flux TTS only. The pronunciation and pacing guidance applies to every TTS model you can use with the Voice Agent, though the inline pronunciation control syntax itself works with Aura (v1) only.

Where each control belongs

ControlApplies toApply atWhy
SpeedFlux TTS and AuraSession settingsA single rate applies to the whole conversation.
ExpressivityFlux TTS (v2)Session settingsThe delivery register is a property of the agent, not of one turn.
Pronunciation overrideAll TTS modelsLLM system promptNeeds sentence-level context to disambiguate heteronyms.
Pause and pacingAll TTS modelsLLM system promptVoice models shape pacing from the text they receive; the specifics vary by model.

Speed: configure once at the session level

Speed is a session-level setting on the agent’s speak provider, and both Deepgram TTS families support it. Configure it when you initialize the agent, and every response from the agent uses that rate.

1{
2 "type": "Settings",
3 "agent": {
4 "speak": {
5 "provider": {
6 "type": "deepgram",
7 "version": "v2",
8 "model": "flux-kit-en",
9 "speed": 1.05
10 }
11 }
12 }
13}

Each family accepts a different set of values, and the default is 1.0 for both:

  • Flux TTS accepts 0.85, 0.9, 0.95, 1.0, 1.05, 1.1, or 1.15.
  • Aura accepts any float between 0.7 and 1.5. For Spanish voices the recommended range is 0.91.5; values below 0.9 may introduce disfluencies.

See TTS Models for the full parameter reference and TTS Voice Controls for the underlying behavior.

A consistent session-level speed is useful for agents that serve accessibility-sensitive audiences, or any conversation where pacing should stay steady throughout the call.

The speed parameter is also supported for Cartesia TTS in Voice Agent sessions. See Deepgram-managed Cartesia TTS models for the accepted values.

Expressivity: set the delivery register at the session level

agent.speak.provider.expressivity shifts a Flux TTS voice’s delivery along a calm to animated axis. Like speed, it is a session-level setting on the speak provider, and the value applies to every response the agent speaks.

Flux TTS (v2)
1{
2 "type": "Settings",
3 "agent": {
4 "speak": {
5 "provider": {
6 "type": "deepgram",
7 "version": "v2",
8 "model": "flux-kit-en",
9 "expressivity": -1
10 }
11 }
12 }
13}

It accepts the whole numbers -2 to 2 and defaults to 0, the voice’s tuned delivery. Negative values produce calmer, steadier delivery; positive values produce more animated delivery with a wider pitch range. Every Flux voice supports it.

Match the register to the conversation your agent handles: the calm end suits support, de-escalation, healthcare, and IVR, and the animated end suits consumer, entertainment, and outbound engagement. Because each voice has its own character, the same value lands differently from one voice to the next.

expressivity is a beta parameter. 0 is the only value validated for production, and moving away from it raises the chance of hallucinations and pronunciation errors, so test the value you plan to ship and re-check it after model updates.

Expressivity is not a speed control: it changes pitch range, pacing variation, and timbre together rather than the speaking rate. Combine it with speed when you need both, and test the combination.

For value-by-value guidance, see Expressivity, and TTS Models for the parameter reference.

Pronunciation and pacing: handle them in the LLM prompt

Pronunciation overrides and pause cues are most effective when the LLM produces them — not when they’re added downstream — because both depend on the meaning of the surrounding text. The text your LLM emits is the text the voice model speaks, so pacing through punctuation works with every TTS model you can use with the Voice Agent, Deepgram and third-party alike.

  • Pronunciation needs context to handle heteronyms. Words like lead (the metal vs. to guide), read (present vs. past), bass (fish vs. instrument), or Polish vs. polish are spelled identically but pronounced differently. Only the LLM, which has the full conversational context, can decide which IPA override to apply for a given utterance. A static lexicon applied after the fact will mispronounce these words whenever the wrong sense is meant.
  • Pacing needs to match what’s being said. Voice models take their pacing cues from the text they receive, so asking the LLM to produce well-punctuated output is more reliable than post-processing a flat string. Aura-2 responds to punctuation in documented ways: commas and periods produce short pauses, ellipses (...) produce longer ones, and digits separated by periods slow down readback for phone numbers, account numbers, and IDs. Other models interpret punctuation differently — check your provider’s documentation. See Text to Speech Prompting for Aura-2’s full set of pacing techniques.

Put your pronunciation map and pacing rules in the system prompt and the Voice Agent passes the LLM’s output through to the voice model unchanged.

Example system prompt snippet

The inline pronunciation block below applies to Aura (v1) voices. With Flux TTS, keep the digit-grouping pacing rules and replace the inline block with plain-language pronunciation instructions: Flux TTS rejects text containing inline controls, ending the session with a DATA-0002 error.

When saying the following terms, use these inline pronunciation controls so the
voice model produces the correct phonetic output:
- dupilumab → \{"word": "dupilumab", "pronounce": "duːˈpɪljuːmæb"\}
- adalimumab → \{"word": "adalimumab", "pronounce": "ˌædəˈlɪmjuːmæb"\}
When reading back phone numbers, account numbers, or order IDs, group digits in
twos or threes and separate each group with a period to introduce a short pause.
For example, prefer "555. 867. 5309" over "5558675309".

This keeps your pronunciation map and pacing rules in the LLM layer, not in a separate lexicon or orchestration config. To add a term, edit the prompt — no redeploy required.

For Aura’s override syntax, validation rules, and IPA sourcing tips, see TTS Voice Controls; check your provider’s documentation when using a third-party voice. The curly braces must be escaped (\{ and \}); unescaped braces are treated as plain text and read aloud. Flux TTS does not support inline pronunciation controls in the Voice Agent and rejects any request whose text contains them, ending the session with a DATA-0002 error — prompt the LLM for the pronunciation you want instead. For pause and pacing techniques, see Text to Speech Prompting and Formatting Text for Aura-2.