Skip to main content
POST
Vault — Confirm Upload
Step 3 of the Vault upload flow. Registers the uploaded file in RMS and triggers async ingestion (parse → chunk → embed → index). The file must already be uploaded (via the presigned URL) before calling this. confirm is enqueue-and-return: it responds immediately with the rms_document_id. Processing runs in the background — poll GET /v2/vault/status with the returned rms_document_id until status is Synced. (Document status lives on /vault/status, not on this response.)
rms_document_id is populated for normal file uploads. It is null only when the upload deduplicates into an existing document (status: "already_exists") — in that case the document already exists and no new processing is enqueued.

content_type by file type

Pass the canonical MIME type for the file’s type. If the content_type does not match the file, the document is not processed — always use the exact value from the table below. The same content_type must be used at all three stepspresigned_url, the upload PUT (Content-Type header), and confirm. The upload URL is signed with it, so a mismatch is rejected with HTTP 403.
The server resolves the file type from the file_name extension first, falling back to content_type only when the name has no extension — so always send a file_name with the correct extension. Legacy Office (.xls/.xlsm/.xlsb/.doc/.ppt), audio, and HWP/HWPX are auto-converted to a renderable parse target during ingestion.

document_id vs rms_document_id

These are two different identifiers created at different steps. Mixing them up is the most common integration error.
For status polling and the analytics SSE, always use rms_document_id — never the presign document_id. When rms_document_id is null (dedup), there is no new id to poll; the existing document is already processed.

Authorizations

X-API-KEY
string
header
required

Body

application/json
document_id
string
required

From the presigned_url response.

file_key
string
required

From the presigned_url response.

file_name
string
required

Original filename including the extension. The server resolves the file type from this extension first, so it must be correct.

Example:

"Q4_report.pdf"

content_type
string
required

Canonical MIME type for the file. Must match the value sent to presigned_url and the upload PUT Content-Type header. If the content_type does not match the file, the document is not processed. See the content_type table on this page for the value per file type.

Example:

"application/pdf"

workspace
enum<string>
default:personal
Available options:
personal,
organization
organization_id
string<uuid>

Organization ID (optional).

user_id
string<uuid>

User id (optional).

user_email
string<email>

User email (optional).

user_name
string

User name (optional).

Response

Upload confirmed / registered

rms_document_id
string | null

RMS document id; null when the upload deduplicated into an existing document. Use it to poll GET /v2/vault/status.