Developer reference · v1

API errors and retry handling

Separate rejected requests, failed processing jobs and uploads whose acceptance is uncertain. Each needs a different next action.

Published contract guidance · Reviewed 8 September 2026

Read the HTTP status and error code together.

Documented request-error shape
{
  "success": false,
  "error": {
    "code": "MISSING_FILE",
    "message": "No document supplied",
    "status": 400
  }
}

This is a request error. An asynchronous job can also finish with data.fileStatus: failed; inspect its documented failure information using the contract agreed for your account.

Choose the next action.

Status / codeNext action
400 · INVALID_DOCUMENT_TYPE / MISSING_FILECorrect the document type or supply the file/URL.
401 · UNAUTHORIZEDCheck the Bearer token.
403 · FORBIDDENVerify account access to the requested operation.
404 · JOB_NOT_FOUNDCheck the job ID and account context.
413 · FILE_TOO_LARGEReduce the file to the documented upload limit.
429 · RATE_LIMITEDBack off; respect Retry-After when returned.
500 · INTERNAL_ERRORRetry bounded reads with backoff; escalate repeated failures.
Correct rejected requests Back off on rate limits Reconcile uncertain acceptance

A timeout can hide an accepted upload.

Reconcile before resubmission

Was the upload already accepted?

You retained a job ID
Look up that job and reconcile the existing result before submitting again.
Acceptance is unknown
Follow the agreed reconciliation/support process. Do not blindly repeat the upload.

Do not assume an idempotency header is supported unless it is part of your agreed API contract.

Bound retries and polling.

Use bounded exponential backoff with jitter for reads. Surface a timeout to the caller rather than polling forever, and retain the original source and any returned job ID for reconciliation.

Request the diagnostic→