---
title: "Logs"
description: "The four logs of a workspace, conversations, answers, indexing and activity, what each shows, who can read it, how long it is kept and how to filter it in the app, the API, the CLI, the SDK and MCP."
canonical: "https://lookio.app/docs/guides/logs"
updated: "2026-11-08"
---

# Logs

The workspace has four logs. Each one answers one question. Reading them is free. They are on the **Logs** page of the app, in the API under `/v1/logs`, in `lookio logs`, in the SDK as `lookio.logs`, and in MCP tools.

| Log                             | Answers the question                                                      | Needs                                                                                                                      | Kept                                                                                                                        |
| ------------------------------- | ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| [Conversations](#conversations) | What did people ask, yourself included, and where did the assistant fail? | Your own chats: nothing. Widget, API key and MCP conversations: the right to edit assistants (API key: `assistants:write`) | Your chats: until you delete them. The others: readable 7 days on Free, 90 on Starter, 1 year on Pro, from the last message |
| [Answers](#answers)             | Which answers did Lookio give, through what, and what did they cost?      | `usage:read`                                                                                                               | With the usage history                                                                                                      |
| [Indexing](#indexing)           | Was my file, page or site read, and why did it fail?                      | `resources:read`                                                                                                           | With the resources                                                                                                          |
| [Activity](#activity)           | Who changed what, and through which door?                                 | Admins (in the app, or a personal connection with `admin`)                                                                 | A year                                                                                                                      |

## In the app

```mermaid title="Four logs, four questions"
flowchart LR
  L["Logs"] --> C["Conversations<br/>What did people ask?"]
  L --> A["Answers<br/>What did each answer cost?"]
  L --> I["Indexing<br/>Was my content read?"]
  L --> V["Activity<br/>Who changed what?"]
```

The **Logs** page has four tabs, each with filters. The page address keeps the filters, so you can send the link of a filtered view. Each assistant, widget, resource and API key has a **See all logs** link that opens the logs filtered on it.

## Conversations

The conversation log shows what people asked: your chats in the app, the visitors of your [widgets](/docs/guides/widget/overview), and the users of your product through an API key or the MCP server. Use it to see where the assistant falls short.

Your own chats (channel `chat`) are for you only. Other members, admins and API keys never see them. The API and the MCP server never list them. The other conversations are for the people who can edit assistants.

![The Conversations tab of Logs: counters for conversations, people, questions, thumbs and credits, filters, and one row per conversation with its channel and feedback](/docs/images/app/logs-conversations.webp)

_Conversations: the questions people asked, through which channel, with their thumbs._

| In the log                                                                       | Not in the log                                                                                                |
| -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| Your own chats from the app (`chat`), for you only.                              | Another member's chats, also for admins.                                                                      |
| A visitor's conversation through a widget (`widget`).                            | A question sent with `store: false`.                                                                          |
| A conversation started with an API key through REST, the CLI or the SDK (`api`). | A deleted conversation. The messages of a conversation past your plan's period: it stays in the list, locked. |
| A conversation started with an API key through the MCP server (`mcp`).           | The app's own widget previews.                                                                                |

For how long a conversation stays readable, see [Conversations and end users](/docs/guides/conversations-and-end-users#how-long-it-is-kept).

Each entry shows the `channel`, the `widget` or `api_key`, the `end_user` (a widget visitor's random id, or the id your product sent), the `assistant`, the number of messages, the credits and the thumbs. Open a conversation to read each question and answer, with its sources, mode, cost, duration, thumb and comment.

| Filter         | Keeps                                                                                                 |
| -------------- | ----------------------------------------------------------------------------------------------------- |
| `channel`      | Only these channels, comma-separated: `widget`, `api`, `mcp` (and `chat` in the app, your own chats). |
| `widget_id`    | One widget's visitors.                                                                                |
| `api_key_id`   | Conversations asked with one API key.                                                                 |
| `assistant_id` | Conversations with one assistant.                                                                     |
| `rating`       | `down` (at least one thumbs down), `up`, `rated` (any thumb) or `unrated`.                            |
| `end_user`     | One person.                                                                                           |
| `q`            | Conversations with these words in the title or in any question or answer.                             |
| `from`, `to`   | `from`: activity since this date. `to`: started before this date.                                     |

The figures show conversations, questions, distinct people, credits, thumbs up and thumbs down, and conversations per channel. A conversation without an `end_user` counts as one person.

## Answers

One line for each answer, from every channel. This log explains your credits.

| Channel     | Where the question came from                                                                    |
| ----------- | ----------------------------------------------------------------------------------------------- |
| `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. An answer sent with `store: false` shows here too. |
| `mcp`       | The MCP server.                                                                                 |
| `widget`    | A visitor of a widget.                                                                          |

![The Answers tab of Logs: one row per answer with its channel, assistant, mode and credits](/docs/images/app/logs-answers.webp)

_Answers: every answer, its channel, its mode and its price._

Each line holds **metadata only**: the assistant, who asked, the mode, the credits, the duration, and if the resources held an answer. It never holds the question or the answer. When the conversation was kept, the line has its `conversation_id`.

| Filter                                    | Keeps                                                                            |
| ----------------------------------------- | -------------------------------------------------------------------------------- |
| `channel`                                 | Only these channels, comma-separated.                                            |
| `assistant_id`, `widget_id`, `api_key_id` | One assistant, one widget or one API key.                                        |
| `member_id`                               | One member's answers (admins).                                                   |
| `result`                                  | `answered`, or `no_answer` to find the questions the resources could not answer. |
| `mode`                                    | One query mode.                                                                  |
| `from`, `to`                              | A period.                                                                        |

The figures are answers (answered and not), credits, the average time, and answers per channel.

Who reads what:

- An admin reads every line.
- A member reads their own answers, and the widget and API key answers of the assistants they edit.
- An API key reads the widget and API lines of its assistants.
- A member's own chats show to others as lines only, and never to API keys.

## Indexing

One line for each indexing task: a file read, a page fetched, a text added, an update. Use it to find why a document is not searchable yet, or why it failed.

| Status                 | Meaning                                                          |
| ---------------------- | ---------------------------------------------------------------- |
| `queued`, `processing` | Not finished.                                                    |
| `indexed`              | Searchable now.                                                  |
| `replaced`             | Indexed, then replaced by a newer indexing of the same document. |
| `unchanged`            | A sync read it again. The text did not change.                   |
| `skipped`              | A newer indexing of the same document finished first.            |
| `failed`               | Lookio could not read it. The line says why.                     |

![The Indexing tab of Logs: one row per file, page or site read, with its status and the reason of a failure](/docs/images/app/logs-indexing.webp)

_Indexing: every read of a file, a page or a site, failures first._

Each line shows the resource, what Lookio read, the reader, the pages, words and passages, the warnings (such as pages without text), the error, and the duration. By default, the list leaves out `unchanged` and `skipped` lines.

| Filter              | Keeps                                                                           |
| ------------------- | ------------------------------------------------------------------------------- |
| `resource_id`       | One resource's indexings. For a site, all its pages.                            |
| `status`            | These statuses, comma-separated. `failed` finds what to retry.                  |
| `source_type`       | `file`, `url`, `site` or `text`.                                                |
| `q`                 | Words in the resource's title, the file's name, or the page's address or title. |
| `include_unchanged` | Also the pages a sync re-read and found unchanged.                              |
| `from`, `to`        | Indexings started in a period.                                                  |

The figures show the tasks (total, indexed, failed, in progress, unchanged) and the words indexed.

## Activity

Who changed what in the workspace: resources, site rules and syncs, assistants, widgets, tags, and members' access.

Each line shows the actor (a member, an API key, or Lookio for a scheduled sync), the door, the item and its name at the time, and the fields that changed. It never holds content. You see that someone edited an assistant's context, not the new text.

![The Activity tab of Logs: who changed what, from the app, the API, the CLI or MCP](/docs/images/app/logs-activity.webp)

_Activity: who changed what, and through which door._

| Door (`origin`) | Meaning                                                     |
| --------------- | ----------------------------------------------------------- |
| `app`           | Someone in the web app.                                     |
| `api`           | An API key or a connection through the REST API or the SDK. |
| `cli`           | The `lookio` command.                                       |
| `mcp`           | An MCP client.                                              |
| `agent`         | Lookio AI, the in-app agent.                                |
| `system`        | Lookio itself, such as a scheduled sync.                    |

| Filter                     | Keeps                                                                                       |
| -------------------------- | ------------------------------------------------------------------------------------------- |
| `actor_id`                 | What one member or API key did.                                                             |
| `origin`                   | Only these doors, comma-separated.                                                          |
| `target_type`, `target_id` | One kind of thing (`resource`, `assistant`, `widget`, `tag`, `member`), or one thing of it. |
| `action`                   | An exact action such as `assistant.updated`, or every action on a kind such as `assistant`. |
| `q`                        | Words in the name of what changed.                                                          |
| `from`, `to`               | A period.                                                                                   |

Only admins read the activity: in the app, or through a personal connection with the `admin` scope (the CLI or an MCP client). An API key never can.

## Read the logs

```bash title="curl"
# Where did the assistant fail this month?
curl "https://api.lookio.app/v1/logs/conversations?rating=down&from=2026-10-01" \
  -H "Authorization: Bearer $LOOKIO_API_KEY"

# One conversation in full
curl https://api.lookio.app/v1/logs/conversations/CONVERSATION_ID \
  -H "Authorization: Bearer $LOOKIO_API_KEY"

# The figures of the conversations
curl "https://api.lookio.app/v1/logs/conversations/stats?channel=widget,api" \
  -H "Authorization: Bearer $LOOKIO_API_KEY"

# Questions the resources could not answer
curl "https://api.lookio.app/v1/logs/answers?result=no_answer" \
  -H "Authorization: Bearer $LOOKIO_API_KEY"

# Indexings that failed
curl "https://api.lookio.app/v1/logs/indexing?status=failed" \
  -H "Authorization: Bearer $LOOKIO_API_KEY"

# Who changed assistants through the CLI or MCP
curl "https://api.lookio.app/v1/logs/activity?target_type=assistant&origin=cli,mcp" \
  -H "Authorization: Bearer $LOOKIO_API_KEY"
```

```ts title="SDK"
for await (const chat of lookio.logs.conversations.iterate({ rating: "down" })) {
  console.log(chat.channel, chat.end_user, chat.title);
}
const full = await lookio.logs.conversations.get("CONVERSATION_ID");
const stats = await lookio.logs.conversations.stats({ from: "2026-10-01" });

const unanswered = await lookio.logs.answers.list({ result: "no_answer" });
const failed = await lookio.logs.indexing.list({ status: "failed" });
const changes = await lookio.logs.activity.list({ target_type: "assistant", origin: "cli,mcp" });
```

```bash title="CLI"
lookio logs conversations --rating down --from 2026-10-01
lookio logs conversations --stats --channel widget,api
lookio logs get CONVERSATION_ID
lookio logs answers --result no_answer
lookio logs indexing --status failed
lookio logs activity --target-type assistant --origin cli,mcp
```

The lists of answers, indexing and activity use an opaque `cursor`. Send the `next_cursor` of a page back as it is. The SDK iterators do it for you.

MCP tools: `list_conversation_logs`, `get_conversation_log`, `get_conversation_log_stats`, `list_answer_logs`, `get_answer_log_stats`, `list_indexing_logs`, `get_indexing_log_stats` and `list_activity_log`. For a person's own chats, an agent uses `list_conversations`. See [Standard tools](/docs/developers/mcp/standard-tools#logs) and the [Logs API reference](/docs/api/logs/list-log-conversations).

## Who can read the logs

- **Conversations.** A person needs the right to edit assistants. They see only the assistants they may use. An API key needs `assistants:write`, and sees the conversations of its assistants, also those of other keys. The **Ask questions** preset does not have this scope.
- **Answers.** The `usage:read` scope. See [Answers](#answers) for what each one sees.
- **Indexing.** The `resources:read` scope.
- **Activity.** Admins only. Never an API key.

## Privacy

- What people type can be personal. Treat the conversations like a support inbox. Give access only to the people who need it.
- The answer, indexing and activity logs hold no question, answer or content.
- Send an opaque `end_user`, not an email address.
- Send `store: false` when Lookio must keep nothing.
- [Delete a conversation](/docs/api/conversations/delete-conversation) to remove it from the log at once. Deleting a widget deletes its visitors' conversations.
