{"record":{"id":"4e4bb4653e020963","repo":"nautechsystems/nautilus_trader","slug":"either-client-order-id-or-venue-order-id-is-requir","errorCode":null,"errorMessage":"Either client_order_id or venue_order_id is required","messagePattern":"Either client_order_id or venue_order_id is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/coinbase/src/http/client.rs","lineNumber":1167,"sourceCode":"                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}\"))?;\n        let response: OrderResponse =\n            serde_json::from_value(json).map_err(|e| anyhow::anyhow!(e))?;\n        let instrument = self\n            .get_or_fetch_instrument(response.order.product_id)\n            .await?;\n        let ts_init = self.ts_now();\n        parse_order_status_report(&response.order, &instrument, account_id, ts_init)\n    }\n\n    /// Requests order status reports, optionally filtered by instrument, open","sourceCodeStart":1149,"sourceCodeEnd":1185,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/coinbase/src/http/client.rs#L1149-L1185","documentation":"request_order_status_report can look up an order by client_order_id, by venue_order_id, or via resolve_order_context, but with neither ID provided there is no way to identify the order. The HTTP client bails immediately in the (None, None) match arm before calling get_order.","triggerScenarios":"Calling request_order_status_report (directly or through resolve_order_context) with both client_order_id and venue_order_id as None — e.g. a request with blank/unset identifiers.","commonSituations":"Reconciliation/report generation passing through an order struct with unset IDs; a bug where one ID format is expected but never populated; serialization dropping empty ID fields.","solutions":["Populate either client_order_id or venue_order_id before requesting the status report","If only a client_order_id is known, pass it; the client resolves it against Coinbase's mappings","Check upstream code that builds the report request to ensure an ID is set (resolve_order_context should supply one)","Log the order struct at the call site to see which ID field is empty"],"exampleFix":"// before\nclient.request_order_status_report(&order_report_req).await?; // req has no ids\n\n// after\nlet req = order_report_req.with_client_order_id(client_order_id);\nclient.request_order_status_report(&req).await?;","handlingStrategy":"validation","validationCode":"if report_req.client_order_id.is_none() && report_req.venue_order_id.is_none() {\n    return Err(anyhow!(\"order status request needs client_order_id or venue_order_id\"));\n}","typeGuard":"fn has_order_id(req: &OrderStatusReportRequest) -> bool {\n    req.client_order_id.is_some() || req.venue_order_id.is_some()\n}","tryCatchPattern":null,"preventionTips":["Always stamp one order ID on status report requests at the call site","Validate request structs before dispatching reconciliation flows","Beware serializers that drop empty/None ID fields","Prefer passing client_order_id consistently so context resolution works"],"tags":["order-status","missing-required-argument","http","rust"],"backgroundTag":"missing-required-argument","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}