# List conversations

List workspace conversations with supported filters and pagination.

## Endpoint

`GET /api/v1/workspaces/{workspace_id}/conversations`

## Authentication

| Class | Authentication | Minimum role | API key |
| --- | --- | --- | --- |
| customer-api | Bearer API key or dashboard session cookie; dashboard mutations also require X-CX-Request: 1. | member | Allowed |

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `workspace_id` | path | `string` | Yes | — |
| `agent_id` | query | `string or null` | No | — |
| `branch_id` | query | `string or null` | No | — |
| `source` | query | `string or null` | No | — |
| `status` | query | `string or null` | No | — |
| `since` | query | `string or null` | No | — |
| `q` | query | `string or null` | No | — |
| `result` | query | `string or null` | No | — |
| `topic_id` | query | `string or null` | No | — |
| `workflow_node_id` | query | `string or null` | No | — |
| `version_id` | query | `string or null` | No | — |
| `analysis_criterion_id` | query | `string or null` | No | — |
| `analysis_definition_fingerprint` | query | `string or null` | No | — |
| `error_type` | query | `string or null` | No | — |
| `end_reason` | query | `string or null` | No | — |
| `tool_name` | query | `string or null` | No | — |
| `tool_error` | query | `boolean or null` | No | — |
| `from` | query | `string or null` | No | — |
| `to` | query | `string or null` | No | — |
| `page` | query | `integer` | No | — |

## Request body

This operation has no request body.

## Example

```bash
curl --request GET 'https://operade.ai/api/v1/workspaces/ws_demo/conversations' \
  --header 'Authorization: Bearer YOUR_API_KEY'
```

## Responses

| Status | Description | Content |
| --- | --- | --- |
| 4XX | Handled client error | application/json: `ErrorResponse` |
| 200 | Successful Response | application/json: `ConversationListResponse` |

### 4XX application/json response schema

| Field path | Type | Reference | Format | Nullable | Required | Enum | Description |
| --- | --- | --- | --- | --- | --- | --- | --- |
| `$` | `object` | ErrorResponse | — | No | Yes | — | — |
| `error` | `object` | ErrorItem | — | No | Yes | — | — |
| `error.code` | `string` | — | — | No | Yes | — | — |
| `error.details` | `object` | — | — | No | No | — | — |
| `error.message` | `string` | — | — | No | Yes | — | — |

### 200 application/json response schema

| Field path | Type | Reference | Format | Nullable | Required | Enum | Description |
| --- | --- | --- | --- | --- | --- | --- | --- |
| `$` | `object` | ConversationListResponse | — | No | Yes | — | — |
| `items` | `array<ConversationSummary>` | — | — | No | Yes | — | — |
| `items[]` | `object` | ConversationSummary | — | No | Yes | — | — |
| `items[].agent_id` | `string` | — | — | No | Yes | — | — |
| `items[].agent_name` | `string` | — | — | No | Yes | — | — |
| `items[].analysis_status` | `string` | — | — | No | Yes | "pending", "processing", "done", "skipped", "failed" | — |
| `items[].branch_id` | `string` | — | — | No | Yes | — | — |
| `items[].branch_name` | `string` | — | — | No | Yes | — | — |
| `items[].call_successful` | `boolean or null` | — | — | Yes | Yes | — | — |
| `items[].cost_usd` | `string` | — | — | No | Yes | — | — |
| `items[].duration_seconds` | `integer` | — | — | No | Yes | — | — |
| `items[].end_reason` | `string or null` | — | — | Yes | Yes | — | — |
| `items[].ended_at` | `string or null` | — | date-time | Yes | Yes | — | — |
| `items[].external_user_id` | `string or null` | — | — | Yes | Yes | — | — |
| `items[].id` | `string` | — | — | No | Yes | — | — |
| `items[].input_tokens` | `integer` | — | — | No | Yes | — | — |
| `items[].is_draft_run` | `boolean` | — | — | No | Yes | — | — |
| `items[].output_tokens` | `integer` | — | — | No | Yes | — | — |
| `items[].source` | `string` | — | — | No | Yes | "test_chat", "widget", "api", "channel", "agent_test" | — |
| `items[].started_at` | `string` | — | date-time | No | Yes | — | — |
| `items[].status` | `string` | — | — | No | Yes | "active", "ended", "failed" | — |
| `items[].title` | `string or null` | — | — | Yes | Yes | — | — |
| `items[].turn_count` | `integer` | — | — | No | Yes | — | — |

### Response example

```json
{
  "items": []
}
```

## Errors

Reviewed common and route-declared errors are summarized here; the list is not exhaustive. Start with the [distributed error index](/docs/reference/api/errors) to find each code's canonical domain page.

| Status | Code | Description |
| --- | --- | --- |
| 401 | `unauthenticated` | Authentication is missing, invalid, or revoked. |
| 403 | `forbidden` | The authenticated caller does not have access to this operation. |
| 404 | `not_found` | The requested workspace resource was not found. |

## Related operations

- [Get a conversation](/docs/api-reference/conversations/get-conversation) — `GET /api/v1/workspaces/{workspace_id}/conversations/{conversation_id}`
