Tokens API
Trade stats by trailing window
Buyer and seller wallet counts split apart, plus transactions, volume and price change, over trailing windows from 3h to 24h. The only endpoint splitting buyers from sellers per window.
/api/external/token-analysis/stats-windows/{chain}/{mint}What it returns
The window set depends on the chain. SOL returns all six — 3h, 4h, 5h, 6h, 12h, 24h. ETH returns 4h, 12h and 24h only, and priceChangePct is absent from every ETH window. Those windows and that field are OMITTED on ETH rather than returned as null, because the source serving that chain cannot be asked for them at all — null on this API means a source was asked and had nothing, which would be a different and untrue statement. Every other field is present on every window of both chains. If the first ETH source cannot answer, a second one fills 24h only, and 4h and 12h are then null: it has no window of that length. On SOL, windows are 3h through 24h and not 1m-24h: the shorter windows exist only on a pool-scoped call this endpoint does not make, because reaching them costs a second upstream round trip, over budget for what this endpoint answers in one call. Also on SOL, uniqueBuyers, uniqueSellers, uniqueWallets and priceChangePct may all be null specifically on the 3h window — a known limitation of that source, not a real zero; every other field on 3h is a real reading.
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/token-analysis/stats-windows/SOL/<mint>"
| Parameter | Description |
|---|---|
chainpath · string · required | SOL and ETH only; every other chain returns 400, because no wired source publishes these windows there. The WINDOW SET differs by chain — see the endpoint description. |
mintpath · string · required | The token mint address (Solana) or contract address (EVM). |
Response fields
A JSON response. Every field is always present; null means the value could not be established, never zero.
| Field | Type | Description |
|---|---|---|
3h | object | |
3h.uniqueBuyers | integer | null | Distinct wallets that bought in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
3h.uniqueSellers | integer | null | Distinct wallets that sold in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
3h.uniqueWallets | integer | null | Distinct wallets that did EITHER — not the sum of uniqueBuyers and uniqueSellers, because a wallet that both bought and sold in the window counts once here. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
3h.buys | integer | null | Buy-side transaction count in this window. |
3h.sells | integer | null | Sell-side transaction count in this window. |
3h.volumeUsd | object | |
3h.volumeUsd.buys | number | null | |
3h.volumeUsd.sells | number | null | |
3h.volumeUsd.total | number | null | |
3h.priceChangePct | number | null | Percent change from the price at the START of this window to now. Positive means the price ROSE. Verified 2026-09-16 by back-solving a consistent current price from 5 of the 6 windows on the same token. 3h is excluded from that check and is also the one window where this field itself is null — the same known source limitation as the wallet-count fields, not a real zero percent change. Present on `SOL` only. It is absent from every ETH window, not null: the source serving ETH has no price on these windows at all, so there is nothing it declined to answer. |
4h | object | |
4h.uniqueBuyers | integer | null | Distinct wallets that bought in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
4h.uniqueSellers | integer | null | Distinct wallets that sold in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
4h.uniqueWallets | integer | null | Distinct wallets that did EITHER — not the sum of uniqueBuyers and uniqueSellers, because a wallet that both bought and sold in the window counts once here. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
4h.buys | integer | null | Buy-side transaction count in this window. |
4h.sells | integer | null | Sell-side transaction count in this window. |
4h.volumeUsd | object | |
4h.volumeUsd.buys | number | null | |
4h.volumeUsd.sells | number | null | |
4h.volumeUsd.total | number | null | |
4h.priceChangePct | number | null | Percent change from the price at the START of this window to now. Positive means the price ROSE. Verified 2026-09-16 by back-solving a consistent current price from 5 of the 6 windows on the same token. 3h is excluded from that check and is also the one window where this field itself is null — the same known source limitation as the wallet-count fields, not a real zero percent change. Present on `SOL` only. It is absent from every ETH window, not null: the source serving ETH has no price on these windows at all, so there is nothing it declined to answer. |
5h | object | |
5h.uniqueBuyers | integer | null | Distinct wallets that bought in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
5h.uniqueSellers | integer | null | Distinct wallets that sold in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
5h.uniqueWallets | integer | null | Distinct wallets that did EITHER — not the sum of uniqueBuyers and uniqueSellers, because a wallet that both bought and sold in the window counts once here. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
5h.buys | integer | null | Buy-side transaction count in this window. |
5h.sells | integer | null | Sell-side transaction count in this window. |
5h.volumeUsd | object | |
5h.volumeUsd.buys | number | null | |
5h.volumeUsd.sells | number | null | |
5h.volumeUsd.total | number | null | |
5h.priceChangePct | number | null | Percent change from the price at the START of this window to now. Positive means the price ROSE. Verified 2026-09-16 by back-solving a consistent current price from 5 of the 6 windows on the same token. 3h is excluded from that check and is also the one window where this field itself is null — the same known source limitation as the wallet-count fields, not a real zero percent change. Present on `SOL` only. It is absent from every ETH window, not null: the source serving ETH has no price on these windows at all, so there is nothing it declined to answer. |
6h | object | |
6h.uniqueBuyers | integer | null | Distinct wallets that bought in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
6h.uniqueSellers | integer | null | Distinct wallets that sold in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
6h.uniqueWallets | integer | null | Distinct wallets that did EITHER — not the sum of uniqueBuyers and uniqueSellers, because a wallet that both bought and sold in the window counts once here. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
6h.buys | integer | null | Buy-side transaction count in this window. |
6h.sells | integer | null | Sell-side transaction count in this window. |
6h.volumeUsd | object | |
6h.volumeUsd.buys | number | null | |
6h.volumeUsd.sells | number | null | |
6h.volumeUsd.total | number | null | |
6h.priceChangePct | number | null | Percent change from the price at the START of this window to now. Positive means the price ROSE. Verified 2026-09-16 by back-solving a consistent current price from 5 of the 6 windows on the same token. 3h is excluded from that check and is also the one window where this field itself is null — the same known source limitation as the wallet-count fields, not a real zero percent change. Present on `SOL` only. It is absent from every ETH window, not null: the source serving ETH has no price on these windows at all, so there is nothing it declined to answer. |
12h | object | |
12h.uniqueBuyers | integer | null | Distinct wallets that bought in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
12h.uniqueSellers | integer | null | Distinct wallets that sold in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
12h.uniqueWallets | integer | null | Distinct wallets that did EITHER — not the sum of uniqueBuyers and uniqueSellers, because a wallet that both bought and sold in the window counts once here. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
12h.buys | integer | null | Buy-side transaction count in this window. |
12h.sells | integer | null | Sell-side transaction count in this window. |
12h.volumeUsd | object | |
12h.volumeUsd.buys | number | null | |
12h.volumeUsd.sells | number | null | |
12h.volumeUsd.total | number | null | |
12h.priceChangePct | number | null | Percent change from the price at the START of this window to now. Positive means the price ROSE. Verified 2026-09-16 by back-solving a consistent current price from 5 of the 6 windows on the same token. 3h is excluded from that check and is also the one window where this field itself is null — the same known source limitation as the wallet-count fields, not a real zero percent change. Present on `SOL` only. It is absent from every ETH window, not null: the source serving ETH has no price on these windows at all, so there is nothing it declined to answer. |
24h | object | |
24h.uniqueBuyers | integer | null | Distinct wallets that bought in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
24h.uniqueSellers | integer | null | Distinct wallets that sold in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
24h.uniqueWallets | integer | null | Distinct wallets that did EITHER — not the sum of uniqueBuyers and uniqueSellers, because a wallet that both bought and sold in the window counts once here. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero. |
24h.buys | integer | null | Buy-side transaction count in this window. |
24h.sells | integer | null | Sell-side transaction count in this window. |
24h.volumeUsd | object | |
24h.volumeUsd.buys | number | null | |
24h.volumeUsd.sells | number | null | |
24h.volumeUsd.total | number | null | |
24h.priceChangePct | number | null | Percent change from the price at the START of this window to now. Positive means the price ROSE. Verified 2026-09-16 by back-solving a consistent current price from 5 of the 6 windows on the same token. 3h is excluded from that check and is also the one window where this field itself is null — the same known source limitation as the wallet-count fields, not a real zero percent change. Present on `SOL` only. It is absent from every ETH window, not null: the source serving ETH has no price on these windows at all, so there is nothing it declined to answer. |
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