{"record":{"id":"a57872a6ab103f91","repo":"nautechsystems/nautilus_trader","slug":"failed-to-fetch-orders-e","errorCode":null,"errorMessage":"Failed to fetch orders: {e}","messagePattern":"Failed to fetch orders: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/coinbase/src/http/client.rs","lineNumber":1157,"sourceCode":"    pub async fn request_order_status_report(\n        &self,\n        account_id: AccountId,\n        client_order_id: Option<ClientOrderId>,\n        venue_order_id: Option<VenueOrderId>,\n    ) -> anyhow::Result<OrderStatusReport> {\n        let venue_order_id = match (venue_order_id, client_order_id) {\n            (Some(vid), _) => vid,\n            (None, Some(cid)) => {\n                // Fall back to batched query when only the client order ID is known\n                let query = OrderListQuery {\n                    client_order_id_filter: Some(cid.as_str().to_string()),\n                    ..Default::default()\n                };\n                let orders = self\n                    .inner\n                    .fetch_all_orders(&query)\n                    .await\n                    .map_err(|e| anyhow::anyhow!(\"Failed to fetch orders: {e}\"))?;\n                let order = orders\n                    .into_iter()\n                    .next()\n                    .ok_or_else(|| anyhow::anyhow!(\"No order found for client_order_id={cid}\"))?;\n                let instrument = self.get_or_fetch_instrument(order.product_id).await?;\n                let ts_init = self.ts_now();\n                return parse_order_status_report(&order, &instrument, account_id, ts_init);\n            }\n            (None, None) => {\n                anyhow::bail!(\"Either client_order_id or venue_order_id is required\")\n            }\n        };\n\n        let json = self\n            .inner\n            .get_order(venue_order_id.as_str())\n            .await\n            .map_err(|e| anyhow::anyhow!(\"Failed to fetch order: {e}\"))?;","sourceCodeStart":1139,"sourceCodeEnd":1175,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/coinbase/src/http/client.rs#L1139-L1175","documentation":"Raised by request_order_status_report when fetch_all_orders(&query) fails while looking up an order by venue_order_id (this branch). The REST error is wrapped so callers can distinguish fetch failure from 'order not found' (a separate error).","triggerScenarios":"Calling request_order_status_report with a venue_order_id where GET /orders/list_orders fails: auth errors, rate limits, malformed query params, network outage.","commonSituations":"Coinbase API rate limiting during heavy report generation, invalid API key scopes (orders read), pagination failures on large order sets, transient network drops on live servers.","solutions":["Retry with backoff for 429/5xx responses from list_orders.","Verify the API key has order-read (view) scope for the CDP portfolio.","Check the venue_order_id format matches Coinbase's order id.","Inspect the wrapped {e} for signing/clock-skew auth failures and resync NTP."],"exampleFix":"// before\nlet report = client.request_order_status_report(account_id, None, Some(venue_order_id)).await?;\n// after\nfor attempt in 0..3 {\n    match client.request_order_status_report(account_id, None, Some(venue_order_id.clone())).await {\n        Ok(r) => return Ok(r),\n        Err(e) if attempt < 2 => tokio::time::sleep(Duration::from_millis(500 * (attempt + 1))).await,\n        Err(e) => return Err(e),\n    }\n}","handlingStrategy":"retry","validationCode":"anyhow::ensure!(!venue_order_id.as_str().is_empty(), \"venue_order_id must be non-empty\");","typeGuard":null,"tryCatchPattern":"match client.request_order_status_report(account_id, None, Some(vid.clone())).await {\n    Ok(r) => r,\n    Err(e) if is_rate_limit(&e) => { sleep(rate_backoff).await; retry() }\n    Err(e) => return Err(e),\n}","preventionTips":["Throttle order report requests to stay within Coinbase rate limits.","Ensure API keys have order read scope.","Store venue order ids exactly as returned by Coinbase."],"tags":["http","orders","coinbase","rest-api"],"backgroundTag":"http-request-failed","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}