Skip to main content
Errors return a consistent envelope:
Always branch on error.code, not on the message text. Messages may be reworded; codes are stable.

Error codes

Retry guidance

  • 429 — wait until X-RateLimit-Reset, then retry.
  • 502 — retry with exponential backoff (1s, 2s, 4s…). Cap at ~5 attempts.
Neither of these is charged, so retrying costs you nothing.
  • 401, 403, 400 — these will fail identically every time. Fix the request.

Partial failures are not errors

A bundle request can return 200 while individual topics inside it failed:
A topic with "error": "unavailable" means that specific dataset couldn’t be reached for this request. The overall request still succeeded and is still charged in full. Always check for an error field on each topic before reading value:

Getting help

Every response includes a meta.request_id. Include it when contacting support — it lets us find the exact request in our logs.