> ## Documentation Index
> Fetch the complete documentation index at: https://developers.harvey.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# List Files in a Vault Project

> 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`.

### Permissions

Requires `Vault API` permission and access to the specified vault project.


## OpenAPI

````yaml /vault_api.json get /api/v1/vault/projects/{project_id}/files
openapi: 3.0.1
info:
  title: Vault - Upload Documents
  description: >-
    The Vault Upload Documents API enables users to programmatically upload and
    manage documents within Vault projects. This API allows organizations to
    maintain projects with their own internal files for their users to use
    within the Harvey app.
  version: 1.0.0
  contact:
    email: support@harvey.ai
servers:
  - url: https://api.harvey.ai
    description: Harvey API server
security: []
paths:
  /api/v1/vault/projects/{project_id}/files:
    get:
      tags:
        - Vault
      summary: List Files in a Vault Project
      description: >-
        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`.
      operationId: listProjectFiles
      parameters:
        - name: project_id
          in: path
          required: true
          description: The unique identifier of the vault project
          schema:
            type: string
            format: uuid
        - name: cursor
          in: query
          description: >-
            Opaque pagination cursor returned in the previous response's
            `next_cursor` field. Omit on the first request.
          schema:
            type: string
            maxLength: 2048
        - name: limit
          in: query
          description: Maximum number of files to return per page.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
        - name: name
          in: query
          description: >-
            Case-insensitive substring match on file name. `%` and `_` are
            treated as literals, not SQL `LIKE` wildcards.
          schema:
            type: string
            maxLength: 256
          example: contract
        - name: content_type
          in: query
          description: >-
            Filter by MIME type. Repeat the query parameter to match any of
            multiple values (e.g.
            `?content_type=application/pdf&content_type=text/plain`). Up to 20
            values, each at most 256 characters.
          schema:
            type: array
            items:
              type: string
              maxLength: 256
            maxItems: 20
          explode: true
          style: form
          example:
            - application/pdf
        - name: processing_status
          in: query
          description: >-
            Filter by processing status. Repeat the query parameter to match any
            of multiple values. Accepted case-insensitively (`READY_TO_QUERY`
            and `ready_to_query` are equivalent). Internal-only statuses are
            rejected. Up to 20 values.
          schema:
            type: array
            items:
              type: string
              enum:
                - UPLOADED
                - PROCESSING
                - READY_TO_QUERY
                - READY_TO_REVIEW
                - RECOVERABLE_FAILURE
                - UNRECOVERABLE_FAILURE
            maxItems: 20
          explode: true
          style: form
        - name: uploaded_after
          in: query
          description: >-
            Inclusive lower bound on the file's upload time, as a UTC Unix epoch
            timestamp in seconds. Must be strictly less than `uploaded_before`
            when both are provided.
          schema:
            type: integer
            format: int64
          example: 1767225600
        - name: uploaded_before
          in: query
          description: >-
            Inclusive upper bound on the file's upload time, as a UTC Unix epoch
            timestamp in seconds.
          schema:
            type: integer
            format: int64
          example: 1775347200
        - name: sort_by
          in: query
          description: Field to sort the results by. Accepted case-insensitively.
          schema:
            type: string
            enum:
              - name
              - uploaded_at
              - size
            default: uploaded_at
        - name: sort_order
          in: query
          description: >-
            Sort direction. Accepted case-insensitively. Results include the
            file `id` as a deterministic tiebreaker so cursor-paginated ordering
            is stable across pages.
          schema:
            type: string
            enum:
              - asc
              - desc
            default: desc
      responses:
        '200':
          description: Successfully retrieved project files
          content:
            application/json:
              schema:
                type: object
                properties:
                  response:
                    type: object
                    properties:
                      content:
                        type: object
                        properties:
                          files:
                            type: array
                            items:
                              $ref: '#/components/schemas/ProjectFile'
                            description: >-
                              Files matching the filter and sort criteria,
                              ordered as requested.
                          pagination:
                            $ref: '#/components/schemas/ProjectFilesPagination'
              examples:
                listProjectFiles:
                  summary: Example response for listing files in a project
                  value:
                    response:
                      content:
                        files:
                          - id: 018e38dc-8726-7bc2-af5d-bdd5d04c84ec
                            name: engagement_letter.pdf
                            content_type: application/pdf
                            processing_status: READY_TO_QUERY
                            size: 184320
                            uploaded_at: 1767225600
                          - id: 0199c5c1-50d9-7d60-93aa-cd65c3b7d5a9
                            name: merger_agreement.docx
                            content_type: >-
                              application/vnd.openxmlformats-officedocument.wordprocessingml.document
                            processing_status: PROCESSING
                            size: 521447
                            uploaded_at: 1767139200
                        pagination:
                          page_size: 20
                          has_more: true
                          next_cursor: >-
                            eyJsYXN0X2ZpbGVfaWQiOiAiMDE5OWM1YzEtNTBkOS03ZDYwLTkzYWEtY2Q2NWMzYjdkNWE5In0=
                          total_count: 137
        '400':
          description: >-
            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)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Invalid query parameters
                  details:
                    type: array
                    description: Per-field validation errors
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                          description: Name of the query parameter that failed validation
                          example: processing_status
                        message:
                          type: string
                          description: Human-readable description of the validation failure
                          example: >-
                            Value error, processing_status must be one of:
                            ['PROCESSING', 'READY_TO_QUERY', 'READY_TO_REVIEW',
                            'RECOVERABLE_FAILURE', 'UNRECOVERABLE_FAILURE',
                            'UPLOADED']
        '401':
          description: Unauthorized - Invalid or missing API token
        '403':
          description: >-
            Forbidden - User does not have access to the Vault API or to the
            requested project
        '404':
          description: Project not found
        '429':
          description: Rate limit exceeded
        '500':
          description: Internal server error
      security:
        - bearerAuth: []
