Skip to main content
The trading channel sends every order-flow event from the Polymarket exchange contracts (CTFExchange and NegRiskCTFExchange, v1 and v2). We decode each one and send it after the transaction is confirmed on-chain.
Exchange fees are no longer on this channel. They moved to the fees channel. ERC-1155 position transfers are on transfers.

Subscribe

{
  "action": "subscribe",
  "id": "s1",
  "channel": "trading"
}
With no filters, you get every confirmed order-flow event from all markets. Add filters to narrow to certain traders, markets, tokens, or trade sizes.

Filters

FilterTypeRequiredDescription
walletsstring[]NoHex addresses (0x…). Empty or left out means all traders. Otherwise, only events where a listed address is the maker or taker.
market_idsstring[]NoCondition IDs as bytes32 hex strings. Keeps events for the listed markets.
token_idsstring[]NoToken IDs as decimal strings. Keeps events for the listed outcome tokens.
min_usdintegerNoSmallest trade size in whole USD. Empty or left out means all sizes. Only kept if a fill’s USD size is at or above this threshold.
market_ids and token_ids are one axis — a market’s condition id and its outcome token ids both identify it, so an event matches if it hits either list. All axes combine with AND: a wallet and a market and a size, if you set several. See Filters for the full combination rule.
{
  "action": "subscribe",
  "id": "s1",
  "channel": "trading",
  "filters": { "wallets": ["0x1234…abcd"], "min_usd": 100 }
}
min_usd is a trading-only filter. The large_trades channel was removed — subscribe to trading with min_usd to get only large fills.

Events

This channel sends all nine exchange order-flow events. See Onchain Data for the part each event plays in the full order lifecycle.
Eventdata.typeDescription
OrderFilledV1order_filled_v1A fill on exchange v1. Carries maker, taker, asset ids, and amounts.
OrderFilledV2order_filled_v2A fill on exchange v2. Also adds side, tokenId, builder, and metadata.
OrdersMatchedV1orders_matched_v1The matched order pair around a v1 fill. Shows how taker intent met maker liquidity.
OrdersMatchedV2orders_matched_v2The matched order pair around a v2 fill. Also includes side and tokenId.
OrderCancelledorder_cancelledAn order cancelled by its hash, before it filled.
OrderPreapprovedorder_preapprovedA v2 order preapproved for later execution, by its hash.
OrderPreapprovalInvalidatedorder_preapproval_invalidatedA v2 order preapproval invalidated, by its hash.
TradingPausedtrading_pausedAn operator paused trading on an exchange. Carries the pauser address.
TradingUnpausedtrading_unpausedTrading resumed after a pause. Carries the pauser address.
Do you want a trader’s full activity, not just order flow? That means transfers, redemptions, splits, and position moves. Use the wallets filter channel instead. It sends every event type that involves the address.

Payloads

Every frame wraps the event in the standard envelope (type, id, channel, confirmed, data) shown on Frames. Below, each block is the data object for one event — its type discriminator plus every field the ABI decodes. A full frame looks like:
{
  "type": "event",
  "id": "s1",
  "channel": "trading",
  "confirmed": true,
  "data": {
    "type": "order_filled_v2",
    "orderHash": "0x…",
    "maker": "0x…",
    "…": "…"
  }
}

order_filled_v1

OrderFilled on CTFExchange v1 / NegRiskCTFExchange v1. The v1 signature identifies both sides of the trade with asset ids, not a single tokenId.
{
  "type": "order_filled_v1",
  "orderHash": "0x…",
  "maker": "0x…",
  "taker": "0x…",
  "makerAssetId": "0x…",
  "takerAssetId": "0x…",
  "makerAmountFilled": "0x…",
  "takerAmountFilled": "0x…",
  "fee": "0x…"
}
FieldSolidity typeDescription
typestringorder_filled_v1.
orderHashbytes32 (hex)Hash of the filled order.
makeraddress (hex)Maker address.
takeraddress (hex)Taker address.
makerAssetIduint256 (hex)Asset id the maker gave. 0 means USDC collateral.
takerAssetIduint256 (hex)Asset id the taker gave. 0 means USDC collateral.
makerAmountFilleduint256 (hex)Amount of the maker asset filled.
takerAmountFilleduint256 (hex)Amount of the taker asset filled.
feeuint256 (hex)Fee recorded on the fill.

order_filled_v2

