- Full wallet portfolio in one call: OneBalance’s
aggregated-balancerequires one request per asset (you specifyaggregatedAssetId=ob:usdcetc.). Zerion’s/positions/returns every token a wallet holds in a single call. - More chains, same shape: Zerion covers 60+ EVM chains plus Solana versus OneBalance’s 11. Solana addresses use the same
/wallets/{address}/...paths as EVM, with the same enriched response shape. - Enriched transaction history and DeFi positions: Zerion’s
/transactions/returns decodedoperation_type,transfers[], fees, and dApp metadata. DeFi positions (lending, staking, LPs) are exposed alongside wallet balances viafilter[positions]=only_complex.
Endpoint parity
| Use case | OneBalance | Zerion API |
|---|---|---|
| Wallet portfolio total | GET /api/v3/balances/aggregated-balance (one call per asset) | GET /v1/wallets/{address}/portfolio (one call, every asset) |
| Token balances | GET /api/v3/balances/aggregated-balance per aggregatedAssetId | GET /v1/wallets/{address}/positions/?filter[positions]=only_simple |
| DeFi positions | (not covered) | GET /v1/wallets/{address}/positions/?filter[positions]=only_complex |
| Wallet + DeFi (one call) | (not covered) | GET /v1/wallets/{address}/positions/?filter[positions]=no_filter |
| Transaction history | GET /api/v3/status/get-tx-history | GET /v1/wallets/{address}/transactions/ |
| Asset list | GET /api/assets/list | GET /v1/fungibles/ |
| Realtime updates | (polling quote/status) | Transaction webhooks |
Wallet portfolio
OneBalance returns the aggregated value of one asset across chains per request. To know a wallet’s total USD value, you callaggregated-balance for each asset and sum the fiatValue. Zerion’s /portfolio endpoint returns the total, 24h change, and breakdowns by chain and position type in one call.
Field mapping
OneBalance (aggregated-balance) | Zerion (/portfolio → data.attributes.…) |
|---|---|
totalBalance.fiatValue (per-asset, summed client-side) | total.positions (whole wallet, one number) |
balanceByAggregatedAsset[].fiatValue | Sum positions client-side from /positions/, or use total.positions for the wallet total |
balanceByAggregatedAsset[].individualAssetBalances[] (per-chain breakdown of one asset) | positions_distribution_by_chain (per-chain breakdown of the whole wallet) |
| (no equivalent) | changes.percent_1d, changes.absolute_1d (24h change) |
| (no equivalent) | positions_distribution_by_type (wallet vs deposited vs staked vs locked) |
Token balances
OneBalance returns balances grouped by aggregated asset (e.g., “USDC across all chains”). Zerion returns one entry per token per chain via/positions/, with relationships.chain.data.id on each entry. To replicate OneBalance’s per-asset aggregation, group Zerion positions client-side by fungible_info.id and sum value.
Field mapping
OneBalance (balanceByAggregatedAsset[].…) | Zerion (data[].attributes.…) |
|---|---|
aggregatedAssetId ("ob:usdc") | fungible_info.id (Zerion-specific fungible ID; one per token across chains) |
balance (raw, summed across chains) | Sum quantity.int across positions with the same fungible_info.id |
fiatValue (USD value, summed) | Sum value across positions with the same fungible_info.id |
individualAssetBalances[].assetType (CAIP, e.g. eip155:1/erc20:0xa0b8…) | relationships.chain.data.id + fungible_info.implementations[].address |
individualAssetBalances[].balance (per chain, raw) | quantity.int on the matching position |
individualAssetBalances[].fiatValue (per chain, USD) | value on the matching position |
accounts.evm / accounts.solana (CAIP account format) | Zerion takes plain addresses (0x… or base58 Solana) on the same /wallets/{address}/… path |
Transaction history
OneBalance’sget-tx-history returns transactions performed through the OneBalance system (smart-account operations). Zerion’s /transactions/ returns enriched, decoded wallet history with operation_type, transfers[], fees, and dApp metadata for any address, on every supported chain.
Field mapping
OneBalance’sget-tx-history is scoped to OneBalance-system operations and surfaces quote-level metadata. Zerion’s /transactions/ is a wallet-level, decoded activity feed. The shape differs more than for balances; map at the concept level.
| OneBalance concept | Zerion (data[].attributes.…) |
|---|---|
| Transaction id / hash | hash |
| Block timestamp | mined_at (ISO 8601) / mined_at_block |
| Originating chain | relationships.chain.data.id (string IDs, e.g. "ethereum") |
| Operation kind (transfer / swap / call) | operation_type (send, receive, trade, approve, deposit, withdraw, mint, burn, claim, execute, deploy) |
| Token movements (per-leg amount + USD) | transfers[] with direction, quantity.int, value, fungible_info, sender, recipient |
| Gas / fee paid | fee.value (USD), fee.fungible_info |
| (no OneBalance equivalent) | relationships.dapp.data.id (dApp slug when Zerion recognizes the protocol) |
Quote status (PENDING, CONFIRMED, …) | status (confirmed, pending, failed) |
Asset list
OneBalance’s/api/assets/list returns its catalog of aggregated assets (each ob:* ID groups one logical token across chains). Zerion’s /v1/fungibles/ is the equivalent token catalog, with each fungible exposing implementations[] per chain.
Field mapping
OneBalance (/api/assets/list items) | Zerion (/v1/fungibles/ → data[].attributes.…) |
|---|---|
aggregatedAssetId ("ob:usdc") | id on the response item; pass to filter[fungible_ids] on other endpoints |
symbol, name, decimals | symbol, name, implementations[].decimals |
aggregatedEntities[].assetType (CAIP, eip155:1/erc20:0x…) | implementations[].chain_id + implementations[].address |
aggregatedEntities[].decimals | implementations[].decimals |
Pagination
OneBalance’sget-tx-history accepts offset and limit. Zerion returns a fully-formed links.next URL on every paginated response. Fetch it as-is.
Differences from OneBalance
Most OneBalance data-layer use cases have a direct Zerion equivalent. A few aren’t covered yet, and others behave differently. Worth a scan before you cut over. Not supported today:- Multichain execution (swap, transfer, contract call): OneBalance’s
quote/prepare-call-quote/execute-quoteflow lets you spend an aggregated balance and bridge in one operation. Zerion is data-only. Pair Zerion with Relay for execution. - Smart account management:
predict-address, account deployment, and signing flows have no Zerion equivalent. Pair with Privy or Turnkey for embedded wallets and key management. - Resource locks / EIP-7702 helpers: OneBalance-specific primitives for spending aggregated balances. No Zerion equivalent; tied to OneBalance’s execution layer.
- Authentication: OneBalance uses an
x-api-keyheader. Zerion uses HTTP Basic Auth. Get a key at dashboard.zerion.io. - Chain coverage: OneBalance supports 11 chains. Zerion supports 60+ EVM chains and Solana, with NFTs on EVM. See the full list.
- Address format: OneBalance accepts CAIP-style accounts (
eip155:1:0x…,solana:5eyk…:…). Zerion takes plain0x…EVM or base58 Solana addresses on the same/wallets/{address}/…path. - Aggregation model: OneBalance groups balances by
aggregatedAssetId(one entry per logical token); per-chain detail is nested inindividualAssetBalances. Zerion returns one entry per token per chain; group client-side byfungible_info.idif you need OneBalance-style aggregation. - Pagination: OneBalance uses
offset+limit. Zerion returnslinks.nextas a fully-formed URL you can fetch as-is. See pagination. - Response shape: Zerion uses JSON:API. Payloads live under
data[].attributeswith related entities underdata[].relationships. - DeFi positions: Zerion exposes lending, staking, and LP positions via
filter[positions]=only_complexon the same/positions/endpoint. OneBalance does not surface DeFi positions in its data API. - Realtime updates: OneBalance offers polling (
get-quote-status). Zerion offers transaction webhooks for push notifications on wallet activity.