vike

Order clusters

One symbol's standing orders within range_pct of the mid, bucketed by price: bids and asks by limit price, stops and take-profits by trigger price.

GET https://data.vike.io/v1/hyperliquid/symbols/{symbol}/order-clusters

One symbol's standing orders within range_pct of the mid of the best resting bid and ask, bucketed by price: bids and asks by limit price, stop-loss and take-profit orders by trigger price. Each bucket carries the number of orders and wallets in it and the size and notional behind them, which shows where a book and its stops are stacked. For the orders one by one use /orders.

cURL
# BTC's standing orders in 10 bp buckets within 10% of the mid (the defaults)
curl -s "https://data.vike.io/v1/hyperliquid/symbols/BTC/order-clusters" \
  -H "X-API-KEY: $VIKE_API_KEY"

# only whale wallets, by their current size label: 25 bp buckets within 5% of the mid
curl -s "https://data.vike.io/v1/hyperliquid/symbols/BTC/order-clusters?cohort_axis=size&cohort=whale&step_bps=25&range_pct=5" \
  -H "X-API-KEY: $VIKE_API_KEY"

# the book at an earlier instant, in 50 bp buckets
curl -s "https://data.vike.io/v1/hyperliquid/symbols/BTC/order-clusters?at=2026-10-26T12:00:00Z&step_bps=50&range_pct=10" \
  -H "X-API-KEY: $VIKE_API_KEY"
symbolpathrequired
HL perp ticker
atqueryoptional
ISO-8601 UTC, floored to 5 minutes. Default: the newest snapshot
step_bpsqueryoptional
Bucket width in basis points of the reference price. Default 10
range_pctqueryoptional
Half-width of the price range, percent. Default 10
cohort_axisqueryoptional
size | pnl | pnl_abs. Default size
cohortqueryoptional
One label on cohort_axis, by CURRENT labels: refused with at

Captured from the live API on 2026-10-27 at 10:55 UTC for the first call. The two buckets nearest the reference price are shown for each kind, out of 100 ask, 100 bid, 199 sl and 200 tp buckets.

Example response
{
  "symbol": "BTC",
  "snapshot_ts": "2026-10-27T10:55:00+00:00",
  "source": "l4_5m",
  "reference_price": 79945.5,
  "best_bid": 79945.0,
  "best_ask": 79946.0,
  "step_bps": 10,
  "range_pct": 10,
  "buckets": {
    "ask": [
      {
        "price_low": 80025.44549999999,
        "price_high": 80105.391,
        "n_orders": 301,
        "n_wallets": 132,
        "n_position_tpsl": 0,
        "cluster_size": 266.62837,
        "cluster_notional": 21345492.21
      },
      {
        "price_low": 79945.5,
        "price_high": 80025.44549999999,
        "n_orders": 611,
        "n_wallets": 161,
        "n_position_tpsl": 0,
        "cluster_size": 375.937,
        "cluster_notional": 30068873.63
      }
    ],
    "bid": [
      {
        "price_low": 79865.5545,
        "price_high": 79945.5,
        "n_orders": 660,
        "n_wallets": 220,
        "n_position_tpsl": 0,
        "cluster_size": 352.62438,
        "cluster_notional": 28175081.16
      },
      {
        "price_low": 79785.609,
        "price_high": 79865.5545,
        "n_orders": 378,
        "n_wallets": 184,
        "n_position_tpsl": 0,
        "cluster_size": 240.2841,
        "cluster_notional": 19182201.56
      }
    ],
    "sl": [
      {
        "price_low": 79945.5,
        "price_high": 80025.44549999999,
        "n_orders": 1,
        "n_wallets": 1,
        "n_position_tpsl": 1,
        "cluster_size": 0.0,
        "cluster_notional": 0.0
      },
      {
        "price_low": 79865.5545,
        "price_high": 79945.5,
        "n_orders": 6,
        "n_wallets": 6,
        "n_position_tpsl": 4,
        "cluster_size": 5.6356,
        "cluster_notional": 450234.44
      }
    ],
    "tp": [
      {
        "price_low": 79945.5,
        "price_high": 80025.44549999999,
        "n_orders": 17,
        "n_wallets": 15,
        "n_position_tpsl": 0,
        "cluster_size": 0.65354,
        "cluster_notional": 52283.20888
      },
      {
        "price_low": 79865.5545,
        "price_high": 79945.5,
        "n_orders": 5,
        "n_wallets": 5,
        "n_position_tpsl": 0,
        "cluster_size": 0.14723,
        "cluster_notional": 11761.43696
      }
    ]
  },
  "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."
  ]
}

The buckets. reference_price is the mid of the best resting bid and the best resting ask. The range is range_pct percent either side of it, cut into buckets step_bps basis points of the reference price wide; price_low and price_high are a bucket's edges. Only buckets that hold an order are returned, each list highest price first. step_bps takes 1 to 500 and range_pct 1 to 50; a value outside is refused with a 422. Without at the book is the newest snapshot; at is resolved as on /orders, and snapshot_ts and source say what answered. A call costs 1 credit (Rate limits).

