Discovery and markets API
Biggest price movers on Solana, by window
Tokens on Solana ranked by price change over a chosen window (6h/12h/24h), biggest move first — includes tokens that FELL. Ordering is derived from price change, not an opaque score.
/api/external/discovery/movers/{chain}What it returns
The tokens whose price moved most over ONE window (6, 12 or 24 hours), biggest absolute move first. This is a MOVEMENT ranking, not a "winners" list: the bottom of it is tokens that FELL — a measured 24-hour ranking ran from +12.22% down to -13.16%, so appearing near the bottom of this list means a token dropped hard, not that it is a small gainer. The window is NOT interchangeable: a token ranked near the top over 24 hours can be flat or falling over 6, because each window is ranked by its OWN price change and nothing else. Ordering is DESCENDING by that window's own percent price change, recomputed by this API from the field returned on each row — never taken on trust from the upstream order. A tie (two rows with the identical percent change, including two nulls) breaks by mint address, ascending — deterministic and reproducible from fields this response itself publishes, not dependent on the wired source's own internal row order. Rows are identified by mint address, never by ticker: unrelated tokens on this chain reuse the same ticker. Solana only — every other chain returns 400, because the wired source has no chain parameter at all. This source is also the slowest on this surface's discovery family to answer (over a second, typically), so expect higher latency here than from search or realized-pnl-leaders.
Chains
- Solana SOL
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/movers/SOL"
| Parameter | Description |
|---|---|
windowquery · string · optional | Which trailing window to rank movement over: 6h, 12h or 24h. Defaults to 24h. Shorter windows (5m/15m/30m/1h) are not offered: on 2026-09-16 every token's price change was measured as a literal zero on the wired source's shorter windows, which would sort a constant column rather than rank anything. A follow-up measurement one day later found that had been an outage, not a permanent gap, and shorter windows now carry real, varied values — this endpoint deliberately keeps the enum at 6h/12h/24h anyway, more conservative than that one-day recovery alone would justify widening it to.6h12h24h |
chainpath · string · required | Solana only; every other chain returns 400, because the wired source has no chain parameter at all — it indexes Solana exclusively. |
Response fields
A JSON response. Every field is always present; null means the value could not be established, never zero.
| Field | Type | Description |
|---|---|---|
window | string | The window this ranking covers — always echoes the request (or its default). |
ranked | boolean | False when the wired source returned every row sharing the identical priceChangePercent for this window — a shape this endpoint has only ever measured arising from an upstream outage, never from a genuinely flat market. movers is still returned in that case (the addresses/prices themselves are real), but its order carries no information and must not be read as a ranking. True in every other case, including a genuinely empty movers (nothing to rank is not the same as something unrankable). |
movers | object[] | Sorted strictly descending by priceChangePercent for the requested window. Includes tokens that are DOWN over that window — this is a movement ranking, not a gainers list. |
movers[].address | string | The token's mint address. |
movers[].name | string | null | The token's name as reported by the underlying index, or null when none was reported. |
movers[].symbol | string | null | The token's ticker as reported by the underlying index, or null when none was reported. |
movers[].priceChangePercent | number | null | Percent price change over the requested window, signed — this is the field the list is sorted by, descending. A negative value is a real fall, not an error; a real zero means measured no movement over this window, distinct from null (this source reported nothing for this row and window). |
movers[].priceUsd | number | null | Current USD price, or null when not reported. |
movers[].liquidityUsd | number | null | Pooled USD liquidity, or null when not reported. |
movers[].marketCapUsd | number | null | USD market capitalisation, or null when not reported. |
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