Hyperliquid Vaults API: Track Performance and Depositors

Learn how to check any vault’s APR, PnL and depositors, from HLP to every vault, using the API.

HydromancerTeam
Hyperliquid Vaults API: Track Performance and Depositors

The Hyperliquid app lists every vault, but its list won't tell you which one is worth depositing in. To compare thousands of vaults on your own terms, or build a screener that ranks them, you need the same data through the API.

Hyperliquid vaults vs managed products on a CEX

Vaults are Hyperliquid's built-in way to let someone else trade your money. Unlike managed products on a centralized exchange (CEX), everything about them is on-chain:

Vaults on Hyperliquid Managed products on a CEX
Positions and tradesPublic on-chain, readable
through the free API
Usually only the stats
the exchange shows
Deposits and withdrawalsEvery one is
recorded on-chain
Usually not visible
Leader's termsSet by the protocol:
user-vault leaders keep
at least 5% of the vault
and take 10% of profits;
HLP has no profit share
Set by each product
Which ones you can studyEvery vault, including
Hyperliquid's own HLP
The exchange's
own listings

Below, we cover how vaults work, then read one vault's performance and depositors, list every vault, and track money moving in and out. The examples use HLP, Hyperliquid's own vault, with numbers from our test runs.

How Hyperliquid vaults work

A vault is a trading account that runs on pooled money. A leader trades it, and depositors share its profits and losses in proportion to their stake. There are two kinds, per Hyperliquid's vault docs:

HLP (protocol vault) User vault
Who tradesProtocol strategies:
market making and
liquidations
The leader
Leader's profit shareNone10% of profits
Lock-up after your latest deposit4 days1 day
Leader's minimum staken/a5% of the vault

The docs now call user vaults "HyperCore vaults (legacy)". They trade validator-operated perps only, with no spot or HIP-3.

Here's how the profit share works, from the depositor docs. You deposit 100 USDC into a vault holding 900, so you own 10%. The vault grows to 2,000, and your share is now worth 200. When you withdraw, the leader takes 10% of your 100 profit, so you receive 190 USDC.

For reading data, a vault is just an address. Account requests such as clearinghouseState and userFills work on it like on any wallet.

Which request gives you what

You want Request
One vault's APR, history, settings and largest depositorsvaultDetails
The vaults an address has deposited inuserVaultEquities
Whether an address is a vaultuserRole returns
{"role": "vault"}
A vault's deposits and withdrawalsuserNonFundingLedgerUpdates
on the vault's address
A vault's positions and tradesclearinghouseState
, userFills , as
for any wallet
Every vaultHyperliquid's app
list file
(undocumented, below)

The documented requests are free, read-only POSTs to https://api.hyperliquid.xyz/info. Details are in Hyperliquid's info endpoint docs.

You only need requests to run the snippets, plus HYDROMANCER_API_KEY for the Hydromancer example.

Step 1: Read one vault's performance with vaultDetails

Most of a vault's page comes from one request. Give vaultDetails a vault's address and you get its APR, settings, account value and PnL history, and its largest depositors (we saw 100):

code
import requests

vault = requests.post(
    "https://api.hyperliquid.xyz/info",
    json={"type": "vaultDetails", "vaultAddress": HLP},
).json()

day = dict(vault["portfolio"])["day"]
value = float(day["accountValueHistory"][-1][1])
print(vault["name"], f"| APR {vault['apr']:.2%} | account value ${value:,.0f}",
      f"| depositors listed: {len(vault['followers'])}")
code
Hyperliquidity Provider (HLP) | APR 3.69% | account value $175,284,089 | depositors listed: 100

HLP here is HLP's address, 0xdfc24b077bc1425ad1dea75bcb6f8158e10df303. The fields you'll use most:

Field What it holds
aprThe APR the app shows, as a fraction (0.0369 is 3.69%)
portfolioAccount value and PnL history for day, week, month and all time
followersThe largest depositors (we saw 100),
each with equity, PnL and lock-up end
leaderCommissionThe leader's profit share: 0.1 on user vaults, 0 on HLP
relationshipWhether the vault is a parent or child (HLP has seven children)

The portfolio history is what you chart. Here's HLP's all-time window:

HLP vault account value and cumulative PnL on Hyperliquid since May 2023. Account value rises to about $600M in 2025 and is about $175M now; cumulative PnL rises overall, with small drawdowns, to about $139M.

Account value swings with deposits and withdrawals. PnL doesn't, because Hyperliquid adjusts it for money moving in and out, per its portfolio graphs docs. That's why PnL rises fairly smoothly while account value swings. Use pnlHistory to judge performance.

Step 2: List every vault on Hyperliquid

There's no documented request that lists every vault. Hyperliquid's app reads its vault list from a public file. It's undocumented, so it can change, but it works:

code
import requests

# undocumented: the app's vault list
vaults = requests.get(
    "https://stats-data.hyperliquid.xyz/Mainnet/vaults"
).json()

