---
title: "List the indexing logs"
description: "List every indexing Lookio ran: files read, pages fetched, texts added and their updates, with the status, what reading found and the reason of a failure. Free."
canonical: "https://lookio.app/docs/api/logs/list-log-indexing"
updated: "2026-10-18"
---

# List the indexing logs

Requires `resources:read`.

One line per indexing: a file read, a web page or a site's page fetched, a text added, and each update of them. 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 carries the `status`, the `resource` it belongs to, what reading found (`page_count`, `word_count`, `chunk_count`, `warnings`), how long it took, and the `error` of a `failed` one. Statuses are `queued`, `processing`, `indexed` (searchable now), `replaced` (indexed, then replaced by a newer indexing), `unchanged` (re-read, same text), `skipped` (a newer indexing finished first) and `failed`.

By default the list leaves out `unchanged` and `skipped`, so a site's weekly sync shows only what changed. Add `include_unchanged=true` to see every page it re-read. Narrow the list with `resource_id` (for a site, all its pages), `status` (comma-separated), `source_type` (`file`, `url`, `site` or `text`), `q` (words in the title, the file name or the page address) and `from` and `to`. `status=failed` is the quickest way to find what to retry.

See [Logs](/docs/platform/logs). The figures over the same filters are in [Retrieve the figures of the indexing logs](/docs/api/logs/get-log-indexing-stats).

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

## Authorizations

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

## Query parameters

- `resource_id` (`string`, pattern: `^res_[abcdefghjkmnpqrstuvwxyz23456789]{12}$`): Only this resource's indexings (a site: all its pages).
- `status` (`string`, length: `≥ 1 chars`): Only these statuses, comma-separated: `queued`, `processing`, `indexed` (searchable now), `replaced` (indexed, then replaced by a newer indexing), `unchanged` (re-read, same text), `skipped` (a newer indexing finished first), `failed`. Default: all but `unchanged` and `skipped`.
- `source_type` (`enum<string>`, one of: `file, url, site, text`): Only resources of this kind.
- `q` (`string`, length: `1–200 chars`): Words in the resource's title, the file's name, or the page's address or title.
- `include_unchanged` (`boolean | enum<string>`): Also list the pages a sync re-read and found unchanged. Default false.
- `from` (`string`): Only indexings started since this ISO 8601 date or timestamp.
- `to` (`string`): Only indexings started 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 indexing logs

- `data` (`object[]`, required)
- `data.id` (`string`, required): The indexing's id (a version of the document).
- `data.status` (`enum<string>`, required, one of: `queued, processing, indexed, replaced, unchanged, skipped, failed`)
- `data.resource` (`object`, required)
- `data.resource.id` (`string`, required)
- `data.resource.title` (`string`, required)
- `data.resource.source_type` (`string`, required)
- `data.name` (`string`, required): What was read: a site page's title or address, a file's name, or the resource's title.
- `data.page_url` (`string,null`, required): A site page's address.
- `data.file` (`object | null`, required)
- `data.file.name` (`string,null`, required)
- `data.file.media_type` (`string,null`, required)
- `data.file.byte_size` (`integer | null`, required)
- `data.reader` (`string,null`, required): How the content was read (the parser or OCR used).
- `data.page_count` (`integer | null`, required)
- `data.word_count` (`integer | null`, required)
- `data.chunk_count` (`integer`, required): Passages indexed.
- `data.warnings` (`string[]`, required): What reading noticed, such as pages without text.
- `data.error` (`string,null`, required): Why it failed, for `failed`.
- `data.started_at` (`string`, required)
- `data.finished_at` (`string,null`, required)
- `data.duration_ms` (`integer | null`, 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>",
      "status": "queued",
      "resource": {
        "id": "<string>",
        "title": "<string>",
        "source_type": "<string>"
      },
      "name": "<string>",
      "page_url": null,
      "file": {
        "name": null,
        "media_type": null,
        "byte_size": 123
      },
      "reader": null,
      "page_count": 123,
      "word_count": 123,
      "chunk_count": 123,
      "warnings": [
        "<string>"
      ],
      "error": null,
      "started_at": "<string>",
      "finished_at": null,
      "duration_ms": 123
    }
  ],
  "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/indexing' \
  --header 'Authorization: <api-key>'
```
