Schemas Get a free key
LIVE --:--:-- UTC Hyperliquid positions snapshot on a 5-min UTC grid — last boundary --:-- next in -:--
Sources · HL Cohorts

Free Hyperliquid cohort data — who is long, who is short, every hour

Each wallet with an open Hyperliquid position sits on a rung of a size ladder and a PnL ladder, and each open position on a notional tier. /v1/hl-cohorts/symbols/{symbol}/cohort-metrics returns every cohort of one coin, hourly, up to 8,760 hours in one request — free, 20,000 requests an hour and 200 a minute per key.

Live · captured /v1 responses

Hyperliquid long vs short, by cohort

One coin, one axis: every cohort on that axis at the latest hour of the capture. Switch the coin (BTC, ETH, SOL, HYPE), the axis (size, tier, pnl) and — on pnl only — labelBasis; size and tier are always point_in_time.

Cohort board · /symbols/{symbol}/cohort-metrics

GET/v1/hl-cohorts/symbols/BTC/cohort-metrics?axis=size&hours=1
Open this side to see the captured response.

    
GEThttps://data.vike.io/v1/hl-cohorts/symbols/BTC/cohort-metrics?axis=size&hours=1

The board reads hours=1. The same request with hours=8760 returns a year of hourly matrices — every cohort in every returned hour, paged by hour and never by row, so an hour's cohorts always sum to its total.

Live · captured /v1 responses

Hyperliquid whale heatmap: every coin × cohort

GET /v1/hl-cohorts/heatmap — every coin × every bucket of one wallet ladder at the latest snapshot, in one call. Each cell is bias = (long − short) / (long + short) by value; an empty cell is blank, never 0.

Coin × cohort heatmap · /heatmap

GET/v1/hl-cohorts/heatmap?axis=size
Open this side to see the captured response.

    

Captured for axis=size and axis=pnl. The route also takes pnl_abs, and rejects tier — a wallet holds positions in several tiers at once.

Reference

Cohort ladders: account size, PnL, position tier

Three ladders grade a wallet, one grades a position. The labels are the exact strings the API returns; the slug is the URL-safe alias every cohort filter also accepts.

axisWhat it gradesRungsLabel basis on cohort-metricsWhere it is accepted
sizeThe wallet's account value (USD)12always point_in_time — a stored columncohort-metrics, metrics, heatmap, segment summary, positions, leaderboard, liquidation risk
pnlPercentile of the wallet's cumulative realized PnL; under 10 closed trades = unknown12 + unknowncurrent (default) or point_in_timethe same as size
pnl_absThe same cumulative realized PnL, banded in dollars8 + unknownalways current — look-ahead on historythe same as size
tierOne position's notional (USD)10always point_in_time — derived from the row's own sizecohort-metrics (axis=tier) and size-breakdown. /segments lists it as axis=trade_size, groupable: false

axis=size12 buckets

Account value of the wallet. Bounds are [min, max) in USD.

1 4x whale 4x_whale ≥ $10,000,000
2 3x whale 3x_whale $5,000,000 – $10,000,000
3 2x whale 2x_whale $2,500,000 – $5,000,000
4 whale $1,000,000 – $2,500,000
5 2x shark 2x_shark $500,000 – $1,000,000
6 shark $250,000 – $500,000
7 2x dolphin 2x_dolphin $100,000 – $250,000
8 dolphin $50,000 – $100,000
9 2x fish 2x_fish $25,000 – $50,000
10 fish $10,000 – $25,000
11 2x shrimp 2x_shrimp $1,000 – $10,000
12 shrimp $0 – $1,000

Every wallet has an account value, so this ladder has no unknown bucket.

axis=pnl13 buckets

Percentile rank of cumulative realized PnL among graded wallets; 0% is the best.

1 3x smart 3x_smart 0–1%
2 2x smart 2x_smart 1–5%
3 smart 5–10%
4 3x winner 3x_winner 10–20%
5 2x winner 2x_winner 20–30%
6 winner 30–40%
7 loser 40–60%
8 2x loser 2x_loser 60–70%
9 3x loser 3x_loser 70–80%
10 rekt 80–90%
11 2x rekt 2x_rekt 90–95%
12 3x rekt 3x_rekt 95–100%
unknown under 10 closed trades

Stable in population: the top rung is always the top 1% of graded wallets.

axis=pnl_abs9 buckets

The same cumulative realized PnL in dollar bands. Bounds are [min, max).

1 $1m+ 1m_plus ≥ $1,000,000
2 $100k-$1m 100k_to_1m $100,000 – $1,000,000
3 $10k-$100k 10k_to_100k $10,000 – $100,000
4 $0-$10k 0_to_10k $0 – $10,000
5 -$10k-$0 neg10k_to_0 -$10,000 – $0
6 -$100k--$10k neg100k_to_neg10k -$100,000 – -$10,000
7 -$1m--$100k neg1m_to_neg100k -$1,000,000 – -$100,000
8 <-$1m below_neg1m < -$1,000,000
unknown not in the PnL dictionary

