Execution Report (8)

Sent by the server whenever an order receives a fill, whenever the status of an order changes, or in response to a NewOrderSingle (D), OrderCancelRequest (F), or OrderStatusRequest (H) message from the client. You can receive execution reports across all subaccounts with one API key as long as the key has access to all subs. Otherwise, it would only receive execution reports for the subaccount it has access to.

TagNameValueDescription
35MsgType8Execution report message type
11ClOrdIDorder123Arbitrary client-selected string to identify the order; must be unique per subaccount for all time and limited to 64 characters
37OrderID123456Server-assigned order ID
17ExecIDd840c87b-ad98-47b1-95d3-4d41950fa776Unique execution ID. Equal to Fill ID if this message was the result of a fill
55SymbolBTC-PERPName of market (Symbol) to trade
54Side1"1": buy; "2": sell
38OrderQty1.1Order size in base units
44Price22000Order price
150ExecType1Execution Report Type (see table below for values mapping)
39OrdStatus0Order Status (see table below for values mapping)
14CumQty0.4Quantity of order that has already been filled
151LeavesQty0.8Quantity of order that is still open
84CxlQty0.0Quantity cancelled by self-trade prevention. Only present if the cancelled quantity is greater than zero. (More info on STP below)
60TransactTime20220525-08:26:38.989Time of the order update. Only present on order updates: order lives on the orderbook(150=0), order partially filled(150=1), filled(150=3), cancelled(150=4), resized(150=5). This will not always match with the fill timestamp on REST/WS given that the timestamp there represents when the fill was created, not when the order was updated.
31LastPx7999.25Fill price. Only present if this message was the result of a fill
32LastQty0.4Fill quantity. Only present if this message was the result of a fill
1057AggressorIndicatorY"Y": taker fill; "N": maker fill. Only present if this message was the result of a fill
1366FillTradeID101293Fill trade ID. Only present if this message was the result of a fill
6AvgPx7999.25Average fill price for all fills in order. Only present if this message was the result of a fill
12Commission0.0067307233000000Fee for trade, reported in USD (keep in mind that the fee have been charged in a different currency, which is reported over REST). Only present if this message was the result of a fill
13CommType3Always 3 (absolute)
103OrdRejReason3Reason the order was rejected (see table below). Only present on rejected NewOrderSingle (D) requests
58Text"error reason"Description of the reason the order was rejected (e.g., Too many requests). Only present on rejected NewOrderSingle (D) requests
5000LiquidationN"Y": messages corresponds to an on-market liquidation order. "N" or absent: it does not. FIX only reports on-market liquidations. Off-market liquidations are reported on REST and WS.

ExecType Values

The ExecType (150) field indicates the reason why this ExecutionReport was sent.

ExecTypeDescription
0New order. This means that the order has been processed / placed on the orderbook.
1New fill for order
3Order done (Fully filled)
4Order cancelled
5Order resized; possible for reduce-only orders and orders resized due to self-trade prevention
AResponse to a successful NewOrderSingle (D) request. This represents order ACK, or that the order passed the risk check process and is now waiting to be processed / placed in the orderbook.
8Response to a rejected NewOrderSingle (D) request
6Response to a successful OrderCancelRequest (F) request (Order queued for cancellation)
IResponse to a OrderStatusRequest (H) request

OrdStatus Values

The OrdStatus (39) field indicates the current status of the order.

OrdStatusDescription
APending order
0New order
1Partially filled order
3Fully filled order
4Cancelled order
5Resized order
6Pending cancel (cancel request accepted, but cancellation not yet processed)

OrdRejReason

The OrdRejReason (103) field indicates the reason an order was rejected (if rejected).

OrdRejReasonDescription
3Risk limits exceeded
99Too many requests
0Other errors

Below are various examples of FIX Execution Reports:

Pending Order (Order Ack):
8=FIX.4.2 9=251 35=8 49=FTX 56=**** 34=1039761 52=20210520-15:23:31.323 150=A 17=0e71c26d-9b3d-42f1-9760-c74a9459a841 37=501249457 11=order123 55=BTC-PERP 38=0.98 44=35593.0 54=2 39=A 14=0 151=0.98000000 6=0 10=026

