Skip to content
Porter

Errors & retries

Retry safely. Keep the job ID and request ID.

{
  "error": {
    "code": "api_access_unavailable",
    "message": "Your current subscription does not include API processing."
  },
  "request_id": "request-uuid"
}
HTTPAction
401Check the key. It may be missing or revoked.
403Check API eligibility.
404Check the resource ID and organization.
409Read the error code. request_in_progress and report_not_ready are retryable. idempotency_conflict requires correcting the request.
410The PDF has expired or been deleted.
413 / 422Correct the file size or request fields.
429Wait for Retry-After.
5xx / network timeoutRetry with backoff and the same idempotency key.

Idempotency

Generate one unique key for each intended creation request. Reuse that key and identical parameters after timeouts or server failures. Reusing a key with changed parameters returns a conflict. Repeating a job request does not create another run or charge again. Python and JavaScript examples include bounded retries; the shell example stops on errors.

Idempotency records are retained with integration history. A new key does not turn a consumed upload into a new job. Use a new upload for another processing request.

Rate limits

Requests share an organization allowance of 600 per minute, including a separate limit of 60 upload preparations per minute. Document concurrency comes from the purchased plan. Jobs wait when capacity is busy. Validation-only follows the same capacity rules.