Interactive Playground: Test this endpoint in the API Playground. Get your API key at data.octav.fi
Cost: 1 credit per call
Endpoint
Parameters
Comma-separated list of EVM or SOL wallet addresses to retrieve portfolio data forMultiple addresses:
Include NFT holdings in the portfolio responseWhen
true, response includes nftsChains and nftsByCollection fieldsInclude image URLs for chains, assets, and protocolsUseful for displaying logos in your application UI
Include blockchain explorer URLs for assets and transactionsLinks to Etherscan, Arbiscan, etc. for easy navigation
Wait for fresh data if cache is stale
false: Return cached data immediately (recommended)true: Wait for sync if data is older than 1 minute
Response
Portfolio Object
The wallet address
Total portfolio net worth in USD
Available cash balance
Income generated today
Expenses incurred today
Total fees in native asset
Total fees in USD
Last sync timestamp (milliseconds since epoch)
Unrealized profit/loss (if available, otherwise “N/A”)
Realized profit/loss (if available, otherwise “N/A”)
Total cost basis of holdings (if available, otherwise “N/A”)
Assets organized by protocol (wallet, lending, staking, etc.)Each protocol contains:
key: Protocol identifiername: Protocol display namevalue: Total value in USDassets[]: Array of asset holdings
Assets organized by blockchainEach chain contains:
key: Chain identifier (e.g., “ethereum”, “arbitrum”)name: Chain display namevalue: Total value on this chainprotocols[]: Protocols with positions on this chain
Example Request
Example Response
View Full Response
View Full Response
Data Freshness
The Portfolio endpoint uses intelligent caching to balance data freshness with performance:How Caching Works
How Caching Works
Cache Duration: 1 minuteWhen data is less than 1 minute old:
- Cached data returned immediately
- Response time: under 100ms
- Cached data returned immediately
- Background sync initiated for next request
- Next request gets fresh data
- Waits for sync if data is stale
- Returns data less than 1 minute old
- Response time: Variable (1-10 seconds)
Best Practices
Best Practices
For most use cases:
- Use default
waitForSync=false - Data fresher than 1 minute is sufficient
- Fast response times
- Set
waitForSync=truewhen you need the absolute latest data - Accept longer response times
- Consider rate limits
- Call endpoint periodically to keep cache warm
- Background sync ensures next request is fresh
Use Cases
- Portfolio Dashboard
- Asset Tracking
- Protocol Analysis
- Multi-Wallet Bundle
Display portfolio overview with net worth and asset breakdown:
Error Responses
400 Bad Request
400 Bad Request
Invalid parameters provided.Common causes:
- Missing
addressesparameter - Invalid address format
- Too many addresses in single request
401 Unauthorized
401 Unauthorized
429 Too Many Requests
429 Too Many Requests
Rate limit exceeded.Solution: Wait for the specified time or implement retry logic
402 Payment Required
402 Payment Required