virtual:<id> addresses.
Interactive Playground: Test these endpoints in the API Playground. Get your API key at data.octav.fi
Cost: 1 credit per call (list) · 1 credit per virtual user address (portfolio)
List Virtual Users
Returns all virtual users belonging to the authenticated API user.Endpoint
Parameters
No query parameters required — returns all virtual users for the authenticated user.Response
Returns an array of virtual user objects.Virtual user identifier in
virtual:<id> format. Use this value in the portfolio endpoint’s addresses parameter.The virtual user type (e.g.
BALANCE, CEX)User-defined label for the virtual user
Example Request
Example Response
View Full Response
View Full Response
Virtual Users Portfolio
Fetch portfolios for one or more virtual users. Works identically to GET /v1/portfolio but uses virtual user addresses instead of wallet addresses.Endpoint
Parameters
Comma-separated virtual user addresses (from the list endpoint). Format:
virtual:<id>. Max 10.Return a single reduced portfolio across all virtual usersWhen
true, returns a single-element array with merged holdings from all specified virtual usersWait for fresh data if cache is stale
false: Return cached data immediately (recommended)true: Wait for sync if data is older than 1 minute
Include 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
Response
Same portfolio schema as GET /v1/portfolio. Returns an array of portfolio objects (one per virtual user), or a single-element array ifaggregated=true.
Portfolio Object
The virtual user address (
virtual:<id>)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 Virtual Users Portfolio endpoint uses the same caching strategy as Portfolio: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
Use Cases
- List & Query
- Per-User Breakdown
- Combined View
Discover virtual users and fetch their portfolios in a single flow:
Error Responses
400 Bad Request
400 Bad Request
Invalid parameters provided.Common causes:
- Missing
addressesparameter (portfolio endpoint) - Invalid address format (must be
virtual:<id>) - More than 10 addresses in single request
401 Unauthorized
401 Unauthorized
403 Forbidden
403 Forbidden
Attempted to access virtual users that don’t belong to the authenticated API user.Solution: Only use virtual user addresses returned by
GET /v1/virtual-users for your API key429 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
Related Endpoints
Portfolio
Retrieve portfolio holdings for wallet addresses
Historical Portfolio
View portfolio value at specific dates
Status
Check when portfolio was last synced
Credits
Check your remaining API credits