Live

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:

WindowSettles
305-minute crypto up/down markets
6015-minute crypto up/down markets
0Chainlink 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.

ParamValuesDefault
symbole.g. btc/usd, case-insensitiveall symbols
window0, 30, 60all windows
from / toISO-8601 or unix millisecondsunbounded
limit1–5,0001,000
cursoropaque cursor from next_cursornone
GET /api/v1/crypto/twap
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"
200 OK (trimmed)
{
"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.

ParamValuesDefault
window30 or 6030
GET /api/v1/markets/{slug}/twap
curl -G "https://crowdintel.xyz/api/v1/markets/$SLUG/twap" \
-H "Authorization: Bearer $CROWDINTEL_KEY" \
--data-urlencode "window=30"
200 OK (trimmed)
{
"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.

GET /api/v1/crypto/twap/coverage
curl "https://crowdintel.xyz/api/v1/crypto/twap/coverage" \
-H "Authorization: Bearer $CROWDINTEL_KEY"
200 OK (trimmed)
{
"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.
Live
Beta
···v0.1.0
CrowdIntel needs a newer browser

Your device is on iOS 15 or older. CrowdIntel uses features (color-mix, WebGL2, modern auth) that require iOS 16+ / Safari 16+.

iPhone 7 maxes out at iOS 15, so the site can't render here. Open CrowdIntel on a desktop browser or a newer phone.

crowdintel.xyz

◆ legacy browser fallback