Docs & free API

Nine on-chain checks,
one GET request.

Everything the checker shows is available as JSON. No key, no signup, CORS open. Same code as the page, run server-side.

Base URL:

Endpoints

GET/api/inspect?address=0x…

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)
GET/api/check/:address

Same thing with the address in the path. Handy in a message: /api/check/0x…

GET/api/health

Liveness, the RPC ranking this deployment is using, and the Pons contract addresses it trusts.

Status codes

CodeMeaning
200ok: true with a verdict, or ok: false with a definitive reason ("not a Pons coin", "not a contract", "invalid address").
503ok: false, transient: true. A public RPC dropped the read. Nothing is inferred from a hole; retry once after a second.
400Missing or malformed address.

Caching and fair use

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.

Response

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.

FieldTypeWhat it is
okbooleanFalse means no verdict. Read error, and transient to decide whether to retry.
bandstringbased solid mid sus cooked fake
bandLabel, bandLinestringThe word to show, and one sentence explaining it. Red flags rewrite bandLine.
totalnumber0 to 100. The sum of checks[].points.
redFlagsstring[]Any of dev bag, dev dumped, serial launcher, sell reverted. Non-empty caps the band at SUS.
checksobject[]Nine entries: {label, points, max, state, detail}. state is pass, warn or fail.
headlinestringWhere the creator fee goes, in one sentence.
name, symbol, token, curve, creatorstringToken identity and the two contracts behind it. creator is the launcher and default fee recipient.
authenticbooleanThe curve points at the official Pons factory. False makes the band fake.
quote, quoteDecimalsobject, numberWhat the coin is quoted against: {symbol, name, kind} where kind is native, stable, stock or unknown.
graduated, progress, quoteReserve, gradThresholdmixedCurve state. progress is percent of the way to graduation.
devBagPct, devNonce, devEthnumber, number, stringDev's share of supply, wallet transaction count, ETH balance in wei.
holdersobject{available, count, top1Pct, top10Pct, devBoughtPct, devSoldPct, top[], truncated, timedOut}. available: false means the transfer log could not be read; nothing is guessed.
devLaunchesobject{available, count, windowHours}. Launches from the same wallet in the last ~2.8 hours.
exitobjectstate is ok (a sell simulated from the dev's wallet passes), reverted, graduated or untested.
creatorTaxBps, snipeTaxStartBps, snipeTaxSecondsnumberFee config read from the curve. 100 bps is 1%.
feesOnCurve, escrowEth, escrowQuote, feesTotalstringCreator fees accrued and unclaimed, in quote units (escrowEth in wei).
flagsobject[]Notes that do not score: stock-quoted, oracle paused, market closed, single-wallet concentration.
rpc, rpcPrimarystringpublic or dedicated, and the host that served the calls.

Example

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"
}

The scale

BandScoreMeans
BASED85 – 100Real machine behind the fees, dev is clean, people are actually here.
SOLID70 – 84Properly built. Nothing sketchy in the config or the dev's hands.
MID50 – 69Standard launch. Nothing wrong, nothing behind it either.
SUS30 – 49Something is off. Read the breakdown first. Any red flag caps here.
COOKED0 – 29Nothing here. A coin, a wallet, and a bag on the dev.
FAKEanyCurve does not point at the Pons factory. Impostor.

The nine checks

CheckWeightRead from
Real Pons curve10factory() on the curve equals 0x7eD5…EC7e. Failing this makes the band FAKE.
Where fees go25Bytecode 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 bag15balanceOf(deployer) as a share of supply. Over 20% is a red flag.
Dev sold?10Transfer log: dev's inflow versus outflow. Sold half or more of what they bought is a red flag.
Dev history10Launch events from the factory filtered by deployer, plus wallet nonce. Ten or more launches in ~3 h is a red flag.
Creator tax5creatorTaxBps(). 1% is the Pons default.
Sniper tax3snipeTaxSeconds(). 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?7An 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 life15Holder count, fees accruing on the curve or in escrow, pace toward graduation, buyback enabled.
What this is not. It scores plumbing and behaviour, never price. A BASED coin can go to zero. Two checks depend on 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.

Pons contracts it trusts

Recovered from live curves; the contracts are not verified on the explorer. Confirmed across independent coins.

PieceAddress
Factory0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e
FeePolicy (Uniswap V4 hook)0xE5e702641Ea86F4ae6cC3cDaeD2B886f976Be044
FeeEscrow0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e
Protocol fee recipient0x263ed295dAFaE1d9AAdD6E56c4B6F9f38eE019Dd