> ## 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.

# Event Format

> Price feed event schema and field reference.

## Event payload

This example is an explicitly selected spot event. Default followers now
receive 30-second and 60-second TWAP events with the same shape and different
identity fields. See [Chainlink Spot and TWAP Prices](/crypto/twap) for the
subscription filters.

```json theme={null}
{
  "type": "price_feed",
  "feed": "ETH/USD",
  "timestamp": 1774672089,
  "is_twap": false,
  "twap_window_seconds": null,
  "data": {
    "feed": "ETH/USD",
    "price": 1989.49,
    "bid": 1989.49,
    "ask": 1989.49,
    "timestamp": 1774672089,
    "is_twap": false,
    "twap_window_seconds": null
  }
}
```

## Fields

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

<ResponseField name="feed" type="string" required>
  Feed name (e.g. `"BTC/USD"`, `"ETH/USD"`). Top-level convenience field, same value as `data.feed`.
</ResponseField>

<ResponseField name="timestamp" type="number" required>
  Observation timestamp in Unix seconds. Top-level convenience field, same value as `data.timestamp`.
</ResponseField>

<ResponseField name="is_twap" type="boolean" required>
  `true` for a Chainlink-computed TWAP and `false` for a spot price.
</ResponseField>

<ResponseField name="twap_window_seconds" type="30 | 60 | null" required>
  Chainlink TWAP lookback window. `null` on spot events.
</ResponseField>

<ResponseField name="data" type="object" required>
  <Expandable title="data fields">
    <ResponseField name="feed" type="string" required>
      Feed name (e.g. `"BTC/USD"`).
    </ResponseField>

    <ResponseField name="price" type="number" required>
      Mid price in USD. This is the canonical price for this asset at this timestamp.
    </ResponseField>

    <ResponseField name="bid" type="number" required>
      Bid price in USD.
    </ResponseField>

    <ResponseField name="ask" type="number" required>
      Ask price in USD.
    </ResponseField>

    <ResponseField name="timestamp" type="number" required>
      Observation timestamp in Unix seconds.
    </ResponseField>

    <ResponseField name="is_twap" type="boolean" required>
      `true` for a TWAP event and `false` for a spot event.
    </ResponseField>

    <ResponseField name="twap_window_seconds" type="30 | 60 | null" required>
      TWAP lookback window. `null` on spot events.
    </ResponseField>
  </Expandable>
</ResponseField>

## Notes

* **Update rate**: approximately 1 update per second per feed.
* **No snapshot**: unlike settlement subscriptions, price feed subscriptions do not include an initial snapshot. The first event arrives with the next price observation (\~1 second after subscribing).
* **TWAP windows**: when you subscribe to both windows, key state by `feed` and `twap_window_seconds`. See [Chainlink Spot and TWAP Prices](/crypto/twap).
* **Deduplication**: include `feed`, `twap_window_seconds`, and `timestamp` in a TWAP deduplication key.
