Skip to main content

Execution Report

ExecutionReport (8) is the central response message in Bybit FIX API. It serves three distinct roles:

RoleTriggerExecType
Order ACKDirect response to NewOrderSingle (D)0 (New) or 8 (Rejected)
Fill notificationOrder matched (partially or fully)F (Trade)
Order status pushPassive order state change4, 5, etc.

Roles 2 and 3 are only delivered when ResponseMode=1 (Everything). See ResponseMode.


Order-Level Fields

These fields describe the overall order state and are present in every ExecutionReport.

TagFieldDescription
150ExecTypeExecution event type (see ExecType Values)
39OrdStatusCurrent order status (see OrdStatus Values)
37OrderIDServer-assigned order ID. Absent when order creation is rejected
11ClOrdIDClient order ID (orderLinkId)
103OrdRejReasonRejection reason code (when ExecType=8)
58TextError message or notes
30010CategoryProduct type (spot)
55SymbolSymbol name
54Side1 = Buy; 2 = Sell
40OrdType1 = Market; 2 = Limit
38OrderQtyOriginal order quantity
44PriceOrder price
59TimeInForceTime-in-force
151LeavesQtyRemaining unfilled quantity
30041LeavesValueRemaining unfilled value
14CumQtyCumulative filled quantity
6AvgPxAverage fill price
30038CumValueCumulative filled value
60TransactTimeLast update timestamp
30039CreateTimeOrder creation timestamp
30040CancelTypeCancellation reason (e.g. CancelByUser, CancelBySmp)
30013MarketUnitMarket order qty unit (baseCoin / quoteCoin). Returns UNKNOWN for limit orders.
30014IsLeverageWhether order uses margin (Y/N)

Conditional order / TP-SL fields (echoed from order state):

TagFieldDescription
30042StopOrderTypeStop, TakeProfit, StopLoss, OcoOrder
99StopPxTrigger price
30026TakeProfitPriceTake profit trigger price
30027StopLossPriceStop loss trigger price
30030TpLimitPriceTP limit price
30031SlLimitPriceSL limit price
30043OcoTriggerByOCO trigger condition (Spot OCO)

SMP fields:

TagFieldDescription
30018SmpTypeSelf-Match Prevention type
30044SmpGroupSMP group ID
30045SmpOrderIdCounterparty order ID that triggered SMP

Other fields:

TagFieldDescription
30046LastPriceOnCreatedMarket price at order submission
30019RpiTakerAccessWhether order matched RPI quotes
30048RpiMatchedQtyCumulative quantity matched via RPI
30047BlockTradeIdBlock trade identifier
30022SlippageToleranceTypeSlippage unit
30034SlippageToleranceSlippage value

Fill Details Group (NoFills)

Present only when ExecType=F (Trade). Each entry in the group represents one individual execution.

NoFills (30050) is a NumInGroup field that declares the count of fill entries that follow.

Repeating group parsing rules
  • Delimiter tag: 30051 FillExecID — every entry in the NoFills group must start with this tag. Encountering a new 30051 marks the beginning of the next entry.
  • Field order: fields within an entry must appear in the order declared below. Optional fields may be omitted, but their relative position is fixed. FIX engines (QuickFIX, Onix, etc.) are order-sensitive — out-of-order tags will trigger a parse error.
TagFieldDescription
30051FillExecIDExecution ID (execId) — delimiter tag; each entry starts with this field
30052FillQtyFilled quantity in this execution
30053FillPxFill price
30054FillTimeFill timestamp
30055FillCommissionFee amount
30056FillCommCurrFee currency
30059FillCommRateFee rate
30057FillValueFill value
30058FillIsMakerY if this fill was the maker side
30063FillExecTypeTrade or BlockTrade
30064FillLeavesQtyRemaining qty after this fill
30065FillSeqCross-sequence number for ordering across messages
30066FillBlockTradeIdBlock trade ID if applicable

When an order generates multiple fills simultaneously (e.g. sweeps multiple price levels), the ExecutionReport contains a single message with NoFills > 1. The order-level CumQty (14) and AvgPx (6) reflect the aggregated state after all fills in the group.

Multiple-fill wire example (NoFills=2):

...30050=2|
30051=fill_A|30052=0.001|30053=50000|30054=20260101-00:00:00.000|...|
30051=fill_B|30052=0.002|30053=50001|30054=20260101-00:00:00.001|...

