{"record":{"id":"7688cc21aeb77166","repo":"nautechsystems/nautilus_trader","slug":"failed-to-get-fills-error-msg","errorCode":null,"errorMessage":"Failed to get fills: {error_msg}","messagePattern":"Failed to get fills: (.+?)","errorType":"http","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/kraken/src/http/futures/client.rs","lineNumber":1822,"sourceCode":"        Ok(all_reports)\n    }\n\n    pub async fn request_fill_reports(\n        &self,\n        account_id: AccountId,\n        instrument_id: Option<InstrumentId>,\n        start: Option<Timestamp>,\n        end: Option<Timestamp>,\n    ) -> anyhow::Result<Vec<FillReport>> {\n        let ts_init = self.generate_ts_init();\n        let mut all_reports = Vec::new();\n\n        let response = self.inner.get_fills(None).await?;\n        if response.result != KrakenApiResult::Success {\n            let error_msg = response\n                .error\n                .unwrap_or_else(|| \"Unknown error\".to_string());\n            anyhow::bail!(\"Failed to get fills: {error_msg}\");\n        }\n\n        let start_ms = start.map(|dt| dt.as_millisecond());\n        let end_ms = end.map(|dt| dt.as_millisecond());\n\n        for fill in response.fills {\n            if let Some(start_threshold) = start_ms\n                && let Ok(fill_ts) = fill.fill_time.parse::<Timestamp>()\n            {\n                let fill_ms = fill_ts.as_millisecond();\n                if fill_ms < start_threshold {\n                    continue;\n                }\n            }\n\n            if let Some(end_threshold) = end_ms\n                && let Ok(fill_ts) = fill.fill_time.parse::<Timestamp>()\n            {","sourceCodeStart":1804,"sourceCodeEnd":1840,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/kraken/src/http/futures/client.rs#L1804-L1840","documentation":"request_fill_reports calls get_fills on the Kraken Futures API and bails when the response result is not Success, including the API's error string. Fill reports cannot be produced without a successful fills response.","triggerScenarios":"Calling request_fill_reports when the get_fills endpoint returns result != Success — authentication failure, permission error, or exchange rejection.","commonSituations":"API key without fill/execution read permission; querying fills on the wrong account type; transient Kraken errors.","solutions":["Examine {error_msg} for the exchange's specific complaint.","Grant the API key access to fills/executions data.","Retry with backoff on transient exchange errors."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"match adapter.request_fill_reports(start, end).await {\n    Ok(fills) => reconcile(fills),\n    Err(e) => log::error!(\"fills fetch failed: {e}\"),\n}","preventionTips":["Enable fills/execution read permission on the API key.","Confirm the key targets the correct futures account type.","Back off and retry on rate-limit messages."],"tags":["kraken","futures","fills","api"],"backgroundTag":"api-error-response","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"}