Skip to main content
The GoldRush Foundational API (REST) returns structured errors when something goes wrong. This page is the single reference for understanding error codes, handling rate limits, implementing retries, and debugging common issues.
Failed requests are free. No API credits are deducted for any response outside the 2xx range, whatever the cause. A 429, a 501, a 556 and a 500 all cost you nothing, so a retry is never a billing risk.Retries do still count against your rate limit, which is why the guidance below is about backing off correctly rather than about cost.

Standard and GoldRush-specific codes

Not every code this API returns is a registered HTTP status code. It is worth knowing which is which, because off-the-shelf HTTP clients, proxies and monitoring tools only understand the registered ones and will usually flatten the rest into a generic “5xx”.

Standard HTTP codes

400 401 402 403 404 406 410 416 429 500 501 503 504 507Registered status codes. Several carry a GoldRush-specific meaning, noted in the table below.

GoldRush-specific codes

452 551 552 554 556 557 558 561 562 563 565 567 570Not registered HTTP status codes. Specific to the GoldRush API. Match on the exact number, not on the 5xx class.

The error response body

Every error the API itself generates uses the same envelope as a successful response, with data set to null:
Three things to note:
  • error_code is a JSON number, not a string. Compare it with 501, not "501".
  • error_code always equals the HTTP status code, so you can branch on either one.
  • error_message carries the specific reason. Two requests can share a status code and mean entirely different things, so log the message as well as the code.
The one exception is a bare 500, which is returned with an empty body. Treat a response that has a 5xx status and no parseable JSON as a 500.
A request with no Authorization header at all is rejected by the edge proxy, not by the API, and returns an HTML body rather than JSON:
A missing or malformed key sent with the request returns the normal JSON 401. If your client parses every response body as JSON, guard this one case, or check the Content-Type header before parsing.

Standard HTTP status codes

These are all registered HTTP status codes. Where our meaning is narrower or more specific than the generic one, it is spelled out here.

501 is a capability answer, not an outage

A 501 means your request was well-formed and your key was fine, but the chain or endpoint cannot serve that particular thing. It is a stable answer rather than a transient one, so retrying it unchanged will not succeed until that support actually ships. It is returned in three situations:
  • An unsupported chain. Note that an unrecognized chain name returns 501, not 404:
  • A feature flag the chain does not support. Flags such as with-state and with-input-data are only available on chains with the underlying data. The flag is valid, the chain just cannot serve it:
    Rather than discovering this by trial, read the capability flags on /v1/chains/, such as is_internal_tx_supported and is_input_data_supported, and skip the call when the flag is false.
  • An endpoint restricted to certain chains, for example an EVM-only endpoint called on a non-EVM chain.
The gate runs before the identifier is looked up, so a transaction hash that does not exist returns 404 on a chain that supports the flag and 501 on a chain that does not. That makes a throwaway hash a cheap way to test chain support.

GoldRush-specific status codes

The codes in this section are not registered HTTP status codes. They are specific to the GoldRush API.They exist so that different backend conditions stay distinguishable instead of collapsing into one generic 500, which is what makes a useful retry policy possible at all. The tradeoff is that generic HTTP tooling does not know them: most clients, proxies and dashboards will report them only as “a 5xx”. Match on the exact number, and if you alert on error classes, give at least 556 and 565 their own treatment.
All of these carry the normal JSON error body described above.
556 is the one to watch. It means the request was refused on purpose while the backend was under load, not that anything is broken. A burst of 556 is the correct signal to back off; clients that retry it aggressively make the condition worse and last longer.
565 is short-lived by design. The response is cached for only 10 seconds, because the usual cause is that indexing is a few seconds behind the chain tip. Waiting 10 to 15 seconds and retrying once resolves most occurrences. If a 565 for the same record persists for minutes, raise it on the support page.

What to do with every code

Sorted by what the right response actually is, rather than by number.

Retry with exponential backoff

429, 500, 503, 504, 551, 552, 554, 556, 557, 558, 561, 562, 563, 565, 567 These are transient. The same request may well succeed later. Use the loop in Retry Strategies below, with these adjustments:
  • 557: retry once immediately before backing off. It usually clears on the next attempt.
  • 565: wait at least 10 seconds before the first retry.
  • 562 and 563: recovery depends on a third party, so allow a ceiling of 30 to 60 seconds rather than a few seconds.
  • 429: back off until your request rate is under the limit for your plan. More attempts will not help.

Change the request, then retry

406, 507 The request as sent will keep failing, but a narrower one will succeed. Reduce page-size, shorten the date range, or split the query, then send it again.

Fix something, then retry once

400 fix the parameters. 401 fix the API key. 402 check error_message to see which of the three causes applies, then raise your spending limit, upgrade your plan, or resume your subscription. 452 send an honest User-Agent.

Do not retry

403, 410, 416, 501, 570 These are stable answers, not failures in progress. Retrying returns exactly the same thing. 410 means the endpoint or chain is gone for good, so remove the call and any scheduled job that makes it. 501 means the capability does not exist on that chain, so check /v1/chains/ and skip it. 570 means the contract reverted, which is a real answer about the contract.
None of this costs credits. Error responses are not billed, so the cost of a retry is only the rate limit slot it consumes and the latency it adds. Optimize your retry policy for recovery time and for not amplifying an incident, not for spend.

Rate Limits

The Foundational API enforces rate limits based on your plan tier: Rate limits are enforced per API key and IP address. When you exceed your limit, you’ll receive a 429 Too Many Requests response. Back off and retry using the strategies below.

Retry Strategies

Exponential Backoff with Jitter

Retry on the transient set only, and use exponential backoff with random jitter so that many clients recovering from the same incident do not retry in lockstep. A retry loop written against 429, 500 and 503 alone will miss most of what the API actually returns under load, because the specific codes above are used in preference to a generic 500. Include them explicitly.
Never put 403, 410, 416, 501 or 570 in a backoff loop. They are stable answers about the request, the chain or the contract, so every attempt returns the same thing while still consuming a rate limit slot. See What to do with every code for the codes that are worth one retry after you fix something.

SDK Built-in Retries

The GoldRush TypeScript Client SDK handles retries and rate limiting automatically - no manual retry logic needed when using the SDK.

Debugging Tips

GoldRush API keys follow the pattern cqt_wF... or cqt_rQ... (26 base58 characters after the prefix). Double-check for trailing whitespace or truncation.
An unsupported or misspelled chain returns 501, not 404, with "Chain <name> not supported." in error_message. A 404 on a chain-scoped path usually means the record was not found, not that the chain is wrong. See Supported Chains for the full list.
Don’t rely on the HTTP status code alone. The JSON response body contains an error_message field with specific details about what went wrong. This matters most for 402 and 501, where one status code covers several unrelated causes that only the message distinguishes.
Isolate issues from your application code by testing directly:
Track your API credit consumption on the GoldRush Platform dashboard to avoid unexpected 402 errors.
If you’re consistently hitting 500, 503, or any of the GoldRush-specific 5xx codes after backing off, open a ticket on the GoldRush support page with your API key prefix, the endpoint, the exact error_code and error_message, and timestamps of the failures.The support form asks for the endpoint and chain directly, so filing there routes the issue faster than describing it in free text.Include the exact code. 556 and 565 in particular point at very different causes from a generic 500, and quoting the number shortens the diagnosis considerably.

Quick Reference

Foundational API Auth

API key setup, authentication methods, and SDK usage.

FAQ

Common questions about plans, rate limits, and features.

Supported Chains

Full list of supported blockchains and endpoints.