Update an assistant (PUT alias)
Alias of PATCH /assistants/{id} — identical behavior (partial update, version snapshot). Kept for clients that only support PUT. Required scope: assistants:write.
Authorizations
API key (fam_..., created under Settings → API Keys) or an OAuth 2.0 access token (fam_at_...). Keys can be restricted to scopes such as assistants:read, calls:write, campaigns:write, automations:read, dashboards:read, dashboards:write, leads:write, segments:write, loop:read, loop:write, phone_numbers:write, sip_trunks:write, knowledge:write, voices:read, billing:read, settings:write, platform:read, platform:write; a *:write scope implies the matching *:read. Automation and dashboard endpoints also accept the legacy calls:* scope. Keys without scope restrictions have full access.
Path Parameters
Assistant ID.
Body
Writable assistant fields. Unknown fields are ignored. Non-null engine model overrides require the Fallbacks & Guardrails add-on and are validated against the assistant owner's effective catalog access and engine compatibility. Null resets to the next default level.
Free-form workspace tags for filtering assistants. Case-insensitive unique; original spelling is kept.
2040Monotone optimistic concurrency revision.
x >= 1Number of assistants currently assigned to this tool.
x >= 0Versioned manual response instructions for exact output channels. Omit a channel key to use Automatic. Manual instructions supplement and never replace safety, language, tool, or delivery rules. Requires the workspace's Manual channel responses feature.
pipeline, realtime, half_cascade openai, azure, google, groq, anthropic, null deepgram, openai, google, azure Speech-recognition glossary for customer, product, and proper names. Plan-gated.
100100Beta: automatically detect additional call-local keyterms. Detected terms are not persisted.
cartesia, elevenlabs, openai, google, azure, fishaudio, deepgram, inworld, rime, xai Legacy array field controlling Dynamic emotions (Expressive Mode) for compatible pipeline and half-cascade voices. Omit on create to enable it when supported. Send [] to disable it or ["calm"] to enable it. Realtime speech models handle expression natively.
Optional free-text speaking-style instructions for compatible TTS models. Send null to clear the override.
Voice stability override. Send null to use the voice-provider default.
0 <= x <= 1Voice similarity override. Send null to use the voice-provider default.
0 <= x <= 1Voice-style exaggeration override. Send null to use the voice-provider default.
0 <= x <= 1Speaker-boost override. Send null to use the voice-provider default.
multilingual_model, english_model, vad, stt bvc, bvc_telephony, none agent_speaks_first, user_speaks_first When true, the caller may barge in during the opening greeting (first message / audio / silence fallback). Default false = play greeting uninterrupted. Separate from allow_interruptions (rest of the call).
When greeting_mode is user_speaks_first: after ai_entry_timeout_sec of initial silence, the assistant speaks (static or dynamic). Default false.
static, dynamic 1 <= x <= 20iOS/Android Call Screen Handling. Mirrored into flow_json.pre_call when a flow exists.
Agent type. Omit or null = Single prompt (default). Object = Conversational flow (Flow JSON v1). Seed Start→Agent→End for a basic flow; non-trivial graphs may require the flow_builder plan toggle. In flow mode, system_prompt is the Advanced / base prompt (agent-node text is appended).
Maximum call duration in seconds (60–1800). null = unlimited (budget cap still applies).
60 <= x <= 1800How long inbound callers hear ringing before the call times out (30–120 s, default 60).
30 <= x <= 120How long outbound SIP/WhatsApp calls ring before no-answer (15–80 s, default 45).
15 <= x <= 80Seconds after VAD detects speech with no STT transcript before asking the caller to repeat. null disables.
1 <= x <= 30off, questions_only, draft_for_review, tentative_live Agent-level post-call webhook URL.
1 <= x <= 300 <= x <= 5none = do not deliver; custom = POST the assistant webhook URL after the call; automation = deliver through the bound automation.
none, custom, automation Bound automation when webhook delivery is automation.
BackgroundAudioPlayer config (ambient, ambient_volume, thinking, thinking_volume). {} = off. Hold music is configured on the warm-transfer tool, not here.
Realtime turn handling: robust voice activity, semantic completion, or adaptive barge-in.
server_vad, semantic, adaptive How quickly the assistant responds when realtime_turn_mode is semantic.
auto, low, medium, high Per-language voice overrides for Pipeline/Half-cascade. Languages without an entry keep the main voice. A private per-language clone is allowed only when the main voice is also a workspace-owned private clone that uses the same provider runtime.
Automatic response-language switching; derived from secondary_languages by the dashboard.
inherit follows the workspace memory default; on/off override it.
inherit, on, off workspace = shared across assistants; assistant = private to this assistant; both = shared identity + per-assistant history.
workspace, assistant, both Per-assistant read allowlist intersected with workspace policy. Send [] to disable reads.
A currently operational memory channel. Web is deliberately excluded until signed-in browser users have a server-verified identity boundary.
voice, sms, whatsapp, email, telegram, slack, messenger, teams, discord, gchat, x, freshdesk, gmail, outlook, zendesk, servicenow, intercom, zoho_mail, agent_mail, instagram, zulip Per-assistant write allowlist intersected with workspace policy. Send [] to disable writes.
A currently operational memory channel. Web is deliberately excluded until signed-in browser users have a server-verified identity boundary.
voice, sms, whatsapp, email, telegram, slack, messenger, teams, discord, gchat, x, freshdesk, gmail, outlook, zendesk, servicenow, intercom, zoho_mail, agent_mail, instagram, zulip Allowed summary categories. Send [] for metadata-only memory with no new content summary.
identity, preferences, agreements, open_items When true, apply pii_redaction entity filters to stored transcripts.
PII entity categories + optional custom regexes.
Post-call analysis configuration. When set (non-empty), the LLM judge evaluates each finished transcript and writes the result to calls.analysis (plus the denormalized calls.sentiment/calls.success filter columns). All fields are optional.
AI-QA scorecard configuration (plan-gated ai_qa_scorecards). null or enabled: false disables scoring.
IANA timezone of the assistant (e.g. Europe/Berlin, default). Anchors the get_current_time system tool, the {{time}}/{{date}}/{{datetime}}/{{weekday}} system variables, and the check_business_hours built-in tool. On campaign calls the campaign's timezone overrides it per call.
Language the assistant answers in by default (ISO-639-1, see GET /languages).
Languages the assistant may switch to when the caller clearly speaks them (ISO-639-1). Non-empty implies multilingual STT + auto language switch.
Custom variable definitions, referenced as {{key}} and resolved per call (explicit call values > inbound webhook enrichment > system variables > default_value).
Optional webhook called on inbound calls to enrich variable values before the conversation starts.
Built-in tool configurations (also accepted as tools for compatibility).
Response
The updated assistant.
A voice assistant configuration. Nullable model overrides are independent per engine: pipeline uses llm_*, realtime uses realtime_*, and half-cascade uses half_cascade_* for its text-capable realtime input plus tts_* for output.