BitqueryBitqueryData Store
HyperliquidOrdersEvents

Hyperliquid Order Book

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.

Coverage
Latest monthto Sep 23, 2026 · yesterday
Tables
3Parquet, one prefix each
Columns
48across 3 tables
Coverage ends yesterday, UTC

Overview

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.

Use cases

  • 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

3 tables

48 columns · free sample for each table

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.

hyperliquid/order_statuses<start_block>_<end_block>.parquet200 blocks per file
Browse columns Sample fileSample updated Sep 2, 2026

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.

hyperliquid/book_diffs<start_block>_<end_block>.parquet200 blocks per file
Browse columns Sample fileSample updated Sep 2, 2026

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.

hyperliquid/oracle_updates<start_block>_<end_block>.parquet200 blocks per file
Browse columns Sample fileSample updated Sep 2, 2026

Schema reference

copies a column name
48 columns
order_statuses25 columnsOne 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.
ColumnTypeDescription
Block2
Block_NumberUInt64HyperCore block number; the join key across all seven tables
Block_TimeUInt64Block time, epoch nanoseconds
Other6
UserStringAccount address, 0x-prefixed hex
StatusStringopen, canceled, filled, triggered, or one of the *Rejected states such as badAloPxRejected
TimeUInt64Status time, epoch nanoseconds
HashStringL1 transaction hash, 0x-prefixed hex; not a join key, one transaction spans many events and TWAP trades carry 32 zero bytes
BuilderStringBuilder address when the order came through a builder, else null
ExtraMapForward-compatibility map; non-empty when the node emitted a field not yet modelled
Order17
Order_CoinStringMarket: plain perp (HYPE), HIP-3 perp (xyz:DRAM), spot (@107) or outcome token (#1890)
Order_SideStringB for bid (buy), A for ask (sell)
Order_LimitPxDecimalLimit price, decimal string
Order_SzDecimalRemaining size at this status, in base units
Order_OrigSzDecimalOriginal size when the order was placed, in base units
Order_OidUInt64Order id
Order_TimestampUInt64Order placement time, epoch milliseconds
Order_OrderTypeStringLimit, Market, Stop Market, Take Profit Limit, and so on
Order_TriggerConditionStringTrigger condition for trigger orders, N/A otherwise
Order_TriggerPxDecimalTrigger price, 0.0 for non-trigger orders
Order_IsTriggerBoolTrue for stop and take-profit orders
Order_IsPositionTpslBoolTrue when the order is a position-level take-profit or stop-loss
Order_ReduceOnlyBoolTrue when the order can only reduce a position
Order_CloidStringClient order id, 0x-prefixed hex
Order_TifStringTime in force: Gtc, Ioc, Alo, or FrontendMarket
Order_ChildrenArrayChild TP/SL bracket orders attached to this order
Order_ExtraMapForward-compatibility map; non-empty when the node emitted a field not yet modelled
Sample file
book_diffs12 columnsL4 order-book deltas: one row per new, update or remove of a single order, with owner, order id, price and size.
ColumnTypeDescription
Block_NumberUInt64HyperCore block number; the join key across all seven tables
Block_TimeUInt64Block time, epoch nanoseconds
UserStringAccount address, 0x-prefixed hex
OidUInt64Order id
CoinStringMarket: plain perp (HYPE), HIP-3 perp (xyz:DRAM), spot (@107) or outcome token (#1890)
SideStringB for bid (buy), A for ask (sell)
PxDecimalPrice, decimal string
KindStringnew, update or remove
SzDecimalSize of a new order, in base units; null for update and remove
OrigSzDecimalSize before an update, in base units; null otherwise
NewSzDecimalSize after an update, in base units; null otherwise
ExtraMapForward-compatibility map; non-empty when the node emitted a field not yet modelled
Sample file
oracle_updates11 columnsOne 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.
ColumnTypeDescription
Block_NumberUInt64HyperCore block number; the join key across all seven tables
Block_TimeUInt64Block time, epoch nanoseconds
UpdateClassStringWho pushed the update: Validator or Deployer (HIP-3 markets)
MarkPxInputsArrayCoin and price pairs used as mark price inputs
SpotPxInputsArrayCoin and price pairs from spot markets
ExternalPerpPxInputsArrayCoin and price pairs from external perp venues
OraclePxs_CoinToMarkPxArrayResulting mark price per coin with LastUpdateTime and DailyPx
OraclePxs_CoinToOraclePxArrayResulting oracle price per coin with LastUpdateTime and DailyPx
OraclePxs_CoinToExternalPerpPxArrayResulting external perp price per coin with LastUpdateTime and DailyPx
OraclePxs_ExtraMapForward-compatibility map; non-empty when the node emitted a field not yet modelled
ExtraMapForward-compatibility map; non-empty when the node emitted a field not yet modelled
Sample file

Ask an AI about this data

Send this dataset’s full schema to an assistant and ask it anything. It reads the plain-text brief first, so the answer comes from the real column list rather than a guess.

Start with

Opens a new chat with the question filled in. Nothing about you is sent to Bitquery, and the assistant sees only the public brief.

Delivery

Parquet files, delivered as signed download links by email after payment, in this layout:

# order_statuses — 200 blocks per file
hyperliquid/order_statuses<start_block>_<end_block>.parquet

# book_diffs — 200 blocks per file
hyperliquid/book_diffs<start_block>_<end_block>.parquet

# oracle_updates — 200 blocks per file
hyperliquid/oracle_updates<start_block>_<end_block>.parquet
  1. Download a free sampleNo email needed.
  2. Pay nowName, work email and licence check.
  3. Pay the invoiceBy card or bank transfer.
  4. Get signed linksThe team prepares the export and emails the links.

Price

Latest month
Aug 23, 2026 → Sep 23, 2026
$150one-time, USD
  • All 3 tables, 48 columns
  • Parquet files in the layout under Delivery
  • Signed download links by email
  • Licensed under the Data License
Pay now

FAQ

12 questions
What is included in Hyperliquid Order Book?

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.

How big is it?

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.

How is this different from Hyperliquid's free S3 archive?

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.

How do I rebuild the book?

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.

Where are the fills?

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.

How far back does it go?

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.

Why are there two time units?

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.

What does a non-empty Extra column mean?

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.

How do I load a file?

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.

Does this match the live stream?

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.

How is the data delivered, and how current is it?

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.

Can I try before I buy?

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.