TWAP settlement feed
The Chainlink time-weighted average that Polymarket settles crypto up/down markets against, recorded tick by tick since the settlement rule changed.
On 2026-08-07 Polymarket changed how crypto up/down markets settle: instead of a single price snapshot at expiry, the outcome is decided by a Chainlink time-weighted average over the closing window. This feed is that series. By the end of this page you will be able to pull the exact observations a market settles on, check whether we hold the whole window, and know why the history has a hard floor.
What this is, and what it is not
This is the settlement TWAP — the reference number the market resolves against. It is not an execution algorithm, and it has nothing to do with slicing an order over time. If you are looking for a way to work a large position into the book, this is the wrong page.
Two averaging windows are in use:
| Window | Settles |
|---|---|
30 | 5-minute crypto up/down markets |
60 | 15-minute crypto up/down markets |
0 | Chainlink spot reference, not a TWAP |
Exact values are strings
Every observation carries its value twice: value as a convenience float, and
value_e18 as the exact E18 fixed-point integer, as a string. Settlement is
decided on the E18 integer. BTC values already exceed 2^53, so the float cannot
be the settlement value — parse value_e18 with a big-integer or decimal type
whenever you are comparing against a resolution.
GET /api/v1/crypto/twap
Minimum tier free. The raw observation series, cursor-paginated forward in
time.
| Param | Values | Default |
|---|---|---|
symbol | e.g. btc/usd, case-insensitive | all symbols |
window | 0, 30, 60 | all windows |
from / to | ISO-8601 or unix milliseconds | unbounded |
limit | 1–5,000 | 1,000 |
cursor | opaque cursor from next_cursor | none |
curl -G "https://crowdintel.xyz/api/v1/crypto/twap" \
-H "Authorization: Bearer $CROWDINTEL_KEY" \
--data-urlencode "symbol=btc/usd" \
--data-urlencode "window=30" \
--data-urlencode "from=2026-08-16T00:00:00Z" \
--data-urlencode "limit=1000"{
"symbol": "btc/usd",
"window": 30,
"data": [
{
"ts": 1754540000000,
"received_ts": 1754540001400,
"latency_ms": 1400,
"symbol": "btc/usd",
"window_seconds": 30,
"value": 61234.56,
"value_e18": "61234560000000000000000"
}
],
"next_cursor": "eyJ0cyI6MTc1NDU0MDAwMDAwMX0"
}ts is the observation timestamp in unix milliseconds; received_ts is when we
saw it and latency_ms the gap between them. Paging is keyset on ts, so a page
boundary is stable.
GET /api/v1/markets/{slug}/twap
Minimum tier free. Returns the window that settles one market, plus a coverage
verdict for it. Takes no limit and no cursor — the whole window comes back in
one response.
| Param | Values | Default |
|---|---|---|
window | 30 or 60 | 30 |
curl -G "https://crowdintel.xyz/api/v1/markets/$SLUG/twap" \
-H "Authorization: Bearer $CROWDINTEL_KEY" \
--data-urlencode "window=30"{
"condition_id": "0x...",
"slug": "bitcoin-up-or-down-...",
"symbol": "btc/usd",
"settles_at": 1754540000000,
"window": 30,
"window_mean": 61234.5,
"coverage": "complete",
"data": [
{
"ts": 1754539970000,
"received_ts": 1754539971100,
"latency_ms": 1100,
"symbol": "btc/usd",
"window_seconds": 30,
"value": 61233.9,
"value_e18": "61233900000000000000000"
}
],
"next_cursor": null
}coverage is none, partial or complete. Treat anything but complete as
"I do not hold enough of this window to reason about the settlement" — the
endpoint reports the gap rather than averaging over it and calling the result a
number.
Equity and index up/down markets return 404: they settle on Pyth feeds we do
not record. A market with no end date, or one that is not a crypto up/down
market at all, returns 404 with the same explanation.
GET /api/v1/crypto/twap/coverage
Minimum tier free. No parameters. Reports what we actually hold per symbol and
window — check this before building anything that assumes a series exists.
curl "https://crowdintel.xyz/api/v1/crypto/twap/coverage" \
-H "Authorization: Bearer $CROWDINTEL_KEY"{
"windows": {
"0": "Chainlink spot reference (not a TWAP)",
"30": "settles 5-minute crypto up/down markets",
"60": "settles 15-minute crypto up/down markets"
},
"data": [
{
"symbol": "btc/usd",
"window_seconds": 30,
"ticks": 1234567,
"first_ts": 1754500000000,
"last_ts": 1754600000000
}
],
"next_cursor": null
}first_ts is the hard floor for that symbol and window. Nothing before it exists.
Next
- API overview — auth, pagination and rate limits.
- Backtests — replay a signal over markets that have resolved.
