Tokens

Token risk / safety score

Transparent 0–100 rug-risk score (higher = riskier) with a per-factor breakdown — mint/freeze authority, liquidity depth & thinness, Token-2022 transfer fee, LP burn, bundled/sniped open, deployer track record, KOL distribution, supply inflation (on-chain supply grown above expected = stealth-mint/dilution), and blacklist. Composed from the same data layer as GET /token/{mint} (no extra latency). Returns band (safe/caution/danger), factors[] (each with status + points + detail), and the raw inputs (including supply_inflation_pct and sniper_footprint). The top-level dev block (nullable) is the deployer self-activity read: create-tx self-buy (buy_sol/buy_tokens/buy_supply_pct), post-create own-mint trading (bought_tokens_after, sold_tokens, sold_sol, first_sell_at/last_sell_at), and live on-chain holdings (holdings_tokens, holdings_supply_pct, wallet_empty), each with its own observation time (holdings_observed_at, activity_rollup_through), plus transfer_status (none_detected | suspected | unknown): a balance below what the dev's own recorded trades explain is only ever SUSPECTED (a sell on an uncaptured venue looks identical), and misaligned or missing observations are unknown; transferred_out is its deprecated boolean view. Carries score_version (now v2) and as_of (response time — not an observation time).

Score v2 (2026-09-21): the LP factor no longer credits a token-SUPPLY burn (mc-tracker's burn flag) — LP custody is not observed for Solana pools, so lp_burn is warn/8 with inputs.lp_burn_status: unknown unless verified LP evidence exists; an unknown transfer fee is warn/4, not "No transfer fee"; deployer reputation scores only an established history. assessment says whether every input was observed: incomplete lists unknown_inputs and the band is never safe; a failed lookup of a score-critical input is a retryable 503 (code: risk_inputs_unavailable), never a score computed without it. Same loader on every transport: POST /tokens/batch/risk and x402 return identical scores for identical evidence; batch skips only the live dev-holdings RPC (dev.holdings_* null, transfer_status: unknown). The coverage object (shared TradeCoverage shape) discloses whether the mint sits inside the launchpad trade capture, with a note naming which sub-fields are trade-derived (cohort/sniper/bundle factors, dev sell rollup) vs pure on-chain reads (authorities, liquidity, live holdings) that are unaffected. PRO+.

get/tokens/{mint}/risk

Request

  • Base URL: https://madeonsol.com/api/v1
  • URL: https://madeonsol.com/api/v1/tokens/{mint}/risk
  • Auth: HTTP bearer

Path parameters

mintstring required
Example:FfuWjhMm5LP3anZ5zq8SG4iqzYVvhM4LoyNMM957pump

Response

OK

mintstring

The mint scored. Equals the path value unless the path was a PumpSwap pool address, in which case this is the pool's resolved mint and resolved_from is set.

risk_scoreinteger
band'safe' | 'caution' | 'danger'

Never safe while assessment.status is incomplete, or with an un-revoked mint/freeze authority

score_version'v2'

v2 (2026-09-21): a token-supply burn no longer earns the LP-burn credit (v1: burn_detected=true → 0, every other token → 8; v2: every token without verified LP evidence → 8, burned or not — no burn penalty); unknown transfer fee is warn(4) not "No transfer fee"; deployer reputation scores only an established history; unknown inputs keep the band off safe.

dev_status'ok' | 'not_found' | 'unavailable'

ok = dev block present · not_found = no pending_deploys row (not a launchpad deploy we saw) · unavailable = the lookup failed

as_ofstring date-time

Response time — not the observation time of any input

Example response

{
  "resolved_from": {
    "dex": "pumpswap"
  },
  "coverage": {
    "history_start": 1775984757,
    "scope": "pump.fun pipeline (pump.fun, LaunchLab/bonk, bags)",
    "size_floor": {
      "min_sol": 0.05,
      "min_stable_usd": 3.5,
      "applies_to": "buys and SOL-spending legs; SOL-receiving sells of any size are kept"
    }
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.