DATA/ORDER BOOKS
L2 · L3 · L4 · Hyperliquid first

From aggregated levels to individual orders.

Every book we capture is stored as snapshots plus every delta, checked against the venue's sequence numbers. Rebuild the book at any nanosecond in our history, at the depth your model needs.

What L2, L3 and L4 each show you.

The same book, three resolutions. Use the tabs on any panel to switch between them.

L2 · book_l2

Aggregated levels

Total resting size at each price. Good for spreads, depth, slippage estimates and imbalance across levels. Planned on every venue we list.

L3 · book_l3

Order by order

Every resting order, in queue order, with add, modify, cancel and fill events. Needed for queue position, order lifetimes and cancel behaviour.

L4 · book_l4

Attributed flow

L3 plus the participant behind each order, where the venue publishes it. On Hyperliquid that is the on-chain user address of every order.

L2L3L4
Tablebook_l2book_l3book_l4
RowA price level changed: new total size.An order event: add, modify, cancel or fill.An order event plus participant_id.
Tells youHow much is resting at each price.Which orders are resting, in what sequence, and for how long.Who placed them, as an address or venue id.
Typical useSpread, depth, OFI, slippage, RESIL.Queue position, fill probability, CXL/FILL, QUEUE.Participant behaviour, PART, chain intelligence.
Venues planned12127
PlanResearcher and aboveDesk and aboveDesk and above

Rebuild any book at any moment.

Each book is stored as a stream of deltas between full snapshots. We write a full-depth snapshot of every book at each UTC hour boundary from our own reconstructed state, and we also keep every snapshot the venue sends, for example after a reconnect. Snapshot rows are marked is_snapshot = true, and snapshot_reason says which kind: file_start (00:00 UTC), checkpoint (every other hour) or venue.

To rebuild the book at time T, start from the last snapshot at or before T and apply deltas in seq order up to T. The hourly snapshot means at most one hour of deltas to replay, and every daily S3 file opens with the 00:00 snapshot, so each file stands on its own.

01Load the snapshotLast row group with is_snapshot at or before T.
02Apply deltas in sequenceL2: set the level to size, remove it at zero. L3: add, modify, cancel or fill by order_id.
03Check the window for gapsQuery gaps for the interval. If a gap overlaps it, the book is valid again from the next snapshot.
from decimal import Decimal
from fdc import Client

fdc = Client(api_key="fdc_live_...")
T = "2027-03-12T14:30:00.250Z"

# start at the hour: the first rows are the hourly snapshot
msgs = fdc.book(venue="hyperliquid", symbol="BTC-PERP",
                depth="L2", start="2027-03-12T14:00:00Z", end=T)

book, in_snap = {"bid": {}, "ask": {}}, False
for m in msgs:
    if m["is_snapshot"] and not in_snap:
        book = {"bid": {}, "ask": {}}   # new snapshot
    in_snap = m["is_snapshot"]
    px, sz = Decimal(m["price"]), Decimal(m["size"])
    if sz == 0:
        book[m["side"]].pop(px, None)
    else:
        book[m["side"]][px] = sz

best_bid, best_ask = max(book["bid"]), min(book["ask"])

Sequence numbers, checksums and gaps.

Three checks run on every book we capture. When one fails, the failure is written to a table you can query.

SEQtwo regions

Merged by sequence number

Each venue is captured independently from Tokyo and Ireland. The two streams are merged on the venue's own sequence number, so a message dropped in one region is filled from the other. seq is kept on every row.

CRC32where published

Checksums verified

Where a venue publishes a book checksum, we verify it on every update at capture time. Our hourly snapshots carry their own checksum, a CRC32 over the top 25 levels in a documented format, so you can verify your own rebuild.

GAPSnever filled

Gaps recorded, not hidden

A sequence break that survives the merge, or a checksum mismatch, is written to gaps with its start, end and reason. The book resyncs from a fresh venue snapshot. Nothing is interpolated.

gaps columnTypeMeaning
datasetstringAffected table, e.g. book_l3.
seq_start seq_endint64First and last missing venue sequence numbers, where known.
ts_start ts_endint64Interval during which the book is not guaranteed, ns, capture clock.
reasonenumseq_break, checksum_mismatch, venue_outage or disconnect.
regions_missinglist<string>Regions that missed it; a gap is only recorded when every capturing region did.
resyncboolTrue when the book was rebuilt from a fresh venue snapshot after the gap.
detected_byenumWhich check found the gap, e.g. seq or checksum.

Book table columns.

All three tables carry the common columns: venue, symbol, venue_symbol, ts_exchange, ts_capture, seq, source.

BOOK_L2

ColumnTypeMeaning
sidestring"bid" or "ask".
pricedecimalLevel price.
sizedecimalNew total size at the level. Zero removes it.
is_snapshotboolRow belongs to a full snapshot.
snapshot_reasonstringvenue, file_start or checkpoint on snapshot rows; null on deltas.
is_lastboolLast row of one venue message. Read the book only after it.
checksumint64Our CRC32 of the top 25 levels, on file-start and hourly snapshot rows.
checksum_okboolResult of the venue checksum check at capture, where the venue publishes one.
level_countint32Orders at the level, where the venue publishes it.

BOOK_L3

ColumnTypeMeaning
order_idstringVenue order id, unchanged.
eventstringadd, modify, cancel or fill.
sidestring"bid" or "ask".
pricedecimalOrder price.
sizedecimalRemaining resting size after the event.
fill_sizedecimalSize filled, on fill events.
trade_idstringMatching row in trades, on fill events.
is_snapshotboolRow belongs to a full snapshot (add events in queue order).
snapshot_reason is_lastAs in book_l2.

BOOK_L4

ColumnTypeMeaning
all book_l3 columnsIdentical meaning.
participant_idstringParticipant as published by the venue. On Hyperliquid, the user's on-chain address.
counterparty_idstringThe participant on the other side, on fill events.
entity_idstringAnonymous cross-venue entity, e.g. E-4417, with the chain intelligence add-on. Null otherwise.

L4 plus entity_id is what we call L4+. See chain intelligence.

L2 and L3 planned on all twelve venues, L4 on seven.

Hyperliquid L2, L3 and L4 ship in Phase 1. Every other venue below is planned, subject to a data agreement with the exchange, and L4 is offered if that agreement includes participant-level data.

Full coverage matrix
VenuePhaseL2L3L4
HyperliquidP1●●●
BinanceP2●●○
BybitP2●●○
OKXP2●●○
CoinbaseP3●●●
DeribitP3●●●
KrakenP3●●●
BitgetP3●●○
KuCoinP4●●○
BitfinexP4●●●
BitstampP4●●●
dYdXP4●●●

Read next.

Full depth, with proof nothing is missing.

Pre-register for Hyperliquid L2, L3 and L4 history from November 2025, with early access targeted for Q1 2027.

EARLY ACCESS · PRE-SALE PRICINGPre-register for early access → DANIEL GARCIA · CEO & FOUNDERdaniel@financedatacloud.com →