Elysium errors
Elysium answers on two layers. The plan gate in front of the network returns plain HTTP errors whose body has a string error field. The Elysium handler returns JSON-RPC errors with a numeric code. Handle the HTTP status and the body together. Every row below was reproduced through Triport production on 2026-11-08 (D2 check), unless the row says otherwise.
Endpoint and plans: Elysium RPC endpoint.
HTTP gate (before the RPC call is dispatched)
| HTTP | error | When | Client action |
|---|---|---|---|
| 401 | unauthorized | Missing or unknown API key. | Check the key. Pass it in the path (/r/<key>/elysium) or as X-API-Key on /rpc/elysium. |
| 403 | method_unknown | The method is not in the Elysium method set, for example net_peerCount, txpool_, debug_, trace_, arb_, eth_newFilter or a misspelled name. A JSON-RPC batch that contains such a method is rejected entirely: no element is executed. | Remove the method. See unsupported methods. Do not retry. |
| 403 | tier_insufficient | The method or product needs a higher plan. The body names current_tier and required_tier. | Upgrade or use another method. |
| 403 | scope_missing | The key has an explicit scope list without the required scope (elysium:rpc, or elysium:das for the batch history). | Allow the endpoint for this key at https://triport.io/app/keys, or use another key. |
| 405 | method_not_allowed | GET or another verb on the JSON-RPC URL. | Send POST. |
| 429 | rate_limited | Plan RPS for the category is exceeded. The body includes category, limit_rps, burst_capacity and retry_after_sec; headers include Retry-After and X-Ratelimit-Category / X-Ratelimit-Limit. | Wait for Retry-After, then retry. |
The method_unknown gate is the answer a client sees for an unsupported method. The JSON-RPC code -32601 below is only returned when a documented method has no node able to serve it.
Measured method_unknown body (2026-11-08):
HTTP/1.1 403 Forbidden
{"error":"method_unknown","message":"Method \"net_peerCount\" is not supported on chain \"elysium\". Check the method name and the endpoint path; supported methods: https://triport.io/errors/http-403-forbidden","chain":"elysium","method":"net_peerCount","docs_url":"https://triport.io/errors/http-403-forbidden"}Measured plan-gate 429 body (Free key, 2026-11-08; upgrade_url and docs_url omitted here):
HTTP/1.1 429 Too Many Requests
Retry-After: 1
X-Ratelimit-Category: elysium_read_rpc
X-Ratelimit-Limit: 5
{"error":"rate_limited","message":"Rate limit reached: your free plan allows 5 requests/s for elysium_read_rpc. ...","current_tier":"free","category":"elysium_read_rpc","limit_rps":5,"burst_capacity":10,"retry_after_sec":1}JSON-RPC codes
| Code | HTTP | Meaning | Client action |
|---|---|---|---|
| -32700 | 400 | Parse error: the body is not valid JSON. | Fix the request body. |
| -32600 | 200 | Invalid Request, for example an empty batch []. | Send at least one request object. |
| -32601 | 200 | Method not found / unavailable for a documented method. Unsupported methods get HTTP 403 method_unknown instead. | Check the method index. |
| -32602 | 200 | Invalid params: wrong hex or address, an eth_getLogs range wider than 10,000 blocks, blockHash combined with fromBlock/toBlock, or an invalid raw transaction for eth_sendRawTransaction. | Fix the positional parameters or split the range. |
| -32005 | 429 | rate limit reached; retry later: the Elysium node pool is temporarily at capacity. This is not your plan limit (that one is HTTP 429 rate_limited above). Retry-After is set. | Back off for Retry-After, then retry. |
| -32005 | 200 | Response-size limit: a response or an entire batch above 8 MB (8,388,608 bytes; BE3). Not reproduced in the D2 check. | Narrow the range or add address/topics filters. |
| 3 | 200 | Execution reverted, with data (for example "0x"). | Inspect the call and contract state; this is an execution error, not an unavailable method. |
| -32000 | 503 | upstream unavailable: no node answered. | Retry reads with bounded exponential backoff. |
| -32000 | 200 | A node error relayed as is, for example missing trie node … is not available on a historical-state read (seen on 2026-11-08 for eth_getStorageAt and eth_getProof at a block about 100,000 blocks old; the retry succeeded). | Retry with bounded backoff. Never read it as an empty or zero result. |
For transaction submission, -32000 can also be a network rejection or an unknown outcome. With error.data.outcome = unknown, use error.data.txHash to poll the transaction and receipt; Triport does not automatically resend. Network nonce, replacement-fee and insufficient-funds errors retain their network code and message after infrastructure identifiers are removed.
Classify -32000 by code and message together: a missing block or unavailable historical state is distinct from a temporary service outage. Error messages may change and must not be parsed for endpoint selection.
Measured responses (2026-11-08):
{"jsonrpc":"2.0","id":1,"error":{"code":-32602,"message":"eth_getLogs is limited to 10000 blocks per request on Elysium; split the range"}}{"jsonrpc":"2.0","id":1,"error":{"code":-32005,"message":"rate limit reached; retry later"}}{"jsonrpc":"2.0","id":1,"error":{"code":3,"message":"execution reverted","data":"0x"}}In a batch, an element with invalid params gets its own error object while the other elements succeed; only a method_unknown element (or the plan rate gate) rejects the whole batch.
See the shared error reference, Authentication and Rate Limits & Tiers.