Skip to main content

Error Reference

When a request fails, the Ankr RPC gateway returns a standard JSON-RPC error object — a numeric code, a human-readable message, and a data.trace_id you can quote to support. HTTP requests also carry the matching HTTP status code. Codes in the -326xx range are returned by the Ankr gateway; errors from the blockchain node itself pass straight through to you.

How errors are returned

JSON-RPC (HTTP POST, batch, and WebSocket) — the response replaces result with an error:

{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32055,
"message": "No nodes available",
"data": { "trace_id": "4b1f...e9c2" }
}
}

Plain HTTP (request rejected before it reaches JSON-RPC handling — bad auth, rate limit, oversized body) — the gateway returns the HTTP status with a short text body:

message: API key not found, trace_id: 4b1f...e9c2

:::tip Always keep the trace_id Every gateway error carries a trace_id. Include it when you contact support and we can look up the exact request — no need to reproduce it. :::

Client-side vs server-side

Two kinds of error, and they need opposite responses:

  • Client-side (HTTP 4xx) — something about the request, key, or plan needs to change. Retrying as-is won't help — fix the cause first.
  • Server-side (HTTP 5xx) — a transient condition on our side or the upstream node. Safe to retry with backoff. See Retry strategies.

Standard JSON-RPC errors

These follow the JSON-RPC 2.0 spec.

CodeHTTPMessageWhat it means / what to do
-32700400Parse errorThe request body isn't valid JSON. Check serialization.
-32600400Invalid RequestThe JSON isn't a valid JSON-RPC request object.
-32601404Method not foundThe method doesn't exist or isn't enabled for this chain. Check the method name and the chain's API reference.
-32602400Invalid paramsWrong number or type of params. Check the method signature.
-32603500Internal errorUnexpected server-side error. Safe to retry.

Authentication & API-key errors

Returned when the key is missing, unknown, or not entitled. All are client-side — fix the key or your plan in the dashboard before retrying.

CodeHTTPMessageWhat it means / what to do
-32049401API Key requiredThis endpoint needs a key. Use your Premium endpoint with the key in the path.
-32050401API key not foundThe key doesn't exist. Check for typos or a deleted key.
-32051403API key disabledThe key was disabled in the dashboard. Re-enable it or use another.
-32060403API key expiredThe key's validity period has ended.
-32052403API key is not allowed to access blockchainThis chain isn't enabled for the key. Add it in the project settings.
-32053403API key is not allowed to access methodThe method isn't permitted for this key.
-32054403API key is not allowed to access from this IPThe request came from an IP outside the key's IP allowlist.
-32079403Origin not allowedThe request Origin isn't on the key's domain allowlist.
-32080403Contract address not allowedThe call targets a contract outside the key's smart-contract allowlist.

Feature & availability restrictions

The request is well-formed and authenticated, but the feature isn't available on this key, plan, or chain. Client-side.

CodeHTTPMessageWhat it means / what to do
-32074403Blockchain disabledThis chain is temporarily disabled.
-32075403Method disabledThis method is disabled on the gateway.
-32093403Blockchain not supportedThis chain isn't served. See supported chains.
-32083403Proxy is disabledThe endpoint is disabled.
-32078403Streaming not supportedA streaming request hit a non-streaming endpoint.
-32082403Event not supportedThe WebSocket subscription event isn't supported here.
-32092403WebSocket is disabledWebSocket isn't enabled for this key.

Rate-limit & connection-limit errors

You're sending more than your plan allows. Client-side — slow down, back off, or upgrade. See Avoid rate limiting.

CodeHTTPMessageWhat it means / what to do
-32090429Too many requestsRequest-rate limit exceeded. Back off and retry.
-32067429Max connections per blockchain reachedToo many concurrent connections to one chain.
-32068429Max connections per api key reachedToo many concurrent connections on the key.
-32069429Max connections per ip reachedToo many concurrent connections from one IP.
-32077429Max connections per tenant reachedAccount-wide connection cap reached.
-32070429Max total connections reachedThe gateway is at capacity. Retry with backoff.

