Loading...
Loading...
The same production security engine behind RugCheck β as a free JSON API for bots, terminals, and apps. Works on any Solana mint.
Two versioned endpoints under /api/v1/: a full safety report and a lightweight risk score. Responses are stable β changes are additive only; breaking changes would ship as /api/v2, never as in-place edits. Clients should ignore unknown fields.
Reports cover authorities, honeypot & live sell simulation, Token-2022 extensions, liquidity locks, holder & cluster analysis, launch integrity, and creator reputation. Every warn/fail finding carries the concrete on-chain evidence behind it.
Base URL: https://thunderlaunch.fun Β· JSON over HTTPS Β· timestamps in ISO-8601 UTC Β· OpenAPI 3.0 spec
Generate a typed client from the spec:
# TypeScript types npx openapi-typescript https://thunderlaunch.fun/openapi/rugcheck-v1.yaml -o rugcheck.d.ts # Full SDK in any language (typescript-fetch, python, go, rust, ...) npx @openapitools/openapi-generator-cli generate \ -i https://thunderlaunch.fun/openapi/rugcheck-v1.yaml -g typescript-fetch -o ./rugcheck-sdk
Anonymous access works β no key, no signup, per-IP rate limits. For higher limits, create a key at /profile/api-keys with the RugCheck API (read) permission (rugcheck:read scope) and send it via either header:
X-API-Key: sk_your_key # or Authorization: Bearer sk_your_key
A key that is invalid, expired, or missing the scope returns an explicit 401/403 β it is never silently treated as anonymous, so integration mistakes surface immediately.
| Endpoint | Anonymous | With API key |
|---|---|---|
| GET /api/v1/rugcheck/{mint} | 10 / min per IP | your key's limit, up to its tier ceiling |
| GET /api/v1/risk/{mint} | 30 / min per IP | your key's limit, up to its tier ceiling |
429 responses include retryAfterSeconds. Reports are cached ~5 minutes server-side β repeat lookups of the same mint are fast and cheap; the first scan of a cold mint can take several seconds. Keyed callers additionally have a monthly fresh-scan quota β cached reads never count.
Tiers meter fresh scans per monthβ a scan of a mint whose report isn't already cached. Cached reads are free and unlimited on every tier. Paid tiers are prepaid 30-day terms paid in SOLat the live rate β upgrade from the key's crown icon on /profile/api-keys.
1,000
fresh scans / month
up to 60 req/min
batches up to 10 mints
Every key starts here
10,000
fresh scans / month
up to 300 req/min
batches up to 50 mints Β· forceRefresh
Bots & apps in production
100,000
fresh scans / month
up to 1,000 req/min
batches up to 100 mints Β· forceRefresh Β· rugged webhooks
High-volume platforms
Renewing the same tier extends the current term. Switching tiers pro-rates your unused time into the new tier by price (e.g. 20 remaining Pro days carry over as ~5 Scale days) β paid value is never lost. When a paid term lapses, the key drops back to Free automatically.
Cancellation:cancel anytime from the key's Upgrade dialog. No refund is issued β payments are prepaid and non-refundable; your tier and quota stay active until the end of the paid term, then the key returns to Free. Re-upgrading at any time reactivates the subscription.
Complete safety report for any Solana mint: scores, verdict, hard-cap flags, market and holder context, creator reputation, and the full evidence-backed findings list.
curl https://thunderlaunch.fun/api/v1/rugcheck/DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 \ -H "X-API-Key: sk_your_key" # optional β omit for anonymous access
{
"success": true,
"data": {
"apiVersion": "v1",
"mint": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
"scannedAt": "2026-07-27T04:11:02.101Z",
"cached": true,
"token": { "name": "Bonk", "symbol": "BONK", "imageUrl": "https://β¦", "isNative": false },
"safetyScore": 87,
"riskScore": 13,
"riskLevel": "low",
"verdict": "Safe",
"summary": "No critical on-chain risks detected. β¦",
"rugged": false,
"ruggedAt": null,
"flags": [],
"market": { "priceUsd": 0.0149, "marketCap": 1312187272150, "liquidityUsd": 36263874, "volume24h": 894217, "pairAgeDays": 907.5 },
"holders": { "totalHolders": 970000, "effectiveHolders": 641000, "topHolderPct": 4.9, "devHoldingsPct": 0, "insiderClusterPct": 1.2 },
"creator": { "deployer": "β¦", "priorLaunches": 1, "ruggedLaunches": 0, "isSerialRugger": false },
"findings": [
{ "category": "Authorities", "check": "Mint Authority", "status": "pass", "severity": "info",
"evidence": "Mint authority is revoked.", "explanation": "No one can create new tokens and dilute holders." }
],
"dataAvailability": { "market": true, "holders": true, "launchIntegrity": false, "creator": true, "manipulation": true, "sellSimulation": true }
}
}100 - riskScore); verdict bands: Safe / Caution / High Risk / Danger.falsemeans "unverifiable", never "passed".paid_tier_required otherwise); the forced build counts against your monthly quota.Lightweight score for high-volume programmatic use (snipe filters, trading bots). Same engine and cache as the full report, ~50Γ smaller response. Note it returns the risk score (higher = riskier).
curl https://thunderlaunch.fun/api/v1/risk/DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263
{
"success": true,
"data": {
"mint": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
"riskScore": 13,
"riskLevel": "low",
"verdict": "Safe",
"flags": [],
"rugged": false
}
}Recommended fail-closed pattern for bots: treat any non-2xx response, rugged: true, or non-empty flagsas "do not trade".
Resolve many mints in one call β API key required. Batch caps by tier: 10 (Free) / 50 (Pro) / 100 (Scale) mints per call. Default items carry the lightweight risk shape; pass full: true for complete reports.
curl -X POST https://thunderlaunch.fun/api/v1/rugcheck/batch \
-H "X-API-Key: sk_your_key" -H "Content-Type: application/json" \
-d '{"mints": ["DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"]}'ok/error per mint; an invalid mint or exhausted quota fails that item, never the whole batch.Two lookback endpoints, included with any API key (pure DB reads β they never consume fresh-scan quota):
# Scan summary + 30-day monitor time series (holders, liquidity, price, net flow)
curl -H "X-API-Key: sk_your_key" \
https://thunderlaunch.fun/api/v1/rugcheck/DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263/history
# β { summary: { scanCount, firstScannedAt, peakLiquidityUsd,
# liquidityDrawdownPct, rugged, ... },
# snapshots: [ { capturedAt, holderCount, liquidityUsd, priceUsd,
# netFlowSol, ... } ] } # 10-min cadence, max 500 points
# 404 not_found = never scanned β scan it first via the report endpointliquidityDrawdownPctis the % of peak liquidity that has left the pool β a rising drawdown on a token you hold is the classic slow-rug signature. Funding-source data appears once the wallet's tokens have been scanned.
Get an HTTP POST the moment a token's pool is drained and marked terminally rugged β Scale-tier keys only (up to 5 subscriptions per key). Omit mints to alert on every rugged token, or list specific mints to watch.
curl -X POST https://thunderlaunch.fun/api/v1/webhooks \
-H "X-API-Key: sk_your_scale_key" -H "Content-Type: application/json" \
-d '{"url": "https://your-server.com/hooks/rugged"}'
# β 201 { data: { id, secret: "whsec_...", ... } } β save the secret
# List / delete:
curl -H "X-API-Key: sk_your_scale_key" https://thunderlaunch.fun/api/v1/webhooks
curl -X DELETE -H "X-API-Key: sk_your_scale_key" https://thunderlaunch.fun/api/v1/webhooks/<id>Delivery cadence is ~5 minutes from the rugged transition. Rugged is terminal, so each subscription receives exactly one alert per mint. Always verify the signature β anyone can POST to your URL.
| HTTP | Code | Meaning |
|---|---|---|
| 400 | invalid_mint | Not a valid base58 Solana address |
| 400 | invalid_wallet | Not a valid base58 wallet address (deployer endpoint) |
| 404 | not_found | Mint never scanned (history) / webhook not found |
| 400 | invalid_request | Malformed body (batch: missing/empty mints array) |
| 400 | batch_too_large | Batch exceeds your tierβs cap (limit/got included) |
| 401 | invalid_key | An API key was sent but is invalid or expired |
| 401 | key_required | The batch endpoint requires an API key |
| 403 | missing_scope | The API key lacks the rugcheck:read scope |
| 403 | paid_tier_required | forceRefresh requires a Pro or Scale tier key |
| 403 | scale_tier_required | Webhooks require a Scale tier key |
| 400 | too_many_webhooks | Active webhook subscription cap reached for this key |
| 429 | rate_limited | Per-IP or per-key limit exceeded (retryAfterSeconds included) |
| 429 | quota_exceeded | Monthly fresh-scan quota reached (used/limit included) β cached reads still served |
| 500 | scan_failed | The core engine failed for this mint β retry later |
| 503 | quota_unavailable | Quota service temporarily unreachable β fresh scans paused, cached reads still served |
| 503 | capacity | Global daily fresh-scan capacity exhausted β resets at UTC midnight |
| 503 | disabled | RugCheck is temporarily switched off |
All non-2xx responses use { "success": false, "error": "<code>", "message": "<human-readable>" }
retryAfterSeconds.RugCheck is an informational on-chain safety analysis, not financial advice. A clean score is not a guarantee of safety β always do your own research.