Skip to main content
Coming soon: order placement over WebSocket becomes available on September 2, 2026, on the global platform only. The EU platform is not yet supported.
Place a One-Triggers-Other group: an entry order that, once it fills, automatically arms its own exit — a take-profit, a stop-loss, or an OCO pair of both. The exit needs no second request and survives a disconnect, which makes this the safer pattern for an unattended entry.

Rate limits

Place OTO group

Request parameters

The parameter shape breaks the pattern used by every other order method. The entry order is a nested object under trigger_order, carrying the full parameter set of whichever placement method trigger_order_type names. The exit is described by two bare prices at the top level rather than by nested order objects. The conditional_order_type value decides which exit prices are required. Exit prices are relative to the entry. For a buy entry the take-profit sits above and the stop-loss below; for a sell entry the reverse. Both are checked against the price bands around the entry price, and a price outside those bands returns error 250.

Response

The result object carries type "oto", the group id, the echoed conditional_order_type, the two exit prices as take_profit_price and stop_loss_price, and the trigger_order as a full order object. See the order object reference.
The exit legs do not exist yet. Until the entry fills, the exit legs hold no order ids and appear only as take_profit_price and stop_loss_price. Nothing can be canceled or modified per leg during that window — cancel the whole group through order_cancel_conditional using the group id.
Two constraints on the entry. The rpi flag is not allowed inside trigger_order, and margin_market_oco is not a valid trigger_order_type — it works only as an exit.

Error codes

Standard transport errors and the shared account, rate-limit, and region codes are listed in Order Management.