Request-size errors

The request exceeds a size or range limit. Client-side — split it up.

CodeHTTPMessageWhat it means / what to do
-32062413Request is too largeThe request body exceeds the limit.
-32062413Block range is too largeAn eth_getLogs/trace_* range is too wide. Split into smaller block ranges.
-32062413Batch size too largeToo many calls in one batch. Send fewer per batch.
-32081413WS message is too large. Please use RPC insteadA WebSocket payload is too big — use HTTP RPC.

Node-availability & upstream errors

Transient conditions reaching a healthy node. Server-side (5xx) — safe to retry with backoff.

CodeHTTPMessageWhat it means / what to do
-32055404No nodes availableNo healthy node could serve the request right now. Retry.
-32061503No archive nodes availableAn archive-only query (historical state, trace_*) found no archive node available. Retry.
-32057503Node responded with non success status codeThe upstream node returned an error status. Retry.
-32059503Failed to dial nodeThe gateway couldn't connect to a node. Retry.
-32056500Proxy errorA request couldn't be completed within the upstream deadline. Retry.
-32063500Node returned unexpected errorAn unexpected upstream error. Retry.
-32064503Retry failedThe gateway retried across nodes and all attempts failed. Retry after a short pause.
-32071504Request timeout errorThe request exceeded the time limit. Retry; if it's a heavy call, narrow it.
-32076500Invalid responseThe node returned a malformed response. Retry.
-32065500Decompress response errorThe gateway couldn't decompress the node response. Retry.

WebSocket node availability

No node currently supports the requested subscription. Server-side — retry, or fall back to HTTP polling.

CodeHTTPMessage
-32085503No alive WS nodes
-32086503No alive WS nodes supporting newHeads
-32087503No alive WS nodes supporting logs
-32088503No alive WS nodes supporting newPendingTransactions
-32089503No alive WS nodes supporting transactionReceipts

Internal & connection errors

CodeHTTPMessageWhat it means / what to do
-32072500Failed to rebuild requestInternal error preparing the request. Retry.
-32073500Failed to rebuild responseInternal error preparing the response. Retry.
-32084500WS message IO errorA WebSocket read/write failed. Reconnect.
-32091500Failed to hijack connectionInternal connection-upgrade error. Reconnect.
-32100400Failed to write responseThe response couldn't be written back. Retry.
-32099499Client disconnectedThe client closed the connection before the response was sent — usually a client-side timeout that's too short.

Errors from the blockchain node

Codes outside the -326xx gateway range come straight from the node and mean your request reached a node and was executed. Common examples:

  • 3 / "execution reverted" — the contract call reverted (a normal smart-contract outcome, not an Ankr error).
  • -32000 — a node-level condition such as "header not found", a block/state that's been pruned, or a block that doesn't exist yet (a future block number).

For these, consult the node client's documentation for the chain. For history that's been pruned from a full node, use an archive-tier endpoint.

FAQ

What is the trace_id for?

Every gateway error includes a trace_id in error.data (JSON-RPC) or the text body (HTTP). Quote it to support and we can find the exact request without you reproducing it.

Which errors should I retry?

Server-side errors (HTTP 5xx: -32055, -32056, -32057, -32059, -32061, -32063, -32064, -32071, -32076, and the WS -3208x codes) are transient — retry with exponential backoff. Client-side errors (4xx: auth, access, rate-limit, size) need a fix first. See Retry strategies.

A -326xx code isn't in this list — what is it?

The -326xx range is reserved for the Ankr gateway and standard JSON-RPC. If the code is outside that range, it came from the blockchain node, not Ankr.

I keep getting 429 (-32090). How do I fix it?

You're over your plan's request rate. Add exponential backoff, batch where you can, or upgrade your plan. See Retry strategies and Pricing.