# Animica Chain Balance Lookup

> Animica Chain Balance Lookup is a paid API for AI agents from animica.dev, paid per call via x402, $0.001801/call, status unknown (last checked 2026-09-14).

Batch-lookup ANM token balances for up to 500 Animica blockchain addresses in a single call

## Facts

- Endpoint: POST https://animica.dev/x402/chain/balances
- Price: $0.001801/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/animica-chain-balance-lookup-13402270
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_T3H0VOz36hxUoSN7kx4fj

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 animica-chain-balance-lookup-13402270 -d '<json body>'
```

Example prompt: Can you check the ANM balances for these Animica addresses: anim1abc123... and anim1def456...? I want to know the spendable balance and whether each account actually exists on-chain.

## When to prefer this

Use this endpoint when you need to look up ANM token balances on the Animica blockchain, especially for batch lookups of up to 500 addresses in one call. It is the canonical on-chain balance source for the Animica network, returning cryptographically anchored block context. Prefer it over any off-chain or cached balance service when accuracy at the latest block head matters.

## Known failure modes

- Invalid address format returns per-address error field rather than a top-level failure
- Addresses not found on-chain have exists=false with zero balance
- Exceeding 500 addresses per request may cause rejection or truncation
- Network or node unavailability causes full request failure
- Malformed bech32m address causes address-level error in response
- Payment insufficient (x402 requirement not met) blocks the request entirely

## How this service works

Balances for up to 500 Animica accounts in ONE batched call, head-pinned, amounts in nANM as exact decimal strings. Single-address balance lookups stay free on the public API — this sells the batch.

## Output

Returns an array of balance records in request order, each containing the address, account digest, balance in nANM (as a decimal string), optional spendable_balance, account existence flag, and any per-address errors. Also includes aggregate fields: unique_addresses count, total_balance, and an as_of block context (head_height, head_hash, entry_head_min/max, consistent flag) plus x402 payment metadata.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "addresses": {
   "type": "array",
   "description": "1..500 anim1… bech32m addresses (32-byte hex account digests also accepted); duplicates are collapsed to one lookup but still answered in place"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "unit": "nANM",
  "as_of": {
   "head_hash": "0x00000000015b1e1021c5354baeac63e24fa52aff9aee92bd467653654256cdd4",
   "consistent": true,
   "head_height": 73635,
   "entry_head_max": 73635,
   "entry_head_min": 73635
  },
  "count": 1,
  "product": "chain_batch_balances",
  "balances": [
   {
    "exists": true,
    "address": "anim1zqpye0muk7etljd2fh7wxsh9y9027cq7dykj3de8u80s2mcnfp6qxecpunkth",
    "balance": "150863000",
    "account_digest": "0x4cbf7cb7b2bfc9aa4dfce342e5215eaf601e692d28b727e1df056f1348740367",
    "spendable_balance": "150863000"
   }
  ],
  "decimals": 9,
  "derivation": {
   "fields": "balance = the node's confirmed_balance. spendable_balance and exists are passed through only when the node returns them; nothing here is synthesised.",
   "source": "state.getAddressBalance on the local Animica node, one batched JSON-RPC request. Note the node has an upstream read-through fallback when it believes it is behind, so a balance may come from a trusted upstream rather than local state.",
   "amounts": "balances are nANM (1e-9 ANM) as exact decimal strings, normalised through BigInt from the node's confirmed_balance. Divide by 1e9 for ANM — with a decimal library, never a float.",
   "duplicates": "duplicate addresses are resolved once and answered in place; total_balance sums UNIQUE accounts only.",
   "account_digest": "bech32m anim1… payload = alg_id (2 bytes) || sha3_256(pubkey) (32 bytes); the lookup key is payload[2:34] (the 32-byte digest), which is what is sent to the node."
  },
  "total_balance": "150863000",
  "failed_lookups": 0,
  "unique_addresses": 1
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/animica-chain-balance-lookup-13402270/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from animica.dev](https://www.zero.xyz/host/animica.dev/llms.txt)
