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)
Functions
Estimate the worst-case vault leader commission for a withdrawal. |
|
|
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. |
- 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(user=None)
Fetch detailed vault information from the Hyperliquid API.
Makes a request to the
vaultDetailsendpoint and returns a typedVaultInfodataclass with all vault metadata.Note
The
maxWithdrawablefield in the API response is per-user. You must pass the depositoruseraddress to obtain the real withdrawable amount; without it the API always returns0.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(user="0xYourAddress") print(f"Vault: {info.name}") print(f"Leader: {info.leader}") print(f"Max withdrawable: {info.max_withdrawable}")- Parameters
user (Optional[eth_typing.evm.HexAddress]) – Depositor address. The
maxWithdrawablefield in the HyperliquidvaultDetailsresponse is per-user; without this parameter the API always returns0.- Returns
VaultInfo dataclass with vault details
- Raises
requests.HTTPError – If the HTTP request fails
- Return type
- fetch_metadata()
Fetch vault metadata without user-specific data.
Like
fetch_info()but does not require a user address. The returnedVaultInfo.max_withdrawablewill always be0because the Hyperliquid API only returns a meaningful value when a depositor address is provided.Use this for scanning, metrics collection, and other contexts where user-specific withdrawal limits are not needed.
- Returns
VaultInfo dataclass (
max_withdrawableis always0)- Return type
- property info: eth_defi.hyperliquid.vault.VaultInfo
Cached vault metadata.
Fetches vault details on first access and caches the result. Uses
fetch_metadata()(no user context), somax_withdrawableis0. Callfetch_info()with a user address when you need withdrawal limits.- Returns
VaultInfo dataclass with vault details
- 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).
- __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 VaultFollower
Bases:
objectRepresents a follower (depositor) in a Hyperliquid vault.
- __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) –
- 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.- __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) –
parent (Optional[eth_typing.evm.HexAddress]) –
- Return type
None
- class VaultSortKey
Bases:
enum.EnumSupported sort keys for vault listing.
These correspond to fields available in VaultSummary that provide stable, deterministic ordering.
- class VaultSummary
Bases:
objectSummary information for a Hyperliquid vault.
Contains both basic vault metadata and performance metrics from the stats-data endpoint.
- __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 (Optional[datetime.datetime]) –
- Return type
None
- estimate_max_withdrawal_commission(withdrawal_amount, commission_rate)
Estimate the worst-case vault leader commission for a withdrawal.
Hyperliquid vault leaders earn a performance fee (typically 10%) on depositor profits. The fee is deducted at withdrawal time from the portion of the withdrawal that represents profit.
In the worst case — when the entire withdrawal consists of profit — the commission equals
commission_rate * withdrawal_amount. In practice the commission is lower because only the profit portion is taxed.Protocol vaults (HLP and children) have no commission, so
commission_rateisNoneor zero for those.The
withdrawal_amountis always treated as a positive quantity. Hyperliquid withdrawal events store outflows as negative values (seeVaultDepositEvent), so callers may pass a negative amount —abs()is applied internally.- Parameters
withdrawal_amount (decimal.Decimal) – USDC amount being withdrawn. Negative values are accepted and treated as their absolute value.
commission_rate (Optional[Union[decimal.Decimal, float]]) – Leader commission rate as a fraction (e.g.
0.1orDecimal("0.1")for 10%). Accepts bothfloat(as stored inVaultInfo.commission_ratefrom the HyperliquidleaderCommissionAPI field) andDecimal.Nonefor protocol vaults with no fee.
- Returns
Worst-case commission in USDC (always non-negative). Returns
Decimal(0)whencommission_rateisNoneor zero.- Return type
See https://hyperliquid.gitbook.io/hyperliquid-docs/hypercore/vaults
- 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 (Optional[eth_defi.hyperliquid.session.HyperliquidSession]) – 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