Everything the checker shows is available as JSON. No key, no signup, CORS open. Same code as the page, run server-side.
Inspect one Pons coin. Returns the verdict, the nine checks with their reasoning, and every raw number behind them.
# curl
curl -s "/api/inspect?address=0x2d4c46db3e8f8574ee9d00b94191e57859629d0b" | jq '{bandLabel,total,redFlags}'
# browser / node
const r = await (await fetch("/api/inspect?address=0x2d4c…9d0b")).json()
if (r.ok) console.log(r.bandLabel, r.total, r.redFlags)
Same thing with the address in the path. Handy in a message: /api/check/0x…
Liveness, the RPC ranking this deployment is using, and the Pons contract addresses it trusts.
| Code | Meaning |
|---|---|
| 200 | ok: true with a verdict, or ok: false with a definitive reason ("not a Pons coin", "not a contract", "invalid address"). |
| 503 | ok: false, transient: true. A public RPC dropped the read. Nothing is inferred from a hole; retry once after a second. |
| 400 | Missing or malformed address. |
Successful verdicts are cached at the edge for 90 seconds and served stale for up to ten minutes while refreshing, so a coin everyone is checking costs one chain read. Definitive failures cache for five minutes. There is no key and no quota. Please do not poll the same address faster than the cache; it will not get fresher.
The fields you will actually use. Every integer amount is a string in the smallest unit; divide by 10 ** quoteDecimals for quote-asset amounts and by 1e18 for ETH and token supply.
| Field | Type | What it is |
|---|---|---|
| ok | boolean | False means no verdict. Read error, and transient to decide whether to retry. |
| band | string | based solid mid sus cooked fake |
| bandLabel, bandLine | string | The word to show, and one sentence explaining it. Red flags rewrite bandLine. |
| total | number | 0 to 100. The sum of checks[].points. |
| redFlags | string[] | Any of dev bag, dev dumped, serial launcher, sell reverted. Non-empty caps the band at SUS. |
| checks | object[] | Nine entries: {label, points, max, state, detail}. state is pass, warn or fail. |
| headline | string | Where the creator fee goes, in one sentence. |
| name, symbol, token, curve, creator | string | Token identity and the two contracts behind it. creator is the launcher and default fee recipient. |
| authentic | boolean | The curve points at the official Pons factory. False makes the band fake. |
| quote, quoteDecimals | object, number | What the coin is quoted against: {symbol, name, kind} where kind is native, stable, stock or unknown. |
| graduated, progress, quoteReserve, gradThreshold | mixed | Curve state. progress is percent of the way to graduation. |
| devBagPct, devNonce, devEth | number, number, string | Dev's share of supply, wallet transaction count, ETH balance in wei. |
| holders | object | {available, count, top1Pct, top10Pct, devBoughtPct, devSoldPct, top[], truncated, timedOut}. available: false means the transfer log could not be read; nothing is guessed. |
| devLaunches | object | {available, count, windowHours}. Launches from the same wallet in the last ~2.8 hours. |
| exit | object | state is ok (a sell simulated from the dev's wallet passes), reverted, graduated or untested. |
| creatorTaxBps, snipeTaxStartBps, snipeTaxSeconds | number | Fee config read from the curve. 100 bps is 1%. |
| feesOnCurve, escrowEth, escrowQuote, feesTotal | string | Creator fees accrued and unclaimed, in quote units (escrowEth in wei). |
| flags | object[] | Notes that do not score: stock-quoted, oracle paused, market closed, single-wallet concentration. |
| rpc, rpcPrimary | string | public or dedicated, and the host that served the calls. |
Trimmed real response for BongoCat, captured 7 September 2026. Live values will differ.
{
"ok": true,
"name": "BongoCat", "symbol": "BongoCat",
"band": "sus", "bandLabel": "SUS", "total": 68,
"bandLine": "Red flag: dev dumped. Score capped at SUS.",
"redFlags": ["dev dumped"],
"authentic": true,
"quote": { "symbol": "USDG", "name": "Global Dollar", "kind": "stable" },
"quoteDecimals": 6,
"checks": [
{ "label": "Real Pons curve", "points": 10, "max": 10, "state": "pass", "detail": "Curve points at the official Pons factory." },
{ "label": "Where fees go", "points": 5, "max": 25, "state": "warn", "detail": "Straight to a wallet. Nobody built anything." },
{ "label": "Dev sold?", "points": 0, "max": 10, "state": "fail", "detail": "Dev bought 4.23% and already sold 3.45%." },
… six more
],
"devBagPct": 0.78,
"holders": { "available": true, "count": 116, "top1Pct": 1.93, "top10Pct": 13.9, "devBoughtPct": 4.23, "devSoldPct": 3.45 },
"exit": { "state": "ok" },
"feesOnCurve": "1840170",
"rpc": "public"
}
| Band | Score | Means |
|---|---|---|
| BASED | 85 – 100 | Real machine behind the fees, dev is clean, people are actually here. |
| SOLID | 70 – 84 | Properly built. Nothing sketchy in the config or the dev's hands. |
| MID | 50 – 69 | Standard launch. Nothing wrong, nothing behind it either. |
| SUS | 30 – 49 | Something is off. Read the breakdown first. Any red flag caps here. |
| COOKED | 0 – 29 | Nothing here. A coin, a wallet, and a bag on the dev. |
| FAKE | any | Curve does not point at the Pons factory. Impostor. |
| Check | Weight | Read from |
|---|---|---|
| Real Pons curve | 10 | factory() on the curve equals 0x7eD5…EC7e. Failing this makes the band FAKE. |
| Where fees go | 25 | Bytecode of the fee recipient. Selectors are resolved and matched against engines: buyback, liquidity, treasury, distribution, perps, yield, staking, governance. EIP-7702 and ERC-4337 wallets count as wallets. |
| Dev bag | 15 | balanceOf(deployer) as a share of supply. Over 20% is a red flag. |
| Dev sold? | 10 | Transfer log: dev's inflow versus outflow. Sold half or more of what they bought is a red flag. |
| Dev history | 10 | Launch events from the factory filtered by deployer, plus wallet nonce. Ten or more launches in ~3 h is a red flag. |
| Creator tax | 5 | creatorTaxBps(). 1% is the Pons default. |
| Sniper tax | 3 | snipeTaxSeconds(). 3 s is the default; the 99% figure GMGN shows in a coin's first seconds is this, not a honeypot. |
| Can you get out? | 7 | An eth_call of sell() from the dev's own address on a live curve. A revert is a red flag. Graduated coins get credit for Uniswap V4. |
| Signs of life | 15 | Holder count, fees accruing on the curve or in escrow, pace toward graduation, buyback enabled. |
eth_getLogs, which public RPCs refuse for busy graduated coins; those come back available: false and score neutral instead of guessing. Nothing here is financial advice.Recovered from live curves; the contracts are not verified on the explorer. Confirmed across independent coins.
| Piece | Address |
|---|---|
| Factory | 0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e |
| FeePolicy (Uniswap V4 hook) | 0xE5e702641Ea86F4ae6cC3cDaeD2B886f976Be044 |
| FeeEscrow | 0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e |
| Protocol fee recipient | 0x263ed295dAFaE1d9AAdD6E56c4B6F9f38eE019Dd |