OrderFilled on CTFExchange v2 / NegRiskCTFExchange v2. The v2 signature replaces the asset-id pair with a side and a single tokenId, and adds builder and metadata.
{
  "type": "order_filled_v2",
  "orderHash": "0x…",
  "maker": "0x…",
  "taker": "0x…",
  "side": 0,
  "tokenId": "0x…",
  "makerAmountFilled": "0x…",
  "takerAmountFilled": "0x…",
  "fee": "0x…",
  "builder": "0x…",
  "metadata": "0x…"
}
FieldSolidity typeDescription
typestringorder_filled_v2.
orderHashbytes32 (hex)Hash of the filled order.
makeraddress (hex)Maker address.
takeraddress (hex)Taker address.
sideuint80 = buy, 1 = sell.
tokenIduint256 (hex)Outcome token traded.
makerAmountFilleduint256 (hex)Amount the maker filled.
takerAmountFilleduint256 (hex)Amount the taker filled.
feeuint256 (hex)Fee recorded on the fill.
builderbytes32 (hex)Builder tag attached to the order.
metadatabytes32 (hex)Order metadata.

orders_matched_v1

OrdersMatched on the v1 exchanges. The match record around a v1 fill — the taker order hash and how much of each asset moved.
{
  "type": "orders_matched_v1",
  "takerOrderHash": "0x…",
  "takerOrderMaker": "0x…",
  "makerAssetId": "0x…",
  "takerAssetId": "0x…",
  "makerAmountFilled": "0x…",
  "takerAmountFilled": "0x…"
}
FieldSolidity typeDescription
typestringorders_matched_v1.
takerOrderHashbytes32 (hex)Hash of the taker order that drove the match.
takerOrderMakeraddress (hex)Maker of the taker order.
makerAssetIduint256 (hex)Asset id given by the maker side.
takerAssetIduint256 (hex)Asset id given by the taker side.
makerAmountFilleduint256 (hex)Total maker asset filled across the match.
takerAmountFilleduint256 (hex)Total taker asset filled across the match.

orders_matched_v2

OrdersMatched on the v2 exchanges. Like v1, but carries a side and single tokenId instead of the asset-id pair.
{
  "type": "orders_matched_v2",
  "takerOrderHash": "0x…",
  "takerOrderMaker": "0x…",
  "side": 0,
  "tokenId": "0x…",
  "makerAmountFilled": "0x…",
  "takerAmountFilled": "0x…"
}
FieldSolidity typeDescription
typestringorders_matched_v2.
takerOrderHashbytes32 (hex)Hash of the taker order that drove the match.
takerOrderMakeraddress (hex)Maker of the taker order.
sideuint80 = buy, 1 = sell.
tokenIduint256 (hex)Outcome token matched.
makerAmountFilleduint256 (hex)Total maker amount filled across the match.
takerAmountFilleduint256 (hex)Total taker amount filled across the match.

order_cancelled

OrderCancelled. An order cancelled by its hash before it filled.
{ "type": "order_cancelled", "orderHash": "0x…" }
FieldSolidity typeDescription
typestringorder_cancelled.
orderHashbytes32 (hex)Hash of the cancelled order.

order_preapproved

OrderPreapproved (v2). An order preapproved for later execution, by its hash.
{ "type": "order_preapproved", "orderHash": "0x…" }
FieldSolidity typeDescription
typestringorder_preapproved.
orderHashbytes32 (hex)Hash of the preapproved order.

order_preapproval_invalidated

OrderPreapprovalInvalidated (v2). A preapproval revoked, by the order hash.
{ "type": "order_preapproval_invalidated", "orderHash": "0x…" }
FieldSolidity typeDescription
typestringorder_preapproval_invalidated.
orderHashbytes32 (hex)Hash of the order whose preapproval was invalidated.

trading_paused

TradingPaused. An operator paused trading on an exchange.
{ "type": "trading_paused", "pauser": "0x…" }
FieldSolidity typeDescription
typestringtrading_paused.
pauseraddress (hex)Address that paused trading.

trading_unpaused

TradingUnpaused. Trading resumed after a pause.
{ "type": "trading_unpaused", "pauser": "0x…" }
FieldSolidity typeDescription
typestringtrading_unpaused.
pauseraddress (hex)Address that resumed trading.

Pending feed

Set confirmed: false on your subscribe to get the pending feed of this channel — the same payload shape for pending exchange transactions, before they are in a block. Pending events are guesses. A transaction can be dropped, replaced, or reverted. See Mempool for the full frame shape and how to handle it.
{
  "action": "subscribe",
  "id": "pending",
  "channel": "trading",
  "confirmed": false
}
Last modified on July 5, 2026