Recipe 23 of 32
Wallet portfolio now across chains, in USD, no dust
/wallets/{address}/balances reads current balances on Ethereum, BNB Chain, Base and HyperEVM from the chain at request time; min_usd hides token holdings worth less than a USD floor.
GET /v1/onchain/wallets/{address}/balances?min_usd= scans the four chains by default and returns every holding worth at least
min_usd, largest first, with balance, the exact balance_raw, usd_price and usd_value. total_usd adds up
the priced rows. Balances are read from the chain when you call, not rebuilt from history. The full parameter list is on Wallet token balances.
Quick answer
# what vitalik.eth holds right now on all four chains, token holdings under 1,000 USD hidden
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/wallets/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045/balances?min_usd=1000"Example response
Captured from the live API on 2026-10-24 at 17:18 UTC, trimmed to 5 of the 8 holdings.
Rows are sorted by usd_value, largest first. The native coin of each chain is listed whatever the floor, which
is why BNB at $125.11 and HYPE at $0.51 appear under a $1,000 floor; native rows have address: null. total_usd,
$35,222.41, sums all 8 rows of the full response.
{
"address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
"total_usd": 35222.41,
"chains_scanned": [
"ethereum",
"bsc",
"base",
"hyperevm"
],
"holdings": [
{
"chain": "ethereum",
"symbol": "ETH",
"name": "ETH",
"address": null,
"balance": 5.773499921329374,
"balance_raw": "5773499921329373953",
"usd_value": 13781.4,
"usd_price": 2387.01
},
{
"chain": "ethereum",
"symbol": "ENS",
"name": "Ethereum Name Service",
"address": "0xc18360217d8f7ab5e7c516566761ea12ce7f9d72",
"balance": 1144.0360760636715,
"balance_raw": "1144036076063671431479",
"usd_value": 6280.76,
"usd_price": 5.49
},
{
"chain": "base",
"symbol": "DEGEN",
"name": "DEGEN",
"address": "0x4ed4e862860bed51a9570b96d89af5e1b0efefed",
"balance": 3000574.185146692,
"balance_raw": "3000574185146692290319902",
"usd_value": 2842.74,
"usd_price": 0.0009474
},
{
"chain": "bsc",
"symbol": "BNB",
"name": "BNB",
"address": null,
"balance": 0.16869681254396504,
"balance_raw": "168696812543965050",
"usd_value": 125.11,
"usd_price": 741.65
},
{
"chain": "hyperevm",
"symbol": "HYPE",
"name": "HYPE",
"address": null,
"balance": 0.006529929669036304,
"balance_raw": "6529929669036304",
"usd_value": 0.51,
"usd_price": 77.431
}
]
}Variations
Chosen chains only. chains takes a comma-separated list; eth, mainnet, bnb and binance are accepted aliases.
# Ethereum and Base only
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/wallets/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045/balances?chains=ethereum,base&min_usd=1000"Every holding. An explicit min_usd=0 lists everything, unpriced airdrops included. A long-lived wallet returns thousands of rows.
# the complete list on Base
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/wallets/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045/balances?chains=base&min_usd=0"The ten largest holdings. Rows come sorted, so the first ten are the ten most valuable.
# the ten most valuable holdings across all four chains
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/onchain/wallets/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045/balances?min_usd=1" \
| jq '.holdings[:10] | map({chain, symbol, balance, usd_value})'Before you rely on it
A floor also hides tokens we cannot price
Any min_usd above 0 drops holdings with no price, since they cannot be shown to clear it. An omitted min_usd
means 1, not 0. total_usd sums priced holdings only, so read it as a floor on the wallet's value, never as its
net worth.
Check chain_errors before reading an empty chain
A chain whose read failed is named in chain_errors and is still listed in chains_scanned, and a chain name
outside the four goes to chain_errors too. A chain with no rows and no entry in chain_errors holds nothing that
clears the floor.
What the scan cannot see
HyperCore spot and perp balances are not included: hyperevm is the HyperEVM chain only. The tokens checked are
those that ever moved in or out of the wallet in our transfer data, so a token missing from it is missing here.
On Base and HyperEVM a token we do not map comes back with no symbol, and only with min_usd=0.
Ask your agent
Connected to the Vike MCP server (https://vike.io/mcp) in Claude, ChatGPT or Cursor, ask it in plain words.
The wallet_token_balances tool answers it, at 3 credits a call.
What does vitalik.eth hold right now across Ethereum, BNB Chain, Base and HyperEVM, ignoring anything under $1,000?