Hyperliquid REST
Every endpoint under /v1/hyperliquid — per-wallet perp history, cohort positioning, builder-code economics, liquidations and candles. The largest namespace, and the one whose vocabulary costs the most to get wrong.
35 operations, every one a GET, all under https://data.vike.io/v1/hyperliquid/.
This is the largest namespace in the API by some distance, and the only one with per-wallet
history: who holds what, at what entry, with what realized PnL.
Every path in this namespace is written relative to https://data.vike.io/v1/hyperliquid. The
fenced line at the top of each endpoint's page carries the full path.
Start here
| Task | Endpoint |
|---|---|
| Rank the most profitable wallets this month, with drawdown and Calmar beside PnL | /leaderboard |
| Rank wallets on trading PnL with deposits and withdrawals reported beside it, not inside it | /leaderboard/flow-adjusted |
| Open one wallet: equity, cohort labels, risk metrics, lifetime flow and open positions | /wallets/{address} |
| Read a wallet's closed trades, newest first | /wallets/{address}/trades |
| Chart how whales and smart money are positioned on BTC by the hour | /coins/{coin}/cohort-metrics |
| Find who else holds the same position as a shared position card | /positions/match |
| See where BTC liquidations would cluster if price moved | /coins/{coin}/liquidation-heatmap |
| Find which front-end earns the most builder-code fees | /builders |
| Pull Hyperliquid candles for a backtest | /ohlcv |
| Pull hourly close, open interest, funding and premium for a basket of assets | /assets/hourly |
What it looks like in use
# find: who earned the most realized PnL in 30 days, among wallets with at least 50 trades
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard?window=30d&min_trades=50&limit=5" \
-H "X-API-KEY: $VIKE_API_KEY"
# drill in: WALLET is a wallet value from that board; equity, cohort labels and risk metrics in one call
curl -s "https://data.vike.io/v1/hyperliquid/wallets/$WALLET?window=30d" \
-H "X-API-KEY: $VIKE_API_KEY"
# what it holds right now
curl -s "https://data.vike.io/v1/hyperliquid/positions?wallet=$WALLET&limit=100" \
-H "X-API-KEY: $VIKE_API_KEY"
# how it got there: closed BTC trades, newest first
curl -s "https://data.vike.io/v1/hyperliquid/wallets/$WALLET/trades?coin=BTC&limit=100" \
-H "X-API-KEY: $VIKE_API_KEY"
# page through: NEXT is the previous response's nextCursor, passed back verbatim
curl -s "https://data.vike.io/v1/hyperliquid/wallets/$WALLET/trades?coin=BTC&limit=100&cursor=$NEXT" \
-H "X-API-KEY: $VIKE_API_KEY"Before you call anything
Auth. X-API-Key: vk_... or Authorization: Bearer vk_oat_...; either alone is enough. See
Authentication. Every call spends one unit of the shared hourly counter —
see Rate limits.
Errors. Every route in this namespace maps failures the same way: input the service rejected is a 400, an upstream data failure is a 503, and a rate-limit trip is a 429. A failure is never reported as a 200 with an empty body — a silent empty list is indistinguishable from "no data", which is how bad backfills get built on top of an outage. See Errors.
Pagination is keyset, not offset. The position-snapshot history is 7.3 billion rows and the
fill history 1.07 billion; an offset re-reads and discards every skipped row, so deep pages cost
linearly more and a concurrent insert shifts rows across page boundaries. Every list route returns
nextCursor — pass it back verbatim, do not construct one.
Aggregates are snapped to a canonical precision before they leave. A large floating-point sum is not reproduced bit-for-bit run to run, so without that step two identical requests could come back differing in their last digits. Snapping them is what makes a response safe to cache, diff or content-address.
Where a documented bound and the real one disagree, the real one wins
Two routes in this namespace advertise a bound that the service then clamps harder:
/traders documents size up to 100 and caps it at 20, and
/positions/match documents limit up to 500 and
caps it at 50. Both are noted on their own pages. A request above the effective cap is not
rejected — it is silently served at the cap.
The cohort vocabulary
Four query parameters recur across this namespace: axis, cohort, labelBasis and grading. Cohorts and axes defines the ladders and Label basis says when a label was computed. Read both before hard-coding a bucket name.
Wallets
Seven routes. {address} is a Hyperliquid wallet address.
| Path | What it answers |
|---|---|
/wallets/{address} | One wallet in one call: equity, its cohort labels on each ladder, the risk-metric set, lifetime external flow and the open-positions block. |
/wallets/{address}/trades | Closed round-trip trades for one wallet, newest first, cursor-paged. |
/wallets/{address}/trades/summary | Trade statistics for one wallet, overall and per coin. |
/wallets/{address}/fills | Raw fills — the level below round-trip trades. |
/wallets/{address}/funding | Funding paid and received by one wallet. |
/wallets/{address}/ledger | Deposits, withdrawals, transfers and vault events. |
/wallets/{address}/builders | Reverse lookup: which builders this wallet's flow is routed through. |
Builders
A builder is a front-end or bot that attaches its address to an order and is paid a slice of the taker fee for it. Six routes over builder-routed fills.
Three fee columns, none interchangeable
fee_usd is the builder's own revenue. trader_fee_usd is the total the trader paid.
builder_routed_deployer_fee_usd is the deployer's cut on builder-routed flow only — a lower
bound on deployer revenue, never the whole of it.
| Path | What it answers |
|---|---|
/builders | The builder-code leaderboard: fee revenue, routed volume, unique traders, fills, market_share_pct. |
/builders/stats | Builder-code economics for the whole venue. |
/builders/{builder} | One builder: window totals plus per-asset and per-dex breakdowns, and an unwindowed lifetime block. |
/builders/{builder}/users | The wallets routing through one builder, ranked. |
/builders/{builder}/fills | Raw builder-routed fills, newest first. |
/builders/{builder}/series | Fee, volume, users and fills per bucket for one builder, newest first. |
Cohorts and segments
Three self-describing routes. Read these before hard-coding any bucket name.
| Path | What it answers |
|---|---|
/cohorts | The canonical cohort ladders as flat label sets — the exact strings ?cohort= accepts. |
/segments | The detailed catalogue: every bucket on every axis with its boundaries, slug, rank, basis and a groupable flag. |
/segments/{cohort}/summary | Aggregate positioning for one cohort at the latest snapshot. |
Coins
Hourly positioning series for one coin. {coin} is an HL coin ticker such as BTC.
| Path | What it answers |
|---|---|
/coins/{coin}/metrics | Hourly open-interest / position-count / bias series for one coin, optionally sliced to a single cohort. |
/coins/{coin}/cohort-metrics | The full cohort matrix for one coin — every bucket on an axis, hourly. |
/coins/{coin}/size-breakdown | Positioning for one coin split by the canonical ten position-size buckets. |
Positions
| Path | What it answers |
|---|---|
/positions | Position rows, current or historical. |
/positions/coins | Market-wide open interest per coin at the latest snapshot, with the venue's own OI alongside our aggregate so the two can be reconciled. |
/positions/match | "Who else is in this trade" — open positions matching a coin/side/leverage/entry profile. |
Leaderboards
| Path | What it answers |
|---|---|
/traders | Top HL perp traders by the requested metric over a window. |
/leaderboard | The trader leaderboard carrying the full risk-metric set — drawdown, Calmar, recovery factor, profit factor, expectancy and streaks beside PnL. |
/leaderboard/flow-adjusted | Ranked on fills-derived realized PnL, with external flow reported beside it. |
Liquidations
Three routes, and they answer two different questions — one realized, two hypothetical.
| Path | What it answers |
|---|---|
/liquidations | Realized liquidation fills — what actually got liquidated. |
/coins/{coin}/liquidation-heatmap | Where liquidations would cluster if price moved: every open position's own liquidation price, binned and weighted by notional. |
/liquidations/risk | Share of each coin's open interest sitting close to liquidation, optionally for one cohort. |
Ecosystem aggregates
| Path | What it answers |
|---|---|
/stats | Ecosystem time series: perp equity, open interest, position counts. |
/stats/volume | Hourly perp volume — the whole venue, or one coin. |
/hype/holders | The HYPE holder leaderboard — spot balance plus staked, per wallet. |
/heatmap | The coin × cohort positioning matrix — the whole board in one call. |
/assets/hourly | Hourly close plus open interest, funding rate and premium, for many assets at once. |
Candles
Two routes, and they are the whole crypto candle surface: Hyperliquid candles, built from the fills our own node sees. There is no second venue's candle route to reconcile the numbers against, so the parameter table and the response envelope on the endpoint's own page are the entire contract.
| Path | What it answers |
|---|---|
/ohlcv | Hyperliquid candles, derived from executed fills. |
/ohlcv/export | Streams the same single page as NDJSON. |
Related
- Data MCP server —
hl_perp_top_tradersandhl_position_matchrun the same code as/tradersand/positions/match, agent-shaped. - Rate limits — the shared hourly counter these calls spend.
- Errors — the status codes and the error envelope.
Endpoint Overview
Every endpoint of the Vike Data API — 68 across 6 namespaces — with the base URL, the one endpoint that is not on it, and the conventions every namespace page assumes.
/wallets/{address}
One wallet in one call — equity, its cohort labels on each ladder, the risk-metric set, lifetime external flow and the open-positions block.