> ## Documentation Index
> Fetch the complete documentation index at: https://docs.weav.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List conversations

> Requires a token with the external-api:read or external-api:write ability. per_page integer Default: 15 Minimum: 1. Maximum: 100. page integer Default: 1 Minimum: 1. status string Filter by status One of: open , closed . channel string Filter by channel One of: email , chat . cURL JavaScript…

```http
GET https://api.weav.com/v1/conversations
```

Requires a token with the `external-api:read` or `external-api:write` ability.

## Query parameters

<ParamField query="per_page" type="integer" default="15">
Minimum: 1.

Maximum: 100.
</ParamField>

<ParamField query="page" type="integer" default="1">
Minimum: 1.
</ParamField>

<ParamField query="status" type="string">
Filter by status

One of: `open`, `closed`.
</ParamField>

<ParamField query="channel" type="string">
Filter by channel

One of: `email`, `chat`.
</ParamField>

## Request

<CodeGroup>

```bash cURL
curl --request GET \
  --url 'https://api.weav.com/v1/conversations' \
  --header "Authorization: Bearer ${WEAV_API_TOKEN}"
```

```js JavaScript
const response = await fetch("https://api.weav.com/v1/conversations", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.WEAV_API_TOKEN}`
  }
});
console.log(await response.json());
```

```python Python
import os
import requests

headers = {"Authorization": f"Bearer {os.environ['WEAV_API_TOKEN']}"}
response = requests.get("https://api.weav.com/v1/conversations", headers=headers)
print(response.json())
```

```php PHP
use GuzzleHttp\Client;

$client = new Client();
$response = $client->request('GET', 'https://api.weav.com/v1/conversations', [
    'headers' => ['Authorization' => 'Bearer '.getenv('WEAV_API_TOKEN')],
]);
echo $response->getBody();
```

</CodeGroup>

## Response

<CodeGroup>

```json 200 OK
{
    "data": [
        {
            "id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
            "channel": "email",
            "customer_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
            "subject": "string",
            "status": "open",
            "priority": "low",
            "assignee_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
            "assignee_type": "user",
            "closed_at": "2026-01-01T00:00:00Z",
            "first_response_at": "2026-01-01T00:00:00Z",
            "last_message_at": "2026-01-01T00:00:00Z",
            "is_spam": false,
            "spam_score": 0,
            "created_at": "2026-01-01T00:00:00Z",
            "updated_at": "2026-01-01T00:00:00Z"
        }
    ]
}
```

</CodeGroup>

- `401` Unauthorized

## Response fields

<ParamField body="id" type="string">
Format: `uuid`.
</ParamField>

<ParamField body="channel" type="string">
One of: `email`, `chat`.
</ParamField>

<ParamField body="customer_id" type="string">
Format: `uuid`.
</ParamField>

<ParamField body="subject" type="string | null">

</ParamField>

<ParamField body="status" type="string">
One of: `open`, `closed`.
</ParamField>

<ParamField body="priority" type="string">
One of: `low`, `normal`, `high`, `urgent`.
</ParamField>

<ParamField body="assignee_id" type="string | null">
ID of the assigned user or agent. Assignees must belong to the same workspace. Chat conversations can only use the original chat agent when assigning an agent. Email conversations can only use the active email agent when assigning an agent.

Format: `uuid`.
</ParamField>

<ParamField body="assignee_type" type="string | null">
Type of assignee: 'user' for users or 'agent' for AI agents.

One of: `user`, `agent`.
</ParamField>

<ParamField body="closed_at" type="string | null">
Format: `date-time`.
</ParamField>

<ParamField body="first_response_at" type="string | null">
Format: `date-time`.
</ParamField>

<ParamField body="last_message_at" type="string | null">
Format: `date-time`.
</ParamField>

<ParamField body="is_spam" type="boolean">

</ParamField>

<ParamField body="spam_score" type="number | null">

</ParamField>

<ParamField body="created_at" type="string | null">
Format: `date-time`.
</ParamField>

<ParamField body="updated_at" type="string | null">
Format: `date-time`.
</ParamField>

---

This knowledge base is built and hosted on [Weav](https://weav.com).
