tts.expressive: true lets the agent write delivery tags into its own speech — a laugh, a whisper, a pause before the number that matters — and the voice performs them. It works only on text-to-speech models whose catalog entry has an expressive block; GET /v1/catalog shows it per model. It is a tts setting, so realtime and text agents do not have it.
text-to-speech model '…' cannot speak delivery tags, so expressive delivery would change nothing - ….
How it works
The entry’sexpressive.prompt is appended to the agent’s system prompt, after your prompt and its substitutions. It is the only place the tag vocabulary is taught. Nothing rewrites or strips the tags: they go to the provider in the text, and appear in the transcript and on the call record.
Both sides cost more on your provider keys: the dialect block is input on every model call (cached after the first turn), and each tag is output tokens and text-to-speech characters.
Dialects
Use only the dialect of the model you are on. Read the exact vocabulary from the entry’sexpressive.prompt.
Where it is refused
Atts.fallback must have the same expressive value. The dialect is taught once, from the primary, and a failover happens on text that already contains tags.
A handoff out of an expressive agent must keep the same voice model. The target must use the same tts.provider, tts.model and expressive: true, because it inherits a transcript full of tags. Handing off into an expressive agent is fine. Because a legal target is itself expressive, one expressive agent puts its whole downstream handoff graph on one model.
Next
Voices
Picking the voice and its settings.
Handoffs
What has to match between agents.