Docs

Errors and retries

Choose the right recovery action without duplicating submissions.

Successful responses wrap a resource in data. Error responses contain error.code, error.message, and error.requestId. Some include a stable reason and validation fields. Save the request ID for support; never attach keys, invitation tokens, signed URLs, or candidate documents to ordinary logs.

{
  "error": {
    "code": "CONFLICT",
    "message": "Request conflicts with the current resource state.",
    "reason": "QUOTE_STALE",
    "requestId": "25cbb923-8b3c-4d05-b74f-623efc6d5f8d"
  }
}

The message is for people and can change. Branch on status, code, and reason where provided. Not every endpoint returns every domain error; consult its recovery section.

HTTP recovery

StatusWhat to checkRetry approach
400Input shape, field validation, query parameters, cursor, supported result schemaCorrect the input; unchanged retries cannot fix it
401Key expiry/revocation and creating Admin's current accessRestore valid authentication
403Required scope, workspace access, and feature availabilityResolve access before retrying
404Workspace, resource ID, deletion, or preparation expiryReconcile the resource; do not retry deleted resources forever
405Supported method in AllowCorrect the HTTP method
409Quote, idempotency input, or resource stateFollow the domain reason below
410Event cursor older than retained historyReconcile current resources and establish a new cursor
422Upload contents, workspace allowance, or active-work limitsResolve the specific reason
429Request rateWait at least Retry-After, then retry
500 / 503Temporary server failureBack off; preserve the original body and idempotency key

Domain recovery

ReasonAction
IDEMPOTENCY_CONFLICTRecover the original request; choose a new key only for genuinely new work
EXTERNAL_REFERENCE_CONFLICTFind the existing application report or replay its original preparation
JD_REVISION_CHANGEDRe-read and review the job before preparing against its new revision
QUOTE_STALEReview a fresh quote, then submit its fingerprint with a new request key
RESOURCE_ALREADY_ADMITTEDRead current state; do not repeat upload or admission with new keys
INVALID_UPLOADVerify PUT completion, file bytes, size, and content type
UPLOAD_EXPIREDCreate a fresh preparation; refreshing a URL cannot revive an expired preparation
PENDING_UPLOAD_LIMITCancel unused preparations or wait for expiry
ACTIVE_ANALYSIS_LIMITWait for capacity; at most five analyses can be active in a workspace
BATCH_ACTIVE_LIMITWait for the active batch of that kind to complete
INSUFFICIENT_CREDITS / QUOTA_EXCEEDEDAsk the workspace Admin to resolve the available allowance
RESULT_VERSION_UNSUPPORTEDRequest a supported result schema version
EVENT_CURSOR_EXPIREDReconcile current reports/interviews, then begin a fresh event-feed position

Backoff and limits

Use bounded exponential backoff with jitter for transient errors; honor Retry-After when present. Keep a retry budget and surface a persistent failure to an operator. Do not retry malformed requests or access failures indefinitely.

LimitPer minute
Reads per key / workspace60 / 120
Writes per key / workspace10 / 20
Ingress requests per IP300
Invalid-authentication attempts per IP30

These are fixed-minute windows. Poll conservatively and prefer webhooks for completion updates. Batch item admission has separate work budgets; a batch request does not bypass workspace limits.

Handling partial batches

An accepted batch can fail some items. Store each successful resource ID, inspect failed errorCode values, and submit only corrected failed items in a new batch with fresh quotes where required. Read bulk workflows for the different completion rules.

On this page