# Ethereum Portfolio Balance Lookup (ETH + ERC-20)

> Ethereum Portfolio Balance Lookup (ETH + ERC-20) is a paid API for AI agents from agentshelf.syntexa.ch, paid per call via x402, $0.003/call, status unknown (last checked 2026-10-30).

Fetches native ETH balance plus up to 20 ERC-20 token balances for a given Ethereum mainnet address using Multicall3 batch reads.

## Facts

- Endpoint: POST https://agentshelf.syntexa.ch/v1/eth-portfolio?utm_source=zero.xyz
- Price: $0.003/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-30
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/ethereum-portfolio-balance-lookup-eth-erc-20-9f84a5c3
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_oslB9s4DIuKvfaz_LCIRP

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability ethereum-portfolio-balance-lookup-eth-erc-20-9f84a5c3 -d '<json body>'
```

Example prompt: What's the ETH balance and USDC balance for wallet address 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 on Ethereum mainnet?

## When to prefer this

Choose this endpoint when you need to read native ETH plus multiple ERC-20 balances for a single Ethereum mainnet address in one efficient batched call. It is particularly well-suited for portfolio snapshots, treasury audits, or pre-transaction checks where you want both ETH and up to 20 tokens at once without making separate RPC calls. Prefer this over generic blockchain RPC endpoints when you want a simple JSON API without managing node infrastructure.

## Known failure modes

- Invalid or malformed Ethereum address returns an error
- Empty token array is rejected — must omit or provide at least one address
- More than 20 ERC-20 addresses in the tokens list is rejected
- Invalid ERC-20 contract address may return zero balance or error
- Payment of exactly $0.003 USDC on Base must succeed; underpayment rejects the call
- Sandbox endpoint (/v1/sandbox/eth-portfolio) available for unpaid testing

## How this service works

Call when an agent needs native ETH plus up to 20 ERC-20 balances for one Ethereum address. Send address and an optional tokens list; omit tokens for Circle USDC. Multicall3 batches the reads. Read-only. No spend. Send JSON {"address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","tokens":["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"]}. Exact $0.003 USDC on Base. Try unpaid POST /v1/sandbox/eth-portfolio first.

## Output

Returns the native ETH balance alongside balances for each specified ERC-20 token contract address (defaulting to Circle USDC if no token list is provided) for the queried Ethereum mainnet address, batched via Multicall3 for efficiency.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "tokens": {
   "type": "array",
   "items": {
    "type": "string",
    "description": "ERC-20 contract. Example: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48. At most 20. Omit the list to use Circle USDC."
   },
   "examples": [
    [
     "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
    ]
   ],
   "maxItems": 20,
   "description": "Up to 20 ERC-20 addresses. Example: [\"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\"]. Omit the field for Circle USDC. An empty list is rejected."
  },
  "address": {
   "type": "string",
   "examples": [
    "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
   ],
   "description": "Holder on Ethereum mainnet. Example: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045. Returns native ETH plus ERC-20 balances. EIP-55 or all one case."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/ethereum-portfolio-balance-lookup-eth-erc-20-9f84a5c3/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from agentshelf.syntexa.ch](https://www.zero.xyz/host/agentshelf.syntexa.ch/llms.txt)
