OpenPhonexDocs

Delivery profiles

Choose how an agent's voice performs its speech, hear exactly that in the voice preview, and know which providers honour it.

A delivery profile decides how the selected voice performs a reply: its pace, stability and emphasis. It does not change the voice, the model, the language or the words. Four profiles exist:

ProfileIntent
naturalWarm, varied cadence with restrained expressiveness.
livelyBrighter delivery with more pace and emphasis variation.
calmSlower, softer and more consistent.
preciseStable delivery for names, dates, amounts and compliance-sensitive content.

Unset means the provider's own defaults. That is what every agent had before this setting existed, and an agent that never chooses a profile keeps sending exactly the request it sent before.

Choose it in the agent editor

Open the agent in the workspace and choose Voice stack. The Delivery chooser sits directly under the chosen voice and offers Provider default, the unset state every agent starts in, and the four profiles with the same summaries as the table above. A short example describes how the agent's own voice performs the same line under each choice.

The profile is one intent per agent, but providers cannot change the same things, so the truth is written on each voice: every voice card, the shared voice and each per-language override, carries a Delivery on this voice line stating what the current choice changes for that voice, in the values the platform will send. For an ElevenLabs Flash voice, Precise reads "Steadiest of the four, digits kept level and separate. About 3% slower. Sets stability 0.80 · similarity 0.80 · speed 0.97"; a Soniox or Cartesia voice reads "Pace only" with its rate; a Gemini voice shows the instruction it is given; a voice whose provider and model have no truthful control (Fish Audio and Azure neural voices today) reads "no delivery controls for this voice yet": the choice is kept and takes effect if you move that language to a voice that has them. With Provider default chosen, every card says the voice sounds as its provider ships it. The line comes from the same table the call runtime reads, so it follows the voice you pick in the editor even before you save.

Listen on a voice card plays your text with the chosen profile through the voice preview, resolved exactly as a call resolves it. Changes apply to new calls after you save the agent.

Set it through the API

PATCH /v1/agents/{agent_id}/voice-stack accepts the profile inside voice_polish, beside the existing closing line:

{
  "voice_polish": {
    "delivery": "calm",
    "end_of_call_phrase": "Thanks for calling. Goodbye."
  }
}

The value must be one of the four names; anything else is rejected with 400. The stored profile is returned by GET /v1/agents/{agent_id}/voice-stack and applied when a call starts. Saving never changes a call already in progress. Over MCP, set_agent_voice_stack takes the same voice_polish object.

Hear it before you save

POST /v1/voice-previews takes an optional delivery with the same four values. The preview is rendered from the same table the call runtime reads, so the provider request carries the identical settings a call with that profile would send: the audition sounds like the call, not like a polished sample the call could never reproduce. The response echoes delivery and reports delivery_applied, which is false when the selected provider and model have no truthful control for the profile. Over MCP, preview_voice takes the same field. Generated speech is nondeterministic and phone-network audio can sound different from browser audio.

What each provider honours

Profiles are never a universal slider. Each maps to allowlisted controls the provider actually exposes; where a provider has none, the setting is accepted, stored and returned, and the audio is unchanged.

TTS provider and modelControl the profile drives
ElevenLabs eleven_flash_v2_5, eleven_turbo_v2_5Voice settings: stability, similarity, speed. Style stays at zero.
ElevenLabs eleven_v3Stability only, at the values that model documents.
Gemini TTSA bounded synthesis instruction for style and pace; the instruction is never spoken.
Soniox tts-rt-v2Speaking rate.
Cartesia sonic-3.6Speaking rate.
Fish Audio s2-proNone yet. Accepted and returned, audio unchanged.
Azure neural voicesNone yet. Accepted and returned, audio unchanged.

Every TTS row of GET /v1/agent-catalog, and the voice object of GET /v1/agents/{agent_id}/voice-stack, carries delivery_control: voice_settings, instruction or speed when a profile changes that engine's audio, or unsupported when it is stored without effect; and delivery_profiles, the exact value each of the four profiles resolves to on that engine: a settings object for ElevenLabs, a speaking rate for Soniox and Cartesia, an instruction sentence for Gemini TTS, and an empty object where the control is unsupported. Both are read from the same table, so a client can show the state above, and the values a profile sets, without keeping its own provider list.

Provider instructions and tags are generated from the platform's own table. Customer text never becomes provider control syntax, and no profile inserts laughter, sighs, accents or filler words.

  • Voice library for choosing and previewing a voice.
  • Audio environments for optional background ambience, which is a separate setting.
  • Acknowledgements for the short "One moment" an agent can say while a slow reply is prepared; it shares the voice_polish object with the delivery profile.

On this page