{"record":{"id":"fcb8b085de71ba08","repo":"FuelLabs/fuel-core","slug":"tendermint-rpc-request-failed-with-http-status","errorCode":null,"errorMessage":"Tendermint RPC request failed with HTTP status {}","messagePattern":"Tendermint RPC request failed with HTTP status (.+?)","errorType":"http","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/services/shared-sequencer/src/http_api.rs","lineNumber":129,"sourceCode":"async fn rpc<T, P>(\n    http: &reqwest::Client,\n    api_url: &str,\n    method: &'static str,\n    params: P,\n) -> anyhow::Result<T>\nwhere\n    T: serde::de::DeserializeOwned,\n    P: serde::Serialize,\n{\n    let request = RpcRequest {\n        jsonrpc: \"2.0\",\n        id: 1,\n        method,\n        params,\n    };\n    let response = http.post(api_url).json(&request).send().await?;\n    if response.status() != reqwest::StatusCode::OK {\n        anyhow::bail!(\n            \"Tendermint RPC request failed with HTTP status {}\",\n            response.status()\n        );\n    }\n    let text = response.text().await?;\n    let response: api_types::RpcResponse<T> =\n        serde_json::from_str(&text).with_context(|| format!(\"response text {text}\"))?;\n\n    if response.jsonrpc != request.jsonrpc {\n        anyhow::bail!(\n            \"Tendermint RPC response uses unsupported JSON-RPC version {}\",\n            response.jsonrpc\n        );\n    }\n    if response.id != request.id {\n        anyhow::bail!(\n            \"Tendermint RPC response ID {} does not match request ID {}\",\n            response.id,","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/FuelLabs/fuel-core/blob/add100d30d21498e8528c46be8567fbd2ea019af/crates/services/shared-sequencer/src/http_api.rs#L111-L147","documentation":"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.","triggerScenarios":"Thrown at crates/services/shared-sequencer/src/http_api.rs:129 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the numeric status: 5xx/504 usually warrant a retry with backoff; 4xx indicate a wrong api_url or proxy misconfiguration","Inspect Tendermint node logs/health at the configured api_url","Verify network reachability and any reverse-proxy/auth in front of the RPC endpoint","Since the request is idempotent per caller (latest_block_height, broadcast_tx_sync), retrying a transient 502/503/504 is safe"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"add100d30d21498e8528c46be8567fbd2ea019af","analyzedAt":"2026-09-05T18:46:12.018Z","contentChangedAt":"2026-09-05T18:46:12.018Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}