# Token balance RPC calls

Endpoint reference for the 1delta API. Index: https://docs.1delta.io/llms.txt · every endpoint: https://docs.1delta.io/llms-full.txt

---

### GET /v1/data/token/balances/rpc-call

- operationId: `token-balance-rpc-calls`
- docs: https://docs.1delta.io/1delta-api/token-balance-rpc-calls/
- markdown: https://docs.1delta.io/1delta-api/token-balance-rpc-calls.md
- tags: Token

Token balance RPC calls

Prepares raw JSON-RPC `eth_call`s for fetching token balances using a batched balance-fetcher contract. Returns an `rpcCallId` and an array of `rpcCalls` that the integrator executes against their own RPC provider(s). The raw responses are then submitted to `/token/balances/parse` together with the `rpcCallId`. Two modes: **single-chain** (`chainId` + required `assets`; `rpcCalls` is a bare call array) and **multi-chain** (`chains` CSV, max 30; `rpcCalls` entries are `{ chainId, call }`). In multi-chain mode `assets` is optional — it defaults to each chain's curated `mainTokens` from the token lists, keeping balance scans small even where full lists hold tens of thousands of tokens (max 200 assets per chain). Chains without any known main tokens are reported in `skippedChains`.

**Parameters**

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `chainId` | query | string | no | Chain ID to fetch balances on (single-chain mode; required unless `chains` is given) See the `ChainId` schema for the full set of supported chains. |
| `chains` | query | string | no | Comma-separated chain IDs (multi-chain mode, max 30). Takes precedence over `chainId`. |
| `account` | query | string | yes | EVM account address (0x-prefixed, 40 hex chars) |
| `assets` | query | string | no | Comma-separated token addresses. Required in single-chain mode; optional in multi-chain mode (defaults to each chain’s `mainTokens`; when given, applied to every chain). |
| `blockTag` | query | string | no | Block tag for the RPC call |

**Response `200`** — Prepared RPC calls with a context ID for parsing

| Field | Type | Description |
| --- | --- | --- |
| `success` | true |  |
| `data` | object |  |
| `data.data` | object | Informational payload. `null` when the endpoint only builds calldata. |
| `data.data.rpcCallId` | string | Unique ID referencing the server-side cached context. Pass this to /parse together with the raw responses. Valid for 5 minutes. |
| `data.data.rpcCalls` | object[] | Ordered list of JSON-RPC calls to execute against the target chain RPC. Each call uses multicall3 aggregate3. |
| `data.data.rpcCalls[].method` | string | JSON-RPC method name |
| `data.data.rpcCalls[].params` | any[] | JSON-RPC parameters (call object and block tag) |
| `actions` | null |  |

**Example response**

```json
{
  "success": true,
  "data": {
    "data": {
      "rpcCallId": "string",
      "rpcCalls": [
        {
          "method": "eth_call",
          "params": []
        }
      ]
    }
  }
}
```

**Response `400`** — Validation error

**Response `429`** — Rate limited. Unauthenticated callers share a per-IP budget; send an `x-api-key` header to lift it. Retry with exponential backoff.

**Response `500`** — Unexpected server error. Safe to retry with backoff.

**Response `502`** — An upstream data source or protocol origin failed (`error.code` is `ORIGIN_FAILED`). `error.details` carries the per-origin status. This is also what a missing or malformed required parameter currently returns, rather than a 400.
