---
title: "Upload Library Documents"
method: POST
path: "/library/documents/upload-batch"
tags: ["Documents"]
---

# Upload Library Documents

`POST /library/documents/upload-batch`

## Request

- Base URL: `https://be.graph8.com/api/v1`
- URL: `https://be.graph8.com/api/v1/library/documents/upload-batch`
- Auth: HTTP bearer

Upload SEVERAL files in one request.

PARTIAL SUCCESS IS THE NORMAL OUTCOME. Each file is processed on its own
session, so one rejected file does not roll the others back and the status
stays 201. Read the per-file result in the body, not the HTTP status.

Named `upload-batch` rather than the app's `upload-multi`: the same
operation, spelled the way the rest of this contract spells a bulk verb.

## Headers

- `Authorization` string, nullable
- `X-Target-Org-Id` string, nullable

## Response `201`

Successful Response

- ApiResponseDocumentListPayload
  - `data` DocumentListPayload, required: An open envelope for a LIST result, so a bare list keeps its shape. `items` is always present and always the list, whichever key the app used for it - so a caller can page one way rather than learning six key names.
    - `items` unknown[]
      - unknown
  - `pagination` PaginationMeta
    - `page` integer, required: Current page number (1-indexed)
    - `limit` integer, required: Items per page
    - `total` integer, required: Total number of items
    - `has_next` boolean, required: Whether there are more pages
    - `next_cursor` string, nullable: Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers.
    - `total_available` integer, nullable: Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search.
    - `total_is_lower_bound` boolean, nullable: Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search.
    - `notes` string[], nullable: Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/graph8/apis/graph8-developer-api.md) · [All operations](https://skmtc.dev/graph8/apis/graph8-developer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/graph8/apis/graph8-developer-api/revisions/2e7cfa0ca921?raw)
