Errors

Every error, and what to do about it.

Failures are application/problem+json per RFC 9457, one shape across the whole platform. The type field of any error response links straight to its entry below.

SituationStatusType
Key missing or malformed 401 invalid-api-key
Key revoked 401 revoked-api-key
Key not allowed on this endpoint 403 endpoint-not-allowed
Malformed payload 400 invalid-request
Per-minute rate exceeded 429 rate-limit-exceeded
Monthly quota exhausted 402 quota-exceeded
Batch too large 413 batch-too-large
Job unknown, expired, or owned by another account 404 job-not-found
The request could not be served as sent 400 request-failed
A dependency of ours is unreachable 503 service-unavailable
A bug on our side 500 internal-error

401

Key missing or malformed.

invalid-api-key

Send the key as `Authorization: Bearer wk_live_...`. A key that was copied without its prefix, or with a trailing newline, arrives as this error rather than as a key we can recognise.

401

Key revoked.

revoked-api-key

The key was revoked from the dashboard and will never work again. Issue a new one and deploy it. Revocation takes effect on the next request, so a running deployment stops immediately.

403

Key not allowed on this endpoint.

endpoint-not-allowed

Keys carry the set of endpoints they may call. Widen it from the dashboard, or use the key that was issued for this endpoint. Retrying does not help.

400

Malformed payload.

invalid-request

The payload could not be read. The `detail` field says which field and why. Send JSON, with the field the endpoint documents.

429

Per-minute rate exceeded.

rate-limit-exceeded

Too many calls in one minute. `Retry-After` says how long to wait, and `limit` is the ceiling on your plan. Wait, then retry: this one is safe to back off on.

402

Monthly quota exhausted.

quota-exceeded

The monthly allowance for this endpoint is spent, and `resets_at` says when it returns. Retrying will not help before then, which is why this is 402 and not 429. Change plan or wait.

413

Batch too large.

batch-too-large

A single batch is capped. `submitted` and `limit` are in the payload. Split the list and submit it as several jobs.

404

Job unknown, expired, or owned by another account.

job-not-found

No job with that id belongs to this account. The same answer covers a job that never existed, one that passed its 48 hour retention, and one belonging to somebody else, because telling those apart would confirm which job ids are real.

400

The request could not be served as sent.

request-failed

The request reached us but could not be served as sent: a method or a route that does not exist. Check the URL and the verb against the reference.

503

A dependency of ours is unreachable.

service-unavailable

Something we depend on is down. It is not your request, and it is not permanent. `Retry-After` says when to come back, and retrying is the correct response.

500

A bug on our side.

internal-error

Our bug. The detail is deliberately empty because the message would leak internals; the specifics are in our logs. Retrying is reasonable once. If it persists, the response and the time it happened are enough for us to find it.