The four kinds. ask and bid bucket resting limit orders by limit price; sl and tp bucket untriggered stop-loss and take-profit orders by trigger price. cluster_size is the remaining size in the base asset and cluster_notional is that size times the order's price. For the newest snapshot that is the size at that snapshot, except for a whole-position stop or take-profit that has fired and rests as a limit order under the same order id: it adds 0, the stored size of its pre-fire sightings. For a past at it can be a later, smaller remaining size than the orders had at snapshot_ts, because an order's sightings are merged into one stored row; for the same reason an order's kind and price can come from another sighting (one that was modified, or whose trigger fired), so a bucket's kind and price can be wrong for a past at. n_wallets counts distinct wallets in the bucket.

A cohort filter keeps the orders of the wallets in one cohort: cohort is a label on cohort_axis (size, pnl or pnl_abs; size when omitted). The reference price and the best bid and ask still come from every order, so the filter cannot move the mid. The response then carries cohort_axis, cohort, label_basis and a label_computed block; Label basis says what a current label means.

Before 2026-10-23 21:45 UTC the book is rebuilt from checkpoints, and the mid moves with it

On state_12m with a past at, snapshot_ts is your at floored to 5 minutes, not a checkpoint instant, and only the orders that a checkpoint at or before that instant saw, and another at or after it saw again, are bucketed. Short-lived orders, such as quotes replaced within minutes, are the likeliest to be missing, so reference_price is then the mid of the long-lived orders only and can sit far from the market's mid, and every bucket edge moves with it. The same holds for an at inside an outage of either feed: source still reads l4_5m or state_12m. With l4_5m, outside an outage of that feed, the book is every order seen in that snapshot.

Fields are snake_case here, camelCase on the other two order routes

This route returns snapshot_ts, price_low and n_orders. /orders and /wallets/{address}/orders return snapshotTs, limitPx and nextCursor. The names are published as the routes return them.

A whole-position stop or take-profit adds an order but no size

An order attached to a whole position has no size until it fires. It counts in n_orders and n_position_tpsl and adds 0 to cluster_size, so a bucket of only such orders reads a size of 0.

Trailing stops are not bucketed

A trailing stop has no trigger price until its trail activates, so it appears in no bucket.

A cohort filter uses current labels and is refused with at

The orders come from the snapshot and each wallet's label is its current one. A historical at with cohort would join an old book to a new label, so the call is a 400. Omit at to filter by cohort.

A one-sided book has no mid

With resting bids but no asks, or asks but no bids, reference_price is null and every bucket list is empty. best_bid and best_ask still report the side that exists.

Example response
{  "symbol": "BTC",  "snapshot_ts": "2026-10-27T10:55:00+00:00",  "source": "l4_5m",  "reference_price": 79945.5,  "best_bid": 79945.0,  "best_ask": 79946.0,  "step_bps": 10,  "range_pct": 10,  "buckets": {    "ask": [      {        "price_low": 80025.44549999999,        "price_high": 80105.391,        "n_orders": 301,        "n_wallets": 132,        "n_position_tpsl": 0,        "cluster_size": 266.62837,        "cluster_notional": 21345492.21      },      {        "price_low": 79945.5,        "price_high": 80025.44549999999,        "n_orders": 611,        "n_wallets": 161,        "n_position_tpsl": 0,        "cluster_size": 375.937,        "cluster_notional": 30068873.63      }    ],    "bid": [      {        "price_low": 79865.5545,        "price_high": 79945.5,        "n_orders": 660,        "n_wallets": 220,        "n_position_tpsl": 0,        "cluster_size": 352.62438,        "cluster_notional": 28175081.16      },      {        "price_low": 79785.609,        "price_high": 79865.5545,        "n_orders": 378,        "n_wallets": 184,        "n_position_tpsl": 0,        "cluster_size": 240.2841,        "cluster_notional": 19182201.56      }    ],    "sl": [      {        "price_low": 79945.5,        "price_high": 80025.44549999999,        "n_orders": 1,        "n_wallets": 1,        "n_position_tpsl": 1,        "cluster_size": 0.0,        "cluster_notional": 0.0      },      {        "price_low": 79865.5545,        "price_high": 79945.5,        "n_orders": 6,        "n_wallets": 6,        "n_position_tpsl": 4,        "cluster_size": 5.6356,        "cluster_notional": 450234.44      }    ],    "tp": [      {        "price_low": 79945.5,        "price_high": 80025.44549999999,        "n_orders": 17,        "n_wallets": 15,        "n_position_tpsl": 0,        "cluster_size": 0.65354,        "cluster_notional": 52283.20888      },      {        "price_low": 79865.5545,        "price_high": 79945.5,        "n_orders": 5,        "n_wallets": 5,        "n_position_tpsl": 0,        "cluster_size": 0.14723,        "cluster_notional": 11761.43696      }    ]  },  "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."  ]}