Hyperfolio API
Hyperfolio API is an onchain HyperEVM portfolio tracking API designed to support builder use cases.
Hyperfolio API
Base URL: https://api.hyperfolio.xyz
You can find the full Swagger here:https://api.hyperfolio.xyz/docs
Get your protocol integrated by filling in this form
🔑 Authentication
All endpoints require an API key via the x-api-key
header.
How to get an API key? Contact: [email protected]
Rate limits: We provide different plans (beta, standard, pro, admin). Contact us for details.
Wallet address or HL domain
0x32309802C8feb2306240893BD79A2E4ba5314e55
Whether to use cache (default: true)
Wallet composition with cache metadata
Missing address parameter or invalid domain
Rate limit exceeded
GET /wallet/composition?address=0x32309802C8feb2306240893BD79A2E4ba5314e55 HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
{
"data": {
"tokens": [
{
"address": "text",
"balance": "text",
"symbol": "text",
"name": "text",
"decimals": "text",
"usdPrice": "text",
"usdValue": "text",
"image_url": "text",
"type": "text"
}
],
"totalWalletValue": "text",
"hypePrice": "text"
},
"cache": {
"lastUpdate": "2024-01-15T10:30:00Z",
"cacheAge": "5 minutes ago",
"cacheAgeSeconds": 300,
"source": "cache",
"isStale": false
}
}
The wallet address or HL domain to analyze
Set to true to stream results as they become available
Whether to use cache (default: true)
All DeFi positions by protocol
{"protocols":[{"id":"hyperlend","name":"Hyperlend","logo":"/logos/hyperlend.png","url":"https://app.hyperlend.org","totalValueUSD":"1234.56","positions":[{"id":"hl-1","protocolId":"hyperlend","protocolName":"Hyperlend","type":"lending","positionType":"supplied","totalValueUSD":"123.45","healthRatio":1.23,"version":"v1","isIsolated":false,"details":{"token":{"address":"0x...","symbol":"HYPE","name":"HyperEVM","image_url":"/hype.png","decimals":18,"balance":"1000000000000000000","formattedBalance":"1.00","usdValue":"123.45"}}}]}]}
Missing address parameter or invalid domain
Rate limit exceeded
GET /positions?address=text HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
{
"protocols": [
{
"id": "hyperlend",
"name": "Hyperlend",
"logo": "/logos/hyperlend.png",
"url": "https://app.hyperlend.org",
"totalValueUSD": "1234.56",
"positions": [
{
"id": "hl-1",
"protocolId": "hyperlend",
"protocolName": "Hyperlend",
"type": "lending",
"positionType": "supplied",
"totalValueUSD": "123.45",
"healthRatio": 1.23,
"version": "v1",
"isIsolated": false,
"details": {
"token": {
"address": "0x...",
"symbol": "HYPE",
"name": "HyperEVM",
"image_url": "/hype.png",
"decimals": 18,
"balance": "1000000000000000000",
"formattedBalance": "1.00",
"usdValue": "123.45"
}
}
}
]
}
]
}
The wallet address or HL domain to analyze
The protocol to query.
Whether to use cache (default: true)
Get positions for a specific protocol
{"id":"hyperlend","name":"Hyperlend","logo":"/logos/hyperlend.png","url":"https://app.hyperlend.org","totalValueUSD":"1234.56","positions":[{"id":"hl-1","protocolId":"hyperlend","protocolName":"Hyperlend","type":"lending","positionType":"supplied","totalValueUSD":"123.45","healthRatio":1.23,"version":"v1","isIsolated":false,"details":{"token":{"address":"0x...","symbol":"HYPE","name":"HyperEVM","image_url":"/hype.png","decimals":18,"balance":"1000000000000000000","formattedBalance":"1.00","usdValue":"123.45"}}}]}
{"id":"hyperswap_v3","name":"Hyperswap V3","logo":"/hyperswap.jpg","url":"https://app.hyperswap.exchange/#/swap?referral=HyperFolio","totalValueUSD":"456.78","positions":[{"id":"hyperswap_v3-1","protocolId":"hyperswap_v3","protocolName":"Hyperswap V3","type":"liquidity","positionType":"supplied","totalValueUSD":"456.78","version":"v3","details":{"pair":"HYPE/USDC","token0":{"address":"0x...","symbol":"HYPE","name":"HyperEVM","image_url":"/hype.png","decimals":18,"balance":"500000000000000000","formattedBalance":"0.5","usdValue":"61.72"},"token1":{"address":"0x...","symbol":"USDC","name":"USD Coin","image_url":"/usdc.png","decimals":6,"balance":"500000","formattedBalance":"0.5","usdValue":"61.73"},"feeTier":0.05,"uncollectedFees":{"token0":"0.01","token1":"0.02","usdValue":"0.03"}}}]}
{"id":"hyperbeat","name":"Hyperbeat","logo":"/hyperbeat.png","url":"https://app.hyperbeat.org/","totalValueUSD":"789.01","positions":[{"id":"hyperbeat-hbhype","protocolId":"hyperbeat","protocolName":"Hyperbeat","type":"lending","positionType":"vault","totalValueUSD":"789.01","details":{"token":{"address":"0x...","symbol":"HBHYPE","name":"Hyperbeat HYPE","decimals":18,"balance":"1000000000000000000","formattedBalance":"1.00","usdValue":"789.01","image_url":"/hbhype.png"}}}]}
Missing walletAddress or protocol parameter, or invalid domain
Rate limit exceeded
GET /positions/protocol?walletAddress=text&protocol=hyperlend HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
{
"id": "hyperlend",
"name": "Hyperlend",
"logo": "/logos/hyperlend.png",
"url": "https://app.hyperlend.org",
"totalValueUSD": "1234.56",
"positions": [
{
"id": "hl-1",
"protocolId": "hyperlend",
"protocolName": "Hyperlend",
"type": "lending",
"positionType": "supplied",
"totalValueUSD": "123.45",
"healthRatio": 1.23,
"version": "v1",
"isIsolated": false,
"details": {
"token": {
"address": "0x...",
"symbol": "HYPE",
"name": "HyperEVM",
"image_url": "/hype.png",
"decimals": 18,
"balance": "1000000000000000000",
"formattedBalance": "1.00",
"usdValue": "123.45"
}
}
}
]
}
This endpoint uses Server-Sent Events (SSE) to stream position data in real-time. Instead of waiting for all protocols to complete, results are sent as soon as each protocol finishes processing.
**How it works:**
- Establishes a persistent SSE connection
- Sends protocol results immediately when available
- Provides progress updates throughout the process
- Handles errors gracefully without stopping the stream
**Response Format:**
Each SSE message contains a JSON object with the following structure:
- `type`: 'protocol' | 'error' | 'complete'
- `data`: Protocol position data (for 'protocol' type)
- `error`: Error message (for 'error' type)
- `progress`: { completed: number, total: number }
**Client Usage:**
```javascript
const eventSource = new EventSource('/positions/stream?address=0x...');
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
// Handle different message types
};
```
The wallet address or HL domain to analyze
0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6
Whether to use cache (default: true)
Server-Sent Events stream of protocol positions
data: {"type":"protocol","data":{"id":"hyperlend","name":"Hyperlend","totalValueUSD":"1234.56","positions":[...]},"progress":{"completed":1,"total":14}} data: {"type":"error","error":"Error fetching HyperswapV3: Network timeout","progress":{"completed":2,"total":14}} data: {"type":"complete","progress":{"completed":14,"total":14}}
Missing address parameter or invalid domain
Rate limit exceeded
GET /positions/stream?address=0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6 HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
data: {"type":"protocol","data":{"id":"hyperlend","name":"Hyperlend","totalValueUSD":"1234.56","positions":[...]},"progress":{"completed":1,"total":14}}
data: {"type":"error","error":"Error fetching HyperswapV3: Network timeout","progress":{"completed":2,"total":14}}
data: {"type":"complete","progress":{"completed":14,"total":14}}
User wallet address or HL domain
Whether to use cache (default: true)
All user data with cache metadata
Invalid address format or domain resolution failed
Too many requests
GET /hypercore/user/{address} HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
{
"data": {
"spotBalances": [
{
"coin": "text",
"total": "text",
"usdPrice": "text",
"usdValue": "text",
"image_url": "text",
"symbol": "text",
"name": "text",
"decimals": "text"
}
],
"perpPositions": {
"positions": [
{
"type": "text",
"position": {
"coin": "text",
"szi": "text",
"leverage": {},
"entryPx": "text",
"positionValue": "text",
"unrealizedPnl": "text",
"returnOnEquity": "text",
"liquidationPx": "text",
"marginUsed": "text",
"maxLeverage": 1,
"cumFunding": {},
"image_url": "text",
"symbol": "text",
"name": "text",
"decimals": "text"
}
}
],
"margin": {
"usdcBalance": "text",
"lastUpdate": 1
}
},
"stakingInfo": {
"totalHype": "text",
"stakedHype": "text",
"availableHype": "text",
"delegations": [
{
"amount": "text",
"usdValue": "text",
"usdPrice": "text",
"image_url": "text"
}
],
"delegatorSummary": {
"totalStakedUsd": "text"
},
"usdPrice": "text",
"image_url": "text",
"lastUpdate": 1
},
"vaultInfo": {
"vaults": [
{
"vaultAddress": "text",
"equity": "text",
"name": "text",
"description": "text",
"leader": "text",
"apr": 1,
"maxDistributable": "text",
"maxWithdrawable": "text",
"isClosed": true,
"allowDeposits": true,
"allTimePnl": "text",
"pnl": "text",
"lastUpdate": 1
}
],
"totalVaultValue": "text"
},
"portfolioSummary": {
"totalValue": "text",
"spotValue": "text",
"perpValue": "text",
"stakedValue": "text",
"vaultValue": "text",
"lastUpdate": 1
}
},
"cache": {
"lastUpdate": "2024-01-15T10:30:00Z",
"cacheAge": "3 minutes ago",
"cacheAgeSeconds": 180,
"source": "cache",
"isStale": false
}
}
User wallet address or HL domain
Whether to use cache (default: true)
Returns user spot balances
[{"coin":"HYPE","token":1,"hold":"0.0","total":"1000.0","entryNtl":"0.0","usdPrice":"1.5","usdValue":"1500.0","image_url":"https://assets.coingecko.com/coins/images/1/large/bitcoin.png","symbol":"HYPE","name":"Hyperliquid","decimals":"18"},{"coin":"USDC","token":0,"hold":"0.0","total":"14.625485","entryNtl":"0.0","usdPrice":"1.0","usdValue":"14.625485","image_url":null,"symbol":"USDC","name":"USDC","decimals":"18"}]
Invalid address format or domain resolution failed
Rate limit exceeded
GET /hypercore/user/{address}/spot HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
[
{
"coin": "HYPE",
"token": 1,
"hold": "0.0",
"total": "1000.0",
"entryNtl": "0.0",
"usdPrice": "1.5",
"usdValue": "1500.0",
"image_url": "https://assets.coingecko.com/coins/images/1/large/bitcoin.png",
"symbol": "HYPE",
"name": "Hyperliquid",
"decimals": "18"
},
{
"coin": "USDC",
"token": 0,
"hold": "0.0",
"total": "14.625485",
"entryNtl": "0.0",
"usdPrice": "1.0",
"usdValue": "14.625485",
"image_url": null,
"symbol": "USDC",
"name": "USDC",
"decimals": "18"
}
]
User wallet address or HL domain
Whether to use cache (default: true)
Returns user perpetual positions
[{"position":{"coin":"ETH","cumFunding":{"allTime":"514.085417","sinceChange":"0.0","sinceOpen":"0.0"},"entryPx":"2986.3","leverage":{"rawUsd":"-95.059824","type":"isolated","value":20},"liquidationPx":"2866.26936529","marginUsed":"4.967826","maxLeverage":50,"positionValue":"100.02765","returnOnEquity":"-0.0026789","szi":"0.0335","unrealizedPnl":"-0.0134","usdPrice":"2986.3","usdValue":"298,680.89","image_url":null,"symbol":"ETH","name":"Ethereum","decimals":"18"},"type":"oneWay"}]
Invalid address format or domain resolution failed
Rate limit exceeded
GET /hypercore/user/{address}/perp HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
[
{
"position": {
"coin": "ETH",
"cumFunding": {
"allTime": "514.085417",
"sinceChange": "0.0",
"sinceOpen": "0.0"
},
"entryPx": "2986.3",
"leverage": {
"rawUsd": "-95.059824",
"type": "isolated",
"value": 20
},
"liquidationPx": "2866.26936529",
"marginUsed": "4.967826",
"maxLeverage": 50,
"positionValue": "100.02765",
"returnOnEquity": "-0.0026789",
"szi": "0.0335",
"unrealizedPnl": "-0.0134",
"usdPrice": "2986.3",
"usdValue": "298,680.89",
"image_url": null,
"symbol": "ETH",
"name": "Ethereum",
"decimals": "18"
},
"type": "oneWay"
}
]
User wallet address or HL domain
Whether to use cache (default: true)
Returns detailed staking information
{"totalHype":"1000.0","stakedHype":"500.0","availableHype":"500.0","delegations":[{"validator":"0x123...","amount":"300.0","rewards":"10.5","usdValue":"450.0","usdPrice":"1.5"},{"validator":"0x456...","amount":"200.0","rewards":"5.2","usdValue":"300.0","usdPrice":"1.5"}],"delegatorSummary":{"totalStaked":"500.0","totalStakedUsd":"750.0","totalRewardsUsd":"23.55","activeDelegations":2},"usdPrice":"1.5","lastUpdate":1749806600930}
Invalid address format or domain resolution failed
Rate limit exceeded
GET /hypercore/user/{address}/staking HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
{
"totalHype": "1000.0",
"stakedHype": "500.0",
"availableHype": "500.0",
"delegations": [
{
"validator": "0x123...",
"amount": "300.0",
"rewards": "10.5",
"usdValue": "450.0",
"usdPrice": "1.5"
},
{
"validator": "0x456...",
"amount": "200.0",
"rewards": "5.2",
"usdValue": "300.0",
"usdPrice": "1.5"
}
],
"delegatorSummary": {
"totalStaked": "500.0",
"totalStakedUsd": "750.0",
"totalRewardsUsd": "23.55",
"activeDelegations": 2
},
"usdPrice": "1.5",
"lastUpdate": 1749806600930
}
User wallet address or HL domain
Whether to use cache (default: true)
Returns user vaults information
Invalid address format or domain resolution failed
Too many requests
GET /hypercore/user/{address}/vaults HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
{
"vaults": [
{
"vaultAddress": "text",
"equity": "text",
"name": "text",
"description": "text",
"leader": "text",
"apr": 1,
"maxDistributable": "text",
"maxWithdrawable": "text",
"isClosed": true,
"allowDeposits": true,
"allTimePnl": "text",
"pnl": "text",
"lastUpdate": 1
}
],
"totalVaultValue": "text"
}
Wallet address or HL domain
Whether to use cache (default: true)
NFTs data with cache metadata
Missing address parameter or invalid domain
Rate limit exceeded
GET /nfts?address=text HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
{
"data": {
"nfts": [
{
"contract": "text",
"tokenId": "text",
"name": "text",
"image": "text",
"valueUSD": 1
}
],
"totalNftValue": 1
},
"cache": {
"lastUpdate": "2024-01-15T10:30:00Z",
"cacheAge": "30 minutes ago",
"cacheAgeSeconds": 1800,
"source": "cache",
"isStale": false
}
}
Wallet address or HL domain
Whether to use cache (default: true)
Supported protocols: hyperbeat, kittenswap, hyperswap, hyperlend
DeFi points by protocol with cache metadata
Missing address parameter or invalid domain
Rate limit exceeded
GET /points?address=text HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
{
"data": [
{
"protocolName": "text",
"points": 1
}
],
"cache": {
"lastUpdate": "2024-01-15T10:30:00Z",
"cacheAge": "30 minutes ago",
"cacheAgeSeconds": 1800,
"source": "cache",
"isStale": false
}
}
Calculate the total yield earned by a user in a specific vault.
Cache Control:
Use
cache=true
(default) for fast cached resultsUse
cache=false
to bypass cache and force fresh calculation (useful for debugging or real-time data)
Supported Vaults:
Midas Vaults: Oracle-based vaults (e.g., hbUSDT, hbXAUt, lstHYPE)
Upshift Vaults: ERC4626-based vaults with Supabase exchange rates
August Vaults: ERC4626-based vaults with Supabase exchange rates (e.g., hbHYPE)
Yield Calculation:
Midas: Uses oracle price feeds for historical share prices
Upshift/August: Uses Supabase exchange rates calculated from ERC4626 events
Both: Returns total yield, deposits, withdrawals, current position value, and period yields (7/30 days)
Method: FIFO (First In, First Out) with token price conversion
Vault contract address (e.g., 0x5e105266db42f78fa814322bce7f388b4c2e61eb)
0x5e105266db42f78fa814322bce7f388b4c2e61eb
User wallet address to calculate yield for
0x29De368D4656cb50C182c528E901A5454f0B03e1
Action to perform (currently only yield calculation is supported)
🚀 Cache Control: Use "false" to bypass cache and force fresh calculation. Use "clear" to clear cache first then recalculate. Use "true" (default) for faster cached results.
true
Possible values: Earned yield calculation for the vault position
Successful yield calculation
{"yield":{"totalYield":11.26,"totalAmountDeposited":738.45,"totalAmountWithdrawn":0,"currentPositionValue":752.46,"yield7Days":1.77,"yield30Days":8.67}}
User with no vault activity
{"yield":{"totalYield":0,"totalAmountDeposited":0,"totalAmountWithdrawn":0,"currentPositionValue":0,"yield7Days":0,"yield30Days":0}}
Invalid request parameters
Rate limit exceeded
GET /vaults?vaultAddress=0x5e105266db42f78fa814322bce7f388b4c2e61eb&user=0x29De368D4656cb50C182c528E901A5454f0B03e1&action=yield HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
{
"yield": {
"totalYield": 11.26,
"totalAmountDeposited": 738.45,
"totalAmountWithdrawn": 0,
"currentPositionValue": 752.46,
"yield7Days": 1.77,
"yield30Days": 8.67
}
}
Retrieves accumulated points for a user across different partner protocols including Hyperbeat, Hyperlend, Upshift, Hyperswap, and others
User wallet address (0x format)
0xd048870caa5a3037f507583b4762a7598251a2fc
Whether to use cache (default: true)
User points from partner protocols with cache metadata
Missing user parameter or invalid wallet address
Rate limit exceeded
GET /hyperbeat/points?user=0xd048870caa5a3037f507583b4762a7598251a2fc HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
{
"data": {
"user": "text",
"points": [
{
"address": "text",
"provider": "text",
"total_value": 1,
"updated_at": 1,
"vault_details": [
{
"vault_address": "text",
"total_points": 1,
"deposit_amount": 1,
"deposit_amount_native": 1,
"has_pending_rewards": true
}
]
}
],
"total_points": 1
},
"cache": {
"lastUpdate": "2024-01-15T10:30:00Z",
"cacheAge": "10 minutes ago",
"cacheAgeSeconds": 600,
"source": "cache",
"isStale": false
}
}
Retrieve complete vault analytics including multi-timeframe APYs, hourly TVL history, oracle data, performance metrics, real-time position breakdowns, and delta neutral volume data. Position data includes combined Hyperliquid basis trades (spot+perp), net DeFi positions (supply-borrow), and filtered liability positions. Volume metrics include 24h spot/perp trading volumes, position values, and leverage data for delta neutral strategies. Optimized for real-time monitoring and historical analysis.
Vault contract address
0x5e105266db42f78FA814322Bce7f388B4C2e61eb
Vault data retrieved successfully
Vault not found
GET /vault-infos/{address} HTTP/1.1
Host:
x-api-key: YOUR_API_KEY
Accept: */*
{
"vaultInfo": {
"address": "text",
"symbol": "text",
"name": "text",
"provider": "text",
"description": "text",
"chain": "text",
"chainId": 1,
"coingeckoId": "text",
"deployedBlock": 1,
"type": "text",
"oracle": "text",
"tokenPriceOracle": "text"
},
"currentAPY": {
"apy_1d": 12.8,
"apy_3d": 14.1,
"apy_7d": 15.42,
"apy_30d": 16.7,
"apy_since_launch": 18.3,
"timestamp": 1704725400000,
"lastUpdated": "2025-01-08T15:30:00.000Z"
},
"currentTVL": {
"totalValueLocked": 1250000.42,
"sharePrice": 1.0245,
"timestamp": 1704725400000,
"lastUpdated": "2025-01-08T15:30:00.000Z"
},
"currentVolume": {
"spotVolume24h": 479.25,
"perpVolume24h": 479.25,
"totalVolume24h": 958.5,
"perpValue": 25000,
"spotValue": 25000,
"idleValue": 5000,
"shortLeverage": 2.15,
"lastUpdated": "2025-01-08T15:30:00.000Z",
"timestamp": 1704725400000
},
"currentPositions": {
"summary": {
"totalValue": 96770000,
"count": 13,
"lastUpdated": "2025-08-03T14:59:13.278221+00:00"
},
"breakdown": [
{
"protocol": "Hyperliquid",
"position": "HYPE basis trade",
"allocation": 39.78,
"value": 39849326.11
}
]
},
"history": {
"fullAPYHistory": [
{
"date": "2025-01-08",
"apy": 15.42,
"apy_1d": 12.8,
"apy_3d": 14.1,
"apy_7d": 15.42,
"apy_30d": 16.7,
"apy_since_launch": 18.3,
"timestamp": 1704725400
}
],
"apy1dChart": [
{
"date": "2025-01-08",
"value": 12.8,
"timestamp": 1704725400
}
],
"apy7dChart": [
{
"date": "2025-01-08",
"value": 15.42,
"timestamp": 1704725400
}
],
"tvlHistory": [
{
"date": "2025-01-08",
"datetime": "2025-01-08T15:30:00.000Z",
"total_value_locked": 1250000.42,
"share_price": 1.0245,
"timestamp": 1704725400,
"created_at": "2025-01-08T15:30:15.000Z"
}
],
"exchangeRates": [
{
"data": 102450000,
"round_id": 123456,
"timestamp": 1704725400,
"created_at": "2025-01-08T15:30:00.000Z"
}
]
},
"configuration": {},
"metadata": {
"totalAPYRecords": 156,
"totalTVLRecords": 2847,
"totalExchangeRates": 35,
"totalPositions": 13,
"lastUpdated": "2025-01-08T15:30:00.000Z"
}
}
🛡️ Security
All endpoints require the
x-api-key
header.Keys are personal and rate-limited.
Never share your API key.
📖 Full API Reference
See the interactive documentation and all response examples at 👉 https://api.hyperfolio.xyz/docs
Contact: [email protected]
For more details on each endpoint, error codes, and advanced usage, refer to the Swagger UI.
Last updated