Fired when a previously pending settlement is confirmed in a block. Links back to the originalDocumentation Index
Fetch the complete documentation index at: https://polynode.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
settlement event via tx_hash, includes the confirmation latency, and attaches confirmed fill data from on-chain OrderFilled receipt logs.
The confirmed_fills array contains the exact execution prices and sizes from the blockchain — the same data source Polymarket’s own activity API reads. This gives you both speed (pre-confirmation detection) and accuracy (on-chain execution data) in a single subscription.
{
"data": {
"block_number": 85296338,
"condition_id": "0xcd1b782d94423552e19db1ca2bec7bcf5a445de8586638e41da75fae3d138ac4",
"confirmed_at": 1775713418000,
"confirmed_fills": [
{
"order_hash": "0x8238c0666c...",
"maker": "0x48ac40fc...",
"taker": "0xc51f90d3...",
"token_id": "97486603884638701907147078120258734284412618667021950609483989581295500093074",
"side": "BUY",
"price": 0.56,
"size": 2.25,
"maker_amount": "1260000",
"taker_amount": "2250000",
"fee": 0.176785
},
{
"order_hash": "0x3d388dd54a...",
"maker": "0x25f4707c...",
"taker": "0xc51f90d3...",
"token_id": "97486603884638701907147078120258734284412618667021950609483989581295500093074",
"side": "BUY",
"price": 0.56,
"size": 7.0,
"maker_amount": "3920000",
"taker_amount": "7000000",
"fee": 0.55
}
],
"event_title": "Augusta National Invitational - Winner ",
"event_type": "status_update",
"latency_ms": 3928,
"maker_wallets": [
"0x48ac40fc...",
"0x25f4707c..."
],
"market_slug": "will-charl-schwartzel-win-the-2026-masters-tournament",
"market_title": "Will Charl Schwartzel win the 2026 Masters tournament?",
"neg_risk": true,
"order_hashes": [
"0x8238c0666c...",
"0x3d388dd54a..."
],
"outcome": "No",
"outcomes": ["Yes", "No"],
"pending_detected_at": 1775713414072,
"taker_wallet": "0xc51f90d3...",
"tick_size": 0.001,
"token_id": "97486603884638701907147078120258734284412618667021950609483989581295500093074",
"tx_hash": "0x7599f442e4..."
},
"timestamp": 1775713418000,
"type": "status_update"
}
Fields
Always
"status_update".Unix milliseconds of the confirmation.
Show data fields
Show data fields
Transaction hash — matches the original
settlement event.Conditional token ID.
Block where the transaction was included.
Unix milliseconds of block confirmation.
Unix milliseconds when the transaction was first detected by polynode.
Time between initial detection and block confirmation, in milliseconds. Typical values: 2000–5000ms (median ~2900ms). Corresponds to 1–2 Polygon blocks.
Taker wallet address from the original settlement.
Maker wallet addresses from the original settlement.
EIP-712 order hashes from the original pending settlement. Each hash uniquely identifies a maker’s limit order on Polymarket’s order book.
Exact fill data from on-chain
OrderFilled receipt logs. Each entry represents one maker’s fill with the precise execution price and size as settled by the contract. Present when receipt decoding succeeds (vast majority of blocks). null on the rare occasion receipt data is unavailable.Show confirmed fill fields
Show confirmed fill fields
EIP-712 order hash for this specific fill.
Maker wallet address.
Taker wallet address (or exchange contract address for the taker’s own fill event).
Conditional token ID for this specific fill.
"BUY" or "SELL" from the maker’s perspective.Exact execution price from the on-chain settlement. This is the canonical price — the same value Polymarket’s own APIs report.
Gross token amount filled (before fees). Polymarket’s activity API reports net-of-fee sizes, so this value will be slightly larger than what Polymarket shows. Use the
fee field to compute the net: net_size = size - fee / price.Raw maker amount from the OrderFilled event (integer string, 6 decimal precision for USDC).
Raw taker amount from the OrderFilled event (integer string).
Fee charged on this fill in USDC.
null if no fee.Market question. Enriched from metadata.
Outcome name. Enriched from metadata.
Market image URL. Enriched from metadata.
Market URL slug. Enriched from metadata.
Parent event title. Enriched from metadata.
Whether this market uses the negRisk contract type. Enriched from metadata.
Minimum price increment (e.g.
0.01 or 0.001). Enriched from metadata.Taker fee rate in basis points.
200 = 2%, 1000 = 10%, null = no fee. Short-term crypto markets (5-minute ETH/BTC) typically have 1000 (10%), while standard markets have 200 (2%). Enriched from Polymarket metadata.Market condition ID (CTF contract identifier). Enriched from metadata.
Ordered list of outcome names (e.g.
["Yes", "No"]). Index-aligned with token_ids. Enriched from metadata.Ordered list of token IDs for this market. Index-aligned with
outcomes. Enriched from metadata.Map of token ID to outcome name for all outcomes in this market (e.g.
{"123...": "Yes", "456...": "No"}). Enriched from metadata.status_update events arrive in bursts. A single Polygon block typically contains 30–80 Polymarket settlements, so expect 30–80 status_update messages within ~100ms each time a block confirms (~2s interval). If you only need pending detection, subscribe with "status": "pending" or exclude "status_update" from your event_types filter.How to use
Matchstatus_update events back to their settlement by tx_hash:
const pending = new Map(); // tx_hash → settlement data
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === "settlement" && msg.data.status === "pending") {
pending.set(msg.data.tx_hash, msg.data);
}
if (msg.type === "status_update") {
const original = pending.get(msg.data.tx_hash);
console.log(`Confirmed in ${msg.data.latency_ms}ms`, original);
// Use confirmed_fills for exact on-chain prices
if (msg.data.confirmed_fills) {
for (const fill of msg.data.confirmed_fills) {
console.log(` ${fill.side} ${fill.size} @ ${fill.price} (fee: ${fill.fee})`);
}
}
pending.delete(msg.data.tx_hash);
}
};

