Discovery and markets API

Which wallets does this exchange control, and what do they hold?

One exchange's known on-chain wallets, richest first, with each wallet's largest holdings in coin units and USD, plus the exchange-level total and its 24h and 7d flows. 14 exchanges, no chain.

GET/api/external/discovery/exchange-wallets/{exchange}

What it returns

The on-chain wallets one centralized exchange is known to control, richest first, with what each of them holds in coin units and in USD, beside the exchange-level total and its 24-hour and 7-day flows. The listing is the top of the exchange's custody, never the whole of it: measured 2026-09-22, every exchange listed exactly its 20 largest (wallet, asset) holdings, and whatever is listed is published here. listedBalanceUsd and reportedBalanceUsd are measured differently and must not be subtracted from one another: on 4 of the 14 exchanges the listed holdings summed to MORE than the reported total. Coverage is exactly those 14 exchanges — Binance, OKX, Bitfinex, Bybit, Gate, Bitget, Deribit, MEXC, KuCoin, HTX, Crypto.com, BingX, LBank and Bitunix — and any other name, Coinbase and Kraken included, returns 404. The name is matched ignoring case and punctuation, so crypto.com and CryptoCom both find Crypto.com. No chain anywhere: these wallets sit on Bitcoin, EVM chains, Tron and Solana at once, and the source names none of them.

Chains

This endpoint is not tied to a chain: it takes no chain in its request.

Request

Send your key in the x-dex-data-key header. Replace each <placeholder> with a real value.

curl -H "x-dex-data-key: $DEXDATA_API_KEY" \
  "https://api.dexdata.io/api/external/discovery/exchange-wallets/<exchange>"
Parameters
ParameterDescription
exchange

path · string · required

A centralized exchange by name, e.g. "Binance" or "Crypto.com", in any case — not a wallet, token mint or contract address, not a spot-venue id, and not scoped to any chain: one exchange's wallets sit on several at once.

Response fields

A JSON response. Every field is always present; null means the value could not be established, never zero.

Response fields of Which wallets does this exchange control, and what do they hold?
FieldTypeDescription
exchangestringThe exchange answered, spelled as the source spells it.
listedBalanceUsdnumber | nullThe sum in USD of the holdings listed below — the largest only, so it is not the exchange's total and is not comparable with reportedBalanceUsd. Null when no holding reported a value.
reportedBalanceUsdnumber | nullWhat the exchange holds across every wallet the source tracks, in USD — its own separate figure, not a sum of the rows below.
reportedBalanceChangeUsd24hnumber | nullHow that reported total moved over 24 hours, in USD. Not the same thing as the inflow below: this carries whatever else moved the total, including prices, so the two need not agree in size or even in direction.
reportedInflowUsd24hnumber | nullThe source's own 24-hour inflow figure, in USD. Positive means value moved in, negative that it left.
reportedInflowUsd7dnumber | nullThe same over 7 days.
walletsobject[]One entry per wallet address among the published holdings, richest first. A wallet holding several of the listed assets appears once, with all of them; a wallet with no USD value comes last. Never empty: a tracked exchange that lists no holding is a 404.
wallets[].addressstringThe wallet address, exactly as the source sends it. It carries NO chain: one exchange's wallets sit on several chains at once, and an address starting 0x could be on any EVM chain. The same address may appear twice in different letter case — that is how this source separates one address used on two chains, so the rows are published as sent.
wallets[].balanceUsdnumber | nullThe sum of the holdings below that reported a USD value. Null when none did.
wallets[].holdingsobject[]What this wallet holds among the listed holdings, most valuable first; a holding with no USD value comes last.
wallets[].holdings[].symbolstringThe asset's ticker, as the source spells it, e.g. USDT.
wallets[].holdings[].assetNamestring | nullThe asset's full name, e.g. Tether USDt. Null for every holding of some exchanges — the source omits it per exchange, not per holding.
wallets[].holdings[].balancenumber | nullHow much of the asset the wallet holds, in COIN UNITS, not USD.
wallets[].holdings[].balanceUsdnumber | nullWhat that holding is worth in USD.
wallets[].holdings[].priceUsdnumber | nullThe price of one unit of the asset in USD. Like assetName, missing for every holding of some exchanges (measured 2026-09-22).

Start building with DexData today

Sign in, create a key and make your first call in a minute. Free credits every month, and you only pay for calls that succeed.

Get a free API key