Error reference

Check two layers: the HTTP transport and the JSON-RPC response body. The examples below illustrate common failures; exact upstream messages may vary by network and client.

Gateway layer

CaseHTTPShape
Invalid / revoked key403auth error - specified api-key not found
Key paused for the day (quota exceeded)403Method access is denied while the key is quota-paused. Check account usage and key status; this does not mean the secret is unknown. Recovery follows the UTC reset and gateway refresh.
IP or method access rule rejected403Check the key's access restrictions and the selected method; a 403 alone does not identify a quota problem.
Malformed JSON or invalid request400-32700 or -32600; correct the request before retrying.
Request body or batch too large413-32600; split the batch or reduce the payload.
Rate or concurrency capacity exceeded429-32005; honor Retry-After and reduce request rate or parallelism.
Gateway could not complete the upstream exchange502-32001; timeouts and oversized responses are possible causes. Narrow large reads before retrying.
Upstream temporarily unavailable200{"error":{"code":1,"message":"no available upstreams to process a request"}} — retry with backoff.
jsonjson
{
"id": 0,
"jsonrpc": "2.0",
"error": {
"code": 403,
"message": "auth error - specified api-key not found"
}
}

JSON-RPC layer

CodeMeaningIllustrative example / handling
-32601Method not available on this platformthe method eth_blobBaseFee does not exist/is not available — see Unsupported methods for alternatives.
-32602Invalid paramsinvalid argument 0: json: cannot unmarshal hex string without 0x prefix…
-32000Implementation-defined execution or server errorInspect message and data; insufficient funds and contract reverts require input or state changes, not blind retries.
-32603Internal JSON-RPC errorInspect the details before deciding whether the failure is transient.

HTTP 200 can still contain a JSON-RPC error. A non-2xx response can also carry JSON-RPC JSON, while an edge or transport failure may have a different body. Check both the status and the body before treating a call as successful.

Retry safely

Use bounded exponential backoff with jitter for transient failures and honor Retry-After. A timeout does not prove that a signed transaction was rejected: check its locally computed hash before rebroadcasting the same signed bytes. Do not create a new transaction merely because the submission response was lost.