---
title: "Update stable identity (name, description, metadata, voice concurrency cap)"
method: PATCH
path: "/v1/assistants/{agent_id}"
tags: ["assistants"]
---

# Update stable identity (name, description, metadata, voice concurrency cap)

`PATCH /v1/assistants/{agent_id}`

In-place identity update — no run semantics (§3.3).

Also the write path for ``max_active_calls``, the per-agent voice concurrency cap
(Layer 2c) — a top-level ``Agent`` column, so it does not belong on a revision
PATCH. Passing ``model_fields_set`` through is what makes the cap's tri-state work:
omitted leaves it alone, explicit ``null`` clears it. A cap that exceeds the org's
active-call cap is rejected 422 by the service (the org cap is the hard ceiling on
every admit, so a higher per-agent cap is unreachable).

## Path parameters

- `agent_id` string, uuid, required

## Request body

- AssistantIdentityUpdate — Request body for PATCH /assistants/{id} — stable identity (§3.3). In-place, immediate, no run semantics. ``extra=forbid``.
  - `name` string, nullable
  - `description` string, nullable
  - `metadata` object, nullable
  - `max_active_calls` integer, nullable

## Response `200`

Successful Response

- AgentResponse
  - `id` string, uuid, required
  - `organization_id` string, uuid, required
  - `name` string, required
  - `description` string, nullable
  - `active_revision_id` string, uuid, nullable
  - `active_revision` AgentRevisionResponse
    - `id` string, uuid, required
    - `agent_id` string, uuid, required
    - `name` string, required
    - `description` string, nullable
    - `persona` string, nullable
    - `system_prompt` string, nullable
    - `context_variables` ContextVarSpec[], nullable — Deprecated legacy projection; contains assistant SYSTEM declarations only. Use system_context_variables.
      - `name` string, required
      - `type` 'string' | 'int' | 'float' | 'bool' | 'enum', required
      - `source` 'system' | 'derived'
      - `enum_values` string[], nullable
      - `reask_cap` integer, nullable
      - `description` string, nullable
    - `variable_defaults` object, nullable
    - `tool_refs` object[], nullable
    - `knowledge_base_refs` object[], nullable
    - `platform_tools` object
    - `policies_enabled` boolean
    - `policy_refs` object[], nullable
    - `channel_specific_config` object, nullable
    - `router_config_id` string, uuid, nullable
    - `model_settings` ModelChainEntry
      - `model` string, required
      - `config` ModelConfig
        - `temperature` number, nullable
        - `max_tokens` integer, nullable
        - `top_p` number, nullable
        - `stop_sequences` string[], nullable
        - `reasoning_effort` 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max', nullable
        - `request_timeout_ms` integer, nullable
        - `thinking_budget` integer, nullable
    - `analyzer_model_settings` ModelChainEntry
      - `model` string, required
      - `config` ModelConfig
        - `temperature` number, nullable
        - `max_tokens` integer, nullable
        - `top_p` number, nullable
        - `stop_sequences` string[], nullable
        - `reasoning_effort` 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max', nullable
        - `request_timeout_ms` integer, nullable
        - `thinking_budget` integer, nullable
    - `workflow_enabled` boolean
    - `memory_enabled` boolean
    - `current_time` CurrentTimeSettings — One tier's optional current-time overrides. ``None`` means inherit for that field. An empty object therefore clears the tier and inherits both values. The API stores only non-null fields.
      - `enabled` boolean, nullable
      - `timezone` string, nullable
    - `kb_clearance_level` integer, nullable
    - `kb_audience_tags` string[]
    - `continue_after_flow` boolean, nullable
    - `voice_call_settings` object, nullable
    - `created_by` string, nullable
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `published_at` string, date-time, nullable
    - `system_context_variables` SystemContextVariableSpec[], nullable, required — Assistant-owned immutable inputs. Derived variables belong to workflows.
      - `name` string, required
      - `type` 'string' | 'int' | 'float' | 'bool' | 'enum', required
      - `enum_values` string[], nullable
      - `description` string, nullable
  - `metadata` object
  - `platform_tools` object
  - `knowledge_gap_analysis_enabled` boolean
  - `release_suite_id` string, uuid, nullable
  - `release_gate_mode` 'off' | 'advisory' — Per-agent release-gate mode (ENG-727). ``off`` = no release checks; ``advisory`` = compute + display a verdict but never block activation. The gate always runs and surfaces a verdict; it never refuses activation.
  - `release_gate_max_failures` integer
  - `max_active_calls` integer, nullable
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/oneloop-hq/apis/feather-api.md) · [All operations](https://skmtc.net/oneloop-hq/apis/feather-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/oneloop-hq/feather-api/revisions/9cd7291d4228/schema)
