Skip to main content
Send your API key via the X-API-Key header. See Authentication.

Overview

GET /v2/wallet/{address}/portfolio Return a wallet’s current holdings: idle ERC-20 and native balances, plus structured DeFi positions across every supported protocol (Uniswap, Aave, Euler, Morpho, Curvance, Pendle, Spark, and others). The payload matches the main Turtle API GET /wallet/{address}/balance — the same shape the app uses.
This is a breaking change from the previous DeFi-only { total_stats, protocols } response. Protocol positions now live at portfolio.holdings.wallets[].protocols.
This is a point-in-time snapshot. For transaction history (deposits and withdrawals over time) use Wallet Activity.

Endpoint

Path Parameters
string
required
EVM wallet address.
Query Parameters
boolean
default:"false"
When false, receipt tokens for protocols that already appear as structured DeFi positions (Aave aTokens, Morpho vault shares, and similar) are hidden from wallets[].tokens so they are not double-counted. Set true to keep them in the token list.
Response

Response Fields

array
Product earnings for an authenticated Turtle user. Always [] on this address-scoped Earn route.
string
Net USD across token balances and DeFi positions, 2 decimal places.
array
Per-chain USD rollup derived from tokens and protocol positions. Each entry has name, slug, chainId, logoUrl, ecosystem, status, explorerUrl.
array
One entry per address. This route always returns a single wallet.
array
Idle ERC-20 and native gas-token balances. Receipt tokens for covered DeFi protocols are omitted unless includeProtocolTokens=true.
string
Human-readable balance (already divided by 10^decimals).
string
Integer on-chain balance.
boolean
true for the chain’s gas token.
string
Linked Turtle opportunity UUID when enrichment succeeds. Omitted otherwise.
array
Structured DeFi positions, one entry per protocol the wallet holds. Protocol groups with a negative net USD are omitted.
string
Protocol slug (e.g. morpho, aave3, euler).
object
Protocol-level USD totals: asset_usd_value, debt_usd_value, net_usd_value.
array
Individual positions within the protocol.
string
Position type: yield, lending, collateral, or liquidity. Use this to pick a layout — no protocol-specific rendering is needed.
object
Token lists for the position: supply_token_list, and where relevant borrow_token_list / reward_token_list. Each token carries address, chain, symbol, name, decimals, amount, price, logo_url. Borrow rows may include a signed apy (negative for variable borrow).
object
Pool / vault identifier for the position: id (contract address) and chain. Omitted when there is no specific pool (e.g. aggregated Morpho Blue lending).
object
On-chain risk snapshot for isolated lending markets (Aave V3, Spark): health_factor, ltv, liquidation_threshold, total_collateral_base, total_debt_base, available_borrows_base. Omitted when unavailable or when the account has no debt.

Position types