Create a reusable named voice config
Authorizations
Body
Create a reusable, named (saved) voice config — no parent binding.
Saved configs are owned by the org and can be referenced by multiple
agents via Agent.voice_config_id. They must have a non-empty name
and must NOT set agent_id / team_id / persona_id (those are for inline
configs only).
1 - 25532640 <= x < 10OpenAPI-visible TTS overrides accepted by voice-config CRUD.
The linked voice_id remains the authority for which provider member is
valid. The service resolves that row and validates this payload again
against the provider-specific discriminated union, including model support
and the Inworld TTS-2-only expressive-speech constraint.
Silero VAD tuning. Always applied for Deepgram Nova; ignored otherwise.
Smart-turn-v3 tuning. Always applied for Deepgram Nova; ignored otherwise.
Noise-suppression engine wired by audio_filters.build_audio_in_filter.
Applies only when noise_cancellation_enabled. String values MUST match
the provider strings the factory dispatches on.
rnnoise, dtln 161650agent, user static, dynamic 10002000500Response
Successful Response
Noise-suppression engine wired by audio_filters.build_audio_in_filter.
Applies only when noise_cancellation_enabled. String values MUST match
the provider strings the factory dispatches on.
rnnoise, dtln Config for the AI's opening turn (no user input yet).
Lives inside ChannelConfig — first-speaking is per-channel.
Mode-agnostic fields:
first_speaker:"agent"opens the call with the rendered message;"user"skips the greeting (caller speaks first). Non-voice channels treat the inbound user message as the"user"opener and ignore this field at runtime.
Greeting source (only applies when first_speaker="agent"):
staticmode:textis required and emitted verbatim (templated via the shared{{var}}engine,src.shared.templating.render).dynamicmode:instructionsare sent to the model router with the agent persona to render an opening line (instructions are templated). When omitted/empty,instructionsfalls back toDEFAULT_DYNAMIC_FIRST_SPEAKING_INSTRUCTIONSso operators who just want a generic friendly opener don't have to author copy.
Voice-only fields (ignored on non-audio channels):
interruptible: whether the caller can barge in mid-greeting.ai_disclosure_text: regulatory disclosure (e.g. CA SB 1001), played as an uninterruptible TTS frame BEFORE the greeting. Disclosure plays even whenfirst_speaker="user"because the regulation requires the disclosure regardless of who speaks first.