Publish an agent's voice stack
set_agent_voice_stackSave revision-bound shared voice_setup for workflow publication, or explicitly publish an ordinary voice stack, optional outgoing-only version-pinned audio environment, and selected language profiles. Each locale override may set only exact voice, transcriber, and greeting; every resulting stack and existing credential binding is validated before a frozen publication is created. The environment is never caller/STT input. An engine whose agent-catalog row says has_language_axis false (a voice-to-voice engine) refuses languages, language_profiles and follow_caller with a 400 naming the field and the engine.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | ||
| voice | No | ||
| agent_id | Yes | ||
| language | No | ||
| languages | No | When supplied replaces the selected language set. | |
| listening | No | Which languages calls listen for: open (default; the transcriber hears the other party in any language when it can) or agent_language (the call's own language only, slightly more accurate there). Frozen in the publication, so changing it republishes. Refused for an engine without a language axis. | |
| navigation | No | Per-agent phone-menu navigation (enabled, max_hold_seconds, max_navigation_seconds), validated exactly like PATCH /v1/agents/{agent_id}/voice-stack. On by default: enabled is true, false (off, kept by every save) or null (follow the platform default, on), and is required; an empty object is refused with navigation_enabled_required. Never refused for the engine or the languages: an agent that cannot navigate yet (GPT-Live) keeps the setting and the voice stack reports navigation.eligible and navigation.ineligible_reason. | |
| transcriber | No | ||
| turn_taking | No | Per-agent turn-taking tuning, validated exactly like PATCH /v1/agents/{agent_id}/voice-stack. | |
| voice_setup | No | Shared finite input. Requires expected_voice_setup_revision beside it. Do not mix with transcriber or overlapping turn_taking fields. With a workflow, stages input for workflow publication; ordinary calls keep their published stack. Without a workflow, publishes a compatible cascade selection or saves an independent native-engine confirmation listener. Free-form business writes require the finite listener, with additional transcription usage; conversation input remains engine-owned. GPT-Live Transcribe is qualified for finite English input with platform-managed credentials. | |
| voice_polish | No | Voice polish. delivery: how the voice performs its speech (natural, lively, calm, precise); unset keeps provider defaults. acknowledgements: while a slow reply is still being prepared, say one short bounded phrase in the agent's own voice and language, at most once per turn, after delay_ms (default 1200) of silence; off unless enabled. Phrases default to the platform's reviewed list for the agent's language; a language without one stays silent unless phrases are supplied. tool_wait: what the caller hears while a slow tool call runs, after delay_ms (default 1000): mode sound plays a quiet typing bed cut when the tool finishes (any language); mode acknowledge speaks one short phrase in the agent's voice (phrases apply to acknowledge only); off by default. | |
| first_message | No | ||
| follow_caller | No | Automatic multilingual policy, on by default where the transcriber can listen for the whole selected set; send it only to record an explicit choice (false stays in the opening language, true is refused where it cannot follow). Omitted scope means selected. All resolves the exact stack's compatible set at publication; provider candidate limits, or the 32-language limit of an AI agent's selection, can require selected instead. | |
| system_prompt | No | ||
| voice_frontend | No | Conversation engine. Omit or cascade keeps STT/LLM/TTS. gpt_live is GPT-Live-1; transcriber/model/voice become the OpenAI projection (captions stub, backend Luna/Terra, gpt-live-1 voice). Switching back to cascade requires a full STT/LLM/TTS stack. Each engine declares whether it has a language axis as has_language_axis in get_agent_catalog. | |
| answer_detection | No | Per-agent answer-detection policy, validated exactly like PATCH /v1/agents/{agent_id}/voice-stack. | |
| audio_environment | No | Explicit provider-independent ambience pin. Off requires volume 0; every other catalogue preset requires 1 through 100. | |
| language_profiles | No | When supplied replaces sparse overrides; omit to preserve them. | |
| language_profile_revision | No | ||
| expected_voice_setup_revision | No |