Get wallet set balance chart
This endpoint returns a portfolio balance chart for a wallet set. A wallet set is represented by an EVM address, a Solana address, or both. At least one address must be provided. This is over a specified time period, based on the provided start and end timestamps. Results can be filtered by blockchain and asset type, offering flexible and detailed visualizations of wallet set performance, similar to what you see in the Zerion interface.
Complex positions. By default the chart counts only simple positions: token and native-coin balances held directly in the wallet. Set filter[positions] to only_complex or no_filter to also include complex DeFi protocol positions. Uniswap V2, V3 and V4 liquidity positions and ERC-4626 vault positions (e.g. Morpho) are supported today, and support for more protocols is rolling out over time. Positions that aren’t yet supported are omitted from the chart, whether the whole protocol is unsupported or only that individual position.
Authorizations
Path Parameters
Chart period. Determines both the time window covered and the spacing
between chart points (points). Each period samples the window at a fixed
interval, so the number of points is roughly constant (~290–460) regardless
of period:
Point counts are approximate, and begin_at / end_at are aligned to the
interval. For max, the interval is derived from the amount of available
history (targeting ~400 points), so it varies; for wallet and wallet-set
charts the spacing is at least 1 day.
hour, day, week, month, 3months, 6months, year, 5years, max 3 - 7Query Parameters
A list of wallet addresses forming a wallet set. example: 0x42b9df65b219b3dd36ff330a4dd8f327a6ada990,8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K
The set must contain at least one address and may include at most one address per supported chain type (currently EVM and Solana). The order of addresses does not matter.
Returns 400 if an address in the set is not one Zerion tracks, such as a token contract, router or exchange hot wallet.
1 - 2 elementsDenominated currency value of returned prices
eth, btc, usd, eur, krw, rub, gbp, aud, cad, inr, jpy, nzd, try, zar, cny, chf Account only for balance on these chains (comma-separated list). Available chain ids can be found in chains endpoints.
25Account only for balance of given fungible assets (comma-separated list). Mutually exclusive with filter[exclude_fungible_ids] — combining both returns 400.
2544Exclude balance contributions from the given fungible assets (comma-separated list). Useful when the set you want to keep is large but the set you want to omit is small. Mutually exclusive with filter[fungible_ids] — combining both returns 400.
2544Restrict the balance chart to specific liquidity-pool / vault positions (comma-separated list). Only the matching protocol positions are charted; simple token and native-coin balances are excluded.
Each protocol is identified by a different value:
- Uniswap V2 — the LP-token contract address, e.g.
0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc. - Uniswap V3 — the pool contract address, e.g.
0x4e68ccd3e89f51c3074ca5072bbac773960dfa36. - Uniswap V4 — the LP NFT, written as
<position_manager_address>:<token_id>, e.g.0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e:229217.token_idmust be the canonical decimal representation of an unsigned 256-bit integer: one or more decimal digits, no leading zeros, and a value from0through2^256 - 1(115792089237316195423570985008687907853269984665640564039457584007913129639935), inclusive. Invalid or out-of-range values return400. Raw V4 pool IDs are 32-byte hashes, not contract addresses, and return400. Uniswap V3 also accepts the LP NFT form; it selects the same position as the pool contract address. - ERC-4626 vaults, e.g. Morpho — the vault contract address.
Every one of these values is available from the positions endpoint, with filter[positions]=no_filter: attributes.pool_address carries the pool contract address, attributes.receipt.fungible_info.implementations[].address the LP token or vault share address, and attributes.receipt.nft_info the LP NFT's contract_address and token_id — join those two with a colon.
Addresses are case-insensitive. A syntactically valid address that matches none of the wallet's positions is not an error: the response is 200 with an all-zero series.
These are complex (protocol) positions, so passing filter[positions]=only_simple alongside this filter returns 400. Omitting filter[positions] applies no_filter rather than its usual only_simple default, so the selected positions are actually charted. Mutually exclusive with filter[exclude_pool_addresses] — combining both returns 400.
25121Exclude specific liquidity-pool / vault positions from the balance chart (comma-separated list). The matching positions are removed; the rest of the portfolio, simple balances included, is kept.
Values take the same form as in filter[pool_addresses]: the Uniswap V2 LP-token address, the Uniswap V3 pool contract address, the Uniswap V4 LP NFT as <position_manager_address>:<token_id>, or the ERC-4626 vault address — all obtainable from the positions endpoint, and all case-insensitive. A syntactically valid address matching none of the wallet's positions excludes nothing and returns 200; a raw V4 pool id is rejected with 400. token_id must be the canonical decimal representation of an unsigned 256-bit integer: one or more decimal digits, no leading zeros, and a value from 0 through 2^256 - 1 (115792089237316195423570985008687907853269984665640564039457584007913129639935), inclusive. Invalid or out-of-range values return 400.
These are complex (protocol) positions, so passing filter[positions]=only_simple alongside this filter — which would already drop every protocol position, making the exclusion a no-op — returns 400. Omitting filter[positions] applies no_filter rather than its usual only_simple default. Mutually exclusive with filter[pool_addresses] — combining both returns 400.
25121Which positions to include in the balance chart.
only_simple(default) — simple positions only: wallet token and native-coin balances.only_complex— complex DeFi protocol positions only (e.g. liquidity-pool and vault positions).no_filter— include both simple and complex positions.
Uniswap V2, V3 and V4 liquidity positions and ERC-4626 vault positions (e.g. Morpho) are supported today, and support for more protocols is rolling out over time.
Passing filter[pool_addresses] or filter[exclude_pool_addresses] without filter[positions] applies no_filter instead of the only_simple default — a pool filter selects complex positions, so the default would make it a no-op.
only_simple, only_complex, no_filter