Error shape
Every error response is JSON with at least:error— a short machine-readable code (see table below).message— a human-readable description.request_id— unique per call; include this if you contact support about a specific request.credits_remaining— present on most errors that occur after authentication, so you can tell your balance without a separate/v1/usagecall. Absent on errors that happen before your key is even charged (e.g. bad auth, bad request body).
422 (“no result found”) response additionally includes
credits_charged, since some endpoints still charge on a clean miss — see
Credits & Pricing. In the rare
case a compensating refund itself fails, you may also see
"refund_issue": true — this means the charge may not have been refunded
yet; contact support with the request_id and it’ll be reconciled.
Status codes
| Status | error | Meaning |
|---|---|---|
400 | invalid_request | Request body failed validation (missing/malformed fields). Nothing was charged. |
401 | unauthorized | Missing Authorization header, or the key is invalid/revoked. |
402 | insufficient_credits | Your balance is too low for this call’s price. The vendor is never called. |
422 | not_found | The vendor was called successfully but found no result. May still be charged — see above. |
429 | rate_limited | You’ve exceeded the rate limit (below). Nothing was charged. |
502 | vendor_error | The upstream data vendor errored or timed out. Any reserved credits are refunded in full. |
503 | vendor_capacity | This endpoint is temporarily unavailable due to a vendor capacity limit. Nothing was charged; retry later. |
200 response is always success — a real payload with a normal charge, or
in a couple of specific cases (see the “charged on success only” endpoint in
Credits & Pricing) a payload with credits_charged: 0.
Rate limit
60 requests per minute per API key, enforced with a fixed one-minute window. Going over returns429 before any credits are touched or any
vendor is called. There’s no separate burst allowance today — spread out
high-volume workloads across the minute rather than bursting.