GET /v1/portfolio call that returns wallet tokens, decoded DeFi positions, net worth, and P&L across EVM and Solana.
Get your API key at data.octav.fi, then follow the guide for your current provider below.
Why teams switch to Octav
One call, everything
Wallet tokens and decoded DeFi positions and net worth in a single request. No merging three endpoints, no deduping receipt tokens.
EVM + Solana, same shape
The same endpoint and response shape work for
0x… and base58 addresses across 90+ chains. No separate Solana integration.Deepest DeFi decoding
Lending, LP, staking, perps, options, vesting and prediction markets are turned into real positions with underlying assets, health rates, and a per-asset price source.
Precomputed USD + P&L
Every asset ships with
price, value, cost basis and open/closed P&L. No client-side pricing, no separate price feed.Pick your provider
From DeBank
Collapse
all_token_list + all_complex_protocol_list + total_balance into one call, and add Solana.From Zerion
Swap JSON:API positions for a flat, USD-priced portfolio, with receipt tokens decoded once (no double-count).
From Zapper
Replace the
portfolioV2 GraphQL query with a single REST call.From Mobula
Merge
wallet/portfolio + wallet/defi-positions into one response, with sanity-checked pricing.From Nansen
Replace the two profiler/portfolio POST endpoints with one call, no receipt-token double-count.
From Sim (Dune)
Keep token balances, add the decoded DeFi positions Sim sunset, plus Solana.
From GoldRush (Covalent)
Replace
balances_v2 and add the DeFi decoding GoldRush deprecated.From TopLedger
Keep Solana DeFi decoding, add loose token holdings, EVM, and mark-to-market perps.
Authentication mapping
Whatever header your current provider uses, Octav uses a standard Bearer token.cURL
The core idea: one endpoint
Most providers split a portfolio across several calls (tokens, DeFi, net worth) and sometimes several products (EVM vs Solana). Octav returns all of it from one endpoint:GET /v1/portfolio returns an array with one entry per address, so unwrap the first element for a single address (const [portfolio] = await res.json() / res.json()[0]). Each portfolio groups assets by protocol, then chain, then position:
<POSITION> keys include WALLET, LENDING, LIQUIDITYPOOL, STAKED, FARMING, MARGIN, DEPOSIT, REWARDS, YIELD, VAULT, and LOCKED.
Each asset carries symbol, name, balance, price, value, decimal, contract, and chainContract — already priced, so you never compute USD values yourself.
Need a hand?
Migrating a live integration? We are happy to map your exact response shape or unblock an edge case.Join our Discord
Ask the team directly and get migration help.
Developer Portal
Create your API key and manage credits.