Skip to main content

Place Order

important
  • Category (30010) is required and must be spot.
  • For market orders, use MarketUnit (30013) to specify whether OrderQty is denominated in base coin or quote coin.
  • For limit orders, Price (44) is required.
  • When the order is rejected (ExecType=8), the ExecutionReport omits both OrderID (37) and ClOrdID (11) — correlate rejects to requests via ReqId (30006) or by send order.

Message Type

NewOrderSingle — MsgType D

Request Fields

TagFieldRequiredTypeDescription
30010CategoryYStringProduct type. Currently spot only
55SymbolYStringSymbol name, e.g. BTCUSDT (uppercase)
54SideYChar1 = Buy; 2 = Sell
40OrdTypeYChar1 = Market; 2 = Limit
38OrderQtyYQtyOrder quantity. For market orders, the unit is specified by MarketUnit.
44PriceNPriceOrder price. Required for Limit orders
11ClOrdIDNStringClient order ID (orderLinkId). Max 36 characters. Scoped to account (UID), not session — a ClOrdID held by an active order cannot be reused. ClOrdIDs of terminated orders are eligible for reuse after 360 days.
59TimeInForceNChar1=GTC; 3=IOC; 4=FOK; P=PostOnly; R=RPI. Defaults to GTC for limit orders. Market orders are always IOC regardless of this field.
30013MarketUnitNStringUnit for OrderQty in market orders: baseCoin (default for sell) or quoteCoin (default for buy)
30014IsLeverageNBooleanY = margin trading; N = spot (default)
30018SmpTypeNStringSelf-Match Prevention: None, CancelTaker, CancelMaker, CancelBoth
30019RpiTakerAccessNBooleanWhether this order may match against RPI quotes. If Y, OrdType must be 1 (Market).
30022SlippageToleranceTypeNStringSlippage unit for market orders: TickSize or Percent
30034SlippageToleranceNStringMax slippage value, used with SlippageToleranceType
30024OrderFilterNStringOrder (default); tpslOrder; StopOrder
99StopPxNPriceTrigger price for conditional orders. The trigger direction (above or below the current price) is determined automatically by the system based on the order side and StopPx relative to the market.
30026TakeProfitPriceNPriceTake profit trigger price
30027StopLossPriceNPriceStop loss trigger price
30028TpOrderTypeNStringTP order type when triggered: Market or Limit
30029SlOrderTypeNStringSL order type when triggered: Market or Limit
30030TpLimitPriceNPriceTP limit price (required when TpOrderType=Limit)
30031SlLimitPriceNPriceSL limit price (required when SlOrderType=Limit)

Response

The server responds with an ExecutionReport (8). The ExecType (150) field indicates the outcome:

ExecTypeOrdStatusMeaning
A (PendingNew)A (PendingNew)Order acceptance transitional state, returned immediately after NewOrderSingle; followed by 0 (New) or 8 (Rejected) as the terminal state
0 (New)0 (New)Order accepted and resting on the book
F (Trade)1 / 2Order immediately filled (partial or full)
8 (Rejected)8 (Rejected)Order rejected; see OrdRejReason (103) and Text (58)

Key response fields:

TagFieldDescription
37OrderIDServer-assigned order ID. Absent when rejected
11ClOrdIDEcho of your ClOrdID. Absent on rejection
150ExecTypeExecution event type
39OrdStatusCurrent order status
103OrdRejReasonRejection reason code (when ExecType=8)
58TextStatus text. Typically OK on acceptance; error description on rejection
151LeavesQtyRemaining unfilled quantity
14CumQtyTotal filled quantity
6AvgPxAverage fill price
60TransactTimeLast update time

For fill details when the order is immediately matched (ExecType=F), see ExecutionReport.


Request Example

8=FIX.4.4|9=238|35=D|34=3|49=FIX_CLIENT|52=20260824-09:27:06.073|56=BYBIT_FIX_SERVER|
30002=1787563626073|30001=5000|
30010=spot|55=BTCUSDT|54=1|40=2|59=1|38=0.001|44=50000|
11=13eafa49-4688-4727-9136-021da28c9d0b|30006=5e14153d-363d-4937-b4ec-f4c64e526979|10=037|

Note: | represents SOH (0x01) in actual wire format.

PendingNew Ack (ExecType=A)

Compact ack delivered immediately after NewOrderSingle is submitted. In OnlyAcks mode this is the only response; in Everything mode it arrives first, followed by the full ExecType=0 (New) report.

  • Rate-limit headers (30005 TraceId, 30007 BapiLimit, 30008 BapiLimitStatus, 30009 BapiLimitResetTimestamp) are returned on this initial ack only — subsequent state pushes omit them.
  • If the request carried 30006 ReqId, this ack echoes it back (e.g. 30006=5e14153d-...); the subsequent state push does not carry 30006.
8=FIX.4.4|9=269|35=8|34=2|49=BYBIT_FIX_SERVER|52=20260824-09:27:06.329|56=FIX_CLIENT|
30005=3cc714d627c389ed2911d77bc9cc1580|30006=5e14153d-363d-4937-b4ec-f4c64e526979|30007=20|30008=19|30009=1787563626328|
11=13eafa49-4688-4727-9136-021da28c9d0b|37=2288644008836434688|
150=A|39=A|58=OK|10=163|

Response Example (Accepted) (ExecType=0)

In Everything mode, after the PendingNew Ack the server pushes the full New order state via ExecutionReport (35=8). This push carries the full order fields but does not carry rate-limit headers or 30006 ReqId.

8=FIX.4.4|9=359|35=8|34=3|49=BYBIT_FIX_SERVER|52=20260824-09:27:06.333|56=FIX_CLIENT|
11=13eafa49-4688-4727-9136-021da28c9d0b|37=2288644008836434688|150=0|39=0|
30010=spot|55=BTCUSDT|54=1|40=2|38=0.001000|44=50000.0|59=1|30013=UNKNOWN|30014=N|
151=0.001|30041=50.0000000|14=0|30038=0.0000000|
60=20260824-09:27:06.328|30039=20260824-09:27:06.328|
30018=None|30019=N|30046=77286.8|10=085|

Response Example (Rejected) (ExecType=8)

On rejection, 37/11 are absent — correlate by 30006 ReqId or send order. 103 is a Bybit internal error code (e.g. 170140 = order value below the minimum).

8=FIX.4.4|9=248|35=8|34=2|49=BYBIT_FIX_SERVER|52=20260824-09:52:16.540|56=FIX_CLIENT|
30005=748c8e5b5094fd0e22cdac8441066c87|30006=6dac881c-8f85-4272-8e31-2917612d788e|30007=20|30008=19|30009=1787565136538|
150=8|39=8|103=170140|58=Order value exceeded lower limit.|10=239|