Skip to article
On this page
  1. Persona calls
  2. List personas
  3. Describe a persona
  4. Create a persona
  5. Update a persona
  6. Delete a persona

Personas

A persona is a reusable set of agent instructions. Built-in personas are immutable; they can be enabled or disabled.

Persona calls

Method Path Description
GET /api/v1/personas Lists persona metadata without full instructions.
POST /api/v1/personas Creates a custom persona.
GET /api/v1/personas/{persona_id} Describes a persona including its complete instructions.
PATCH /api/v1/personas/{persona_id} Modifies content or user enablement.
DELETE /api/v1/personas/{persona_id} Deletes a persona when it has no blocking dependencies.

List personas

GET /api/v1/personas returns summary metadata without instructions, skill IDs, or metadata. An optional search matches eligible persona content.

The endpoint returns 12 personas per page and accepts offset, search, status (enabled or disabled), repeatable category, and sort (alphabetical-asc, alphabetical-desc, newest, or oldest). Repeated categories use OR semantics. newest and oldest order by created_at, with name and ID providing stable tie-breakers. Status refers to effective user enablement, including user overrides of a built-in default. List items include the top-level category.

GET /api/v1/personas?search=api
X-User-ID: user-acme

Example response (200 OK):

{
  "items": [
    {
      "id": "persona-api-reviewer",
      "name": "ApiReviewer",
      "description": "Reviews public API compatibility.",
      "origin": "custom",
      "enabled": true,
      "editable": true,
      "duplicable": true,
      "deprecated": false,
      "catalog_version": null,
      "source_instruction_id": null,
      "version": 1,
      "created_at": "2026-08-13T10:00:00Z",
      "updated_at": "2026-08-13T10:00:00Z"
    }
  ],
  "total": 1
}

Describe a persona

GET /api/v1/personas/{persona_id} returns the complete persona, including instructions, associated skill IDs, and metadata.

GET /api/v1/personas/persona-api-reviewer
X-User-ID: user-acme

Example response (200 OK):

{
  "id": "persona-api-reviewer",
  "name": "ApiReviewer",
  "description": "Reviews public API compatibility.",
  "instructions": "Inspect every public contract and report breaking changes.",
  "skill_ids": [
    "skill-api-compatibility"
  ],
  "metadata": {
    "team": "platform"
  },
  "origin": "custom",
  "enabled": true,
  "editable": true,
  "duplicable": true,
  "deprecated": false,
  "catalog_version": null,
  "source_instruction_id": null,
  "version": 1,
  "created_at": "2026-08-13T10:00:00Z",
  "updated_at": "2026-08-13T10:00:00Z"
}

Create a persona

POST /api/v1/personas creates a custom Persona owned by the registered user identified by X-User-ID. Persona routes do not use X-Project-ID.

Field JSON type Create Update Restrictions
name String Required Optional Contains 1 to 140 characters. Starts with a Unicode letter, number, or _. Does not contain whitespace, ., +, ?, /, <, >, *, %, &, or :.
description String Optional Optional Defaults to an empty string on create. May be empty.
instructions String Required Optional Must not be empty.
skill_ids Array of strings Optional Optional Contains unique ordered IDs of available skills. Defaults to an empty array on create.
metadata Object Optional Optional category, when present, must use the shared company-area taxonomy. Defaults to an empty object on create.
expected_version Integer Not allowed Required for content changes Positive current Persona version. Not required for an enablement-only update.
enabled Boolean Not allowed Optional Enables or disables the Persona for the current user.
POST /api/v1/personas
X-User-ID: user-acme
Content-Type: application/json
{
  "name": "ApiReviewer",
  "description": "Reviews public API compatibility.",
  "instructions": "Inspect every public contract and report breaking changes.",
  "skill_ids": [
    "skill-api-compatibility"
  ],
  "metadata": {
    "team": "platform"
  }
}

Example response (201 Created):

{
  "id": "persona-api-reviewer",
  "name": "ApiReviewer",
  "description": "Reviews public API compatibility.",
  "instructions": "Inspect every public contract and report breaking changes.",
  "skill_ids": [
    "skill-api-compatibility"
  ],
  "metadata": {
    "team": "platform"
  },
  "origin": "custom",
  "enabled": true,
  "editable": true,
  "duplicable": true,
  "deprecated": false,
  "catalog_version": null,
  "source_instruction_id": null,
  "version": 1,
  "created_at": "2026-08-13T10:00:00Z",
  "updated_at": "2026-08-13T10:00:00Z"
}

Update a persona

Include at least one of name, description, instructions, skill_ids, metadata, or enabled. Supplying skill_ids replaces the complete association; an empty list removes every skill. Content changes require expected_version; an enabled-only change does not. enabled must be true or false, not null. Built-in content is immutable, but its enabled state can be patched.

PATCH /api/v1/personas/persona-api-reviewer
X-User-ID: user-acme
Content-Type: application/json
{
  "expected_version": 1,
  "description": "Reviews public API compatibility and migration impact."
}

Example response (200 OK):

{
  "id": "persona-api-reviewer",
  "name": "ApiReviewer",
  "description": "Reviews public API compatibility and migration impact.",
  "instructions": "Inspect every public contract and report breaking changes.",
  "skill_ids": [
    "skill-api-compatibility"
  ],
  "metadata": {
    "team": "platform"
  },
  "origin": "custom",
  "enabled": true,
  "editable": true,
  "duplicable": true,
  "deprecated": false,
  "catalog_version": null,
  "source_instruction_id": null,
  "version": 2,
  "created_at": "2026-08-13T10:00:00Z",
  "updated_at": "2026-08-13T10:15:00Z"
}

Write and describe operations return the complete persona, including id, instructions, skill_ids, metadata, origin and capabilities, version, and timestamps. Deleting a custom skill automatically removes its ID from every associated persona. List items omit instructions, skill IDs, and metadata but include their top-level category.

Delete a persona

DELETE /api/v1/personas/{persona_id} removes the current user’s custom Persona when no resource depends on it. Built-in Persona content is immutable and cannot be deleted.

DELETE /api/v1/personas/persona-api-reviewer
X-User-ID: user-acme

Example response (200 OK):

{
  "deleted": true
}

The endpoint returns 409 resource_in_use when another resource depends on the Persona, 409 builtin_instruction_immutable for built-in Personas, and 404 instruction_not_found when the Persona is not visible to the current user.