ANALyzer69000
Analyzer69000 · Developer API v1

One API. Seven chains.
Every pool. Free.

Honeypot simulation · LP burn & lock verification · deployer rug-history · 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: * 7 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

Most recent first. Older entries collapsed below.

2026-04-26 · In-house data + live bundle inspector + new commands

  • In-house volume — every chain — trending volume + 24h figures across Solana + 7 EVM chains now flow from our own real-time swap ingest. Numbers update as trades land, not on a third-party refresh cycle. Cross-chain support: Solana, ETH, BSC, Base, Arbitrum, Optimism, Polygon, Avalanche.
  • Live bundle wallet inspector — every wallet in a token's launch cluster now shows both its launch-time bag AND current live balance, with status pills (HOLDING / PARTIAL / SOLD / RE-ACC) and an inline % held bar. Click any row to expand a forensic drawer. Pool / authority addresses are filtered out so AMM vault outliers can't distort the headline.
  • Telegram bot — 13 commands live@analyzer69000_bot now ships with /scan /holds /pools /buyers /trending /alpha /rugs /launchpads /compare /deployer /boost /stats /help. Paste any CA, get the report. Group-safe, no wallet connect.
  • USDC pay on Verified Boosts — alongside SOL, every tier accepts USDC. One signature in any wallet-standard wallet (Phantom, Solflare, Backpack, Jupiter, Trust, Coinbase, OKX, Magic Eden, Brave, Exodus, Glow). Live boost stats roll up SOL + USDC into one USD headline at /boost + /boosted.
  • Pre-launch advisory bookings — founders can book a 1:1 directly on /launch-guide. CST 9am–4pm slots (UTC shown alongside, DST-aware), Mon–Fri. Discord / Telegram / X / email contact channels.
  • Editorial design pass — flat hairline-divided sections across /launch-guide, /investigations, and /admin. Unified premium form controls — no more native blue dropdowns. Avalanche logo + chip added everywhere.
  • Smarter scoring on CEX-listed tokens — established tokens with deep CEX coverage no longer get falsely tagged LIKELY_RUG just because their DEX liquidity is thin (their float lives on exchanges). Historical signals on mature tokens are visible but down-weighted with full transparency.
  • SEO + structured data — comprehensive sitemap, JSON-LD on every page (Article / FAQ / Breadcrumb / Organization / Software), explicit AI-crawler rules in robots.txt.
  • Boost stacking + featured visibility fix — multiple tier purchases on the same token render as additive value with all tier badges shown. Featured tier consistently surfaces across every trending feed at correct priority.
  • Logo resolution upgraded — every chain's token logos resolve through a multi-source cascade so freshly-launched tokens (pump.fun graduates, new EVM mints) get a logo on the OG card + scan page within minutes of launch instead of falling back to a placeholder.
  • Wash-trade math hardened on EVM — net-delta accounting prevents the gross-inflation that was over-counting wash-traded launches. Supply-sniped % is now the NET supply held by first-window buyers, with a wash flag when intra-wallet rotation exceeds 40% of gross.

