Execution Report
ExecutionReport (8) is the central response message in Bybit FIX API. It serves three distinct roles:
| Role | Trigger | ExecType |
|---|---|---|
| Order ACK | Direct response to NewOrderSingle (D) | 0 (New) or 8 (Rejected) |
| Fill notification | Order matched (partially or fully) | F (Trade) |
| Order status push | Passive order state change | 4, 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.
| Tag | Field | Description |
|---|---|---|
| 150 | ExecType | Execution event type (see ExecType Values) |
| 39 | OrdStatus | Current order status (see OrdStatus Values) |
| 37 | OrderID | Server-assigned order ID. Absent when order creation is rejected |
| 11 | ClOrdID | Client order ID (orderLinkId) |
| 103 | OrdRejReason | Rejection reason code (when ExecType=8) |
| 58 | Text | Error message or notes |
| 30010 | Category | Product type (spot) |
| 55 | Symbol | Symbol name |
| 54 | Side | 1 = Buy; 2 = Sell |
| 40 | OrdType | 1 = Market; 2 = Limit |
| 38 | OrderQty | Original order quantity |
| 44 | Price | Order price |
| 59 | TimeInForce | Time-in-force |
| 151 | LeavesQty | Remaining unfilled quantity |
| 30041 | LeavesValue | Remaining unfilled value |
| 14 | CumQty | Cumulative filled quantity |
| 6 | AvgPx | Average fill price |
| 30038 | CumValue | Cumulative filled value |
| 60 | TransactTime | Last update timestamp |
| 30039 | CreateTime | Order creation timestamp |
| 30040 | CancelType | Cancellation reason (e.g. CancelByUser, CancelBySmp) |
| 30013 | MarketUnit | Market order qty unit (baseCoin / quoteCoin). Returns UNKNOWN for limit orders. |
| 30014 | IsLeverage | Whether order uses margin (Y/N) |
Conditional order / TP-SL fields (echoed from order state):
| Tag | Field | Description |
|---|---|---|
| 30042 | StopOrderType | Stop, TakeProfit, StopLoss, OcoOrder |
| 99 | StopPx | Trigger price |
| 30026 | TakeProfitPrice | Take profit trigger price |
| 30027 | StopLossPrice | Stop loss trigger price |
| 30030 | TpLimitPrice | TP limit price |
| 30031 | SlLimitPrice | SL limit price |
| 30043 | OcoTriggerBy | OCO trigger condition (Spot OCO) |
SMP fields:
| Tag | Field | Description |
|---|---|---|
| 30018 | SmpType | Self-Match Prevention type |
| 30044 | SmpGroup | SMP group ID |
| 30045 | SmpOrderId | Counterparty order ID that triggered SMP |
Other fields:
| Tag | Field | Description |
|---|---|---|
| 30046 | LastPriceOnCreated | Market price at order submission |
| 30019 | RpiTakerAccess | Whether order matched RPI quotes |
| 30048 | RpiMatchedQty | Cumulative quantity matched via RPI |
| 30047 | BlockTradeId | Block trade identifier |
| 30022 | SlippageToleranceType | Slippage unit |
| 30034 | SlippageTolerance | Slippage 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.
- Delimiter tag:
30051 FillExecID— every entry in the NoFills group must start with this tag. Encountering a new30051marks 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.
| Tag | Field | Description |
|---|---|---|
| 30051 | FillExecID | Execution ID (execId) — delimiter tag; each entry starts with this field |
| 30052 | FillQty | Filled quantity in this execution |
| 30053 | FillPx | Fill price |
| 30054 | FillTime | Fill timestamp |
| 30055 | FillCommission | Fee amount |
| 30056 | FillCommCurr | Fee currency |
| 30059 | FillCommRate | Fee rate |
| 30057 | FillValue | Fill value |
| 30058 | FillIsMaker | Y if this fill was the maker side |
| 30063 | FillExecType | Trade or BlockTrade |
| 30064 | FillLeavesQty | Remaining qty after this fill |
| 30065 | FillSeq | Cross-sequence number for ordering across messages |
| 30066 | FillBlockTradeId | Block 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.
| Tag | Field | Description |
|---|---|---|
| 30061 | FeeCoin | Fee currency — delimiter tag; each entry starts with this field |
| 30062 | Fee | Total fee amount in this currency |
ExecType Values
| Value | Name | Description |
|---|---|---|
0 | New | Order accepted and resting |
4 | Canceled | Order canceled |
5 | Replaced | Replace 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 |
6 | PendingCancel | Cancel in progress. Not delivered in ExecutionReport — cancel requests are acknowledged via OrderCancelAck (XCA), which serves as confirmation of receipt. |
8 | Rejected | Order or request rejected |
A | PendingNew | Transitional 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. |
D | Deactivated | Conditional order deactivated |
E | PendingReplace | Amend 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. |
F | Trade | Order filled (partial or full) |
T | Triggered | Conditional order triggered |
U | Untriggered | Conditional order awaiting trigger |
OrdStatus Values
| Value | Name | Description |
|---|---|---|
0 | New | Active, unfilled |
1 | PartiallyFilled | Partially filled, still active |
2 | Filled | Fully filled |
4 | Canceled | Canceled |
6 | PendingCancel | Cancel request pending |
8 | Rejected | Rejected |
A | PendingNew | Submission pending |
D | Deactivated | Conditional order deactivated |
E | PendingReplace | Amend request pending |
F | PartiallyFilledCanceled | Partially filled then canceled |
T | Triggered | Conditional order triggered |
U | Untriggered | Conditional 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.