> ## Documentation Index
> Fetch the complete documentation index at: https://docs.polynode.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Status Update Event

> Notification when a pending settlement confirms on-chain, with exact fill data from receipt logs.

Fired when a previously pending settlement is confirmed in a block. Links back to the original `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.

```json theme={null}
{
  "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

<ResponseField name="type" type="string" required>
  Always `"status_update"`.
</ResponseField>

<ResponseField name="timestamp" type="number" required>
  Unix milliseconds of the confirmation.
</ResponseField>

<ResponseField name="data" type="object" required>
  <Expandable title="data fields">
    <ResponseField name="tx_hash" type="string" required>
      Transaction hash — matches the original `settlement` event.
    </ResponseField>

    <ResponseField name="token_id" type="string" required>
      Conditional token ID.
    </ResponseField>

    <ResponseField name="block_number" type="number" required>
      Block where the transaction was included.
    </ResponseField>

    <ResponseField name="confirmed_at" type="number" required>
      Unix milliseconds of block confirmation.
    </ResponseField>

    <ResponseField name="pending_detected_at" type="number" required>
      Unix milliseconds when the transaction was first detected by polynode.
    </ResponseField>

    <ResponseField name="latency_ms" type="number" required>
      Time between initial detection and block confirmation, in milliseconds. Typical values: 2000–5000ms (median \~2900ms). Corresponds to 1–2 Polygon blocks.
    </ResponseField>

    <ResponseField name="taker_wallet" type="string" required>
      Taker wallet address from the original settlement.
    </ResponseField>

    <ResponseField name="maker_wallets" type="string[]">
      Maker wallet addresses from the original settlement.
    </ResponseField>

    <ResponseField name="order_hashes" type="string[]">
      EIP-712 order hashes from the original pending settlement. Each hash uniquely identifies a maker's limit order on Polymarket's order book.
    </ResponseField>

    <ResponseField name="confirmed_fills" type="object[]">
      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.

      <Expandable title="confirmed fill fields">
        <ResponseField name="order_hash" type="string">
          EIP-712 order hash for this specific fill.
        </ResponseField>

        <ResponseField name="maker" type="string">
          Maker wallet address.
        </ResponseField>

        <ResponseField name="taker" type="string">
          Taker wallet address (or exchange contract address for the taker's own fill event).
        </ResponseField>

        <ResponseField name="token_id" type="string">
          Conditional token ID for this specific fill.
        </ResponseField>

        <ResponseField name="side" type="string">
          `"BUY"` or `"SELL"` from the maker's perspective.
        </ResponseField>

        <ResponseField name="price" type="number">
          Exact execution price from the on-chain settlement. This is the canonical price — the same value Polymarket's own APIs report.
        </ResponseField>

        <ResponseField name="size" type="number">
          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`.
        </ResponseField>

        <ResponseField name="maker_amount" type="string">
          Raw maker amount from the OrderFilled event (integer string, 6 decimal precision for USDC).
        </ResponseField>

        <ResponseField name="taker_amount" type="string">
          Raw taker amount from the OrderFilled event (integer string).
        </ResponseField>

        <ResponseField name="fee" type="number">
          Fee charged on this fill in USDC. `null` if no fee.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="market_title" type="string">
      Market question. Enriched from metadata.
    </ResponseField>

    <ResponseField name="outcome" type="string">
      Outcome name. Enriched from metadata.
    </ResponseField>

    <ResponseField name="market_image" type="string">
      Market image URL. Enriched from metadata.
    </ResponseField>

    <ResponseField name="market_slug" type="string">
      Market URL slug. Enriched from metadata.
    </ResponseField>

    <ResponseField name="event_title" type="string">
      Parent event title. Enriched from metadata.
    </ResponseField>

    <ResponseField name="neg_risk" type="boolean">
      Whether this market uses the negRisk contract type. Enriched from metadata.
    </ResponseField>

    <ResponseField name="tick_size" type="number">
      Minimum price increment (e.g. `0.01` or `0.001`). Enriched from metadata.
    </ResponseField>

    <ResponseField name="taker_base_fee" type="number">
      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.
    </ResponseField>

    <ResponseField name="condition_id" type="string">
      Market condition ID (CTF contract identifier). Enriched from metadata.
    </ResponseField>

    <ResponseField name="outcomes" type="string[]">
      Ordered list of outcome names (e.g. `["Yes", "No"]`). Index-aligned with `token_ids`. Enriched from metadata.
    </ResponseField>

    <ResponseField name="token_ids" type="string[]">
      Ordered list of token IDs for this market. Index-aligned with `outcomes`. Enriched from metadata.
    </ResponseField>

    <ResponseField name="tokens" type="object">
      Map of token ID to outcome name for all outcomes in this market (e.g. `{"123...": "Yes", "456...": "No"}`). Enriched from metadata.
    </ResponseField>
  </Expandable>
</ResponseField>

<Warning>
  `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.
</Warning>

## How to use

Match `status_update` events back to their `settlement` by `tx_hash`:

```javascript theme={null}
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);
  }
};
```
