Tokens API

Trade stats by trailing window, for many tokens

Buyer and seller wallet counts, transactions and volume over trailing windows from 3h to 24h, for up to 25 tokens on one chain in one request.

POST/api/external/token-analysis/stats-windows-batch/{chain}

What it returns

The stats-windows answer for many tokens on one chain, in one request. Each result is exactly what stats-windows answers for that token, with the same window set per chain and the same caveats on every field: SOL returns 3h, 4h, 5h, 6h, 12h and 24h; ETH returns 4h, 12h and 24h, with no priceChangePct. A token no source had anything for is a result with every figure null, as stats-windows answers it. POST, because the list is the subject: it can run past what a URL comfortably holds, and a body keeps a watch list out of every proxy log between the caller and this service.

Chains

  • Solana SOL
  • Ethereum ETH

Request

Send your key in the x-dex-data-key header. Replace each <placeholder> with a real value.

curl -X POST -H "x-dex-data-key: $DEXDATA_API_KEY" \
  -H "content-type: application/json" \
  -d '{"subjects":["<subjects>"]}' \
  "https://api.dexdata.io/api/external/token-analysis/stats-windows-batch/SOL"
Parameters
ParameterDescription
chain

path · string · required

The chain every token in the batch lives on. SOL and ETH only, as on stats-windows; BNB, BASE, STABLE, RHC and ARC return 400. CELO, ARB, OP and SCROLL return 400 here.
subjects

body · string[] · optional

Token mint addresses (Solana) or contract addresses (ETH). ≤ 20 tokens keep the answer under 32 KB. Between 1 and 25, each sent once.

Response fields

A JSON response. Every field is always present; null means the value could not be established, never zero.

Response fields of Trade stats by trailing window, for many tokens
FieldTypeDescription
resultsobject[]One entry per requested subject, in the order they were sent.
results[].subjectstringThe subject exactly as it was sent.
results[].resultobject | nullWhat the single-subject endpoint answers for this subject. null only when error is set.
results[].result.3hobject
results[].result.3h.uniqueBuyersinteger | nullDistinct wallets that bought in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero.
results[].result.3h.uniqueSellersinteger | nullDistinct wallets that sold in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero.
results[].result.3h.uniqueWalletsinteger | nullDistinct 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.
results[].result.3h.buysinteger | nullBuy-side transaction count in this window.
results[].result.3h.sellsinteger | nullSell-side transaction count in this window.
results[].result.3h.volumeUsdobject
results[].result.3h.volumeUsd.buysnumber | null
results[].result.3h.volumeUsd.sellsnumber | null
results[].result.3h.volumeUsd.totalnumber | null
results[].result.3h.priceChangePctnumber | nullPercent 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.
results[].result.4hobject
results[].result.4h.uniqueBuyersinteger | nullDistinct wallets that bought in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero.
results[].result.4h.uniqueSellersinteger | nullDistinct wallets that sold in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero.
results[].result.4h.uniqueWalletsinteger | nullDistinct 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.
results[].result.4h.buysinteger | nullBuy-side transaction count in this window.
results[].result.4h.sellsinteger | nullSell-side transaction count in this window.
results[].result.4h.volumeUsdobject
results[].result.4h.volumeUsd.buysnumber | null
results[].result.4h.volumeUsd.sellsnumber | null
results[].result.4h.volumeUsd.totalnumber | null
results[].result.4h.priceChangePctnumber | nullPercent 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.
results[].result.5hobject
results[].result.5h.uniqueBuyersinteger | nullDistinct wallets that bought in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero.
results[].result.5h.uniqueSellersinteger | nullDistinct wallets that sold in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero.
results[].result.5h.uniqueWalletsinteger | nullDistinct 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.
results[].result.5h.buysinteger | nullBuy-side transaction count in this window.
results[].result.5h.sellsinteger | nullSell-side transaction count in this window.
results[].result.5h.volumeUsdobject
results[].result.5h.volumeUsd.buysnumber | null
results[].result.5h.volumeUsd.sellsnumber | null
results[].result.5h.volumeUsd.totalnumber | null
results[].result.5h.priceChangePctnumber | nullPercent 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.
results[].result.6hobject
results[].result.6h.uniqueBuyersinteger | nullDistinct wallets that bought in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero.
results[].result.6h.uniqueSellersinteger | nullDistinct wallets that sold in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero.
results[].result.6h.uniqueWalletsinteger | nullDistinct 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.
results[].result.6h.buysinteger | nullBuy-side transaction count in this window.
results[].result.6h.sellsinteger | nullSell-side transaction count in this window.
results[].result.6h.volumeUsdobject
results[].result.6h.volumeUsd.buysnumber | null
results[].result.6h.volumeUsd.sellsnumber | null
results[].result.6h.volumeUsd.totalnumber | null
results[].result.6h.priceChangePctnumber | nullPercent 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.
results[].result.12hobject
results[].result.12h.uniqueBuyersinteger | nullDistinct wallets that bought in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero.
results[].result.12h.uniqueSellersinteger | nullDistinct wallets that sold in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero.
results[].result.12h.uniqueWalletsinteger | nullDistinct 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.
results[].result.12h.buysinteger | nullBuy-side transaction count in this window.
results[].result.12h.sellsinteger | nullSell-side transaction count in this window.
results[].result.12h.volumeUsdobject
results[].result.12h.volumeUsd.buysnumber | null
results[].result.12h.volumeUsd.sellsnumber | null
results[].result.12h.volumeUsd.totalnumber | null
results[].result.12h.priceChangePctnumber | nullPercent 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.
results[].result.24hobject
results[].result.24h.uniqueBuyersinteger | nullDistinct wallets that bought in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero.
results[].result.24h.uniqueSellersinteger | nullDistinct wallets that sold in this window. null specifically on the shortest window (3h) — a known limitation of the underlying source, not a real zero.
results[].result.24h.uniqueWalletsinteger | nullDistinct 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.
results[].result.24h.buysinteger | nullBuy-side transaction count in this window.
results[].result.24h.sellsinteger | nullSell-side transaction count in this window.
results[].result.24h.volumeUsdobject
results[].result.24h.volumeUsd.buysnumber | null
results[].result.24h.volumeUsd.sellsnumber | null
results[].result.24h.volumeUsd.totalnumber | null
results[].result.24h.priceChangePctnumber | nullPercent 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.
results[].errorstring | nullnull, or unavailable when no source could be reached for this subject — retry it. A subject nobody has data for is NOT an error: its result says so.

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