Data API (balances & portfolio)
Native + ERC-20 token balances and USD-valued portfolios for any address across 23 EVM chains in one call — including young chains Alchemy and Moralis omit.
The Data API returns native + ERC-20 token balances — and USD-valued portfolios — for one address across many of NodeFlare's 23 EVM chains in a single request. Its differentiator is coverage of the young chains other portfolio APIs skip: Robinhood Chain, Plasma, Ink, Zircuit, Soneium, BOB and Mode land in the same response as Ethereum and Base. See the product overview for the pitch.
Endpoints
POST https://rpc.nodeflare.app/data/balances # balances only
POST https://rpc.nodeflare.app/data/portfolio # balances + USD valuation + total
POST https://rpc.nodeflare.app/data/allowances # active ERC-20 approvals (revoke-risk view)The public endpoints above are free (rate-limited per IP) and serve explicit-token reads. Token discovery and the highest limits run over x402 — no account:
POST https://rpc.nodeflare.app/data/balances/x402
POST https://rpc.nodeflare.app/data/portfolio/x402Request body
| Field | Type | Notes |
|---|---|---|
address | string | Required. The 0x address to look up. |
chains | string[] | Chains to include — slug (base), name (ethereum), or numeric ID (8453). Defaults to all 23. |
tokens | object | ERC-20 contracts per chain, e.g. { "base": ["0x833589…"] }. |
discover | boolean | Auto-find every ERC-20 the address holds (paid; x402 endpoints only). |
fromBlock | string | Discovery start block (hex or "earliest"). |
minUsd | number | Discovery: drop priced tokens worth less than this USD (default 0.01). |
includeSpam | boolean | Discovery: keep junk-symbol tokens (default off). |
includeDust | boolean | Discovery: keep sub-1e-9 balances (default off). |
Balances example
curl -X POST https://rpc.nodeflare.app/data/balances \
-H 'Content-Type: application/json' \
-d '{
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"chains": ["base", "eth", "robinhood"],
"tokens": { "base": ["0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"] }
}'Each chain returns its native balance and one entry per token (symbol, decimals, human-readable balance, exact raw, and usdPrice/usdValue where priced). If decimals() can't be read, balance is null and raw is preserved — the value is never mis-scaled.
Portfolio example
/data/portfolio adds native-coin USD valuation and rolls everything into a totalUsd, with a per-chain breakdown sorted by value:
curl -X POST https://rpc.nodeflare.app/data/portfolio \
-H 'Content-Type: application/json' \
-d '{ "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" }'Allowances
/data/allowances returns the active ERC-20 approvals an address has granted across the 23 chains — for each spender: the token, the approved amount, and an unlimited flag. It's the revoke-risk view: which contracts can still move a wallet's tokens. Paid per call in USDC over x402.
curl -X POST https://rpc.nodeflare.app/data/allowances \
-H 'Content-Type: application/json' \
-d '{ "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" }'Token discovery (x402)
Set discover: true to find holdings without passing contract addresses. Discovery scans incoming Transfer logs (eth_getLogs), so it's a paid method — use the /x402 endpoints:
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.PRIVATE_KEY); // USDC on Base
const pay = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});
const res = await pay("https://rpc.nodeflare.app/data/portfolio/x402", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ address: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", discover: true }),
});Discovered tokens are USD-priced via DefiLlama. On well-covered chains, junk-symbol spam (scam-airdrop URLs, emoji/non-Latin bait) is filtered and near-worthless tokens are dropped by default — a legitimate token that simply lacks a market price is still returned. Young chains stay unfiltered so discovery is comprehensive.
Pricing
| Call | Price |
|---|---|
| Public balances / portfolio (explicit tokens) | Free (rate-limited) |
| x402 balances / portfolio | ~$0.0003 / chain |
| x402 token discovery | ~$0.0033 / chain |
Paid in USDC on Base, Polygon or Arbitrum via x402. You only pay for calls that succeed.
For AI agents
The Data API is the get_multichain_balances tool in the NodeFlare MCP server — the npm package nodeflare-mcp and the remote endpoint at https://mcp.nodeflare.app/mcp, reachable from Claude, Cursor and ChatGPT connectors. The x402 endpoints are also listed in the x402 Bazaar and the /services.json manifest for autonomous discovery.