{"record":{"id":"1539dc51f5962ed6","repo":"nautechsystems/nautilus_trader","slug":"binance-futures-trade-limit-must-not-exceed-1000","errorCode":null,"errorMessage":"Binance Futures trade limit must not exceed 1000","messagePattern":"Binance Futures trade limit must not exceed 1000","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/binance/src/futures/data.rs","lineNumber":2955,"sourceCode":"        });\n\n        Ok(())\n    }\n\n    fn request_trades(&self, request: RequestTrades) -> anyhow::Result<()> {\n        let http = self.http_client.clone();\n        let sender = self.data_sender.clone();\n        let instrument_id = request.instrument_id;\n        let limit = request.limit.map(|n| n.get() as u32);\n        let request_id = request.request_id;\n        let client_id = request.client_id.unwrap_or(self.client_id);\n        let params = request.params;\n        let clock = self.clock;\n        let start_nanos = datetime_to_unix_nanos(request.start);\n        let end_nanos = datetime_to_unix_nanos(request.end);\n        let start = request.start;\n        let end = request.end;\n        anyhow::ensure!(\n            limit.is_none_or(|value| value <= 1000),\n            \"Binance Futures trade limit must not exceed 1000\"\n        );\n\n        self.spawn_command(async move {\n            let result = if start.is_some() || end.is_some() {\n                http.request_agg_trades(instrument_id, start, end, limit)\n                    .await\n            } else {\n                http.request_trades(instrument_id, limit).await\n            };\n\n            match result.context(\"failed to request trades from Binance Futures\") {\n                Ok(trades) => {\n                    let response = DataResponse::Trades(TradesResponse::new(\n                        request_id,\n                        client_id,\n                        instrument_id,","sourceCodeStart":2937,"sourceCodeEnd":2973,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/binance/src/futures/data.rs#L2937-L2973","documentation":"The Binance Futures trades endpoint (GET /fapi/v1/trades) accepts a maximum limit of 1000 results per request, so the data client validates the caller-supplied limit in request_trades before spawning the HTTP command. Values above 1000 would be rejected by the exchange or silently truncated.","triggerScenarios":"Calling request_trades (historical trades request through the Binance Futures data client) with request.params containing Some(limit) greater than 1000.","commonSituations":"Porting code from another adapter whose trades endpoint allows larger limits (e.g. 5000), or hardcoding a 'get everything' limit like u32::MAX/i64::MAX to page through a long backfill window.","solutions":["Cap the limit at 1000 in the request params","Omit the limit (None) and rely on start/end time pagination","Split the time range into chunks each requesting at most 1000 trades"],"exampleFix":"// before\nlet limit = Some(10_000);\nclient.request_trades(request);\n// after\nlet limit = Some(1000);\nclient.request_trades(request);","handlingStrategy":"validation","validationCode":"let capped = limit.map(|v: u32| v.min(1000));","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Cap any user/config-supplied trade limit at 1000 for Binance Futures","Use start/end time windowing instead of huge limits","Consult the venue's documented per-request maxima per adapter"],"tags":["binance","limit","validation","api-constraint"],"backgroundTag":"value-out-of-range","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"}