Every occurrence of 30051 starts a new entry; once the group ends, parsing returns to order-level fields (or the next repeating group).


Cumulative Fee Details Group (NoFeeDetails)

Optional. Provides per-coin fee aggregates at the order level.

NoFeeDetails (30060) is a NumInGroup field that declares the count of fee entries that follow.

  • Delimiter tag: 30061 FeeCoin — every entry must start with this tag.
  • Fields within an entry follow the fixed order 30061 → 30062; both fields are required.
TagFieldDescription
30061FeeCoinFee currency — delimiter tag; each entry starts with this field
30062FeeTotal fee amount in this currency

ExecType Values

ValueNameDescription
0NewOrder accepted and resting
4CanceledOrder canceled
5ReplacedReplace event. After an amend is accepted, an ExecutionReport with this ExecType carries the amended order state; the accompanying OrdStatus is 0 (New) — UTA's OrdStatus does not include a Replaced value
6PendingCancelCancel in progress. Not delivered in ExecutionReport — cancel requests are acknowledged via OrderCancelAck (XCA), which serves as confirmation of receipt.
8RejectedOrder or request rejected
APendingNewTransitional state for new orders. In OnlyAcks mode, a NewOrderSingle always returns a PendingNew report before the final New or Rejected. In Everything mode, both PendingNew and New reports are delivered but may arrive out of order.
DDeactivatedConditional order deactivated
EPendingReplaceAmend in progress. Not delivered in ExecutionReport — amend requests are acknowledged via OrderAmendAck (XAA). The amended order state is subsequently delivered via an ExecutionReport with ExecType=5 (Replaced); its OrdStatus remains 0 (New) since UTA's OrdStatus has no Replaced value.
FTradeOrder filled (partial or full)
TTriggeredConditional order triggered
UUntriggeredConditional order awaiting trigger

OrdStatus Values

ValueNameDescription
0NewActive, unfilled
1PartiallyFilledPartially filled, still active
2FilledFully filled
4CanceledCanceled
6PendingCancelCancel request pending
8RejectedRejected
APendingNewSubmission pending
DDeactivatedConditional order deactivated
EPendingReplaceAmend request pending
FPartiallyFilledCanceledPartially filled then canceled
TTriggeredConditional order triggered
UUntriggeredConditional order awaiting trigger

Examples

Order Accepted (ExecType=0)

Delivered in Everything mode after the PendingNew ack. Carries the full order state.

8=FIX.4.4|9=359|35=8|34=3|49=BYBIT_FIX_SERVER|52=20260819-06:14:25.300|56=FIX_CLIENT|
11=6f008a79-7f4e-490f-a84f-b8953c45ab2d|37=2284923149198134016|150=0|39=0|
30010=spot|55=BTCUSDT|54=1|40=2|38=0.001000|44=30000.0|59=1|30013=UNKNOWN|30014=N|
151=0.001|30041=30.0000000|14=0|30038=0.0000000|
60=20260819-06:14:25.296|30039=20260819-06:14:25.295|
30018=None|30019=N|30046=64590.8|10=213|

Fully Filled (ExecType=F, single fill)

8=FIX.4.4|9=595|35=8|34=3|49=BYBIT_FIX_SERVER|52=20260819-04:53:16.267|56=FIX_CLIENT|
37=2284882304788957952|11=5042aecf-8a2a-44f5-9e96-4ba02fb4395a|150=F|39=2|
30010=spot|55=BTCUSDT|54=1|40=2|38=0.001000|44=67553.3|59=1|30013=UNKNOWN|30014=N|
151=0|30041=0.0000000|14=0.001|6=64627.5|30038=64.6275000|
60=20260819-04:53:16.262|30039=20260819-04:53:16.262|
30018=None|30019=N|30046=64627.4|
30050=1|30051=2100000000187175357|30052=0.001|30053=64627.5|30054=20260819-04:53:16.262|30055=0.000000427|30056=BTC|30059=0.000427|30057=64.6275|30058=N|30063=Trade|30064=0|30065=2178173800|
30060=1|30061=BTC|30062=0.000000427|
10=223|

Order Rejected (ExecType=8)

8=FIX.4.4|9=130|35=8|49=BYBIT_FIX_SERVER|56=FIX_CLIENT|34=2|52=20240101-08:00:01.010|
30005=trace-abc125|30007=120|30008=119|30009=1704096060000|
11=my-order-002|150=8|39=8|103=99|58=Insufficient balance|10=xxx|

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