---
title: "List conversations"
description: "List your own conversations, latest activity first: a person's chats, or the conversations an API key started, optionally of one end user."
canonical: "https://lookio.app/docs/api/conversations/list-conversations"
updated: "2026-10-17"
---

# List conversations

Requires `assistants:read`.

What you list depends on the credential. A person lists their own chats, which are personal: nobody else's is listed, admins included. An API key lists the conversations its own questions started. `channel` says which: `personal`, `api` (REST, CLI, SDK) or `mcp`.

Filter with `assistant_id`, and, for an API key, with `end_user` to list one of your users' conversations. Results come latest activity first, and you page with `cursor`: see [Pagination](/docs/api/conventions#pagination).

A conversation whose assistant was deleted stays in the list with `assistant_deleted: true`. See [Conversations and end users](/docs/platform/conversations-and-end-users).

This is not the workspace's view of what people asked: that is [List the workspace's conversation logs](/docs/api/logs/list-log-conversations).

Open one with [Get a conversation](/docs/api/conversations/get-conversation).

```http
GET https://api.lookio.app/v1/conversations
```

## Authorizations

- `Authorization` (bearer, in header, required)

## Query parameters

- `limit` (`integer`, range: `1–100`): Number of items to return. Values outside 1-100 are clamped, and the response reports the limit actually applied.
- `cursor` (`string`, pattern: `^cnv_[abcdefghjkmnpqrstuvwxyz23456789]{12}$`): Pass `next_cursor` from the previous page, unchanged.
- `assistant_id` (`string`, pattern: `^ast_[abcdefghjkmnpqrstuvwxyz23456789]{12}$`): Only the conversations with this assistant.
- `end_user` (`string`, pattern: `^[\w.@:+\-]{1,200}$`): API keys only: only the conversations of this `end_user`, the id you sent with the questions.

## Response

**200**: List your conversations

- `data` (`object[]`, required)
- `data.id` (`string`, required, pattern: `^cnv_[abcdefghjkmnpqrstuvwxyz23456789]{12}$`)
- `data.assistant_id` (`string`, required)
- `data.assistant_deleted` (`boolean`, required): True when the assistant was deleted since: the conversation stays readable but cannot be continued.
- `data.title` (`string`, required): Defaults to the first 100 characters of the opening question until renamed (`PATCH /v1/conversations/{conversation_id}`, up to 100 characters).
- `data.channel` (`enum<string>`, required, one of: `personal, api, mcp`): `personal`: a person's own chat (the app, or their connection). `api`: an API key's conversation (REST, CLI, SDK). `mcp`: an API key's conversation through the MCP server.
- `data.end_user` (`string,null`, required): The `end_user` sent with the questions of an API key's conversation. Null for a personal chat and when none was sent.
- `data.message_count` (`integer`, required): Questions and answers together.
- `data.created_at` (`string`, required)
- `data.updated_at` (`string`, required): The last activity. Conversations are listed by it, latest first.
- `has_more` (`boolean`, required): True when another page follows: pass `next_cursor` back as `cursor`.
- `next_cursor` (`string,null`, required): Pass it back unchanged as `cursor`. Null on the last page.
- `limit` (`integer`, required): The page size actually applied.
- `request_id` (`string`, required)

```json
{
  "data": [
    {
      "id": "cnv_ca9xz837zsvb",
      "assistant_id": "ast_66xcnwtzj8vt",
      "assistant_deleted": false,
      "title": "What is the refund window?",
      "channel": "api",
      "end_user": "user_42",
      "message_count": 4,
      "created_at": "2026-10-12T09:30:00.000Z",
      "updated_at": "2026-10-12T09:30:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null,
  "request_id": "req_01K9X7M2Q4"
}
```

**400**: Possible codes: invalid_request, unknown_field, invalid_parameter, invalid_cursor

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>"
  },
  "request_id": "<string>"
}
```

**401**: Possible codes: authentication_required, invalid_api_key, api_key_expired, api_key_revoked, invalid_access_key

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>"
  },
  "request_id": "<string>"
}
```

**403**: Possible codes: insufficient_scope, feature_not_available, admin_required, permission_denied

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>"
  },
  "request_id": "<string>"
}
```

**429**: Possible codes: rate_limited

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>"
  },
  "request_id": "<string>"
}
```

**500**: Possible codes: internal_error

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>"
  },
  "request_id": "<string>"
}
```

**Example request**

```bash
curl --request GET \
  --url 'https://api.lookio.app/v1/conversations' \
  --header 'Authorization: <api-key>'
```
