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.
🆕 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 feed —
GET /api/trendingreturns 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_launchstruct 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₅616notation 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.
💠 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.
[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.
<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
| Variant | Logo | Verdict | Score | Stats | Security chips | Live price | Best for |
|---|---|---|---|---|---|---|---|
card | ✓ | ✓ | ring | custom | alert banner | via data-show | landing pages, reports |
mini | ✓ | ✓ | numeric | liq | — | — | watchlists, sidebars |
badge | md/lg only | ✓ | rug/100 | — | — | — | inline prose, chat |
stats | ✓ | ✓ | — | full | via data-show | via data-show | research pages, token pages |
gauge | ✓ | ✓ | dial + count-up | price/change | honeypot · LP · dev · renounce | ✓ | hero, Discord bot reply |
ticker | ✓ | ✓ | — | price + 24h | — | ✓ | footers, live strips |
bubbles | ✓ | ✓ | — | holders · top1 · top10 · LP · burn | — | — | holder analysis |
🎨 Theme gallery
Pick one of nine hand-tuned palettes or override any accent with your brand color. Every variant respects the theme.
<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.
🎛 All attributes
| Attribute | Values | Default | Description |
|---|---|---|---|
data-a69 | token address | — | required |
data-variant | card · mini · badge · stats · gauge · ticker · bubbles | card | widget style |
data-theme | dark · light · midnight · cyber · terminal · ice · sunset · matrix · holo | dark | color palette |
data-accent | hex like #00ff9d | — | override theme accent with your brand color |
data-size | sm · md · lg | md | container max-width |
data-border | solid · gradient · glow · none | solid | border/glow style |
data-radius | sm · md · lg · full | md | corner radius |
data-refresh | integer seconds (≥ 20) | 0 | auto re-fetch interval; 0 = once |
data-animate | true · false | true | entrance + count-up animations |
data-show | rug,blue,safety,price,liq,vol,mc,age,holders,top10,honeypot,tax,lplock,dev | auto | pick which stats to render (card / stats). New: honeypot, tax (buy/sell), lplock (LP secured %), dev (rug history). |
data-link | true · false | true | disable 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
| Param | Type | Required | Description |
|---|---|---|---|
address | string | yes | Solana base58 mint or EVM 0x… contract |
chain | enum | no | auto · 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
OHLCV candle backfill for the token's best-liquidity pool. Data structured for direct use with charting libraries.
| Param | Type | Default | Description |
|---|---|---|---|
address | string | — | Token address (or pass pair instead) |
pair | string | — | Pool / pair address (skips auto-selection) |
chain | enum | solana | Chain slug |
interval | enum | 1h | 1m · 5m · 15m · 1h · 4h · 1d |
limit | int | 250 | Candles to return (20–1000) |
Fallback chain: requests resolve through three stages so freshly-launched or micro-cap pairs still chart:
- Shared cache — per-pool bar store, refreshed nightly for the top-40 tokens by access count.
- 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).
- 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
Last-N tokens scanned across all users, plus 30-day roll-up: unique tokens, total scans, rugs caught, clean scans.
🖼 GET /api/og/token
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/trending
Live trending tokens across 7 chains (Solana + Ethereum + BSC + Base + Arbitrum + Optimism + Polygon). Refreshed server-side every 5 minutes, CDN-cached so your traffic doesn't hit upstream. Stables + gas + wrapped blue-chips auto-filtered (USDC / USDT / USDe / cbBTC / WBTC / stETH / wstETH / WSOL / jitoSOL / WBNB / WPOL / etc.) so the feed shows actual movers.
Query params:
chain— optional; one ofsolanaethbscbasearboppoly. Invalid values are ignored and the full feed returns.
Response:
{
"generated_at": "2026-04-22T19:53:00.000Z",
"ttl_seconds": 300,
"source": "live_market_registry",
"chain_filter": null, // or e.g. "solana"
"per_chain_counts": { "solana": 12, "eth": 12, "bsc": 12, ... },
"tokens": [
{
"chain": "solana",
"address": "Hon2rHAi…pump",
"symbol": "MAGA",
"price_usd": 0.02058,
"volume_24h_usd": 9934521,
"liquidity_usd": 632917,
"change_24h_pct": 71.96,
"age_hours": 1488,
"pool_address": "…",
"logo_url": "https://cdn…/token-logo.png",
"trade_url": "https://jup.ag/swap?sell=So111…&buy=Hon2r…",
"scan_url": "/check/Hon2rHAi…pump"
}
// …up to 12 per chain
],
"disclaimer": "Trending is a signal, not safety. Scan every token before trading. Not financial advice."
}Related: /trending + /trending/<chain> = shareable pages (OG-unfurl ready) · /api/og/trending = PNG social card.
📦 GET /api/v1/bundle
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
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.
| Tier | Placement | Duration | SOL | USDC | Gate |
|---|---|---|---|---|---|
| Featured | Top of cross-chain trending | 24h | 0.5 SOL | $79 | organic_score ≥ 60 |
| Trending | Pinned in per-chain trending | 12h | 0.2 SOL | $35 | organic_score ≥ 50 |
| Spotlight | Dedicated card on /check/<addr> | 6h | 0.1 SOL | $15 | LP secured |
Endpoints
X-PAYMENT header (x402). Returns 402 with manifest if no payment info presenttoken_reports)Flow
- Call
/api/boost/eligibilityto confirm your token passes the tier gate. Returns live organic score + LP verdict. - POST
/api/boost/intentwith token + tier + currency + buyer wallet. Server returnsintent_id,reference(single-use 32-byte pubkey),receiver_wallet, and theexpected_amount. - POST
/api/boost/build-txwith theintent_id. Server returns a base64-encoded unsigned Solana tx (SystemProgram transfer or USDC SPL transfer + reference key attached). Client signs + broadcasts. - POST
/api/boost/buywith{intent_id, tx_signature}(or viaX-PAYMENTheader for x402). Server verifies signer, mint (USDC), recipient, amount, age, AND re-runs the eligibility gate. - 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 bex.com,t.me,discord.gg,discord.com, or subdomain thereof.accent_color— strict#RRGGBBregex.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"🚀 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).
| Key | Type | Description |
|---|---|---|
id | string | Canonical platform slug — pump_fun · letsbonk · moonshot · believe · virtuals · jupiter_studio · daos_fun · raydium_launchpad · streamflow · meteora_m3m3 · four_meme · clanker · flaunch. |
name | string | Human-readable display name. |
url | string | Official launchpad homepage. |
confidence | enum | primary (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). |
source | enum | Where the match came from: mint_suffix · onchain · dex · website · metadata. |
evidence | string | The specific signal that matched (program id, DEX name, matched phrase). |
logo_svg | string | Inline 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.
🪪 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' | jqSample 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());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
solana · eth · base · bsc · arb · op · poly · hypetoken object— metadata, authorities, age, launchpad
market object— price, liquidity, volume, per-DEX + CEX listings + per-chain breakdowns
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.deployer object— dev address + trade/movement trail
security object— contract safety (EVM)
liquidity_lock object— LP burn + lock verification (both chains)
bundle object— launch bundle cluster + hold analysis + wash detection
price_basis)holding · sold_partial · sold_all · reaccumulatedpool_or_authority when the wallet looks like an AMM vault / treasury (not a retail bundler)holders object— top-20 distribution (Solana + EVM)
organic_score object— 0–100 composite: launch cleanliness + hold/sold + distribution
organic · mostly_organic · mixed · coordinated · manipulated{kind, weight, ok, detail} — positive weights add to the score, negatives subtractsafety object— scores + reasons + redemption flags
organic_adoption, bundle_resolvedsocial object— verified + discovered socials
fair_launch object— derived fair-launch detection (both chains)
deployer_verification object— multi-signal deployer authenticity check
team_wallets array— pre-launch airdrop recipients (EVM only)
team_trades array— post-launch activity of team wallets (EVM only)
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.
| Verdict | Trigger | Meaning |
|---|---|---|
| LIKELY_RUG | rug_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_RISK | rug_score ≥ 40 | Multiple negative signals stacked |
| SUSPICIOUS | rug_score ≥ 25 | Concerning concentration, authority, or bundle signals |
| CAUTION | rug_score ≥ 12 | Minor flags — new token, single signal |
| CLEAN_ON_SURFACE | rug < 12, bc < 50 (or no age track record) | No negative signals, but not established either |
| ESTABLISHED | strict gate ($10M+ mcap, $500K+ liq, 30d+ age, active vol) OR (age > 30d AND bc ≥ 50) | Liquidity, holders, markets, age look solid |
| BLUE_CHIP | blue-chip qualified ($50M+ mcap, $2M+ liq, 90d+ age, active vol) AND bc ≥ 70 | Proven market, deep liquidity, distributed holders |
| Canonical-token overrides — pre-registered tokens skip the launch-window heuristics: | ||
| VERIFIED_STABLECOIN | USDC, USDT, DAI, FDUSD, … | Mint-controlled by issuer (Circle, Tether, MakerDAO). Bc floor 95. |
| VERIFIED_WRAPPED | WETH, WBTC, cbBTC, WSOL, … | 1:1 wrapped representation. Bc floor 95. |
| VERIFIED_LST | stETH, 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.
| Endpoint | Per minute | Per hour |
|---|---|---|
/api/v1/token · /api/scan/token | 30 | 300 |
/api/v1/bundle | 30 | 300 |
/api/scan/candles | 60 global + 30 per-pool | — |
/api/scan/tape | 30 | — |
/api/scan/honeypot | 20 | — |
/api/scan/impact | 120 | — |
/api/scan/wallet-detail | 30 | — |
/api/scan/funder-chain | 20 | — |
/api/scan/deep-bundle | 6 | 30 |
/api/trending | 60 | — |
/api/social/feed | 30 | — |
/api/comments/search | 15 | 200 |
/api/comments/list | 60 | 600 |
/api/comments/wallet-lookup | 10 | 120 |
/api/launch/book | — | 5 |
/api/check/[addr] (page renderer) | 30 | 300 |
/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, Polygon —
0x…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.
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 (onlyhttps://) and loaded withreferrerpolicy=no-referrer - No inline event handlers constructed from API data
- No third-party network calls from any variant except
bubbles, which lazy-imports D3 fromcdn.jsdelivr.net(add toscript-srcif 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.