# List Conversations

> Conversations of the store (newest first).

Source: https://shopassist.coec.dk/docs/api/reference/conversations/list-conversations · Updated 2026-11-03

`GET /v1/stores/{store_id}/conversations`

- Scope: `conversations:read`
- Rate limit: 600 requests/min per API key (test keys: 60/min)

Conversations of the store (newest first).

## Parameters [#parameters]

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `store_id` | path | `string` | yes |  |
| `status` | query | `"open" \| "closed" \| null` | no |  |
| `from` | query | `string \| null` | no | started_at >= from |
| `to` | query | `string \| null` | no | started_at < to |
| `updated_since` | query | `string \| null` | no |  |
| `limit` | query | `integer` | no | Page size |
| `cursor` | query | `string \| null` | no | Cursor from the previous page |

## Example request [#example-request]

```bash
curl -X GET "https://api.shopassist.coec.dk/v1/stores/sto_01j8000000e008000000000000/conversations" \
  -H "Authorization: Bearer $SHOPASSIST_API_KEY"
```

## Response 200 (Page_ApiConversation_) [#response]

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | `ApiConversation[]` | yes |  |
| `data[].assigned_user_id` | `string \| null` | yes | pattern `^usr_[0-9a-hjkmnp-tv-z]{26}$` |
| `data[].channel` | `"widget" \| "playground" \| "preview" \| "demo" \| "api"` | yes |  |
| `data[].closed_at` | `string \| null` | yes | format date-time |
| `data[].csat_score` | `integer \| null` | yes |  |
| `data[].handoff_requested_at` | `string \| null` | yes | format date-time |
| `data[].handoff_state` | `"none" \| "requested" \| "live" \| "delivered_offline" \| "failed" \| "resolved"` | yes |  |
| `data[].id` | `string` | yes | pattern `^conv_[0-9a-hjkmnp-tv-z]{26}$` |
| `data[].identity_level` | `"guest" \| "order_lookup" \| "order_otp" \| "customer"` | yes |  |
| `data[].is_test` | `boolean` | yes |  |
| `data[].last_message_at` | `string \| null` | yes | format date-time |
| `data[].locale` | `string \| null` | yes |  |
| `data[].message_count` | `integer` | yes | ≥ 0 |
| `data[].mode` | `"ai" \| "human_requested" \| "human"` | yes |  |
| `data[].platform_customer_id` | `string \| null` | yes | Only for identity_level = customer |
| `data[].resolution` | `"resolved_ai" \| "handed_off" \| "abandoned" \| "unknown" \| null` | yes |  |
| `data[].shopper` | `ShopperView` | yes | Shopper identity as shown on lists (masked for agent/viewer, 06 §5.3). |
| `data[].shopper.email` | `string \| null` | yes |  |
| `data[].shopper.is_masked` | `boolean` | yes |  |
| `data[].shopper.is_verified` | `boolean` | yes |  |
| `data[].shopper.name` | `string \| null` | yes |  |
| `data[].started_at` | `string` | yes | format date-time |
| `data[].status` | `"open" \| "closed"` | yes |  |
| `data[].store_id` | `string` | yes | pattern `^sto_[0-9a-hjkmnp-tv-z]{26}$` |
| `data[].tags` | `string[]` | yes |  |
| `has_more` | `boolean` | yes |  |
| `next_cursor` | `string \| null` | yes | Opaque cursor for the next page; null on the last page |

```json
{
  "data": [
    {
      "assigned_user_id": "usr_01j8000000e008000000000000",
      "channel": "widget",
      "closed_at": "2026-09-28T10:15:30.123Z",
      "csat_score": 1,
      "handoff_requested_at": "2026-09-28T10:15:30.123Z",
      "handoff_state": "none",
      "id": "conv_01j8000000e008000000000000",
      "identity_level": "guest",
      "is_test": true,
      "last_message_at": "2026-09-28T10:15:30.123Z",
      "locale": "da-DK",
      "message_count": 0,
      "mode": "ai",
      "platform_customer_id": "string",
      "resolution": "resolved_ai",
      "shopper": {
        "email": "string",
        "is_masked": true,
        "is_verified": true,
        "name": "string"
      },
      "started_at": "2026-09-28T10:15:30.123Z",
      "status": "open",
      "store_id": "sto_01j8000000e008000000000000",
      "tags": [
        "string"
      ]
    }
  ],
  "has_more": true,
  "next_cursor": "string"
}
```

## Errors [#errors]

| Status | Meaning |
| --- | --- |
| 400 | Bad Request ([error codes](/docs/api/errors)) |
| 401 | Unauthorized ([error codes](/docs/api/errors)) |
| 403 | Forbidden ([error codes](/docs/api/errors)) |
| 404 | Not Found ([error codes](/docs/api/errors)) |
| 422 | Unprocessable Content ([error codes](/docs/api/errors)) |
| 429 | Too Many Requests ([error codes](/docs/api/errors)) |