open_vaults = [v["summary"] for v in vaults if not v["summary"]["isClosed"]]
open_vaults.sort(key=lambda s: -float(s["tvl"]))

largest = open_vaults[0]
print(f"{len(vaults):,} vaults, {len(open_vaults):,} open. Largest:",
      largest["name"], f"${float(largest['tvl']):,.0f}")
code
9,478 vaults, 3,076 open. Largest: Hyperliquidity Provider (HLP) $175,283,592

Use the file to find vaults, then call vaultDetails on the ones you care about. Most listed vaults are closed, so filter them out before ranking. And don't add HLP's children to its total: the parent holds their equity, so adding both counts it twice.

Step 3: Track deposits, withdrawals and depositors

Money moving in and out of a vault tells you whether people trust it. Three requests cover it:

  • Flows: userNonFundingLedgerUpdates on the vault's address returns vaultDeposit and vaultWithdraw entries. Withdrawals name the user and the amount received; deposits show only the amount. Page forward from the last timestamp.
  • One depositor: add "user" to vaultDetails and read followerState.
  • From the depositor's side: userVaultEquities lists every vault an address holds, with its equity and lock-up end.

Track many Hyperliquid vaults at once

The per-vault requests above handle one vault or one address per request. That's fine for a single vault page. A screener or risk dashboard that follows hundreds of vaults hits the limits fast. Because a vault is just an address, Hydromancer's API can watch many at once:

What you need Without Hydromancer (Hyperliquid's API only) With Hydromancer's API
Positions for many vaultsclearinghouseState ,
one vault per request,
from 1,200 weight a
minute per IP
batchClearinghouseStates
: up to 1,000 vaults
in one request
Live trades from many vaultsOne live subscription
per vault; the docs
allow 10 users per IP
One userFills
subscribe request for
up to 1,000 addresses;
each counts toward
your plan's
subscription total
(500 on Starter)
Vaults an address holds or leadsuserVaultEquities
; leadingVaults
works but isn't in
Hyperliquid's docs
userVaultEquities
and leadingVaults

, both documented
One vault's details and historyvaultDetails , freeThe same: use
Hyperliquid's
vaultDetails

Example: watch the 50 largest vaults' positions

Without Hydromancer: one request per vault.

code
import requests

states = []
for v in VAULTS:  # one request per vault
    states.append(requests.post(
        "https://api.hyperliquid.xyz/info",
        json={"type": "clearinghouseState", "user": v},
    ).json())

print(len(states), "vaults,", len(VAULTS), "requests,",
      2 * len(VAULTS), "of your 1,200 weight a minute")
code
50 vaults, 50 requests, 100 of your 1,200 weight a minute

With Hydromancer: one request for all of them.

code
import os
import requests

batch = requests.post(
    "https://api.hydromancer.xyz/info",
    json={"type": "batchClearinghouseStates", "users": VAULTS},
    headers={"Authorization": f"Bearer {os.environ['HYDROMANCER_API_KEY']}"},
).json()

print(len(batch["successful_states"]), "vaults, 1 request")
code
50 vaults, 1 request

VAULTS is the 50 largest open vaults from Step 2. Refreshing them every 10 seconds on Hyperliquid's API would use half your request budget. With Hydromancer it's one request each time. Our whale tracker guide shows the same batch requests for any list of wallets.

What to know

  • Withdrawals can move positions. If a withdrawal needs margin, the vault cancels orders and closes part of its positions until the money is free.
  • History is sampled. The all-time window is thinned to roughly one point every two weeks. For a denser history, store vaultDetails responses as you fetch them.
  • Deposits and withdrawals are signed actions (vaultTransfer on the exchange endpoint). Everything in this guide is read-only.

FAQ

What are vaults on Hyperliquid?

Vaults are trading accounts that run on pooled money. A leader trades the vault, and depositors share its profits and losses in proportion to their stake. HLP is Hyperliquid's own protocol vault; anyone can also open a user vault.

How do I check a Hyperliquid vault's performance?

Send vaultDetails with the vault's address to https://api.hyperliquid.xyz/info. Use pnlHistory in portfolio to judge performance, because it's adjusted for deposits and withdrawals; account value isn't.

What is HLP on Hyperliquid?

HLP (Hyperliquidity Provider) is Hyperliquid's protocol vault. It runs market-making and liquidation strategies, has no leader profit share, and locks each deposit for 4 days.

How do I get a list of all Hyperliquid vaults?

There's no documented request for it. Hyperliquid's app reads its list from stats-data.hyperliquid.xyz/Mainnet/vaults, an undocumented file you can fetch directly.

How do I see who has deposited into a vault?

vaultDetails lists the largest depositors in followers (we saw 100). For one address, add it as "user" and read followerState.

What is the lock-up on Hyperliquid vaults?

For HLP, you can withdraw 4 days after your most recent deposit; another deposit resets that. User vaults lock for 1 day.

Next steps