Metered separately from raw RPC, with its own SLA

Data API

Wallet assets, transaction history, and NFTs in a single request — no RPC stitching. Archive queries are enabled per chain. Every response carries the block height and collection time, so results are easy to verify.

Endpoints

Endpoints and CU weights

All endpoints share one response envelope: success { "code": 1, "data": … }, Failed { "code": 400xxx, "message": "error message" }, and return X-Request-Id。

MethodPathDescriptionCU weight
GET/api/v1/network/data/wallet/:addressWallet assets (native coin + tokens, with decimals and raw integers)2
GET/api/v1/network/data/transactions/:addressTransaction history (paginated, 20 by default, up to 200)5
GET/api/v1/network/data/nft/:addressNFT holdings (with token_id and contract address)8
GET/api/v1/network/data/portfolio/:addressPortfolio data (per-chain value and allocation)10
POST/api/v1/network/archive/queryArchive queries (historical state and logs; must be enabled in the console)15–20
Billing rules

The Data API charges CU per request — default weights in the table above, current versions and unit prices in the public billing rules. It is metered and has its own SLA, separate from raw RPC. Failed requests and cache hits are never billed.

Try it online

Look up wallet assets for an address

This page calls GET /api/v1/network/data/wallet/:address. Native balance is read in real time; EVM addresses query indexed tokens, Solana addresses query the two standard token programs. Retry later if a query fails.

Defaults to Ethereum mainnet or Solana mainnet; EVM addresses are normalized to lowercase and Solana addresses are kept as-is. Other configured networks can be selected with the chainId parameter.

Code examples

The same call in three languages

All examples use cs_live_xxx as a placeholder. Never hardcode keys in clients: a key inside browser or mobile code is effectively public information.

Wallet asset query
curl -sS https://YOUR-GATEWAY-DOMAIN/api/v1/network/data/wallet/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?chain_id=1 \
  -H "Authorization: Bearer cs_live_xxx" \
  -H "Accept: application/json"

# response (excerpt)
# {
#   "code": 1,
#   "data": {
#     "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
#     "chain_id": 1,
#     "block_number": 21384022,
#     "collected_at": "2026-10-26T15:04:05Z",
#     "native": { "symbol": "ETH", "decimals": 18, "raw": "1234500000000000000" },
#     "tokens": [
#       { "contract": "0xa0b8…eb48", "symbol": "USDC", "decimals": 6, "raw": "2500000000" }
#     ]
#   }
# }

Replace YOUR-GATEWAY-DOMAIN with the gateway domain your deployer provides.

Example compute unit (CU) weights

The full weight table lives on the public billing rules page, versioned and dated; bills can be recalculated from the original rules.

MethodWeight (CU)Version
eth_chainId / net_version1v1
eth_blockNumber1v1
eth_getBalance2v1
eth_call3v1
eth_getLogs (≤ 1k blocks)10v1
eth_getLogs (> 1k blocks)+10 per 1k blocksv1
eth_sendRawTransaction5v1
eth_getStorageAt (archive)20v1
trace_* / debug_*50v1

Rate limits and error handling tips

Back off for the suggested number of secondsWhen you hit a rate limit, the response tells you how many seconds to wait. Resending right away just gets rejected again.
Paginate instead of exporting everythinglimit The maximum is 200; larger values are truncated. Use archive queries or batches for long ranges.
Use block height for consistency checksEvery response carries block_number, so comparing sources reveals lagging nodes.
Never use floats for amountsThe raw returned is a decimal string; format it with decimals for display.
Error codesMeaningWhat to do
400301Unsupported chainSee the Supported Networks page for the list
400303Archive queries not enabledEnable it per chain in the console, then retry
400304Upstream node rate limitThe request was already retried or downgraded. Retry shortly
400400Invalid address formatEVM and Solana follow different format rules; validate each separately
400032Plan quota exceededUpgrade your plan or wait for the next billing period
FAQ

How the Data API differs from raw RPC

Because their cost structures differ. Raw RPC is a single forwarded request; the Data API needs aggregation, decoding, and indexing. Separate metering keeps unit prices and SLAs independent and stops volume on one side from hiding cost on the other.

No. All amounts are returned as raw integers (decimal strings), with decimals; formatting for display is done client-side to avoid precision loss from float accumulation.

Balance data updates with each new block and is usually visible seconds after it lands onchain; indexed data (transaction history, NFTs) has collection lag, and the block_number and collected_at in the response show how fresh the data is.

Yes, preferably keyed by chain_id + address + block_number as the cache key. The ChainBridge gateway also caches, and cache hits are free to customers.

Start calling the Data API

Create a key to try every endpoint.