FuelLabs/fuel-core · error · anyhow::Error

Tendermint RPC request failed with HTTP status {}

Error message

Tendermint RPC request failed with HTTP status {}

What it means

The generic JSON-RPC helper rpc() in the shared-sequencer HTTP API received a non-200 HTTP status from the Tendermint endpoint for a POSTed request (method/params in RpcRequest). The status code is surfaced verbatim. Typical causes: 404 wrong api_url path, 5xx node overload/crash, 401/403 auth proxy in front of the RPC, or a gateway timing out (504) before Tendermint responds.

Source

Thrown at crates/services/shared-sequencer/src/http_api.rs:129

async fn rpc<T, P>(
    http: &reqwest::Client,
    api_url: &str,
    method: &'static str,
    params: P,
) -> anyhow::Result<T>
where
    T: serde::de::DeserializeOwned,
    P: serde::Serialize,
{
    let request = RpcRequest {
        jsonrpc: "2.0",
        id: 1,
        method,
        params,
    };
    let response = http.post(api_url).json(&request).send().await?;
    if response.status() != reqwest::StatusCode::OK {
        anyhow::bail!(
            "Tendermint RPC request failed with HTTP status {}",
            response.status()
        );
    }
    let text = response.text().await?;
    let response: api_types::RpcResponse<T> =
        serde_json::from_str(&text).with_context(|| format!("response text {text}"))?;

    if response.jsonrpc != request.jsonrpc {
        anyhow::bail!(
            "Tendermint RPC response uses unsupported JSON-RPC version {}",
            response.jsonrpc
        );
    }
    if response.id != request.id {
        anyhow::bail!(
            "Tendermint RPC response ID {} does not match request ID {}",
            response.id,

View on GitHub (pinned to add100d30d)

Solutions

  1. Check the numeric status: 5xx/504 usually warrant a retry with backoff; 4xx indicate a wrong api_url or proxy misconfiguration
  2. Inspect Tendermint node logs/health at the configured api_url
  3. Verify network reachability and any reverse-proxy/auth in front of the RPC endpoint
  4. Since the request is idempotent per caller (latest_block_height, broadcast_tx_sync), retrying a transient 502/503/504 is safe
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at crates/services/shared-sequencer/src/http_api.rs:129 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of FuelLabs/fuel-core@add100d30d (2026-09-05). Data as JSON: /api/errors/fcb8b085de71ba08. Report an issue: GitHub.