---
title: "Get a conversation"
description: "Retrieve one of your conversations with its messages, citations, answer ids and thumbs: a person's chat, or a conversation your API key started."
canonical: "https://lookio.app/docs/api/conversations/get-conversation"
updated: "2026-10-17"
---

# Get a conversation

Requires `assistants:read`.

A person's chat is personal: you read your own, and someone else's answers `resource_not_found`, admins included. An API key reads the conversations it started. Send `end_user` to make sure it is that person's: a conversation of another end user answers `resource_not_found`.

`assistant_deleted` is `true` when the assistant is gone: the conversation stays readable but cannot be continued. Each answer carries the citations it relied on at the time.

Every message has an `id`. An answer's id is what [Send feedback on an answer](/docs/api/conversations/submit-answer-feedback) takes, and its `rating` and `rating_comment` show the thumb already sent (always `null` in a person's chat, which takes none yet).

Find a conversation's id with [List conversations](/docs/api/conversations/list-conversations).

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

## Authorizations

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

## Path parameters

- `conversation_id` (`string`, required, pattern: `^cnv_[abcdefghjkmnpqrstuvwxyz23456789]{12}$`)

## Query parameters

- `end_user` (`string`, pattern: `^[\w.@:+\-]{1,200}$`): API keys only: the `end_user` of the conversation. When given, a conversation of another end user answers not found.

## Response

**200**: Retrieve a conversation

- `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.
- `data.messages` (`object[]`, required)
- `data.messages.id` (`string`, required): The message's id. An answer's id is what the feedback endpoint takes.
- `data.messages.role` (`enum<string>`, required, one of: `user, assistant`)
- `data.messages.content` (`string`, required)
- `data.messages.citations` (`object[]`, required)
- `data.messages.citations.resource_id` (`string`, required): The cited resource. Empty for a public assistant of another workspace: its resources stay its own.
- `data.messages.citations.title` (`string`, required)
- `data.messages.citations.text` (`string`, required): The passage the answer relies on.
- `data.messages.citations.n` (`integer`): The number the answer cites it by, as [1].
- `data.messages.citations.section` (`string[]`)
- `data.messages.citations.page` (`integer`)
- `data.messages.citations.url` (`string`)
- `data.messages.citations.source` (`string`): The cited resource's source, when it has one.
- `data.messages.rating` (`enum<string> | null`, required): The thumb sent for this answer. Always null in a personal chat (no thumbs there yet).
- `data.messages.rating_comment` (`string,null`, required): The comment sent with the thumb.
- `data.messages.created_at` (`string`, required)
- `request_id` (`string`, required)

```json
{
  "data": {
    "id": "<string>",
    "assistant_id": "<string>",
    "assistant_deleted": true,
    "title": "<string>",
    "channel": "personal",
    "end_user": null,
    "message_count": 123,
    "created_at": "<string>",
    "updated_at": "<string>",
    "messages": [
      {
        "id": "<string>",
        "role": "user",
        "content": "<string>",
        "citations": [
          {
            "resource_id": "<string>",
            "title": "<string>",
            "text": "<string>",
            "n": 123,
            "section": [
              "<string>"
            ],
            "page": 123,
            "url": "<string>",
            "source": "<string>"
          }
        ],
        "rating": "up",
        "rating_comment": null,
        "created_at": "<string>"
      }
    ]
  },
  "request_id": "<string>"
}
```

**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>"
}
```

**404**: Possible codes: resource_not_found

- `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/<conversation_id>' \
  --header 'Authorization: <api-key>'
```
