vaultSummaries
Get comprehensive summary information for all vaults on the platform, including performance metrics, total value locked, and vault characteristics.
Why Hyperliquid? Build on the dominant perpetuals DEX with 70% market share, $2.7T+ lifetime volume, and $2B TVL with 200K orders/second throughput, zero gas fees, sub-second finality, and fully onchain Central Limit Order Book (CLOB).
When to Use This Endpoint#
The vaultSummaries endpoint is essential for vault aggregators, analytics platforms, and DeFi dashboards who need to:
- Aggregate Vault Data — Get complete overview of all available vaults
- Build Vault Explorers — Create searchable vault directories
- Track Market Growth — Monitor total vault ecosystem metrics
- Portfolio Diversification — Discover vaults across different strategies
Request#
Endpoint#
POST https://api-hyperliquid-mainnet-info.n.dwellir.com/info
Headers#
| Header | Value | Required |
|---|---|---|
Content-Type | application/json | Yes |
X-Api-Key | Your API key | Yes |
Parameters#
| Parameter | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Must be "vaultSummaries" |
Example Request#
{
"type": "vaultSummaries"
}
Response#
Success Response#
[
{
"vaultAddress": "0x1234567890abcdef1234567890abcdef12345678",
"name": "Alpha Strategy Vault",
"tvl": "5000000.00",
"apy": "45.2",
"totalDeposits": "4800000.00",
"totalWithdrawals": "200000.00",
"netDeposits": "4600000.00",
"sharePrice": "1.15",
"totalShares": "4347826.09",
"inception": "2024-01-15",
"performanceFee": "20",
"managementFee": "2",
"minDeposit": "1000.00",
"depositLockup": "7"
},
{
"vaultAddress": "0xabcdef1234567890abcdef1234567890abcdef12",
"name": "Delta Neutral Vault",
"tvl": "3500000.00",
"apy": "28.7",
"totalDeposits": "3200000.00",
"totalWithdrawals": "100000.00",
"netDeposits": "3100000.00",
"sharePrice": "1.09",
"totalShares": "3211009.17",
"inception": "2024-02-20",
"performanceFee": "15",
"managementFee": "1.5",
"minDeposit": "500.00",
"depositLockup": "3"
}
]
Response Fields#
The response is an array of vault summary objects, each containing:
| Field | Type | Description |
|---|---|---|
vaultAddress | string | Ethereum address of the vault contract |
name | string | Name of the vault |
tvl | string | Total value locked in USD |
apy | string | Annual percentage yield |
totalDeposits | string | Cumulative deposits in USD |
totalWithdrawals | string | Cumulative withdrawals in USD |
netDeposits | string | Net deposits (deposits - withdrawals) |
sharePrice | string | Current share price |
totalShares | string | Total shares outstanding |
inception | string | Vault creation date (ISO 8601) |
performanceFee | string | Performance fee percentage |
managementFee | string | Management fee percentage |
minDeposit | string | Minimum deposit amount in USD |
depositLockup | string | Lockup period in days |
Code Examples#
- cURL
- JavaScript
- Python
- Go
curl -X POST 'https://api-hyperliquid-mainnet-info.n.dwellir.com/info' \
-H 'X-Api-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"type": "vaultSummaries"
}'
const ENDPOINT = 'https://api-hyperliquid-mainnet-info.n.dwellir.com/info';
const API_KEY = 'your-api-key-here';
async function getVaultSummaries() {
const response = await fetch(ENDPOINT, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': API_KEY
},
body: JSON.stringify({
type: 'vaultSummaries'
})
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
return await response.json();
}
// Usage
const vaults = await getVaultSummaries();
console.log(`Total vaults: ${vaults.length}`);
// Calculate ecosystem metrics
const totalTVL = vaults.reduce((sum, v) => sum + parseFloat(v.tvl), 0);
const avgAPY = vaults.reduce((sum, v) => sum + parseFloat(v.apy), 0) / vaults.length;
console.log(`\nEcosystem Metrics:`);
console.log(`Total TVL: $${totalTVL.toLocaleString()}`);
console.log(`Average APY: ${avgAPY.toFixed(2)}%`);
// Group by fee structure
const lowFee = vaults.filter(v => parseFloat(v.performanceFee) < 15);
console.log(`\nLow-fee vaults (< 15%): ${lowFee.length}`);
import requests
from typing import List, Dict
from datetime import datetime
ENDPOINT = 'https://api-hyperliquid-mainnet-info.n.dwellir.com/info'
API_KEY = 'your-api-key-here'
def get_vault_summaries() -> List[Dict]:
"""Get summary information for all vaults"""
response = requests.post(
ENDPOINT,
json={'type': 'vaultSummaries'},
headers={
'Content-Type': 'application/json',
'X-Api-Key': API_KEY
},
timeout=10
)
response.raise_for_status()
return response.json()
# Usage
vaults = get_vault_summaries()
print(f"Total vaults: {len(vaults)}\n")
# Calculate ecosystem metrics
total_tvl = sum(float(v['tvl']) for v in vaults)
avg_apy = sum(float(v['apy']) for v in vaults) / len(vaults)
print("=== Ecosystem Metrics ===")
print(f"Total TVL: ${total_tvl:,.2f}")
print(f"Average APY: {avg_apy:.2f}%")
# Find vaults by criteria
print("\n=== Vaults by TVL (Top 5) ===")
vaults_by_tvl = sorted(vaults, key=lambda v: float(v['tvl']), reverse=True)
for i, vault in enumerate(vaults_by_tvl[:5], 1):
print(f"{i}. {vault['name']}: ${float(vault['tvl']):,.2f}")
# Analyze fee structures
print("\n=== Fee Analysis ===")
low_fee = [v for v in vaults if float(v['performanceFee']) < 15]
high_fee = [v for v in vaults if float(v['performanceFee']) >= 20]
print(f"Low-fee vaults (< 15%): {len(low_fee)}")
print(f"High-fee vaults (≥ 20%): {len(high_fee)}")
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"sort"
"strconv"
)
const (
Endpoint = "https://api-hyperliquid-mainnet-info.n.dwellir.com/info"
APIKey = "your-api-key-here"
)
type VaultSummariesRequest struct {
Type string `json:"type"`
}
type VaultSummary struct {
VaultAddress string `json:"vaultAddress"`
Name string `json:"name"`
TVL string `json:"tvl"`
APY string `json:"apy"`
TotalDeposits string `json:"totalDeposits"`
TotalWithdrawals string `json:"totalWithdrawals"`
NetDeposits string `json:"netDeposits"`
SharePrice string `json:"sharePrice"`
TotalShares string `json:"totalShares"`
Inception string `json:"inception"`
PerformanceFee string `json:"performanceFee"`
ManagementFee string `json:"managementFee"`
MinDeposit string `json:"minDeposit"`
DepositLockup string `json:"depositLockup"`
}
func getVaultSummaries() ([]VaultSummary, error) {
reqBody, _ := json.Marshal(VaultSummariesRequest{
Type: "vaultSummaries",
})
req, _ := http.NewRequest("POST", Endpoint, bytes.NewBuffer(reqBody))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Api-Key", APIKey)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
var vaults []VaultSummary
if err := json.Unmarshal(body, &vaults); err != nil {
return nil, err
}
return vaults, nil
}
func main() {
vaults, err := getVaultSummaries()
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
fmt.Printf("Total vaults: %d\n\n", len(vaults))
// Calculate total TVL
var totalTVL float64
for _, vault := range vaults {
tvl, _ := strconv.ParseFloat(vault.TVL, 64)
totalTVL += tvl
}
fmt.Printf("Total TVL: $%.2f\n", totalTVL)
// Sort by TVL
sort.Slice(vaults, func(i, j int) bool {
tvlI, _ := strconv.ParseFloat(vaults[i].TVL, 64)
tvlJ, _ := strconv.ParseFloat(vaults[j].TVL, 64)
return tvlI > tvlJ
})
fmt.Println("\n=== Top 5 Vaults by TVL ===")
for i, vault := range vaults {
if i >= 5 {
break
}
fmt.Printf("%d. %s\n", i+1, vault.Name)
fmt.Printf(" TVL: $%s\n", vault.TVL)
fmt.Printf(" APY: %s%%\n", vault.APY)
}
}
Common Use Cases#
1. Find Vaults by Investment Criteria#
Filter vaults based on specific requirements:
async function findVaultsByCriteria(criteria) {
const vaults = await getVaultSummaries();
return vaults.filter(v => {
const tvl = parseFloat(v.tvl);
const apy = parseFloat(v.apy);
const minDeposit = parseFloat(v.minDeposit);
const lockup = parseInt(v.depositLockup);
const perfFee = parseFloat(v.performanceFee);
// Check all criteria
if (criteria.minTVL && tvl < criteria.minTVL) return false;
if (criteria.minAPY && apy < criteria.minAPY) return false;
if (criteria.maxMinDeposit && minDeposit > criteria.maxMinDeposit) return false;
if (criteria.maxLockup && lockup > criteria.maxLockup) return false;
if (criteria.maxPerformanceFee && perfFee > criteria.maxPerformanceFee) return false;
return true;
});
}
// Usage
const suitableVaults = await findVaultsByCriteria({
minTVL: 1000000, // At least $1M TVL
minAPY: 25, // At least 25% APY
maxMinDeposit: 5000, // Max $5k minimum deposit
maxLockup: 7, // Max 7 days lockup
maxPerformanceFee: 20 // Max 20% performance fee
});
console.log(`Found ${suitableVaults.length} vaults matching criteria`);
suitableVaults.forEach(v => {
console.log(`${v.name}: ${v.apy}% APY, $${v.tvl} TVL`);
});
2. Analyze Vault Growth Metrics#
Track vault growth and capital flows:
async function analyzeVaultGrowth() {
const vaults = await getVaultSummaries();
const analysis = vaults.map(v => {
const tvl = parseFloat(v.tvl);
const netDeposits = parseFloat(v.netDeposits);
const sharePrice = parseFloat(v.sharePrice);
// Calculate returns from share price
const returns = ((sharePrice - 1) / 1) * 100;
// Calculate growth from trading vs deposits
const tradingGains = tvl - netDeposits;
const growthFromTrading = (tradingGains / netDeposits) * 100;
return {
name: v.name,
tvl: tvl,
netDeposits: netDeposits,
tradingGains: tradingGains,
returns: returns.toFixed(2),
growthFromTrading: growthFromTrading.toFixed(2),
depositorCount: Math.round(netDeposits / parseFloat(v.minDeposit))
};
});
return analysis.sort((a, b) => b.growthFromTrading - a.growthFromTrading);
}
// Usage
const growth = await analyzeVaultGrowth();
console.log('\n=== Vaults with Highest Trading Gains ===');
growth.slice(0, 5).forEach((v, i) => {
console.log(`\n${i + 1}. ${v.name}`);
console.log(` Trading Gains: $${v.tradingGains.toLocaleString()}`);
console.log(` Growth from Trading: ${v.growthFromTrading}%`);
console.log(` Total Returns: ${v.returns}%`);
});
3. Compare Fee Structures#
Analyze and compare vault fee models:
async function analyzeFeeStructures() {
const vaults = await getVaultSummaries();
const feeAnalysis = vaults.map(v => {
const apy = parseFloat(v.apy);
const perfFee = parseFloat(v.performanceFee);
const mgmtFee = parseFloat(v.managementFee);
const tvl = parseFloat(v.tvl);
// Estimate annual fees
const annualMgmtFee = tvl * (mgmtFee / 100);
const estimatedPerfFee = tvl * (apy / 100) * (perfFee / 100);
const totalAnnualFees = annualMgmtFee + estimatedPerfFee;
// Net APY after fees
const grossReturns = tvl * (apy / 100);
const netReturns = grossReturns - totalAnnualFees;
const netAPY = (netReturns / tvl) * 100;
return {
name: v.name,
grossAPY: apy,
netAPY: netAPY.toFixed(2),
perfFee: perfFee,
mgmtFee: mgmtFee,
totalFeesUSD: totalAnnualFees.toFixed(2),
feeImpact: ((apy - netAPY) / apy * 100).toFixed(2)
};
});
// Sort by net APY
return feeAnalysis.sort((a, b) => parseFloat(b.netAPY) - parseFloat(a.netAPY));
}
// Usage
const feeAnalysis = await analyzeFeeStructures();
console.log('\n=== Best Net Returns After Fees ===');
feeAnalysis.slice(0, 5).forEach((v, i) => {
console.log(`\n${i + 1}. ${v.name}`);
console.log(` Gross APY: ${v.grossAPY}%`);
console.log(` Net APY: ${v.netAPY}%`);
console.log(` Fee Impact: ${v.feeImpact}%`);
});
4. Track Market Concentration#
Analyze TVL distribution across vaults:
async function analyzeMarketConcentration() {
const vaults = await getVaultSummaries();
// Sort by TVL
const sortedVaults = [...vaults].sort((a, b) =>
parseFloat(b.tvl) - parseFloat(a.tvl)
);
const totalTVL = vaults.reduce((sum, v) => sum + parseFloat(v.tvl), 0);
// Calculate concentration metrics
const top5TVL = sortedVaults.slice(0, 5).reduce((sum, v) =>
sum + parseFloat(v.tvl), 0
);
const top10TVL = sortedVaults.slice(0, 10).reduce((sum, v) =>
sum + parseFloat(v.tvl), 0
);
const concentration = {
totalVaults: vaults.length,
totalTVL: totalTVL,
top5Share: ((top5TVL / totalTVL) * 100).toFixed(2),
top10Share: ((top10TVL / totalTVL) * 100).toFixed(2),
avgTVL: (totalTVL / vaults.length).toFixed(2),
medianTVL: parseFloat(sortedVaults[Math.floor(vaults.length / 2)].tvl)
};
return {
...concentration,
topVaults: sortedVaults.slice(0, 5).map(v => ({
name: v.name,
tvl: parseFloat(v.tvl),
marketShare: ((parseFloat(v.tvl) / totalTVL) * 100).toFixed(2)
}))
};
}
// Usage
const concentration = await analyzeMarketConcentration();
console.log('\n=== Market Concentration ===');
console.log(`Total TVL: $${concentration.totalTVL.toLocaleString()}`);
console.log(`Top 5 control: ${concentration.top5Share}%`);
console.log(`Top 10 control: ${concentration.top10Share}%`);
console.log('\n=== Top 5 Vaults ===');
concentration.topVaults.forEach((v, i) => {
console.log(`${i + 1}. ${v.name}: ${v.marketShare}% market share`);
});
5. Build Vault Comparison Tool#
Create a comprehensive vault comparison:
async function compareVaults(vaultAddresses) {
const allVaults = await getVaultSummaries();
const selectedVaults = allVaults.filter(v =>
vaultAddresses.includes(v.vaultAddress)
);
const comparison = selectedVaults.map(v => {
const tvl = parseFloat(v.tvl);
const apy = parseFloat(v.apy);
const sharePrice = parseFloat(v.sharePrice);
const perfFee = parseFloat(v.performanceFee);
const mgmtFee = parseFloat(v.managementFee);
// Calculate net APY after fees
const grossReturns = tvl * (apy / 100);
const annualFees = tvl * (mgmtFee / 100) + grossReturns * (perfFee / 100);
const netAPY = ((grossReturns - annualFees) / tvl) * 100;
return {
name: v.name,
address: v.vaultAddress,
tvl: tvl,
apy: apy,
netAPY: netAPY.toFixed(2),
sharePrice: sharePrice,
returns: ((sharePrice - 1) * 100).toFixed(2),
minDeposit: parseFloat(v.minDeposit),
lockup: parseInt(v.depositLockup),
fees: `${perfFee}% perf / ${mgmtFee}% mgmt`,
inception: v.inception
};
});
return comparison;
}
// Usage
const vaultsToCompare = [
'0x1234567890abcdef1234567890abcdef12345678',
'0xabcdef1234567890abcdef1234567890abcdef12'
];
const comparison = await compareVaults(vaultsToCompare);
console.log('\n=== Vault Comparison ===');
comparison.forEach(v => {
console.log(`\n${v.name}`);
console.log(`TVL: $${v.tvl.toLocaleString()}`);
console.log(`Gross APY: ${v.apy}% | Net APY: ${v.netAPY}%`);
console.log(`Returns: ${v.returns}%`);
console.log(`Min Deposit: $${v.minDeposit} | Lockup: ${v.lockup} days`);
console.log(`Fees: ${v.fees}`);
});
Error Handling#
Common Errors#
| Error | Cause | Solution |
|---|---|---|
401 Unauthorized | Invalid API key | Verify your API key is correct |
429 Too Many Requests | Rate limit exceeded | Implement request throttling |
500 Internal Server Error | Server issue | Retry with exponential backoff |
Error Response Example#
{
"error": "Rate limit exceeded",
"code": "RATE_LIMIT_EXCEEDED"
}
Robust Error Handling#
async function safeGetVaultSummaries(maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await getVaultSummaries();
} catch (error) {
if (error.response?.status === 429) {
const delay = Math.pow(2, i) * 1000;
await new Promise(r => setTimeout(r, delay));
} else if (i === maxRetries - 1) {
throw error;
}
}
}
}
Best Practices#
- Cache appropriately — Vault summaries can be cached for 5-15 minutes
- Consider fees — Always calculate net returns after fees
- Check liquidity — Verify TVL is sufficient for your deposit size
- Review lockups — Ensure lockup periods match your investment timeline
- Monitor growth — Track both deposit growth and trading performance
Related Endpoints#
- leadingVaults — Get top-performing vaults
- userVaultEquities — Get user's vault positions
- clearinghouseState — Get user's perpetual account state
Access comprehensive Hyperliquid vault data with Dwellir's HyperCore Info Endpoint. Get your API key →