---
title: "Chainlink TWAP series (crypto settlement price)"
method: GET
path: "/v1/crypto/twap"
tags: ["Crypto"]
---

# Chainlink TWAP series (crypto settlement price)

`GET /v1/crypto/twap`

## Request

- Base URL: `https://crowdintel.xyz/api`
- URL: `https://crowdintel.xyz/api/v1/crypto/twap`
- Auth: HTTP bearer

**Min tier: `free`.** The Chainlink observations Polymarket settles crypto up/down markets against, oldest first, cursor-paged.

A 5-minute market settles on the 30-second TWAP; a 15-minute market on the 60-second one. `window=0` is the Chainlink spot reference carried alongside, which is what makes divergence between spot and settlement measurable.

Eight symbols publish — `btc`, `eth`, `sol`, `xrp`, `bnb`, `doge`, `zec`, `hype` (all `/usd`) — at about one observation per second each.

**Settle on `value_e18`, not `value`.** `value_e18` is the exact E18 fixed-point integer; `value` is a float and is lossy above 2^53.

Supplying `symbol` makes the read index-bounded. Omitting it scans every symbol over the range, which is why `limit` is capped at 5000.

## Query parameters

- `symbol` string
- `window` 0 | 30 | 60
- `from` string
- `to` string
- `limit` integer
- `cursor` string

## Response `200`

Observations, oldest first.

- CryptoTwapPage
  - `symbol` string, nullable: Echo of the requested symbol filter.
  - `window` integer, nullable: Echo of the requested window filter.
  - `data` CryptoTwapTick[]
    - `ts` integer: Chainlink observation time, unix ms.
    - `received_ts` integer: Feed delivery time, unix ms.
    - `latency_ms` integer: Delivery lag behind the observation. Typically ~1.4s.
    - `symbol` string
    - `window_seconds` 0 | 30 | 60: 30 settles 5-minute markets, 60 settles 15-minute markets, 0 is the Chainlink spot reference (not a TWAP).
    - `value` number: Convenience float. Lossy above 2^53 — BTC already exceeds that. Settle on `value_e18`.
    - `value_e18` string: The exact E18 fixed-point integer, as a string. This is the value settlement is decided on.
  - `next_cursor` string, nullable

## Other responses

- `400`: Malformed parameters or a rejected guardrail (e.g. unfiltered trades query, cluster blowup, window > 90 days).
- `401`: Missing, invalid, or revoked API key. Returned before the rate limiter runs, so it carries no `X-RateLimit-*` headers.
- `429`: Hourly or monthly rate limit exceeded.

---

[API](https://skmtc.dev/crowdintel/apis/crowdintel-api.md) · [All operations](https://skmtc.dev/crowdintel/apis/crowdintel-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crowdintel/apis/crowdintel-api/revisions/7059cfe9320d?raw)
