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.
/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>"
| Parameter | Description |
|---|---|
exchangepath · 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.
| Field | Type | Description |
|---|---|---|
exchange | string | The exchange answered, spelled as the source spells it. |
listedBalanceUsd | number | null | The 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. |
reportedBalanceUsd | number | null | What the exchange holds across every wallet the source tracks, in USD — its own separate figure, not a sum of the rows below. |
reportedBalanceChangeUsd24h | number | null | How 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. |
reportedInflowUsd24h | number | null | The source's own 24-hour inflow figure, in USD. Positive means value moved in, negative that it left. |
reportedInflowUsd7d | number | null | The same over 7 days. |
wallets | object[] | 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[].address | string | The 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[].balanceUsd | number | null | The sum of the holdings below that reported a USD value. Null when none did. |
wallets[].holdings | object[] | What this wallet holds among the listed holdings, most valuable first; a holding with no USD value comes last. |
wallets[].holdings[].symbol | string | The asset's ticker, as the source spells it, e.g. USDT. |
wallets[].holdings[].assetName | string | null | The 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[].balance | number | null | How much of the asset the wallet holds, in COIN UNITS, not USD. |
wallets[].holdings[].balanceUsd | number | null | What that holding is worth in USD. |
wallets[].holdings[].priceUsd | number | null | The 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