Get a free key
Hyperliquid · Order book

Hyperliquid order book API: L2 depth and L4 orders with their wallets

Every order waiting on Hyperliquid's book with the wallet that placed it, the size at each price, what became of any wallet's orders, the $1M walls and who pulls them, where a move would squeeze, and whose money holds the book. A snapshot every 5 minutes now and about every 12 minutes back to July 2026, kept for a year. Ask it in Claude or ChatGPT, or call it from code.

Ask your AI

Ask the order book in plain words

Connect once, then ask Claude, ChatGPT or Cursor. The agent reads the book as it stands now, or at any past moment.

MCP server
https://data.vike.io/mcp
Questions to copy · Claude, ChatGPT, CursorConnect in a minute →

“Whose bid wall is under BTC right now?”

hl_orders open

“Which orders did this wallet place, and what happened to them? (paste an address)”

hl_orders wallet

“Where would stops and liquidations squeeze BTC?”

hl_orders squeeze

“Who keeps pulling big walls on BTC?”

hl_orders walls order_stats
One tool, 8 views · 1 credit a call

hl_orders

The agent picks the view from your question. Each view is the same data as one route below.

ViewWhat it answersSame data as
openEvery order waiting at one moment, for a coin and/or a wallet, each with its owner's size and PnL groupGET /v1/hyperliquid/orders
bookThe size waiting at each price, best price first, at one momentGET /v1/hyperliquid/symbols/{symbol}/book
clustersOrders and untriggered stops grouped into price bands around the mid; one group's only, if you askGET /v1/hyperliquid/symbols/{symbol}/order-clusters
walletWhat became of one wallet's orders over up to 30 days: filled, partly filled, canceled or expiredGET /v1/hyperliquid/wallets/{address}/orders
wallsThe orders of $1M or more of a coin or a wallet, and how each ended: filled, pulled with no fill, or still openGET /v1/hyperliquid/walls
order_statsOne wallet's walls, in totals and per coin: how many it pulled and how many were filledGET /v1/hyperliquid/wallets/{address}/order-stats
squeezeThe book, the stops waiting to fire and the liquidation prices on one price ladder: where a move would feed itselfGET /v1/hyperliquid/symbols/{symbol}/squeeze-map
book_cohortsWho owns the bids and asks near the price, by size or PnL group, over timeGET /v1/hyperliquid/symbols/{symbol}/book-cohorts
bash
# any MCP client; or from the terminal:
vike-data call hl_orders --args '{"view": "open", "symbol": "BTC", "cohort_axis": "size", "cohort": "4x whale"}'

All 28 Hyperliquid tools →

L1, L2, L4 in plain words

L1, L2 and L4: three ways to look at an order book

LevelWhat you seeThe question it answersHere
L1The best bid and the best ask: the top of the book“What is the spread on BTC?”/symbols/{symbol}/book?levels=1
L2The total size waiting at each price, best price first“How much is bid within 1% of the price?”/symbols/{symbol}/book, up to 1,000 prices a side
L4Every single order, with the wallet that placed it, its type, size and when it was placed“Whose order is that $10M bid?”/orders, with the owner's size and PnL group
Snapshots, not ticks. Each answer is a snapshot of the whole book, taken every 5 minutes (about every 12 minutes for older moments: History says from when). We do not serve a tick-by-tick or block-by-block feed of the book. Big orders arriving and leaving are pushed on the walls channel, as each snapshot finds them.
L4 · every order with its wallet

L4 order book data: every order with its wallet

Every order waiting on the book at one moment, who placed it, and which group that wallet is in.

Hyperliquid · REST · CLI · MCP

Open orders (L4)

The orders waiting on the book at one moment: every one in a 5-minute snapshot.

Route
GET /v1/hyperliquid/orders
Snapshots
Every 5 minutes from 2026-10-23 21:45 UTC; about every 12 minutes back to 2026-07-29
Past moments
at, any time since 2026-07-29, rounded down to 5 minutes
MCP
hl_orders · 1 credit
Cost
1 credit, one request of the hourly limit
Free APIArchiveStreamMCP
  • A coin, a wallet, or both: symbol=BTC, a HIP-3 market symbol=xyz:TSLA, wallet=0x….
  • Any past moment: at=2026-11-12T14:30:00Z gives the book as it stood then, and grades each owner by the labels of the hour before it, so a backtest never sees what was learned later.
  • One group of traders: cohort_axis=size&cohort=4x whale (accounts of $10M or more) or cohort_axis=pnl&cohort=3x smart (the top 1% by realized PnL).
  • Spot books: market=spot&symbol=HYPE/USDC. Perp and spot are never mixed: HYPE is both.
  • Narrower: one order (oid), one type (order_type=Stop Market), orders placed in a window (created_from, created_to).
  • Pages: 100 orders a page by default, up to 1,000; nextCursor pages through the same snapshot.

A real answer: BTC orders of 4x whales, placed since 12:00 UTC

GET /v1/hyperliquid/orders?symbol=BTC&cohort_axis=size&cohort=4x%20whale&created_from=2026-11-13T12:00:00Z&limit=3 · captured 2026-11-13 16:01 UTC

WalletSideTypePriceSize, BTCValuePnL groupPlaced, UTC
0xca49…53c8sellLimit68,9260.02995$2,0643x smart11-13 15:59:54
0xecb6…2b00sellLimit68,9240.94401$65,0653x smart11-13 15:59:54
0xecb6…2b00sellLimit68,9120.94416$65,0643x smart11-13 15:59:55

The JSON

