nautechsystems/nautilus_trader · error

{method} request failed

Error message

{method} request failed

What it means

Generic failure wrapper for execution-layer JSON-RPC requests: when `send_rpc_request` returns any error other than a rejected redirect, this error is raised with the failing method name. It masks the underlying transport/timeout/HTTP cause behind a uniform message.

Source

Thrown at crates/adapters/blockchain/src/rpc/http.rs:333

        params: serde_json::Value,
    ) -> anyhow::Result<Option<T>> {
        let request = serde_json::json!({
            "jsonrpc": "2.0",
            "id": 1,
            "method": method,
            "params": params,
        });

        let bytes = self
            .send_rpc_request(request, Some(EXECUTION_RPC_TIMEOUT_SECS))
            .await
            .map_err(|e| match e {
                BlockchainRpcClientError::ClientError(message)
                    if message.contains("redirect response rejected") =>
                {
                    anyhow::anyhow!("{method} redirect rejected")
                }
                _ => anyhow::anyhow!("{method} request failed"),
            })?;

        let parsed = serde_json::from_slice::<RpcNodeHttpResponse<T>>(bytes.as_ref())
            .map_err(|_| anyhow::anyhow!("Failed to parse {method} response"))?;

        if parsed.jsonrpc.is_none()
            && let (Some(code), Some(_message)) = (parsed.code, parsed.message)
        {
            anyhow::bail!("{method} RPC error {code}");
        }

        if let Some(error) = parsed.error {
            anyhow::bail!("{method} RPC error {}", error.code);
        }

        Ok(parsed.result)
    }

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Check node reachability (curl a simple eth_chainId against the endpoint)
  2. Increase EXECUTION_RPC_TIMEOUT_SECS or reduce request load if timing out
  3. Inspect logs of the underlying client error to identify transport cause
  4. Verify network/firewall/TLS configuration between client and node
Defensive patterns

Strategy: retry

Validate before calling

// pre-flight reachability check before RPC usage
// curl -sf -X POST $URL -H 'Content-Type: application/json' \
//   -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'

Try / catch

match client.chain_id().await {
    Err(e) if e.to_string().contains("request failed") => {
        // retry with backoff; check node health before giving up
    }
    other => other,
}

Prevention

When it happens

Trigger: Any of the callers (chain_id, get_storage_at, get_code_with_block, get_transaction_count_pending/latest/at) failing due to connection errors, timeouts (EXECUTION_RPC_TIMEOUT_SECS exceeded), DNS failures, TLS errors, or non-redirect HTTP errors from the node.

Common situations: Node is down or unreachable, firewall blocking the RPC port, RPC request timing out under load, or an authenticated endpoint returning 401/403.

Understand the failure class

Background: "API request failed": what wrapped HTTP errors from external APIs mean and how to find the real cause — this error's family across 29 libraries.

Related errors


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/bf6787acbf86d51f. Report an issue: GitHub.