Skip to main content
L4 is the whole book order by order: every resting order with its own oid and user_address, plus the diffs to roll the book forward and reconstruct it at any point in time, not the aggregated levels of L2. L4 is the deepest order-book grain 0xArchive serves and carries the fields needed for deterministic order-level reconstruction. It is a Hyperliquid-family surface: Hyperliquid core, Spot, HIP-3, and HIP-4 all expose L4. Lighter exposes individual orders through L3 instead, so do not reach for an L4 route on Lighter. Use L4 when you need microstructure, queue position, per-order user attribution, or a book you can reconstruct the same way twice; use L2 when aggregated levels are enough.

Get an L4 snapshot

Pick your venue. The path and symbol format change per family.
curl "https://api.0xarchive.io/v1/hyperliquid/orderbook/BTC/l4" \
  -H "X-API-Key: $OXARCHIVE_API_KEY"
/v1/hyperliquid/orderbook/{symbol}/l4, /l4/diffs, /l4/history. Plain perp symbols such as BTC and ETH.

Request parameters

ParameterInTypeRequiredDescription
symbolpathstringYesTrading pair symbol, e.g. BTC
timestampqueryinteger (ms)NoSnapshot route only; Unix milliseconds; omit for the latest checkpoint
start, endqueryinteger (ms)NoHistory and diff routes; Unix-millisecond window bounds
limitqueryintegerNoMax rows or checkpoints on history and diff routes
cursorquerystring/integerNoContinuation token from meta.next_cursor
Use /l4/history with start and end for a past window; timestamp is for the snapshot-at-time route. L4 is a Pro-and-above tier surface.

Example response

{
  "success": true,
  "data": {
    "coin": "BTC",
    "timestamp": "2026-06-05T13:53:32.540Z",
    "checkpoint_timestamp": "2026-06-05T13:53:32.540Z",
    "diffs_applied": 0,
    "last_block_number": 1023882395,
    "bids": [
      { "oid": 459287722336, "user_address": "0xfcf104006bfff47695c1dc21dad3e9de1e72098e", "side": "B", "price": 61088, "size": 0.40603 }
    ],
    "asks": [
      { "oid": 459287726057, "user_address": "0x1c1c270b573d55b68b3d14722b5d5d401511bed0", "side": "A", "price": 61089, "size": 0.40924 }
    ],
    "bid_count": 24501,
    "ask_count": 18101,
    "total_bid_size": 10176.96,
    "total_ask_size": 5165.62
  },
  "meta": { "request_id": "req_5b1e0c47a9d23f88" }
}
bids and asks are truncated above. That snapshot carried 24,501 bids and 18,101 asks: the entire resting book, each order with its own oid and user_address.

Response fields

Responses use the { success, data, meta } envelope; the fields below are data.
FieldTypeDescription
coinstringSymbol (the L4 payload uses coin)
timestampstringWhen the book was in this state (UTC)
checkpoint_timestampstringInstant the reconstruction is current to
diffs_appliedintegerDiffs rolled onto the checkpoint; 0 is a clean checkpoint
last_block_numberintegerChain block the reconstruction is current to
bids, asksarrayResting orders, each with oid, user_address, side, price, size
bid_count, ask_countintegerFull-book order counts, even when only the top orders are shown
total_bid_size, total_ask_sizenumberFull-book aggregate sizes
price and size are numbers in L4 payloads, while L2 and L3 return px/sz as decimal strings, so check types per route. The Endpoint Reference carries the exact types, and full field meanings live in the field dictionary.

Reconstruct from diffs

A snapshot is a checkpoint. To follow the book over time, take an l4 checkpoint, then apply l4/diffs in order, or pull l4/history for a window. diffs_applied: 0 means a clean checkpoint; a higher number means it was rolled forward from the last one. When sequence and gap handling matter, move to WebSocket L4 Order Book and WebSocket Replay, or let SDK Reconstruction hold local book state for you. A current L2 snapshot is fine for inspecting the book or a spread. It is not the same dataset as a replayable L4 history window: what depth, which venue family, what timestamp semantics, and whether the historical book can be reconstructed the same way twice.

Stream it live

Order-level updates stream on l4_diffs and l4_orders for Hyperliquid core; Spot, HIP-3, and HIP-4 use prefixed variants (spot_l4_diffs, hip3_l4_diffs, hip4_l4_orders, and so on). For sequence and gap handling, see WebSocket L4 Order Book and WebSocket Replay.
ws.send(JSON.stringify({ op: "subscribe", channel: "l4_diffs", symbol: "BTC" }));
The full channel matrix is on WebSocket Channels.

Export in bulk

L4 books export as the l4_orderbook schema ($8/GB, $25 minimum), and order-level events export as l4_orders ($8/GB, $25 minimum), delivered as Parquet with ZSTD compression. Keep L2, L3, and L4 in separate tables. Build a selection in the Data Catalog; columns and coverage keys are on Export Schemas.

Other depths

L2 order book

Aggregated price levels (px, sz, n) across every venue family.

L3 order book

Individual orders on Lighter, order-level detail without full lifecycle.

Next

Start from Order books for the depth overview, Order history and Order flow for the lifecycle around the book, WebSocket L4 Order Book when sequence matters, or Data Quality before any long historical window.
Last modified on June 25, 2026