components:
  schemas:
    ProjectFile:
      type: object
      description: >-
        A single file as returned by `List Files in a Vault Project`. The shape
        is intentionally scoped to the public-API surface and does not expose
        internal File model fields.
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the file.
          example: 018e38dc-8726-7bc2-af5d-bdd5d04c84ec
        name:
          type: string
          description: The display name of the file.
          example: engagement_letter.pdf
        content_type:
          type: string
          nullable: true
          description: The MIME type of the file.
          example: application/pdf
        processing_status:
          type: string
          description: >-
            The current processing status of the file. Returned as an uppercase
            identifier.
          enum:
            - UPLOADED
            - PROCESSING
            - READY_TO_QUERY
            - READY_TO_REVIEW
            - RECOVERABLE_FAILURE
            - UNRECOVERABLE_FAILURE
          example: READY_TO_QUERY
        size:
          type: integer
          description: Size of the file in bytes.
          example: 184320
        uploaded_at:
          type: integer
          format: int64
          description: Upload time as a UTC Unix epoch timestamp in seconds.
          example: 1767225600
      required:
        - id
        - name
        - processing_status
        - size
        - uploaded_at
    ProjectFilesPagination:
      type: object
      description: >-
        Cursor-pagination metadata for the `List Files in a Vault Project`
        response.
      properties:
        page_size:
          type: integer
          description: >-
            Number of files returned in this page. Equals the request's `limit`
            except on the final page.
          example: 20
        has_more:
          type: boolean
          description: >-
            `true` if at least one more page is available. When `false`, the
            walk is complete and `next_cursor` is `null`.
          example: true
        next_cursor:
          type: string
          nullable: true
          description: >-
            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.
          example: >-
            eyJsYXN0X2ZpbGVfaWQiOiAiMDE5OWM1YzEtNTBkOS03ZDYwLTkzYWEtY2Q2NWMzYjdkNWE5In0=
        total_count:
          type: integer
          description: >-
            Total number of files in the project matching the filter criteria
            (across all pages).
          example: 137
      required:
        - page_size
        - has_more
        - total_count
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````