Coverage & completeness
Every limit on this page is exposed as a structured field in the data, so your code can check it.
Coverage windows
- Settled markets: every market resolving from May 2026 onward.
coverage.firstExpiryMsin the manifest is the archive’s first expiry. A market still trading is inlive.json; its record is written when it settles. - Odds capture began in June 2026: markets resolved before then have
oddsMeta.points: 0. The series is not served; its summary is (see Odds). - 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 Validator votes).
When an id changes hands
An outcomeId is Hyperliquid’s, not ours, and the archive follows it.
/v1/markets/16.json returns 404, permanently. Hyperliquid listed the
11 May 2026 question (BTC above $80,657 on May 11, 06:00 UTC?) twice: at
#16, where nothing was ever bought or sold, and at #20, where it
traded. The archive serves #20 at /v1/markets/20.json, rendered at
liquary.xyz/data/hip-4/20. #16 was
removed on 22 August 2026, and #20 and #21 were added. If you cached #16, drop
it.
#16 is the only id the archive has withdrawn. Withdrawals are not announced
through changes.json, which tracks settlements; they are stated here.
Odds
Hyperliquid serves no historical odds; Liquary records each market’s YES mid
while it is live. The series is not served through this API:
markets/{id}/odds.json and trade-odds.json answer 404, and oddsUrl /
tradeOddsUrl are null on every document. The curve is drawn on each
market’s Data page. What the API serves is the capture’s report card,
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 |
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
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 |
mixed | Both, typically an imported history with a live tail |
null | Nothing was captured |
Under event-5s, a flat stretch is a market that did not move, not a coarse
measurement. Under sampled-5min, a move that started and ended between two
samples was never observed. Points are never interpolated.
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.
A gap is not a capture failure. The curve is stored as a step function (a point
equal to its predecessor is dropped), so a price that holds still for forty
minutes yields two points forty minutes apart. dataQuality does not treat
that as missing data.
Validator votes
Hyperliquid serves settlement votes only while an action is in flight. Liquary records them then, with each validator’s name and stake weight at vote time. Read two fields, in order:
settlementApplicable: whether this market settles by validator vote at all. It isfalsefor price markets (settled from the oracle) and third-party markets (settled by the wallet that deployed them), andsettlementCapturedis thenfalsetoo, with nothing missing.settlementCaptured: whether we hold the voter set. Only meaningful whensettlementApplicableistrue.falsemeans the votes were never captured, not that nobody voted.
settlementCaptured measures the roster, not the action. A market can carry
its settlement (reason, quorum flag, timestamps) and no voters: it then
reports settlementCaptured: false and
dataQuality.missing: ["settlement-votes"]. Read settlement.voterCount for
the roster’s size and settlementUrl for the roster itself. When such a market
carries quorumReached: true, the vote happened and reached quorum; what is
missing is who cast it.
governance.json publishes the capture ratio as counts.settlementsCovered /
settlementsTotal. settlementsTotal counts only the markets a validator vote
settles, that is Hyperliquid’s own event markets; third-party and price markets
are counted apart (settlementsDeployerSettled, settlementsPriceSettled). So
the gap between covered and total is only Hyperliquid’s own event markets whose
roster was not captured while the vote was live. A missed voter may since have
been rebuilt from the L1 vote transaction, and says so with source: "chain"
in settlement.json.
Volume
totalVolume is lifetime volume in USDC, single-counted, measured over each
market’s whole life.
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 are minted as a pair and trade in near-identical share
counts, so the dollars land on whichever side is expensive: a losing range
routinely shows nearly all its volume as noVolume, people trading
against it. Read the split before treating totalVolume as conviction in
the outcome.
null on either field means the split was never captured, which is not
zero. Once Hyperliquid has purged an outcome’s coins the split cannot be
reconstructed, so those gaps stay null rather than being guessed.
Traders & flow
traders, familyTraders and the market document’s flow object are
measured on the chain’s fill rows, market by market after settlement.
- Deduplicated per trade. The chain reports 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.
flowcounts it once. - Two instruments before 3 September 2026. On markets settled before that
date,
totalVolumecomes from a third-party candle index, frozen at settlement, andflowfrom the fill rows: they agree in aggregate, not market by market. From that datetotalVolumeis recomputed from the fills with the same rule, and the two agree market by market. - Order-book volume is
buyNotional + sellNotional, and nothing else.splitNotionalholds everything that is not a taker buy or sell (settlement, merges, negations, minting): protocol mechanics, not matching.splitNotionalandsettleNotional(the payout alone) are served on everyarchive.jsonandevents.jsonrow. - Fees are converted, not quoted. Where the chain charges in outcome-token
shares rather than dollars,
feeandbuilderFeevalue each share at its own fill’s price. They include fees on merges and settlements;tradeFeeandtradeBuilderFeegive the buys and sells alone. - 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.
Add the two, do not subtract. totalVolume - splitNotional is not the
traded volume: it is a residual between two instruments, and it can be
non-zero on a market that never saw a single buy or sell. Use
buyNotional + sellNotional.
null on traders or familyTraders means the market has not been
swept, never that nobody traded; a market that truly never traded shows 0.
The flow object is served before the sweep too, with a basis that says
which record it comes from and some fields null until the sweep (see
Resources).
Underlying price
Price markets carry priceMeta (the summary, in the market document) and
priceUrl (the series): what the underlying did while the market was live, at
5-minute resolution. It is Hyperliquid’s own price, the one the market
settled against, not another venue’s. Frozen at settlement. 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. null means the event was not a sports fixture.