---
title: "List documents"
method: GET
path: "/v1/projects/{project_id}/documents"
tags: ["Documents"]
---

# List documents

`GET /v1/projects/{project_id}/documents`

## Request

- Base URL: `https://api.naturali.ai`
- URL: `https://api.naturali.ai/v1/projects/{project_id}/documents`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.naturali.ai/authorize`, token URL `https://api.naturali.ai/token`, scopes: `mcp:access`)

Returns all documents in the project named in the path.

## Query parameters

- `path_prefix` string
- `include_withdrawn` boolean
- `related_to` string
- `tags` string[]
- `metadata` string
- `limit` integer
- `offset` integer

## Response `200`

List of documents

- object
  - `data` DocumentRecord[]
    - `id` string: Document ID
    - `file_id` string: Underlying file ID
    - `project_id` string: Project ID
    - `path` string, nullable: Logical path of the document within the project (e.g. /reports/q1.txt)
    - `filename` string: Original filename
    - `content_type` string: Media type of the source file the document was ingested from. Absent when the underlying file is gone.
    - `size` integer: File size in bytes
    - `status` 'pending' | 'processing' | 'ready' | 'failed' | 'withdrawn': Ingestion lifecycle state. `pending` — enqueued; `processing` — chunks being extracted and embedded; `ready` — fully indexed; `failed` — processing error (see the `error` field on `GET /documents/{id}/status`); `withdrawn` — taken out of listings and search, with its chunks dropped, and restorable from an earlier version.
    - `version` integer: The document's content version, starting at 1. Every write that changes the content or its annotations archives the state it replaced and increments this.
    - `content` string, nullable: Text content (only present on getDocument, and only when status is ready)
    - `chunk_strategy` 'page' | 'whole' | 'size': The chunk strategy the document was last (re-)ingested with. Absent when the default (`whole`) was used — the mapper omits the key rather than sending `null`.
    - `chunk_size` integer: Window size in characters used when `chunk_strategy=size`. Absent otherwise.
    - `chunk_overlap` integer: Overlap in characters between consecutive windows used when `chunk_strategy=size`. Absent otherwise.
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `total` integer
  - `limit` integer
  - `offset` integer

## Other responses

- `401`: Unauthorized
- `403`: Forbidden

---

[API](https://skmtc.dev/naturali/apis/naturali-ai-api.md) · [All operations](https://skmtc.dev/naturali/apis/naturali-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/naturali/apis/naturali-ai-api/revisions/e4905b78f422?raw)
