Documents

Confirm an upload and start processing

Hands the uploaded file back to InkSeal. Call this once the PUT to uploadUrl has succeeded.

The object is verified before anything is queued: its size is checked against the 25 MB cap, and its leading bytes are checked against the content type declared at creation. A file that fails either check is deleted from storage and the document is moved to failed.

The document is not usable when this returns. It is left in processing while a background job converts it to the normalized PDF, counts its pages, and renders page previews, and it moves from there to ready or failed. Two ways to learn which:

  • Poll GET /documents/{documentId} until status is no longer processing. A few seconds of interval is plenty; conversion is usually quick.
  • Subscribe to the document.ready and document.failed webhook events and do nothing until one arrives.

A document already in ready answers 200 with its existing status and re-queues nothing, so a duplicate confirmation is harmless. A failed document stays retryable, which is what makes recovery from a queue outage possible.

The object key comes from the document row, never from the request: the optional objectKey field exists only so older clients keep working and is verified rather than honoured, so a caller can never repoint a document at an object the server did not sign for.

Accepts an Idempotency-Key: a retry with the same key replays the original response instead of re-queuing processing.

post/documents/{documentId}/confirm-upload

Request

  • Base URL: https://inkseal.net/api/v1
  • URL: https://inkseal.net/api/v1/documents/{documentId}/confirm-upload
  • Auth: HTTP bearer

Headers

Idempotency-Keystring

Makes this mutation retry-safe. 1 to 255 printable ASCII characters (0x20 to 0x7e), trimmed before use. The key is scoped to the workspace and the credential that sent it. Reusing it with a different method, path, or payload answers 422 idempotency_key_reuse. A completed attempt replays its stored status and body with an Idempotent-Replay: true response header; 5xx, 429, and non-JSON answers leave the key retryable. A concurrent request holding the 90 second lease answers 409 idempotency_in_progress. Records are retained 24 hours.

Request body

objectKeystring

Advisory, and kept only so older clients keep working. When present it is compared against the key the server signed for this document and a mismatch is refused with key_mismatch; it is never used to choose which object is read.

Example request

{
  "objectKey": "w/wk_8f2c/2026-08-21/6f1b8a2c-2f61-4a1e-9d0f-1c0f9f6a4b77.pdf"
}

Response

The upload was verified and processing was queued. status is processing, or ready when this document had already finished processing.

Example response

{
  "data": {
    "documentId": "V1StGXR8_Z5jdHi6B-myT",
    "status": "processing"
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.