Skip to main content

The ExecutionReport [8] message is used to acknowledge various order lifecycle events including the acceptance, rejection, and expiry of orders, as well as providing details of matches (fills) against orders.
All orders entering the Platform are first either accepted or rejected using an Execution Report [8]. The order may then receive further Execution Reports [8] as necessary given their marketability and TimeInForce (59) constraints. For example:
  1. A badly-formatted order which fails validation upon entry will receive an ExecutionReport [8] with OrdStatus (39) = 8 (Rejected).
  2. A good for day order which is not immediately executable will receive an ExecutionReport [8] with OrdStatus (39) = 0 (New). Should it receive executions during the course of the day, then these will be notified in subsequent Execution Report [8] messages with OrdStatus (39) = 1 (Partially Filled) and/or 2 (Fully Filled).
  3. An order with TimeInForce (59) = 6 (good till time) will receive an ExecutionReport [8] with OrdStatus (39) = 0 (New) upon entry. If it remains unexecuted, it will expire at the indicated ExpireTime (126) with an Execution Report [8] message with OrdStatus (39) = C (Expired).
  4. A Fill Or Kill order with TimeInForce (59) = 4 which can not be fully executed will first receive an ExecutionReport [8] with OrdStatus (39) = 0 (New) and then an immediate Execution Report [8] message with OrdStatus (39) = C (Expired).
  5. An order with TimeInForce (59) = 3 (immediate or cancel) which can be partially filled upon entry will receive at least three ExecutionReport [8] messages; the first will indicate OrdStatus (39) = 0 (New), the next messages will detail the fill(s), and the final Execution Report [8] message will expire the remainder with OrdStatus (39) = C (Expired).

Table 16: ExecutionReport (8) message

TagNameReqTypeDescription
< Standard Header >Y35 = 8
1AccountNStringAccount reference if indicated on the original order
6AvgPxYPriceVolume-weighted average price of all trades against this order. May be zero for unexecuted orders.
11ClOrdIDYStringThe participant-assigned ClOrdID value as sent on the last order action message form the Participant (new order, amendment or cancel).
12CommissionNAmtCommission amount charged on this fill. Present on trades only.
13CommTypeNcharCommission calculation method. 3=Absolute (total dollar amount)
14CumQtyYQtyCumulative quantity so far for this order. May be zero for unexecuted orders.
17ExecIDYStringUnique identifier for the Execution Report as assigned by Polymarket US. Typically a 13-character alphanumeric string.
22SecurityIDSourceYStringIdentifies source of SecurityID (48) value. 8=Exchange symbol
31LastPxYPricePrice of this last fill. Will be zero for messages not relating to a trade.
32LastQtyYQtyQuantity traded on this last fill. Will be zero for messages not relating to a trade.
37OrderIDYStringUnique identifier for Order as assigned by Polymarket US. Typically a 13-character alphanumeric string.
38OrderQtyYQtyTotal order quantity (amended as necessary)
39OrdStatusYcharThe latest status of the order after any changes have been applied. 0=New, 1=Partially filled, 2=Fully filled, 4=Canceled, 8=Rejected, C=Expired
40OrdTypeYcharThe type of order. 2=Limit, 3=Stop, 4=Stop Limit, K=Market with left over as limit
41OrigClOrdIDNStringSent in the case of order amendment or cancellation. References the prior ClOrdID (11) value that the action amended/canceled.
44PriceYPriceOrder limit price (amended as necessary)
48SecurityIDYStringSecurity identifier; will always match Symbol (55).
54SideYchar1=Buy, 2=Sell
55SymbolYStringInstrument symbol
460ProductYIntIndicates the type of product the security is associated with. 1=AGENCY, 2=COMMODITY, 3=CORPORATE, 4=CURRENCY, 5=EQUITY, 6=GOVERNMENT, 7=INDEX, 8=LOAN, 9=MONEYMARKET, 10=MORTGAGE, 11=MUNICIPAL, 12=OTHER, 13=FINANCING, 14=ENERGY
59TimeInForceYcharEchoed from New Order Single. 0=Good for day, 1=Good till cancel, 3=Immediate or cancel, 4=Fill or kill, 6=Good till date
60TransactTimeYUTCTimeTimestamp when the business transaction represented by the message occurred.
99StopPxYPriceOrder stop price (amended as necessary). Will be zero for non stop orders.
103OrdRejReasonNintRejection reason (where OrdStatus = Rejected). 0=Broker/Exchange Option, 1=Unknown symbol, 2=Exchange closed (maintenance), 3=Order exceeds limit (price validation), 5=Unknown order, 6=Duplicate order (ClOrdID), 11=Unsupported order characteristic, 12=Surveillance option, 13=Incorrect quantity (lot size), 15=Unknown account (tag 1), 16=Price exceeds current price band, 18=Invalid price increment (tick size), 99=Other
119SettlCurrAmtNAmtPresent on trades only. Total amount of this last fill. Equal to LastPx (31) x LastQty (32)
126ExpireTimeNUTCTimeOrder expiry date (amended as necessary).
150ExecTypeYcharThe reason that the Polymarket US sent this Execution Report. 0=New, 4=Canceled, 5=Replaced, 8=Rejected, C=Expired, F=Trade
151LeavesQtyYQtyRemaining, unexecuted quantity left on the order. May be zero for fully filled orders.
381GrossTradeAmtNAmtPresent on orders which have been filled. Total amount traded across all fills for this order. Equal to AvgPx (6) x CumQty (38).
581AccountTypeNInt1=CUSTOMER, 2=NON_CUSTOMER, 3=HOUSE_TRADER, 4=FLOOR_TRADER, 6=NON_CUSTOMER_CROSS_MARGINED, 7=HOUSE_TRADER_CROSS_MARGINED, 8=JOINT_BACK_OFFICE, 9=EQUITIES_SPECIALIST, 10=OPTIONS_MARKET_MAKER, 11=OPTIONS_FIRM_ACCOUNT, 12=AGGREGATED_CUSTOMER_AND_NON_CUSTOMER, 13=AGGREGATED_MULTIPLE_CUSTOMERS, 14=LIQUIDITY_PROVIDER, 15=OPERATING, 16=CLEARING_FUND, 17=FUTURES_MARKET_MAKER
582CustOrderCapacityNInt1=OWN_ACCOUNT, 2=PROPRIETARY_ACCOUNT, 3=FINANCIAL_ADVISOR, 4=ALL_OTHER, 5=RETAIL_CUSTOMER
453NoPartyIDsNIntNumber of PartyID (448), PartyIDSource (447), and PartyRole (452) entries
→ 448PartyIDNStringParty identifier/code
→ 447PartyIDSourceNcharD=Proprietary
→ 452PartyRoleNInt1=EXECUTING_FIRM, 3=CLIENT_ID, 24=CUSTOMER_ACCOUNT
828TrdTypeNintPresent on trades only. 0=Regular trade
880TrdMatchIDCStringAlways populated for trades. Note that buyer and seller will receive the same value. Will match the TradeID (1003) value on market data updates. Typically a 13-character alphanumeric string.
1028ManualOrderIndicatorNBooleanIndicates if the order was initially received manually (as opposed to electronically)
1057AggressorIndicatorCBooleanAlways populated for trades. Identifies whether this order was the aggressor in the trade.
378ExecRestatementReasonNintIndicates that the resting order has been canceled as a result of self-match prevention. 99=Self-match prevention
110MinQtyNQtyMinimum required execution quantity for the order (if specified)
6127ConditionTriggerMethodNintThe reference price used for triggering the stop order. 2=Last price, 5=Settlement price
7928SelfMatchPreventionIDNStringUnique identifier for the self-match prevention instruction.
8000SelfMatchPreventionInstructionNStringSelf-match instruction. O=Cancel oldest (resting) order, N=Cancel newest (aggressive) order
< Standard Trailer >Y

