Skip to main content

HTTP errors

The API follows a predictable HTTP error code format. Each status maps to one SDK exception, and all of them subclass HollerithError.
  • 401 — AuthenticationError — There is an issue with your API key (for example, it’s mistyped, revoked, or expired). See Get your API key.
  • 403 — PermissionDeniedError — Your API key does not have permission to use the specified resource.
  • 404 — NotFoundError — The requested job or fitted context was not found, or it aged out.
  • 409 — ConflictError — The request conflicts with the current state of a resource, such as an idempotency key reused with a different body.
  • 413 — ValidationError — The request exceeds the maximum allowed number of bytes.
  • 422 — ValidationError — The request, or the table inside it, could not be processed.
  • 429 — QuotaExceededError — Your organization has hit a rate limit, or its daily quota.
  • 500 — ServerError — An unexpected error has occurred internal to Hollerith’s systems.
  • 503 — ServiceUnavailableError — A worker or the cache is temporarily unavailable.

Request size limits

Exceed the upload ceiling and you get a 413 payload_too_large, raised before the table is read. Exceed any of the others and you get a 422 dataset_too_large. See Limits for the cell budget these interact through, and for the per-minute request rate behind 429.

Error shape

The API returns errors as JSON with a top-level object that always includes a code and a category value, plus a requestId for easier tracking and debugging. For example:
Branch on code, the stable identifier and one of 27. Never branch on problem, cause, or fix — the server rewrites those per instance. Not every error is an envelope: a body that fails to parse returns a bare {"error": "invalid_json"} with no code and no request id, which the SDK cannot type. Catch HollerithError at the outer edge of any integration, not only the subclasses you expect.

SDK error types

The Python SDK raises typed exceptions instead of returning raw JSON. Every exception exposes code, problem, cause, fix, and request_id.

Request ID

Every error response includes a unique x-hollerith-request-id header, and a typed error repeats it as requestId in the body. If you need to report an issue, include that value — it is logged server-side against the same request. A bare invalid_json or invalid_request response carries none, and neither do errors the SDK raises before any request goes out. Quote the code and the call you made instead.

Error codes

The What to do column is the fix string the API returns for that code.

auth — 401, AuthenticationError

permission — 403, PermissionDeniedError

quota — 429, QuotaExceededError

validation — 413 and 422, ValidationError

not_found — 404, NotFoundError

conflict — 409, ConflictError

unavailable — 503, ServiceUnavailableError

server — 500, ServerError

Next steps

Troubleshooting

Symptom-to-fix tables for common issues

Limits

Learn about the constraints Hollerith is optimized for