{"record":{"id":"8bb346fffef2d168","repo":"nautechsystems/nautilus_trader","slug":"binance-futures-custom-data-requires-binance-venue","errorCode":null,"errorMessage":"Binance Futures custom data requires BINANCE venue instrument, received {instrument_id}","messagePattern":"Binance Futures custom data requires BINANCE venue instrument, received (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/binance/src/futures/data.rs","lineNumber":2737,"sourceCode":"                        }\n                    }\n                    Err(e) => log::error!(\"BinanceBar request failed for {bar_type}: {e:?}\"),\n                }\n            });\n            return Ok(());\n        }\n\n        if data_type_name != \"BinanceFuturesOpenInterest\"\n            && data_type_name != \"BinanceFuturesOpenInterestHist\"\n        {\n            log::warn!(\"Unsupported custom data request: {data_type_name}\");\n            return Ok(());\n        }\n\n        let instrument_id = Self::required_instrument_id_metadata(&data_type)?;\n\n        if instrument_id.venue != self.venue() {\n            anyhow::bail!(\n                \"Binance Futures custom data requires BINANCE venue instrument, received {instrument_id}\"\n            );\n        }\n\n        let period = if data_type_name == \"BinanceFuturesOpenInterestHist\" {\n            Some(Self::required_period_metadata(&data_type)?)\n        } else {\n            None\n        };\n\n        let http = self.http_client.clone();\n        let sender = self.data_sender.clone();\n        let request_id = request.request_id;\n        let client_id = request.client_id;\n        let params = request.params;\n        let clock = self.clock;\n        let venue = self.venue();\n        let limit = request.limit.map(|n| n.get() as u32);","sourceCodeStart":2719,"sourceCodeEnd":2755,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/binance/src/futures/data.rs#L2719-L2755","documentation":"Binance Futures custom data requests must target an instrument on the venue this data client serves. `required_instrument_id_metadata` parses the ID, then request_data bails if its venue does not match self.venue().","triggerScenarios":"request_data for any Binance Futures custom data type where metadata instrument_id parses successfully but has a different venue (e.g. BINANCE_COINM instrument sent to a USDT-M futures data client).","commonSituations":"Multi-venue setups where requests are routed to the wrong data client instance, or instrument ids hardcoded with the wrong venue suffix in config.","solutions":["Route the request to the data client matching the instrument's venue (COIN-M client for COIN-M instruments, etc.)","Correct the instrument_id's venue suffix in configuration","Check request routing logic that selects the data client by venue"],"exampleFix":"// before\ninstrument_id: \"BTCUSD_PERP.BINANCE_COINM\" // routed to USDT-M client\n// after\ninstrument_id: \"BTCUSDT-PERP.BINANCE\"","handlingStrategy":"validation","validationCode":"let id: InstrumentId = InstrumentId::from_str(meta.get(\"instrument_id\").unwrap().as_str().unwrap())?;\nassert_eq!(id.venue, client_venue, \"request venue must match data client venue\");","typeGuard":"fn venue_matches(id: &InstrumentId, client_venue: &Venue) -> bool {\n    &id.venue == client_venue\n}","tryCatchPattern":"match client.request_data(data_type).await {\n    Err(e) if e.to_string().contains(\"requires BINANCE venue instrument\") => return Err(anyhow::anyhow!(\"route request to correct venue client: {e}\")),\n    other => other,\n}","preventionTips":["Route custom data requests by instrument venue","Validate venue suffix in config at startup","Use one data client per Binance product type"],"tags":["rust","venue-mismatch","custom-data","binance"],"backgroundTag":"invalid-argument-value","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}