2026-04-25 · Verified Boosts complete + bundle accuracy + UI polish

  • Verified Boosts feature — paid trending slots gated by forensic scan. 3 tiers (Featured / Trending / Spotlight) × 2 currencies (SOL or USDC). x402-native for agents, single-use payment binding, 50% on-chain refund if quality drops mid-run. Buy → · Public history →
  • Premium boost-token OG card — auto-rendered share card per boosted token with logo, organic-score bar, forensic verdict pill, sparkline, and tier badge.
  • Boost stacking + extension — buying any tier on a token with an active slot extends time cumulatively. Same buyer can update tagline / link / accent; community extenders can only add time. Multiple tiers stack independently.
  • 10-wallet picker + auto-discovery — every modern Solana wallet auto-detects via the wallet-standard registration event (including Jupiter). Last-used wallet persisted between visits.
  • Recovery flow for stranded payments — payment intent + signature persisted on broadcast. If verification fails, a banner on next visit lets buyers re-verify without paying again.
  • Adaptive cache on token reports — fresh tokens stay live (60s freshness), older tokens stay fast (12h). Re-scanning the same address is effectively free.
  • Bundle resolution detection — the bundle card flags "BUNDLE RESOLVED" when launch buyers have already exited at scale, so bundled launches that have since dumped don't get mislabelled "organic".
  • Social-verification relevance filter — website-scraped socials require a name/symbol match before being labelled "verified official". Stops affiliate links + dev personal accounts being mislabelled.
  • Live trade tape on every chain — last-N swaps on the best pair, organic vs wash split, top buyers + sellers — surfaced on /check and via /api/scan/tape.
  • Security pass — error-redaction tightened across every public endpoint. Per-IP rate limits on every OG card.
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 colour-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 (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/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.
  • /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 · 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 · redemption flags (bundle_resolved, adoption_organic).

Tokens with no bundle data (blue-chip fast-path, very old tokens) return bundle_detected: false with a descriptive 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 · top-5 risks (with redeemed flag) · top-6 positives · market snapshot · liquidity_lock · holders summary · deployer.trade_activity (counts + USD totals, not the full tx list) · bundle.hold_analysis (aggregate) · redemption flags · website · launchpad. Stable keys across schema bumps. Ideal for Claude/OpenAI/MCP tool-use. See Agents & LLMs for the full tool snippet.

🛡 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-5 risks, top-5 positive factors, market snapshot, launchpad, LP-lock verdict, deployer headline. 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:

{
  "address": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",
  "chain": "solana",
  "verdict": "BLUE_CHIP",
  "rug_score": 5,
  "blue_chip_score": 95,
  "top_risks": [],
  "top_positives": [
    {"text": "Mint authority renounced", "weight": 10},
    {"text": "Top 10 holders < 30% — well distributed", "weight": 15}
  ],
  "market": {"price_usd": 0.73, "liquidity_usd": 9800000, "volume_24h_usd": 4300000},
  "liquidity_lock": {"verdict": "fully_secured", "secured_pct": 100},
  "_summary": 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 (base58 mint) and EVM (0x... contract on Ethereum, Base, BSC, Arbitrum, Optimism, Polygon). Verdict is one of: 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"]}
    },
    "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)

We deliberately don't run a hosted MCP endpoint — an internet-facing MCP server expands attack surface, and the MCP spec recommends running the server adjacent to the model (stdio transport) so credentials and trust boundaries are local. Drop this tiny wrapper into your own MCP host:

// 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'] },
      },
    },
  }],
}));

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());
Safety checklist. The wrapper above follows current MCP best practices: stdio transport (no network attack surface), strict input validation before any network call, timeouts inherited from fetch, no secrets read from environment, isolated-per-invocation request pattern. Paste your own auth header on the fetch line if you need a higher-tier key (future). Never expose the stdio server to external TCP — run it only as an MCP host child process.

🧬 Response schema

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

top-level root— identifiers + version
address string token mint / contract — echoed from request
chain enum solana · eth · base · bsc · arb · op · poly · hype
schema_version int bumped when the report shape changes materially. Cached reports with a different version are re-scanned on next hit.
fetched_at iso8601 when this report was computed
_cached boolean true if served from the 12h cache
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
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
age_hours number
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
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)
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 buy-then-sell simulation cross-check
verdict enum honeypot · 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, …
sources array ['sim', 'indexer']
liquidity_lock object— LP burn + lock verification (both chains)
verdict enum fully_secured · mostly_secured · partially_secured · unlocked
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
bundle object— launch bundle cluster + hold analysis + wash detection
detected · reliable boolean
severity enum clean · mild · moderate · heavy · extreme · unknown
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?}
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 12h cache or freshly computed
fetched_at iso8601— scan timestamp; append to OG URLs as &v=<unix> for cache-bust
schema_version int— bump invalidates cached reports

🎯 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, …1:1 wrapped representation. 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.

🧱 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?

Seven, with one unified scoring model:

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

Chain is auto-detected from address format. Pass chain=auto or be explicit with chain=base etc.

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.

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.