Place Order

Submit a new order over the authenticated WebSocket connection. The response confirms LTP has accepted the order. The order then goes through state changes (NEWOPENFILLED / CANCELLED) which are delivered via the Orders push channel.

Rate limit: 1200 requests per 60 seconds


Request

Send the following message after login to place an order.

{
  "id": "XXX",
  "action": "place_order",
  "args": {
    "clientOrderId": "XXXX",
    "sym": "BINANCE_SPOT_BTC_USDT",
    "side": "BUY",
    "orderType": "LIMIT",
    "timeInForce": "GTC",
    "orderQty": "1000",
    "limitPrice": "60000",
    "reduceOnly": "false"
  }
}
FieldTypeRequiredDescription
idStringNRequest ID
actionStringYOrder Must be place_order.
argsObjectYOrder parameters (see below).
> clientOrderIdStringNYour own order ID. Only lowercase letters (a-z) and digits (0-9). Max 32 characters recommended. If omitted, LTP generates one automatically.
> symStringYTrading pair identifier in Exchange_BusinessType_Base_Counter format. Examples: BINANCE_SPOT_BTC_USDT, BINANCE_PERP_BTC_USDT, OKX_PERP_ETH_USDT. Supported: SPOT / MARGIN / PERP on BINANCE and OKX; PERP on EDX.
> sideStringYBUY or SELL.
> orderTypeStringYLIMIT (rests on the book at a specified price) or MARKET (executes immediately at the best available price).
> timeInForceStringNControls how long a LIMIT order stays active. GTC (Good Till Cancel, default — stays open until filled or cancelled), IOC (Immediate Or Cancel — unfilled portion is cancelled immediately), FOK (Fill Or Kill — must fill entirely or be cancelled entirely), GTX (Post-only — rejected if it would match immediately, ensuring you always pay maker fees). Do not send for MARKET orders.
> orderQtyStringNOrder quantity. Required unless placing a spot market buy using quoteOrderQty. For Binance and EDX: base asset quantity (e.g. amount of BTC in BTC/USDT). For OKX: number of contracts.
> limitPriceStringNOrder price. Required when orderType is LIMIT.
> quoteOrderQtyStringNOrder amount in quote currency. Only for spot market buy orders (e.g. spend exactly 100 USDT to buy BTC). Cannot be used together with orderQty.
> reduceOnlyStringN"true" or "false". When "true", the order can only reduce an existing position and will never open or increase one. For derivatives only.
> positionSideStringNNONE for one-way mode (default). LONG or SHORT required in hedge mode.
> tpTriggerPriceStringNTake-profit trigger price. When the market reaches this price, a take-profit order is submitted automatically.
> tpTriggerTypeStringNPrice type for the take-profit trigger: LAST_PRICE (default) or MARK_PRICE.
> tpPriceStringNTake-profit execution price. "0" means execute at market price when triggered.
> slTriggerPriceStringNStop-loss trigger price. When the market reaches this price, a stop-loss order is submitted automatically.
> slTriggerTypeStringNPrice type for the stop-loss trigger: LAST_PRICE (default) or MARK_PRICE.
> slPriceStringNStop-loss execution price. "0" means execute at market price when triggered.

Response

The response is sent immediately after LTP receives the request. A successful response means the order has been accepted — not that it has been filled.

Success:

{
  "id": "XXXX",
  "event": "place_order",
  "code": 200000,
  "msg": "Success",
  "data": {
    "orderId": "XXXXX",
    "clientOrderId": "XXXXX"
  }
}

Failure:

{
  "id": "***",
  "event": "error",
  "code": "60009",
  "msg": "CreateOrder failed."
}
FieldTypeDescription
idStringRequest ID.
eventStringplace_order on success, error on failure.
codeLong200000 = order accepted. Any other value indicates an error — check msg for the reason.
msgString"Success" on success, or an error message explaining why the order was rejected.
dataObjectReturned on success only.
> orderIdStringLTP-assigned order ID. Use this for cancel or replace requests, and for querying order status.
> clientOrderIdStringEchoed from the request. Empty if clientOrderId was not provided.