Skip to main content

Errors

Every error is JSON:

{ "error": { "code": "insufficient_credits", "message": "Not enough credits. Nothing was executed and nothing was charged." } }

Match on code. The message is for a human and may be reworded; the code will not change without a version bump.

StatuscodeWhat happenedCharged?
400invalid_requestMalformed parameter.No
400invalid_limitlimit above the maximum for that route.No
401missing_keyNo Authorization header.No
401invalid_keyNot a key we recognise.No
401key_revokedYou revoked it.No
402insufficient_creditsNot enough credits. Nothing was executed.No
403key_suspendedSuspended after repeated refused requests.No
404not_foundNo such token, collection or presale.No
429rate_limitedToo many requests a second.No
429too_many_concurrentToo many requests in flight at once.No
429cost_ceilingThis key spent its per-minute credit budget.No
503server_busyWe are shedding load.No
503service_disabledThe public API is switched off.No
500server_errorOur fault.No

The two that matter

402 insufficient_credits means nothing ran. The check happens before the query, not after it — you have not been charged, and you have not received a partial answer. The body tells you your balance and where to top up.

A 429 sets Retry-After. Honour it. Repeatedly ignoring a 429 will auto-suspend the key for fifteen minutes; we suspend the key rather than banning your IP address, because a ban would take out everyone behind your egress and a browser challenge is not something an API client can solve.

What we never do to a valid key

We do not IP-ban you and we do not serve you a browser challenge. If you hold a valid key, the worst outcome is a 429 or a temporary suspension of that key.