Wallet APIBalancesPortfolioAPI

Multi-Chain Wallet Balance API: Token Balances and USD Values Across Chains

How to get a wallet's token balances with USD values on Ethereum, Base, BSC, Solana and other chains, keep them live with streams, and look up what a wallet held on any past date.

Cover Image for Multi-Chain Wallet Balance API: Token Balances and USD Values Across Chains

The short answer

To show a wallet's holdings across chains you need three things: current token balances with USD values, live updates when they change, and history for any past date. Bitquery covers all three on its 10 core chains, and one GraphQL request can return balances from several chains at once.

NeedHow Bitquery does it
Current balances with USD valueThe Balances query on EVM chains and Tron; balance updates on Solana
Live changesWebSocket streams of transfers and balance changes
What the wallet held on a past dateBalance history from the transfers archive add-on

Get current balances on an EVM chain

One GraphQL query returns every token the wallet holds on a chain, largest USD value first:

query WalletPortfolio {
  EVM(network: eth) {
    Balances(
      where: { Balance: { Address: { is: "<wallet address>" } } }
      orderBy: { descending: Balance_AmountInUSD }
      limit: { count: 50 }
    ) {
      Balance { Amount AmountInUSD LastChangeTime UpdateCount }
      Currency { Symbol Name SmartContract Decimals }
    }
  }
}

Change network to cover another EVM chain, such as Base, BSC, Arbitrum, Polygon or Optimism. Tron uses the same shape under Tron. Add up AmountInUSD across the rows to get the wallet's total value on that chain.

Solana

Solana has no Balances query. You read the latest balance update per token for the wallet instead. The wallet portfolio recipe in the docs has the Solana version next to the EVM one.

Cover many chains in one request

GraphQL aliases let one request ask several EVM chains at once. Each alias returns that chain's tokens with USD values:

query MultiChainWallet {
  eth: EVM(network: eth) {
    Balances(
      where: { Balance: { Address: { is: "<wallet address>" } } }
      orderBy: { descending: Balance_AmountInUSD }
      limit: { count: 50 }
    ) { Balance { Amount AmountInUSD } Currency { Symbol SmartContract } }
  }
  base: EVM(network: base) {
    Balances(
      where: { Balance: { Address: { is: "<wallet address>" } } }
      orderBy: { descending: Balance_AmountInUSD }
      limit: { count: 50 }
    ) { Balance { Amount AmountInUSD } Currency { Symbol SmartContract } }
  }
}

Add an alias for each chain the wallet uses, then merge the rows by USD value. Solana uses a different shape, so it goes in its own block. The wallet tracking API comparison sets the main providers side by side.

Keep balances live

The Balances query is a snapshot and cannot be subscribed to. Read it once, then keep it current with a WebSocket stream of the wallet's transfers or balance changes. Streams start on the Pro plan, and the 7-day free trial includes them.

What a wallet held on a past date

Questions like "what did this wallet hold on 1 January?" need balance history. Self-service plans keep recent balance changes in a rolling window. Complete history on a core chain comes with the transfers archive add-on, which includes balances and holders, at $150 a month per EVM chain. See historical add-ons.

What to watch for

  1. Spam tokens. Airdropped scam tokens fill raw balance lists. Sort by USD value and hide rows with no trading liquidity.
  2. Long-tail prices. A token no exchange lists still needs a price. Bitquery prices tokens from on-chain DEX trades, so new tokens get a value once they trade.
  3. Address formats. An EVM address on a Solana query returns nothing, which looks like an empty wallet. Match the format to the chain.

Related APIs

FAQ

What is the best API for multi-chain wallet balances?

It depends on how many chains you need and whether you need history. Bitquery covers balances with USD values on 10 core chains, with live streams and point-in-time history, and one request can cover several EVM chains through GraphQL aliases.

Can I get a wallet's token balances in USD with one query?

Yes. On EVM chains and Tron, the Balances query returns each token's amount and USD value, sorted by value. Add one alias per chain to cover several EVM chains in the same request.

Can I get historical wallet balances?

Yes. Recent balance changes are on every self-service plan. Complete history on a core chain comes with the transfers archive add-on, at $150 a month per EVM chain.

How do I keep wallet balances updated in real time?

Read the balances once, then subscribe to a WebSocket stream of the wallet's transfers or balance changes. Streaming starts on the Pro plan and is included in the free trial.

Related reading

Subscribe to our newsletter

Subscribe and never miss any updates related to our APIs, new developments & latest news etc. Our newsletter is sent once a week on Monday.