Stable in meaning: $1m is $1m in any month. unknown here is only a wallet the PnL dictionary has never seen.

axis=tier10 buckets

One position's notional. A small account can hold a large position at leverage.

1 >$2.5m above_2_5m ≥ $2,500,000
2 $1m-$2.5m 1m_to_2_5m $1,000,000 – $2,500,000
3 $500k-$1m 500k_to_1m $500,000 – $1,000,000
4 $250k-$500k 250k_to_500k $250,000 – $500,000
5 $100k-$250k 100k_to_250k $100,000 – $250,000
6 $50k-$100k 50k_to_100k $50,000 – $100,000
7 $25k-$50k 25k_to_50k $25,000 – $50,000
8 $10k-$25k 10k_to_25k $10,000 – $25,000
9 $1k-$10k 1k_to_10k $1,000 – $10,000
10 <$1k below_1k $0 – $1,000

Ask for it as axis=tier on cohort-metrics, or read /symbols/{symbol}/size-breakdown.

Rendered from the same function GET /v1/hl-cohorts/segments serves — each row there also carries basis, applies_to and groupable.

No look-ahead

Point-in-time cohort labels for backtests

A wallet's PnL rung moves as it trades. A backtest needs the rung it had at that hour, not the one it has today.

  • labelBasis=point_in_time on axis=pnl of /symbols/{symbol}/cohort-metrics grades every hour with the label as it was that hour. Point-in-time labels exist from 2026-04-07.
  • labelBasis=current, the default on axis=pnl, resolves the label when the request runs: right for "who is smart now", look-ahead for a backtest — and the response says so in label_computed.lookahead.
  • size and tier are always point-in-time (a stored account value; a position's own size). pnl_abs is always current here. Each rejects a conflicting labelBasis with a 400 rather than ignoring it.
  • Every row and the envelope carry label_basis. Under point_in_time, five fields the frozen source does not carry are left out and named in unavailable_fields: position_count, position_count_long, total_unrealized_pnl, total_position_size, total_position_size_long.
  • /symbols/{symbol}/metrics resolves pnl labels at query time only and refuses labelBasis=point_in_time by name — use cohort-metrics for history.
  • A window reaching the present carries freshness (newest_ts, behind_hours, stale), so a live consumer can tell a healthy hour from a stale one without knowing the rollup's cadence.
Build

The 10 HL Cohorts API endpoints

Each builder composes a real request. Send shows the response captured today when the URL matches one; otherwise it gives you the curl to run with your free key.

GET /v1/hl-cohorts/cohorts The three ladders' label sets (size, pnl, tier) in axis order — the exact strings a cohort filter accepts.
GET /v1/hl-cohorts/segments The cohort catalogue: every bucket on every axis with its bounds, slug, rank and groupable flag.
GET /v1/hl-cohorts/segments/{cohort}/summary Aggregate positioning for one cohort at the latest snapshot; openedWithin = 24h | 7d | 30d | all.
GET /v1/hl-cohorts/heatmap Coin × cohort positioning at the latest snapshot — the whole board in one call.
GET /v1/hl-cohorts/symbols/{symbol}/cohort-metrics One coin's full cohort matrix, hourly — up to 8,760 hours per request, paged by hour.
GET /v1/hl-cohorts/symbols/{symbol}/metrics Hourly open interest, position count and bias for one coin, all cohorts combined or one.
GET /v1/hl-cohorts/symbols/{symbol}/size-breakdown One coin's open positioning split into the ten position-notional tiers.
GET /v1/hl-cohorts/segments/{cohort}/history One cohort's long / short / bias per hour, summed over every coin, on the size or pnl ladder; include=leverage adds the equity ratios.
GET /v1/hl-cohorts/symbols/{symbol}/indices Smart Money Index and Whale-vs-Shrimp Index for one coin: the latest snapshot and the settled hourly series, as ratios in [-1, +1].
GET /v1/hl-cohorts/symbols/{symbol}/large-fills One coin's large fills (from $50,000), newest first: the newest 200, at most 24 hours back.

Cohort metrics by coin · /v1/hl-cohorts/symbols/{symbol}/cohort-metrics

axis = size | tier | pnl | pnl_abs · hours ≤ 8,760 · labelBasis on pnl only · optional start / end, openedWithin, cursor.

symbol
axis
hours
labelBasis
GET/v1/hl-cohorts/symbols/{symbol}/cohort-metrics?axis={axis}&hours={hours}&labelBasis={labelBasis}

    
Press Send ▶ — the captured response appears here

    

Coin × cohort heatmap · /v1/hl-cohorts/heatmap

axis = size | pnl | pnl_abs · openedWithin = 24h | 7d | 30d | all (the default) — counts only positions opened inside the window.

axis
openedWithin
GET/v1/hl-cohorts/heatmap?axis={axis}&openedWithin={openedWithin}

    
Press Send ▶ — the captured response appears here

    

Cohort bounds · /v1/hl-cohorts/segments

No parameters. Rows carry axis, cohort, slug, rank, basis, applies_to, groupable and the bounds (min_usd / max_usd, percentile_min / percentile_max, min_closed_trades).

no parameters
GET/v1/hl-cohorts/segments

    
Press Send ▶ — the captured response appears here

    

Cohort labels · /v1/hl-cohorts/cohorts

No parameters. {"size": [12 labels], "pnl": [12 labels, "unknown"], "tier": [10 labels]} — verbatim from the module the axes group by.

no parameters
GET/v1/hl-cohorts/cohorts

    
Press Send ▶ — the captured response appears here

    

One cohort's summary · /v1/hl-cohorts/segments/{cohort}/summary

cohort = a label or its slug, valid on the chosen axis (size | pnl | pnl_abs). tier is rejected here: a wallet straddles position tiers.

axis
openedWithin
GET/v1/hl-cohorts/segments/{cohort}/summary?axis={axis}&openedWithin={openedWithin}

    
Press Send ▶ — the captured response appears here

    

Hourly coin metrics · /v1/hl-cohorts/symbols/{symbol}/metrics

One row per hour — omit axis for all cohorts combined, or pass axis + cohort for one. The newest row, covering the hour still in progress, is flagged provisional.

symbol
axis
cohort
limit
GET/v1/hl-cohorts/symbols/{symbol}/metrics?axis={axis}&cohort={cohort}&limit={limit}

    
Press Send ▶ — the captured response appears here

    

Position-size breakdown · /v1/hl-cohorts/symbols/{symbol}/size-breakdown

The ten position-notional tiers, largest first; an empty tier comes back zero-filled so the table shape never changes.

symbol
GET/v1/hl-cohorts/symbols/{symbol}/size-breakdown

    
Press Send ▶ — the captured response appears here

    
Before you pick a tracker

Choosing a Hyperliquid whale tracker: what to check

The questions that decide whether a cohort series is usable for research. The right column is what this API does; ask the same of any Hyperliquid tracker you compare it with.

Question to askvike · /v1/hl-cohorts
How often are positions sampled?Every 5 minutes, snapshots kept for one year; the cohort series are hourly rollups of them.
Is the PnL ladder a percentile or dollar bands?Both, named apart. pnl is the percentile of cumulative realized PnL (stable in population); pnl_abs is dollar bands (stable in meaning). /segments publishes every bound.
Is a past hour graded with the label it had then?Yes, on request: labelBasis=point_in_time, from 2026-04-07. Every row declares label_basis; a look-ahead answer says lookahead: true.
How many requests for one coin's full cohort history?One. /symbols/{symbol}/cohort-metrics returns every cohort × every hour, up to 8,760 hours per request.
What happens to wallets that cannot be ranked?They are a real unknown bucket, served and queryable — not dropped, so the axes agree on a coin's total.
What does it cost?Nothing. A free key, 20,000 requests an hour and 200 a minute, up to 3 keys per account.
FAQ

Hyperliquid cohort data FAQ

What is a Hyperliquid cohort?
A bucket of wallets — or, on the tier axis, of positions — on one ladder: account size, percentile of realized PnL, realized PnL in dollars, or position notional. The API aggregates open positions per cohort (value long and short, bias, counts) per coin and per hour.
Can I use this as a Hyperliquid whale tracker?
For the aggregate view, yes: the size ladder's whale rungs (accounts of $1M and up, to 4x whale at $10M) show which way the largest wallets lean on each coin, hourly. For individual whale wallets, use /leaderboard and /wallets on the Hyperliquid page.
Which axis is safe for a backtest?
size and tier, which are always point-in-time, and pnl with labelBasis=point_in_time. pnl with the default labelBasis=current, and pnl_abs, grade every past hour with today's label.
Why is a wallet unknown on the pnl axis?
It has fewer than 10 closed trades, so it cannot be ranked. It stays in the data as its own bucket. On pnl_abs, unknown only means the wallet is not in the realized-PnL dictionary.
How much history comes back in one call?
cohort-metrics returns up to 8,760 hourly buckets per request, with every cohort in each. Point-in-time pnl labels start on 2026-04-07.
Is Hyperliquid cohort data free?
Yes. Sign in, create a key and send it as X-API-KEY: 20,000 requests an hour and 200 a minute per key, up to 3 keys, nothing billed.