{"openapi":"3.1.0","info":{"title":"Stonk Radar Data API","version":"1.1.0","description":"Read-only Solana/Stonkfun market data. Exact-mint ecosystem graphs and observed markets. Partial coverage; null is unknown, never zero. One preferred pool per token and quote. Summary market cap counts each token mint once; volume/liquidity sum selected quote markets. Quote relationships are observed pool relationships, not ownership or endorsement. Keys are issued privately by the owner."},"servers":[{"url":"https://api.stonkradar.fun/v1"}],"paths":{"/ecosystems":{"get":{"summary":"List ecosystems, with RuneScape first","description":"Requires pairs:read. API keys must remain on your server.","security":[{"bearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":80}}],"responses":{"200":{"description":"Saved market data with explicit coverage and source freshness","content":{"application/json":{"schema":{"type":"object","required":["items","page","pageSize","total","totalPages","generatedAt"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Ecosystem"}},"page":{"type":"integer"},"pageSize":{"type":"integer"},"total":{"type":"integer"},"totalPages":{"type":"integer"},"generatedAt":{"type":"string","format":"date-time","description":"Projection time, not upstream market freshness."}}}}}},"400":{"description":"Invalid filter or pagination"},"401":{"description":"Missing, invalid or revoked bearer key"},"403":{"description":"Key lacks the required scope"},"404":{"description":"Unknown exact identity"},"429":{"description":"Quota or concurrency exceeded; honor Retry-After"},"503":{"description":"Temporarily unavailable"}}}},"/ecosystems/{mint}":{"get":{"summary":"Explore an exact quote mint and all descendant pairings","description":"Requires pairs:read. API keys must remain on your server.","security":[{"bearerAuth":[]}],"parameters":[{"name":"mint","in":"path","required":true,"schema":{"type":"string"},"description":"Exact root mint or runescape."}],"responses":{"200":{"description":"Saved market data with explicit coverage and source freshness","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ecosystem"}}}},"400":{"description":"Invalid filter or pagination"},"401":{"description":"Missing, invalid or revoked bearer key"},"403":{"description":"Key lacks the required scope"},"404":{"description":"Unknown exact identity"},"429":{"description":"Quota or concurrency exceeded; honor Retry-After"},"503":{"description":"Temporarily unavailable"}}}},"/markets":{"get":{"summary":"Search and sort observed markets across ecosystems","description":"Requires tokens:read. API keys must remain on your server.","security":[{"bearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"ecosystem","in":"query","required":false,"schema":{"type":"string","default":"all"},"description":"Exact root mint, runescape, or all. Includes descendants by default."},{"name":"quoteMint","in":"query","required":false,"schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"description":"Optional exact quote; intersects ecosystem."},{"name":"descendants","in":"query","required":false,"schema":{"type":"boolean","default":true},"description":"Expand quoteMint (or ecosystem root when no quoteMint is given) to child pairing markets."},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":80}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["all","bonding","graduated","unknown"],"default":"all"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["marketCap","price","volume24h","liquidity","launched","progress"],"default":"marketCap"}},{"name":"dir","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"default":"desc"}}],"responses":{"200":{"description":"Saved market data with explicit coverage and source freshness","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["items","page","pageSize","total","totalPages","generatedAt"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/MarketToken"}},"page":{"type":"integer"},"pageSize":{"type":"integer"},"total":{"type":"integer"},"totalPages":{"type":"integer"},"generatedAt":{"type":"string","format":"date-time","description":"Projection time, not upstream market freshness."}}},{"type":"object","properties":{"summary":{"$ref":"#/components/schemas/MarketSummary"},"filters":{"type":"object"},"coverage":{"type":"string"}}}]}}}},"400":{"description":"Invalid filter or pagination"},"401":{"description":"Missing, invalid or revoked bearer key"},"403":{"description":"Key lacks the required scope"},"404":{"description":"Unknown exact identity"},"429":{"description":"Quota or concurrency exceeded; honor Retry-After"},"503":{"description":"Temporarily unavailable"}}}},"/pairings":{"get":{"summary":"List quote assets","description":"Requires pairs:read. API keys must remain on your server.","security":[{"bearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Saved market data with explicit coverage and source freshness","content":{"application/json":{"schema":{"type":"object","required":["items","page","pageSize","total","totalPages","generatedAt"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Pair"}},"page":{"type":"integer"},"pageSize":{"type":"integer"},"total":{"type":"integer"},"totalPages":{"type":"integer"},"generatedAt":{"type":"string","format":"date-time","description":"Projection time, not upstream market freshness."}}}}}},"400":{"description":"Invalid filter or pagination"},"401":{"description":"Missing, invalid or revoked bearer key"},"403":{"description":"Key lacks the required scope"},"404":{"description":"Unknown exact identity"},"429":{"description":"Quota or concurrency exceeded; honor Retry-After"},"503":{"description":"Temporarily unavailable"}}}},"/pairings/{mint}/tokens":{"get":{"summary":"List the preferred pool for each token in an exact pairing","description":"Requires tokens:read. API keys must remain on your server.","security":[{"bearerAuth":[]}],"parameters":[{"name":"mint","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"sort","in":"query","required":false,"schema":{"enum":["marketCap","volume","change","launched"],"default":"marketCap"},"description":"volume is one-hour USD volume."},{"name":"dir","in":"query","required":false,"schema":{"enum":["asc","desc"],"default":"desc"}}],"responses":{"200":{"description":"Saved market data with explicit coverage and source freshness","content":{"application/json":{"schema":{"type":"object","required":["items","page","pageSize","total","totalPages","generatedAt"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Token"}},"page":{"type":"integer"},"pageSize":{"type":"integer"},"total":{"type":"integer"},"totalPages":{"type":"integer"},"generatedAt":{"type":"string","format":"date-time","description":"Projection time, not upstream market freshness."}}}}}},"400":{"description":"Invalid filter or pagination"},"401":{"description":"Missing, invalid or revoked bearer key"},"403":{"description":"Key lacks the required scope"},"404":{"description":"Unknown exact identity"},"429":{"description":"Quota or concurrency exceeded; honor Retry-After"},"503":{"description":"Temporarily unavailable"}}}},"/tokens/{mint}":{"get":{"summary":"Read an exact token, quote and pool observation","description":"Requires tokens:read. API keys must remain on your server.","security":[{"bearerAuth":[]}],"parameters":[{"name":"mint","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},{"name":"quoteMint","in":"query","required":true,"schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},{"name":"pool","in":"query","required":true,"schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}}],"responses":{"200":{"description":"Saved market data with explicit coverage and source freshness","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"400":{"description":"Invalid filter or pagination"},"401":{"description":"Missing, invalid or revoked bearer key"},"403":{"description":"Key lacks the required scope"},"404":{"description":"Unknown exact identity"},"429":{"description":"Quota or concurrency exceeded; honor Retry-After"},"503":{"description":"Temporarily unavailable"}}}},"/alerts":{"get":{"summary":"Read public launch alerts","description":"Requires alerts:read. API keys must remain on your server.","security":[{"bearerAuth":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Saved market data with explicit coverage and source freshness","content":{"application/json":{"schema":{"type":"object","required":["items","page","pageSize","total","totalPages","generatedAt"],"properties":{"items":{"type":"array","items":{"type":"object"}},"page":{"type":"integer"},"pageSize":{"type":"integer"},"total":{"type":"integer"},"totalPages":{"type":"integer"},"generatedAt":{"type":"string","format":"date-time","description":"Projection time, not upstream market freshness."}}}}}},"400":{"description":"Invalid filter or pagination"},"401":{"description":"Missing, invalid or revoked bearer key"},"403":{"description":"Key lacks the required scope"},"404":{"description":"Unknown exact identity"},"429":{"description":"Quota or concurrency exceeded; honor Retry-After"},"503":{"description":"Temporarily unavailable"}}}},"/openapi.json":{"get":{"summary":"This OpenAPI specification","security":[],"responses":{"200":{"description":"OpenAPI 3.1 specification"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Pair":{"type":"object","properties":{"quoteMint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"symbol":{"type":"string"},"name":{"type":"string"},"category":{"type":"string"},"firstSeen":{"type":"string","format":"date-time"},"active":{"type":"boolean"}}},"Freshness":{"type":"object","properties":{"provider":{"type":"string"},"sourceAt":{"type":["string","null"],"format":"date-time","description":"Unknown upstream source timestamps remain null."},"fetchedAt":{"type":"string","format":"date-time"},"cacheAgeSeconds":{"type":["number","null"]}}},"Market":{"type":"object","properties":{"priceUsd":{"type":["number","null"],"minimum":0},"priceQuote":{"type":["number","null"],"minimum":0},"marketCapUsd":{"type":["number","null"],"minimum":0},"fdvUsd":{"type":["number","null"],"minimum":0},"volume24hUsd":{"type":["number","null"],"minimum":0},"volume1hUsd":{"type":["number","null"],"minimum":0},"liquidityUsd":{"type":["number","null"],"minimum":0},"priceChange24hPct":{"type":["number","null"]},"priceChange1hPct":{"type":["number","null"]}}},"Graduation":{"type":"object","properties":{"progressPct":{"type":["number","null"],"minimum":0,"maximum":100},"source":{"type":"string"},"observedAt":{"type":["string","null"]},"graduatedAt":{"type":["string","null"]}}},"Token":{"type":"object","properties":{"mint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"pool":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"curvePool":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"Original LaunchLab curve pool, if known; pool is the selected market pool."},"transferFee":{"type":"object","properties":{"bps":{"type":"number"}}},"symbol":{"type":"string"},"name":{"type":"string"},"market":{"$ref":"#/components/schemas/Market"},"createdAt":{"type":"string","format":"date-time"},"stale":{"type":"boolean"},"freshness":{"$ref":"#/components/schemas/Freshness"},"hourlyFreshness":{"$ref":"#/components/schemas/Freshness"},"lifecycle":{"enum":["bonding","graduated","unknown"]},"graduation":{"$ref":"#/components/schemas/Graduation"}}},"MarketToken":{"allOf":[{"$ref":"#/components/schemas/Token"},{"type":"object","properties":{"quoteMint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"quoteSymbol":{"type":"string"},"isQuoteToken":{"type":"boolean"},"rewards":{"$ref":"#/components/schemas/Rewards"},"qualityFlags":{"type":"array","items":{"type":"string","enum":["unverified_valuation"]}},"ecosystemRoots":{"type":"array","items":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}}}}]},"Rewards":{"type":"object","properties":{"quoteMint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"quoteSymbol":{"type":"string"},"distributedTokens":{"type":["number","null"],"minimum":0},"distributedRaw":{"type":["string","null"],"description":"Exact base-unit amount, retained as a string."},"payoutCount":{"type":["integer","null"]},"holderCount":{"type":["integer","null"]},"lastPayoutAt":{"type":["string","null"],"format":"date-time"},"freshness":{"$ref":"#/components/schemas/Freshness"}}},"MarketSummary":{"type":"object","properties":{"excludedUnverifiedCaps":{"type":"integer","description":"Caps above $1B and 10,000x both liquidity and volume are excluded from aggregate cap only; rows retain raw values."},"tokens":{"type":"integer"},"pools":{"type":"integer"},"marketCapUsd":{"type":["number","null"],"minimum":0},"volume24hUsd":{"type":["number","null"],"minimum":0},"liquidityUsd":{"type":["number","null"],"minimum":0},"partial":{"type":"boolean"}}},"Ecosystem":{"type":"object","properties":{"baseToken":{"$ref":"#/components/schemas/MarketToken"},"rootMint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"symbol":{"type":"string"},"name":{"type":"string"},"label":{"type":"string"},"tokenCount":{"type":"integer"},"pairingCount":{"type":"integer"},"partial":{"type":"boolean"},"pairings":{"type":"array","items":{"type":"object","properties":{"quoteMint":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"symbol":{"type":"string"},"name":{"type":"string"},"depth":{"type":"integer"},"parentMints":{"type":"array","items":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}}}}}}}}}}