nautechsystems/nautilus_trader · error

Unsupported trigger type for Kraken Spot: {other:?} (only La

Error message

Unsupported trigger type for Kraken Spot: {other:?} (only LastPrice and IndexPrice supported)

What it means

Kraken Spot only supports trigger references based on the last traded price or the Kraken index price. The adapter maps TriggerType::IndexPrice to Kraken's "index" trigger and leaves LastPrice/Default unset; any other TriggerType (e.g. MarkPrice) has no Kraken Spot equivalent, so it is rejected rather than mis-mapped.

Source

Thrown at crates/adapters/kraken/src/http/spot/client.rs:3113

            if let Some(trigger) = trigger_price {
                builder.price(trigger.to_string());
            }

            if let Some(limit) = price {
                builder.price2(limit.to_string());
            }
        } else if let Some(limit) = price {
            builder.price(limit.to_string());
        }

        if is_conditional {
            match trigger_type {
                Some(TriggerType::IndexPrice) => {
                    builder.trigger("index".to_string());
                }
                Some(TriggerType::LastPrice | TriggerType::Default) | None => {}
                Some(other) => {
                    anyhow::bail!(
                        "Unsupported trigger type for Kraken Spot: {other:?} (only LastPrice and IndexPrice supported)"
                    );
                }
            }
        }

        if !oflags.is_empty() {
            builder.oflags(oflags.join(","));
        }

        if let Some(tif) = timeinforce {
            builder.timeinforce(tif);
        }

        if let Some(expire) = expiretm {
            builder.expiretm(expire);
        }

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Change trigger_type to TriggerType::LastPrice or TriggerType::IndexPrice for Kraken Spot orders.
  2. Omit trigger_type (None) to use the venue default, which maps to last-price triggering.
  3. Add venue-conditional logic that substitutes an equivalent trigger type (or drops it) when the venue is Kraken Spot.

Example fix

// before
trigger_type: TriggerType::MarkPrice,
// after
trigger_type: TriggerType::LastPrice,
Defensive patterns

Strategy: validation

Validate before calling

const KRAKEN_SPOT_TRIGGERS: &[TriggerType] = &[TriggerType::LastPrice, TriggerType::Default, TriggerType::IndexPrice];
if let Some(tt) = trigger_type {
    if !KRAKEN_SPOT_TRIGGERS.contains(tt) {
        return Err(format!("Kraken Spot does not support {tt:?}"));
    }
}

Try / catch

match submit_result {
    Err(e) if e.to_string().contains("Unsupported trigger type") => {
        // fall back to TriggerType::LastPrice or omit it
    }
    r => r?,
}

Prevention

When it happens

Trigger: Submitting a Kraken Spot order whose trigger_type is Some(TriggerType) other than LastPrice, Default, IndexPrice, or None — most typically TriggerType::MarkPrice.

Common situations: Reusing order parameters configured for futures venues (where MarkPrice triggers are standard) against the Kraken Spot adapter; a shared config file carrying mark-price triggers across venues.

Related errors


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