nautechsystems/nautilus_trader · error

Failed to get open orders: {error_msg}

Error message

Failed to get open orders: {error_msg}

What it means

request_order_status_reports fetches open orders via the Kraken Futures API and bails when the response result is not Success, propagating the exchange's error message. The adapter aborts building order status reports since the payload is invalid.

Source

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

        instrument_id: Option<InstrumentId>,
        start: Option<Timestamp>,
        end: Option<Timestamp>,
        open_only: bool,
    ) -> anyhow::Result<Vec<OrderStatusReport>> {
        let ts_init = self.generate_ts_init();
        let mut all_reports = Vec::new();

        let response = self
            .inner
            .get_open_orders()
            .await
            .map_err(|e| anyhow::anyhow!("get_open_orders failed: {e}"))?;

        if response.result != KrakenApiResult::Success {
            let error_msg = response
                .error
                .unwrap_or_else(|| "Unknown error".to_string());
            anyhow::bail!("Failed to get open orders: {error_msg}");
        }

        let position_sizes = if response
            .open_orders
            .iter()
            .any(|order| order.unfilled_size.is_none())
        {
            match self.inner.get_open_positions().await {
                Ok(response) if response.result == KrakenApiResult::Success => response
                    .open_positions
                    .into_iter()
                    .map(|position| (position.symbol, position.size))
                    .collect::<AHashMap<_, _>>(),
                Ok(response) => {
                    let error = response
                        .error
                        .unwrap_or_else(|| "Unknown error".to_string());
                    log::warn!("Failed to get open positions for order quantities: {error}");

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Inspect the wrapped {error_msg} to identify the exchange-side cause.
  2. Ensure the futures API key has order-read permissions.
  3. Check local clock sync (nonce invalidations) and retry with backoff.
Defensive patterns

Strategy: try-catch

Try / catch

match adapter.request_order_status_reports(None).await {
    Ok(reports) => process(reports),
    Err(e) => log::error!("open orders fetch failed: {e}"), // read embedded exchange error
}

Prevention

When it happens

Trigger: Calling request_order_status_reports when get_open_orders returns a non-Success result — bad signature, invalid nonce, insufficient key permissions, or exchange error.

Common situations: API key lacking 'open orders' read scope, clock drift causing nonce errors, or querying during exchange downtime.

Related errors


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