New Order:
8=FIX.4.2 9=261 35=8 49=FTX 56=**** 34=1063736 52=20210520-12:41:43.416 150=0 17=bbf0ac39-91e4-47bd-aacf-f2ff356c6891 60=20210520-16:46:47.411 37=501249457 11=order123 55=BTC-PERP 38=0.98 44=35593.0 54=1 39=0 14=0.0 151=0.98 6=0 10=081

Fill For Order:
8=FIX.4.2 9=272 35=8 49=FTX 56=**** 34=403622 52=20210520-12:41:46.134 150=1 17=370905178 60=20210520-12:41:46.104 37=501249457 11=order123 55=BTC-PERP 38=.7270 44=35593.0 54=2 39=1 14=0.08 151=0.9 6=35591.0 31=35591.0 32=0.08 1366=184114783 1057=N 12=-1.0016660525 13=3 10=233

Fully Filled/Done:
8=FIX.4.2 9=261 35=8 49=FTX 56=**** 34=20 52=20210520-12:41:47.123 150=3 17=c9c8a56e-2159-445e-bb9d-acfeede977b2 60=20210520-12:41:47.112 37=501249457 11=order123 55=BTC-PERP 38=0.98 44=35593.0 54=2 39=3 14=0.98 151=0.0 6=35593.0 10=125

Pending Cancel:
8=FIX.4.2 9=251 35=8 49=FTX 56=**** 34=1063738 52=20210520-12:41:43.434 150=6 17=5f18f089-a9bc-414a-b0c2-452642e670c7 37=5012978452 11=order456 55=BTC-PERP 38=0.94000000 44=34933.0 54=1 39=6 14=0 151=0.94000000 6=0 10=055

Cancelled:
8=FIX.4.2 9=264 35=8 49=FTX 56=**** 34=8698 52=20220114-03:05:39.818 150=4 17=5f18f099-e187-4b44-9ff3-4e7f17f6a2b1 60=20220114-03:05:39.804 37=101222 11=order123 55=BTC-PERP 38=0.0102 44=42672.0 54=1 39=4 14=0.0 151=0.0 6=0 10=113

Liquidation:
8=FIX.4.2 9=355 35=8 49=FTX 56=***** 34=422 52=20220613-14:18:12.939 150=1 17=***** 60=20220613-14:18:12.922 37=154449557229 55=DOGE-PERP 38=11101.0 44=0.0536215 54=1 39=1 14=11101.0 151=0.0 6=0.0536025 5000=Y 31=0.05360250 32=11101.00000000 1366=4253978927 1057=Y 12=0.0892562028749999958332494998103356920182704925537109375 13=3 10=079

Order rejected due to rejectAfterTs:
8=FIX.4.2 9=301 35=8 49=FTX 56=**** 34=1234 52=20221102-14:00:05.992 150=8 17=aeef3e79-fcxg-9384-0195-e4g65t0cf424 11=12345 55=BTC-PERP 38=2 44=20300 54=1 39=8 14=0 151=0 6=0 103=0 58=400 Bad Request: Would place order after its rejectAfterTs 10=172 

Order cancelled due to rejectedAfterTs:
8=FIX.4.2 9=287 35=8 49=FTX 56=**** 34=1345073 52=20220802-23:51:03.707 150=4 17=3f54e085-aa29-4d7f-bf86-90e8dee97183 60=20220802-23:51:03.626 37=168731001088 11=UfHZNLDf20f0934000040318 55=SOL/USD 38=1394.38 44=39.81 54=1 39=4 14=0.0 151=0.0 6=0 58=User requested cancellation 10=239 

Self-trade Prevention (STP)

It is not possible to execute a trade against another order that was placed by the same account. If an order you placed would trade against another one of your orders on the books, both orders will be cancelled up to the amount of the smaller order's size. For example, you currently have a resting sell order that is top of the book of size 5, and place a taker buy order at the same price of size 3. Your taker order (the smaller order in this case) will be cancelled completely, and your maker order will be resized by the same amount (5 => 2). When an order is altered due to STP, the size that was cancelled to avoid the self-trade will appear under tag 84 (CxlQty). For the order that is completely cancelled, tag 84 will appear in the 150=3 Done For Day Execution Report (35=8). For the order that is resized, an Execution Report (35=8) of ExecType Resize (150=5) will be sent with tag 84 containing the cancelled quantity for the resize.

IOC orders

Please note for IOC orders the execution report will end with 150=4 instead of 150=3, we mirrored this behaviour from other exchanges and keep it in order to maintain conformity with other exchanges in the industry.