---
title: "Create a new revision (optionally branch from an existing one)"
method: POST
path: "/v1/assistants/{agent_id}/revisions"
tags: ["assistants"]
---

# Create a new revision (optionally branch from an existing one)

`POST /v1/assistants/{agent_id}/revisions`

Create a new revision. Optionally branch from ``based_on_revision_id``.

## Path parameters

- `agent_id` string, uuid, required

## Request body

- CreateRevisionRequest — Request body for POST /assistants/{id}/revisions — create a new revision.
  - `based_on_revision_id` string, uuid, nullable
  - `name` string, nullable
  - `description` string, nullable

## Response `201`

Successful Response

- 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

## 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)
