Skip to main content
Fired when a previously pending settlement is confirmed in a block. Links back to the original settlement event via tx_hash and includes the confirmation latency.
{
  "data": {
    "block_number": 84090705,
    "condition_id": "0x4531a91f4def8da0773897ad49236eebfb94f687c8985637a43f7e1ac439132f",
    "confirmed_at": 1773301443000,
    "event_title": "Ethereum Up or Down - March 12, 3:40AM-3:45AM ET",
    "event_type": "status_update",
    "latency_ms": 3598,
    "maker_wallets": [
      "0x8a181a656f089ad649d4500a67c4a94cc25abc9d",
      "0x11f09d48095b152eb82a6bccc64138735d4c3fa8",
      "0x7035c3cf9c32e63a13e75177fb1523462ab00398"
    ],
    "market_image": "https://polymarket-upload.s3.us-east-2.amazonaws.com/ETH+fullsize.jpg",
    "market_slug": "eth-updown-5m-1773301200",
    "market_title": "Ethereum Up or Down - March 12, 3:40AM-3:45AM ET",
    "neg_risk": false,
    "outcome": "Down",
    "pending_detected_at": 1773301439402,
    "taker_base_fee": 1000.0,
    "taker_wallet": "0x7035c3cf9c32e63a13e75177fb1523462ab00398",
    "tick_size": 0.01,
    "token_id": "41289058265701027630261530916262400751492270988085662232022084312192713218931",
    "tokens": {
      "41289058265701027630261530916262400751492270988085662232022084312192713218931": "Down",
      "43683199363997825972120625605577475527345563787373900511473168397985098762620": "Up"
    },
    "tx_hash": "0xc2cdb3e96ddbde7c56ac7803b2389496669c98c428a348013938f9b433c3cc12"
  },
  "timestamp": 1773301443000,
  "type": "status_update"
}

Fields

type
string
required
Always "status_update".
timestamp
number
required
Unix milliseconds of the confirmation.
data
object
required
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

Match status_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);
    pending.delete(msg.data.tx_hash);
  }
};