Set the voice source (saved config link) for an assistant
Authorizations
Path Parameters
Body
Request body for setting an agent's voice source.
saved_config_id is the id of a saved (named) voice config to link,
or None to unlink (falling back to inline config).
Response
Successful Response
Config response for an agent, augmented with source metadata.
source is "saved" when the agent references a saved config via
Agent.voice_config_id, or "inline" when using its own 1:1 row.
saved_config_id is the id of the linked saved config, if any.
has_inline_fallback reports whether an agent-owned inline row exists;
the UI uses it to know whether unlinking is safe (the agent falls back to
its preserved inline config) or would leave the agent with no voice config.
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 inline, saved 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.