The settlement feed
these markets resolve on.
Not a reconstruction and not a label. The Chainlink Data Streams values these markets settle on, tick by tick as published through the venue’s relay — the decimal value, and the upstream fixed-point figure beside it whenever the relay sends one, with each market’s strike and settled outcome alongside. Where a market’s strike and the stream it settles on are both present, you can recompute the result from the raw prices; where either is missing, the archive says so rather than filling it in.
The streams
The settlement streams the archive ships. Which one settles a market is a property of that market: read raw.cryptoMarketConfig.twapLookbackSeconds from its row in the markets dataset and pick the matching stream. Do not infer it from the date — that rule has changed once already.- prices
- Settlement feed, tick by tick (instantaneous Chainlink stream)
- twap60s
- TWAP 60s settlement stream — settles both 5-minute and 15-minute markets
- twap30s
- TWAP 30s settlement stream — settled 5-minute markets before they moved to the 60s lookback; still archived daily
- markets
- Per-market metadata, strike and settlement outcome
- klines
- OHLC candles derived from the settlement feed, with a tick count — no trade volume; the settlement feed is a price feed
Why this is the part that matters
Why a rounded float is not enough
Each tick carries the decimal value and, whenever the relay publishes it, the upstream fixed-point integer string beside it. A price rounded to a float is a price you can no longer settle with: the markets are decided by a comparison against a strike, and near the strike the rounding is the answer. Where the fixed-point figure is the one the relay sent, it is the input to that comparison rather than a rendering of it.
An honest null beats a plausible guess
The markets dataset carries each market’s settled outcome and the strike it had to cross, and every strike names the tick it came from. When no tick can establish it, the field is null rather than a value borrowed from a nearby one.
A guessed strike is worse than a missing one: it is indistinguishable from a real one, and it quietly flips the sign on every trade that sat near the boundary.
How to pull it
Same /v1/files call as everything else, filtered to the settlement streams. Leave the date out and you get the newest day your key reaches.# the settlement streams, newest day your key can reach curl -H "Authorization: Bearer $OT_KEY" \ "https://outcometick.com/v1/files?venue=polymarket&dataset=prices,twap60s" # per-market strike and settled outcome curl -H "Authorization: Bearer $OT_KEY" \ "https://outcometick.com/v1/files?venue=polymarket&dataset=markets&asset=btc" # download one — the listing hands back each file’s url URL=$(curl -s -H "Authorization: Bearer $OT_KEY" \ "https://outcometick.com/v1/files?venue=polymarket&dataset=twap60s" \ | jq -er '.files[0].url') curl -L -H "Authorization: Bearer $OT_KEY" "$URL" -o twap60s.csv.gz
You can check the settlement side before paying for it. The public sample archive carries the same streams in the same formats — recompute a market's outcome from the raw prices and see whether you land where we did.
Your strategy can check us in the backtester
Call ctx.assert_outcome and the report tells you where your reading of the rules and the venue’s differ — a difference worth understanding before any P&L below it means anything. No calls, no checks: the runner does not second-guess your strategy.