Update an agent
Partial-patches an agent — only the fields you send change. autonomy_type and entity_type are immutable. Send updated ticket_conditions / time_entry_conditions to change the entity filter; the server rebuilds the FIND_ENTITIES action. actions is the pipeline AFTER FIND_ENTITIES (CHAINED_ACTIONS only) — patching actions on an AGENTIC agent or conditions on a CONVERSATIONAL agent returns 400. An actions patch MERGES per-action: each entry targets one existing action by id (or unique action_type) and its input_as_dict is merged key-by-key, so changing one setting preserves the rest; unreferenced actions are kept and unmatched entries are appended. There is no wholesale-replace mode — a PUT can never drop or reorder an action (do structural pipeline edits in the dashboard). A toolbox patch also MERGES per tool: each entry under tool_settings_by_type is merged key-by-key onto that tool’s current settings (lists like allowed_users replace; null for a tool key disables it), so changing one tool’s setting no longer requires resending the whole toolbox; agent_settings and integrations remain whole-value replaces. Refuses Neo-managed agents (403 agent_managed_by_neo). Editing actions, agent_settings, toolbox, integrations, or the conditions is a destructive change (triggers a TIL approval when an agent makes the call via NEO_API_REQUEST). 409 agent_update_conflict on a concurrent edit.
Authorizations
Authorization: Bearer <token> where <token> is either a neo_sk_<env>_<secret> API key (service account) or a Microsoft Entra ID access token (dashboard user).
Path Parameters
Body
PUT /public-api/agents/<id> body — a partial patch. Only the fields you send are
changed; everything else keeps its current value. autonomy_type and entity_type are
immutable. Editing actions, agent_settings, toolbox, integrations, or the
conditions is a destructive change and triggers a TIL approval when an agent makes the
call via NEO_API_REQUEST.
The intent-shape applies on update too: send updated ticket_conditions /
time_entry_conditions to change the entity filter; the server rebuilds the
FIND_ENTITIES action. actions is the pipeline AFTER FIND_ENTITIES (CHAINED_ACTIONS
only) — do not include FIND_ENTITIES yourself.
actions MERGES (ENG-5712): each entry targets one existing action by id (preferred —
read it from GET /agents/<id>) or, when id is omitted, by action_type if exactly one
existing action has that type. The targeted action keeps its other config — its
input_as_dict is merged key-by-key with what you send (nested objects merged, an explicit
null deletes a key, scalars/lists replace), so changing one dispatch setting no longer
wipes the technician pool, instructions, or calendar settings you didn't resend. Entries
that match nothing are appended as new actions; existing actions you don't mention are left
untouched. There is deliberately no wholesale-replace mode: a PUT can never drop or reorder
an action — do structural pipeline edits (remove/reorder) in the dashboard.
toolbox MERGES per tool: send only the tools you're changing. Each entry under
tool_settings_by_type is merged key-by-key onto that tool's current settings (nested objects
merge; scalars and lists — e.g. allowed_users — replace wholesale; an explicit null for a
tool key disables that tool). Tools you don't mention keep their settings, so flipping one
tool's setting no longer requires resending the whole toolbox. An explicit top-level
"toolbox": null still clears the whole toolbox. agent_settings and integrations remain
whole-value replaces — send the complete object for those.
Settings that control the behavior of the agent.
Per-agent integration permissions: which permission-aware integrations (PSA, M365, RMM, etc.) the agent may call, and at what access level.
ENABLED, DISABLED, DELETED SCHEDULED, TRIGGERED, NONE 