Update an agent
Authentication
Path parameters
UUID of the agent to update. An id from another workspace answers 404; a value that is not a UUID answers 400.
Request
New display name. Trimmed; blank is ignored.
Channels the agent may answer on. Replaces the whole list — send the complete set, not the channel you are adding. Behaviour field.
Connected-app slugs this agent may use (up to 300). null = no restriction (every connected app,
including ones connected later); [] = none. A change queues a tool-surface sync. Behaviour field.
Whether the agent may carry MCP servers. false also detaches the servers already attached;
true attaches nothing by itself. Behaviour field.
Per-app denylist of tool slugs (up to 500 per app), replacing the stored map. null and {} both
mean nothing is disabled. A change queues a tool-surface sync. Behaviour field.
Per-app access level merged into the stored map: read (read-only tools) or read_write. An app
not listed keeps its stored level, and an app never listed has read_write. null clears the map
(every app back to read_write). A change queues a tool-surface sync. Behaviour field.
New voice id. Trimmed; blank is ignored. A custom cloned voice requires Enterprise.
New main language; the same labels as on create are normalised. See CreateAgentInput.language.
Link a different objective template, or null to drop the template layer. Must be accessible to the workspace (400 otherwise). Behaviour field.
New objective (see CreateAgentInput.category), or null to fall back to the template’s
category. When it actually changes and analysis is not sent in the same request, the analysis
criteria are replaced with the new objective’s defaults. Behaviour field.
New workspace prompt layer, 10-8000 characters after trimming. Blank is ignored (it cannot be emptied here). Screened for fraud. Behaviour field.
New opening line. Trimmed; blank is ignored. Screened for fraud. Behaviour field.
Replaces the stored key/value strings (at most 50). Not currently applied to conversations.
New hard cap on voice call length, in seconds (30-3600). Behaviour field.
Fixed pause before replying on text channels, in seconds (0-86400). Above 0 it overrides human pacing; 0 uses human pacing. Voice is unaffected.
Text channels reply on a growing delay ladder (about 10 s, then 1 min, up to 2 min) instead of instantly. Turn off for lines where speed matters (OTP relays, outage notices). Voice is unaffected.
Replaces the stored objection map (at most 50). Screened for fraud. Not currently applied to conversations. Behaviour field.
New E.164 transfer destination (checked against the dial policy), or null to remove it. Behaviour field.
true/false sets this agent’s AI-disclosure decision; null clears it back to the country policy.
Replaces the in-call hand-off rules (up to 10). Behaviour field.
Routing department. Trimmed; null clears it, blank is ignored.
Replaces the routing skills (up to 50).
Guardrail topics, merged key by key (null on a key clears it; null for the block clears both). Behaviour field.
Privacy settings, merged key by key. No defaults are re-applied on update. Behaviour field.
Post-call analysis, merged per half: send only successEvaluation or only dataCollection to
replace that half; null on a half clears it. New criterion ids starting with qa_ are rejected
with 400. Behaviour field.
Expressive voice delivery. See CreateAgentInput.expressiveMode.
How numbers and symbols become speakable text. See CreateAgentInput.textNormalisationType.
Voice only — seconds of silence before the agent takes the turn (1-10).
How eagerly the voice agent takes the turn. See CreateAgentInput.turnEagerness.
Speech rate, 0.5-2.
Voice stability, 0-1.
Adherence to the original voice, 0-1.
Marks the agent for change approval (effective only when the workspace has approvals enabled). Marking an agent applies at once; unmarking an agent that is already marked is itself held for approval.
Response
The updated row (raw, not decorated).
Response of PATCH /api/agents/{agentId}: the raw updated row. Unlike the other agent responses it
is NOT decorated — the JSON config columns keep their column names (supported_channels,
analysis_config, safety_config, privacy_config) and the derived fields (channels,
objective, analysis, safety, privacy, mcpEnabled, toolkitAccessEnforced, total_calls, …)
are absent. Every column of AgentRowBase is present.

