combo_execution streams a Polymarket combo trade from the mempool, before it
appears in the confirmed combo-trades API. It uses the same maker/taker trade
model as the standard settlement stream and includes every signed order in the
transaction.
Example
How to read it
The top-level trade fields describe the taker order. In the example, the taker wallet bought40.350877 YES combo shares at 0.57 for 22.999999 USDC.
Each trades[] row describes one signed order from that order maker’s
perspective. The complementary maker bought the NO position at 0.43 for the
same 40.350877 shares. This is the same convention used by the settlement
stream and by Exchange OrderFilled events.
size always means shares. amount_usdc always means dollars. For BUY orders,
the calldata’s maker amount is USDC, so PolyNode converts it to shares before
emitting size. For SELL orders, the maker amount is already shares. The
conversion is performed in both directions so clients do not need to interpret
raw fixed-point amounts.
price is the actual fill price, not merely the signed order’s limit price.
This matters when one taker order receives price improvement across multiple
maker orders.
amount_usdc is the gross fill value. fee is reported separately and is not
subtracted from it.
Multiple maker orders
A transaction with three maker orders and one taker order contains fourtrades[] rows and four order_hashes. These arrays are one-to-one and use the
same order: maker orders in calldata order, followed by the taker order. Use
trades[i].order_hash when working with an individual row.
Top-level taker_size and amount_usdc are the taker order’s total filled
shares and gross USDC value across all makers. taker_price is the effective
fill price (amount_usdc / taker_size), rounded to four decimal places. This
is why a live multi-maker payload can be longer than the two-order example
above without introducing any additional field types.
Mapping to the static combo-trades API
After confirmation, the same fill appears inGET /v3/wallets/{address}/combos/trades.
The static endpoint additionally has confirmed-only fields such as
block_number, log_index, and the on-chain timestamp.
Fields
Execution
Trade row
Leg row
position_id and the decoded structural fields are available directly from
calldata. The nested market object is included when the market metadata is in
PolyNode’s in-memory cache; it is omitted rather than fetched synchronously on
the latency-sensitive WebSocket path.

