Skip to main content
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.
This is a pending event. Use combo_status_update with the same tx_hash for confirmation. A dropped or replaced Polygon transaction may never confirm.

Example

How to read it

The top-level trade fields describe the taker order. In the example, the taker wallet bought 40.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 four trades[] 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 in GET /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.

Subscribe