> ## 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 customer conversations

> Requires a token with the external-api:read or external-api:write ability. id string required Format: uuid . per_page integer Default: 15 Minimum: 1. Maximum: 100. page integer Default: 1 Minimum: 1. cURL JavaScript Python PHP cURL JavaScript Python PHP 200 OK 200 OK 404 Not Found 401 Unauthorized…

```http
GET https://api.weav.com/v1/customers/{id}/conversations
```

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

## Path parameters

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

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

## Request

<CodeGroup>

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

```js JavaScript
const response = await fetch("https://api.weav.com/v1/customers/{id}/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/customers/{id}/conversations", headers=headers)
print(response.json())
```

```php PHP
use GuzzleHttp\Client;

$client = new Client();
$response = $client->request('GET', 'https://api.weav.com/v1/customers/{id}/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>

- `404` Not Found
- `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).
