Vault leaderboard
Every Hyperliquid vault, one row per vault family: current TVL, APR and the window's PnL, return, net flow, volume and fills.
GET https://data.vike.io/v1/hyperliquid/vaultsEvery Hyperliquid vault, one row per vault family: current TVL, APR and the window's PnL, return, net flow, volume
and fills. HLP and its sub-vaults are one row (child_vaults lists them), so every dollar is counted once.
# the largest open vaults by current TVL
curl -s "https://data.vike.io/v1/hyperliquid/vaults?limit=3" \
-H "X-API-KEY: $VIKE_API_KEY"
# next page of the call just above: NEXT is its nextCursor, passed back verbatim
curl -s "https://data.vike.io/v1/hyperliquid/vaults?limit=3&cursor=$NEXT" \
-H "X-API-KEY: $VIKE_API_KEY"
# best share-price return over 30 days among vaults holding at least $100k that still take deposits
curl -s "https://data.vike.io/v1/hyperliquid/vaults?sort=return&deposits=open&min_tvl=100000&limit=20" \
-H "X-API-KEY: $VIKE_API_KEY"
# where money went this week: vaults ranked by net deposits over 7 days
curl -s "https://data.vike.io/v1/hyperliquid/vaults?window=7d&sort=net_flow&limit=20" \
-H "X-API-KEY: $VIKE_API_KEY"
# the newest vaults first, open or closed: sort=age with order=desc is the oldest first
curl -s "https://data.vike.io/v1/hyperliquid/vaults?sort=age&order=asc&status=all&limit=20" \
-H "X-API-KEY: $VIKE_API_KEY"
# check how much of a window is really covered before comparing returns
curl -s "https://data.vike.io/v1/hyperliquid/vaults?window=90d&limit=50" \
-H "X-API-KEY: $VIKE_API_KEY" \
| jq '{window, vaults: [.vaults[] | {vault, start, partial, coverage, return_pct}]}'windowqueryoptional7d | 30d | 90d | 365d | all. Default 30dsortqueryoptionaltvl | apr | pnl | return | net_flow | volume | age. Default tvlorderqueryoptionalasc | desc. Default descstatusqueryoptionalopen | closed | all. Default opendepositsqueryoptionalany | open | closed: whether the vault accepts deposits. Default anymin_tvlqueryoptionallimitqueryoptionalcursorqueryoptionalNo response has been captured for this route yet. The card shows the fields the code returns, with placeholders in place of values.
{
"window": {
"window": "30d",
"start": "<YYYY-MM-DD>",
"end": "<YYYY-MM-DD, the newest recorded day>",
"partial": "<true when the history is shorter than the window>"
},
"sort": "tvl",
"order": "desc",
"vaults": [
{
"vault": "<address>",
"name": "<vault name>",
"leader": "<address>",
"created_at": "<ISO-8601 UTC>",
"is_closed": "<boolean>",
"allow_deposits": "<boolean>",
"leader_commission": "<fraction, 0.1 is 10%>",
"lockup_seconds": "<integer>",
"start": "<YYYY-MM-DD, this vault's own start, or null>",
"partial": "<boolean>",
"tvl_usd": "<USD>",
"apr_pct": "<percentage points, or null>",
"pnl_usd": "<USD>",
"return_pct": "<percentage points, or null>",
"net_flow_usd": "<USD>",
"volume_usd": "<USD>",
"fills": "<integer>",
"coverage": "<fraction from 0 to 1>",
"child_vaults": ["<address>"]
}
],
"nextCursor": "<string, or null on the last page>"
}History starts on 2026-10-27: windows are partial and returns are null until it fills
A window ends on the newest recorded day and reaches back 7, 30, 90 or 365 days. Vault history is recorded from
2026-10-27, so a window longer than the history starts on the first recorded day and comes back with
partial: true; all means all recorded history, so it is never marked partial but is just as short. On a partial
window the PnL, return and flows cover only the recorded days. pnl_usd and return_pct stay null until a day
has been recorded after the window's first day, and apr_pct is null for a vault recorded for less than 30 days. Read
partial before comparing two vaults or two windows.
A row's start can be later than the window's
The top-level window states the resolved bounds; each row carries its own start and partial, because a vault
younger than the window starts later. Its PnL and return cover only its own days.
pnl_usdis the equity change minus net deposits, so money flowing in or out does not count as profit.return_pctis the chained share-price return, in percentage points. It isnullwhen a daily step is missing or when fewer than 95% of the window's days are recorded for that vault (coverage, a fraction); it is never filled with zero.apr_pctannualises the vault's own 30-day return, whateverwindowyou ask for.net_flow_usdcounts withdrawals and distributions as outflow.- A
nullsort value sorts last. Until 30 days are recorded,sort=aprcannot order anything, and neither cansort=returnwhilereturn_pctisnull. sort=agewith the defaultorder=desclists the oldest vaults first.
Each vault's own page is /vaults/{vault}; its fills, trades and
positions are served by the wallet routes with the vault's address.