Get Exchange Flows
GET/v1/cryptodata/on-chain/exchange-flows/{symbol}
Net Transfer flow to/from CEX wallets for `symbol`, across windows. Symbol must be a token tracked by the exchange-flows collector across the supported chains (ETH, BSC, Base, Arbitrum, Optimism, Tron, Solana), or native BTC (balance deltas on Binance, Bybit and OKX wallets from their own proof-of-reserves lists). The same symbol can be tracked on multiple chains; see `by_chain`. `exchanges_covered` lists the exchanges with at least one watched wallet on a chain carrying the symbol. Any other exchange is `null` in `per_exchange_24h` (unknown, not zero: Coinbase and Kraken publish no BTC addresses), and an `exchange` filter naming one makes every window `null`. The 1h/6h/24h/7d windows show inflow, outflow, and net. Positive net = more deposits to CEXs (often bearish — incoming sell-side liquidity). Negative net = withdrawals from CEXs (often bullish). `by_chain` breaks the same windows down per chain (only chains with data for this symbol are present) and `chains_covered` lists them — matching the daily-archive shape so live and backfilled snapshots line up. `spike_zscore_1h` flags the latest 1h vs the prior hour's baseline; values > 2 indicate a statistically unusual spike.
Price
$0.01/ callEdge cache
300s
Uptime 24h
100.00%
p95
672ms
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| symbol* | path | string | |
| exchange | query | string | Filter to one exchange (e.g. 'binance') |
Code
# 1. No key, no payment: the gateway answers 402 with the price
curl -i "https://api.realtimeapi.ai/v1/cryptodata/on-chain/exchange-flows/BTC"
# 2. Pay: retry with a signed x402 payment (any x402 client builds this header)
curl "https://api.realtimeapi.ai/v1/cryptodata/on-chain/exchange-flows/BTC" -H "PAYMENT-SIGNATURE: $X402_PAYMENT"// npm i @x402/fetch @x402/core @x402/evm viem
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = x402Client.fromConfig({ schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(privateKeyToAccount(PRIVATE_KEY)) }] });
const pay = wrapFetchWithPayment(fetch, client);
const data = await (await pay("https://api.realtimeapi.ai/v1/cryptodata/on-chain/exchange-flows/BTC")).json();
console.log(data);# pip install x402 eth-account requests
from eth_account import Account
from x402.clients.requests import x402_requests
session = x402_requests(Account.from_key(PRIVATE_KEY))
print(session.get("https://api.realtimeapi.ai/v1/cryptodata/on-chain/exchange-flows/BTC").json())curl "https://api.realtimeapi.ai/v1/cryptodata/on-chain/exchange-flows/BTC" -H "X-API-Key: $RTAPI_KEY"Frequently asked questions
How do I get get exchange flows from CryptoDataAPI?
Send GET https://api.realtimeapi.ai/v1/cryptodata/on-chain/exchange-flows/{symbol}. Pay $0.01 per request with x402, or send an X-API-Key header.
What does GET /on-chain/exchange-flows/{symbol} cost?
$0.01 per successful request in USDC on Base. Failed requests are never charged.
Can I call this endpoint from an MCP client?
Yes. Connect any MCP client to the RealtimeAPI server and use call_feed with this endpoint's URL, or get_quote to check the price first.