Skip to main content
Expected request errors use this envelope. Unexpected server errors return a plain 500 without it:
code and message are strings. details is an object, array, or null. All 401 responses carry WWW-Authenticate: Bearer. The service_unavailable error includes a retry hint in the envelope:
details.retryable is a boolean; inspect it before deciding whether to retry. A successful close means processing was submitted, not that records were accepted. On 503 publish_failed, the upload stays in_progress; honor Retry-After: 5 and call close again to retry scheduling. Poll until the upload leaves in_progress. A worker failure keeps it in_progress while Pascal retries; after at least one hour, the hourly stuck-upload sweep marks it failed with processing_timeout. A rejected or failed upload carries its error envelope in the upload’s error field; access the code as upload["error"]["error"]["code"]. processing_timeout appears only there. Correct invalid records before resending the whole rejected batch. A PUT timeout can be retried with the same ids. On a data-route 401, re-exchange a token and resume the same upload. On 409 upload_processing, wait for Retry-After before trying to open again. For expired, rejected, or failed uploads, open a new upload and resend the intended records.