ACCESS
Authentication
Send your key as a bearer token on every data request. Keys are issued with explicit read scopes and individual request limits.
Authorization: Bearer $STONK_RADAR_API_KEYpairs:readRead the ecosystem and pairing directory.tokens:readRead normalized token markets and analytics.Do not put a key in browser JavaScript, query strings, source control, screenshots or logs. Use it from a server, worker or protected backend route.
TypeScript workspace client
import { StonkRadarClient } from '@stonk/contracts/client';
const radar = new StonkRadarClient({
apiKey: process.env.STONK_RADAR_API_KEY!,
});
const markets = await radar.markets({
ecosystem: 'runescape',
sort: 'volume24h',
});The typed client currently ships inside the Stonk Radar repository workspace and is not published to npm. External apps can use the REST endpoints and OpenAPI specification directly.
GET
/v1/ecosystems
Lists root ecosystems and their known descendant pairings. Each item includes its root mint, label, token and pairing counts, a depth-aware pairing graph, and a partial-coverage flag.
curl 'https://api.stonkradar.fun/v1/ecosystems?page=1&pageSize=100' \
-H "Authorization: Bearer $STONK_RADAR_API_KEY"pairs:readrequired scopeSingle ecosystem
Use an exact root mint for one ecosystem. RuneScape’s root quote is GP.
curl 'https://api.stonkradar.fun/v1/ecosystems/HTmQz7My6MehV7bjhJ6jde8nDND1yvsz68d24LP7YgUQ' \
-H "Authorization: Bearer $STONK_RADAR_API_KEY"GET
/v1/markets
Returns a sortable page of token markets with quote identity, ecosystem roots, price, market cap, 24-hour volume, liquidity, lifecycle, graduation progress, reward distributions and freshness metadata.
curl 'https://api.stonkradar.fun/v1/markets?ecosystem=runescape&status=bonding&sort=progress&dir=desc&pageSize=50' \
-H "Authorization: Bearer $STONK_RADAR_API_KEY"tokens:readrequired scopeecosystemUse runescape, all, or an exact ecosystem root mint.quoteMintRestrict results to an exact quote/pair mint.descendantsSet true to include markets below the selected root or quote.qSearch token symbol, name or mint.statusall, bonding, graduated, or unknown.sortmarketCap, price, volume24h, liquidity, launched, or progress.dirdesc or asc.page / pageSizePositive page number; up to 100 results per page.MODEL
Response shape
Collection endpoints use the same page envelope. Market responses also include aggregate summary data, normalized filters, and a human-readable coverage statement.
{
"items": [
{
"mint": "…",
"pool": "…",
"quoteMint": "…",
"quoteSymbol": "GP",
"ecosystemRoots": ["HTmQz…YgUQ"],
"lifecycle": "bonding",
"graduation": {
"progressPct": 72.4,
"source": "StonkFun",
"observedAt": "2026-09-24T16:00:00.000Z"
},
"rewards": {
"quoteSymbol": "GP",
"distributedTokens": 128400,
"payoutCount": 42,
"holderCount": 117,
"lastPayoutAt": "2026-09-24T15:40:00.000Z"
},
"market": {
"priceUsd": 0.0042,
"marketCapUsd": 420000,
"volume24hUsd": 18000,
"liquidityUsd": null
},
"qualityFlags": [],
"freshness": {
"provider": "DexScreener",
"sourceAt": null,
"fetchedAt": "2026-09-24T16:00:03.000Z"
}
}
],
"page": 1,
"pageSize": 50,
"total": 312,
"totalPages": 7,
"generatedAt": "2026-09-24T16:00:03.000Z",
"summary": {
"tokens": 312,
"pools": 340,
"excludedUnverifiedCaps": 0,
"partial": true
},
"coverage": "…"
}Fields that a provider does not supply remain null. Fetch time does not imply trade-time freshness, and a missing sourceAt remains missing. Valuations above $1 billion that also exceed both 24-hour volume and liquidity by more than 10,000× are flagged unverified_valuation and excluded from aggregate market cap while the raw row remains available for inspection.
OPERATIONS
Limits and freshness
Limits are attached to each key. Standard keys are commonly issued at 60 requests per minute, 10,000 per UTC day and 3 concurrent requests, but your key may differ. Read the response headers instead of assuming a fixed plan.
RateLimit-LimitYour per-minute limit.RateLimit-RemainingRequests remaining in the current minute.RateLimit-ResetSeconds until the minute resets.Retry-AfterReturned with 429; wait before retrying.Active terminal views receive faster refresh priority within bounded provider budgets. Historical and inactive pools may update more slowly, and upstream sources can omit a pool. Check each record’s freshness fields and the response coverage flags before presenting a value as current.