Detach an assistant from a saved config into an inline copy
Authorizations
Path Parameters
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.