json
{
 "snapshotTs": "2026-11-13T16:00:00+00:00",
 "source": "l4_5m",
 "labelBasis": "current",
 "labelsAsOf": null,
 "labelComputed": {
  "sizeCohort": {
   "grading": null,
   "label_basis": "current",
   "when": "the newest wallet snapshot",
   "lookahead": false,
   "source": "latest wallet snapshot (size rung)",
   "detail": "The orders are the newest snapshot and each wallet's label is its current one: row and label are both 'now', so a current label has no earlier row to contaminate. A past snapshot (`at`) is graded by the labels of its own time instead.",
   "caveat": "The order snapshot and the label source refresh on their own cadences (minutes apart), so a wallet that changed cohort in between is graded by its newer label."
  },
  "pnlCohort": {
   "grading": "realized",
   "label_basis": "current",
   "when": "at query time",
   "lookahead": false,
   "source": "live wallet realized-PnL ladder",
   "detail": "The orders are the newest snapshot and each wallet's label is its current one: row and label are both 'now', so a current label has no earlier row to contaminate. A past snapshot (`at`) is graded by the labels of its own time instead.",
   "caveat": "The order snapshot and the label source refresh on their own cadences (minutes apart), so a wallet that changed cohort in between is graded by its newer label."
  }
 },
 "orders": [
  {
   "oid": 604141529978,
   "wallet": "0xca4903c207a0df58bf37d4bc8bbc5210726f53c8",
   "symbol": "BTC",
   "side": "sell",
   "orderType": "Limit",
   "limitPx": 68926.0,
   "triggerPx": null,
   "isTrigger": false,
   "isPositionTpsl": false,
   "reduceOnly": false,
   "tif": "Alo",
   "cloid": "0x0000000000000000687568c1e7012000",
   "origSz": 0.02995,
   "sz": 0.02995,
   "placedAt": "2026-11-13T15:59:54.070000+00:00",
   "firstSeen": "2026-11-13T16:00:00+00:00",
   "lastSeen": "2026-11-13T16:00:00+00:00",
   "builder": null,
   "builderFeeTenthsBp": null,
   "sizeCohort": "4x whale",
   "pnlCohort": "3x smart",
   "pnlCumUsd": 1675824.057700992
  },
  {
   "oid": 604141550205,
   "wallet": "0xecb63caa47c7c4e77f60f1ce858cf28dc2b82b00",
   "symbol": "BTC",
   "side": "sell",
   "orderType": "Limit",
   "limitPx": 68924.0,
   "triggerPx": null,
   "isTrigger": false,
   "isPositionTpsl": false,
   "reduceOnly": false,
   "tif": "Alo",
   "cloid": "0x51094585594542311ff11fffffffffff",
   "origSz": 0.94401,
   "sz": 0.94401,
   "placedAt": "2026-11-13T15:59:54.755000+00:00",
   "firstSeen": "2026-11-13T16:00:00+00:00",
   "lastSeen": "2026-11-13T16:00:00+00:00",
   "builder": null,
   "builderFeeTenthsBp": null,
   "sizeCohort": "4x whale",
   "pnlCohort": "3x smart",
   "pnlCumUsd": 35058411.14513373
  },
  {
   "oid": 604141556631,
   "wallet": "0xecb63caa47c7c4e77f60f1ce858cf28dc2b82b00",
   "symbol": "BTC",
   "side": "sell",
   "orderType": "Limit",
   "limitPx": 68912.0,
   "triggerPx": null,
   "isTrigger": false,
   "isPositionTpsl": false,
   "reduceOnly": false,
   "tif": "Alo",
   "cloid": "0x51094585594915355ff10fffffffffff",
   "origSz": 0.94416,
   "sz": 0.94416,
   "placedAt": "2026-11-13T15:59:55.103000+00:00",
   "firstSeen": "2026-11-13T16:00:00+00:00",
   "lastSeen": "2026-11-13T16:00:00+00:00",
   "builder": null,
   "builderFeeTenthsBp": null,
   "sizeCohort": "4x whale",
   "pnlCohort": "3x smart",
   "pnlCumUsd": 35058411.14513373
  }
 ],
 "nextCursor": "eyJhIjoiQlRDIiwiZCI6IkhMIiwiaiI6MSwiayI6IkJUQ3x8fDB8fDIwMjYtMTEtMTMgMTI6MDA6MDB8fHNpemV8NHggd2hhbGUiLCJsNCI6MSwibSI6Im9yZGVycyIsIm8iOjYwNDE0MTU1NjYzMSwicSI6IlVTREMiLCJzIjoibDRfNW0iLCJzZCI6LTEsInQiOiIyMDI2LTExLTEzIDE2OjAwOjAwIn0"
}

Each order

FieldTypeDescription
oidnumberThe order id
walletstringThe wallet that placed it
symbolstringBTC, a HIP-3 market like xyz:TSLA, or a spot pair like HYPE/USDC
sidestringbuy | sell
orderTypestringLimit, Stop Market, Stop Limit, Take Profit Market, Take Profit Limit or Trailing Stop Market
limitPxnumberIts limit price
triggerPxnumber|nullThe price that fires a stop or take-profit
isTriggerbooleanA stop or take-profit not fired yet
isPositionTpslbooleanA take-profit or stop for the whole position: it has no size until it fires
reduceOnlybooleanCan only shrink a position
tifstring|nullTime in force, e.g. Gtc, Alo
cloidstring|nullThe trader's own id for the order
origSznumber|nullSize when placed, in the coin
sznumber|nullSize still waiting, in the coin
placedAtstringWhen it was placed, UTC
firstSeen / lastSeenstringThe first and last snapshot that saw it
builderstring|nullThe front-end or bot that sent it, when it named one
builderFeeTenthsBpnumber|nullThat builder's fee, in tenths of a basis point
sizeCohortstring|nullThe owner's size group, by account value: shrimp to 4x whale; null where unknown
pnlCohortstring|nullThe owner's PnL group, by realized PnL: 3x rekt to 3x smart; null where unknown
pnlCumUsdnumber|nullThe owner's realized PnL to date, USD

