List your vaults
See all vaults in your organization.Endpoint
Response
Get vault details
Get storage usage, document count, and indexing status for a specific vault.Endpoint
Move vault to a group
Assign a vault to a group, move it between groups, or remove it from a group.Endpoint
API keys scoped to specific groups cannot remove a vault from its group (
groupId: null returns 403). See Groups → Scoped API keys for details.List documents in a vault
See all files you’ve uploaded.Endpoint
Response
Download a file
Get the original file you uploaded.Endpoint
Get extracted text
Get the OCR’d or transcribed text from a document.Endpoint
Get text by page
Get page-level text from a processed PDF or plain text object. Usestart and end to request an inclusive 1-indexed page range, up to 500 pages per request.
Endpoint
cURL
Response
metadata.source is ocr for PDF OCR text and txt for plain text fallback.
Update a document
Update a document’s filename, folder path, or custom metadata. Use this endpoint to rename files, organize them into virtual folders, or attach custom key-value metadata for filtering and categorization.Endpoint
Update custom metadata
Attach custom key-value pairs to documents for filtering, categorization, or integration with your systems. Metadata is merged with existing values—only the fields you specify are updated.Metadata is merged, not replaced. When you update metadata, your new fields are merged with existing metadata. To remove a field, set it to
null.Rename or move a document
Request body
Response
Virtual folders. The
path field creates a virtual folder hierarchy stored in metadata. Use this to organize documents without affecting their storage location. Build folder trees by grouping objects with the same path prefix.Create a merged PDF
POST /vault/:vaultId/objects/merge creates a new PDF from one or more ordered
PDF objects. It returns 202 immediately; listen for
vault.object.merge.completed or vault.object.merge.failed. Source objects
are unchanged.
cURL
202 Response
sourceRendition to original to merge stored PDFs
without generating OCR renditions; the output is searchable only if those
originals already contain text. Requests support 1–20 unique sources, up to 5,000
pages and 1 GiB total. Bates numbering is continuous across every output page.
Reusing an idempotency key with different inputs returns 409.
Append PDF objects onto an existing object
Append PDF vault objects to the end of an existing PDF object. Sync mode accepts up to 20 objects per request; async mode accepts up to 1,000. The target is updated in place:sizeBytes, pageCount, and checksum change, while id, filename,
and ingestionStatus stay the same. Appended pages are not searchable.
The default sync mode waits for the updated object. Use async for large appendices so the
request returns immediately and completion arrives through vault.object.append.completed or
vault.object.append.failed.
Async acceptance returns 202 after the operation is durably saved, before worker dispatch.
The operation has a 15-minute deadline, including dispatch and finalization. Work that cannot
finish in that budget fails with APPEND_WORKER_TIMEOUT. Webhook delivery is retried separately
if your endpoint is unavailable. Register an active endpoint through POST /webhooks/v1/endpoints
with a vault.object.append.* filter before submitting the append.
On async completion, newly generated download URLs serve the updated PDF. Download URLs
issued before completion continue to refer to the previous PDF version until they expire.
Endpoint
cURL
202 Response
Request body
Async mode requires an
Idempotency-Key header. Retrying the same key and inputs returns the
stored operation; reusing the key with different inputs returns 409. Only one asynchronous
append can run against a target at a time, and non-forced deletion returns 409 while it runs.
All inputs must be PDFs. The append operation processes source objects sequentially to reduce
peak memory use, but very large merges can still fail if the worker runs out of memory while
serializing the merged PDF. Sync mode also keeps the client request open for the full operation,
so prefer async mode when the source set may take several minutes.
When rewriteLinks is true, a link is rewritten only if it contains exactly one
appendObjectIds value as a full decoded query parameter value or full decoded path segment,
plus a valid page or pageNumber. Substring matches are ignored.
Delete a document
Remove a single file and all its search data.Endpoint
Force delete stuck documents
If a document gets stuck inprocessing status (e.g., due to an OCR timeout), you can force delete it:
When to use force delete. Use
force=true only when a document is stuck in “processing” status and won’t complete. This can happen in rare cases like OCR timeouts. The force option bypasses the safety check that prevents deletion during active ingestion.Delete a vault
Remove an entire vault and everything in it.Endpoint

