# Chats

Programmatic API for Coder Agents (the user-facing "Coder Agents" / "Chats" product). Use these endpoints to create, list, and manage AI coding agent sessions.

## Connect to chat workspace desktop via WebSockets [#connect-to-chat-workspace-desktop-via-websockets]

### Code samples [#code-samples]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/experimental/chats/{chat}/stream/desktop \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/experimental/chats/{chat}/stream/desktop`

Raw binary WebSocket stream of the chat workspace desktop.
Experimental: this endpoint is subject to change.

### Parameters [#parameters]

| Name   | In   | Type         | Required | Description |
| ------ | ---- | ------------ | -------- | ----------- |
| `chat` | path | string(uuid) | true     | Chat ID     |

### Responses [#responses]

| Status | Meaning                                                                  | Description         | Schema |
| ------ | ------------------------------------------------------------------------ | ------------------- | ------ |
| 101    | [Switching Protocols](https://tools.ietf.org/html/rfc7231#section-6.2.2) | Switching Protocols |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## List chats [#list-chats]

### Code samples [#code-samples-1]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats`

### Parameters [#parameters-1]

| Name       | In    | Type           | Required | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ---------- | ----- | -------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `q`        | query | string         | false    | Search query. Supports `title:<substring>` (case-insensitive, quote multi-word values), `archived:bool`, `has_unread:bool`, `pr_status:<draft\|open\|merged\|closed>` as repeated or comma-separated values, `source:<created_by_me\|shared_with_me>`, `diff_url:<url>` (quote values containing colons), `pr:<number>` (exact PR number match), `repo:<owner/repo>` (case-insensitive substring match against git remote origin or URL), `pr_title:<text>` (case-insensitive PR title substring), `search:<text>` (full-text search across chat titles, PR titles, PR numbers, and message bodies; message bodies match English word stems, e.g. `refactor` matches `refactoring`, and ignore English stopwords; titles and PR titles match whole words case-insensitively without stemming; quote multi-word values; cannot be combined with title, pr\_title, or pr; a value that tokenizes to no searchable words, e.g. punctuation only, returns an empty list). Bare terms are not supported; use `title:<value>` or `search:<value>`. |
| `label`    | query | array\[string] | false    | Filter by label as key:value. Repeat for multiple (AND logic).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `after_id` | query | string(uuid)   | false    | After ID                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `limit`    | query | integer        | false    | Page limit                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `offset`   | query | integer        | false    | Page offset                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |

### Example responses [#example-responses]

> 200 Response

```json
[
  {
    "agent_id": "2b1e3b65-2c04-4fa2-a2d7-467901e98978",
    "archived": true,
    "build_id": "bfb1f3fa-bf7b-43a5-9e0b-26cc050e44cb",
    "children": [
      {}
    ],
    "client_type": "ui",
    "context": {
      "dirty": true,
      "dirty_since": "2019-08-24T14:15:22Z",
      "error": "string",
      "resources": [
        {
          "error": "string",
          "kind": "instruction_file",
          "size_bytes": 0,
          "skill_description": "string",
          "skill_name": "string",
          "source": "string",
          "status": "ok",
          "tools": [
            {
              "description": "string",
              "name": "string"
            }
          ]
        }
      ]
    },
    "created_at": "2019-08-24T14:15:22Z",
    "diff_status": {
      "additions": 0,
      "approved": true,
      "author_avatar_url": "string",
      "author_login": "string",
      "base_branch": "string",
      "changed_files": 0,
      "changes_requested": true,
      "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
      "commits": 0,
      "deletions": 0,
      "head_branch": "string",
      "pr_number": 0,
      "pull_request_draft": true,
      "pull_request_state": "string",
      "pull_request_title": "string",
      "refreshed_at": "2019-08-24T14:15:22Z",
      "reviewer_count": 0,
      "stale_at": "2019-08-24T14:15:22Z",
      "url": "string"
    },
    "files": [
      {
        "created_at": "2019-08-24T14:15:22Z",
        "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
        "mime_type": "string",
        "name": "string",
        "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
        "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
        "size_bytes": 0
      }
    ],
    "has_unread": true,
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "labels": {
      "property1": "string",
      "property2": "string"
    },
    "last_error": {
      "detail": "string",
      "kind": "generic",
      "message": "string",
      "provider": "string",
      "retryable": true,
      "status_code": 0
    },
    "last_model_config_id": "30ebb95f-c255-4759-9429-89aa4ec1554c",
    "last_reasoning_effort": "string",
    "last_turn_summary": "string",
    "mcp_server_ids": [
      "497f6eca-6276-4993-bfeb-53cbbbba6f08"
    ],
    "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
    "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
    "owner_name": "string",
    "owner_username": "string",
    "parent_chat_id": "c3609ee6-3b11-4a93-b9ae-e4fabcc99359",
    "pin_order": 0,
    "plan_mode": "plan",
    "queued_for_capacity": true,
    "root_chat_id": "2898031c-fdce-4e3e-8c53-4481dd42fcd7",
    "shared": true,
    "status": "waiting",
    "summary": "string",
    "title": "string",
    "updated_at": "2019-08-24T14:15:22Z",
    "warnings": [
      "string"
    ],
    "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
  }
]
```

### Responses [#responses-1]

| Status | Meaning                                                 | Description | Schema                                                                   |
| ------ | ------------------------------------------------------- | ----------- | ------------------------------------------------------------------------ |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | array of [codersdk.Chat](/beta-docs/reference/api/schemas/#codersdkchat) |

<h3 id="list-chats-responseschema">Response Schema</h3>

Status Code **200**

| Name                      | Type                                                                                                      | Required | Restrictions | Description                                                                                                                                                                                                                                                                 |
| ------------------------- | --------------------------------------------------------------------------------------------------------- | -------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `[array item]`            | array                                                                                                     | false    |              |                                                                                                                                                                                                                                                                             |
| `» agent_id`              | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |
| `» archived`              | boolean                                                                                                   | false    |              |                                                                                                                                                                                                                                                                             |
| `» build_id`              | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |
| `» children`              | [codersdk.Chat](/beta-docs/reference/api/schemas/#codersdkchat)                                           | false    |              | Children holds child (subagent) chats nested under this root chat. Always initialized to an empty slice so the JSON field is present as \[]. Child chats cannot create their own subagents, so nesting depth is capped at 1 and this slice is always empty for child chats. |
| `» client_type`           | [codersdk.ChatClientType](/beta-docs/reference/api/schemas/#codersdkchatclienttype)                       | false    |              |                                                                                                                                                                                                                                                                             |
| `» context`               | [codersdk.ChatContext](/beta-docs/reference/api/schemas/#codersdkchatcontext)                             | false    |              | Context reports the chat's pinned workspace-context state and whether it has drifted from the agent's latest pushed snapshot. Nil when the chat has no pinned context yet.                                                                                                  |
| `»» dirty`                | boolean                                                                                                   | false    |              | Dirty is true when the agent's latest snapshot hash differs from the chat's pinned hash.                                                                                                                                                                                    |
| `»» dirty_since`          | string(date-time)                                                                                         | false    |              | Dirty since is when drift was first detected; nil when not dirty.                                                                                                                                                                                                           |
| `»» error`                | string                                                                                                    | false    |              | Error is the snapshot-level error copied from the pinned snapshot (empty when healthy).                                                                                                                                                                                     |
| `»» resources`            | array                                                                                                     | false    |              | Resources is the chat's pinned context (instruction files and skills) the prompt is built from, metadata only (no bodies). It is populated only on the single-chat GET response; list and watch payloads leave it nil to stay lightweight.                                  |
| `»»» error`               | string                                                                                                    | false    |              | Error explains a non-ok Status; empty when healthy. May also carry a non-fatal warning when Status is ok.                                                                                                                                                                   |
| `»»» kind`                | [codersdk.ChatContextResourceKind](/beta-docs/reference/api/schemas/#codersdkchatcontextresourcekind)     | false    |              |                                                                                                                                                                                                                                                                             |
| `»»» size_bytes`          | integer                                                                                                   | false    |              | Size bytes is the original payload size in bytes.                                                                                                                                                                                                                           |
| `»»» skill_description`   | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `»»» skill_name`          | string                                                                                                    | false    |              | Skill name and SkillDescription are populated only for skill kinds.                                                                                                                                                                                                         |
| `»»» source`              | string                                                                                                    | false    |              | Source is the resource locator: the canonical file path for an instruction file, the skill directory for a skill, the file path for an MCP config, or the server name for an MCP server.                                                                                    |
| `»»» status`              | [codersdk.ChatContextResourceStatus](/beta-docs/reference/api/schemas/#codersdkchatcontextresourcestatus) | false    |              | Status is the resource's health. Non-ok resources (invalid, unreadable, oversize, excluded) are still reported so the UI can surface why a resource was dropped from the prompt instead of silently omitting it; their body-specific fields (skill name, tools) are empty.  |
| `»»» tools`               | array                                                                                                     | false    |              | Tools lists the tools exposed by an MCP server. Populated only for the mcp\_server kind; nil otherwise.                                                                                                                                                                     |
| `»»»» description`        | string                                                                                                    | false    |              | Description is the tool's human-readable summary; may be empty.                                                                                                                                                                                                             |
| `»»»» name`               | string                                                                                                    | false    |              | Name is the tool name with the `<server>__` prefix the agent adds stripped, so it reads as the server exposes it.                                                                                                                                                           |
| `» created_at`            | string(date-time)                                                                                         | false    |              |                                                                                                                                                                                                                                                                             |
| `» diff_status`           | [codersdk.ChatDiffStatus](/beta-docs/reference/api/schemas/#codersdkchatdiffstatus)                       | false    |              |                                                                                                                                                                                                                                                                             |
| `»» additions`            | integer                                                                                                   | false    |              |                                                                                                                                                                                                                                                                             |
| `»» approved`             | boolean                                                                                                   | false    |              |                                                                                                                                                                                                                                                                             |
| `»» author_avatar_url`    | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `»» author_login`         | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `»» base_branch`          | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `»» changed_files`        | integer                                                                                                   | false    |              |                                                                                                                                                                                                                                                                             |
| `»» changes_requested`    | boolean                                                                                                   | false    |              |                                                                                                                                                                                                                                                                             |
| `»» chat_id`              | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |
| `»» commits`              | integer                                                                                                   | false    |              |                                                                                                                                                                                                                                                                             |
| `»» deletions`            | integer                                                                                                   | false    |              |                                                                                                                                                                                                                                                                             |
| `»» head_branch`          | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `»» pr_number`            | integer                                                                                                   | false    |              |                                                                                                                                                                                                                                                                             |
| `»» pull_request_draft`   | boolean                                                                                                   | false    |              |                                                                                                                                                                                                                                                                             |
| `»» pull_request_state`   | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `»» pull_request_title`   | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `»» refreshed_at`         | string(date-time)                                                                                         | false    |              |                                                                                                                                                                                                                                                                             |
| `»» reviewer_count`       | integer                                                                                                   | false    |              |                                                                                                                                                                                                                                                                             |
| `»» stale_at`             | string(date-time)                                                                                         | false    |              |                                                                                                                                                                                                                                                                             |
| `»» url`                  | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `» files`                 | array                                                                                                     | false    |              |                                                                                                                                                                                                                                                                             |
| `»» created_at`           | string(date-time)                                                                                         | false    |              |                                                                                                                                                                                                                                                                             |
| `»» id`                   | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |
| `»» mime_type`            | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `»» name`                 | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `»» organization_id`      | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |
| `»» owner_id`             | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |
| `»» size_bytes`           | integer                                                                                                   | false    |              |                                                                                                                                                                                                                                                                             |
| `» has_unread`            | boolean                                                                                                   | false    |              | Has unread is true when assistant messages exist beyond the owner's read cursor, which updates on stream connect and disconnect.                                                                                                                                            |
| `» id`                    | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |
| `» labels`                | object                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `»» [any property]`       | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `» last_error`            | [codersdk.ChatError](/beta-docs/reference/api/schemas/#codersdkchaterror)                                 | false    |              |                                                                                                                                                                                                                                                                             |
| `»» detail`               | string                                                                                                    | false    |              | Detail is optional provider-specific context shown alongside the normalized error message when available.                                                                                                                                                                   |
| `»» kind`                 | [codersdk.ChatErrorKind](/beta-docs/reference/api/schemas/#codersdkchaterrorkind)                         | false    |              | Kind classifies the error for consistent client rendering.                                                                                                                                                                                                                  |
| `»» message`              | string                                                                                                    | false    |              | Message is the normalized, user-facing error message.                                                                                                                                                                                                                       |
| `»» provider`             | string                                                                                                    | false    |              | Provider identifies the upstream model provider when known.                                                                                                                                                                                                                 |
| `»» retryable`            | boolean                                                                                                   | false    |              | Retryable reports whether the underlying error is transient.                                                                                                                                                                                                                |
| `»» status_code`          | integer                                                                                                   | false    |              | Status code is the best-effort upstream HTTP status code.                                                                                                                                                                                                                   |
| `» last_model_config_id`  | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |
| `» last_reasoning_effort` | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `» last_turn_summary`     | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `» mcp_server_ids`        | array                                                                                                     | false    |              |                                                                                                                                                                                                                                                                             |
| `» organization_id`       | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |
| `» owner_id`              | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |
| `» owner_name`            | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `» owner_username`        | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `» parent_chat_id`        | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |
| `» pin_order`             | integer                                                                                                   | false    |              |                                                                                                                                                                                                                                                                             |
| `» plan_mode`             | [codersdk.ChatPlanMode](/beta-docs/reference/api/schemas/#codersdkchatplanmode)                           | false    |              |                                                                                                                                                                                                                                                                             |
| `» queued_for_capacity`   | boolean                                                                                                   | false    |              | Queued for capacity reports that the chat is waiting for a concurrent agent slot. Single-chat reads derive it; list responses leave it false.                                                                                                                               |
| `» root_chat_id`          | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |
| `» shared`                | boolean                                                                                                   | false    |              | Shared is true when this chat's root chat has explicit user or group ACL entries.                                                                                                                                                                                           |
| `» status`                | [codersdk.ChatStatus](/beta-docs/reference/api/schemas/#codersdkchatstatus)                               | false    |              |                                                                                                                                                                                                                                                                             |
| `» summary`               | string                                                                                                    | false    |              | Summary is the persisted whole-chat summary, generated in the background. It is nil until the first summary has been produced.                                                                                                                                              |
| `» title`                 | string                                                                                                    | false    |              |                                                                                                                                                                                                                                                                             |
| `» updated_at`            | string(date-time)                                                                                         | false    |              |                                                                                                                                                                                                                                                                             |
| `» warnings`              | array                                                                                                     | false    |              |                                                                                                                                                                                                                                                                             |
| `» workspace_id`          | string(uuid)                                                                                              | false    |              |                                                                                                                                                                                                                                                                             |

#### Enumerated Values [#enumerated-values]

| Property      | Value(s)                                                                                                                                                                                                                                                          |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `client_type` | `api`, `ui`                                                                                                                                                                                                                                                       |
| `kind`        | `auth`, `config`, `content_filter`, `generic`, `hook_denied`, `hook_dispatch_failed`, `instruction_file`, `mcp_config`, `mcp_server`, `missing_key`, `overloaded`, `provider_disabled`, `rate_limit`, `skill`, `stream_silence_timeout`, `timeout`, `usage_limit` |
| `status`      | `error`, `excluded`, `interrupting`, `invalid`, `ok`, `oversize`, `requires_action`, `running`, `unreadable`, `waiting`                                                                                                                                           |
| `plan_mode`   | `plan`                                                                                                                                                                                                                                                            |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Create chat [#create-chat]

### Code samples [#code-samples-2]

```sh
# Example request using curl
curl -X POST http://coder-server:8080/api/v2/chats \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`POST /api/v2/chats`

> Body parameter

```json
{
  "client_type": "ui",
  "content": [
    {
      "content": "string",
      "end_line": 0,
      "file_id": "8a0cfb4f-ddc9-436d-91bb-75133c583767",
      "file_name": "string",
      "start_line": 0,
      "text": "string",
      "type": "text"
    }
  ],
  "labels": {
    "property1": "string",
    "property2": "string"
  },
  "mcp_server_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "model_config_id": "f5fb4d91-62ca-4377-9ee6-5d43ba00d205",
  "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
  "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
  "plan_mode": "plan",
  "reasoning_effort": "string",
  "system_prompt": "string",
  "unsafe_dynamic_tools": [
    {
      "description": "string",
      "input_schema": [
        0
      ],
      "name": "string"
    }
  ],
  "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}
```

### Parameters [#parameters-2]

| Name   | In   | Type                                                                                      | Required | Description         |
| ------ | ---- | ----------------------------------------------------------------------------------------- | -------- | ------------------- |
| `body` | body | [codersdk.CreateChatRequest](/beta-docs/reference/api/schemas/#codersdkcreatechatrequest) | true     | Create chat request |

### Example responses [#example-responses-1]

> 201 Response

```json
{
  "agent_id": "2b1e3b65-2c04-4fa2-a2d7-467901e98978",
  "archived": true,
  "build_id": "bfb1f3fa-bf7b-43a5-9e0b-26cc050e44cb",
  "children": [
    {
      "agent_id": "2b1e3b65-2c04-4fa2-a2d7-467901e98978",
      "archived": true,
      "build_id": "bfb1f3fa-bf7b-43a5-9e0b-26cc050e44cb",
      "children": [],
      "client_type": "ui",
      "context": {
        "dirty": true,
        "dirty_since": "2019-08-24T14:15:22Z",
        "error": "string",
        "resources": [
          {
            "error": "string",
            "kind": "instruction_file",
            "size_bytes": 0,
            "skill_description": "string",
            "skill_name": "string",
            "source": "string",
            "status": "ok",
            "tools": [
              {
                "description": "string",
                "name": "string"
              }
            ]
          }
        ]
      },
      "created_at": "2019-08-24T14:15:22Z",
      "diff_status": {
        "additions": 0,
        "approved": true,
        "author_avatar_url": "string",
        "author_login": "string",
        "base_branch": "string",
        "changed_files": 0,
        "changes_requested": true,
        "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
        "commits": 0,
        "deletions": 0,
        "head_branch": "string",
        "pr_number": 0,
        "pull_request_draft": true,
        "pull_request_state": "string",
        "pull_request_title": "string",
        "refreshed_at": "2019-08-24T14:15:22Z",
        "reviewer_count": 0,
        "stale_at": "2019-08-24T14:15:22Z",
        "url": "string"
      },
      "files": [
        {
          "created_at": "2019-08-24T14:15:22Z",
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "mime_type": "string",
          "name": "string",
          "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
          "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
          "size_bytes": 0
        }
      ],
      "has_unread": true,
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "labels": {
        "property1": "string",
        "property2": "string"
      },
      "last_error": {
        "detail": "string",
        "kind": "generic",
        "message": "string",
        "provider": "string",
        "retryable": true,
        "status_code": 0
      },
      "last_model_config_id": "30ebb95f-c255-4759-9429-89aa4ec1554c",
      "last_reasoning_effort": "string",
      "last_turn_summary": "string",
      "mcp_server_ids": [
        "497f6eca-6276-4993-bfeb-53cbbbba6f08"
      ],
      "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "owner_name": "string",
      "owner_username": "string",
      "parent_chat_id": "c3609ee6-3b11-4a93-b9ae-e4fabcc99359",
      "pin_order": 0,
      "plan_mode": "plan",
      "queued_for_capacity": true,
      "root_chat_id": "2898031c-fdce-4e3e-8c53-4481dd42fcd7",
      "shared": true,
      "status": "waiting",
      "summary": "string",
      "title": "string",
      "updated_at": "2019-08-24T14:15:22Z",
      "warnings": [
        "string"
      ],
      "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
    }
  ],
  "client_type": "ui",
  "context": {
    "dirty": true,
    "dirty_since": "2019-08-24T14:15:22Z",
    "error": "string",
    "resources": [
      {
        "error": "string",
        "kind": "instruction_file",
        "size_bytes": 0,
        "skill_description": "string",
        "skill_name": "string",
        "source": "string",
        "status": "ok",
        "tools": [
          {
            "description": "string",
            "name": "string"
          }
        ]
      }
    ]
  },
  "created_at": "2019-08-24T14:15:22Z",
  "diff_status": {
    "additions": 0,
    "approved": true,
    "author_avatar_url": "string",
    "author_login": "string",
    "base_branch": "string",
    "changed_files": 0,
    "changes_requested": true,
    "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
    "commits": 0,
    "deletions": 0,
    "head_branch": "string",
    "pr_number": 0,
    "pull_request_draft": true,
    "pull_request_state": "string",
    "pull_request_title": "string",
    "refreshed_at": "2019-08-24T14:15:22Z",
    "reviewer_count": 0,
    "stale_at": "2019-08-24T14:15:22Z",
    "url": "string"
  },
  "files": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "mime_type": "string",
      "name": "string",
      "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "size_bytes": 0
    }
  ],
  "has_unread": true,
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "labels": {
    "property1": "string",
    "property2": "string"
  },
  "last_error": {
    "detail": "string",
    "kind": "generic",
    "message": "string",
    "provider": "string",
    "retryable": true,
    "status_code": 0
  },
  "last_model_config_id": "30ebb95f-c255-4759-9429-89aa4ec1554c",
  "last_reasoning_effort": "string",
  "last_turn_summary": "string",
  "mcp_server_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
  "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
  "owner_name": "string",
  "owner_username": "string",
  "parent_chat_id": "c3609ee6-3b11-4a93-b9ae-e4fabcc99359",
  "pin_order": 0,
  "plan_mode": "plan",
  "queued_for_capacity": true,
  "root_chat_id": "2898031c-fdce-4e3e-8c53-4481dd42fcd7",
  "shared": true,
  "status": "waiting",
  "summary": "string",
  "title": "string",
  "updated_at": "2019-08-24T14:15:22Z",
  "warnings": [
    "string"
  ],
  "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}
```

### Responses [#responses-2]

| Status | Meaning                                                                 | Description                  | Schema                                                                  |
| ------ | ----------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------- |
| 201    | [Created](https://tools.ietf.org/html/rfc7231#section-6.3.2)            | Created                      | [codersdk.Chat](/beta-docs/reference/api/schemas/#codersdkchat)         |
| 413    | [Payload Too Large](https://tools.ietf.org/html/rfc7231#section-6.5.11) | Request body exceeds 256 KiB | [codersdk.Response](/beta-docs/reference/api/schemas/#codersdkresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## List chats by workspace [#list-chats-by-workspace]

### Code samples [#code-samples-3]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/by-workspace \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/by-workspace`

### Parameters [#parameters-3]

| Name            | In    | Type   | Required | Description                   |
| --------------- | ----- | ------ | -------- | ----------------------------- |
| `workspace_ids` | query | string | false    | Comma-separated workspace IDs |

### Example responses [#example-responses-2]

> 200 Response

```json
{
  "property1": "string",
  "property2": "string"
}
```

### Responses [#responses-3]

| Status | Meaning                                                 | Description | Schema                                                                                              |
| ------ | ------------------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [coderd.chatsByWorkspaceResponse](/beta-docs/reference/api/schemas/#coderdchatsbyworkspaceresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get chat auto archive days [#get-chat-auto-archive-days]

### Code samples [#code-samples-4]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/config/auto-archive-days \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/config/auto-archive-days`

### Example responses [#example-responses-3]

> 200 Response

```json
{
  "auto_archive_days": 0
}
```

### Responses [#responses-4]

| Status | Meaning                                                 | Description | Schema                                                                                                        |
| ------ | ------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ChatAutoArchiveDaysResponse](/beta-docs/reference/api/schemas/#codersdkchatautoarchivedaysresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Update chat auto archive days [#update-chat-auto-archive-days]

### Code samples [#code-samples-5]

```sh
# Example request using curl
curl -X PUT http://coder-server:8080/api/v2/chats/config/auto-archive-days \
  -H 'Content-Type: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PUT /api/v2/chats/config/auto-archive-days`

> Body parameter

```json
{
  "auto_archive_days": 0
}
```

### Parameters [#parameters-4]

| Name   | In   | Type                                                                                                                    | Required | Description  |
| ------ | ---- | ----------------------------------------------------------------------------------------------------------------------- | -------- | ------------ |
| `body` | body | [codersdk.UpdateChatAutoArchiveDaysRequest](/beta-docs/reference/api/schemas/#codersdkupdatechatautoarchivedaysrequest) | true     | Request body |

### Responses [#responses-5]

| Status | Meaning                                                         | Description | Schema |
| ------ | --------------------------------------------------------------- | ----------- | ------ |
| 204    | [No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) | No Content  |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get chat debug logging setting [#get-chat-debug-logging-setting]

### Code samples [#code-samples-6]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/config/debug-logging \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/config/debug-logging`

### Example responses [#example-responses-4]

> 200 Response

```json
{
  "allow_users": true,
  "forced_by_deployment": true
}
```

### Responses [#responses-6]

| Status | Meaning                                                 | Description | Schema                                                                                                            |
| ------ | ------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ChatDebugLoggingAdminSettings](/beta-docs/reference/api/schemas/#codersdkchatdebugloggingadminsettings) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Update chat debug logging setting [#update-chat-debug-logging-setting]

### Code samples [#code-samples-7]

```sh
# Example request using curl
curl -X PUT http://coder-server:8080/api/v2/chats/config/debug-logging \
  -H 'Content-Type: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PUT /api/v2/chats/config/debug-logging`

> Body parameter

```json
{
  "allow_users": true
}
```

### Parameters [#parameters-5]

| Name   | In   | Type                                                                                                                                  | Required | Description  |
| ------ | ---- | ------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------------ |
| `body` | body | [codersdk.UpdateChatDebugLoggingAllowUsersRequest](/beta-docs/reference/api/schemas/#codersdkupdatechatdebugloggingallowusersrequest) | true     | Request body |

### Responses [#responses-7]

| Status | Meaning                                                         | Description | Schema |
| ------ | --------------------------------------------------------------- | ----------- | ------ |
| 204    | [No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) | No Content  |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get chat debug retention days [#get-chat-debug-retention-days]

### Code samples [#code-samples-8]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/config/debug-retention-days \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/config/debug-retention-days`

### Example responses [#example-responses-5]

> 200 Response

```json
{
  "debug_retention_days": 0
}
```

### Responses [#responses-8]

| Status | Meaning                                                 | Description | Schema                                                                                                              |
| ------ | ------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ChatDebugRetentionDaysResponse](/beta-docs/reference/api/schemas/#codersdkchatdebugretentiondaysresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Update chat debug retention days [#update-chat-debug-retention-days]

### Code samples [#code-samples-9]

```sh
# Example request using curl
curl -X PUT http://coder-server:8080/api/v2/chats/config/debug-retention-days \
  -H 'Content-Type: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PUT /api/v2/chats/config/debug-retention-days`

> Body parameter

```json
{
  "debug_retention_days": 0
}
```

### Parameters [#parameters-6]

| Name   | In   | Type                                                                                                                          | Required | Description  |
| ------ | ---- | ----------------------------------------------------------------------------------------------------------------------------- | -------- | ------------ |
| `body` | body | [codersdk.UpdateChatDebugRetentionDaysRequest](/beta-docs/reference/api/schemas/#codersdkupdatechatdebugretentiondaysrequest) | true     | Request body |

### Responses [#responses-9]

| Status | Meaning                                                         | Description | Schema |
| ------ | --------------------------------------------------------------- | ----------- | ------ |
| 204    | [No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) | No Content  |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get chat personal model override settings [#get-chat-personal-model-override-settings]

### Code samples [#code-samples-10]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/config/personal-model-overrides \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/config/personal-model-overrides`

### Example responses [#example-responses-6]

> 200 Response

```json
{
  "allow_users": true
}
```

### Responses [#responses-10]

| Status | Meaning                                                 | Description | Schema                                                                                                                                |
| ------ | ------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ChatPersonalModelOverridesAdminSettings](/beta-docs/reference/api/schemas/#codersdkchatpersonalmodeloverridesadminsettings) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Update chat personal model override settings [#update-chat-personal-model-override-settings]

### Code samples [#code-samples-11]

```sh
# Example request using curl
curl -X PUT http://coder-server:8080/api/v2/chats/config/personal-model-overrides \
  -H 'Content-Type: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PUT /api/v2/chats/config/personal-model-overrides`

> Body parameter

```json
{
  "allow_users": true
}
```

### Parameters [#parameters-7]

| Name   | In   | Type                                                                                                                                                            | Required | Description  |
| ------ | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------------ |
| `body` | body | [codersdk.UpdateChatPersonalModelOverridesAdminSettingsRequest](/beta-docs/reference/api/schemas/#codersdkupdatechatpersonalmodeloverridesadminsettingsrequest) | true     | Request body |

### Responses [#responses-11]

| Status | Meaning                                                         | Description | Schema |
| ------ | --------------------------------------------------------------- | ----------- | ------ |
| 204    | [No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) | No Content  |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get chat plan mode instructions [#get-chat-plan-mode-instructions]

### Code samples [#code-samples-12]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/config/plan-mode-instructions \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/config/plan-mode-instructions`

### Example responses [#example-responses-7]

> 200 Response

```json
{
  "plan_mode_instructions": "string"
}
```

### Responses [#responses-12]

| Status | Meaning                                                 | Description | Schema                                                                                                                  |
| ------ | ------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ChatPlanModeInstructionsResponse](/beta-docs/reference/api/schemas/#codersdkchatplanmodeinstructionsresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Update chat plan mode instructions [#update-chat-plan-mode-instructions]

### Code samples [#code-samples-13]

```sh
# Example request using curl
curl -X PUT http://coder-server:8080/api/v2/chats/config/plan-mode-instructions \
  -H 'Content-Type: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PUT /api/v2/chats/config/plan-mode-instructions`

> Body parameter

```json
{
  "plan_mode_instructions": "string"
}
```

### Parameters [#parameters-8]

| Name   | In   | Type                                                                                                                              | Required | Description  |
| ------ | ---- | --------------------------------------------------------------------------------------------------------------------------------- | -------- | ------------ |
| `body` | body | [codersdk.UpdateChatPlanModeInstructionsRequest](/beta-docs/reference/api/schemas/#codersdkupdatechatplanmodeinstructionsrequest) | true     | Request body |

### Responses [#responses-13]

| Status | Meaning                                                         | Description | Schema |
| ------ | --------------------------------------------------------------- | ----------- | ------ |
| 204    | [No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) | No Content  |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get chat system prompt [#get-chat-system-prompt]

### Code samples [#code-samples-14]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/config/system-prompt \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/config/system-prompt`

### Example responses [#example-responses-8]

> 200 Response

```json
{
  "default_system_prompt": "string",
  "include_default_system_prompt": true,
  "system_prompt": "string"
}
```

### Responses [#responses-14]

| Status | Meaning                                                 | Description | Schema                                                                                                  |
| ------ | ------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ChatSystemPromptResponse](/beta-docs/reference/api/schemas/#codersdkchatsystempromptresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Update chat system prompt [#update-chat-system-prompt]

### Code samples [#code-samples-15]

```sh
# Example request using curl
curl -X PUT http://coder-server:8080/api/v2/chats/config/system-prompt \
  -H 'Content-Type: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PUT /api/v2/chats/config/system-prompt`

> Body parameter

```json
{
  "include_default_system_prompt": true,
  "system_prompt": "string"
}
```

### Parameters [#parameters-9]

| Name   | In   | Type                                                                                                              | Required | Description  |
| ------ | ---- | ----------------------------------------------------------------------------------------------------------------- | -------- | ------------ |
| `body` | body | [codersdk.UpdateChatSystemPromptRequest](/beta-docs/reference/api/schemas/#codersdkupdatechatsystempromptrequest) | true     | Request body |

### Responses [#responses-15]

| Status | Meaning                                                         | Description | Schema |
| ------ | --------------------------------------------------------------- | ----------- | ------ |
| 204    | [No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) | No Content  |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get user chat debug logging setting [#get-user-chat-debug-logging-setting]

### Code samples [#code-samples-16]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/config/user-debug-logging \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/config/user-debug-logging`

### Example responses [#example-responses-9]

> 200 Response

```json
{
  "debug_logging_enabled": true,
  "forced_by_deployment": true,
  "user_toggle_allowed": true
}
```

### Responses [#responses-16]

| Status | Meaning                                                 | Description | Schema                                                                                                          |
| ------ | ------------------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.UserChatDebugLoggingSettings](/beta-docs/reference/api/schemas/#codersdkuserchatdebugloggingsettings) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Update user chat debug logging setting [#update-user-chat-debug-logging-setting]

### Code samples [#code-samples-17]

```sh
# Example request using curl
curl -X PUT http://coder-server:8080/api/v2/chats/config/user-debug-logging \
  -H 'Content-Type: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PUT /api/v2/chats/config/user-debug-logging`

> Body parameter

```json
{
  "debug_logging_enabled": true
}
```

### Parameters [#parameters-10]

| Name   | In   | Type                                                                                                                      | Required | Description  |
| ------ | ---- | ------------------------------------------------------------------------------------------------------------------------- | -------- | ------------ |
| `body` | body | [codersdk.UpdateUserChatDebugLoggingRequest](/beta-docs/reference/api/schemas/#codersdkupdateuserchatdebugloggingrequest) | true     | Request body |

### Responses [#responses-17]

| Status | Meaning                                                         | Description | Schema |
| ------ | --------------------------------------------------------------- | ----------- | ------ |
| 204    | [No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) | No Content  |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get user chat custom prompt [#get-user-chat-custom-prompt]

### Code samples [#code-samples-18]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/config/user-prompt \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/config/user-prompt`

### Example responses [#example-responses-10]

> 200 Response

```json
{
  "custom_prompt": "string"
}
```

### Responses [#responses-18]

| Status | Meaning                                                 | Description | Schema                                                                                          |
| ------ | ------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.UserChatCustomPrompt](/beta-docs/reference/api/schemas/#codersdkuserchatcustomprompt) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Update user chat custom prompt [#update-user-chat-custom-prompt]

### Code samples [#code-samples-19]

```sh
# Example request using curl
curl -X PUT http://coder-server:8080/api/v2/chats/config/user-prompt \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PUT /api/v2/chats/config/user-prompt`

> Body parameter

```json
{
  "custom_prompt": "string"
}
```

### Parameters [#parameters-11]

| Name   | In   | Type                                                                                            | Required | Description  |
| ------ | ---- | ----------------------------------------------------------------------------------------------- | -------- | ------------ |
| `body` | body | [codersdk.UserChatCustomPrompt](/beta-docs/reference/api/schemas/#codersdkuserchatcustomprompt) | true     | Request body |

### Example responses [#example-responses-11]

> 200 Response

```json
{
  "custom_prompt": "string"
}
```

### Responses [#responses-19]

| Status | Meaning                                                 | Description | Schema                                                                                          |
| ------ | ------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.UserChatCustomPrompt](/beta-docs/reference/api/schemas/#codersdkuserchatcustomprompt) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get chat workspace time to live [#get-chat-workspace-time-to-live]

### Code samples [#code-samples-20]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/config/workspace-ttl \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/config/workspace-ttl`

### Example responses [#example-responses-12]

> 200 Response

```json
{
  "workspace_ttl_ms": 0
}
```

### Responses [#responses-20]

| Status | Meaning                                                 | Description | Schema                                                                                                  |
| ------ | ------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ChatWorkspaceTTLResponse](/beta-docs/reference/api/schemas/#codersdkchatworkspacettlresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Update chat workspace time to live [#update-chat-workspace-time-to-live]

### Code samples [#code-samples-21]

```sh
# Example request using curl
curl -X PUT http://coder-server:8080/api/v2/chats/config/workspace-ttl \
  -H 'Content-Type: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PUT /api/v2/chats/config/workspace-ttl`

> Body parameter

```json
{
  "workspace_ttl_ms": 0
}
```

### Parameters [#parameters-12]

| Name   | In   | Type                                                                                                              | Required | Description  |
| ------ | ---- | ----------------------------------------------------------------------------------------------------------------- | -------- | ------------ |
| `body` | body | [codersdk.UpdateChatWorkspaceTTLRequest](/beta-docs/reference/api/schemas/#codersdkupdatechatworkspacettlrequest) | true     | Request body |

### Responses [#responses-21]

| Status | Meaning                                                         | Description | Schema |
| ------ | --------------------------------------------------------------- | ----------- | ------ |
| 204    | [No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) | No Content  |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Upload chat file [#upload-chat-file]

### Code samples [#code-samples-22]

```sh
# Example request using curl
curl -X POST http://coder-server:8080/api/v2/chats/files?organization=497f6eca-6276-4993-bfeb-53cbbbba6f08 \
  -H 'Content-Type: image/png' \
  -H 'Accept: application/json' \
  -H 'Content-Disposition: attachment; filename="image.png"' \
  -H 'Coder-Session-Token: API_KEY' \
  --data-binary '@image.png'
```

`POST /api/v2/chats/files`

### Parameters [#parameters-13]

| Name                  | In     | Type         | Required | Description                                   |
| --------------------- | ------ | ------------ | -------- | --------------------------------------------- |
| `organization`        | query  | string(uuid) | true     | Organization ID                               |
| `Content-Disposition` | header | string       | true     | Attachment disposition carrying the file name |
| `body`                | body   | string       | true     | Raw file binary data                          |

### Example responses [#example-responses-13]

> 201 Response

```json
{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
```

### Responses [#responses-22]

| Status | Meaning                                                                 | Description                 | Schema                                                                                              |
| ------ | ----------------------------------------------------------------------- | --------------------------- | --------------------------------------------------------------------------------------------------- |
| 201    | [Created](https://tools.ietf.org/html/rfc7231#section-6.3.2)            | Created                     | [codersdk.UploadChatFileResponse](/beta-docs/reference/api/schemas/#codersdkuploadchatfileresponse) |
| 413    | [Payload Too Large](https://tools.ietf.org/html/rfc7231#section-6.5.11) | Request body exceeds 10 MiB | [codersdk.Response](/beta-docs/reference/api/schemas/#codersdkresponse)                             |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get chat file [#get-chat-file]

### Code samples [#code-samples-23]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/files/{file} \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/files/{file}`

### Parameters [#parameters-14]

| Name   | In   | Type         | Required | Description |
| ------ | ---- | ------------ | -------- | ----------- |
| `file` | path | string(uuid) | true     | File ID     |

### Responses [#responses-23]

| Status | Meaning                                                 | Description | Schema |
| ------ | ------------------------------------------------------- | ----------- | ------ |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Watch chat events for a user via WebSockets [#watch-chat-events-for-a-user-via-websockets]

### Code samples [#code-samples-24]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/watch \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/watch`

### Example responses [#example-responses-14]

> 200 Response

```json
{
  "chat": {
    "agent_id": "2b1e3b65-2c04-4fa2-a2d7-467901e98978",
    "archived": true,
    "build_id": "bfb1f3fa-bf7b-43a5-9e0b-26cc050e44cb",
    "children": [
      {}
    ],
    "client_type": "ui",
    "context": {
      "dirty": true,
      "dirty_since": "2019-08-24T14:15:22Z",
      "error": "string",
      "resources": [
        {
          "error": "string",
          "kind": "instruction_file",
          "size_bytes": 0,
          "skill_description": "string",
          "skill_name": "string",
          "source": "string",
          "status": "ok",
          "tools": [
            {
              "description": "string",
              "name": "string"
            }
          ]
        }
      ]
    },
    "created_at": "2019-08-24T14:15:22Z",
    "diff_status": {
      "additions": 0,
      "approved": true,
      "author_avatar_url": "string",
      "author_login": "string",
      "base_branch": "string",
      "changed_files": 0,
      "changes_requested": true,
      "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
      "commits": 0,
      "deletions": 0,
      "head_branch": "string",
      "pr_number": 0,
      "pull_request_draft": true,
      "pull_request_state": "string",
      "pull_request_title": "string",
      "refreshed_at": "2019-08-24T14:15:22Z",
      "reviewer_count": 0,
      "stale_at": "2019-08-24T14:15:22Z",
      "url": "string"
    },
    "files": [
      {
        "created_at": "2019-08-24T14:15:22Z",
        "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
        "mime_type": "string",
        "name": "string",
        "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
        "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
        "size_bytes": 0
      }
    ],
    "has_unread": true,
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "labels": {
      "property1": "string",
      "property2": "string"
    },
    "last_error": {
      "detail": "string",
      "kind": "generic",
      "message": "string",
      "provider": "string",
      "retryable": true,
      "status_code": 0
    },
    "last_model_config_id": "30ebb95f-c255-4759-9429-89aa4ec1554c",
    "last_reasoning_effort": "string",
    "last_turn_summary": "string",
    "mcp_server_ids": [
      "497f6eca-6276-4993-bfeb-53cbbbba6f08"
    ],
    "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
    "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
    "owner_name": "string",
    "owner_username": "string",
    "parent_chat_id": "c3609ee6-3b11-4a93-b9ae-e4fabcc99359",
    "pin_order": 0,
    "plan_mode": "plan",
    "queued_for_capacity": true,
    "root_chat_id": "2898031c-fdce-4e3e-8c53-4481dd42fcd7",
    "shared": true,
    "status": "waiting",
    "summary": "string",
    "title": "string",
    "updated_at": "2019-08-24T14:15:22Z",
    "warnings": [
      "string"
    ],
    "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
  },
  "kind": "status_change",
  "tool_calls": [
    {
      "args": "string",
      "tool_call_id": "string",
      "tool_name": "string"
    }
  ]
}
```

### Responses [#responses-24]

| Status | Meaning                                                 | Description | Schema                                                                              |
| ------ | ------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ChatWatchEvent](/beta-docs/reference/api/schemas/#codersdkchatwatchevent) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get chat by ID [#get-chat-by-id]

### Code samples [#code-samples-25]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/{chat} \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/{chat}`

### Parameters [#parameters-15]

| Name   | In   | Type         | Required | Description |
| ------ | ---- | ------------ | -------- | ----------- |
| `chat` | path | string(uuid) | true     | Chat ID     |

### Example responses [#example-responses-15]

> 200 Response

```json
{
  "agent_id": "2b1e3b65-2c04-4fa2-a2d7-467901e98978",
  "archived": true,
  "build_id": "bfb1f3fa-bf7b-43a5-9e0b-26cc050e44cb",
  "children": [
    {
      "agent_id": "2b1e3b65-2c04-4fa2-a2d7-467901e98978",
      "archived": true,
      "build_id": "bfb1f3fa-bf7b-43a5-9e0b-26cc050e44cb",
      "children": [],
      "client_type": "ui",
      "context": {
        "dirty": true,
        "dirty_since": "2019-08-24T14:15:22Z",
        "error": "string",
        "resources": [
          {
            "error": "string",
            "kind": "instruction_file",
            "size_bytes": 0,
            "skill_description": "string",
            "skill_name": "string",
            "source": "string",
            "status": "ok",
            "tools": [
              {
                "description": "string",
                "name": "string"
              }
            ]
          }
        ]
      },
      "created_at": "2019-08-24T14:15:22Z",
      "diff_status": {
        "additions": 0,
        "approved": true,
        "author_avatar_url": "string",
        "author_login": "string",
        "base_branch": "string",
        "changed_files": 0,
        "changes_requested": true,
        "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
        "commits": 0,
        "deletions": 0,
        "head_branch": "string",
        "pr_number": 0,
        "pull_request_draft": true,
        "pull_request_state": "string",
        "pull_request_title": "string",
        "refreshed_at": "2019-08-24T14:15:22Z",
        "reviewer_count": 0,
        "stale_at": "2019-08-24T14:15:22Z",
        "url": "string"
      },
      "files": [
        {
          "created_at": "2019-08-24T14:15:22Z",
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "mime_type": "string",
          "name": "string",
          "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
          "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
          "size_bytes": 0
        }
      ],
      "has_unread": true,
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "labels": {
        "property1": "string",
        "property2": "string"
      },
      "last_error": {
        "detail": "string",
        "kind": "generic",
        "message": "string",
        "provider": "string",
        "retryable": true,
        "status_code": 0
      },
      "last_model_config_id": "30ebb95f-c255-4759-9429-89aa4ec1554c",
      "last_reasoning_effort": "string",
      "last_turn_summary": "string",
      "mcp_server_ids": [
        "497f6eca-6276-4993-bfeb-53cbbbba6f08"
      ],
      "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "owner_name": "string",
      "owner_username": "string",
      "parent_chat_id": "c3609ee6-3b11-4a93-b9ae-e4fabcc99359",
      "pin_order": 0,
      "plan_mode": "plan",
      "queued_for_capacity": true,
      "root_chat_id": "2898031c-fdce-4e3e-8c53-4481dd42fcd7",
      "shared": true,
      "status": "waiting",
      "summary": "string",
      "title": "string",
      "updated_at": "2019-08-24T14:15:22Z",
      "warnings": [
        "string"
      ],
      "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
    }
  ],
  "client_type": "ui",
  "context": {
    "dirty": true,
    "dirty_since": "2019-08-24T14:15:22Z",
    "error": "string",
    "resources": [
      {
        "error": "string",
        "kind": "instruction_file",
        "size_bytes": 0,
        "skill_description": "string",
        "skill_name": "string",
        "source": "string",
        "status": "ok",
        "tools": [
          {
            "description": "string",
            "name": "string"
          }
        ]
      }
    ]
  },
  "created_at": "2019-08-24T14:15:22Z",
  "diff_status": {
    "additions": 0,
    "approved": true,
    "author_avatar_url": "string",
    "author_login": "string",
    "base_branch": "string",
    "changed_files": 0,
    "changes_requested": true,
    "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
    "commits": 0,
    "deletions": 0,
    "head_branch": "string",
    "pr_number": 0,
    "pull_request_draft": true,
    "pull_request_state": "string",
    "pull_request_title": "string",
    "refreshed_at": "2019-08-24T14:15:22Z",
    "reviewer_count": 0,
    "stale_at": "2019-08-24T14:15:22Z",
    "url": "string"
  },
  "files": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "mime_type": "string",
      "name": "string",
      "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "size_bytes": 0
    }
  ],
  "has_unread": true,
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "labels": {
    "property1": "string",
    "property2": "string"
  },
  "last_error": {
    "detail": "string",
    "kind": "generic",
    "message": "string",
    "provider": "string",
    "retryable": true,
    "status_code": 0
  },
  "last_model_config_id": "30ebb95f-c255-4759-9429-89aa4ec1554c",
  "last_reasoning_effort": "string",
  "last_turn_summary": "string",
  "mcp_server_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
  "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
  "owner_name": "string",
  "owner_username": "string",
  "parent_chat_id": "c3609ee6-3b11-4a93-b9ae-e4fabcc99359",
  "pin_order": 0,
  "plan_mode": "plan",
  "queued_for_capacity": true,
  "root_chat_id": "2898031c-fdce-4e3e-8c53-4481dd42fcd7",
  "shared": true,
  "status": "waiting",
  "summary": "string",
  "title": "string",
  "updated_at": "2019-08-24T14:15:22Z",
  "warnings": [
    "string"
  ],
  "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}
```

### Responses [#responses-25]

| Status | Meaning                                                 | Description | Schema                                                          |
| ------ | ------------------------------------------------------- | ----------- | --------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.Chat](/beta-docs/reference/api/schemas/#codersdkchat) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Update chat [#update-chat]

### Code samples [#code-samples-26]

```sh
# Example request using curl
curl -X PATCH http://coder-server:8080/api/v2/chats/{chat} \
  -H 'Content-Type: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PATCH /api/v2/chats/{chat}`

> Body parameter

```json
{
  "archived": true,
  "labels": {
    "property1": "string",
    "property2": "string"
  },
  "pin_order": 0,
  "plan_mode": "plan",
  "title": "string",
  "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}
```

### Parameters [#parameters-16]

| Name   | In   | Type                                                                                      | Required | Description         |
| ------ | ---- | ----------------------------------------------------------------------------------------- | -------- | ------------------- |
| `chat` | path | string(uuid)                                                                              | true     | Chat ID             |
| `body` | body | [codersdk.UpdateChatRequest](/beta-docs/reference/api/schemas/#codersdkupdatechatrequest) | true     | Update chat request |

### Responses [#responses-26]

| Status | Meaning                                                         | Description | Schema |
| ------ | --------------------------------------------------------------- | ----------- | ------ |
| 204    | [No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) | No Content  |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Refresh chat context [#refresh-chat-context]

### Code samples [#code-samples-27]

```sh
# Example request using curl
curl -X PUT http://coder-server:8080/api/v2/chats/{chat}/context \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PUT /api/v2/chats/{chat}/context`

### Parameters [#parameters-17]

| Name   | In   | Type         | Required | Description |
| ------ | ---- | ------------ | -------- | ----------- |
| `chat` | path | string(uuid) | true     | Chat ID     |

### Example responses [#example-responses-16]

> 200 Response

```json
{
  "agent_id": "2b1e3b65-2c04-4fa2-a2d7-467901e98978",
  "archived": true,
  "build_id": "bfb1f3fa-bf7b-43a5-9e0b-26cc050e44cb",
  "children": [
    {
      "agent_id": "2b1e3b65-2c04-4fa2-a2d7-467901e98978",
      "archived": true,
      "build_id": "bfb1f3fa-bf7b-43a5-9e0b-26cc050e44cb",
      "children": [],
      "client_type": "ui",
      "context": {
        "dirty": true,
        "dirty_since": "2019-08-24T14:15:22Z",
        "error": "string",
        "resources": [
          {
            "error": "string",
            "kind": "instruction_file",
            "size_bytes": 0,
            "skill_description": "string",
            "skill_name": "string",
            "source": "string",
            "status": "ok",
            "tools": [
              {
                "description": "string",
                "name": "string"
              }
            ]
          }
        ]
      },
      "created_at": "2019-08-24T14:15:22Z",
      "diff_status": {
        "additions": 0,
        "approved": true,
        "author_avatar_url": "string",
        "author_login": "string",
        "base_branch": "string",
        "changed_files": 0,
        "changes_requested": true,
        "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
        "commits": 0,
        "deletions": 0,
        "head_branch": "string",
        "pr_number": 0,
        "pull_request_draft": true,
        "pull_request_state": "string",
        "pull_request_title": "string",
        "refreshed_at": "2019-08-24T14:15:22Z",
        "reviewer_count": 0,
        "stale_at": "2019-08-24T14:15:22Z",
        "url": "string"
      },
      "files": [
        {
          "created_at": "2019-08-24T14:15:22Z",
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "mime_type": "string",
          "name": "string",
          "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
          "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
          "size_bytes": 0
        }
      ],
      "has_unread": true,
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "labels": {
        "property1": "string",
        "property2": "string"
      },
      "last_error": {
        "detail": "string",
        "kind": "generic",
        "message": "string",
        "provider": "string",
        "retryable": true,
        "status_code": 0
      },
      "last_model_config_id": "30ebb95f-c255-4759-9429-89aa4ec1554c",
      "last_reasoning_effort": "string",
      "last_turn_summary": "string",
      "mcp_server_ids": [
        "497f6eca-6276-4993-bfeb-53cbbbba6f08"
      ],
      "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "owner_name": "string",
      "owner_username": "string",
      "parent_chat_id": "c3609ee6-3b11-4a93-b9ae-e4fabcc99359",
      "pin_order": 0,
      "plan_mode": "plan",
      "queued_for_capacity": true,
      "root_chat_id": "2898031c-fdce-4e3e-8c53-4481dd42fcd7",
      "shared": true,
      "status": "waiting",
      "summary": "string",
      "title": "string",
      "updated_at": "2019-08-24T14:15:22Z",
      "warnings": [
        "string"
      ],
      "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
    }
  ],
  "client_type": "ui",
  "context": {
    "dirty": true,
    "dirty_since": "2019-08-24T14:15:22Z",
    "error": "string",
    "resources": [
      {
        "error": "string",
        "kind": "instruction_file",
        "size_bytes": 0,
        "skill_description": "string",
        "skill_name": "string",
        "source": "string",
        "status": "ok",
        "tools": [
          {
            "description": "string",
            "name": "string"
          }
        ]
      }
    ]
  },
  "created_at": "2019-08-24T14:15:22Z",
  "diff_status": {
    "additions": 0,
    "approved": true,
    "author_avatar_url": "string",
    "author_login": "string",
    "base_branch": "string",
    "changed_files": 0,
    "changes_requested": true,
    "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
    "commits": 0,
    "deletions": 0,
    "head_branch": "string",
    "pr_number": 0,
    "pull_request_draft": true,
    "pull_request_state": "string",
    "pull_request_title": "string",
    "refreshed_at": "2019-08-24T14:15:22Z",
    "reviewer_count": 0,
    "stale_at": "2019-08-24T14:15:22Z",
    "url": "string"
  },
  "files": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "mime_type": "string",
      "name": "string",
      "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "size_bytes": 0
    }
  ],
  "has_unread": true,
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "labels": {
    "property1": "string",
    "property2": "string"
  },
  "last_error": {
    "detail": "string",
    "kind": "generic",
    "message": "string",
    "provider": "string",
    "retryable": true,
    "status_code": 0
  },
  "last_model_config_id": "30ebb95f-c255-4759-9429-89aa4ec1554c",
  "last_reasoning_effort": "string",
  "last_turn_summary": "string",
  "mcp_server_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
  "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
  "owner_name": "string",
  "owner_username": "string",
  "parent_chat_id": "c3609ee6-3b11-4a93-b9ae-e4fabcc99359",
  "pin_order": 0,
  "plan_mode": "plan",
  "queued_for_capacity": true,
  "root_chat_id": "2898031c-fdce-4e3e-8c53-4481dd42fcd7",
  "shared": true,
  "status": "waiting",
  "summary": "string",
  "title": "string",
  "updated_at": "2019-08-24T14:15:22Z",
  "warnings": [
    "string"
  ],
  "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}
```

### Responses [#responses-27]

| Status | Meaning                                                 | Description | Schema                                                          |
| ------ | ------------------------------------------------------- | ----------- | --------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.Chat](/beta-docs/reference/api/schemas/#codersdkchat) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get chat cost [#get-chat-cost]

### Code samples [#code-samples-28]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/{chat}/cost \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/{chat}/cost`

Cost covers the whole chat tree: the root chat plus every
subagent chat beneath it. Requesting cost for a subagent chat
returns that same total.

Cost is derived from AI Gateway data, which is subject to its
own retention period, 60 days by default, configured
independently of chat retention. Spend for requests older than
that period is no longer reported, so a chat whose requests
have all been purged reports zero cost.

### Parameters [#parameters-18]

| Name   | In   | Type         | Required | Description |
| ------ | ---- | ------------ | -------- | ----------- |
| `chat` | path | string(uuid) | true     | Chat ID     |

### Example responses [#example-responses-17]

> 200 Response

```json
{
  "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
  "request_count": 0,
  "total_cost_micros": 0,
  "unpriced_request_count": 0
}
```

### Responses [#responses-28]

| Status | Meaning                                                 | Description | Schema                                                                  |
| ------ | ------------------------------------------------------- | ----------- | ----------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ChatCost](/beta-docs/reference/api/schemas/#codersdkchatcost) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Get chat diff contents [#get-chat-diff-contents]

### Code samples [#code-samples-29]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/{chat}/diff \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/{chat}/diff`

### Parameters [#parameters-19]

| Name   | In   | Type         | Required | Description |
| ------ | ---- | ------------ | -------- | ----------- |
| `chat` | path | string(uuid) | true     | Chat ID     |

### Example responses [#example-responses-18]

> 200 Response

```json
{
  "branch": "string",
  "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
  "diff": "string",
  "provider": "string",
  "pull_request_url": "string",
  "remote_origin": "string"
}
```

### Responses [#responses-29]

| Status | Meaning                                                 | Description | Schema                                                                                  |
| ------ | ------------------------------------------------------- | ----------- | --------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ChatDiffContents](/beta-docs/reference/api/schemas/#codersdkchatdiffcontents) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Interrupt chat [#interrupt-chat]

### Code samples [#code-samples-30]

```sh
# Example request using curl
curl -X POST http://coder-server:8080/api/v2/chats/{chat}/interrupt \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`POST /api/v2/chats/{chat}/interrupt`

### Parameters [#parameters-20]

| Name   | In   | Type         | Required | Description |
| ------ | ---- | ------------ | -------- | ----------- |
| `chat` | path | string(uuid) | true     | Chat ID     |

### Example responses [#example-responses-19]

> 200 Response

```json
{
  "agent_id": "2b1e3b65-2c04-4fa2-a2d7-467901e98978",
  "archived": true,
  "build_id": "bfb1f3fa-bf7b-43a5-9e0b-26cc050e44cb",
  "children": [
    {
      "agent_id": "2b1e3b65-2c04-4fa2-a2d7-467901e98978",
      "archived": true,
      "build_id": "bfb1f3fa-bf7b-43a5-9e0b-26cc050e44cb",
      "children": [],
      "client_type": "ui",
      "context": {
        "dirty": true,
        "dirty_since": "2019-08-24T14:15:22Z",
        "error": "string",
        "resources": [
          {
            "error": "string",
            "kind": "instruction_file",
            "size_bytes": 0,
            "skill_description": "string",
            "skill_name": "string",
            "source": "string",
            "status": "ok",
            "tools": [
              {
                "description": "string",
                "name": "string"
              }
            ]
          }
        ]
      },
      "created_at": "2019-08-24T14:15:22Z",
      "diff_status": {
        "additions": 0,
        "approved": true,
        "author_avatar_url": "string",
        "author_login": "string",
        "base_branch": "string",
        "changed_files": 0,
        "changes_requested": true,
        "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
        "commits": 0,
        "deletions": 0,
        "head_branch": "string",
        "pr_number": 0,
        "pull_request_draft": true,
        "pull_request_state": "string",
        "pull_request_title": "string",
        "refreshed_at": "2019-08-24T14:15:22Z",
        "reviewer_count": 0,
        "stale_at": "2019-08-24T14:15:22Z",
        "url": "string"
      },
      "files": [
        {
          "created_at": "2019-08-24T14:15:22Z",
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "mime_type": "string",
          "name": "string",
          "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
          "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
          "size_bytes": 0
        }
      ],
      "has_unread": true,
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "labels": {
        "property1": "string",
        "property2": "string"
      },
      "last_error": {
        "detail": "string",
        "kind": "generic",
        "message": "string",
        "provider": "string",
        "retryable": true,
        "status_code": 0
      },
      "last_model_config_id": "30ebb95f-c255-4759-9429-89aa4ec1554c",
      "last_reasoning_effort": "string",
      "last_turn_summary": "string",
      "mcp_server_ids": [
        "497f6eca-6276-4993-bfeb-53cbbbba6f08"
      ],
      "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "owner_name": "string",
      "owner_username": "string",
      "parent_chat_id": "c3609ee6-3b11-4a93-b9ae-e4fabcc99359",
      "pin_order": 0,
      "plan_mode": "plan",
      "queued_for_capacity": true,
      "root_chat_id": "2898031c-fdce-4e3e-8c53-4481dd42fcd7",
      "shared": true,
      "status": "waiting",
      "summary": "string",
      "title": "string",
      "updated_at": "2019-08-24T14:15:22Z",
      "warnings": [
        "string"
      ],
      "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
    }
  ],
  "client_type": "ui",
  "context": {
    "dirty": true,
    "dirty_since": "2019-08-24T14:15:22Z",
    "error": "string",
    "resources": [
      {
        "error": "string",
        "kind": "instruction_file",
        "size_bytes": 0,
        "skill_description": "string",
        "skill_name": "string",
        "source": "string",
        "status": "ok",
        "tools": [
          {
            "description": "string",
            "name": "string"
          }
        ]
      }
    ]
  },
  "created_at": "2019-08-24T14:15:22Z",
  "diff_status": {
    "additions": 0,
    "approved": true,
    "author_avatar_url": "string",
    "author_login": "string",
    "base_branch": "string",
    "changed_files": 0,
    "changes_requested": true,
    "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
    "commits": 0,
    "deletions": 0,
    "head_branch": "string",
    "pr_number": 0,
    "pull_request_draft": true,
    "pull_request_state": "string",
    "pull_request_title": "string",
    "refreshed_at": "2019-08-24T14:15:22Z",
    "reviewer_count": 0,
    "stale_at": "2019-08-24T14:15:22Z",
    "url": "string"
  },
  "files": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "mime_type": "string",
      "name": "string",
      "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "size_bytes": 0
    }
  ],
  "has_unread": true,
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "labels": {
    "property1": "string",
    "property2": "string"
  },
  "last_error": {
    "detail": "string",
    "kind": "generic",
    "message": "string",
    "provider": "string",
    "retryable": true,
    "status_code": 0
  },
  "last_model_config_id": "30ebb95f-c255-4759-9429-89aa4ec1554c",
  "last_reasoning_effort": "string",
  "last_turn_summary": "string",
  "mcp_server_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
  "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
  "owner_name": "string",
  "owner_username": "string",
  "parent_chat_id": "c3609ee6-3b11-4a93-b9ae-e4fabcc99359",
  "pin_order": 0,
  "plan_mode": "plan",
  "queued_for_capacity": true,
  "root_chat_id": "2898031c-fdce-4e3e-8c53-4481dd42fcd7",
  "shared": true,
  "status": "waiting",
  "summary": "string",
  "title": "string",
  "updated_at": "2019-08-24T14:15:22Z",
  "warnings": [
    "string"
  ],
  "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}
```

### Responses [#responses-30]

| Status | Meaning                                                 | Description | Schema                                                          |
| ------ | ------------------------------------------------------- | ----------- | --------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.Chat](/beta-docs/reference/api/schemas/#codersdkchat) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## List chat messages [#list-chat-messages]

### Code samples [#code-samples-31]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/{chat}/messages \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/{chat}/messages`

### Parameters [#parameters-21]

| Name        | In    | Type         | Required | Description                           |
| ----------- | ----- | ------------ | -------- | ------------------------------------- |
| `chat`      | path  | string(uuid) | true     | Chat ID                               |
| `before_id` | query | integer      | false    | Return messages with id \< before\_id |
| `after_id`  | query | integer      | false    | Return messages with id > after\_id   |
| `limit`     | query | integer      | false    | Page size, 1 to 200. Defaults to 50.  |

### Example responses [#example-responses-20]

> 200 Response

```json
{
  "has_more": true,
  "messages": [
    {
      "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
      "content": [
        {
          "args": [
            0
          ],
          "args_delta": "string",
          "completed_at": "2019-08-24T14:15:22Z",
          "content": "string",
          "context_file_agent_id": {
            "uuid": "string",
            "valid": true
          },
          "context_file_content": "string",
          "context_file_directory": "string",
          "context_file_os": "string",
          "context_file_path": "string",
          "context_file_skill_meta_file": "string",
          "context_file_truncated": true,
          "created_at": "2019-08-24T14:15:22Z",
          "data": [
            0
          ],
          "end_line": 0,
          "file_id": {
            "uuid": "string",
            "valid": true
          },
          "file_name": "string",
          "hook_rewritten": true,
          "is_error": true,
          "is_media": true,
          "mcp_server_config_id": {
            "uuid": "string",
            "valid": true
          },
          "media_type": "string",
          "name": "string",
          "parsed_commands": [
            [
              "string"
            ]
          ],
          "provider_executed": true,
          "provider_metadata": [
            0
          ],
          "result": [
            0
          ],
          "result_delta": "string",
          "result_reset": true,
          "skill_description": "string",
          "skill_dir": "string",
          "skill_name": "string",
          "source_id": "string",
          "start_line": 0,
          "text": "string",
          "title": "string",
          "tool_call_id": "string",
          "tool_name": "string",
          "type": "text",
          "url": "string"
        }
      ],
      "created_at": "2019-08-24T14:15:22Z",
      "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
      "id": 0,
      "model_config_id": "f5fb4d91-62ca-4377-9ee6-5d43ba00d205",
      "role": "system",
      "usage": {
        "cache_creation_tokens": 0,
        "cache_read_tokens": 0,
        "context_limit": 0,
        "input_tokens": 0,
        "output_tokens": 0,
        "reasoning_tokens": 0,
        "total_tokens": 0
      }
    }
  ],
  "queued_messages": [
    {
      "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
      "content": [
        {
          "args": [
            0
          ],
          "args_delta": "string",
          "completed_at": "2019-08-24T14:15:22Z",
          "content": "string",
          "context_file_agent_id": {
            "uuid": "string",
            "valid": true
          },
          "context_file_content": "string",
          "context_file_directory": "string",
          "context_file_os": "string",
          "context_file_path": "string",
          "context_file_skill_meta_file": "string",
          "context_file_truncated": true,
          "created_at": "2019-08-24T14:15:22Z",
          "data": [
            0
          ],
          "end_line": 0,
          "file_id": {
            "uuid": "string",
            "valid": true
          },
          "file_name": "string",
          "hook_rewritten": true,
          "is_error": true,
          "is_media": true,
          "mcp_server_config_id": {
            "uuid": "string",
            "valid": true
          },
          "media_type": "string",
          "name": "string",
          "parsed_commands": [
            [
              "string"
            ]
          ],
          "provider_executed": true,
          "provider_metadata": [
            0
          ],
          "result": [
            0
          ],
          "result_delta": "string",
          "result_reset": true,
          "skill_description": "string",
          "skill_dir": "string",
          "skill_name": "string",
          "source_id": "string",
          "start_line": 0,
          "text": "string",
          "title": "string",
          "tool_call_id": "string",
          "tool_name": "string",
          "type": "text",
          "url": "string"
        }
      ],
      "created_at": "2019-08-24T14:15:22Z",
      "id": 0,
      "model_config_id": "f5fb4d91-62ca-4377-9ee6-5d43ba00d205"
    }
  ]
}
```

### Responses [#responses-31]

| Status | Meaning                                                 | Description | Schema                                                                                          |
| ------ | ------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ChatMessagesResponse](/beta-docs/reference/api/schemas/#codersdkchatmessagesresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Send chat message [#send-chat-message]

### Code samples [#code-samples-32]

```sh
# Example request using curl
curl -X POST http://coder-server:8080/api/v2/chats/{chat}/messages \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`POST /api/v2/chats/{chat}/messages`

> Body parameter

```json
{
  "busy_behavior": "queue",
  "content": [
    {
      "content": "string",
      "end_line": 0,
      "file_id": "8a0cfb4f-ddc9-436d-91bb-75133c583767",
      "file_name": "string",
      "start_line": 0,
      "text": "string",
      "type": "text"
    }
  ],
  "mcp_server_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "model_config_id": "f5fb4d91-62ca-4377-9ee6-5d43ba00d205",
  "plan_mode": "plan",
  "reasoning_effort": "string"
}
```

### Parameters [#parameters-22]

| Name   | In   | Type                                                                                                    | Required | Description                 |
| ------ | ---- | ------------------------------------------------------------------------------------------------------- | -------- | --------------------------- |
| `chat` | path | string(uuid)                                                                                            | true     | Chat ID                     |
| `body` | body | [codersdk.CreateChatMessageRequest](/beta-docs/reference/api/schemas/#codersdkcreatechatmessagerequest) | true     | Create chat message request |

### Example responses [#example-responses-21]

> 200 Response

```json
{
  "message": {
    "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
    "content": [
      {
        "args": [
          0
        ],
        "args_delta": "string",
        "completed_at": "2019-08-24T14:15:22Z",
        "content": "string",
        "context_file_agent_id": {
          "uuid": "string",
          "valid": true
        },
        "context_file_content": "string",
        "context_file_directory": "string",
        "context_file_os": "string",
        "context_file_path": "string",
        "context_file_skill_meta_file": "string",
        "context_file_truncated": true,
        "created_at": "2019-08-24T14:15:22Z",
        "data": [
          0
        ],
        "end_line": 0,
        "file_id": {
          "uuid": "string",
          "valid": true
        },
        "file_name": "string",
        "hook_rewritten": true,
        "is_error": true,
        "is_media": true,
        "mcp_server_config_id": {
          "uuid": "string",
          "valid": true
        },
        "media_type": "string",
        "name": "string",
        "parsed_commands": [
          [
            "string"
          ]
        ],
        "provider_executed": true,
        "provider_metadata": [
          0
        ],
        "result": [
          0
        ],
        "result_delta": "string",
        "result_reset": true,
        "skill_description": "string",
        "skill_dir": "string",
        "skill_name": "string",
        "source_id": "string",
        "start_line": 0,
        "text": "string",
        "title": "string",
        "tool_call_id": "string",
        "tool_name": "string",
        "type": "text",
        "url": "string"
      }
    ],
    "created_at": "2019-08-24T14:15:22Z",
    "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
    "id": 0,
    "model_config_id": "f5fb4d91-62ca-4377-9ee6-5d43ba00d205",
    "role": "system",
    "usage": {
      "cache_creation_tokens": 0,
      "cache_read_tokens": 0,
      "context_limit": 0,
      "input_tokens": 0,
      "output_tokens": 0,
      "reasoning_tokens": 0,
      "total_tokens": 0
    }
  },
  "messages": [
    {
      "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
      "content": [
        {
          "args": [
            0
          ],
          "args_delta": "string",
          "completed_at": "2019-08-24T14:15:22Z",
          "content": "string",
          "context_file_agent_id": {
            "uuid": "string",
            "valid": true
          },
          "context_file_content": "string",
          "context_file_directory": "string",
          "context_file_os": "string",
          "context_file_path": "string",
          "context_file_skill_meta_file": "string",
          "context_file_truncated": true,
          "created_at": "2019-08-24T14:15:22Z",
          "data": [
            0
          ],
          "end_line": 0,
          "file_id": {
            "uuid": "string",
            "valid": true
          },
          "file_name": "string",
          "hook_rewritten": true,
          "is_error": true,
          "is_media": true,
          "mcp_server_config_id": {
            "uuid": "string",
            "valid": true
          },
          "media_type": "string",
          "name": "string",
          "parsed_commands": [
            [
              "string"
            ]
          ],
          "provider_executed": true,
          "provider_metadata": [
            0
          ],
          "result": [
            0
          ],
          "result_delta": "string",
          "result_reset": true,
          "skill_description": "string",
          "skill_dir": "string",
          "skill_name": "string",
          "source_id": "string",
          "start_line": 0,
          "text": "string",
          "title": "string",
          "tool_call_id": "string",
          "tool_name": "string",
          "type": "text",
          "url": "string"
        }
      ],
      "created_at": "2019-08-24T14:15:22Z",
      "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
      "id": 0,
      "model_config_id": "f5fb4d91-62ca-4377-9ee6-5d43ba00d205",
      "role": "system",
      "usage": {
        "cache_creation_tokens": 0,
        "cache_read_tokens": 0,
        "context_limit": 0,
        "input_tokens": 0,
        "output_tokens": 0,
        "reasoning_tokens": 0,
        "total_tokens": 0
      }
    }
  ],
  "queued": true,
  "queued_message": {
    "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
    "content": [
      {
        "args": [
          0
        ],
        "args_delta": "string",
        "completed_at": "2019-08-24T14:15:22Z",
        "content": "string",
        "context_file_agent_id": {
          "uuid": "string",
          "valid": true
        },
        "context_file_content": "string",
        "context_file_directory": "string",
        "context_file_os": "string",
        "context_file_path": "string",
        "context_file_skill_meta_file": "string",
        "context_file_truncated": true,
        "created_at": "2019-08-24T14:15:22Z",
        "data": [
          0
        ],
        "end_line": 0,
        "file_id": {
          "uuid": "string",
          "valid": true
        },
        "file_name": "string",
        "hook_rewritten": true,
        "is_error": true,
        "is_media": true,
        "mcp_server_config_id": {
          "uuid": "string",
          "valid": true
        },
        "media_type": "string",
        "name": "string",
        "parsed_commands": [
          [
            "string"
          ]
        ],
        "provider_executed": true,
        "provider_metadata": [
          0
        ],
        "result": [
          0
        ],
        "result_delta": "string",
        "result_reset": true,
        "skill_description": "string",
        "skill_dir": "string",
        "skill_name": "string",
        "source_id": "string",
        "start_line": 0,
        "text": "string",
        "title": "string",
        "tool_call_id": "string",
        "tool_name": "string",
        "type": "text",
        "url": "string"
      }
    ],
    "created_at": "2019-08-24T14:15:22Z",
    "id": 0,
    "model_config_id": "f5fb4d91-62ca-4377-9ee6-5d43ba00d205"
  },
  "warnings": [
    "string"
  ]
}
```

### Responses [#responses-32]

| Status | Meaning                                                 | Description | Schema                                                                                                    |
| ------ | ------------------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.CreateChatMessageResponse](/beta-docs/reference/api/schemas/#codersdkcreatechatmessageresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Edit chat message [#edit-chat-message]

### Code samples [#code-samples-33]

```sh
# Example request using curl
curl -X PATCH http://coder-server:8080/api/v2/chats/{chat}/messages/{message} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PATCH /api/v2/chats/{chat}/messages/{message}`

> Body parameter

```json
{
  "content": [
    {
      "content": "string",
      "end_line": 0,
      "file_id": "8a0cfb4f-ddc9-436d-91bb-75133c583767",
      "file_name": "string",
      "start_line": 0,
      "text": "string",
      "type": "text"
    }
  ],
  "mcp_server_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "model_config_id": "f5fb4d91-62ca-4377-9ee6-5d43ba00d205",
  "reasoning_effort": "string"
}
```

### Parameters [#parameters-23]

| Name      | In   | Type                                                                                                | Required | Description               |
| --------- | ---- | --------------------------------------------------------------------------------------------------- | -------- | ------------------------- |
| `chat`    | path | string(uuid)                                                                                        | true     | Chat ID                   |
| `message` | path | integer                                                                                             | true     | Message ID                |
| `body`    | body | [codersdk.EditChatMessageRequest](/beta-docs/reference/api/schemas/#codersdkeditchatmessagerequest) | true     | Edit chat message request |

### Example responses [#example-responses-22]

> 200 Response

```json
{
  "deleted_message_ids": [
    0
  ],
  "message": {
    "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
    "content": [
      {
        "args": [
          0
        ],
        "args_delta": "string",
        "completed_at": "2019-08-24T14:15:22Z",
        "content": "string",
        "context_file_agent_id": {
          "uuid": "string",
          "valid": true
        },
        "context_file_content": "string",
        "context_file_directory": "string",
        "context_file_os": "string",
        "context_file_path": "string",
        "context_file_skill_meta_file": "string",
        "context_file_truncated": true,
        "created_at": "2019-08-24T14:15:22Z",
        "data": [
          0
        ],
        "end_line": 0,
        "file_id": {
          "uuid": "string",
          "valid": true
        },
        "file_name": "string",
        "hook_rewritten": true,
        "is_error": true,
        "is_media": true,
        "mcp_server_config_id": {
          "uuid": "string",
          "valid": true
        },
        "media_type": "string",
        "name": "string",
        "parsed_commands": [
          [
            "string"
          ]
        ],
        "provider_executed": true,
        "provider_metadata": [
          0
        ],
        "result": [
          0
        ],
        "result_delta": "string",
        "result_reset": true,
        "skill_description": "string",
        "skill_dir": "string",
        "skill_name": "string",
        "source_id": "string",
        "start_line": 0,
        "text": "string",
        "title": "string",
        "tool_call_id": "string",
        "tool_name": "string",
        "type": "text",
        "url": "string"
      }
    ],
    "created_at": "2019-08-24T14:15:22Z",
    "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
    "id": 0,
    "model_config_id": "f5fb4d91-62ca-4377-9ee6-5d43ba00d205",
    "role": "system",
    "usage": {
      "cache_creation_tokens": 0,
      "cache_read_tokens": 0,
      "context_limit": 0,
      "input_tokens": 0,
      "output_tokens": 0,
      "reasoning_tokens": 0,
      "total_tokens": 0
    }
  },
  "messages": [
    {
      "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
      "content": [
        {
          "args": [
            0
          ],
          "args_delta": "string",
          "completed_at": "2019-08-24T14:15:22Z",
          "content": "string",
          "context_file_agent_id": {
            "uuid": "string",
            "valid": true
          },
          "context_file_content": "string",
          "context_file_directory": "string",
          "context_file_os": "string",
          "context_file_path": "string",
          "context_file_skill_meta_file": "string",
          "context_file_truncated": true,
          "created_at": "2019-08-24T14:15:22Z",
          "data": [
            0
          ],
          "end_line": 0,
          "file_id": {
            "uuid": "string",
            "valid": true
          },
          "file_name": "string",
          "hook_rewritten": true,
          "is_error": true,
          "is_media": true,
          "mcp_server_config_id": {
            "uuid": "string",
            "valid": true
          },
          "media_type": "string",
          "name": "string",
          "parsed_commands": [
            [
              "string"
            ]
          ],
          "provider_executed": true,
          "provider_metadata": [
            0
          ],
          "result": [
            0
          ],
          "result_delta": "string",
          "result_reset": true,
          "skill_description": "string",
          "skill_dir": "string",
          "skill_name": "string",
          "source_id": "string",
          "start_line": 0,
          "text": "string",
          "title": "string",
          "tool_call_id": "string",
          "tool_name": "string",
          "type": "text",
          "url": "string"
        }
      ],
      "created_at": "2019-08-24T14:15:22Z",
      "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
      "id": 0,
      "model_config_id": "f5fb4d91-62ca-4377-9ee6-5d43ba00d205",
      "role": "system",
      "usage": {
        "cache_creation_tokens": 0,
        "cache_read_tokens": 0,
        "context_limit": 0,
        "input_tokens": 0,
        "output_tokens": 0,
        "reasoning_tokens": 0,
        "total_tokens": 0
      }
    }
  ],
  "warnings": [
    "string"
  ]
}
```

### Responses [#responses-33]

| Status | Meaning                                                 | Description | Schema                                                                                                |
| ------ | ------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.EditChatMessageResponse](/beta-docs/reference/api/schemas/#codersdkeditchatmessageresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## List chat user prompts [#list-chat-user-prompts]

### Code samples [#code-samples-34]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/{chat}/prompts \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/{chat}/prompts`

Returns the user-authored prompts in a chat, newest first,
with each prompt's text parts concatenated in the order they
were authored. Used by the composer to power the up/down
arrow prompt-history cycle without paging through every
message in the chat.

### Parameters [#parameters-24]

| Name    | In    | Type         | Required | Description                                                                 |
| ------- | ----- | ------------ | -------- | --------------------------------------------------------------------------- |
| `chat`  | path  | string(uuid) | true     | Chat ID                                                                     |
| `limit` | query | integer      | false    | Page size, 0 to 2000. 0 (the default) means the server-side default of 500. |

### Example responses [#example-responses-23]

> 200 Response

```json
{
  "prompts": [
    {
      "id": 0,
      "text": "string"
    }
  ]
}
```

### Responses [#responses-34]

| Status | Meaning                                                 | Description | Schema                                                                                        |
| ------ | ------------------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ChatPromptsResponse](/beta-docs/reference/api/schemas/#codersdkchatpromptsresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Delete chat queued message [#delete-chat-queued-message]

### Code samples [#code-samples-35]

```sh
# Example request using curl
curl -X DELETE http://coder-server:8080/api/v2/chats/{chat}/queue/{queuedMessage} \
  -H 'Coder-Session-Token: API_KEY'
```

`DELETE /api/v2/chats/{chat}/queue/{queuedMessage}`

### Parameters [#parameters-25]

| Name            | In   | Type         | Required | Description       |
| --------------- | ---- | ------------ | -------- | ----------------- |
| `chat`          | path | string(uuid) | true     | Chat ID           |
| `queuedMessage` | path | integer      | true     | Queued message ID |

### Responses [#responses-35]

| Status | Meaning                                                         | Description | Schema |
| ------ | --------------------------------------------------------------- | ----------- | ------ |
| 204    | [No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) | No Content  |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Promote chat queued message [#promote-chat-queued-message]

### Code samples [#code-samples-36]

```sh
# Example request using curl
curl -X POST http://coder-server:8080/api/v2/chats/{chat}/queue/{queuedMessage}/promote \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`POST /api/v2/chats/{chat}/queue/{queuedMessage}/promote`

### Parameters [#parameters-26]

| Name            | In   | Type         | Required | Description       |
| --------------- | ---- | ------------ | -------- | ----------------- |
| `chat`          | path | string(uuid) | true     | Chat ID           |
| `queuedMessage` | path | integer      | true     | Queued message ID |

### Example responses [#example-responses-24]

> 202 Response

```json
{
  "detail": "string",
  "message": "string",
  "validations": [
    {
      "detail": "string",
      "field": "string"
    }
  ]
}
```

### Responses [#responses-36]

| Status | Meaning                                                       | Description | Schema                                                                  |
| ------ | ------------------------------------------------------------- | ----------- | ----------------------------------------------------------------------- |
| 202    | [Accepted](https://tools.ietf.org/html/rfc7231#section-6.3.3) | Accepted    | [codersdk.Response](/beta-docs/reference/api/schemas/#codersdkresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Reconcile invalid chat state [#reconcile-invalid-chat-state]

### Code samples [#code-samples-37]

```sh
# Example request using curl
curl -X POST http://coder-server:8080/api/v2/chats/{chat}/reconcile-invalid \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`POST /api/v2/chats/{chat}/reconcile-invalid`

### Parameters [#parameters-27]

| Name   | In   | Type         | Required | Description |
| ------ | ---- | ------------ | -------- | ----------- |
| `chat` | path | string(uuid) | true     | Chat ID     |

### Example responses [#example-responses-25]

> 200 Response

```json
{
  "agent_id": "2b1e3b65-2c04-4fa2-a2d7-467901e98978",
  "archived": true,
  "build_id": "bfb1f3fa-bf7b-43a5-9e0b-26cc050e44cb",
  "children": [
    {
      "agent_id": "2b1e3b65-2c04-4fa2-a2d7-467901e98978",
      "archived": true,
      "build_id": "bfb1f3fa-bf7b-43a5-9e0b-26cc050e44cb",
      "children": [],
      "client_type": "ui",
      "context": {
        "dirty": true,
        "dirty_since": "2019-08-24T14:15:22Z",
        "error": "string",
        "resources": [
          {
            "error": "string",
            "kind": "instruction_file",
            "size_bytes": 0,
            "skill_description": "string",
            "skill_name": "string",
            "source": "string",
            "status": "ok",
            "tools": [
              {
                "description": "string",
                "name": "string"
              }
            ]
          }
        ]
      },
      "created_at": "2019-08-24T14:15:22Z",
      "diff_status": {
        "additions": 0,
        "approved": true,
        "author_avatar_url": "string",
        "author_login": "string",
        "base_branch": "string",
        "changed_files": 0,
        "changes_requested": true,
        "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
        "commits": 0,
        "deletions": 0,
        "head_branch": "string",
        "pr_number": 0,
        "pull_request_draft": true,
        "pull_request_state": "string",
        "pull_request_title": "string",
        "refreshed_at": "2019-08-24T14:15:22Z",
        "reviewer_count": 0,
        "stale_at": "2019-08-24T14:15:22Z",
        "url": "string"
      },
      "files": [
        {
          "created_at": "2019-08-24T14:15:22Z",
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "mime_type": "string",
          "name": "string",
          "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
          "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
          "size_bytes": 0
        }
      ],
      "has_unread": true,
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "labels": {
        "property1": "string",
        "property2": "string"
      },
      "last_error": {
        "detail": "string",
        "kind": "generic",
        "message": "string",
        "provider": "string",
        "retryable": true,
        "status_code": 0
      },
      "last_model_config_id": "30ebb95f-c255-4759-9429-89aa4ec1554c",
      "last_reasoning_effort": "string",
      "last_turn_summary": "string",
      "mcp_server_ids": [
        "497f6eca-6276-4993-bfeb-53cbbbba6f08"
      ],
      "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "owner_name": "string",
      "owner_username": "string",
      "parent_chat_id": "c3609ee6-3b11-4a93-b9ae-e4fabcc99359",
      "pin_order": 0,
      "plan_mode": "plan",
      "queued_for_capacity": true,
      "root_chat_id": "2898031c-fdce-4e3e-8c53-4481dd42fcd7",
      "shared": true,
      "status": "waiting",
      "summary": "string",
      "title": "string",
      "updated_at": "2019-08-24T14:15:22Z",
      "warnings": [
        "string"
      ],
      "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
    }
  ],
  "client_type": "ui",
  "context": {
    "dirty": true,
    "dirty_since": "2019-08-24T14:15:22Z",
    "error": "string",
    "resources": [
      {
        "error": "string",
        "kind": "instruction_file",
        "size_bytes": 0,
        "skill_description": "string",
        "skill_name": "string",
        "source": "string",
        "status": "ok",
        "tools": [
          {
            "description": "string",
            "name": "string"
          }
        ]
      }
    ]
  },
  "created_at": "2019-08-24T14:15:22Z",
  "diff_status": {
    "additions": 0,
    "approved": true,
    "author_avatar_url": "string",
    "author_login": "string",
    "base_branch": "string",
    "changed_files": 0,
    "changes_requested": true,
    "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
    "commits": 0,
    "deletions": 0,
    "head_branch": "string",
    "pr_number": 0,
    "pull_request_draft": true,
    "pull_request_state": "string",
    "pull_request_title": "string",
    "refreshed_at": "2019-08-24T14:15:22Z",
    "reviewer_count": 0,
    "stale_at": "2019-08-24T14:15:22Z",
    "url": "string"
  },
  "files": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "mime_type": "string",
      "name": "string",
      "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "size_bytes": 0
    }
  ],
  "has_unread": true,
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "labels": {
    "property1": "string",
    "property2": "string"
  },
  "last_error": {
    "detail": "string",
    "kind": "generic",
    "message": "string",
    "provider": "string",
    "retryable": true,
    "status_code": 0
  },
  "last_model_config_id": "30ebb95f-c255-4759-9429-89aa4ec1554c",
  "last_reasoning_effort": "string",
  "last_turn_summary": "string",
  "mcp_server_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ],
  "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
  "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
  "owner_name": "string",
  "owner_username": "string",
  "parent_chat_id": "c3609ee6-3b11-4a93-b9ae-e4fabcc99359",
  "pin_order": 0,
  "plan_mode": "plan",
  "queued_for_capacity": true,
  "root_chat_id": "2898031c-fdce-4e3e-8c53-4481dd42fcd7",
  "shared": true,
  "status": "waiting",
  "summary": "string",
  "title": "string",
  "updated_at": "2019-08-24T14:15:22Z",
  "warnings": [
    "string"
  ],
  "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}
```

### Responses [#responses-37]

| Status | Meaning                                                 | Description | Schema                                                          |
| ------ | ------------------------------------------------------- | ----------- | --------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.Chat](/beta-docs/reference/api/schemas/#codersdkchat) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Stream chat events via WebSockets [#stream-chat-events-via-websockets]

### Code samples [#code-samples-38]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/{chat}/stream \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/{chat}/stream`

### Parameters [#parameters-28]

| Name       | In    | Type         | Required | Description                                             |
| ---------- | ----- | ------------ | -------- | ------------------------------------------------------- |
| `chat`     | path  | string(uuid) | true     | Chat ID                                                 |
| `after_id` | query | integer      | false    | Skip snapshot messages with id at or before this cursor |

### Example responses [#example-responses-26]

> 200 Response

```json
[
  {
    "action_required": {
      "tool_calls": [
        {
          "args": "string",
          "tool_call_id": "string",
          "tool_name": "string"
        }
      ]
    },
    "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
    "error": {
      "detail": "string",
      "kind": "generic",
      "message": "string",
      "provider": "string",
      "retryable": true,
      "status_code": 0
    },
    "message": {
      "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
      "content": [
        {
          "args": [
            0
          ],
          "args_delta": "string",
          "completed_at": "2019-08-24T14:15:22Z",
          "content": "string",
          "context_file_agent_id": {
            "uuid": "string",
            "valid": true
          },
          "context_file_content": "string",
          "context_file_directory": "string",
          "context_file_os": "string",
          "context_file_path": "string",
          "context_file_skill_meta_file": "string",
          "context_file_truncated": true,
          "created_at": "2019-08-24T14:15:22Z",
          "data": [
            0
          ],
          "end_line": 0,
          "file_id": {
            "uuid": "string",
            "valid": true
          },
          "file_name": "string",
          "hook_rewritten": true,
          "is_error": true,
          "is_media": true,
          "mcp_server_config_id": {
            "uuid": "string",
            "valid": true
          },
          "media_type": "string",
          "name": "string",
          "parsed_commands": [
            [
              "string"
            ]
          ],
          "provider_executed": true,
          "provider_metadata": [
            0
          ],
          "result": [
            0
          ],
          "result_delta": "string",
          "result_reset": true,
          "skill_description": "string",
          "skill_dir": "string",
          "skill_name": "string",
          "source_id": "string",
          "start_line": 0,
          "text": "string",
          "title": "string",
          "tool_call_id": "string",
          "tool_name": "string",
          "type": "text",
          "url": "string"
        }
      ],
      "created_at": "2019-08-24T14:15:22Z",
      "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
      "id": 0,
      "model_config_id": "f5fb4d91-62ca-4377-9ee6-5d43ba00d205",
      "role": "system",
      "usage": {
        "cache_creation_tokens": 0,
        "cache_read_tokens": 0,
        "context_limit": 0,
        "input_tokens": 0,
        "output_tokens": 0,
        "reasoning_tokens": 0,
        "total_tokens": 0
      }
    },
    "message_part": {
      "generation_attempt": 0,
      "history_version": 0,
      "part": {
        "args": [
          0
        ],
        "args_delta": "string",
        "completed_at": "2019-08-24T14:15:22Z",
        "content": "string",
        "context_file_agent_id": {
          "uuid": "string",
          "valid": true
        },
        "context_file_content": "string",
        "context_file_directory": "string",
        "context_file_os": "string",
        "context_file_path": "string",
        "context_file_skill_meta_file": "string",
        "context_file_truncated": true,
        "created_at": "2019-08-24T14:15:22Z",
        "data": [
          0
        ],
        "end_line": 0,
        "file_id": {
          "uuid": "string",
          "valid": true
        },
        "file_name": "string",
        "hook_rewritten": true,
        "is_error": true,
        "is_media": true,
        "mcp_server_config_id": {
          "uuid": "string",
          "valid": true
        },
        "media_type": "string",
        "name": "string",
        "parsed_commands": [
          [
            "string"
          ]
        ],
        "provider_executed": true,
        "provider_metadata": [
          0
        ],
        "result": [
          0
        ],
        "result_delta": "string",
        "result_reset": true,
        "skill_description": "string",
        "skill_dir": "string",
        "skill_name": "string",
        "source_id": "string",
        "start_line": 0,
        "text": "string",
        "title": "string",
        "tool_call_id": "string",
        "tool_name": "string",
        "type": "text",
        "url": "string"
      },
      "role": "system",
      "seq": 0
    },
    "queued_messages": [
      {
        "chat_id": "efc9fe20-a1e5-4a8c-9c48-f1b30c1e4f86",
        "content": [
          {
            "args": [
              0
            ],
            "args_delta": "string",
            "completed_at": "2019-08-24T14:15:22Z",
            "content": "string",
            "context_file_agent_id": {
              "uuid": "string",
              "valid": true
            },
            "context_file_content": "string",
            "context_file_directory": "string",
            "context_file_os": "string",
            "context_file_path": "string",
            "context_file_skill_meta_file": "string",
            "context_file_truncated": true,
            "created_at": "2019-08-24T14:15:22Z",
            "data": [
              0
            ],
            "end_line": 0,
            "file_id": {
              "uuid": "string",
              "valid": true
            },
            "file_name": "string",
            "hook_rewritten": true,
            "is_error": true,
            "is_media": true,
            "mcp_server_config_id": {
              "uuid": "string",
              "valid": true
            },
            "media_type": "string",
            "name": "string",
            "parsed_commands": [
              [
                "string"
              ]
            ],
            "provider_executed": true,
            "provider_metadata": [
              0
            ],
            "result": [
              0
            ],
            "result_delta": "string",
            "result_reset": true,
            "skill_description": "string",
            "skill_dir": "string",
            "skill_name": "string",
            "source_id": "string",
            "start_line": 0,
            "text": "string",
            "title": "string",
            "tool_call_id": "string",
            "tool_name": "string",
            "type": "text",
            "url": "string"
          }
        ],
        "created_at": "2019-08-24T14:15:22Z",
        "id": 0,
        "model_config_id": "f5fb4d91-62ca-4377-9ee6-5d43ba00d205"
      }
    ],
    "retry": {
      "attempt": 0,
      "delay_ms": 0,
      "error": "string",
      "kind": "generic",
      "provider": "string",
      "retrying_at": "2019-08-24T14:15:22Z",
      "status_code": 0
    },
    "status": {
      "status": "waiting"
    },
    "type": "message_part"
  }
]
```

### Responses [#responses-38]

| Status | Meaning                                                 | Description | Schema                                                                                         |
| ------ | ------------------------------------------------------- | ----------- | ---------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | array of [codersdk.ChatStreamEvent](/beta-docs/reference/api/schemas/#codersdkchatstreamevent) |

<h3 id="stream-chat-events-via-websockets-responseschema">Response Schema</h3>

Status Code **200**

| Name                               | Type                                                                                                    | Required | Restrictions | Description                                                                                                                                                                                                                                                                                                                                                                                                  |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------- | -------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `[array item]`                     | array                                                                                                   | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `» action_required`                | [codersdk.ChatStreamActionRequired](/beta-docs/reference/api/schemas/#codersdkchatstreamactionrequired) | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» tool_calls`                    | array                                                                                                   | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» args`                         | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» tool_call_id`                 | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» tool_name`                    | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `» chat_id`                        | string(uuid)                                                                                            | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `» error`                          | [codersdk.ChatError](/beta-docs/reference/api/schemas/#codersdkchaterror)                               | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» detail`                        | string                                                                                                  | false    |              | Detail is optional provider-specific context shown alongside the normalized error message when available.                                                                                                                                                                                                                                                                                                    |
| `»» kind`                          | [codersdk.ChatErrorKind](/beta-docs/reference/api/schemas/#codersdkchaterrorkind)                       | false    |              | Kind classifies the error for consistent client rendering.                                                                                                                                                                                                                                                                                                                                                   |
| `»» message`                       | string                                                                                                  | false    |              | Message is the normalized, user-facing error message.                                                                                                                                                                                                                                                                                                                                                        |
| `»» provider`                      | string                                                                                                  | false    |              | Provider identifies the upstream model provider when known.                                                                                                                                                                                                                                                                                                                                                  |
| `»» retryable`                     | boolean                                                                                                 | false    |              | Retryable reports whether the underlying error is transient.                                                                                                                                                                                                                                                                                                                                                 |
| `»» status_code`                   | integer                                                                                                 | false    |              | Status code is the best-effort upstream HTTP status code.                                                                                                                                                                                                                                                                                                                                                    |
| `» message`                        | [codersdk.ChatMessage](/beta-docs/reference/api/schemas/#codersdkchatmessage)                           | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» chat_id`                       | string(uuid)                                                                                            | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» content`                       | array                                                                                                   | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» args`                         | array                                                                                                   | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» args_delta`                   | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» completed_at`                 | string(date-time)                                                                                       | false    |              | Completed at is the time a reasoning part finished streaming, so reasoning duration can be computed as completed\_at minus created\_at. For interrupted reasoning, this is the interruption time. Absent when reasoning timestamp data was not recorded (e.g. messages persisted before this feature was added).                                                                                             |
| `»»» content`                      | string                                                                                                  | false    |              | The code content from the diff that was commented on.                                                                                                                                                                                                                                                                                                                                                        |
| `»»» context_file_agent_id`        | [uuid.NullUUID](/beta-docs/reference/api/schemas/#uuidnulluuid)                                         | false    |              | Context file agent ID is the workspace agent that provided this context file. Used to detect when the agent changes (e.g. workspace rebuilt) so instruction files can be re-persisted with fresh content.                                                                                                                                                                                                    |
| `»»»» uuid`                        | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»»» valid`                       | boolean                                                                                                 | false    |              | Valid is true if UUID is not NULL                                                                                                                                                                                                                                                                                                                                                                            |
| `»»» context_file_content`         | string                                                                                                  | false    |              | Context file content holds the file content sent to the LLM. Internal only: stripped before API responses to keep payloads small. The backend reads it when building the prompt via partsToMessageParts.                                                                                                                                                                                                     |
| `»»» context_file_directory`       | string                                                                                                  | false    |              | Context file directory is the working directory of the workspace agent. Internal only: same purpose as ContextFileOS.                                                                                                                                                                                                                                                                                        |
| `»»» context_file_os`              | string                                                                                                  | false    |              | Context file os is the operating system of the workspace agent. Internal only: used during prompt expansion so the LLM knows the OS even on turns where InsertSystem is not called.                                                                                                                                                                                                                          |
| `»»» context_file_path`            | string                                                                                                  | false    |              | Context file path is the absolute path of a file loaded into the LLM context (e.g. an AGENTS.md instruction file).                                                                                                                                                                                                                                                                                           |
| `»»» context_file_skill_meta_file` | string                                                                                                  | false    |              | Context file skill meta file is the basename of the skill meta file (e.g. "SKILL.md") at the time of persistence. Internal only: restored on subsequent turns so the read\_skill tool uses the correct filename even when the agent configured a non-default value.                                                                                                                                          |
| `»»» context_file_truncated`       | boolean                                                                                                 | false    |              | Context file truncated indicates the file exceeded the 64KiB instruction file limit and was truncated.                                                                                                                                                                                                                                                                                                       |
| `»»» created_at`                   | string(date-time)                                                                                       | false    |              | Created at is the timestamp this part carries. The semantics depend on the part type: for tool-call and tool-result parts it is the time the call was emitted or the result was produced (tool duration is the result's created\_at minus the call's created\_at); for reasoning parts it is the time reasoning started streaming.                                                                           |
| `»»» data`                         | array                                                                                                   | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» end_line`                     | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» file_id`                      | [uuid.NullUUID](/beta-docs/reference/api/schemas/#uuidnulluuid)                                         | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»»» uuid`                        | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»»» valid`                       | boolean                                                                                                 | false    |              | Valid is true if UUID is not NULL                                                                                                                                                                                                                                                                                                                                                                            |
| `»»» file_name`                    | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» hook_rewritten`               | boolean                                                                                                 | false    |              | Hook rewritten indicates that a lifecycle hook replaced model-proposed tool input.                                                                                                                                                                                                                                                                                                                           |
| `»»» is_error`                     | boolean                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» is_media`                     | boolean                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» mcp_server_config_id`         | [uuid.NullUUID](/beta-docs/reference/api/schemas/#uuidnulluuid)                                         | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»»» uuid`                        | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»»» valid`                       | boolean                                                                                                 | false    |              | Valid is true if UUID is not NULL                                                                                                                                                                                                                                                                                                                                                                            |
| `»»» media_type`                   | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» name`                         | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» parsed_commands`              | array                                                                                                   | false    |              | Parsed commands holds parsed programs from an execute tool call's shell command, one entry per simple command in source order. Each entry is \[program] or \[program, arg] where arg is the first non-flag positional argument. Program names are normalized to their base name (e.g. /usr/bin/go becomes go). Only populated when ToolName is "execute" and the command parses successfully; nil otherwise. |
| `»»» provider_executed`            | boolean                                                                                                 | false    |              | Provider executed indicates the tool call was executed by the provider (e.g. Anthropic computer use).                                                                                                                                                                                                                                                                                                        |
| `»»» provider_metadata`            | array                                                                                                   | false    |              | Provider metadata holds provider-specific response metadata (e.g. Anthropic cache control hints) as raw JSON. Internal only: stripped by db2sdk before API responses.                                                                                                                                                                                                                                        |
| `»»» result`                       | array                                                                                                   | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» result_delta`                 | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» result_reset`                 | boolean                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» skill_description`            | string                                                                                                  | false    |              | Skill description is the short description from the skill's SKILL.md frontmatter.                                                                                                                                                                                                                                                                                                                            |
| `»»» skill_dir`                    | string                                                                                                  | false    |              | Skill dir is the absolute path to the skill directory inside the workspace filesystem. Internal only: used by read\_skill/read\_skill\_file tools to locate skill files.                                                                                                                                                                                                                                     |
| `»»» skill_name`                   | string                                                                                                  | false    |              | Skill name is the kebab-case name of a discovered skill from the workspace's .agents/skills/ directory.                                                                                                                                                                                                                                                                                                      |
| `»»» source_id`                    | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» start_line`                   | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» text`                         | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» title`                        | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» tool_call_id`                 | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» tool_name`                    | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» type`                         | [codersdk.ChatMessagePartType](/beta-docs/reference/api/schemas/#codersdkchatmessageparttype)           | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» url`                          | string                                                                                                  | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» created_at`                    | string(date-time)                                                                                       | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» created_by`                    | string(uuid)                                                                                            | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» id`                            | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» model_config_id`               | string(uuid)                                                                                            | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» role`                          | [codersdk.ChatMessageRole](/beta-docs/reference/api/schemas/#codersdkchatmessagerole)                   | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» usage`                         | [codersdk.ChatMessageUsage](/beta-docs/reference/api/schemas/#codersdkchatmessageusage)                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» cache_creation_tokens`        | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» cache_read_tokens`            | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» context_limit`                | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» input_tokens`                 | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» output_tokens`                | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» reasoning_tokens`             | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»»» total_tokens`                 | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `» message_part`                   | [codersdk.ChatStreamMessagePart](/beta-docs/reference/api/schemas/#codersdkchatstreammessagepart)       | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» generation_attempt`            | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» history_version`               | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» part`                          | [codersdk.ChatMessagePart](/beta-docs/reference/api/schemas/#codersdkchatmessagepart)                   | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» role`                          | [codersdk.ChatMessageRole](/beta-docs/reference/api/schemas/#codersdkchatmessagerole)                   | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» seq`                           | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `» queued_messages`                | array                                                                                                   | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» chat_id`                       | string(uuid)                                                                                            | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» content`                       | array                                                                                                   | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» created_at`                    | string(date-time)                                                                                       | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» id`                            | integer                                                                                                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» model_config_id`               | string(uuid)                                                                                            | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `» retry`                          | [codersdk.ChatStreamRetry](/beta-docs/reference/api/schemas/#codersdkchatstreamretry)                   | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» attempt`                       | integer                                                                                                 | false    |              | Attempt is the 1-indexed retry attempt number.                                                                                                                                                                                                                                                                                                                                                               |
| `»» delay_ms`                      | integer                                                                                                 | false    |              | Delay ms is the backoff delay in milliseconds before the retry.                                                                                                                                                                                                                                                                                                                                              |
| `»» error`                         | string                                                                                                  | false    |              | Error is the normalized error message from the failed attempt.                                                                                                                                                                                                                                                                                                                                               |
| `»» kind`                          | [codersdk.ChatErrorKind](/beta-docs/reference/api/schemas/#codersdkchaterrorkind)                       | false    |              | Kind classifies the retry reason for consistent client rendering.                                                                                                                                                                                                                                                                                                                                            |
| `»» provider`                      | string                                                                                                  | false    |              | Provider identifies the upstream model provider when known.                                                                                                                                                                                                                                                                                                                                                  |
| `»» retrying_at`                   | string(date-time)                                                                                       | false    |              | Retrying at is the timestamp when the retry will be attempted.                                                                                                                                                                                                                                                                                                                                               |
| `»» status_code`                   | integer                                                                                                 | false    |              | Status code is the best-effort upstream HTTP status code.                                                                                                                                                                                                                                                                                                                                                    |
| `» status`                         | [codersdk.ChatStreamStatus](/beta-docs/reference/api/schemas/#codersdkchatstreamstatus)                 | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `»» status`                        | [codersdk.ChatStatus](/beta-docs/reference/api/schemas/#codersdkchatstatus)                             | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |
| `» type`                           | [codersdk.ChatStreamEventType](/beta-docs/reference/api/schemas/#codersdkchatstreameventtype)           | false    |              |                                                                                                                                                                                                                                                                                                                                                                                                              |

#### Enumerated Values [#enumerated-values-1]

| Property | Value(s)                                                                                                                                                                                                                                                                |
| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `kind`   | `auth`, `config`, `content_filter`, `generic`, `hook_denied`, `hook_dispatch_failed`, `missing_key`, `overloaded`, `provider_disabled`, `rate_limit`, `stream_silence_timeout`, `timeout`, `usage_limit`                                                                |
| `type`   | `action_required`, `context-file`, `error`, `file`, `file-reference`, `history_reset`, `hook-context`, `hook-notice`, `message`, `message_part`, `preview_reset`, `queue_update`, `reasoning`, `retry`, `skill`, `source`, `status`, `text`, `tool-call`, `tool-result` |
| `role`   | `assistant`, `system`, `tool`, `user`                                                                                                                                                                                                                                   |
| `status` | `error`, `interrupting`, `requires_action`, `running`, `waiting`                                                                                                                                                                                                        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Watch chat workspace git state via WebSockets [#watch-chat-workspace-git-state-via-websockets]

### Code samples [#code-samples-39]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/chats/{chat}/stream/git \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/chats/{chat}/stream/git`

### Parameters [#parameters-29]

| Name   | In   | Type         | Required | Description |
| ------ | ---- | ------------ | -------- | ----------- |
| `chat` | path | string(uuid) | true     | Chat ID     |

### Example responses [#example-responses-27]

> 200 Response

```json
{
  "message": "string",
  "repositories": [
    {
      "branch": "string",
      "remote_origin": "string",
      "removed": true,
      "repo_root": "string",
      "unified_diff": "string"
    }
  ],
  "scanned_at": "2019-08-24T14:15:22Z",
  "type": "changes"
}
```

### Responses [#responses-39]

| Status | Meaning                                                 | Description | Schema                                                                                                              |
| ------ | ------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.WorkspaceAgentGitServerMessage](/beta-docs/reference/api/schemas/#codersdkworkspaceagentgitservermessage) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Propose chat title [#propose-chat-title]

### Code samples [#code-samples-40]

```sh
# Example request using curl
curl -X POST http://coder-server:8080/api/v2/chats/{chat}/title/propose \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`POST /api/v2/chats/{chat}/title/propose`

### Parameters [#parameters-30]

| Name   | In   | Type         | Required | Description |
| ------ | ---- | ------------ | -------- | ----------- |
| `chat` | path | string(uuid) | true     | Chat ID     |

### Example responses [#example-responses-28]

> 200 Response

```json
{
  "title": "string"
}
```

### Responses [#responses-40]

| Status | Meaning                                                 | Description | Schema                                                                                                  |
| ------ | ------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.ProposeChatTitleResponse](/beta-docs/reference/api/schemas/#codersdkproposechattitleresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Submit chat tool results [#submit-chat-tool-results]

### Code samples [#code-samples-41]

```sh
# Example request using curl
curl -X POST http://coder-server:8080/api/v2/chats/{chat}/tool-results \
  -H 'Content-Type: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`POST /api/v2/chats/{chat}/tool-results`

> Body parameter

```json
{
  "results": [
    {
      "is_error": true,
      "output": [
        0
      ],
      "tool_call_id": "string"
    }
  ]
}
```

### Parameters [#parameters-31]

| Name   | In   | Type                                                                                                    | Required | Description  |
| ------ | ---- | ------------------------------------------------------------------------------------------------------- | -------- | ------------ |
| `chat` | path | string(uuid)                                                                                            | true     | Chat ID      |
| `body` | body | [codersdk.SubmitToolResultsRequest](/beta-docs/reference/api/schemas/#codersdksubmittoolresultsrequest) | true     | Request body |

### Responses [#responses-41]

| Status | Meaning                                                         | Description | Schema |
| ------ | --------------------------------------------------------------- | ----------- | ------ |
| 204    | [No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) | No Content  |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## List AI models and provider descriptors in an organization [#list-ai-models-and-provider-descriptors-in-an-organization]

### Code samples [#code-samples-42]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/chats/models \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/organizations/{organization}/chats/models`

### Parameters [#parameters-32]

| Name           | In   | Type   | Required | Description             |
| -------------- | ---- | ------ | -------- | ----------------------- |
| `organization` | path | string | true     | Organization name or ID |

### Example responses [#example-responses-29]

> 200 Response

```json
{
  "models": [
    {
      "ai_provider_id": "5a3b8ff9-20e7-4c37-ba1a-5b433e355819",
      "compression_threshold": 0,
      "context_limit": 0,
      "created_at": "2019-08-24T14:15:22Z",
      "display_name": "string",
      "enabled": true,
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "is_default": true,
      "model": "string",
      "model_config": {
        "frequency_penalty": 0,
        "max_output_tokens": 0,
        "openai_config": {
          "use_responses_api": true
        },
        "presence_penalty": 0,
        "provider_options": {
          "anthropic": {
            "allowed_domains": [
              "string"
            ],
            "blocked_domains": [
              "string"
            ],
            "context_1m_enabled": true,
            "disable_parallel_tool_use": true,
            "send_reasoning": true,
            "thinking": {
              "budget_tokens": 0
            },
            "thinking_display": "string",
            "web_search_enabled": true
          },
          "google": {
            "cached_content": "string",
            "safety_settings": [
              {
                "category": "string",
                "threshold": "string"
              }
            ],
            "thinking_config": {
              "include_thoughts": true,
              "thinking_budget": 0,
              "thinking_level": "string"
            },
            "threshold": "string",
            "web_search_enabled": true
          },
          "openai": {
            "allowed_domains": [
              "string"
            ],
            "include": [
              "string"
            ],
            "instructions": "string",
            "log_probs": true,
            "logit_bias": {
              "property1": 0,
              "property2": 0
            },
            "max_completion_tokens": 0,
            "max_tool_calls": 0,
            "metadata": {
              "property1": null,
              "property2": null
            },
            "parallel_tool_calls": true,
            "prediction": {
              "property1": null,
              "property2": null
            },
            "prompt_cache_key": "string",
            "reasoning_summary": "string",
            "safety_identifier": "string",
            "search_context_size": "string",
            "service_tier": "string",
            "store": true,
            "strict_json_schema": true,
            "structured_outputs": true,
            "text_verbosity": "string",
            "top_log_probs": 0,
            "user": "string",
            "web_search_enabled": true
          },
          "openaicompat": {
            "user": "string"
          },
          "openrouter": {
            "extra_body": {
              "property1": null,
              "property2": null
            },
            "include_usage": true,
            "log_probs": true,
            "logit_bias": {
              "property1": 0,
              "property2": 0
            },
            "parallel_tool_calls": true,
            "provider": {
              "allow_fallbacks": true,
              "data_collection": "string",
              "ignore": [
                "string"
              ],
              "only": [
                "string"
              ],
              "order": [
                "string"
              ],
              "quantizations": [
                "string"
              ],
              "require_parameters": true,
              "sort": "string"
            },
            "reasoning": {
              "enabled": true,
              "exclude": true,
              "max_tokens": 0
            },
            "user": "string"
          },
          "vercel": {
            "extra_body": {
              "property1": null,
              "property2": null
            },
            "logit_bias": {
              "property1": 0,
              "property2": 0
            },
            "logprobs": true,
            "parallel_tool_calls": true,
            "providerOptions": {
              "models": [
                "string"
              ],
              "order": [
                "string"
              ]
            },
            "reasoning": {
              "enabled": true,
              "exclude": true,
              "max_tokens": 0
            },
            "top_logprobs": 0,
            "user": "string"
          }
        },
        "reasoning_effort": {
          "default": "string",
          "max": "string"
        },
        "temperature": 0,
        "top_k": 0,
        "top_p": 0
      },
      "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
      "reasoning_efforts": [
        "string"
      ],
      "updated_at": "2019-08-24T14:15:22Z"
    }
  ],
  "providers": [
    {
      "allow_user_api_key": true,
      "available": true,
      "display_name": "string",
      "enabled": true,
      "has_api_key": true,
      "has_effective_api_key": true,
      "has_user_api_key": true,
      "icon": "string",
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "type": "string",
      "unavailable_reason": "missing_api_key"
    }
  ],
  "unsupported_providers": [
    {
      "display_name": "string",
      "provider": "string"
    }
  ]
}
```

### Responses [#responses-42]

| Status | Meaning                                                 | Description | Schema                                                                                                              |
| ------ | ------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.OrganizationChatModelsResponse](/beta-docs/reference/api/schemas/#codersdkorganizationchatmodelsresponse) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Create an AI model in an organization [#create-an-ai-model-in-an-organization]

### Code samples [#code-samples-43]

```sh
# Example request using curl
curl -X POST http://coder-server:8080/api/v2/organizations/{organization}/chats/models \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`POST /api/v2/organizations/{organization}/chats/models`

> Body parameter

```json
{
  "ai_provider_id": "5a3b8ff9-20e7-4c37-ba1a-5b433e355819",
  "compression_threshold": 0,
  "context_limit": 0,
  "display_name": "string",
  "enabled": true,
  "is_default": true,
  "model": "string",
  "model_config": {
    "frequency_penalty": 0,
    "max_output_tokens": 0,
    "openai_config": {
      "use_responses_api": true
    },
    "presence_penalty": 0,
    "provider_options": {
      "anthropic": {
        "allowed_domains": [
          "string"
        ],
        "blocked_domains": [
          "string"
        ],
        "context_1m_enabled": true,
        "disable_parallel_tool_use": true,
        "send_reasoning": true,
        "thinking": {
          "budget_tokens": 0
        },
        "thinking_display": "string",
        "web_search_enabled": true
      },
      "google": {
        "cached_content": "string",
        "safety_settings": [
          {
            "category": "string",
            "threshold": "string"
          }
        ],
        "thinking_config": {
          "include_thoughts": true,
          "thinking_budget": 0,
          "thinking_level": "string"
        },
        "threshold": "string",
        "web_search_enabled": true
      },
      "openai": {
        "allowed_domains": [
          "string"
        ],
        "include": [
          "string"
        ],
        "instructions": "string",
        "log_probs": true,
        "logit_bias": {
          "property1": 0,
          "property2": 0
        },
        "max_completion_tokens": 0,
        "max_tool_calls": 0,
        "metadata": {
          "property1": null,
          "property2": null
        },
        "parallel_tool_calls": true,
        "prediction": {
          "property1": null,
          "property2": null
        },
        "prompt_cache_key": "string",
        "reasoning_summary": "string",
        "safety_identifier": "string",
        "search_context_size": "string",
        "service_tier": "string",
        "store": true,
        "strict_json_schema": true,
        "structured_outputs": true,
        "text_verbosity": "string",
        "top_log_probs": 0,
        "user": "string",
        "web_search_enabled": true
      },
      "openaicompat": {
        "user": "string"
      },
      "openrouter": {
        "extra_body": {
          "property1": null,
          "property2": null
        },
        "include_usage": true,
        "log_probs": true,
        "logit_bias": {
          "property1": 0,
          "property2": 0
        },
        "parallel_tool_calls": true,
        "provider": {
          "allow_fallbacks": true,
          "data_collection": "string",
          "ignore": [
            "string"
          ],
          "only": [
            "string"
          ],
          "order": [
            "string"
          ],
          "quantizations": [
            "string"
          ],
          "require_parameters": true,
          "sort": "string"
        },
        "reasoning": {
          "enabled": true,
          "exclude": true,
          "max_tokens": 0
        },
        "user": "string"
      },
      "vercel": {
        "extra_body": {
          "property1": null,
          "property2": null
        },
        "logit_bias": {
          "property1": 0,
          "property2": 0
        },
        "logprobs": true,
        "parallel_tool_calls": true,
        "providerOptions": {
          "models": [
            "string"
          ],
          "order": [
            "string"
          ]
        },
        "reasoning": {
          "enabled": true,
          "exclude": true,
          "max_tokens": 0
        },
        "top_logprobs": 0,
        "user": "string"
      }
    },
    "reasoning_effort": {
      "default": "string",
      "max": "string"
    },
    "temperature": 0,
    "top_k": 0,
    "top_p": 0
  }
}
```

### Parameters [#parameters-33]

| Name           | In   | Type                                                                                                | Required | Description             |
| -------------- | ---- | --------------------------------------------------------------------------------------------------- | -------- | ----------------------- |
| `organization` | path | string                                                                                              | true     | Organization name or ID |
| `body`         | body | [codersdk.CreateChatModelRequest](/beta-docs/reference/api/schemas/#codersdkcreatechatmodelrequest) | true     | Model                   |

### Example responses [#example-responses-30]

> 201 Response

```json
{
  "ai_provider_id": "5a3b8ff9-20e7-4c37-ba1a-5b433e355819",
  "compression_threshold": 0,
  "context_limit": 0,
  "created_at": "2019-08-24T14:15:22Z",
  "display_name": "string",
  "enabled": true,
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "is_default": true,
  "model": "string",
  "model_config": {
    "frequency_penalty": 0,
    "max_output_tokens": 0,
    "openai_config": {
      "use_responses_api": true
    },
    "presence_penalty": 0,
    "provider_options": {
      "anthropic": {
        "allowed_domains": [
          "string"
        ],
        "blocked_domains": [
          "string"
        ],
        "context_1m_enabled": true,
        "disable_parallel_tool_use": true,
        "send_reasoning": true,
        "thinking": {
          "budget_tokens": 0
        },
        "thinking_display": "string",
        "web_search_enabled": true
      },
      "google": {
        "cached_content": "string",
        "safety_settings": [
          {
            "category": "string",
            "threshold": "string"
          }
        ],
        "thinking_config": {
          "include_thoughts": true,
          "thinking_budget": 0,
          "thinking_level": "string"
        },
        "threshold": "string",
        "web_search_enabled": true
      },
      "openai": {
        "allowed_domains": [
          "string"
        ],
        "include": [
          "string"
        ],
        "instructions": "string",
        "log_probs": true,
        "logit_bias": {
          "property1": 0,
          "property2": 0
        },
        "max_completion_tokens": 0,
        "max_tool_calls": 0,
        "metadata": {
          "property1": null,
          "property2": null
        },
        "parallel_tool_calls": true,
        "prediction": {
          "property1": null,
          "property2": null
        },
        "prompt_cache_key": "string",
        "reasoning_summary": "string",
        "safety_identifier": "string",
        "search_context_size": "string",
        "service_tier": "string",
        "store": true,
        "strict_json_schema": true,
        "structured_outputs": true,
        "text_verbosity": "string",
        "top_log_probs": 0,
        "user": "string",
        "web_search_enabled": true
      },
      "openaicompat": {
        "user": "string"
      },
      "openrouter": {
        "extra_body": {
          "property1": null,
          "property2": null
        },
        "include_usage": true,
        "log_probs": true,
        "logit_bias": {
          "property1": 0,
          "property2": 0
        },
        "parallel_tool_calls": true,
        "provider": {
          "allow_fallbacks": true,
          "data_collection": "string",
          "ignore": [
            "string"
          ],
          "only": [
            "string"
          ],
          "order": [
            "string"
          ],
          "quantizations": [
            "string"
          ],
          "require_parameters": true,
          "sort": "string"
        },
        "reasoning": {
          "enabled": true,
          "exclude": true,
          "max_tokens": 0
        },
        "user": "string"
      },
      "vercel": {
        "extra_body": {
          "property1": null,
          "property2": null
        },
        "logit_bias": {
          "property1": 0,
          "property2": 0
        },
        "logprobs": true,
        "parallel_tool_calls": true,
        "providerOptions": {
          "models": [
            "string"
          ],
          "order": [
            "string"
          ]
        },
        "reasoning": {
          "enabled": true,
          "exclude": true,
          "max_tokens": 0
        },
        "top_logprobs": 0,
        "user": "string"
      }
    },
    "reasoning_effort": {
      "default": "string",
      "max": "string"
    },
    "temperature": 0,
    "top_k": 0,
    "top_p": 0
  },
  "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
  "reasoning_efforts": [
    "string"
  ],
  "updated_at": "2019-08-24T14:15:22Z"
}
```

### Responses [#responses-43]

| Status | Meaning                                                      | Description | Schema                                                                    |
| ------ | ------------------------------------------------------------ | ----------- | ------------------------------------------------------------------------- |
| 201    | [Created](https://tools.ietf.org/html/rfc7231#section-6.3.2) | Created     | [codersdk.ChatModel](/beta-docs/reference/api/schemas/#codersdkchatmodel) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## List user AI provider key configurations [#list-user-ai-provider-key-configurations]

### Code samples [#code-samples-44]

```sh
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/users/{user}/ai-provider-keys \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`GET /api/v2/users/{user}/ai-provider-keys`

### Parameters [#parameters-34]

| Name   | In   | Type   | Required | Description              |
| ------ | ---- | ------ | -------- | ------------------------ |
| `user` | path | string | true     | User ID, username, or me |

### Example responses [#example-responses-31]

> 200 Response

```json
[
  {
    "byok_enabled": true,
    "has_provider_api_key": true,
    "has_user_api_key": true,
    "provider": {
      "deleted": true,
      "display_name": "string",
      "enabled": true,
      "icon": "string",
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "name": "string",
      "type": "openai"
    }
  }
]
```

### Responses [#responses-44]

| Status | Meaning                                                 | Description | Schema                                                                                                         |
| ------ | ------------------------------------------------------- | ----------- | -------------------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | array of [codersdk.UserAIProviderKeyConfig](/beta-docs/reference/api/schemas/#codersdkuseraiproviderkeyconfig) |

<h3 id="list-user-ai-provider-key-configurations-responseschema">Response Schema</h3>

Status Code **200**

| Name                     | Type                                                                                      | Required | Restrictions | Description |
| ------------------------ | ----------------------------------------------------------------------------------------- | -------- | ------------ | ----------- |
| `[array item]`           | array                                                                                     | false    |              |             |
| `» byok_enabled`         | boolean                                                                                   | false    |              |             |
| `» has_provider_api_key` | boolean                                                                                   | false    |              |             |
| `» has_user_api_key`     | boolean                                                                                   | false    |              |             |
| `» provider`             | [codersdk.AIProviderSummary](/beta-docs/reference/api/schemas/#codersdkaiprovidersummary) | false    |              |             |
| `»» deleted`             | boolean                                                                                   | false    |              |             |
| `»» display_name`        | string                                                                                    | false    |              |             |
| `»» enabled`             | boolean                                                                                   | false    |              |             |
| `»» icon`                | string                                                                                    | false    |              |             |
| `»» id`                  | string(uuid)                                                                              | false    |              |             |
| `»» name`                | string                                                                                    | false    |              |             |
| `»» type`                | [codersdk.AIProviderType](/beta-docs/reference/api/schemas/#codersdkaiprovidertype)       | false    |              |             |

#### Enumerated Values [#enumerated-values-2]

| Property | Value(s)                                                                                                |
| -------- | ------------------------------------------------------------------------------------------------------- |
| `type`   | `anthropic`, `azure`, `bedrock`, `copilot`, `google`, `openai`, `openai-compat`, `openrouter`, `vercel` |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Update user AI provider key [#update-user-ai-provider-key]

### Code samples [#code-samples-45]

```sh
# Example request using curl
curl -X PUT http://coder-server:8080/api/v2/users/{user}/ai-provider-keys/{aiProvider} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Coder-Session-Token: API_KEY'
```

`PUT /api/v2/users/{user}/ai-provider-keys/{aiProvider}`

> Body parameter

```json
{
  "api_key": "string"
}
```

### Parameters [#parameters-35]

| Name         | In   | Type                                                                                                                | Required | Description              |
| ------------ | ---- | ------------------------------------------------------------------------------------------------------------------- | -------- | ------------------------ |
| `user`       | path | string                                                                                                              | true     | User ID, username, or me |
| `aiProvider` | path | string(uuid)                                                                                                        | true     | AI provider ID           |
| `body`       | body | [codersdk.CreateUserAIProviderKeyRequest](/beta-docs/reference/api/schemas/#codersdkcreateuseraiproviderkeyrequest) | true     | Request body             |

### Example responses [#example-responses-32]

> 200 Response

```json
{
  "byok_enabled": true,
  "has_provider_api_key": true,
  "has_user_api_key": true,
  "provider": {
    "deleted": true,
    "display_name": "string",
    "enabled": true,
    "icon": "string",
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "name": "string",
    "type": "openai"
  }
}
```

### Responses [#responses-45]

| Status | Meaning                                                 | Description | Schema                                                                                                |
| ------ | ------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------- |
| 200    | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK          | [codersdk.UserAIProviderKeyConfig](/beta-docs/reference/api/schemas/#codersdkuseraiproviderkeyconfig) |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).

## Delete user AI provider key [#delete-user-ai-provider-key]

### Code samples [#code-samples-46]

```sh
# Example request using curl
curl -X DELETE http://coder-server:8080/api/v2/users/{user}/ai-provider-keys/{aiProvider} \
  -H 'Coder-Session-Token: API_KEY'
```

`DELETE /api/v2/users/{user}/ai-provider-keys/{aiProvider}`

### Parameters [#parameters-36]

| Name         | In   | Type         | Required | Description              |
| ------------ | ---- | ------------ | -------- | ------------------------ |
| `user`       | path | string       | true     | User ID, username, or me |
| `aiProvider` | path | string(uuid) | true     | AI provider ID           |

### Responses [#responses-46]

| Status | Meaning                                                         | Description | Schema |
| ------ | --------------------------------------------------------------- | ----------- | ------ |
| 204    | [No Content](https://tools.ietf.org/html/rfc7231#section-6.3.5) | No Content  |        |

To perform this operation, you must be authenticated. [Learn more](/beta-docs/reference/api/authentication/).
