{"record":{"id":"8a469bf8e9d8cc64","repo":"nautechsystems/nautilus_trader","slug":"unsupported-order-type-for-kraken-ws-batch-ty","errorCode":null,"errorMessage":"Unsupported order type for Kraken WS batch: {ty:?}","messagePattern":"Unsupported order type for Kraken WS batch: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/kraken/src/execution/spot.rs","lineNumber":1018,"sourceCode":"        anyhow::bail!(\n            \"Trailing stop orders are not yet supported on the Kraken WS batch path; use REST\",\n        );\n    }\n\n    if order.display_qty().is_some() {\n        anyhow::bail!(\n            \"Iceberg (display_qty) orders are not supported on the Kraken WS batch path; use REST\",\n        );\n    }\n\n    let kraken_order_type = match order_type {\n        OrderType::Market => KrakenOrderType::Market,\n        OrderType::Limit => KrakenOrderType::Limit,\n        OrderType::StopMarket => KrakenOrderType::StopLoss,\n        OrderType::StopLimit => KrakenOrderType::StopLossLimit,\n        OrderType::MarketIfTouched => KrakenOrderType::TakeProfit,\n        OrderType::LimitIfTouched => KrakenOrderType::TakeProfitLimit,\n        ty => anyhow::bail!(\"Unsupported order type for Kraken WS batch: {ty:?}\"),\n    };\n\n    let is_limit_order = matches!(\n        order_type,\n        OrderType::Limit | OrderType::StopLimit | OrderType::LimitIfTouched\n    );\n\n    if is_limit_order && order.price().is_none() {\n        anyhow::bail!(\"limit_price is required for batch order type {order_type:?}\");\n    }\n\n    let ws_tif =\n        compute_ws_time_in_force(is_limit_order, order.time_in_force(), order.expire_time())?;\n    let expire_time = match (ws_tif, order.expire_time()) {\n        (Some(KrakenTimeInForce::GoodTilDate), Some(ts)) => Some(format_expire_time(ts)),\n        _ => None,\n    };\n","sourceCodeStart":1000,"sourceCodeEnd":1036,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/kraken/src/execution/spot.rs#L1000-L1036","documentation":"The Kraken Spot WS batch path maps a fixed set of Nautilus order types (Market, Limit, StopMarket, StopLimit, MarketIfTouched, LimitIfTouched) onto Kraken order types. Any other order type reaches the catch-all arm and bails with this error naming the unsupported type.","triggerScenarios":"Calling `batch_add_via_ws` with an order whose OrderType is not in the supported set — e.g. TrailingStopMarket/Limit are caught earlier, so this typically fires for types like MarketToLimit or other exotic order types.","commonSituations":"Batching mixed order types where a less-common type slips through; strategies written for venues with broader order-type support being ported to Kraken Spot.","solutions":["Resubmit the order with a supported type (Market, Limit, StopMarket, StopLimit, MarketIfTouched, LimitIfTouched)","Send the unsupported order type via REST if Kraken's REST API supports it","Exclude it from the WS batch and handle it on a separate path"],"exampleFix":"// before\nbatch_add_via_ws(vec![market_to_limit_order]);\n// after\nlet order = factory.limit(...); // or submit the original order via REST\nbatch_add_via_ws(vec![order]);","handlingStrategy":"validation","validationCode":"fn is_ws_batch_order_type(ty: OrderType) -> bool {\n    matches!(ty, OrderType::Market | OrderType::Limit | OrderType::StopMarket\n        | OrderType::StopLimit | OrderType::MarketIfTouched | OrderType::LimitIfTouched)\n}\nif !is_ws_batch_order_type(order.order_type()) { submit_via_rest(order); }","typeGuard":"fn ws_batch_supported(ty: OrderType) -> bool {\n    matches!(ty, OrderType::Market | OrderType::Limit | OrderType::StopMarket\n        | OrderType::StopLimit | OrderType::MarketIfTouched | OrderType::LimitIfTouched)\n}","tryCatchPattern":"match batch_result {\n    Err(e) if e.to_string().contains(\"Unsupported order type\") => {\n        log::warn!(\"order type not supported on WS batch; retrying via REST\");\n        submit_via_rest(order)\n    }\n    r => r?,\n}","preventionTips":["Restrict strategy order types to the venue-supported set when targeting Kraken Spot","Route exotic order types to REST at the execution-client layer","Add a pre-submission order-type check in the strategy or risk engine"],"tags":["rust","kraken-spot","orders","batch","unsupported-order-type"],"backgroundTag":"unsupported-enum-value","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}