Discovery and markets API
Which tokens are climbing a bonding curve, or just graduated
Tokens on a bonding curve that traded in the last hour, or just graduated, on Solana/BNB, optionally in a progress band such as 70-99%. Read createdAtIso for age. No risk signal.
/api/external/discovery/launch-progress/{chain}What it returns
Answers exactly ONE of two disjoint lifecycle questions, chosen by the REQUIRED stage parameter: stage=launching ("which tokens are closest to finishing their bonding curve right now?", sorted by completion percentage descending) or stage=graduated ("which tokens just finished their bonding curve?", sorted by graduation time descending, most recent first). stage=launching lists only tokens that traded within the last hour, so curves that finished funding long ago and never migrated are left out. These two sets share no rows with each other at any given moment, so there is no default stage and an unknown value is rejected before any upstream call. To screen a band of the curve, for example 70-99%, pass minProgressPct=70&maxProgressPct=99.99 with stage=launching: both bounds are inclusive, and without a max below 100 the top of the list is tokens already at 100% waiting to migrate. ONLY SOL AND BNB ARE SERVED — every other chain 400s naming itself. IMPORTANT — THIS ENDPOINT CARRIES NO RISK SIGNAL OF ANY KIND, ON EITHER CHAIN: its only wired source publishes no verified/risk/scam field at all, so a token appearing here, however close to graduating, is UNVETTED — follow up with security/authorities/sellability before treating it as safe. progressPct of 0 is a real, common reading meaning the launch has not started funding yet, never "unknown" — do not read a null progressPct as zero or a zero as null. Do not derive graduated from progressPct reaching 100: a token can sit at 100% funded with graduated still false while its migration transaction is pending. This is a DIFFERENT question from GET /discovery/new-listings?stage=graduating or ?stage=graduated: that endpoint derives migration from a different source's pool structure on Solana only; this endpoint reads a source-computed completion percentage covering SOL and BNB, and a live overlap check found the two rosters are not the same tokens. Rows are identified by address, never by symbol: symbol is null on some populated rows and is not unique in this population.
Chains
- Solana SOL
- BNB Chain BNB
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/launch-progress/SOL?stage=launching"
| Parameter | Description |
|---|---|
stagequery · string · required | REQUIRED, no default. "launching" (closest to finishing first) or "graduated" (most recently graduated first).launchinggraduated |
minProgressPctquery · number · optional | stage=launching only. Lowest completion percentage to list, 0-100, inclusive. Default 0. |
maxProgressPctquery · number · optional | stage=launching only. Highest completion percentage to list, 0-100, inclusive. Default 100. Pass 99.99 to leave out tokens already at 100% waiting to migrate. |
chainpath · string · required | Only SOL and BNB answer this endpoint — every other chain 400s naming itself rather than returning a blank not-found. |
Response fields
A JSON response. Every field is always present; null means the value could not be established, never zero.
| Field | Type | Description |
|---|---|---|
stage | string | Echoes the requested stage. |
results | object[] | stage=launching: tokens that traded in the last hour, sorted by progressPct descending. stage=graduated: sorted by graduatedAtUnixTime descending. Empty when the source genuinely has nothing. |
results[].address | string | The token's mint (Solana) or contract address (BNB). Never identify a row by symbol instead. |
results[].name | string | null | The name as reported by the underlying source, or null when none was reported. |
results[].symbol | string | null | The ticker as reported by the underlying source, or null when none was reported — confirmed null on some populated rows. |
results[].progressPct | number | null | Bonding-curve/funding-round completion, 0-100. A real 0 means the launch has not started funding yet, never "unknown". null means this row was reported but not this field. |
results[].graduated | boolean | null | Whether the migration transaction has actually landed. Do not derive this from progressPct reaching 100 — a token can sit at 100% funded with this still false. |
results[].graduatedAtUnixTime | number | null | Unix seconds once graduated; null (an explicit reported value, not an absence) while still climbing. |
results[].createdAtUnixTime | number | null | Unix seconds of the transaction that created this token, or null when that transaction is not indexed — seen on some Solana launches, mostly graduated ones. |
results[].createdAtIso | string | null | The same instant as createdAtUnixTime, as ISO 8601 UTC, e.g. 2026-09-24T20:24:58Z. null exactly when createdAtUnixTime is null. |
results[].lastTradeUnixTime | number | null | Unix seconds of the newest trade on any pool, or null when none was reported. |
results[].venue | string | null | The launch venue, e.g. "pump_dot_fun", "four.meme", "flap". null when none was reported. |
results[].creator | string | null | The wallet that created this launch, or null when none was reported. |
results[].marketCapUsd | number | null | USD market capitalisation, or null when none was reported. |
results[].liquidityUsd | number | null | Pooled USD liquidity, or null when none was 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