/api/exchange-balances
GETAvailable

Exchange on-chain balances for one coin

Per-exchange on-chain balance of a coin with 24h / 7d / 30d changes

GET/api/exchange-balances

Request

Query parameters

NameTypeRequiredDefaultAllowed valuesDescription
symbolstringOptionalBTCBTC, ETH, USDT, USDC, SOL, XRP, DOGE, BNB, TRX, LTC, LINK, ADA, AVAX, SHIB, … (20)Coin; 400 if unsupported. Example: BTC

Example request

curl -s "https://www.coinboss.com/api/exchange-balances?symbol=BTC"

Response fields

The field table is generated from real responses, so it lists exactly what the endpoint returns. Paths use a[] for array items and {*} for objects keyed by a dynamic name such as a coin or an exchange.

FieldTypeUnitDescription
successboolean—true when the request succeeded. On failure the body is `{ success: false, code, error, request_id }`.
symbolstring—Instrument symbol as normalised by CoinBoss (for example BTCUSDT).
dataarray—Payload.
data[]object—Payload.
data[].exstring—Exchange id, lower case.
data[].namestring—Name.
data[].balancenumber—Balance in coins.
data[].balance_usdnumberUSDBalance value.
data[].chg24h_pctnumber|null%24h percentage change.
data[].chg7d_pctnumber|null%7-day percentage change.
data[].chg30d_pctnumber|null%30-day percentage change.
data[].share_pctnumber%Share of the total.
data[].snapshot_tsnumbermsTime of the snapshot.
totalobject—Total.
total.balancenumber—Balance in coins.
total.balance_usdnumberUSDBalance value.
total.chg24h_pctnumber%24h percentage change.
total.exchangesnumber—Exchanges.

Generated 2026-11-11 23:00 UTC from 3 real responses.

Example response

/api/exchange-balances?symbol=BTC · Real response captured 2026-11-13 03:58:10 UTC. Long arrays and maps are shortened for display: data had 70 items.

  • {
    • "success": true,
    • "symbol": "BTC",
    • "data": [
      • { … 9 },
      • { … 9 }
      ],
    • "total": {
      • "balance": 1503208.3664,
      • "balance_usd": 106644903353,
      • "chg24h_pct": 0,
      • "exchanges": 70
      }
    }

Verified samples

Besides the example above, the probe calls this endpoint with these parameters and checks the schema each time.

ParametersHTTPLatencyResult
symbol=ETH20015 msPass
symbol=SOL20012 msPass

Checked 2026-11-13 03:58:10 UTC

Details

Authentication
None. Public endpoint.
Rate limit
1200 requests per minute per IP
Server cache
60s
Edge micro-cache
10s
Update frequency
every 6 hours
Window
latest snapshot with 24h / 7d / 30d changes
Data sources
Per-exchange on-chain balance of one asset, from a public on-chain transparency dataset.
Exchange coverage
About 78 centralized exchanges that publish wallet addresses (as tracked by the upstream dataset); exchanges without disclosed wallets (e.g. Coinbase, Upbit, Bithumb, Kraken) are missing. Daily history starts 2022-11. 20 supported symbols (400 otherwise).
Sorting
balance descending
Units
coins and USD; percent (changes, share)
Method
Balances are summed over alias tokens (BTC+WBTC; ETH+WETH+BETH+stETH+wstETH; TRX+TRON); changes compare with the latest daily point at or before the target date (at most 5 days older); share_pct = exchange balance / total x 100.
Timestamps
Unix epoch milliseconds (UTC) unless the field description says otherwise
Response format
json
Stability
Stable

Live status

AvailableChecked 2026-11-13 03:58:10 UTCHTTP 2001 msSchema matchesNewest data point 4.4h old

Availability, last 30 days

100% of 410 checks passed

Errors

Failed calls share one shape on every endpoint. The full list is on the errors page. Errors and rate limits →

CodeHTTPMeaningWhat to do
INVALID_PARAM400A required parameter is missing or a value is not accepted. `param` names the parameter when it is known.Do not retry unchanged; fix the request.
UNAUTHORIZED401The `CB-API-KEY` header was sent but the key is unknown or revoked. Public data needs no key — drop the header or use a valid key.Do not retry unchanged.
FORBIDDEN403The route is not part of the public API (internal or account-only).Do not retry.
NOT_FOUND404Unknown route, or the requested coin / exchange / fund does not exist.Do not retry; check the path and identifiers against the catalog.
RATE_LIMITED429More requests than the per-minute limit. `Retry-After` gives the seconds to wait.Wait for `Retry-After`, then retry with backoff.
INTERNAL500Unexpected server error. The message is generic by design; quote `request_id` when reporting it.Retry once after a few seconds; report it with the request id if it persists.
UPSTREAM_FAILED503The data source behind this endpoint did not answer in time. No stale or substitute numbers are returned in its place.Retry with backoff; check the status page.
UNAVAILABLE501 / 503The dataset is temporarily not ready (cache warming) or the endpoint has no lawful public source yet.Retry later; the catalog marks endpoints that are unavailable by design.
REQUEST_FAILED200Some older endpoints answer HTTP 200 with `success: false`. Always check `success`, not only the HTTP status.Depends on the message; treat as a failed request.

Try it

GET/api/exchange-balancesAvailable
Parameters

string · default BTC — Coin; 400 if unsupported.

Request URLhttps://www.coinboss.com/api/exchange-balances?symbol=BTC
Choose an endpoint and press “Send request”. The response, headers and timing will appear here.