Know what a token is hiding before your bot buys it.
One GET request returns a safety score, live insider-cluster detection, and on-chain fundamentals for any Solana mint โ the same engine behind TNT House audits, exposed as clean JSON for bots instead of a dashboard for humans.
curl "https://tnt-audit.com/api/v1/token-risk?mint=<MINT_ADDRESS>" \ -H "Authorization: Bearer tnt_sk_your_key_here"
{
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"safety_score": 78,
"cluster_analysis": "complete",
"insider_clusters": [
{
"funder": "9xQe...k2Pd",
"wallets": [
"7uF3...aZ1",
"3mN8...qR2"
]
}
],
"mint_authority": {
"revoked": true,
"address": null
},
"freeze_authority": {
"revoked": true,
"address": null
},
"honeypot_risk": null,
"lp_locked": null,
"holder_distribution": {
"risk_level": "LOW",
"largest_holder_percent": 4.2,
"top10_percent": 22.7,
"holder_count": 20
},
"market": {
"price_usd": 0.0000412,
"liquidity_usd": 84210,
"volume_24h_usd": 512300,
"price_change_24h_percent": 12.4,
"age_days": 3
},
"note": "honeypot_risk and lp_locked detection are on the roadmap and not yet implemented.",
"checked_at": "2026-07-18T12:00:00.000Z"
}Works out of the box with ChatGPT Custom GPT Actions (just paste the URL). For Claude, Gemini, or agent frameworks like LangChain/CrewAI, use this spec as the schema source for your own tool integration โ most of those need a small adapter, LangChain's OpenAPISpec.from_url() being the one that imports it directly.
How it works
Enter your email below. No credit card, no approval wait โ the key is issued instantly.
GET /api/v1/token-risk?mint=<address> with your key in the Authorization header. Typical response time: well under a second.
First-ever check on a mint returns cluster_analysis: "pending" while the insider trace runs in the background โ re-check in a minute or two for the full picture.
Response fields
safety_score0โ100. Weighted from authorities, holder concentration, liquidity, volume, and real insider-cluster penalties.
insider_clustersWallets that share a first-funder โ an on-chain-provable insider/sniper signal, not a guess.
cluster_analysis"pending" on a token's first-ever check (cluster trace runs in the background), "complete" after ~1โ2 minutes.
mint_authority / freeze_authorityWhether each authority is revoked, and its address if still active.
honeypot_risk / lp_lockedOn the roadmap โ currently always null.
holder_distributionLargest holder %, top-10 %, risk level, and holder_count โ the number of accounts in Solanaโs top-20-largest-holders response (a real RPC limit, not a full holder count for widely-held tokens like BONK or USDC).
marketLive price, liquidity, 24h volume, 24h change, and token age from DexScreener.
Every response also includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers โ plus X-Credit-Balance-Usd once you have a paid tier or credit balance โ so your bot can track its quota without ever hitting a 429.
Webhooks for cluster_analysis completion are on the roadmap, not yet available โ for now, re-check the same mint after 1-2 minutes.
Rate Limiting
Every key gets 15 free requests per calendar day (UTC). Go over that with no call-credit balance and you get a 402, not a silent block โ top up or subscribe and the same key keeps working immediately.
X-RateLimit-LimitYour daily quota. Empty on unlimited/admin-issued keys.
X-RateLimit-RemainingRequests left before the free quota runs out today.
X-RateLimit-ResetISO timestamp of the next quota reset (next UTC midnight, or your subscription renewal date).
X-Credit-Balance-UsdYour current call-credit balance, once you have one.
You get an HTTP 402 with a JSON body โ limit, used, reset_at, overage_rate_usd, and an upgrade_url. No retries needed: as soon as you top up credit or subscribe, the same key starts working again on the very next call.
HTTP/1.1 402 Payment Required
X-RateLimit-Limit: 15
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 2026-07-24T00:00:00.000Z
{
"error": "Daily free-tier limit reached and call-credit balance is empty",
"limit": 15,
"used": 16,
"reset_at": "2026-07-24T00:00:00.000Z",
"overage_rate_usd": 0.07,
"upgrade_url": "https://tnt-audit.com/risk-api#billing",
"note": "Top up call credits or subscribe on the upgrade_url page โ overage is billed at $0.07/call once you have a balance."
}Check X-RateLimit-Remaining before firing off a batch of calls โ reading a header costs nothing, a wasted 402 does not.
Versioning & Changelog
The API is versioned in the URL (/api/v1/...). Within v1, existing fields are never removed, renamed, or repurposed โ only added. Integrations should ignore fields they don't recognize rather than fail on them. A genuinely breaking change ships as /api/v2/..., with v1 kept running for a reasonable overlap period โ never a silent in-place break.
v1.52026-07-23- โข Published a ready-to-import Postman collection.
v1.42026-07-21- โข Published a formal OpenAPI 3.0 spec at /openapi.json.
- โข Rebalanced upstream timeout budget for very large/liquid mints, further reducing false holder_distribution failures.
v1.32026-07-19- โข Billing security hardening against invoice/payment-matching abuse โ no response schema change.
v1.22026-07-18- โข Fixed timeouts on upstream calls that could occasionally return a raw 502 on slower, less-major tokens.
- โข Fixed holder_distribution occasionally reporting holder_count: 0 on high-volume tokens due to a swallowed RPC failure.
- โข Fixed implausible price_change_24h_percent values passed through from upstream market data.
v1.12026-07-18- โข Added X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Reset headers, later joined by X-Credit-Balance-Usd.
v1.02026-07-18- โข Public launch: GET /api/v1/token-risk โ safety_score, insider_clusters, mint/freeze authority, holder_distribution, market data.
- โข API-key auth, free tier + pay-per-call + subscription billing via Solana Pay.
No mailing list or webhooks yet for update announcements โ this page and the X / Telegram links in the footer are the way to stay current.
Limits & pricing
- Full response schema
- Insider-cluster detection
- No credit card
- Top up any amount $5โ$500
- Only charged past the free 15/day
- Drops to $0.03/call once subscribed
- 1000 calls included
- $0.03/call overage after that
- Manual renewal โ no auto-charge
Paid in $MRDT / SOL / USDC via Solana Pay โ same payment flow as the rest of TNT House. Solana Pay can't auto-charge, so the subscription is a manual 30-day top-up, not a recurring subscription in the traditional sense.
Manage billing
Subscribe for 1000 calls/30 days, or top up pay-per-call credits. Paid in $MRDT / SOL / USDC via Solana Pay โ same flow as the rest of TNT House.
Instant, free, no card required.