hyperliquid.vault
Documentation for eth_defi.hyperliquid.vault Python module.
Hyperliquid vault data extraction and analysis.
This module provides functionality for extracting historical Hyperliquid vault events and serializing them into Pandas DataFrames for analysis.
API Endpoints
Hyperliquid has two relevant API surfaces for vault data:
Official Info API (https://api.hyperliquid.xyz/info):
vaultDetails- Get details for a specific vault (works)userVaultEquities- Get user’s vault positions (works)vaultSummaries- Documented but returns empty array (non-functional)
Stats Data API (https://stats-data.hyperliquid.xyz/Mainnet/vaults):
Undocumented internal endpoint that powers the Hyperliquid web UI
Returns all vaults (~8,000+) with APR, TVL, and PNL history arrays
Uses GET instead of POST - serves pre-aggregated/cached data
More comprehensive than the official API but may change without notice
The vaultSummaries endpoint in the official API is documented but non-functional
(returns []). For bulk vault listing, use the stats-data endpoint or the
bash script at scripts/hyperliquid/fetch-vault-metadata.sh.
For more information about Hyperliquid vaults see:
https://hyperliquid.gitbook.io/hyperliquid-docs/hypercore/vaults
https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint
https://app.hyperliquid.xyz/vaults (web UI using stats-data endpoint)
Module Attributes
Hyperliquid stats-data API URL for vault listing (mainnet). |
|
Hyperliquid stats-data API URL for vault listing (testnet) |
Functions
|
Iterate over all Hyperliquid vaults. |
Classes
Client for extracting historical Hyperliquid vault events and data. |
|
Historical portfolio data for a specific time period. |
|
Represents a follower (depositor) in a Hyperliquid vault. |
|
Detailed information about a Hyperliquid vault. |
|
Supported sort keys for vault listing. |
|
Summary information for a Hyperliquid vault. |
- HYPERLIQUID_STATS_URL = 'https://stats-data.hyperliquid.xyz/Mainnet/vaults'
Hyperliquid stats-data API URL for vault listing (mainnet). This is an undocumented internal endpoint that powers the Hyperliquid web UI. It must be used instead of the official
vaultSummariesendpoint which is documented but non-functional (returns empty array). This endpoint returns all vaults (~8,000+) with APR, TVL, and PNL history via GET request. See: https://app.hyperliquid.xyz/vaults
- HYPERLIQUID_STATS_TESTNET_URL = 'https://stats-data.hyperliquid-testnet.xyz/Mainnet/vaults'
Hyperliquid stats-data API URL for vault listing (testnet)
- class VaultFollower
Bases:
objectRepresents a follower (depositor) in a Hyperliquid vault.
- user: eth_typing.evm.HexAddress
Follower’s wallet address
- vault_equity: decimal.Decimal
Current equity in the vault (USD)
- pnl: decimal.Decimal
Profit/loss since entry
- all_time_pnl: decimal.Decimal
All-time profit/loss
- __init__(user, vault_equity, pnl, all_time_pnl, days_following, vault_entry_time, lockup_until=None)
- Parameters
user (eth_typing.evm.HexAddress) –
vault_equity (decimal.Decimal) –
pnl (decimal.Decimal) –
all_time_pnl (decimal.Decimal) –
days_following (int) –
vault_entry_time (int) –
lockup_until (int | None) –
- Return type
None
- class PortfolioHistory
Bases:
objectHistorical portfolio data for a specific time period.
Contains account value history, PNL history, and trading volume for a given period (day, week, month, or allTime).
- account_value_history: list[tuple[datetime.datetime, decimal.Decimal]]
Account value history as list of (timestamp, value) tuples
- pnl_history: list[tuple[datetime.datetime, decimal.Decimal]]
PNL history as list of (timestamp, pnl) tuples
- volume: decimal.Decimal
Trading volume for the period (USD)
- __init__(period, account_value_history, pnl_history, volume)
- Parameters
period (str) –
account_value_history (list[tuple[datetime.datetime, decimal.Decimal]]) –
pnl_history (list[tuple[datetime.datetime, decimal.Decimal]]) –
volume (decimal.Decimal) –
- Return type
None
- class VaultInfo
Bases:
objectDetailed information about a Hyperliquid vault.
This dataclass represents the response from the
vaultDetailsAPI endpoint, containing comprehensive vault metadata, follower information, and portfolio history.- vault_address: eth_typing.evm.HexAddress
Vault’s blockchain address
- leader: eth_typing.evm.HexAddress
Vault manager/operator address
- followers: list[eth_defi.hyperliquid.vault.VaultFollower]
List of vault followers (depositors)
- portfolio: dict[str, eth_defi.hyperliquid.vault.PortfolioHistory]
Portfolio history by time period
- max_distributable: decimal.Decimal
Maximum distributable amount (USD)
- max_withdrawable: decimal.Decimal
Maximum withdrawable amount (USD)
- is_closed: bool
Whether the vault has been permanently closed and is no longer operational.
From the Hyperliquid
vaultDetailsAPIisClosedfield.See https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint
- allow_deposits: bool
Whether the vault is currently accepting new deposits from followers.
A vault can be operational (
is_closed=False) but still have deposits disabled (allow_deposits=False) — the leader controls this independently.From the Hyperliquid
vaultDetailsAPIallowDepositsfield.See https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint
- leader_fraction: float | None
Fraction of vault capital owned by the leader (e.g. 0.05 = 5%).
Hyperliquid requires vault leaders to maintain at least 5% of total vault capital (verified 2026-03-09). From the
vaultDetailsAPIleaderFractionfield.Source: https://hyperliquid.gitbook.io/hyperliquid-docs/hypercore/vaults/for-vault-leaders-legacy
- leader_commission: float | None
Leader commission value from the
vaultDetailsAPIleaderCommissionfield.The exact semantics of this field are not yet fully understood — it may represent accumulated commission in USD or an alternative commission metric.
- parent: Optional[eth_typing.evm.HexAddress]
Parent vault address if this is a child vault
- __init__(name, vault_address, leader, description, followers, portfolio, max_distributable, max_withdrawable, is_closed, allow_deposits, relationship_type, commission_rate=None, leader_fraction=None, leader_commission=None, parent=None)
- Parameters
name (str) –
vault_address (eth_typing.evm.HexAddress) –
leader (eth_typing.evm.HexAddress) –
description (str) –
followers (list[eth_defi.hyperliquid.vault.VaultFollower]) –
portfolio (dict[str, eth_defi.hyperliquid.vault.PortfolioHistory]) –
max_distributable (decimal.Decimal) –
max_withdrawable (decimal.Decimal) –
is_closed (bool) –
allow_deposits (bool) –
relationship_type (str) –
commission_rate (float | None) –
leader_fraction (float | None) –
leader_commission (float | None) –
parent (Optional[eth_typing.evm.HexAddress]) –
- Return type
None
- class VaultSummary
Bases:
objectSummary information for a Hyperliquid vault.
Contains both basic vault metadata and performance metrics from the stats-data endpoint.
- vault_address: eth_typing.evm.HexAddress
Vault’s blockchain address
- leader: eth_typing.evm.HexAddress
Vault manager/operator address
- tvl: decimal.Decimal
Total Value Locked (USD)
- create_time: datetime.datetime | None
Vault creation timestamp
- __init__(name, vault_address, leader, tvl, is_closed, relationship_type, create_time=None, apr=None, pnl_day=None, pnl_week=None, pnl_month=None, pnl_all_time=None)
- Parameters
name (str) –
vault_address (eth_typing.evm.HexAddress) –
leader (eth_typing.evm.HexAddress) –
tvl (decimal.Decimal) –
is_closed (bool) –
relationship_type (str) –
create_time (datetime.datetime | None) –
apr (float | None) –
- Return type
None
- class HyperliquidVault
Bases:
objectClient for extracting historical Hyperliquid vault events and data.
This class provides methods to fetch vault information from the Hyperliquid API and serialize the data into Pandas DataFrames for analysis.
Example:
from eth_defi.hyperliquid.session import create_hyperliquid_session, HYPERLIQUID_TESTNET_API_URL from eth_defi.hyperliquid.vault import HyperliquidVault # Mainnet session = create_hyperliquid_session() vault = HyperliquidVault( session=session, vault_address="0x1234567890abcdef1234567890abcdef12345678", ) # Testnet session = create_hyperliquid_session(api_url=HYPERLIQUID_TESTNET_API_URL) vault = HyperliquidVault( session=session, vault_address="0x1234567890abcdef1234567890abcdef12345678", )- Parameters
session – Session from
create_hyperliquid_session()vault_address – The vault’s blockchain address
timeout – HTTP request timeout in seconds
Initialise the Hyperliquid vault client.
- Parameters
session – Session from
create_hyperliquid_session(). The API URL is read fromHyperliquidSession.api_url.vault_address – The vault’s blockchain address
timeout – HTTP request timeout in seconds
- __init__(session, vault_address, timeout=30.0)
Initialise the Hyperliquid vault client.
- Parameters
session (eth_defi.hyperliquid.session.HyperliquidSession) – Session from
create_hyperliquid_session(). The API URL is read fromHyperliquidSession.api_url.vault_address (eth_typing.evm.HexAddress) – The vault’s blockchain address
timeout (float) – HTTP request timeout in seconds
- fetch_info()
Fetch detailed vault information from the Hyperliquid API.
Makes a request to the
vaultDetailsendpoint and returns a typedVaultInfodataclass with all vault metadata.Use
infoproperty for cached access.Example:
from eth_defi.hyperliquid.session import create_hyperliquid_session from eth_defi.hyperliquid.vault import HyperliquidVault session = create_hyperliquid_session() vault = HyperliquidVault( session=session, vault_address="0x3df9769bbbb335340872f01d8157c779d73c6ed0", ) info = vault.fetch_info() print(f"Vault: {info.name}") print(f"Leader: {info.leader}") print(f"Followers: {len(info.followers)}")- Returns
VaultInfo dataclass with vault details
- Raises
requests.HTTPError – If the HTTP request fails
- Return type
- property info: eth_defi.hyperliquid.vault.VaultInfo
Cached vault information.
Fetches vault details on first access and caches the result. Use
fetch_info()to force a fresh fetch.- Returns
VaultInfo dataclass with vault details
- class VaultSortKey
Bases:
enum.EnumSupported sort keys for vault listing.
These correspond to fields available in VaultSummary that provide stable, deterministic ordering.
- VAULT_ADDRESS = 'vault_address'
Sort by vault address (hex string, stable and unique)
- NAME = 'name'
Sort by vault name (alphabetical)
- TVL = 'tvl'
Sort by TVL (Total Value Locked)
- APR = 'apr'
Sort by APR (Annual Percentage Rate)
- CREATE_TIME = 'create_time'
Sort by creation time
- fetch_all_vaults(session=None, stats_url='https://stats-data.hyperliquid.xyz/Mainnet/vaults', timeout=30.0)
Iterate over all Hyperliquid vaults.
This function fetches all vault summaries from the Hyperliquid stats-data API and yields them one by one. It handles API throttling using exponential backoff retry logic.
Note
This uses the undocumented stats-data endpoint (
HYPERLIQUID_STATS_URL) instead of the officialvaultSummariesendpoint which is documented but non-functional (returns empty array).Example:
from eth_defi.hyperliquid.session import create_hyperliquid_session from eth_defi.hyperliquid.vault import fetch_all_vaults, HYPERLIQUID_STATS_TESTNET_URL # Create a session for API requests session = create_hyperliquid_session() # Iterate over all vaults (mainnet) for vault in fetch_all_vaults(session): print(f"Vault: {vault.name}, TVL: ${vault.tvl:,.2f}") # Use testnet for vault in fetch_all_vaults(session, stats_url=HYPERLIQUID_STATS_TESTNET_URL): print(f"Testnet vault: {vault.name}") # Filter vaults with high TVL high_tvl_vaults = [v for v in fetch_all_vaults(session) if v.tvl > 1_000_000] # Convert to list all_vaults = list(fetch_all_vaults(session)) # Sort vaults by TVL after fetching sorted_by_tvl = sorted(fetch_all_vaults(session), key=lambda v: v.tvl, reverse=True) # Get top 10 vaults by TVL top_tvl = sorted_by_tvl[:10]- Parameters
session (eth_defi.hyperliquid.session.HyperliquidSession | None) – A requests Session configured for Hyperliquid API. Use
eth_defi.hyperliquid.session.create_hyperliquid_session()to create one. If None, a default session will be created.stats_url (str) – Hyperliquid stats-data API URL. Use
HYPERLIQUID_STATS_URLfor mainnet orHYPERLIQUID_STATS_TESTNET_URLfor testnet.timeout (float) – HTTP request timeout in seconds
- Returns
Iterator yielding VaultSummary objects
- Raises
requests.HTTPError – If the HTTP request fails after all retries
- Return type