The answer around them: snapshotTs (the snapshot's own time), source (l4_5m, the 5-minute snapshot, or state_12m, rebuilt from the 12-minute checkpoints), labelBasis (current without at, point_in_time with it), labelsAsOf, labelComputed and nextCursor.

Call it

bash
curl -H "X-API-KEY: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/orders?symbol=BTC&created_from=2026-11-13T12%3A00%3A00Z&cohort_axis=size&cohort=4x+whale&limit=3"
L2 · depth per price

L2 order book: the size waiting at each price

The book as most charts draw it: each price with the total size waiting there and how many orders make it up.

Hyperliquid · REST · CLI · MCP

Order book (L2)

The waiting limit orders summed per price: bids highest first, asks lowest first.

Route
GET /v1/hyperliquid/symbols/{symbol}/book
Snapshots
Every 5 minutes from 2026-11-13 08:40 UTC; about every 12 minutes back to 2026-07-28
Levels
levels: 1 to 1,000 prices a side, best first (default 100); side: both, bid, ask
MCP
hl_orders · 1 credit
Cost
1 credit, one request of the hourly limit
Free APIArchiveStreamMCP

A real answer: BTC book, 5 prices a side

GET /v1/hyperliquid/symbols/BTC/book?levels=5 · captured 2026-11-13 16:02 UTC

The JSON

json
{
 "symbol": "BTC",
 "market": "perp",
 "snapshotTs": "2026-11-13T16:00:00+00:00",
 "source": "l4_5m",
 "bids": [
  {
   "px": 68880.0,
   "sz": 0.37871,
   "n": 3
  },
  {
   "px": 68877.0,
   "sz": 0.58003,
   "n": 4
  },
  {
   "px": 68876.0,
   "sz": 0.46316,
   "n": 4
  },
  {
   "px": 68875.0,
   "sz": 0.03629,
   "n": 1
  },
  {
   "px": 68874.0,
   "sz": 2.69543,
   "n": 2
  }
 ],
 "asks": [
  {
   "px": 68881.0,
   "sz": 5.38383,
   "n": 9
  },
  {
   "px": 68887.0,
   "sz": 1.89278,
   "n": 1
  },
  {
   "px": 68889.0,
   "sz": 2.73145,
   "n": 9
  },
  {
   "px": 68890.0,
   "sz": 0.45778,
   "n": 5
  },
  {
   "px": 68891.0,
   "sz": 1.29833,
   "n": 4
  }
 ],
 "notes": [
  "Each level is the resting limit orders at one price: px the price, sz their remaining size in the base asset, n how many orders. Untriggered stop and take-profit orders are not in the book.",
  "levels counts price levels on each side from the best price outward: bids highest first, asks lowest first.",
  "snapshotTs is the snapshot's own time, at or before `at`: every 5 minutes (l4_5m) or about every 12 minutes (state_12m)."
 ]
}

snapshotTs is the snapshot's own time, at or before at. Stops and take-profits that have not fired are not in the book: price bands count them. An unknown symbol, or no snapshot of it in the hour up to at, is a 404.

Call it

bash
curl -H "X-API-KEY: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/symbols/BTC/book?levels=5"
Price bands · by group

Price bands, by group: where the orders and stops sit

The book cut into price bands around the mid: bids and asks by their limit price, stop-losses and take-profits by the price that fires them. Ask for one group, and you see where that group's orders and stops sit.

Hyperliquid · REST · CLI · MCP

Order clusters

One symbol's waiting orders and stops within a range of the mid, summed per price band.

Route
GET /v1/hyperliquid/symbols/{symbol}/order-clusters
Bands
step_bps wide (default 10 = 0.1%), within range_pct of the mid (default 10%)
One group
cohort_axis + cohort, e.g. size · 4x whale; with at, the labels of the hour before
MCP
hl_orders · 1 credit
Cost
1 credit, one request of the hourly limit
Free APIArchiveStreamMCP

Each band: price_low, price_high, n_orders, n_wallets, n_position_tpsl, cluster_size (in the coin) and cluster_notional (USD), under buckets.bid, ask, sl and tp. Trailing stops are not counted: they have no trigger price until the trail starts.

A real answer: BTC in 0.25% bands: the busiest band of each kind

GET /v1/hyperliquid/symbols/BTC/order-clusters?step_bps=25 · captured 2026-11-13 16:02 UTC

KindBandOrdersWalletsSize, BTCValue
Bids, by limit price68,708-68,880607112476.96$32,817,750
Asks, by limit price68,880-69,053723175447.82$30,878,138
Stop-losses, by trigger price70,430-70,603877749.70$3,505,698
Take-profits, by trigger price74,908-75,0801038689.63$6,722,529

The JSON

json
{
 "symbol": "BTC",
 "snapshot_ts": "2026-11-13T16:00:00+00:00",
 "source": "l4_5m",
 "reference_price": 68880.5,
 "best_bid": 68880.0,
 "best_ask": 68881.0,
 "step_bps": 25,
 "range_pct": 10,
 "buckets": {
  "ask": [
   {
    "price_low": 69052.70125,
    "price_high": 69224.9025,
    "n_orders": 312,
    "n_wallets": 146,
    "n_position_tpsl": 0,
    "cluster_size": 418.69664,
    "cluster_notional": 28936776.44
   },
   {
    "price_low": 68880.5,
    "price_high": 69052.70125,
    "n_orders": 723,
    "n_wallets": 175,
    "n_position_tpsl": 0,
    "cluster_size": 447.8244,
    "cluster_notional": 30878138.36
   }
  ],
  "bid": [
   {
    "price_low": 68708.29875,
    "price_high": 68880.5,
    "n_orders": 607,
    "n_wallets": 112,
    "n_position_tpsl": 0,
    "cluster_size": 476.95808,
    "cluster_notional": 32817750.02
   },
   {
    "price_low": 67502.89,
    "price_high": 67675.09125,
    "n_orders": 366,
    "n_wallets": 202,
    "n_position_tpsl": 0,
    "cluster_size": 389.63867,
    "cluster_notional": 26343839.51
   }
  ],
  "sl": [
   {
    "price_low": 70430.31125,
    "price_high": 70602.5125,
    "n_orders": 87,
    "n_wallets": 77,
    "n_position_tpsl": 26,
    "cluster_size": 49.69844,
    "cluster_notional": 3505698.296
   },
   {
    "price_low": 64403.2675,
    "price_high": 64575.46875,
    "n_orders": 17,
    "n_wallets": 17,
    "n_position_tpsl": 7,
    "cluster_size": 50.82892,
    "cluster_notional": 3278415.226
   }
  ],
  "tp": [
   {
    "price_low": 74907.54375,
    "price_high": 75079.74500000001,
    "n_orders": 103,
    "n_wallets": 86,
    "n_position_tpsl": 40,
    "cluster_size": 89.63381,
    "cluster_notional": 6722529.315
   },
   {
    "price_low": 73185.53125,
    "price_high": 73357.7325,
    "n_orders": 32,
    "n_wallets": 25,
    "n_position_tpsl": 11,
    "cluster_size": 31.16531,
    "cluster_notional": 2281992.322
   }
  ]
 },
 "notes": [
  "bid/ask bucket resting orders by limit price, tp/sl bucket untriggered stops by trigger price; cluster_size is the remaining size in the base asset, cluster_notional is size x that price.",
  "Whole-position TP/SL orders have no size of their own until they fire: they are counted in n_orders and n_position_tpsl and add 0 to cluster_size.",
  "Trailing stops are not bucketed: they have no trigger price until the trail activates."
 ]
}

Each list of the JSON trimmed to its 2 largest bands by value, of 40 bid, 40 ask, 80 stop-loss and 80 take-profit bands.

  • bid/ask bucket resting orders by limit price, tp/sl bucket untriggered stops by trigger price; cluster_size is the remaining size in the base asset, cluster_notional is size x that price.
  • Whole-position TP/SL orders have no size of their own until they fire: they are counted in n_orders and n_position_tpsl and add 0 to cluster_size.
  • Trailing stops are not bucketed: they have no trigger price until the trail activates.

Call it

bash
curl -H "X-API-KEY: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/symbols/BTC/order-clusters?step_bps=25"
One wallet's orders

What happened to a wallet's orders

Every order a wallet had on the book or filled in a window, and how each one ended.

Hyperliquid · REST · CLI · MCP

A wallet's orders and their outcome

Newest placement first, each with its fills in the window and a status.

Route
GET /v1/hyperliquid/wallets/{address}/orders
Window
from / to: the last 7 days by default, at most 30
MCP
hl_orders · 1 credit
Cost
1 credit, one request of the hourly limit
Free APIArchiveStreamMCP
StatusIn plain words
openStill waiting on the book at the newest snapshot
filledIts fills cover the whole size
partially_filledSome of it traded, the rest did not
canceled_or_expiredIt left the book with no fill in the window. A cancel by the trader, a margin cancel and an expiry look the same in the snapshots, so they are not told apart

What each order adds

FieldTypeDescription
statusstringopen | filled | partially_filled | canceled_or_expired
seenInSnapshotsbooleanfalse: placed and filled between two snapshots, never seen waiting, so its price, size and placement time are unknown
nFills / filledSznumberHow many fills in the window, and their total size
avgFillPxnumber|nullThe average fill price
makerSharenumber|nullThe share of the filled value that waited on the book (maker)
firstFillAt / lastFillAtstring|nullThe first and last fill in the window
closedPnlnumberPnL booked by those fills, USD
fillFees / feeTokennumber / stringFees paid on them

Plus the order's own fields from L4 (type, prices, sizes, placement, builder) and, around them, wallet, from, to, snapshotTs, source, notes and nextCursor.

A real answer: the newest orders of one busy wallet, in the last 7 days

GET /v1/hyperliquid/wallets/0xecb63caa47c7c4e77f60f1ce858cf28dc2b82b00/orders?limit=3 · captured 2026-11-13 16:02 UTC

MarketSideStatusTypePriceSizePlaced, UTCFills
xyz:MUbuyopenLimit756.22115.95811-13 16:00:000
xyz:MUbuyopenLimit760.7923.75511-13 16:00:000
xyz:CLbuyopenLimit87.77348.78811-13 16:00:000

The JSON

json
{
 "wallet": "0xecb63caa47c7c4e77f60f1ce858cf28dc2b82b00",
 "from": "2026-11-06T16:00:00+00:00",
 "to": "2026-11-13T16:00:00+00:00",
 "snapshotTs": "2026-11-13T16:00:00+00:00",
 "source": "l4_5m",
 "orders": [
  {
   "oid": 604141637837,
   "symbol": "xyz:MU",
   "side": "buy",
   "status": "open",
   "seenInSnapshots": true,
   "orderType": "Limit",
   "limitPx": 756.22,
   "triggerPx": null,
   "isPositionTpsl": false,
   "reduceOnly": false,
   "tif": "Alo",
   "cloid": "0x27353293390802176ff17fffffffffff",
   "origSz": 115.958,
   "placedAt": "2026-11-13T16:00:00.312000+00:00",
   "firstSeen": "2026-11-13T16:00:00+00:00",
   "lastSeen": "2026-11-13T16:00:00+00:00",
   "builder": null,
   "builderFeeTenthsBp": null,
   "nFills": 0,
   "filledSz": 0.0,
   "avgFillPx": null,
   "makerShare": null,
   "firstFillAt": null,
   "lastFillAt": null,
   "closedPnl": 0.0,
   "fillFees": 0.0,
   "feeToken": null
  },
  {
   "oid": 604141637836,
   "symbol": "xyz:MU",
   "side": "buy",
   "status": "open",
   "seenInSnapshots": true,
   "orderType": "Limit",
   "limitPx": 760.79,
   "triggerPx": null,
   "isPositionTpsl": false,
   "reduceOnly": false,
   "tif": "Alo",
   "cloid": "0x27353293390801920ff14fffffffffff",
   "origSz": 23.755,
   "placedAt": "2026-11-13T16:00:00.312000+00:00",
   "firstSeen": "2026-11-13T16:00:00+00:00",
   "lastSeen": "2026-11-13T16:00:00+00:00",
   "builder": null,
   "builderFeeTenthsBp": null,
   "nFills": 0,
   "filledSz": 0.0,
   "avgFillPx": null,
   "makerShare": null,
   "firstFillAt": null,
   "lastFillAt": null,
   "closedPnl": 0.0,
   "fillFees": 0.0,
   "feeToken": null
  },
  {
   "oid": 604141637831,
   "symbol": "xyz:CL",
   "side": "buy",
   "status": "open",
   "seenInSnapshots": true,
   "orderType": "Limit",
   "limitPx": 87.773,
   "triggerPx": null,
   "isPositionTpsl": false,
   "reduceOnly": false,
   "tif": "Alo",
   "cloid": "0x27353293390754048ff10fffffffffff",
   "origSz": 48.788,
   "placedAt": "2026-11-13T16:00:00.312000+00:00",
   "firstSeen": "2026-11-13T16:00:00+00:00",
   "lastSeen": "2026-11-13T16:00:00+00:00",
   "builder": null,
   "builderFeeTenthsBp": null,
   "nFills": 0,
   "filledSz": 0.0,
   "avgFillPx": null,
   "makerShare": null,
   "firstFillAt": null,
   "lastFillAt": null,
   "closedPnl": 0.0,
   "fillFees": 0.0,
   "feeToken": null
  }
 ],
 "notes": [
  "canceled_or_expired: the order left the book with no fill in the window. A manual cancel, a margin cancel, a reduce-only cancel and an expiry look the same in the snapshots, so they are not told apart.",
  "Fill figures count only fills inside the window: an order filled partly before `from` and canceled in the window reads as canceled_or_expired, and one filled before `from` as partially_filled.",
  "seenInSnapshots=false: placed and filled between two snapshots, never seen resting, so its original size, limit price and placement time are unknown; it is reported as filled.",
  "open: present in the newest snapshot (snapshotTs). Snapshots are 5 minutes apart (l4_5m) or ~12 minutes (state_12m), so an order can have filled or been canceled since."
 ],
 "nextCursor": "eyJMIjoiMjAyNi0xMS0xMyAxNjowMDowMCIsImYiOiIyMDI2LTExLTA2IDE2OjAwOjAwIiwiayI6IjB4ZWNiNjNjYWE0N2M3YzRlNzdmNjBmMWNlODU4Y2YyOGRjMmI4MmIwMHx8fHwiLCJsNCI6MSwibSI6IndhbGxldF9vcmRlcnMiLCJvIjo2MDQxNDE2Mzc4MzEsInMiOiJsNF81bSIsInRvIjoiMjAyNi0xMS0xMyAxNjowMDowMCIsInRzIjoiMjAyNi0xMS0xMyAxNjowMDowMC4zMTIifQ"
}
  • canceled_or_expired: the order left the book with no fill in the window. A manual cancel, a margin cancel, a reduce-only cancel and an expiry look the same in the snapshots, so they are not told apart.
  • Fill figures count only fills inside the window: an order filled partly before `from` and canceled in the window reads as canceled_or_expired, and one filled before `from` as partially_filled.
  • seenInSnapshots=false: placed and filled between two snapshots, never seen resting, so its original size, limit price and placement time are unknown; it is reported as filled.
  • open: present in the newest snapshot (snapshotTs). Snapshots are 5 minutes apart (l4_5m) or ~12 minutes (state_12m), so an order can have filled or been canceled since.

Call it

bash
curl -H "X-API-KEY: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/wallets/0xecb63caa47c7c4e77f60f1ce858cf28dc2b82b00/orders?limit=3"
Live walls

$1M order walls: when they appear, and how they leave

A live WebSocket channel: every order of $1M or more, waiting or a stop, as soon as a 5-minute snapshot finds it new or gone, with how it left and who placed it.

Hyperliquid · WebSocket

hl.order_walls

A large resting order or stop order that appeared on the book or left it, and when it left, whether it was filled, partly filled or pulled.

Path
wss://stream.vike.io/v1/stream/hl
Filters
coin, event, kind, min_usd, pnl_cohort, side, size_cohort, wallet
Checked
Every 5-minute snapshot of the book
From
$1M: a waiting order at its limit price, a stop at the price that fires it
Free APIArchiveStreamMCP
  • Each event: event (appeared | disappeared), kind (resting | trigger), coin, side, limit_px, size_usd, remaining_usd, ts_placed, first_seen, last_seen, oid; a stop adds trigger_type (sl | tp | trailing) and trigger_px; a gone wall adds outcome and filled_usd.
  • Who placed it: subject.wallet and the owner's labels: size_cohort, pnl_cohort, pnl_cum_usd.
  • How many: about 70 to 100 resting walls appear, and about as many leave, every 5 minutes (measured 2026-11-13).
  • Catch up: events are kept 3 days; stream_events in your AI client, or GET /v1/hyperliquid/stream-events, reads what a socket missed. The channel runs while someone is subscribed: a spell with no subscriber comes back as a gap with reason channel_idle.

Filters

FieldTypeDescription
coinlist ≤ 200The symbol, e.g. BTC or xyz:TSLA.
eventone valueappeared (new on the book) or disappeared (gone from it). One of: appeared, disappeared.
kindone valueresting (a limit order on the book) or trigger (a stop or take-profit not fired yet). One of: resting, trigger.
min_usdnumberThe event's dollar size is at least this.
pnl_cohortlist ≤ 50The wallet's realized-PnL cohort; unknown also matches a wallet with no label. One of: 2x loser, 2x rekt, 2x smart, 2x winner, 3x loser, 3x rekt, 3x smart, 3x winner, loser, rekt, smart, unknown, winner.
sideone valueThe wall's side: buy or sell. One of: buy, sell.
size_cohortlist ≤ 50The wallet's account-size cohort; unknown also matches a wallet with no label. One of: 2x dolphin, 2x fish, 2x shark, 2x shrimp, 2x whale, 3x whale, 4x whale, dolphin, fish, shark, shrimp, unknown, whale.
walletlist ≤ 1,000The event's wallet.

A real event captured 2026-11-13 16:02 UTC

json
{
 "schema": "vike.event.v1",
 "event_id": "hl.order_walls:603860917080:disappeared",
 "source": "hl.order_walls",
 "kind": "order_wall",
 "ts": "2026-11-13T11:30:00.000Z",
 "cursor": "1794569400-00000000603860917080",
 "chain": "hyperliquid",
 "subject": {
  "wallet": "0x71d0e11ebb6150cebe20cf62f798be1a50108c26",
  "symbol": "BTC"
 },
 "data": {
  "event": "disappeared",
  "kind": "resting",
  "dex": "HL",
  "coin": "BTC",
  "side": "buy",
  "limit_px": 69016.0,
  "size_usd": 1164648.45,
  "remaining_usd": 1164648.45,
  "ts_placed": "2026-11-13T11:18:42.199Z",
  "first_seen": "2026-11-13T11:20:00.000Z",
  "last_seen": "2026-11-13T11:25:00.000Z",
  "oid": 603860917080,
  "source": "l4_5m",
  "outcome": "canceled",
  "filled_usd": 0.0
 },
 "labels": {
  "pnl_cohort": "3x smart",
  "pnl_cohort_basis": "live",
  "pnl_cum_usd": 4023485.4348433744,
  "size_cohort": "3x whale"
 }
}

Subscribe

python
import json, os
from websockets.sync.client import connect   # websockets >= 14

with connect("wss://stream.vike.io/v1/stream/hl",
             additional_headers={"X-API-KEY": os.environ["VIKE_API_KEY"]}) as ws:
    ws.send(json.dumps({"action": "subscribe", "id": "walls", "channel": "hl.order_walls",
                        "filter": {"coin": ["BTC"], "event": "disappeared", "kind": "resting"}}))
    for message in ws:
        frame = json.loads(message)
        if frame["type"] == "ping":
            ws.send(json.dumps({"action": "pong"}))
        elif frame["type"] == "event":
            e = frame["event"]
            d = e["data"]
            print(e["ts"], d["side"], d["limit_px"], d["size_usd"], d.get("outcome"), e["labels"].get("size_cohort"))
Outcome of a gone wallIn plain words
filledTaken in full
partially_filledPartly filled: some of it traded, the rest was pulled
canceledPulled: gone with no fill (a cancel, an expiry, or a stop whose position closed)
unknownThe fills had not arrived 10 minutes after the wall left

The history of these walls, who pulls them and how often a wall is pulled before any fill: Walls history ↓ · Every Hyperliquid channel →

Walls history

Walls history: how each big order ended, and who pulls them

Every big order the 5-minute snapshots found on the book, with how it left: filled, partly filled or pulled with no fill. Per wallet, how many it placed and how many it pulled.

Hyperliquid · REST · MCP

Big orders and how each one ended

Route
GET /v1/hyperliquid/walls
MCP
hl_orders · 1 credit
Cost
1 credit, one request of the hourly limit
Free APIArchiveStreamMCP

How a wall ends

OutcomeIn plain words
filledTaken in full: its own fills reach its size
partially_filledSome of it traded, then it left the book
pulledIt left the book with no fill at all: a cancel, an expiry or a margin cancel, which look the same in the snapshots
openStill waiting on the book at the newest snapshot
unknownIt left the book a few minutes ago and its fills are not stored yet; never called pulled until they are. Ask again a few minutes later

A real answer

GET /v1/hyperliquid/walls?symbol=BTC&from=2026-11-13T14:00:00Z&to=2026-11-13T15:00:00Z&outcome=pulled&limit=5 · captured 2026-11-13 16:03 UTC

Window 14:00 UTC to 15:00 UTCFrom $1MSource l4_5m: the 5-minute snapshots
WalletSidePriceSizeLivedOutcomePrice within 0.1%Owner (size · PnL)
0x31de…13f2sell69,124$1.73M5 minpulledno3x whale · 3x smart
0x31de…13f2sell69,712$6.44M5 minpulledno3x whale · 3x smart
0x2025…840ebuy68,365$1.00M5 minpullednowhale · 3x smart
0x7b7f…dee2sell69,396$1.32M5 minpulledno2x whale · 3x smart
0x0fd4…e0c7buy68,813$1.25M5 minpullednowhale · 3x smart

The JSON

json
{
 "from": "2026-11-13T14:00:00+00:00",
 "to": "2026-11-13T15:00:00+00:00",
 "snapshot_ts": "2026-11-13T16:00:00+00:00",
 "source": "l4_5m",
 "min_usd": 1000000.0,
 "touch_bps": 10,
 "walls": [
  {
   "oid": 604053406764,
   "wallet": "0x31dea2516beee92135b96f464eeec3cf292a13f2",
   "symbol": "BTC",
   "side": "sell",
   "kind": "resting",
   "trigger_type": null,
   "trigger_px": null,
   "limit_px": 69124.0,
   "size_usd": 1731093.0691999998,
   "placed_at": "2026-11-13T15:00:02.981000+00:00",
   "first_seen": "2026-11-13T15:00:00+00:00",
   "last_seen": "2026-11-13T15:00:00+00:00",
   "lifetime_s": 300,
   "outcome": "pulled",
   "filled_usd": 0.0,
   "near_touch": false,
   "size_cohort": "3x whale",
   "pnl_cohort": "3x smart",
   "pnl_cum_usd": 5293109.309956033,
   "label_basis": "point_in_time",
   "labels_as_of": "2026-11-13T14:00:00+00:00"
  },
  {
   "oid": 604053393427,
   "wallet": "0x31dea2516beee92135b96f464eeec3cf292a13f2",
   "symbol": "BTC",
   "side": "sell",
   "kind": "resting",
   "trigger_type": null,
   "trigger_px": null,
   "limit_px": 69712.0,
   "size_usd": 6440843.65216,
   "placed_at": "2026-11-13T15:00:02.590000+00:00",
   "first_seen": "2026-11-13T15:00:00+00:00",
   "last_seen": "2026-11-13T15:00:00+00:00",
   "lifetime_s": 300,
   "outcome": "pulled",
   "filled_usd": 0.0,
   "near_touch": false,
   "size_cohort": "3x whale",
   "pnl_cohort": "3x smart",
   "pnl_cum_usd": 5293109.309956033,
   "label_basis": "point_in_time",
   "labels_as_of": "2026-11-13T14:00:00+00:00"
  }
 ],
 "nextCursor": "eyJMIjoiMjAyNi0xMS0xMyAxNjowMDowMCIsImYiOiIyMDI2LTExLTEzIDE0OjAwOjAwIiwiayI6IkhMfEJUQ3x8fDIwMjYtMTEtMTMgMTQ6MDA6MDB8MjAyNi0xMS0xMyAxNTowMDowMHwxMDAwMDAwLjB8Ym90aHxwdWxsZWR8MTAiLCJtIjoid2FsbHMiLCJvIjo2MDQwNTMzNDYxNjQsInMiOiJsNF81bSIsInRvIjoiMjAyNi0xMS0xMyAxNTowMDowMCIsInRzIjoiMjAyNi0xMS0xMyAxNTowMDowMCJ9"
}

The JSON trimmed to 2 of its 5 walls, without label_computed and notes; nextCursor leads to the next page.

Large standing orders (walls) of a symbol and/or a wallet last seen in a window, and what became of each: filled, partly filled, pulled before any fill, or still open.

A wall is a resting order of at least min_usd (limit price x original size), or an untriggered stop or take-profit of at least min_usd at its trigger price, as of the last 5-minute snapshot it was seen in. Each carries oid, wallet, symbol, side, kind, trigger_type and trigger_px (stops), limit_px, size_usd, placed_at, first_seen, last_seen, lifetime_s (from its placement, or the snapshot before its first sighting, to the one after its last; notes says how), outcome, filled_usd, near_touch (whether the other side of the book was within touch_bps of its price when it was last seen) and its owner's size_cohort, pnl_cohort and pnl_cum_usd: current for an open wall, else those of the hour before its last sighting, as each row's label_basis (current | point_in_time) and labels_as_of say; label_computed describes both. outcome is unknown while the fills are not yet stored past the wall's disappearance, never pulled. The window holds the walls whose last sighting falls in it; snapshot_ts is the newest snapshot, source l4_5m (5-minute snapshots, from 2026-10-23 21:45 UTC) or state_12m (about 12 minutes). Newest last sighting first; notes says what a snapshot cannot tell.

Parameters

ParameterInDescription
symbolqueryHL perp ticker, e.g. BTC or xyz:TSLA; with market=spot a spot pair, e.g. HYPE/USDC. symbol and/or wallet is required
walletqueryOne wallet. symbol and/or wallet is required
fromqueryISO-8601 UTC. Default: 24 hours before to. Not before 2026-07-29
toqueryISO-8601 UTC. Default, and at the latest: the newest order snapshot. At most 7 days after from
min_usdquerySmallest wall in USD: limit price x original size, a stop or take-profit at its trigger price. At least 100,000. Default 1,000,000
kindqueryboth | resting | trigger (untriggered stops and take-profits). Default both
outcomequeryfilled | partially_filled | pulled | open | unknown. Default: every outcome
marketqueryperp | spot. Default perp. A spot symbol is a pair, HYPE/USDC, or HYPE-USDC in a URL path; a bare HYPE is HYPE/USDC
touch_bpsqueryHow close, in basis points, the other side of the book must have been for near_touch. Default 10
limitqueryDefault 100, max 1000
cursorquerynextCursor from the previous page, verbatim

Call it

bash
curl -H "X-API-KEY: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/walls?symbol=BTC&from=2026-11-13T14%3A00%3A00Z&to=2026-11-13T15%3A00%3A00Z&outcome=pulled&limit=5"
Hyperliquid · REST · MCP

One wallet's walls in totals: how many it pulled

Route
GET /v1/hyperliquid/wallets/{address}/order-stats
MCP
hl_orders · 1 credit
Cost
1 credit, one request of the hourly limit
Free APIArchiveStreamMCP

In the newest 5 BTC walls at 16:00 UTC (GET /v1/hyperliquid/walls?symbol=BTC&limit=5), 3 were one wallet's: a $7.95M bid at 67,621, a $4.04M ask at 69,064, a $2.03M bid at 68,762. Its week, in totals:

A real answer

GET /v1/hyperliquid/wallets/0x31dea2516beee92135b96f464eeec3cf292a13f2/order-stats · captured 2026-11-13 16:01 UTC

Window 2026-11-06 to 2026-11-13From $100KWalls 226,712Pulled with no fill 226,578Filled 4Partly filled 2Open 128Pulled share 99.997%Pulled per filled wall 56,644.5Median lifetime 5 minPulled with the price within 0.1% 2.7% of 1,000 checkedWall value $307.24BFilled value $1.17M
SymbolWallsPulledFilledPulled shareWall value
BTC37,35337,333199.997%$158.36B
ETH29,06129,0450100.000%$75.44B
SOL28,54228,524299.993%$21.53B
HYPE22,37822,3660100.000%$8.33B
xyz:SNDK18,35218,341099.995%$6.67B

The JSON

json
{
 "wallet": "0x31dea2516beee92135b96f464eeec3cf292a13f2",
 "from": "2026-11-06T16:00:00+00:00",
 "to": "2026-11-13T16:00:00+00:00",
 "snapshot_ts": "2026-11-13T16:00:00+00:00",
 "source": "l4_5m",
 "min_usd": 100000.0,
 "touch_bps": 10,
 "n_walls": 226712,
 "n_open": 128,
 "n_filled": 4,
 "n_partial": 2,
 "n_pulled": 226578,
 "n_unknown": 0,
 "pulled_share": 0.9999735197542633,
 "median_lifetime_s": 300,
 "total_wall_usd": 307240450998.76666,
 "filled_usd": 1172218.151418,
 "cancel_to_fill_ratio": 56644.5,
 "pulled_near_touch_share": 0.027,
 "n_pulled_touch_checked": 1000,
 "by_symbol": [
  {
   "symbol": "BTC",
   "n_walls": 37353,
   "n_open": 19,
   "n_filled": 1,
   "n_partial": 0,
   "n_pulled": 37333,
   "n_unknown": 0,
   "pulled_share": 0.9999732147640221,
   "median_lifetime_s": 300,
   "total_wall_usd": 158358677525.4441,
   "filled_usd": 136188.857419,
   "cancel_to_fill_ratio": 37333.0
  },
  {
   "symbol": "ETH",
   "n_walls": 29061,
   "n_open": 16,
   "n_filled": 0,
   "n_partial": 0,
   "n_pulled": 29045,
   "n_unknown": 0,
   "pulled_share": 1.0,
   "median_lifetime_s": 300,
   "total_wall_usd": 75443186613.93536,
   "filled_usd": 0.0,
   "cancel_to_fill_ratio": null
  }
 ]
}

The JSON trimmed to its first 2 per-symbol rows, without notes.

One wallet's walls last seen in a window, in totals: n_walls, n_open, n_filled, n_partial, n_pulled, n_unknown, pulled_share (pulled / walls that left the book with a known outcome), pulled_near_touch_share (of its newest 1,000 pulled walls with a stored book, the share pulled with the other side of the book within 10 basis points), median_lifetime_s, total_wall_usd, filled_usd, cancel_to_fill_ratio (pulled / filled walls) and the same per symbol for the 20 symbols with the most walls (by_symbol). The walls and their outcomes are those of /walls with this wallet.

Parameters

ParameterInDescription
addressrequiredpathThe wallet
fromqueryISO-8601 UTC. Default: 7 days before to. Not before 2026-07-29
toqueryISO-8601 UTC. Default, and at the latest: the newest order snapshot. At most 7 days after from
min_usdquerySmallest wall in USD: limit price x original size, a stop or take-profit at its trigger price. At least 100,000. Default 100,000
marketqueryperp | spot. Default perp

Call it

bash
curl -H "X-API-KEY: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/wallets/0x31dea2516beee92135b96f464eeec3cf292a13f2/order-stats"
Squeeze map

Squeeze map: where stops and liquidations outweigh the book

One price ladder around the price: the orders waiting in each bucket, the stops that would fire into it and the positions that would be liquidated there.

Hyperliquid · REST · MCP

The book, stops and liquidations on one price ladder

Route
GET /v1/hyperliquid/symbols/{symbol}/squeeze-map
MCP
hl_orders · 1 credit
Cost
1 credit, one request of the hourly limit
Free APIArchiveStreamMCP

A real answer, in short

GET /v1/hyperliquid/symbols/BTC/squeeze-map · captured 2026-11-13 16:02 UTC

Mid 68,880.5Buckets 64, each 0.25% wide, within 8% of the midPressure above 1 21 of 32 buckets below, 16 of 32 buckets aboveNearest above 1 1.25% below (1.43); 1.25% above (2.29)Positions as of 15:57 UTC
Price bucketWhereOrders waitingStops firing into itLiquidated into itPressure
63,714 to 63,8877.25% below$1.65M$164.4K$20.58M12.58
74,219 to 74,3917.75% above$756.8K$210.8K$5.62M7.71
64,059 to 64,2316.75% below$3.31M$18.1K$18.83M5.70

The JSON

json
{
 "symbol": "BTC",
 "snapshotTs": "2026-11-13T16:00:00+00:00",
 "sources": {
  "book": {
   "snapshotTs": "2026-11-13T16:00:00+00:00",
   "source": "l4_5m"
  },
  "stops": {
   "snapshotTs": "2026-11-13T16:00:00+00:00",
   "source": "l4_5m"
  },
  "liquidations": {
   "snapshotTs": "2026-11-13T15:57:00+00:00"
  }
 },
 "mid": 68880.5,
 "step_bps": 25,
 "range_pct": 8,
 "buckets": [
  {
   "price_low": 63714.4625,
   "price_high": 63886.66375,
   "bid_sz": 25.84835,
   "ask_sz": 0.0,
   "bid_usd": 1649044.479,
   "ask_usd": 0.0,
   "stop_sell_usd": 164443.7586,
   "stop_buy_usd": 18755.1967,
   "liq_long_usd": 20581912.29,
   "liq_short_usd": 0.0,
   "pressure": 12.58083473
  },
  {
   "price_low": 74218.73874999999,
   "price_high": 74390.94,
   "bid_sz": 0.0,
   "ask_sz": 10.18401,
   "bid_usd": 0.0,
   "ask_usd": 756753.1817,
   "stop_sell_usd": 11747.36858,
   "stop_buy_usd": 210782.5573,
   "liq_long_usd": 0.0,
   "liq_short_usd": 5622582.914,
   "pressure": 7.708412218
  },
  {
   "price_low": 64058.865,
   "price_high": 64231.066249999996,
   "bid_sz": 51.50799,
   "ask_sz": 0.0,
   "bid_usd": 3305266.73,
   "ask_usd": 0.0,
   "stop_sell_usd": 18128.13542,
   "stop_buy_usd": 114267.9369,
   "liq_long_usd": 18830845.0,
   "liq_short_usd": 0.0,
   "pressure": 5.702708639
  }
 ]
}

The 3 buckets with the highest pressure, of the 64 in the answer; the JSON holds those 3 (the answer lists every bucket, highest price first), without notes.

Where a move would be forced along: one perp's price ladder at one instant, each bucket with the resting book, the stop orders that would trade into it and the open positions that would be liquidated into it.

Returns symbol, snapshotTs, sources (the book, the stop orders and the positions, each with its own snapshot time, the newest at or before snapshotTs), mid (of the best bid and ask), buckets (highest price first, only buckets with something in them) and notes. Per bucket: bid_sz and ask_sz (resting size, base asset), bid_usd and ask_usd (the same resting orders' value in USD), stop_sell_usd and stop_buy_usd (untriggered stop-loss and take-profit orders by the side they trade when they fire), liq_long_usd and liq_short_usd (positions liquidated there; a long is sold, a short bought) and pressure: below the mid (stop_sell_usd + liq_long_usd) / bid_usd, above it (stop_buy_usd + liq_short_usd) / ask_usd, so it can be checked by hand. Above 1 more would be forced through the bucket than stands in it. Perps only: spot has no liquidations. An unknown symbol, or no book of it in the hour up to at, is a 404.

Parameters

ParameterInDescription
symbolrequiredpathHL perp ticker, e.g. BTC or xyz:TSLA
atqueryISO-8601 UTC, floored to 5 minutes. Default: the newest snapshot. Not before 2026-07-29, not in the future
step_bpsqueryBucket width in basis points of the mid. Default 25
range_pctqueryHalf-width of the price range around the mid, percent. Default 8
cohort_axisquerysize | pnl | pnl_abs. Default size
cohortqueryOne label on cohort_axis: only that cohort's stops and liquidations (the book is always the whole book). Without at by the current labels, with at by the labels of the hour before the snapshot's own hour

Call it

bash
curl -H "X-API-KEY: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/symbols/BTC/squeeze-map"
Whose liquidity

Whose liquidity: which traders own the book near the price

The orders near the price split by their owner's size or PnL group, every 5 minutes, hour or day, each owner labelled as of that snapshot.

Hyperliquid · REST · MCP

Who owns the book near the price, over time

Route
GET /v1/hyperliquid/symbols/{symbol}/book-cohorts
MCP
hl_orders · 1 credit
Cost
1 credit, one request of the hourly limit
Free APIArchiveStreamMCP

A real answer

GET /v1/hyperliquid/symbols/BTC/book-cohorts?interval=5m · captured 2026-11-13 16:02 UTC

Point 16:00 UTCWithin 2% of the midBids $142.44MAsks $142.46MPoints 4, every 5 minutes from 15:45 UTC (the first recorded)Groups size groups, labelled as of each snapshot
GroupWallets (bid / ask)BidsShare of bidsAsksShare of asks
3x whale9 / 9$62.75M44.1%$62.58M43.9%
unknown116 / 60$29.67M20.8%$30.60M21.5%
2x whale8 / 11$15.51M10.9%$26.00M18.2%
2x dolphin31 / 28$9.46M6.6%$9.78M6.9%
whale9 / 7$11.52M8.1%$2.30M1.6%

The JSON

json
{
 "symbol": "BTC",
 "market": "perp",
 "cohort_axis": "size",
 "band_bps": 200,
 "interval": "5m",
 "from": "2026-11-12T16:00:00+00:00",
 "to": "2026-11-13T16:00:00+00:00",
 "label_basis": "point_in_time",
 "points": [
  {
   "ts": "2026-11-13T16:00:00+00:00",
   "n_snapshots": 1,
   "bid_usd": 142443873.6,
   "ask_usd": 142464902.0,
   "cohorts": [
    {
     "cohort": "3x whale",
     "bid_usd": 62753646.99,
     "ask_usd": 62579530.03,
     "bid_share": 0.4405499893,
     "ask_share": 0.439262788,
     "n_wallets_bid": 9,
     "n_wallets_ask": 9
    },
    {
     "cohort": "unknown",
     "bid_usd": 29670236.73,
     "ask_usd": 30603948.31,
     "bid_share": 0.2082942283,
     "ask_share": 0.2148174595,
     "n_wallets_bid": 116,
     "n_wallets_ask": 60
    }
   ]
  }
 ]
}

The 5 largest groups at 16:00 UTC. The JSON trimmed to that last of its 4 points and its 2 largest groups, without label_computed and notes.

The same answer over its 4 points: the book within 2% and the 3x whale share

TimeBidsAsks3x whale: share of bids3x whale: share of asks
15:45 UTC$192.98M$146.71M34.3%44.6%
15:50 UTC$160.29M$157.66M36.3%39.4%
15:55 UTC$162.22M$150.15M39.2%41.2%
16:00 UTC$142.44M$142.46M44.1%43.9%

Who owns the resting book near the mid, over time: per point and owner cohort, the bid and ask notional within band_bps of the mid and the cohort's share of it.

Returns symbol, market, cohort_axis, band_bps, interval, from, to, label_basis and label_computed (when and from what the owners' labels were taken), points (oldest first: ts, n_snapshots, the band's bid_usd and ask_usd, and cohorts, each with bid_usd, ask_usd, bid_share, ask_share, n_wallets_bid, n_wallets_ask) and notes. Each owner is labelled as of the 5-minute snapshot itself, so a past point never uses later knowledge. The series starts with the first recorded snapshot (November 2026); an interval with no snapshot is absent, not zero.

Parameters

ParameterInDescription
symbolrequiredpathHL perp ticker, e.g. BTC or xyz:TSLA; with market=spot a spot pair, e.g. HYPE-USDC
fromqueryISO-8601 UTC. Default: 24 hours before to
toqueryISO-8601 UTC. Default: now. At most 7 days after from
cohort_axisquerysize | pnl. Default size
band_bpsquery50 | 200 | 1000: the orders within 0.5%, 2% or 10% of the mid. Default 200
intervalquery5m | 1h | 1d. Default 1h: hours and days average the 5-minute snapshots
marketqueryperp | spot. Default perp. A spot symbol is a pair, HYPE/USDC, or HYPE-USDC in a URL path; a bare HYPE is HYPE/USDC

Call it

bash
curl -H "X-API-KEY: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/symbols/BTC/book-cohorts?interval=5m"
History

Order book history, and why it matters

5 min
a snapshot of every order on the book
July 2026
history from: orders 2026-07-29, the L2 book 2026-07-28
1 year
every snapshot is kept
$1M+
walls on the live channel and in walls history
measured 2026-11-13

418 of 420. Of 420 walls of $1M or more that left the book on the live walls stream (11:30 to 11:50 UTC), 418 were pulled with no fill.

Today's walls, in plain words captured 2026-11-13, 16:01 to 16:03 UTC

  • One wallet, one week: 226,578 of 226,712 big orders pulled with no fill. 0x31de…13f2 placed them in the seven days to 16:00 UTC, each worth $100K or more; 4 were filled and 2 partly. Its median wall lived 5 minutes: seen in one snapshot, gone by the next. Only 2.7% of its last 1,000 pulled walls went with the price within 0.1%.
  • The newest pulled walls never met the price. The 5 newest pulled BTC walls of $1M or more that left the book between 14:00 UTC and 15:00 UTC were each seen in one snapshot, none with the price within 0.1%.
  • BTC's squeeze map at 16:00 UTC: 37 of 64 buckets within 8% of the price had pressure above 1; the nearest sat 1.25% below and 1.25% above the price. The strongest, 12.6, sat 7.25% below: $20.58M of positions would be liquidated into $1.65M of waiting orders.
  • Whose liquidity at 16:00 UTC: 9 wallets in the 3x whale group (accounts of $5M to $10M) owned 44% of the bids and 44% of the asks within 2% of BTC's price. Owners with no size label held 21% of the bids.

Why it matters

  • A wall that is never hit is not support. History shows which walls are pulled as the price comes near (near_touch on each wall), and which wallets do it again and again (pulled_near_touch_share).
  • Backtests see the book as it was. With at, each owner is graded by the labels of the hour before the snapshot, never with what was learned later; a wall that left the book carries the labels of the hour before it left.
  • Any moment, many ways: at works on orders, the L2 book, price bands and the squeeze map; walls and whose liquidity take a window (from and to).
Older moments are rebuilt. Before 2026-10-23 21:45 UTC for orders and walls (2026-11-13 08:40 UTC for the L2 book), and inside an outage, a past moment comes from the checkpoints about 12 minutes apart: an order that lived only a few minutes can be missing. Every answer's source says which: l4_5m or state_12m.

How the big BTC walls that left the book in one hour ended

bash
# one past hour: any hour back to 2026-07-29 works
curl -H "X-API-KEY: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/walls?symbol=BTC&from=2026-11-13T15:00:00Z&to=2026-11-13T16:00:00Z&limit=1000"
FAQ

Hyperliquid order book API FAQ

Can I ask about the Hyperliquid order book in Claude or ChatGPT?
Yes. Add https://data.vike.io/mcp as a connector and ask in plain words; the agent uses the tool hl_orders (views open, book, clusters, wallet, walls, order_stats, squeeze and book_cohorts), 1 credit a call.
Is there a Hyperliquid L2 order book API?
Yes: GET /v1/hyperliquid/symbols/{symbol}/book returns the size waiting at each price, up to 1,000 prices a side, at any past moment back to 2026-07-28: every 5 minutes from 2026-11-13 08:40 UTC, about every 12 minutes before.
Is there Hyperliquid L4 data with wallet addresses?
Yes: GET /v1/hyperliquid/orders lists every order waiting at one moment with the wallet that placed it, and that wallet's size and PnL group.
Can I see which walls are fake, and who pulls them?
Yes: GET /v1/hyperliquid/walls lists the orders of $1M or more of a coin or a wallet seen in a window (the last 24 hours by default, up to 7 days) and how each one ended: filled, partly filled, pulled with no fill, or still open. GET /v1/hyperliquid/wallets/{address}/order-stats adds up one wallet's walls: how many it pulled and how many were filled.
What is the squeeze map?
GET /v1/hyperliquid/symbols/{symbol}/squeeze-map puts the resting book, the stop orders waiting to fire and the liquidation prices of open positions on one price ladder. For each price band it says how much forced buying or selling would hit the book there: above 1, a move would feed itself.
Can I see whose money is on the book?
Yes: GET /v1/hyperliquid/symbols/{symbol}/book-cohorts splits the bids and asks near the price by size group (whales, sharks, dolphins …) or by PnL group, over time, so you see when whales or the best traders step in and when they step away.
Is this a live, tick-by-tick feed of the book?
No. We serve snapshots of the whole book every 5 minutes (about every 12 minutes for older moments). Orders of $1M or more are pushed on the hl.order_walls channel as each snapshot finds them new or gone.
How far back does the order book history go?
Orders back to 2026-07-29 and the L2 book back to 2026-07-28, every snapshot kept for a year. Moments before 2026-10-23 21:45 UTC for orders, and before 2026-11-13 08:40 UTC for the L2 book, are rebuilt from snapshots about 12 minutes apart, where an order that lived only a few minutes can be missing.
Is it free?
Yes. One free key: 20,000 requests an hour and 200 a minute. Each call is 1 credit.