nautechsystems/nautilus_trader · error

Failed to get fills: {error_msg}

Error message

Failed to get fills: {error_msg}

What it means

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.

Source

Thrown at crates/adapters/kraken/src/http/futures/client.rs:1822

        Ok(all_reports)
    }

    pub async fn request_fill_reports(
        &self,
        account_id: AccountId,
        instrument_id: Option<InstrumentId>,
        start: Option<Timestamp>,
        end: Option<Timestamp>,
    ) -> anyhow::Result<Vec<FillReport>> {
        let ts_init = self.generate_ts_init();
        let mut all_reports = Vec::new();

        let response = self.inner.get_fills(None).await?;
        if response.result != KrakenApiResult::Success {
            let error_msg = response
                .error
                .unwrap_or_else(|| "Unknown error".to_string());
            anyhow::bail!("Failed to get fills: {error_msg}");
        }

        let start_ms = start.map(|dt| dt.as_millisecond());
        let end_ms = end.map(|dt| dt.as_millisecond());

        for fill in response.fills {
            if let Some(start_threshold) = start_ms
                && let Ok(fill_ts) = fill.fill_time.parse::<Timestamp>()
            {
                let fill_ms = fill_ts.as_millisecond();
                if fill_ms < start_threshold {
                    continue;
                }
            }

            if let Some(end_threshold) = end_ms
                && let Ok(fill_ts) = fill.fill_time.parse::<Timestamp>()
            {

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Examine {error_msg} for the exchange's specific complaint.
  2. Grant the API key access to fills/executions data.
  3. Retry with backoff on transient exchange errors.
Defensive patterns

Strategy: try-catch

Try / catch

match adapter.request_fill_reports(start, end).await {
    Ok(fills) => reconcile(fills),
    Err(e) => log::error!("fills fetch failed: {e}"),
}

Prevention

When it happens

Trigger: Calling request_fill_reports when the get_fills endpoint returns result != Success — authentication failure, permission error, or exchange rejection.

Common situations: API key without fill/execution read permission; querying fills on the wrong account type; transient Kraken errors.

Related errors


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/7688cc21aeb77166. Report an issue: GitHub.