---
title: "List Files in a Vault Project"
method: GET
path: "/api/v1/vault/projects/{project_id}/files"
tags: ["Vault"]
---

# List Files in a Vault Project

`GET /api/v1/vault/projects/{project_id}/files`

Lists files within a single vault project, with filtering and sorting supported.

**Pagination.** Omit `cursor` on the first request. Subsequent requests should pass back the `next_cursor` value returned in the previous response. Continue until `has_more` is `false`.

## Path parameters

- `project_id` string, uuid, required

## Query parameters

- `cursor` string
- `limit` integer
- `name` string
- `content_type` string[]
- `processing_status` string[]
- `uploaded_after` integer
- `uploaded_before` integer
- `sort_by` 'name' | 'uploaded_at' | 'size'
- `sort_order` 'asc' | 'desc'

## Response `200`

Successfully retrieved project files

- object
  - `response` object
    - `content` object
      - `files` ProjectFile[] — Files matching the filter and sort criteria, ordered as requested.
        - `id` string, uuid, required — The unique identifier of the file.
        - `name` string, required — The display name of the file.
        - `content_type` string, nullable — The MIME type of the file.
        - `processing_status` 'UPLOADED' | 'PROCESSING' | 'READY_TO_QUERY' | 'READY_TO_REVIEW' | 'RECOVERABLE_FAILURE' | 'UNRECOVERABLE_FAILURE', required — The current processing status of the file. Returned as an uppercase identifier.
        - `size` integer, required — Size of the file in bytes.
        - `uploaded_at` integer, required — Upload time as a UTC Unix epoch timestamp in seconds.
      - `pagination` ProjectFilesPagination — Cursor-pagination metadata for the `List Files in a Vault Project` response.
        - `page_size` integer, required — Number of files returned in this page. Equals the request's `limit` except on the final page.
        - `has_more` boolean, required — `true` if at least one more page is available. When `false`, the walk is complete and `next_cursor` is `null`.
        - `next_cursor` string, nullable — Opaque cursor to pass as the `cursor` query parameter on the next request. `null` when `has_more` is `false`. Do not parse or construct cursors client-side.
        - `total_count` integer, required — Total number of files in the project matching the filter criteria (across all pages).

## Other responses

- `400` — Bad request - Invalid query parameters (e.g. `limit` out of range, malformed `cursor`, unrecognized `sort_by`, `uploaded_after >= uploaded_before`, or an internal-only `processing_status` value)
- `401` — Unauthorized - Invalid or missing API token
- `403` — Forbidden - User does not have access to the Vault API or to the requested project
- `404` — Project not found
- `429` — Rate limit exceeded
- `500` — Internal server error

---

[API](https://skmtc.dev/harvey/apis/harvey-client-matter-api.md) · [All operations](https://skmtc.dev/harvey/apis/harvey-client-matter-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/harvey/harvey-client-matter-api/revisions/4a9e0925d49e/schema)
