Discovery and markets API
What large transfers just moved on this chain, and between whom?
The biggest on-chain transfers on one chain, newest first: the asset, how much, its USD value and the exchange or treasury on each side where the source can name it.
/api/external/discovery/whale-transfers/{chain}What it returns
The largest transfers the source has seen on this chain, newest first, with the parties it could label. The floor is the source's own, about 10 M USD — nothing smaller is published here at any setting. The window is a fixed count of transfers ACROSS EVERY CHAIN the source watches and cannot be paged, so windowOldestAt comes back with every answer: it is the oldest transfer the source still publishes, and a since below it was NOT answered in full. A busy day elsewhere shortens the window for this chain too. About a day of transfers was covered when measured. fromLabel and toLabel are LABELS, not addresses: no address is published on this resource, and both are null on most sides because the source labels only the parties it knows. txHash is NOT unique — one transaction can carry several legs, each its own row. amountUsd is the source's valuation at the time, so it is an estimate; amount is what actually moved.
Chains
- Solana SOL
- Ethereum ETH
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/whale-transfers/SOL"
| Parameter | Description |
|---|---|
sincequery · integer · optional | Keep only transfers at or after this instant, in unix seconds. Compare it against windowOldestAt to know whether the window reached that far back. |
minUsdquery · integer · optional | Keep only transfers the source valued at or above this many USD. |
limitquery · integer · optional | How many transfers to return, 1 to 1000. Defaults to 50. The cap is the whole window: one request costs one upstream call whatever the limit. limit ≤ 125 keeps the answer under 32 KB. |
chainpath · string · required | ETH or SOL. BNB, BASE, STABLE, RHC and ARC all return 400: the feed this resource reads filed no transfer under them when measured. CELO, ARB, OP and SCROLL return 400 here. |
Response fields
A JSON response. Every field is always present; null means the value could not be established, never zero.
| Field | Type | Description |
|---|---|---|
chain | string | The chain the transfers are on. |
matched | integer | How many transfers on this chain matched the filters, before limit trimmed them. |
totalUsd | number | The USD across every match, as the source valued each transfer. 0 when nothing matched: every transfer carries a value, so this sum is never unknown. |
windowOldestAt | integer | The oldest transfer the source still publishes, on ANY chain, in Unix SECONDS — the floor of what is knowable here. Always present: an empty window is treated as a failure, not as "nothing moved". |
transfers | object[] | Newest first, capped by limit. |
transfers[].txHash | string | The transaction's hash. NOT a unique key for a row: one transaction can carry several legs, and each leg is its own transfer here. |
transfers[].at | integer | The block's time, in Unix SECONDS. This is the feed's order. |
transfers[].blockHeight | integer | The block the transfer was mined in. |
transfers[].assetSymbol | string | The asset's ticker as the source writes it. |
transfers[].amount | number | How much of the asset moved. |
transfers[].amountUsd | number | What the source valued the transfer at, in USD, at the time it saw it. The quantity is what moved; this is an estimate of what it was worth. |
transfers[].fromLabel | string | null | The sending party as the source labels it (Binance, Tether Treasury, Wintermute, …). null when it has no label for the address — which is the majority of sides. |
transfers[].toLabel | string | null | The receiving party, labelled the same way; null when unlabelled. |
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