ANALyzer69000
Analyzer69000 · Developer API v1

One API. Eight chains.
Every pool. Free.

Honeypot simulation - LP burn & lock verification - deployer rug-history - Solana Token-2022 controls - P-Token-aware indexing - ownership / proxy / verified source · dangerous-function scan · deterministic rug-risk & blue-chip scores · full deployer trail · launch-bundle detection · live holder map with roles (pump.fun curve, LP, burn, deployer, retail). Every pool across every chain a token ever touched. Built in-house. No auth. No wallet connect. CORS-open. Integrates in under sixty seconds.

FREE forever at this tier CORS: * 8 chains 30/min · 300/hour 12h server cache 7 embed variants · 9 themes
New: Telegram bot — paste any address, instant forensics in-chat
Add to DMs or any group · replies with verdict, score, bundle, safety in under 2s
Open bot →

🆕 What's new

Recent changes · click any entry to expand. Expand all · Collapse all

2026-05-22 · Imposter detection · chain-hop abandonment · canonical-chain compare
  • Canonical-chain compare (new) — when a token is verified as canonical on a secondary chain (e.g. the real PEPE deployment on BSC while ETH holds 98% of the project's liquidity), the report now resolves the canonical-chain contract address and surfaces a one-tap "scan the primary deployment" link. Lets users instantly compare two real deployments of the same brand that may have materially different security properties — for example, the ETH PEPE is fully renounced and immutable while the BSC PEPE has an active multisig that can mint. Same name, different controls. Now obvious at a glance instead of buried in the contract details.
  • Chain-hop abandonment detection (new) — when a project's main liquidity has migrated to a newer deployment on a different chain (the original-chain pool is shrinking while a fresh contract on another chain holds the majority of total cross-chain liquidity), the report flags the original chain as "holders may be stranded" and pushes the verdict to LIKELY_RUG. Catches the pattern of a team launching a new contract on a new chain and walking away from the original — the BSC → ETH chain-hop is the most common variant, but Base → Solana and the reverse all trigger.
  • Cross-chain liquidity share (new) — for canonical multi-chain tokens, the report now identifies which chain holds the dominant share of total cross-chain liquidity and surfaces the scanned chain's own share. If most liquidity lives on a different chain, the scanned instance is shown as a secondary deployment — informational, no penalty — and the single-chain structural mismatch detectors are softened accordingly.
  • Imposter / brand-squat detection (new · Tier-1 signal) — when a scanned token's name and symbol match an established real project but the contract address is not in that project's verified deployments across any chain, the report now flags it as an imposter and pushes the verdict to LIKELY_RUG. Catches the pump.fun PEPE / BSC SHIB / Base UNI epidemic where permissionless launchpads spawn brand-squats that drain users on name recognition. Severity tiers: confirmed_imposter (real project has a verified address on this same chain at a different address), likely_imposter (real project exists, scanned contract not in its deployments), suspected_imposter (symbol collision on a smaller-cap project). A canonical block surfaces the real project's name, market cap, official chains, and homepage so users can find the real contract.
  • Verified-canonical positive signal (new) — when the scanned address matches the canonical project's verified contract on this chain, a small blue-chip bump fires and the report shows a "verified canonical" chip. Distinguishes the real PEPE from copycat PEPEs.
  • Bridge-aware structural scoring (new) — cross-chain bridged tokens (LayerZero OFT, xERC20, Chainlink CCIP, OP Stack mintable, Arbitrum L2 gateway, ERC-4626 vaults) now have the new mcap-to-DEX-liquidity and CEX-volume-detached signals softened or skipped. Bridged tokens have liquidity primarily on their canonical chain; the scanned chain is a node in a multi-chain mesh, so single-chain liquidity is structurally a fraction of total market cap. Upgradeable proxies on bridge tokens with multisig governance get a softer penalty as well — being upgradeable is a protocol requirement for bridge mechanics, not a private-key rug vector.
  • Fairer scoring for multisig-governed tokens — when a token's mint or admin powers are held by a properly configured multisig (e.g. a Gnosis Safe with several signers and a meaningful threshold) or by a DAO governor / timelock contract, the report now treats those powers as multi-party governance levers rather than as a single-key rug vector. Visible-source findings like a mint function no longer stack on top of the same fact a second time. The control still shows on the report — it just no longer pushes a CEX-listed protocol token into a rug verdict on its own.
  • Multi-chain market cap and FDV accuracy — for tokens whose canonical supply lives on a different chain than the contract being scanned (e.g. a token native to Ethereum but also deployed on Base or BSC), the scanner now reconciles the displayed market cap and fully-diluted valuation with the canonical token's reported circulating and total supply. Previously these figures could appear out of order on cross-chain deployments; that's fixed.
  • Centralized-exchange listings contribute to the confidence score — broad listings across active centralized exchanges now register as a positive trust signal, with an extra bump when at least one tier-1 exchange is in the mix. Mirrors the listing scrutiny those venues already perform.
  • Concentrated-liquidity pools no longer penalized for being unmeasurable — Uniswap V3 (and forks like PancakeSwap V3 / Aerodrome Slipstream) hold liquidity as individually-owned NFT positions, so an aggregate "% locked" simply doesn't apply the same way it does for V2 pools. When no per-position locker data is available, the report now discloses that as informational instead of scoring it as unlocked liquidity. The position-holder advisory chip stays visible.
  • Anti-bot defenses better distinguished from honeypots — many legitimate ERC-20s ship anti-MEV / anti-sniper logic that can trip an automated sell test on bot-signature wallets. When independent cross-checks agree real users can sell — clean static analysis, broad holder base, active markets, or active centralized-exchange listings with real daily volume — the chip is shown as informational instead of contributing to rug risk. A real honeypot still scores as a hard fail.
  • Structural exit-liquidity mismatch detection — when a token's reported market cap is wildly larger than its actual on-chain DEX liquidity, the report surfaces that mismatch as a primary risk factor. Real exit at the displayed price is constrained or impossible regardless of what the static contract scan returns. (Auto-softened on confirmed bridged tokens and canonical multi-chain secondary deployments — see above.)
  • Detached CEX-volume detection — when centralized-exchange daily volume far exceeds the DEX exit liquidity that would have to settle it, the volume is flagged as likely synthetic or off-chain market-making rather than real trading.
  • Thin holder count on mature tokens — a token that has been live for months at a meaningful reported valuation but still shows only a handful of holders is no longer treated as "established" just because of its age. Distribution that doesn't support the reported market cap now penalizes the score directly.
  • Scope — these changes apply across Solana + all 7 EVM chains (Ethereum, Base, BSC, Arbitrum, Optimism, Polygon, Avalanche). Imposter detection and chain-hop abandonment are cross-chain by design.
2026-05-15 · News desk redesign · richer case pages · stable image loading
  • News desk redesigned/news now uses the same visual language as the rest of the site (typography, panels, accent system) with a clean lead story, side rail, category filter pills with live counts, and a search box. Each story keeps its source-trail and legal-posture pills visible.
  • Case pages rebuilt/news/<story> opens with a compact case header (status, category, case number, judge, venue) followed by reader-friendly panels: short version, why it matters, attack-vector summary, court tracker, verified facts, public record trail, named people and entities, business filings in the trail, named public social handles, on-chain leads, timeline, money / scale, case status, media pack, and citation chain.
  • More desk metrics — the news index now surfaces published stories, source-link total, agencies + courts cited, and an aggregate alleged-loss figure across the live queue.
  • Live breaking strip — a compact breaking ticker rolls the latest case numbers and headlines directly under the masthead.
  • Stable, hot-link-safe image loading — every news image (lead, evidence, gallery) now loads through Analyzer69000's own domain so it survives third-party hot-link protection, never leaks the reader's IP, and shows a loading shimmer instead of a broken-image icon while it's in flight.
  • More frequent desk refresh — the published news queue now refreshes several times per day instead of once.
  • Tighter responsive — both /news and the case pages now hold their layout cleanly down to very narrow viewports (~280-300px wide) for older / split-screen mobile.
  • Editorial constraint — every published item still uses charged / alleged / sued / seized / sanctioned / convicted exactly as the underlying public record supports it. Investigator claims (e.g. independent on-chain analysts) are labeled as such and are kept separate from agency or court findings.
2026-05-14 - Solana P-Token + Token-2022 scanner update
  • P-Token-aware Solana indexing - Solana optimized Token program keeps the classic Tokenkeg... program ID, so existing SPL tokens continue to scan normally. Analyzer treats this as a network-level performance upgrade, not as a token migration or new risk flag.
  • Instruction-log assumptions removed - Solana token parsing is documented around transaction metadata, parsed instructions, and token balance deltas instead of relying on instruction-name log lines that P-Token can omit.
  • Token-2022 controls surfaced - scans now expose extension-level controls such as transfer fees, transfer hooks, permanent delegates, default-frozen accounts, non-transferable mints, confidential transfer, pausable mints, mint close authority, and scaled UI amounts when present.
  • Fair scoring for issuer and bridge tokens - verified wrapped assets, stablecoins, and other canonical issuer-controlled tokens show their controls plainly without scoring standard custody mechanics like unknown memecoin admin keys.
2026-05-13 · Launch-guide share card · verified wrapped-token index
  • Launch-guide OG card refreshed/launch-guide now has a purpose-built 1200x630 share card that matches the scanner's premium report-card style, with accurate title/description metadata and cache-busted unfurls for X, Discord, Telegram, and Slack.
  • Verified wrapped-token registry expanded — canonical wrapped assets are now indexed in-house across Solana, Ethereum, Base, and BSC. Coverage includes WSOL, WETH, WBTC, cbBTC, Wormhole WETH on Solana, Coinbase wrapped assets on Base, and major Binance-Peg assets on BSC. Issuer-controlled mint/burn mechanics are shown as custody controls instead of memecoin rug vectors.
  • Fair scoring for canonical wrapped assets — verified wrapped assets now return VERIFIED_WRAPPED, a blue-chip floor, and a zero headline rug score unless a true hard-fail condition is present. Custody controls stay visible, but launch-bundle, LP-lock, thin-DEX, and holder-concentration heuristics no longer mislabel a real wrapped asset as a rug.
  • Canonical supply market caps — when market registries report a pool-local cap for a verified wrapped asset, the scanner derives the displayed market cap from live price times on-chain float so assets like Solana WBTC do not show misleadingly tiny caps.
2026-05-10 · Wallet and payment UX polish
  • Mobile wallet connection improved — mobile users now get clearer wallet-open actions, better reconnect behavior, and cleaner failure messages across public payment surfaces.
  • Payment previews are clearer — checkout flows now present plain-language wallet prompts and block invalid transactions before users are asked to sign.
  • Share cards refreshed — public service pages now render cleaner 1200x630 cards for X, Discord, Telegram, and Slack.
2026-05-12 · Fair scoring for established markets
  • CEX-aware liquidity scoring — established tokens with meaningful centralized-exchange activity no longer get over-penalized for intentionally thin DEX pools.
  • Holder labels improved — market-maker, exchange, bridge, vesting, and governance-style holders are classified more fairly so concentration warnings better match real holder risk.
2026-05-11 · Bridged-token and governance fairness
  • Bridge-controlled tokens score more fairly — mint/burn controls held by standard bridge or issuer contracts are treated differently from private-wallet control.
  • Governance-aware ownership labels — multisig, timelock, DAO, vesting, and lock-style ownership patterns now render as their actual role rather than generic owner risk.
  • Solana metadata fallback improved — established Solana tokens recover cleaner names and symbols during temporary metadata-provider issues.
Previous changes
  • Cross-chain trending feedGET /api/trending returns live trending tokens across all 8 chains. Shareable /trending + per-chain /trending/<chain>, OG cards at /api/og/trending.
  • Wash-trade detection — every scan reports a NET sniped supply % with a wash-trade flag when intra-wallet rotation dominates the launch window.
  • Fair-launch signal — top-level fair_launch struct combining 5 independent on-chain checks.
  • Deployer verification — multi-signal authenticity check on every deployer wallet.
  • Uniswap V4 support — V2, V3, and V4 swap events all decoded for EVM scans.
  • Team-wallet tracking (EVM) — pre-launch airdrop recipients + their post-launch trade activity surfaced on deployer.team_wallets / team_trades.
  • Official brand logos — 113 CEX + DEX brand marks served locally so the scan page never blocks on a third-party image fetch.
  • Cache-bust OG cards — append &v=<ts> to any OG URL for immutable cache.
  • Compact sub-penny prices$0.0₅616 notation everywhere.

⚡ Quickstart

Copy, paste, done. No API key required.

Get a token report

curl https://analyzer69000.com/api/v1/token/JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN

Embed a live scan card on any site

<div data-a69="<token_address>"></div>
<script src="https://analyzer69000.com/embed/scanner.js" async></script>

Per-token social preview card

<meta property="og:image"
  content="https://analyzer69000.com/api/og/token?address=<addr>">

🧪 Interactive playground

Hit a live endpoint from this page. Response format, timing, and cached-or-fresh state shown below. Counts against your IP rate limit.

Ready.

💠 Drop-in widgets

Shadow-DOM isolated — zero CSS conflict in either direction. Auto-mounts every [data-a69] on page load and on DOM mutation, so widgets injected by React / Vue / htmx / Astro "just work" without extra wiring.

Variants
7 widgets
Themes
9 themes
Customize
Brand color
Script size
~18 KB gzip
One <script>, every variant. Drop the tag once in your template — from then on, every new [data-a69] element on the page mounts itself the moment it appears in the DOM. Zero dependencies on your end.

🧬 Installation

<script src="https://analyzer69000.com/embed/scanner.js" async></script>

📦 Variant 1 · Full card (default)

Logo · name · symbol · chain · verdict · animated Safety Score ring · stats · critical-alert banner (honeypot, LP pullable, serial rugger) · copy-address · live indicator. Sizes: sm / md / lg.

<div data-a69="<addr>"></div>

⚡ Variant 2 · Mini card

Compact horizontal row. Perfect for dashboards, watchlists, reply threads.

<div data-a69="<addr>" data-variant="mini"></div>

🎖 Variant 3 · Badge pill

Inline verdict pill — at data-size="md" it shows the token logo + symbol; at sm it shrinks to a dot + verdict for tight inline slots. Ideal for chat, comments, articles, tweets.

Safe?
 vs. 
 · compact:
<div data-a69="<addr>" data-variant="badge"></div>

📊 Variant 4 · Stats strip

Full-width strip with token logo + verdict + any stats you choose. Pair above a trading widget, inside a token page, or at the top of a research post. Add data-show="safety,honeypot,lplock,dev,liq" for a scanner-grade safety strip.

<div data-a69="<addr>" data-variant="stats"></div>

🎚 Variant 5 · Animated gauge upgraded

270° Safety Score dial with gradient fill, count-up animation, token logo header, verdict pill, Tier-1 security chips (honeypot sim · LP locked % · dev rug history · renounced), and live price + 24h change. Drop into a hero, a token page, or a Discord-style bot reply card.

<div data-a69="<addr>" data-variant="gauge"></div>

📺 Variant 6 · Live ticker new

One-line price · 24h change · verdict pill · live pulse. Combine data-refresh="30" for auto-updating tickers. Site footer, news strip, sidebar widget — anywhere you want a living signal.

<div data-a69="<addr>" data-variant="ticker" data-refresh="30"></div>

🫧 Variant 7 · Live holder bubble map

Interactive D3 force-layout of the top 20 holders with token logo in the header. Drag bubbles; pump.fun curves / LPs / burn / dev / retail color-coded. Best single-glance view of supply concentration.

<div data-a69="<addr>" data-variant="bubbles" data-size="lg"></div>

🗂 Variant feature matrix

VariantLogoVerdictScoreStatsSecurity chipsLive priceBest for
cardringcustomalert bannervia data-showlanding pages, reports
mininumericliqwatchlists, sidebars
badgemd/lg onlyrug/100inline prose, chat
statsfullvia data-showvia data-showresearch pages, token pages
gaugedial + count-upprice/changehoneypot · LP · dev · renouncehero, Discord bot reply
tickerprice + 24hfooters, live strips
bubblesholders · top1 · top10 · LP · burnholder analysis

🎨 Theme gallery

Pick one of nine hand-tuned palettes or override any accent with your brand color. Every variant respects the theme.

dark (default)
light
midnight
cyber
terminal
ice
sunset
matrix
holo
<div data-a69="<addr>" data-theme="holo"></div>

🎛 Customize to your brand

Override the accent color, choose border style, pick exactly which stats to show, and enable live refresh.

Custom accent color

<div data-a69="<addr>" data-accent="#00ff9d"></div>

Gradient border + glow

<div data-a69="<addr>" data-border="gradient" data-theme="holo"></div>

Pick your stats

Use data-show with a comma-separated list. Options: rug, blue, safety, price, liq, vol, mc, age, holders, top10, honeypot, tax, lplock, dev.

<div data-a69="<addr>" data-variant="stats" data-show="price,liq,mc,holders"></div>

Safety-first stats strip

For scanner-style usage — surfaces the new Tier-1 security signals (honeypot sim, LP burn/lock %, deployer rug history) alongside price.

<div data-a69="<addr>" data-chain="eth" data-variant="stats" data-show="safety,honeypot,lplock,dev,liq"></div>

Live refresh

Re-pulls the report every N seconds (min 20s). Great for tickers, live dashboards, stream overlays.

<div data-a69="<addr>" data-variant="ticker" data-refresh="30"></div>

🧪 Live embed builder

Tweak options, preview instantly, copy-paste the snippet.

Variant
Theme
Size
Border
Preview

🎛 All attributes

AttributeValuesDefaultDescription
data-a69token addressrequired
data-variantcard · mini · badge · stats · gauge · ticker · bubblescardwidget style
data-themedark · light · midnight · cyber · terminal · ice · sunset · matrix · holodarkcolor palette
data-accenthex like #00ff9doverride theme accent with your brand color
data-sizesm · md · lgmdcontainer max-width
data-bordersolid · gradient · glow · nonesolidborder/glow style
data-radiussm · md · lg · fullmdcorner radius
data-refreshinteger seconds (≥ 20)0auto re-fetch interval; 0 = once
data-animatetrue · falsetrueentrance + count-up animations
data-showrug,blue,safety,price,liq,vol,mc,age,holders,top10,honeypot,tax,lplock,devautopick which stats to render (card / stats). New: honeypot, tax (buy/sell), lplock (LP secured %), dev (rug history).
data-linktrue · falsetruedisable click-through to full report

⚙️ Multiple on one page

Drop as many as you want — the script is idempotent and scans on DOM mutations, so widgets injected via React/Vue/htmx all mount automatically.

🛡 CSP note

The bubbles variant lazy-imports D3 from cdn.jsdelivr.net. If you run a strict CSP, add it to script-src. Every other variant runs standalone with no external deps.

🛰 GET /api/v1/token

GET /api/v1/token/<address> — or — /api/v1/token?address=<address>&chain=auto
ParamTypeRequiredDescription
addressstringyesSolana base58 mint or EVM 0x… contract
chainenumnoauto · solana · eth · base · bsc · arb · op · poly · avax (default auto)

Returns a full report (see schema). Response is cached server-side for 12 hours — re-requesting the same address during that window is a cache hit with a _cached: true field.

📈 GET /api/scan/candles

GET /api/scan/candles?address=<a>&interval=1h&limit=250

OHLCV candle backfill for the token's best-liquidity pool. Data structured for direct use with charting libraries.

ParamTypeDefaultDescription
addressstringToken address (or pass pair instead)
pairstringPool / pair address (skips auto-selection)
chainenumsolanaChain slug
intervalenum1h1m · 5m · 15m · 1h · 4h · 1d
limitint250Candles to return (20–1000)

Fallback chain: requests resolve through three stages so freshly-launched or micro-cap pairs still chart:

  1. Shared cache — per-pool bar store, refreshed nightly for the top-40 tokens by access count.
  2. Indexer — fresh bars appended to cache. Auto-retries with the top-liquidity pool when your pair address isn't indexed (covers Uniswap-V3 32-byte pool IDs, Aerodrome aggregated pools, Base/Arb micro-caps).
  3. On-chain replay — direct Swap-event pagination on Solana + EVM. Serves pump.fun launches and brand-new EVM pairs that no aggregator has indexed yet.

Per-pair soft rate limit: 30 req/min per IP. Cache is trimmed to the newest limit buckets on return, but deeper history can be retrieved by raising limit (max 1000).

🍯 GET /api/scan/honeypot

GET /api/scan/honeypot?address=<0x…>&chain=<c>

EVM-only buy/sell tax + honeypot detection. All 7 EVM chains supported (ETH, BSC, Base, Arbitrum, Optimism, Polygon, Avalanche). Read-only — no wallet, no signing, no on-chain state change. Returns the actual buy/sell tax %, transfer-tax %, owner address (renounced or not), proxy / open-source flags, and a severity band: clean · mild · moderate · heavy · extreme · honeypot · unknown.

ParamTypeRequiredDescription
addressstringyesEVM token contract 0x…
chainenumyeseth · bsc · base · arb · op · poly · avax

Response highlights:

  • severity, is_honeypot, can_buy, can_sell
  • buy_tax_pct, sell_tax_pct, transfer_tax_pct, round_trip_tax_pct
  • max_tx_amount, max_wallet — per-tx / per-wallet caps when enforced by the contract
  • owner, owner_renounced, is_proxy, open_source
  • risk_level, risk_flags[] — ranked warning list
  • holders, holders_top_10_pct, token_symbol, native_symbol
  • simulation_amount_native, router, pair_address — for the user-facing footer ("Simulation: 0.1 BNB round-trip via 0x10ED…")
  • source — opaque verification-path identifier (treated as a string by callers; severity bands are normalized so UI labels match regardless of value).

Cross-check: when independent verification paths disagree, the disagreement surfaces as a flag in risk_flags[] instead of silently overriding either signal — so the caller can decide based on full evidence.

Rate limit: 20 req/min per IP. Cache: 2 min response cache + SWR. Pair this with /api/scan/impact for the post-tax slippage view at concrete trade sizes.

📡 GET /api/scan/recent

GET /api/scan/recent?limit=30

Last-N tokens scanned across all users, plus 30-day roll-up: unique tokens, total scans, rugs caught, clean scans.

🖼 GET /api/og/token

GET /api/og/token?address=<addr>&v=<fetched_at_unix>

Returns a 1200×630 PNG social card (SVG available at ?format=svg) with the token's name, Safety Score dial, verdict banner, live market stats, and security flags (honeypot sim, LP lock, renounce, dev rug history).

Pass v=<unix_timestamp> (typically the scan's fetched_at) to get cache-immutable previews — the URL itself changes on every refresh, so CDN + Twitter/Discord unfurls stay in sync with the latest stats. Legacy unversioned URLs are cached only 60s.

Mirror endpoints:

  • /api/og/bundle — bundle-intel card. Severity · sniped % · wallet count · held/sold split. Auto-detects "BUNDLE RESOLVED" when ≥80% of the launch bag has dumped.
  • /api/og/boost-token — premium 1200×630 share card for any boosted token. Pulls live price, organic-score progress bar, forensic verdict pill, sparkline, tier badge. Bind it to a parent page by appending ?card=boost to the share URL: /check/<addr>?card=boost swaps the page's og:image to this endpoint so X / Discord / Telegram unfurl as the boost card instead of the standard scan card.
  • /api/og/trending — top-6 cross-chain trending grid with prices + 24h moves. Per-chain filter via ?chain=.
  • /api/og/boost — generic boost-page social card (3 tiers + refund policy line).
  • /api/og/page?p=<preset> — branded social cards for non-token pages (home, docs, comments).

📦 GET /api/v1/bundle

GET /api/v1/bundle/<address> — or — /api/v1/bundle?address=<addr>&chain=auto

Compact bundle-intel payload — same data the scanner UI renders, without the full token report. Includes: severity · pct_60s · pct_10m · pct_5s_max · launch provenance (launch_block, launch_ts, source) · unique_buyers_60s/10m · swap_count · walker_error / walker_failed / predates_scan flags · sample wallets · full hold_analysis (retail vs pool/authority, still-holding / sold_all / partial / reaccumulated counts + USD values) · per-wallet rows (capped at 20) with status labels · mev_bots_detected · wash_ratio_60s/10m · redemption flags (bundle_resolved, adoption_organic).

Three no-bundle states: walker_failed: true (RPC issue on a fresh token — re-scan in ~10 min), predates_scan: true (token genuinely too old — current-state metrics still apply), or neither (organic launch with no bundle pattern). Each gets a distinct human-readable note. Cap: 10 sample wallets + 20 hold-analysis rows per response. Full per-wallet lists live on /api/v1/token.

curl -s 'https://analyzer69000.com/api/v1/bundle/<addr>' | jq '.hold_analysis'

🪪 GET /api/v1/token?summary=1

GET /api/v1/token/<address>?summary=1

1 KB agent-friendly response - verdict, rug_score, blue_chip_score, organic_score + organic_label, top risks, top positives, market snapshot, liquidity_lock, holder summary, deployer summary, bundle, redemption flags, website + socials_verified, launchpad, and Solana token-program / Token-2022 extension summary. Stable keys across schema bumps. Ideal for Claude/OpenAI/MCP tool-use. See Agents & LLMs for the full tool snippet.

Solana token programs

Analyzer separates Solana token-program mechanics from project risk. P-Token is a network-level replacement of the classic SPL Token implementation at the same Tokenkeg... program ID; it does not mean the mint migrated, relaunched, or became safer/riskier by itself. Token-2022 remains the separate extension-capable program at Tokenz..., and those extensions can materially change what holders can do.

i Indexer note. Solana token parsing should not depend on human-readable instruction logs. P-Token can omit instruction-name logs, and it adds batch, unwrap_lamports, and withdraw_excess_lamports. Use parsed instructions, account owners, token balance deltas, and current IDLs where available.
SurfaceWhat the API exposesHow to interpret it
Classic SPL / P-Tokentoken.token_program, token.token_program_id, token.standardSame classic program address. Treat P-Token as performance/indexing context, not a token-level red flag.
Token-2022token.token_extensions, token.token_extension_summary, security.solana_token_extensionsExtension controls are shown and scored when they affect sellability, transferability, fees, freezing, delegate power, or public holder visibility.
Verified issuers / bridgesVERIFIED_STABLECOIN, VERIFIED_WRAPPED, canonical registry metadataCustody controls remain visible, but normal issuer or bridge mechanics are not scored like unknown private-wallet memecoin controls.

Common Token-2022 controls include transfer fees, transfer hooks, permanent delegates, default frozen account state, non-transferable mints, confidential transfer, confidential transfer fees, pausable mints, mint close authority, metadata pointers, group pointers, and scaled UI amounts. Some are normal for regulated or issuer-controlled assets; on unknown tradable tokens, they can be material risk signals.

🛡 Verified Boosts

Paid trending slots that pass our forensic scan before they go live. Three tiers, two currencies, agent-friendly via x402. If your token's organic score drops during the boost window, we refund 50% on-chain.

TierPlacementDurationSOLUSDCGate
FeaturedTop of cross-chain trending24h0.5 SOL$79organic_score ≥ 60
TrendingPinned in per-chain trending12h0.2 SOL$35organic_score ≥ 50
SpotlightDedicated card on /check/<addr>6h0.1 SOL$15LP secured

Endpoints

GET/api/boost/x402 — agent payment manifest (x402 accepts list)
GET/api/boost/eligibility?address=&chain=&tier= — precheck before paying
POST/api/boost/intent — create a single-use purchase intent (Solana Pay reference + receiver + amount, all server-pinned)
POST/api/boost/build-tx — server builds the unsigned Solana transaction; client signs + broadcasts
POST/api/boost/buy — JSON body OR X-PAYMENT header (x402). Returns 402 with manifest if no payment info present
GET/api/boost/history?limit=50&chain= — public slot history + totals (enriched with symbol/name/logo/verdict from token_reports)
GET/api/og/boost-token?address=&chain=&tier= — premium 1200×630 share card for any boosted token

Flow

  1. Call /api/boost/eligibility to confirm your token passes the tier gate. Returns live organic score + LP verdict.
  2. POST /api/boost/intent with token + tier + currency + buyer wallet. Server returns intent_id, reference (single-use 32-byte pubkey), receiver_wallet, and the expected_amount.
  3. POST /api/boost/build-tx with the intent_id. Server returns a base64-encoded unsigned Solana tx (SystemProgram transfer or USDC SPL transfer + reference key attached). Client signs + broadcasts.
  4. POST /api/boost/buy with {intent_id, tx_signature} (or via X-PAYMENT header for x402). Server verifies signer, mint (USDC), recipient, amount, age, AND re-runs the eligibility gate.
  5. Pass → slot is live instantly. Fail after paying → full refund queued. Mid-boost quality drop → 50% on-chain refund.

Stacking + extension

Buying any tier on a token that already has an active slot of the same tier extends the existing slot cumulatively. Buying a higher tier adds a new active slot alongside (a token can hold all 3 tiers concurrently). Only the original buyer can update tagline/link/accent; community-funded extensions add time without re-branding.

Recovery flow

If a buyer's verification fails (network blip, RPC catch-up), /boost remembers their open payment for 24 hours. On next visit, a banner offers one-click re-verify — no double-pay.

Custom fields (all optional, free during launch)

  • tagline — up to 60 chars. Server-sanitized (zero-width + control chars stripped).
  • link_url — https only, host must be x.com, t.me, discord.gg, discord.com, or subdomain thereof.
  • accent_color — strict #RRGGBB regex.
  • buyer_label — up to 40 chars display-only.

Agent quickstart (x402)

// 1. Discover pricing
curl -s https://analyzer69000.com/api/boost/x402 | jq '.accepts'

// 2. Pay on Solana, get tx signature

// 3. Retry with X-PAYMENT header
PAYLOAD=$(echo '{"address":"<mint>","chain":"solana","tier":"featured","currency":"sol","buyer_wallet":"<your-wallet>","signature":"<tx-sig>"}' | base64 -w0)
curl -X POST https://analyzer69000.com/api/boost/buy \
  -H "X-PAYMENT: $PAYLOAD"

Buy a boost → · Public history →

🚀 Launchpad detection

Every scan runs a multi-stage launchpad classifier. The token.launchpad field (null if none detected) reports the source platform and confidence so agents and UIs can frame the token in the right context (fair-launch meme vs tokenized venture round vs deterministic burn).

KeyTypeDescription
idstringCanonical platform slug — pump_fun · letsbonk · moonshot · believe · virtuals · jupiter_studio · daos_fun · raydium_launchpad · streamflow · meteora_m3m3 · four_meme · clanker · flaunch.
namestringHuman-readable display name.
urlstringOfficial launchpad homepage.
confidenceenumprimary (deterministic on-chain proof — mint suffix, program id, known creator) · inferred (pool listed on migration-burn DEX with matching base token) · hint (website / metadata / description match).
sourceenumWhere the match came from: mint_suffix · onchain · dex · website · metadata.
evidencestringThe specific signal that matched (program id, DEX name, matched phrase).
logo_svgstringInline SVG mark shipped directly in the payload so UIs render instantly with no remote image fetch.

confidence: 'primary' means the scan proved the launchpad deterministically (e.g. Solana mints ending in pump, bonk). inferred means a pair hosted on a migration-burn DEX where the factory deterministically burns LP (pumpswap, bonkswap, moonshot-swap). hint is website/metadata keyword matching — treat it as a weak signal, never a verdict.

🤖 For agents & LLMs

This API is built to be called from agents. The full token report is big (∼70 KB JSON) which is too much for a single tool-call round trip in a constrained context window. We ship two dedicated affordances so your agent can reason about a token in <1 KB per call, with every number still traceable back to on-chain facts.

No MCP-server token, no OAuth flow, no per-agent key: the same free public tier serves agents. Abuse protection lives at the API — 30 req/min · 300 req/hour per IP + server-side 12h cache. Agents that cache their own tool results against address + chain won't notice the limits.

🪪 Compact agent response — ?summary=1

Every /api/v1/token call accepts ?summary=1, which returns a distilled payload shaped for LLM tool use: verdict, numeric scores, top risks, top positives, market snapshot, launchpad, LP-lock verdict, deployer headline, and Solana token-program / Token-2022 extension summary when present. Stable keys across schema bumps - so a tool definition you ship once keeps working when we improve the engine.

curl -s 'https://analyzer69000.com/api/v1/token/JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN?summary=1' | jq

Sample shape (representative summary response — schema_version: 100):

{
  "address": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",
  "chain": "solana",
  "token": {
    "name": "Jupiter", "symbol": "JUP",
    "age_hours": 19890.93, "launchpad": null,
    "mint_renounced": true, "freeze_renounced": true,
    "token_program": "spl_token", "token_extensions": null
  },
  "verdict": "BLUE_CHIP",
  "rug_score": 0,
  "blue_chip_score": 100,
  "organic_score": 81,
  "organic_label": "organic",
  "top_risks": [],
  "top_positives": [
    {"text": "Mint authority renounced ✓", "weight": 10},
    {"text": "Freeze authority renounced ✓", "weight": 10},
    {"text": "Token > 180 days old", "weight": 30},
    {"text": "Liquidity > $1M", "weight": 20},
    {"text": "Market cap > $10M", "weight": 20},
    {"text": "Listed on 3 DEXes", "weight": 5}
  ],
  "redemption": { "bundle_resolved": false, "adoption_organic": true },
  "market": {
    "price_usd": 0.2026,
    "market_cap_usd": 647915635,
    "fdv_usd": 1390329375,
    "liquidity_usd": 2439527.58,
    "volume_24h_usd": 4745625.73,
    "change_24h_pct": -0.82,
    "buys_24h": 32980, "sells_24h": 40591,
    "dex_count": 3, "chain_count": 1,
    "cex_exchange_count": 61,
    "cex_market_count": 84,
    "cex_volume_24h_usd": 60412023.77,
    "cex_exchanges": [
      { "name": "Binance", "markets": 4, "volume_24h_usd": 9990466 },
      { "name": "KuCoin", "markets": 2, "volume_24h_usd": 5515486 },
      ... 59 more exchanges
    ]
  },
  "liquidity_lock": { "verdict": null, "secured_pct": null, "burned_pct": null, "locked_pct": null },
  "holders": {
    "top_10_pct": 68.32, "adjusted_top10_pct": 68.32,
    "holder_count": 833460,
    "burn_pct": 0, "lp_pct": 0, "cex_pct": 2.19
  },
  "deployer": { "address": null, "dev_snipe_pct": 0, "serial_rugger": null },
  "bundle": null,
  "socials_verified": 5,
  "website": { "url": "https://jup.ag", "team_count": 0 },
  "schema_version": 100,
  "fetched_at": "2026-05-07T03:18:35.195Z",
  "_summary": true,
  "_cached": true
}

🔧 Tool-use snippet (Claude / OpenAI)

Drop this tool definition straight into Anthropic or OpenAI tool-calling. The agent can now scan any Solana or EVM token on demand, and the response fits in a single message body.

{
  "name": "scan_token",
  "description": "Return a safety + market summary for a token contract. Works on Solana, Ethereum, Base, BSC, Arbitrum, Optimism, Polygon, and Avalanche. Verdict is one of: VERIFIED_STABLECOIN, VERIFIED_WRAPPED, VERIFIED_LST, BLUE_CHIP, ESTABLISHED, CLEAN_ON_SURFACE, CAUTION, SUSPICIOUS, HIGH_RISK, LIKELY_RUG.",
  "input_schema": {
    "type": "object",
    "properties": {
      "address": {"type": "string", "description": "Solana mint or EVM 0x contract"},
      "chain": {"type": "string", "enum": ["auto","solana","eth","base","bsc","arb","op","poly","avax"]}
    },
    "required": ["address"]
  }
}

Tool handler (Node.js, any runtime with fetch):

async function scan_token({ address, chain = 'auto' }) {
  // Validate upfront — the API does too, but early rejection keeps
  // malformed tool-call traffic off the rate-limit window.
  if (!/^[1-9A-HJ-NP-Za-km-z]{32,44}$|^0x[a-fA-F0-9]{40}$/.test(address)) {
    return { error: 'invalid_address' };
  }
  const url = `https://analyzer69000.com/api/v1/token/${encodeURIComponent(address)}?chain=${encodeURIComponent(chain)}&summary=1`;
  const r = await fetch(url, { headers: { Accept: 'application/json' } });
  if (!r.ok) return { error: `http_${r.status}` };
  return await r.json();
}

🔌 MCP server (self-hosted)

For MCP-based agent workflows, run a local stdio wrapper that calls the public summary endpoint:

// a69-mcp.mjs — MCP stdio server exposing Analyzer69000 as a tool.
// Run: node a69-mcp.mjs  (stdio transport, drop into any MCP host)
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';

const server = new Server(
  { name: 'analyzer69000', version: '1.0.0' },
  { capabilities: { tools: {} } },
);

server.setRequestHandler('tools/list', async () => ({
  tools: [{
    name: 'scan_token',
    description: 'Safety + market summary for a token contract (Solana / EVM).',
    inputSchema: {
      type: 'object', required: ['address'],
      properties: {
        address: { type: 'string' },
        chain:   { type: 'string', enum: ['auto','solana','eth','base','bsc','arb','op','poly','avax'] },
      },
    },
  }],
}));

server.setRequestHandler('tools/call', async (req) => {
  const { address, chain = 'auto' } = req.params.arguments || {};
  if (!/^[1-9A-HJ-NP-Za-km-z]{32,44}$|^0x[a-fA-F0-9]{40}$/.test(address)) {
    return { content: [{ type: 'text', text: 'invalid_address' }], isError: true };
  }
  const r = await fetch(
    `https://analyzer69000.com/api/v1/token/${address}?chain=${chain}&summary=1`,
    { headers: { Accept: 'application/json' } },
  );
  const json = await r.json();
  return { content: [{ type: 'text', text: JSON.stringify(json, null, 2) }] };
});

await server.connect(new StdioServerTransport());
Tip. Keep the wrapper local to your agent runtime and validate token addresses before calling the public API.

🧬 Response schema

Every report is the same shape across chains. Click to expand fields:

top-level root— identifiers, scores, version
address string token mint / contract — echoed from request
chain enum solana · eth · base · bsc · arb · op · poly · avax
verdict enum top-level verdict — BLUE_CHIP · ESTABLISHED · CLEAN_ON_SURFACE · CAUTION · SUSPICIOUS · HIGH_RISK · LIKELY_RUG
rug_score 0-100 higher = more risk
blue_chip_score 0-100 higher = more established
organic_score 0-100 composite launch cleanliness + adoption metric. 75+ = organic, 55+ = mostly organic, 35+ = mixed, 15+ = coordinated, below = manipulated
organic_label enum organic · mostly_organic · mixed · coordinated · manipulated
top_risks array {text, weight} — top risk factors contributing to rug_score
top_positives array {text, weight} — positive factors contributing to blue_chip_score
redemption object {bundle_resolved, adoption_organic} — whether initial risk signals have been redeemed over time
socials_verified int count of verified social links (X, Telegram, Discord, website, etc.)
website object {url, team_count, cross_verified[]} — project website and team verification
schema_version int incremented when the report shape changes — clients can use this to invalidate their own caches
fetched_at iso8601 when this report was computed
_cached boolean true if served from response cache
_summary boolean true when ?summary=1 was passed — identifies the compact agent response
_docs string link to the docs page — convenience for agent tool-use flows
token object— metadata, authorities, age, launchpad
name string
symbol string
decimals int
supply_ui number
image url resolved through a multi-source cascade so fresh EVM tokens that no single provider has indexed still render a logo
description string ≤ 800 chars
token_program enum? spl_token - token_2022 for Solana mints
token_program_id string? Solana token program owner, when known
token_extensions array? Token-2022 extension names and normalized controls, when present
token_extension_summary object? compact extension flags for agents and widgets
platform string pump.fun · SPL · ERC-20 · …
launchpad object detected launchpad — see Launchpad detection for the 13 supported platforms
id · name · url · confidence · source · evidence · logo_svg
mint_renounced boolean
freeze_renounced boolean
launch_utc iso8601
launch_ts unix_seconds launch timestamp — populated from the most authoritative source available (see age_source)
age_hours number
age_source enum? deep_walk_verified · earliest_pair_creation · evm_creation_walk · pair_created_at_fallback — provenance of launch_ts. deep_walk_verified means the walker traversed back to the actual launch tx; evm_creation_walk means the EVM walker reached pair-creation block; pair_created_at_fallback means the walker errored and we used DexScreener's pair-created timestamp as a best-effort estimate
market object— price, liquidity, volume, per-DEX + CEX listings + per-chain breakdowns
cex_listings object centralized-exchange coverage
exchange_count · total_cex_markets · total_cex_volume_24h_usd · recently_listed_count
exchanges array {name, key, logo_svg (inline SVG), brand_color, brand_grad, initials, market_count, total_volume_24h_usd, trust (green|yellow|red), active, first_seen_at, last_trade_at, markets[]}
Trade URLs are domain-validated server-side — if trade_url is present on a market row, we've verified it resolves to the exchange's canonical domain. null means no verified URL for that pair.
markets[] object {base, target, pair_label, volume_24h_usd, trade_url, trust, last_trade_at, is_anomaly, is_stale}
price_usd number
total_market_cap number
total_liquidity_usd number
total_volume_24h number
buy_sell_ratio_24h number 0–1
dex_count int
chain_count int
all_pairs array
dex_breakdown array per-venue liquidity + volume share
chain_breakdown array
buys_24h int buy transactions in the last 24 hours
sells_24h int sell transactions in the last 24 hours
change_24h_pct number 24-hour price change percentage
market_cap_usd number circulating market cap in USD
market_cap_source enum dex_verified - estimated - coingecko - canonical_supply - provenance of the market cap figure
fdv_usd number fully diluted valuation
cex_exchange_count int number of centralized exchanges listing this token
cex_market_count int total trading pairs across all CEXes
cex_volume_24h_usd number aggregate 24h CEX volume
cex_active_count int CEXes with active trading in the last 24h
cex_exchanges array per-exchange breakdown: {name, markets, volume_24h_usd, trust, active}
socials object
deployer object— dev address + trade/movement trail
address · create_tx · verified_via how the deployer was identified
dev_snipe_tokens · dev_snipe_pct initial buy at launch
current_tokens · current_pct live balance
funded_by · cex_origin first-funding source
silent_accumulation_tokens · silent_accumulation_pct tokens in/out via non-trade paths
silent_accumulation_note string plain-english explanation
serial_rugger object prior deployments classified
total_deployments · rugged_count · active_count · dormant_count
severity enum clean · suspicious · moderate · heavy · extreme
sample array per-deployment {address, symbol, verdict, liq, vol, age_days}
trade_history object full buy/sell timeline + non-trade movements since launch
actions array {type: 'buy'|'sell', tokens, notional_usd, price_usd, quote_symbol, tx, timestamp}
movements array {kind: 'fee_claim'|'transfer_in'|'transfer_out', direction, tokens, counterparty, tx, timestamp}
totals object buys/sells counts · tokens_bought/sold · spent_usd/received_usd · realized_pnl_usd · fee_claim_count · transfer_in/out counts + tokens · non_trade_net
security object— contract safety (EVM)
solana_token_extensions object? Token-2022 extension analysis: flags, risk band, fee/hook/delegate/freeze/transferability controls, and user-facing notes
ownership object {has_owner_fn, owner, renounced}
proxy object {is_proxy, implementation, admin, beacon} — EIP-1967 slots
verified object {verified, name, compiler, findings[]} — source verification + dangerous-function scan
honeypot object sell-test verdict + supporting signals
verdict enum honeypot · anti_bot_suspected · high_tax · tax_warning · clean · unknown
buy_tax · sell_tax · transfer_tax pct
flags array owner_can_change_balances, hidden_owner, supply_mintable, transfers_pausable, tax_modifiable, blacklist_enabled, …
disagreement enum? anti_bot_suspected · oracles_disagree · null — populated when independent verification paths conflict
liquidity_lock object— LP burn + lock verification (both chains)
verdict enum fully_secured · mostly_secured · partially_secured · unlocked · v3_pool · v4_pool
pool_type enum? v2 · v3 · v4 · unknown — when set, indicates which Uniswap version the pool uses
burned_pct · locked_pct · secured_pct pct
holders array {name, address, kind (burn|locker), pct}
lp_token/lp_mint string address of the LP token (V2 only — V3/V4 use NFT positions)
note string? human-readable explanation when verdict is v3_pool or v4_pool — points readers to the position-NFT holder as the security signal
price_action object— "is this a rug right now?" derived from price + LP + bundle state
label enum rug_pulled · lp_drained · bundle_dump · mint_inflation · notable_drawdown · notable_runup · pumping · normal_volatility · stable
severity enum info · caution · danger
verdict string one-line plain-english explanation
evidence array bullet list of supporting facts (LP status, % sold, 24h price)
inputs object {change_24h_pct, liquidity_usd, pct_sold, lp_secured} — the raw values the label was derived from
bundle object— launch bundle cluster + hold analysis + wash detection
detected · reliable boolean
severity enum clean · mild · moderate · heavy · extreme · unknown
source enum? bonding_curve · pair · mint · evm_swap_logs — which on-chain primitive the walker scanned
launch_block int? block number of the launch tx (EVM) or first observed swap
launch_ts unix_seconds? timestamp of the launch block — useful for synchronizing with off-chain feeds
unique_buyers_60s · unique_buyers_10m int? EOA count in each launch window (V2/V3/V4)
swap_count int? total swap events analyzed in the launch window
walker_error enum? when the launch-window walker hit a known failure: no_logs (RPC returned nothing in window) · pair_created_block_unknown (block-resolver failed) · no_swaps_decoded (logs found but undecodable, eg custom V4 hook) · v4_pool_manager_unknown_chain
walker_failed boolean true when walker errored on a fresh token. Distinct from predates_scan — caller should retry in ~10 min
predates_scan boolean true only when the token is genuinely too old (>14d EVM, varies on Solana) for the walker's RPC budget. Bundle metrics genuinely unreachable; current-state metrics still apply
launch_source object? walk provenance — {walked_to_oldest, pump_api_used, pages_walked, total_sigs, source, launch_block} — lets callers verify the walker actually reached launch
mev_bots_detected array addresses of known sandwich/priority-fee bots active in the launch window (EVM only)
pct_60s · pct_10m pct NET % of supply sniped (buys − sells per wallet, positive deltas only, capped at 100)
pct_5s_max pct largest 5-second cluster
wash_ratio_60s · wash_ratio_10m 0-1 (gross − net) / gross — fraction of launch volume that was intra-wallet rotation
gross_tokens_60s · gross_tokens_10m number raw cumulative inbound — pre-dedup for wash-trade calc
wash_capped boolean true when raw gross-buy sum mathematically exceeded 100% (impossible net holdings)
wash_note string human-readable explanation when wash_ratio > 40% or wash_capped
wallets_in_largest_bundle int in a single 5s window
sample_wallets array addresses in the tightest cluster
launch_type enum organic · coordinated · team
hold_analysis object live-RPC balance verification of every bundle wallet (used to power the inspector + holdings tracker on /check)
scanned_wallets · retail_wallets · pool_authority_wallets retail = unique humans; pool/authority filtered out so AMM vault outliers don't poison the headline
still_holding · sold_all · sold_partial · reaccumulated int cohort sizes
pct_still_held · pct_sold 0–1
tokens_at_launch · tokens_still_held number
usd_still_held · usd_dumped number priced at scan-time best_pair (basis declared in price_basis)
price_basis object {source, price_usd}
rpc_calls · budget_used_ms int scan transparency — how many on-chain balance checks fired and how long the scan took
wallets array per-wallet rows:
wallet · launched_with_tokens · launched_with_usd
current_tokens · current_usd live RPC balance at scan time
pct_held 0–1+ current / launched (Infinity → re-accumulated when launched=0)
status enum holding · sold_partial · sold_all · reaccumulated
classification enum? pool_or_authority when the wallet looks like an AMM vault / treasury (not a retail bundler)
is_deployer bool
unchecked bool true when the per-scan RPC budget ran out before this wallet
proof object {launch_tx, launch_tx_url, wallet_url} — every claim in the row is verifiable on Solscan
holders object— top-20 distribution (Solana + EVM)
top_20 array account · owner · amount · pct · tag · is_burn/is_lp/is_cex/is_deployer/is_whale/is_bridge/is_team/is_mm
top_10_pct · top_20_pct raw concentration
adjusted_top10_pct excludes LP / burn / CEX — the real retail concentration
burn_pct · pump_curve_pct · lp_pct · cex_pct
holder_count int rows returned
organic_score object— 0–100 composite: launch cleanliness + hold/sold + distribution
score 0-100 higher = more organic. 75+ organic, 55+ mostly organic, 35+ mixed, 15+ coordinated, else manipulated
label enum organic · mostly_organic · mixed · coordinated · manipulated
verdict string one-line human explanation
reliable bool true when launch-window walk fired (for fresh launches). False on blue chips that used the fast-path; score still computed from holders + LP + activity.
signals array up to 10 contributing items: {kind, weight, ok, detail} — positive weights add to the score, negatives subtract
safety object— scores + reasons + redemption flags
rug_score 0-100 higher = more risk
blue_chip_score 0-100 higher = more legit
verdict enum see verdicts
rug_reasons array {text, weight, kind?, redeemed?, _original_weight?, redemption_note?, receipts?}
kind enum? mint_authority_active · mint_authority_lst_program (LST tokens — programmatic PDA, +5 not +15) · freeze_authority_active · dev_snipe · extreme_bundle · heavy_bundle · moderate_bundle · lp_unsecured · lp_partial · lp_concentrated_unsecured (V3/V4 NFT positions) · mintable · transfer_pausable · upgradeable_proxy · ownership_active · serial_rug · price_divergence (multi-pool arbitrage broken)
redeemed boolean true when a historical signal has materialized and been down-weighted
_original_weight int original score before redemption (preserved for transparency)
receipts object on-chain proof — check, numbers, sample wallets, dev_wallet, create_tx, verify_hint
blue_chip_factors array positive signals — includes kinds: organic_adoption, bundle_resolved
social object— verified + discovered socials
verified object from project metadata
found object scraped from verified website
site_title · site_description
fair_launch object— derived fair-launch detection (both chains)
status enum fair · unfair · unknown
detected boolean true only when every signal passes
summary string plain-english verdict
signals array five checks:
bundle_clean severity === 'clean'
no_dev_snipe deployer's dev_snipe_pct < 3%
organic_buyers ≥ 5 unique wallets in first 60s
no_mev_bots no sandwich/priority-fee bots in launch window (EVM)
no_cluster_burst largest 5s cluster < 10% of supply
deployer_verification object— multi-signal deployer authenticity check
verification_score 0-100 20 points per verified signal, capped at 100
signal_count · verified_count int
signals array {kind, verified, detail} — every way the deployer was authenticated:
creation_tx_signer · authoritative_launcher_record (pump.fun cross-ref) · source_verified · ownership_renounced · mint_authority_renounced · freeze_authority_renounced · prior_deployments_clean · prior_rugs_detected · cex_funded_deployer
team_wallets array— pre-launch airdrop recipients (EVM only)
wallet · tokens · tx_count · first_block · first_tx
Walks Transfer events FROM the deployer in a ±500 block window around launch to identify off-market allocations.
team_trades array— post-launch activity of team wallets (EVM only)
wallet · initial_airdrop · buy_count · sell_count · tokens_in · tokens_out · net_delta · txs[]
Renders on the price chart as amber ▲/▼ markers (distinct from deployer green/red).
links object— external explorers
_cached boolean— served from response cache or freshly computed
fetched_at iso8601— scan timestamp; append to OG URLs as &v=<unix> for cache-bust
schema_version int— increments when the response shape changes; clients can use it to invalidate their own caches

🎯 Verdicts & scores

safety.verdict is a one-word label derived from the two scores plus age + market gates. Order of evaluation: critical contract flags → score ladder → age-gated upgrade → canonical override.

VerdictTriggerMeaning
LIKELY_RUGrug_score ≥ 60 — OR confirmed honeypot (sell reverts) — OR critical contract flag (blacklist, hidden mint authority, paused)Strong evidence: cannot sell, dead market, deployer drain pattern, or active rug
HIGH_RISKrug_score ≥ 40Multiple negative signals stacked
SUSPICIOUSrug_score ≥ 25Concerning concentration, authority, or bundle signals
CAUTIONrug_score ≥ 12Minor flags — new token, single signal
CLEAN_ON_SURFACErug < 12, bc < 50 (or no age track record)No negative signals, but not established either
ESTABLISHEDstrict gate ($10M+ mcap, $500K+ liq, 30d+ age, active vol) OR (age > 30d AND bc ≥ 50)Liquidity, holders, markets, age look solid
BLUE_CHIPblue-chip qualified ($50M+ mcap, $2M+ liq, 90d+ age, active vol) AND bc ≥ 70Proven market, deep liquidity, distributed holders
Canonical-token overrides — pre-registered tokens skip the launch-window heuristics:
VERIFIED_STABLECOINUSDC, USDT, DAI, FDUSD, …Mint-controlled by issuer (Circle, Tether, MakerDAO). Bc floor 95.
VERIFIED_WRAPPEDWETH, WBTC, cbBTC, WSOL, cbDOGE, cbXRP, BTCB, WBNB, …1:1 wrapped representation. Issuer custody controls stay visible but do not count as memecoin rug vectors. Bc floor 95.
VERIFIED_LSTstETH, jitoSOL, mSOL, weETH, …Liquid-staking receipt token. Bc floor 95.
BLUE_CHIP (canon)PEPE, SHIB, FLOKI, BONK, JUP, PYTH, …Established meme/token registry — launch-window scoring rules don't apply. Bc floor 85.

Hard cap: blue_chip_score is forced to 0 when rug_score ≥ 40 — a rug cannot be rewarded for being "old" or "renounced." Confirmed honeypots and critical contract flags always land on LIKELY_RUG regardless of any cap.

Active-rug labels (price_action.label)

Independent of safety.verdict — surfaces what's happening on-chain right now. A token can show CAUTION verdict (contract is clean) while ALSO showing lp_drained (the launch is actively unwinding). Share cards + tweets lead with these when they fire.

LabelTriggerSurfaces as
rug_pulledliquidity < $5K AND 24h price < −80%💀 RUG PULLED chip + tweet "RUG PULLED. Liquidity gone, price collapsed"
lp_drainedLP unsecured AND 24h price < −50% AND bundle > 60% sold🚨 LP DRAINING · RUG IN PROGRESS chip + tweet "RUG IN PROGRESS. LP unlocked, X% of bundle dumped"
bundle_dumpbundle > 50% sold AND 24h price < −20%📉 BUNDLE DUMPING NOW chip + tweet "Bundle is dumping. X% of launch bag exited"
mint_inflationmint NOT renounced AND 24h price < −25% AND liquidity < $20KIn-page advisory; not yet on share card
notable_drawdown24h price < −25% AND LP secured AND bundle quietIn-page only — distribution / market sell-off, not rug
pumping24h price > +50%In-page only — buy-share + watch-for-distribution context
normal_volatility|24h price| < 25%In-page only — within typical range

🔮 PRECOG — predictive rug score

precog is an additional forward-looking field on every scan response, served by an in-house ML model. It is not derived from safety — it's a parallel prediction trained on labeled outcomes from prior scans. Treat the absence of the field as "score not available", never as "no risk."

"precog": {
  "rug_probability": 0.83,        // 0..1
  "risk_band": "HIGH",            // CLEAN | LOW | CAUTION | HIGH | EXTREME
  "days_estimate": 6,             // estimated days until rug (or null)
  "days_low": 4, "days_high": 9,  // 87% confidence interval
  "model_version": "v0-rules",
  "schema_version": 1
}
BandProbability rangeFrontend chip
CLEAN< 20%Card omitted from the safety strip
LOW20%–<40%Green ring
CAUTION40%–<65%Amber ring
HIGH65%–<85%Coral ring + countdown
EXTREME≥ 85%Red ring + receipt countdown

Latency: typical inference 1.5–3 s when the predictive verdict is included; clients should treat absence as graceful fallback (the model is offline, the scan still works).

Bundle hold-vs-sold chips on the share card

Independent of verdict — the OG card shows the launch-bundle exit pattern so X / Discord / Telegram unfurls tell the truth even when the safety verdict is mild.

ChipTrigger
BUNDLE DUMPED ≥70%bundle.hold_analysis.pct_sold ≥ 0.70 AND ≥3 wallets sampled
BUNDLE EXITING ≥30%pct_sold ≥ 0.30 AND ≥3 wallets sampled
V4 POOL · NFT LPliquidity_lock.verdict === 'v4_pool' — informational, replaces misleading "LP UNLOCKED" on V4 launches

🧱 Rate limits

All limits are per-IP, hashed server-side (sha256, no raw IPs stored). Exceeding a limit returns 429 Too Many Requests.

EndpointPer minutePer hour
/api/v1/token · /api/scan/token30300
/api/v1/bundle30300
/api/scan/candles60 global + 30 per-pool
/api/scan/tape30
/api/scan/honeypot20
/api/scan/impact120
/api/scan/wallet-detail30
/api/scan/funder-chain20
/api/scan/deep-bundle630
/api/trending60
/api/social/feed30
/api/comments/search15200
/api/comments/list60600
/api/comments/wallet-lookup10120
/api/launch/book5
/api/check/[addr] (page renderer)30300
/api/og/*edge-cached 1h (60s + SWR on unversioned URLs)

Reports cache server-side for 12 hours — re-scanning the same address is effectively free. OG cards with a ?v=<unix> version tag are CDN-immutable (max-age=86400, immutable).

Need higher limits? DM @cryptoflan.

💻 Code examples

curl -s 'https://analyzer69000.com/api/v1/token/<addr>' | jq '.safety'
const res = await fetch(`https://analyzer69000.com/api/v1/token/${addr}`);
const { token, safety, market } = await res.json();
console.log(`${token.name} — ${safety.verdict} (${safety.rug_score}/100)`);
import requests
r = requests.get(f'https://analyzer69000.com/api/v1/token/{addr}', timeout=10)
data = r.json()
print(data['safety']['verdict'], data['safety']['rug_score'])
// Node 20+ — native fetch
const res = await fetch(`https://analyzer69000.com/api/v1/token/${addr}`, {
  headers: { Accept: 'application/json' },
});
const report = await res.json();
resp, err := http.Get("https://analyzer69000.com/api/v1/token/" + addr)
if err != nil { return err }
defer resp.Body.Close()
var report map[string]any
json.NewDecoder(resp.Body).Decode(&report)
let url = format!("https://analyzer69000.com/api/v1/token/{addr}");
let report: serde_json::Value = reqwest::get(url).await?.json().await?;

❓ Frequently asked questions

Short answers. If something's still unclear, ping @cryptoflan on X.

Do I need an API key?

No. All public endpoints are free and rate-limited per IP — drop them into production without creating an account. A keyed higher-rate tier may launch later; the free tier stays free.

Which chains are supported?

Eight, with one unified scoring model:

  • Solana — base58 mint addresses
  • Ethereum, Base, BSC, Arbitrum, Optimism, Polygon, Avalanche0x… contracts

Chain is auto-detected from address format. Pass chain=auto or be explicit with chain=base, chain=avax, etc. Hyperliquid is treated as a perps venue, not a public token-scan chain.

Can I scan a contract that just launched seconds ago?

Yes. Cache is bypassed for any address we haven't seen before — first request triggers a fresh on-chain analysis (~1–3 seconds). After that, results are cached for 12 hours. Force a refresh with ?refresh=1.

How accurate is the rug score?

The score is deterministic — same on-chain state always produces the same number. Every signal is returned in safety.rug_reasons with a weight, so you can audit the math end-to-end.

Blue-chip recognition has an "established" override: mcap > $10M + liquidity > $500K + age > 30d pulls the score down automatically, so JUP / BONK / USDC don't trip the concentration detectors.

Two read-path reconciliations live in front of the cron jobs so the dashboard never disagrees with itself: (1) bundle-dump and holder-concentration are computed from adjusted_top10_pct on every read instead of trusting whatever a refresh job last wrote; (2) Uniswap V4 pools (no pair contract to burn) get a neutral v4_pool verdict instead of being misread as 0% secured.

What's in a token report?

Everything you'd otherwise stitch together from 4–5 different tools:

  • Mint + freeze authority status (revoked? renounced?)
  • Deployer trail, first-buyer bundle, dev-snipe %
  • Every liquidity pool across every DEX + cross-chain breakdown
  • Holder map — top 20 with pump.fun curve / LP / burn / deployer / retail classification
  • Socials (X, Telegram, Discord, site) with verified vs. found separation
  • Price, volume, market cap, FDV, 24h change, age
  • Rug score + blue-chip score + verdict (BLUE_CHIP / ESTABLISHED / SUSPICIOUS / LIKELY_RUG)
What are the rate limits?

30 req/min and 300 req/hour per IP on the free tier. Burst-friendly. If you hit the ceiling we return HTTP 429 with a Retry-After header — respect it and you're back online in under a minute.

Bursty dashboards: cache reports client-side or server-side for 60 seconds to spread load.
Can I use it in a commercial product?

Yes — fair use applies (don't resell the raw JSON as "your" API). Link back with "Scan by Analyzer69000" or leave the built-in Powered by branding in the embeds. Custom accent colors, custom themes, all allowed — we want the widgets in your UI.

Is the embed safe to drop into my production site?

Yes. Specifically designed to be boring security-wise:

  • Shadow-DOM isolated — zero CSS leakage in either direction
  • All user-derived strings HTML-escaped before render
  • Logo images gated through URL() protocol check (only https://) and loaded with referrerpolicy=no-referrer
  • No inline event handlers constructed from API data
  • No third-party network calls from any variant except bubbles, which lazy-imports D3 from cdn.jsdelivr.net (add to script-src if you run strict CSP)
  • Optional auto-refresh is capped at min 20s so it can't amplify a reload loop
What happens if Analyzer69000 is down?

The widget renders a graceful error state in your chosen theme — no broken layout, no console spam, no uncaught promises. Your page keeps working. Once the API comes back, the next data-refresh tick recovers automatically.

Do you store any user data?

No wallet connect, no cookies, no accounts, no PII. Rate limiting uses a SHA-256 hash of the requester IP — the raw IP is never written to disk. Token reports are cached for 12h keyed on address + chain only.

How do I report a bug or suggest a feature?

DMs open on X @cryptoflan. Include the token address, the response you got, and what you expected — fixes usually ship same day.