Balance API
public, read-only balance
lookups across all chains acquiring supports. No API key required except
for the one deprecated endpoint noted below.
Base URL
https://api.chainpay.site
Live, deployed, mainnet-verified (2026-08-20) across all 6 chains below — (production deployment) for the infrastructure behind this URL (Cloudflare Tunnel, server, firewall). This is the URL to integrate against; no separate staging URL exists yet.
Supported chains
Any value outside the supported list is rejected with 400 Bad Request:
value outside this list is rejected with 400 Bad Request, never silently
forwarded to a provider:
:chain | Network | Native symbol | Balance source |
|---|---|---|---|
bsc | BNB Smart Chain | BNB | BSC provider |
tron | TRON | TRX | TRON provider |
solana | Solana | SOL | Solana provider |
eth | Ethereum mainnet | ETH | EVM provider |
polygon | Polygon | POL | EVM provider |
arbitrum | Arbitrum One | ETH | EVM provider |
Endpoints
GET /balance/:chain/:address
Single-wallet balance.
Query params:
token(optional) — known symbol (USDT,USDC, …) or a raw contract/mint address. Omitted → returns the chain's native currency (BNB/TRX/SOL/ETH/POL), not a stablecoin default.
Response:
{ "address": "0x...", "token": "0x... | null", "symbol": "USDT", "balance": 123.45 }
token is null when the balance returned is the native currency.
GET /balance/:chain?wallets=addr1,addr2,...
Batch balance for a comma-separated wallet list.
Query params:
wallets(optional) — comma-separated addresses. If omitted, falls backwalletsexplicitly).token(optional) — same rules as the single-wallet endpoint.
Response:
{
"token": "0x... | null",
"symbol": "USDT",
"totalBalance": 999.0,
"wallets": [
{ "address": "0x...", "balance": 123.45 },
{ "address": "0x...", "balance": null, "error": "Invalid address format" }
]
}