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/x402

Request body

FieldTypeNotes
addressstringRequired. The 0x address to look up.
chainsstring[]Chains to include — slug (base), name (ethereum), or numeric ID (8453). Defaults to all 23.
tokensobjectERC-20 contracts per chain, e.g. { "base": ["0x833589…"] }.
discoverbooleanAuto-find every ERC-20 the address holds (paid; x402 endpoints only).
fromBlockstringDiscovery start block (hex or "earliest").
minUsdnumberDiscovery: drop priced tokens worth less than this USD (default 0.01).
includeSpambooleanDiscovery: keep junk-symbol tokens (default off).
includeDustbooleanDiscovery: keep sub-1e-9 balances (default off).

Balances example

Terminal
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:

Terminal
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.

Terminal
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:

JavaScript
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

CallPrice
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.