# Hyperliquid Order Book — Bitquery Data Store L4 order-book data from HyperCore: every order status including cancels and rejects, per-order book deltas, and the oracle and mark price pushes behind them. Dataset page: https://bitquery.io/datastore/datasets/hyperliquid-order-book Network: Hyperliquid Category: Orders, Events Tables: 3 Columns: 48 Coverage: first block to 2026-09-23 Format: Apache Parquet, Snappy compression, one prefix per table Licence: https://bitquery.io/datastore/legal/data-license ## What this is Hyperliquid order book data from the HyperCore L1, not HyperEVM. The order_statuses table keeps every order through its lifecycle: open, canceled, filled, triggered and the *Rejected states, with time in force, reduce-only, trigger conditions and TP/SL child brackets. The book_diffs table is L4, one row per new, update or remove of a single order with its owner, order id, price and size, so the book can be rebuilt at any block rather than at snapshot boundaries. The oracle_updates table records each mark, oracle and external perp price push per coin. Hyperliquid's own S3 archive publishes L2 snapshots and asset contexts and nothing else. Rejects and cancels are invisible in any trades-only dataset, and they are most of the signal in microstructure work. Money and sizes are decimal strings, addresses are 0x-prefixed hex, and Order.Timestamp is epoch milliseconds while Block_Time and status Time are epoch nanoseconds. ## What people use it for - Order-book microstructure research at L4: queue position, order lifetime, cancel and reject rates - Rebuild the book at any block from per-order new, update and remove deltas - Market-maker behaviour: quoting, time in force, reduce-only and ALO reject patterns by wallet - Mark and oracle price studies across plain perps, HIP-3 markets and spot ## Tables (3) ### order_statuses — 25 columns One row per order status change: open, canceled, filled, triggered and every *Rejected state, with time in force, reduce-only, trigger and TP/SL bracket fields. Time is epoch nanoseconds. S3 prefix: hyperliquid/order_statuses File naming: _.parquet, 200 blocks per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/hyperliquid/order_statuses/1075858800_1075858999.parquet Sample updated: Sep 2, 2026 | column | type | description | | --- | --- | --- | | Block_Number | UInt64 | HyperCore block number; the join key across all seven tables | | Block_Time | UInt64 | Block time, epoch nanoseconds | | User | String | Account address, 0x-prefixed hex | | Status | String | open, canceled, filled, triggered, or one of the *Rejected states such as badAloPxRejected | | Time | UInt64 | Status time, epoch nanoseconds | | Order_Coin | String | Market: plain perp (HYPE), HIP-3 perp (xyz:DRAM), spot (@107) or outcome token (#1890) | | Order_Side | String | B for bid (buy), A for ask (sell) | | Order_LimitPx | Decimal | Limit price, decimal string | | Order_Sz | Decimal | Remaining size at this status, in base units | | Order_OrigSz | Decimal | Original size when the order was placed, in base units | | Order_Oid | UInt64 | Order id | | Order_Timestamp | UInt64 | Order placement time, epoch milliseconds | | Order_OrderType | String | Limit, Market, Stop Market, Take Profit Limit, and so on | | Order_TriggerCondition | String | Trigger condition for trigger orders, N/A otherwise | | Order_TriggerPx | Decimal | Trigger price, 0.0 for non-trigger orders | | Order_IsTrigger | Bool | True for stop and take-profit orders | | Order_IsPositionTpsl | Bool | True when the order is a position-level take-profit or stop-loss | | Order_ReduceOnly | Bool | True when the order can only reduce a position | | Order_Cloid | String | Client order id, 0x-prefixed hex | | Order_Tif | String | Time in force: Gtc, Ioc, Alo, or FrontendMarket | | Order_Children | Array | Child TP/SL bracket orders attached to this order | | Order_Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | | Hash | String | L1 transaction hash, 0x-prefixed hex; not a join key, one transaction spans many events and TWAP trades carry 32 zero bytes | | Builder | String | Builder address when the order came through a builder, else null | | Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | ### book_diffs — 12 columns L4 order-book deltas: one row per new, update or remove of a single order, with owner, order id, price and size. S3 prefix: hyperliquid/book_diffs File naming: _.parquet, 200 blocks per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/hyperliquid/book_diffs/1075858800_1075858999.parquet Sample updated: Sep 2, 2026 | column | type | description | | --- | --- | --- | | Block_Number | UInt64 | HyperCore block number; the join key across all seven tables | | Block_Time | UInt64 | Block time, epoch nanoseconds | | User | String | Account address, 0x-prefixed hex | | Oid | UInt64 | Order id | | Coin | String | Market: plain perp (HYPE), HIP-3 perp (xyz:DRAM), spot (@107) or outcome token (#1890) | | Side | String | B for bid (buy), A for ask (sell) | | Px | Decimal | Price, decimal string | | Kind | String | new, update or remove | | Sz | Decimal | Size of a new order, in base units; null for update and remove | | OrigSz | Decimal | Size before an update, in base units; null otherwise | | NewSz | Decimal | Size after an update, in base units; null otherwise | | Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | ### oracle_updates — 11 columns One row per oracle push: the mark, oracle and external perp price inputs and results for every coin the validator set or a HIP-3 deployer priced. S3 prefix: hyperliquid/oracle_updates File naming: _.parquet, 200 blocks per file Free sample (real Parquet, no email needed): https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/hyperliquid/oracle_updates/1075858800_1075858999.parquet Sample updated: Sep 2, 2026 | column | type | description | | --- | --- | --- | | Block_Number | UInt64 | HyperCore block number; the join key across all seven tables | | Block_Time | UInt64 | Block time, epoch nanoseconds | | UpdateClass | String | Who pushed the update: Validator or Deployer (HIP-3 markets) | | MarkPxInputs | Array | Coin and price pairs used as mark price inputs | | SpotPxInputs | Array | Coin and price pairs from spot markets | | ExternalPerpPxInputs | Array | Coin and price pairs from external perp venues | | OraclePxs_CoinToMarkPx | Array | Resulting mark price per coin with LastUpdateTime and DailyPx | | OraclePxs_CoinToOraclePx | Array | Resulting oracle price per coin with LastUpdateTime and DailyPx | | OraclePxs_CoinToExternalPerpPx | Array | Resulting external perp price per coin with LastUpdateTime and DailyPx | | OraclePxs_Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | | Extra | Map | Forward-compatibility map; non-empty when the node emitted a field not yet modelled | ## Price - Latest month (Aug 23, 2026 → Sep 23, 2026): $150 one-time, USD One-time purchase. The files are yours to keep under the licence above. ## Questions buyers ask Q: What is included in Hyperliquid Order Book? A: Three Parquet tables from HyperCore: order_statuses, book_diffs and oracle_updates, with 48 documented columns. Every row carries Block_Number and Block_Time, so the tables join on block with each other and with the Hyperliquid Trades and Ledger datasets. Q: How big is it? A: Large, and driven by quoting activity. In a measured 1,000-block slice (about 73 seconds) we counted 142,955 order statuses, 89,241 book diffs and 24 oracle updates. Scaled to a day that is roughly 170 million order statuses and 105 million book diffs; exact row counts and sizes come with the delivery manifest, and these figures are estimates. Q: How is this different from Hyperliquid's free S3 archive? A: Hyperliquid's archive holds L2 book snapshots and asset contexts, uploaded roughly monthly, and states that no other historical data is provided that way. This dataset is L4: each book_diffs row names the order and the address behind it, and every open, cancel and reject is in order_statuses. Q: How do I rebuild the book? A: Replay book_diffs in Block_Number order per Coin: Kind new adds an order at Px with Sz, update replaces OrigSz with NewSz, remove deletes it. Aggregate by Px for an L2 view at any block, or keep order ids for queue position. Q: Where are the fills? A: In the Hyperliquid Trades dataset. A filled status here tells you an order completed; the match price, counterparty, fee and PnL are in the fills table there, joined on Block_Number and Oid. Q: How far back does it go? A: 30 days. HyperCore history is kept as a rolling 30-day window, so a purchase covers the 30 days up to yesterday and there is no longer window to buy. For a continuous feed beyond that, ask about the live stream. Q: Why are there two time units? A: Because the node emits them that way and we keep the values as emitted. Block_Time and the Time column on statuses and events are epoch nanoseconds; Fill.Time and Order.Timestamp are epoch milliseconds. Divide by 1e9 or 1e3 respectively when converting to timestamps. Q: What does a non-empty Extra column mean? A: The node emitted a field that the schema does not model yet, and we kept it rather than dropping it. Extra is empty on nearly every row. When a new field appears it lands there first, so nothing is silently lost between schema versions. Q: How do I load a file? A: With DuckDB: SELECT * FROM read_parquet('fills/*.parquet'). With pandas: pd.read_parquet('fills/'). Parse Px, Sz, Fee and the other money columns with Decimal rather than float; they are stored as decimal strings on purpose. Q: Does this match the live stream? A: Yes. These field definitions are the ones Bitquery's Hyperliquid Kafka topics use, so a backtest reading this archive and a production consumer reading the live stream decode with the same code. Q: How is the data delivered, and how current is it? A: As flat Parquet files under a stable S3 layout, one prefix per table and one file per 200-block range, with a JSON manifest listing every file and its sha256. Signed HTTPS links are emailed once the files are prepared. Refreshed daily with T+1 latency; a purchase made today includes everything up to yesterday. Q: Can I try before I buy? A: Yes. Every table links to a public sample Parquet file from a real 1,000-block slice, and the sample repository on GitHub shows the first records of each table as readable JSON. No email address required. ## What this file is, and is not This is a description of one dataset sold by Bitquery, written for assistants and for people. It lists every column, but holds no data rows — the sample files linked under each table are real Parquet and are free to download. Figures here come from the product record and are exact unless marked otherwise; the delivery manifest is authoritative for a purchased file. If a question needs a row that is not in a sample, say so rather than guessing at it.