Tokens API
Highest and lowest price over a window
The highest and lowest trustworthy price a token reached over a caller-chosen window, guarded against isolated fabricated prints; each side is null with a count when nothing trustworthy was found.
GET
/api/external/token-analysis/price-range/{chain}/{mint}Chains
- Solana SOL
- BNB Chain BNB
- Ethereum ETH
- Base BASE
- Robinhood Chain RHC
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/price-range/SOL/<mint>?from=<from>&to=<to>"
| Parameter | Description |
|---|---|
fromquery · integer · required | Window start, Unix SECONDS. Aligned down to the nearest internal bucket boundary before asking the source, so the answer covers a superset of what you asked for rather than risking a missed edge extreme. |
toquery · integer · required | Window end, Unix SECONDS. Inclusive. The window may not exceed 90 days — the widest window this endpoint has been measured against — and a wider one returns 400. |
chainpath · string · required | SOL, ETH, BNB, BASE and RHC; STABLE and ARC both return 400. STABLE, because the wired source rejects the chain outright. ARC, because this deployment has no configured path to it, the same pre-existing gap the ohlcv endpoint already carries. CELO, ARB, OP and SCROLL return 400 here. |
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 |
|---|---|---|
high | number | null | The highest TRUSTWORTHY price in the window. Built from an internal candle series: a candle whose high sits more than 5x beyond its own open/close is FLAGGED, not excluded outright, then adjudicated with one conditional extra call to the source's own trade feed for that exact bucket (a deliberately over-sensitive flag — measured to fire on roughly 0.06% of candles — because the flag only has to be cheap, not correct; the trade feed decides). A CONFIRMED flag publishes the extreme as normal: a genuinely extreme wick is real information and is never dropped. A REFUTED flag is excluded and the next-highest candidate is tried instead (highGuardedCount counts how many). When the trade feed cannot be reached or the adjudication cannot be completed, this is null and highUnavailableCount is positive — a THIRD, deliberately honest answer, distinct from "no data" and from "refuted": this service could not determine whether the candidate was real. Cost: the common case (no flag) is the same single upstream call this endpoint has always made; a flagged candidate costs one to several further calls while its bucket's trade history is walked, capped, after which an unresolved walk also reports highUnavailableCount rather than guessing either way. null with both counts at 0 means no candle answered at all. Two things no version of this guard can catch, because both leave an internally consistent candle: a candle that is wrong UNIFORMLY across its whole body (open, high, low and close all scaled together), and a candle that simply MISSES the true extreme without contradicting itself (observed live: one candle understated how far a price actually moved by roughly 6x10^7). |
highAt | number | null | The Unix-second OPEN of the candle bucket high came from. null exactly when high is. |
low | number | null | The lowest TRUSTWORTHY price in the window, guarded and adjudicated the same way as high — a candle whose low sits more than 5x below its own open/close is flagged and falsified against the trade feed rather than excluded outright. Same three distinguishable states as high, read against lowGuardedCount/lowUnavailableCount. |
lowAt | number | null | The Unix-second OPEN of the candle bucket low came from. null exactly when low is. |
highGuardedCount | integer | How many flagged candidate highs were checked against the trade feed and definitively REFUTED (or could not even be checked, because their own open/close was missing) before high was chosen. 0 with highUnavailableCount also 0 means every candle that answered was trusted outright, or none existed — see high's own description for how to tell those apart. |
highUnavailableCount | integer | How many flagged candidate highs could not be adjudicated at all (the trade-feed call failed, or was inconclusive after being walked as far as this service will walk it) — positive here means high is null NOT because nothing exists and NOT because it was refuted, but because this service genuinely could not tell. Always 0 on STABLE and ARC — both are refused before any candle is fetched — and expected to be rare everywhere else, since it only applies to the small minority of candidates the flag catches in the first place. |
lowGuardedCount | integer | The low-side twin of highGuardedCount. |
lowUnavailableCount | integer | The low-side twin of highUnavailableCount. |
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