---
title: "List the answer logs"
description: "List every answer Lookio produced, from the app, the API, the MCP server and widgets, with the assistant, the cost and the result. No question or answer text. Free."
canonical: "https://lookio.app/docs/api/logs/list-log-answers"
updated: "2026-10-18"
---

# List the answer logs

Requires `usage:read`.

One line per answer, whatever asked: a member in the app's chat (`chat`), Lookio AI (`lookio_ai`), an API key through REST, the CLI or the SDK (`api`), the MCP server (`mcp`) or the visitor of a widget (`widget`). Results come latest first, and you page with `cursor`, an opaque string: pass `next_cursor` back unchanged. See [Pagination](/docs/api/conventions#pagination).

A line holds metadata only: the assistant, who asked, the query `mode`, the `model`, the tokens, the `credits` it cost, how long it took, and whether the resources held an answer (`answered` is `false` for a free no-answer). It never holds the question or the answer. When the exchange was kept, `conversation_id` leads to it: read it with [Retrieve a logged conversation](/docs/api/logs/get-log-conversation), which needs `assistants:write`. An answer sent with `store: false` has no conversation, and shows as `api`.

Narrow the list with `channel` (comma-separated), `assistant_id`, `widget_id`, `api_key_id`, `member_id`, `result` (`answered` or `no_answer`), `mode` and `from` and `to`. `result=no_answer` finds the questions your resources could not answer.

A member's own chats appear to admins only, as lines without content, and never to an API key. See [Logs](/docs/platform/logs). The figures over the same filters are in [Retrieve the figures of the answer logs](/docs/api/logs/get-log-answer-stats).

```http
GET https://api.lookio.app/v1/logs/answers
```

## Authorizations

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

## Query parameters

- `channel` (`string`, length: `≥ 1 chars`): Only the answers from these channels, comma-separated: `chat` (a member in the app's chat), `lookio_ai` (the in-app agent), `api` (an API key through REST, the CLI or the SDK), `mcp` (the MCP server), `widget` (a visitor of a widget). Default: all.
- `assistant_id` (`string`, pattern: `^ast_[abcdefghjkmnpqrstuvwxyz23456789]{12}$`): Only the answers of this assistant.
- `widget_id` (`string`, pattern: `^wdg_[abcdefghjkmnpqrstuvwxyz23456789]{12}$`): Only this widget's answers.
- `api_key_id` (`string`, length: `1–64 chars`): Only the answers asked with this API key.
- `member_id` (`string`, length: `1–64 chars`): Only this member's answers (admins).
- `mode` (`string`, length: `1–40 chars`): Only this query mode (`flash`, `fast`, `deep`…).
- `from` (`string`): Only answers since this ISO 8601 date or timestamp.
- `to` (`string`): Only answers until this ISO 8601 date or timestamp.
- `cursor` (`string`, length: `1–200 chars`): Pass `next_cursor` from the previous page, unchanged.
- `limit` (`integer`, range: `1–100`): Number of items to return. Values outside 1-100 are clamped, and the response reports the limit actually applied.

## Response

**200**: List the answer logs

- `data` (`object[]`, required)
- `data.id` (`string`, required): The answer's request id.
- `data.channel` (`enum<string>`, required, one of: `chat, lookio_ai, api, mcp, widget`): Where the question came from: `chat`, `lookio_ai`, `api`, `mcp` or `widget`. An API key's answer kept nowhere (`store: false`) shows as `api`.
- `data.assistant` (`object | null`, required): Null for Lookio AI, which answers about the workspace itself.
- `data.assistant.id` (`string`, required)
- `data.assistant.name` (`string,null`, required)
- `data.member` (`object | null`, required): The member who asked, for `chat` and `lookio_ai`.
- `data.member.id` (`string`, required)
- `data.member.name` (`string,null`, required)
- `data.api_key` (`object | null`, required): The API key that asked.
- `data.api_key.id` (`string`, required)
- `data.api_key.name` (`string,null`, required)
- `data.widget` (`object | null`, required): The widget whose visitor asked.
- `data.widget.id` (`string`, required)
- `data.widget.name` (`string`, required)
- `data.end_user` (`string,null`, required): The widget visitor's id, or the `end_user` your product sent.
- `data.mode` (`string`, required): The query mode, or `agent-<model>` for Lookio AI.
- `data.credits` (`integer`, required): What the answer cost.
- `data.duration_ms` (`integer | null`, required): How long it took, when the answer was kept.
- `data.conversation_id` (`string,null`, required): The conversation of a widget, API or MCP answer that was kept: read it with `GET /v1/logs/conversations/{conversation_id}`.
- `data.created_at` (`string`, required)
- `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": "<string>",
      "channel": "chat",
      "assistant": {
        "id": "<string>",
        "name": null
      },
      "member": {
        "id": "<string>",
        "name": null
      },
      "api_key": {
        "id": "<string>",
        "name": null
      },
      "widget": {
        "id": "<string>",
        "name": "<string>"
      },
      "end_user": null,
      "mode": "<string>",
      "credits": 123,
      "duration_ms": 123,
      "conversation_id": null,
      "created_at": "<string>"
    }
  ],
  "has_more": true,
  "next_cursor": null,
  "limit": 123,
  "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>"
}
```

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