Coverage & completeness
An archive that states its limits is more useful than one that pretends to be exhaustive. Everything on this page is exposed as structured fields in the data itself: your code can check it, not just your eyes.
Coverage windows
- Archive: markets resolving from May 2026 onward (the manifest’s
coverage.firstExpiryMsis authoritative). - Odds history: capture began June 2026. Markets resolved before then
have
oddsMeta.points: 0. - Validator votes: event markets only, and only where the action was
recorded while it was live. Price markets settle from the oracle and have no
vote at all. Check
settlementApplicable, thensettlementCaptured(see below).
When an id changes hands
An outcomeId is Hyperliquid’s, not ours, and the archive follows it. Twice
now that has meant publishing a market Hyperliquid had itself listed twice.
#16 was removed on 22 August 2026, and #20 and #21 were added. All three belong to the same day. Hyperliquid registered the 11 May question — BTC above $80,657 on May 11, 06:00 UTC? — at #16, inside the 10 May id block, where it never traded: one five-minute candle at $0 on the yes side, none at all on the no side, and 287 fills that are entirely mints, merges and the settlement. The market people actually traded is #20, in the 11 May block, where $5.17M changed hands across 289 candles a side.
/v1/markets/16.json now returns 404, and will not come back. It was a
record of a listing, not of a market: nothing was ever bought or sold on it.
If you cached it, drop it — the same question, with its real figures, its
999 traders and a 118,026-point odds curve, is at /v1/markets/20.json.
This is the only id the archive has ever withdrawn. Deletions are not
routine and are not announced through changes.json, which tracks
settlements; they will always be stated here.
We had this backwards for months, and the way we had it backwards is worth stating: an earlier pass read #20 and #21 as duplicates of #45 and #50 and deleted them. The daily binaries run in a strict +5 sequence — #15 on 10 May, #20 on 11 May, #25 on 12 May, … #45 on 16 May — so #45 and #50 are their own days, and what looked like a duplicate was the archive’s biggest early market. It is back, rebuilt end to end: volume from the candle index, flow and traders from the fill rows, and the odds replayed from the order-book archive.
Odds
Hyperliquid does not serve historical odds at all: this series exists only
because Hypersight records each market’s YES mid while it is live, and the
chain purges the market afterwards. That has two honest consequences, both
visible in oddsMeta:
| Field | Meaning |
|---|---|
points | Number of recorded points |
firstTs / lastTs | The captured range (epoch ms) |
gaps | How many intervals over 15 minutes hold no recorded price change — a count, not a list. Fetch the curve and apply the same rule if you want the intervals |
maxGapMs | The longest of them, in ms |
complete | true wherever a curve exists |
captureRegime | How finely the series was recorded: event-5s or sampled-5min |
source | Who recorded it: live, book-archive or mixed |
Resolution and provenance
Two fields, because they answer two different questions: captureRegime says
how finely a curve was recorded, source says who recorded it.
captureRegime | Meaning |
|---|---|
event-5s | One point per actual price change. ~5 seconds live, finer on curves rebuilt from the order-book archive |
sampled-5min | One sample every ~5 minutes regardless of activity |
null | Nothing was captured for this market |
source | Meaning |
|---|---|
live | Our own capture of Hyperliquid’s mid feed |
book-archive | Rebuilt from a third party’s order-book archive. A genuine measurement, not ours |
mixed | Both, typically an imported history with a live tail |
null | Nothing was captured |
A flat stretch in an event-5s series is a market that genuinely did not move,
not a coarse measurement: unmoved markets are still anchored at a fixed
interval, and markets the chain has stopped quoting are not anchored at all.
Under sampled-5min, by contrast, any move that started and ended between two
samples was never observed and cannot be recovered — that curve is a faithful
set of observations, not a complete record.
We never interpolate. Where a curve gained resolution, it is because a finer real record was found and replayed, never because points were invented between two samples.
complete: true means nothing is known to be missing, not that the range
covers the market’s whole life. Combine firstTs with the market’s own
timestamps if you need wall-to-wall coverage.
It no longer derives from gaps. A deduplicated step function cannot show
the difference between “capture was down” and “the price did not move”, so
the field says what it can. Where our capture genuinely stops, we measure it
directly at the socket rather than inferring it from the curve.
A gap is not a capture failure. The stored curve is a step function: any
point equal to its predecessor is dropped, which is what fits 8.72 GB of
capture into 29.3 MB. So a market whose price simply holds still for forty
minutes yields two points forty minutes apart. dataQuality does not treat
that as missing data, and neither should you.
Where our capture genuinely stops, we measure it at the socket rather than inferring it from the curve.
Where our capture genuinely was down, those minutes are unrecoverable: the chain keeps no copy.
Validator votes
Hyperliquid’s settlement-vote feed is in-flight only: votes vanish from the node API the moment an action finalizes. Hypersight freezes them (with each validator’s name and stake weight at vote time) while the action is live.
Two fields, answering two different questions. Read them in order:
settlementApplicable- whether this market class settles by validator vote at all. Price markets settle from the oracle and never carry a settlement action, so this isfalseon every one of them, and thesettlementCapturednext to it isfalseby construction. Nothing is missing there.settlementCaptured- whether we hold the voter set. Only meaningful whensettlementApplicableistrue.falsemeans the votes were never captured (capture started after the market settled, or the action finalized between two of our polls). It does not mean nobody voted.
On event markets, where the vote exists, the archive holds the voter set for
269 of 313. The other 44 finalized before anyone recorded them and left no
trace anywhere; that cannot be improved retroactively. Where
settlementCaptured is true, the voter set is the only surviving copy.
settlementCaptured measures the roster, not the action. 43 of those 44
markets DO carry a settlement action — with its written reason, its quorum
flag and its timestamps, all in settlement — and simply no voters. They
report settlementCaptured: false and dataQuality.missing: ["settlement-votes"],
exactly like the one market that carries no action at all, because the
question both fields answer is “do we have the roster”.
So settlement can be non-null while settlementCaptured is false. Read
settlement.voterCount for the roster’s size in one number, and
settlementUrl for the roster itself.
All 43 carry quorumReached: true: the votes happened and reached quorum.
What is missing is who cast them.
Volume
totalVolume is lifetime traded volume in USDC, single-counted, measured over
each market’s whole life rather than accumulated live, so it is exact rather
than drift-prone.
0 means no trading was recorded, and on multi-outcome markets that is
usually the literal truth: the fallback leg (labelled Other) only pays if the
oracle fails, so nobody buys it, and extreme price buckets often close without
a single trade. Those markets are complete, not missing.
Which side the money took
totalVolume is the YES and NO legs summed, and that sum hides the
direction. Both legs of an outcome are minted as a pair and trade in
near-identical share counts, so the dollars land entirely on whichever side
is expensive.
A losing range routinely shows tens of thousands of dollars of which nearly
all is noVolume — people trading against it. Read the split before
treating totalVolume as conviction in the outcome.
Measured on one BTC range family (13 August 2026):
| Leg | totalVolume | yesVolume | noVolume |
|---|---|---|---|
< $62,539 | $11,029 | $92 | $10,936 |
$62,539 – $65,092 (won) | $76 | $46 | $30 |
> $65,092 | $8,949 | $72 | $8,876 |
The two rows dwarfing the winner were two ways of betting the same thing it was: that the price would stay inside the range.
null on either field means the split was never captured, which is not
zero. Hyperliquid purges an outcome’s coins days after it closes, so the split
cannot be reconstructed after the fact by anyone who was not already storing
it. Everything settled before 16 August 2026 was recovered from the index
while its coins were still readable; older gaps stay null rather than being
guessed.
Traders & flow
traders, familyTraders and the market document’s flow object come from a
different instrument than the volumes above: the on-chain index’s own fill
rows, swept market by market after settlement and archived raw. Three
properties worth knowing before building on them:
-
Deduplicated per trade. The index serves one row per participant — a trade between two wallets is two rows sharing a trade id — so naive sums count each trade up to twice.
flowis deduplicated:buyNotional + sellNotional + splitNotionalreconciles withtotalVolumeon 94.7% of markets (1,010 of 1,067, within 1%).⚠️The last 5.3% do not, and the reason is worth knowing.
totalVolumeis frozen from the candle index at settlement;flowis measured on the fill rows. They are two instruments, and their agreement is guaranteed in aggregate, not market by market: across the whole archive both land on $289.97M of trading to the cent, while 57 individual markets differ — 17 where the fills see more (up to +34%) and 40 where they see less. Useflowwhen you want what was measured on trades,totalVolumewhen you want the figure the chain’s own candles carry, and do not expect the subtraction of one from the other to mean anything on a single market. -
Order-book volume is
buyNotional + sellNotional, and nothing else.splitNotionalholds everything that is not a taker buy or sell — settlement, merges, negations, minting — so it is protocol mechanics, not matching. Measured across all 1,012 markets, settlement alone is 43.5% of it and minting only 10.2%. Subtract it whenever you need a figure comparable to a venue that counts matched trades. It is not a rounding difference: across the archive, $208.3M of $498.2M never changed hands. BothsplitNotionalandsettleNotionalare also served on everyarchive.jsonandevents.jsonrow, so the correction does not require fetching each market.⚠️Add the two, do not subtract.
totalVolume - splitNotionallooks like the same answer and is not: the two come from different instruments (a frozen candle total against a fills-measured lump), so their difference is a residual. On the fallback rung of a price ladder — a market nobody has ever traded — that subtraction returns up to $235 while the archived fills hold 706 negate-outcome, 138 merge-question and 7 settlement rows, and not one buy or sell. Across the archive the subtraction totals $290,001,776 against a measured $289,971,691.buyNotional + sellNotionalis served on every row for exactly this reason. -
Fees are converted, not quoted. The chain charges fees in outcome-token shares, not dollars;
feeandbuilderFeevalue each share at its own fill’s price. Buying is free on outcome markets, so fees are sell-side by construction. -
Unions, not sums.
familyTradersis the set union of wallets across every leg of a question or ladder. Summing each leg’stradersdouble-counts wallets that traded several legs — measured on one bucket family, legs summing to 23 were 18 distinct wallets.
null on any of these means the market has not been swept, never that
nobody traded. A market that truly never traded shows 0 — and on fallback
legs (Other), 0 is usually the literal truth.
Underlying price
Price markets carry priceMeta and priceUrl: what the underlying actually did
over the window the market was live, at 5-minute resolution. The summary sits in
the market document, the series in its own file — see
Resources.
It is Hyperliquid’s own price — the one the market settled against — not another venue’s, so a market that resolved $35 from its threshold can be read against the line that decided it rather than against a Binance chart that disagrees by a few dollars.
Frozen at settlement and never recomputed: a settled market’s window cannot
change, so the series is written once and reused. null on event markets,
which have no ticker, and on the earliest price markets whose window predates
this capture.
Scores
Final scores on sports events are snapshotted at settlement from public
scoreboard data and survive independently of the chain. null means the event
was not a sports fixture.