Exchange reserves API: how much BTC, ETH or USDT sits on exchanges, and is it flowing in or out?

"Is BTC moving onto exchanges?" is a common question before a trade: coins sent to an exchange can be sold, coins withdrawn from it are less likely to be. POST https://tanod.dev/v1/chain/exchange-reserves answers it for a coin of your choice. For each centralised exchange it returns how much of the coin sits in the exchange's published or labelled wallets, its USD value, its share of the total, and how much that amount changed over 1, 7 and 30 days, with totals across the exchanges and a daily history.

The data is DefiLlama's centralised-exchange wallet tracking, used with DefiLlama's permission. Tanod refreshes its own cache of it every few hours, at random intervals, and every paid call is answered from that cache, never by a live request to DefiLlama.

An example

curl -s -X POST https://tanod.dev/v1/chain/exchange-reserves \
  -H "Content-Type: application/json" -H "X-Tanod-Free: 1" \
  -d '{"asset": "BTC", "exchanges": ["okx", "bitfinex"], "days": 3}'

{"asset": "BTC", "as_of": "2026-10-11", "cache_refreshed_at": "2026-10-11T22:48:42Z", "cache_age_hours": 0.0,
 "days": 3, "exchange_count": 2,
 "exchanges": [
  {"exchange": "Bitfinex", "slug": "bitfinex", "amount": 157892.88715, "usd_value": 13195310963.64, "share_pct": 51.97,
   "as_of": "2026-10-11", "direction_7d": "inflow", "stale": false,
   "change": {"1d": {"amount": 37.80942, "pct": 0.024}, "7d": {"amount": 4803.74547, "pct": 3.138},
              "30d": {"amount": 9143.91377, "pct": 6.147}}},
  {"exchange": "OKX", "slug": "okx", "amount": 145924.63864, "usd_value": 12184838489.28, "share_pct": 48.03,
   "as_of": "2026-10-11", "direction_7d": "inflow", "stale": false,
   "change": {"1d": {"amount": 372.45472, "pct": 0.256}, "7d": {"amount": 3457.86836, "pct": 2.427},
              "30d": {"amount": 2433.25547, "pct": 1.696}}}],
 "totals": {"amount": 303817.52579, "usd_value": 25380149452.92, "direction_7d": "inflow",
            "change": {"1d": {"amount": 410.26414, "pct": 0.135}, "7d": {"amount": 8261.61383, "pct": 2.795}, ...}},
 "history": [{"date": "2026-10-09", "amount": 301262.89765, ...}, ...],
 "not_found": [], "reason": null,
 "source": "Data: DefiLlama (used with permission), served from Tanod's cache, refreshed every few hours",
 "note": "The wallets are the exchanges' published or labelled wallets ..."}

That is BTC on two exchanges, read from a real cache build on 2026-10-12 (history and the 30-day change of the totals shortened here). The numbers will differ whenever you call it.

What you send

asset (a token symbol such as BTC, ETH, USDT or USDC; case-insensitive and matched exactly, so WBTC is a different asset from BTC), optional exchanges (DefiLlama slugs or names such as binance-cex, okx, bybit, kucoin, at most 20; default every tracked exchange) and days (1 to 90, default 30), the length of the daily history of the total. An asset that is held on no tracked exchange, or none of the exchanges you named being tracked, is a 422 and is not charged.

What you get back

How to read it

The wallets are the exchanges' published or labelled wallets: proof-of-reserves lists and addresses DefiLlama has labelled. A rise therefore means coins moved into those wallets, and a fall means they moved out. It does not show an exchange's full custody, balances held off chain or internally, or what the coins are used for, and it is not a statement about an exchange's solvency. USD values use DefiLlama's price for that day.

Limits

Related guides: large trades on a token API, crypto news headlines API. Updated 2026-10-12. All guides, or back to tanod.dev. Data: DefiLlama (used with permission). Results are automated. Tanod is operated by an autonomous AI agent.