Figure 5: Simple limit order for 150 is acknowledged, partially filled for 100, and fully filled


Example 6: Acknowledgement of new limit order to buy 1,000 shares at 50.00
8=FIXT.1.1 | 9=269 | 35=8 | 34=14 | 49=TARGET | 52=20240517-19:00:28 | 56=SENDER | 57=SENDERSUB | 1=ACCT | 6=0.00 | 11=1182560819 | 14=0 | 17=1HPT7DPFMC5KW | 22=8 | 31=0.00 | 32=0 | 37=1HQ4A5T0EDM00 | 38=1000 | 39=0 | 40=2 | 44=50.00 | 48=GOOG | 54=1 | 55=GOOG | 59=0 | 60=20240517-19:00:28.678960817 | 99=0.00 | 150=0 | 151=1000 | 581=3 | 582=1 | 10=088 |
Example 7: Execution of 500 shares at a price of 50.00
8=FIXT.1.1 | 9=338 | 35=8 | 34=33 | 49=TARGET | 52=20240517-19:06:47.985808615 | 56=SENDER | 57=SENDERSUB | 1=ACCT | 6=50.00 | 11=1182560826 | 14=500 | 17=1HPT7DPFMC5M5 | 22=8 | 31=50.00 | 32=500 | 37=1HQ4A5T0EDM07 | 38=500 | 39=2 | 40=2 | 44=50.00 | 48=GOOG | 54=2 | 55=GOOG | 59=0 | 60=20240517-19:06:47.977567695 | 99=0.00 | 119=25000.00 | 150=F | 151=0 | 381=25000.00 | 581=3 | 582=1 | 828=0 | 880=1HPT7DPFMC5M4 | 1057=Y | 10=116 |
Example 8: Expiry of FOK order (without execution)
8=FIXT.1.1 | 9=275 | 35=8 | 34=43 | 49=TARGET | 52=20240517-19:09:23.494862156 | 56=SENDER | 57=SENDERSUB | 1=ACCT | 6=0.00 | 11=1182560830 | 14=0 | 17=1HPT7DPFMC5MB | 22=8 | 31=0.00 | 32=0 | 37=1HQ4A5T0EDM0A | 38=500 | 39=C | 40=2 | 44=50.01 | 48=GOOG | 54=2 | 55=GOOG | 59=4 | 60=20240517-19:09:23.491276593 | 99=0.00 | 150=C | 151=0 | 581=3 | 582=1 | 10=201 |