Skip to main content
GET
Get wallet portfolio

Query details

  • Either wallet or wallets must be provided.
  • Boolean parameters are passed as strings ("true", "false").
Looking for PnL data? This endpoint returns current holdings and balances. For profit/loss (PnL) data including realized and unrealized gains, use the /wallet/positions or /wallet/position endpoints instead.

Premium Chains (Default)

By default, the API queries only chains with premium RPCs for optimal performance and reliability. These chains are:
  • ethereum (Ethereum Mainnet)
  • base (Base)
  • arbitrum (Arbitrum One)
  • polygon (Polygon PoS)
  • avalanche (Avalanche C-Chain)
  • bnb (BNB Smart Chain)
  • optimism (Optimism)
  • sonic (Sonic)
  • solana (Solana)
Performance Tip: For the fastest response times, explicitly specify only the blockchains you need using the blockchains parameter (e.g., blockchains=ethereum,base,solana). This reduces latency and improves query efficiency. To query all supported chains (including non-premium ones), use fetchAllChains=true.

Step-by-Step Tutorial and Video Walkthrough

  • Check out the guide: Here

Usage Examples

  • Query multiple wallets with a chain filter
  • Query a portfolio using cached data with stale tolerance
  • Query Portfolio — All Chains, ≥ $10,000 Liquidity, Maximum Accuracy
  • Query portfolio with 24h price change data

Top-Level Response Fields

Asset Fields (per item in assets[])

Native vs. Wrapped Assets

  • 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee always indicates the native token of the chain referenced by chainId (e.g., evm:42161 = ETH on Arbitrum, evm:8453 = ETH on Base). Mobula normalizes native balances under this canonical placeholder so that the asset is easily identifiable across chains.
  • Wrapped versions of native tokens are returned as their real ERC-20 contract addresses. For example, Arbitrum WETH is 0x82af49447d8a07e3bd95bd0d56f35241523fbab1, while the canonical WETH contract on both Base and Optimism is 0x4200000000000000000000000000000000000006.
  • In the response, you may therefore see two separate entries for the same wallet: one for the native gas token (via 0xeeee...) and another for any wrapped balance. This lets you distinguish spendable gas from ERC-20-wrapped liquidity.
Example excerpt for the wallet 0x57d7b62c7b877f315b2d0cac98c4775f5bd3cd0b on Arbitrum:
Use the address field to decide whether a position is the native token placeholder or a wrapped contract so you can interpret balances correctly in your integration.

Query Parameters

wallet
string

Wallet address

wallets
string

Comma-separated wallet addresses

portfolio
string

Portfolio ID

blockchains
string

Comma-separated blockchain IDs

asset
string

Filter by specific asset

from
string

Start date

to
string

End date

portfolio_settings
string

Portfolio display settings

unlistedAssets
string

Include unlisted assets

period
string

Time period

accuracy
string

Data accuracy level

testnet
string

Include testnet data

minliq
string

Minimum liquidity threshold

filterSpam
string

Filter spam tokens

pnl
string

Include PnL data

rpc
string

Response

200 - application/json

Wallet portfolio response

data
object
required
backfill_status
enum<string>
Available options:
processed,
processing,
pending