Public API
Free, no key, CORS enabled. Please keep it under ~1 request/second. New maps are rate-limited per IP.
Holder map
GET https://bubblemaps.dev/api/map/8cHzQHUS2s2h8TzCmfqPKYiM4dSt4roa3n7MyRLApumpReturns {mint, job, map}. HTTP 202 while building (job.state queued/running, job.queuePos); map.nodes[] (address, share, cluster, label, kind), map.links[] (SOL / TOKEN / OTHER transfers), map.funderLinks[], map.clusters[] (size, share, members), map.phase fast|deep.
Launch health
Inside every map: map.launch = {status ok|unknown, score 0-100, breakdown[] (factor, share, penalty), sniperShare, bundleShare, devClusterShare, top10Share, topClusterShare, creator, createdSlot, earlyBuyers} and per-holder map.nodes[].flags (launch-slot, sniper, bundle, dev, dev-funded, dev-cluster). unknown = creation not reachable cheaply on the public RPC (mature tokens); top-10 and cluster share are still given.
Wallet
GET https://bubblemaps.dev/api/wallet/6rEiHJwqXoHKQ3BmGamGSoJ6wSG4Va7hn3aRcZvrrM8AEvery indexed token where the wallet is a top-250 holder: rank, share, cluster, cluster share, flags; serial = flagged in 2+ tokens. Page: /wallet/<address>.
Leaderboards
GET https://bubblemaps.dev/api/leaderboardsBoards: cleanest, concentrated, growing, devClusters, serialWallets. One board: /api/leaderboards/<board>. Pages: /leaderboards/<board>; OG image /og/leaderboards/<board>.png.
Suggest a label
POST /api/labels/suggest JSON {address, label, kind, note} → moderation queue (never public until approved). Approved labels: GET /api/labels.
Token index
GET https://bubblemaps.dev/api/tokens?sort=recent&limit=20Params: sort = recent | lookups | concentrated | mcap | holders, tab=trending, q, source=pumpai, limit, offset.
WebMCP tools (in-browser agents)
Every Bubbles page and the Terminal load /webmcp.js. When the browser exposes document.modelContext.registerTool, it registers read-only tools (all readOnlyHint:true, strict schemas, no write tools) that call the same public API: map_token(mint), get_clusters(), get_top_holders(limit), wallet_xray(address), clawd_decide(mint), compare_tokens(a,b), get_trending(), search_tokens(query), get_page_context(), navigate(route). Without WebMCP support the script does nothing.
Bubbles Data API (/v0)
Paths and JSON are compatible with the Bubblemaps v0 API shape (0.3.2), so existing clients can switch their base URL to this site. All data comes from Bubbles' own Solana pipeline. Chain: solana only (others return 422). Shares are fractions 0-1. Responses carry an X-Dt-Update header. Spec: /v0/openapi.json.
GET /v0/chainsGET /v0/tokens/search?query=GET|POST /v0/tokens/metadata[/solana/<mint>]?return_token_statsGET /v0/tokens/holders/solana/<mint>?limit=80|250|500×tamp=&return_metadataGET /v0/tokens/map/solana/<mint>?limit×tamp&use_magic_nodes=true&use_time_nodes=true&return_nodes&return_relationships&return_clusters=trueGET /v0/tokens/metrics/solana/<mint>: supply_stats (cexs, dexs, contracts, top_10_adjusted, bundles) and scores (Bubbles score in thebubblemaps_scorefield, gini, hhi, nakamoto)GET /v0/tokens/screenshot/solana/<mint>GET /v0/addresses/metadata/<address>,POST /v0/addresses/metadata{addresses}POST /v0/relationships/subgraph{addresses, context_token_key?}
Magic nodes: wallets outside the top holders that funded two or more of them. Time nodes: an exchange, DEX or whitelisted hub that funded a small group (2-12) of top holders. Exchanges, DEXes, contracts and hypernodes are hidden and excluded from clusters and scores; supernode-to-supernode links are ignored. timestamp reads from Bubbles' snapshot history. Anonymous use: 60 requests/min per IP; an X-ApiKey raises it to 600/min.
Trending
GET https://bubblemaps.dev/api/trendingScore, 1h/24h counts, velocity, sparkline snapshots and alerts.
Concentration history
GET https://bubblemaps.dev/api/history/8cHzQHUS2s2h8TzCmfqPKYiM4dSt4roa3n7MyRLApump
Resolve name / ticker
GET https://bubblemaps.dev/api/resolve?q=bonk
Live launches
GET https://bubblemaps.dev/api/live?limit=20&source=stonksource = all | pump | stonk. SSE stream: /api/live/stream. Feeds: pumpai.ai, stonkfun.xyz. Stonk token details: /api/stonk/<mint>.
Progress stream
GET /api/stream/<mint> (SSE)
Embeds
Iframe: <iframe src="https://bubblemaps.dev/embed/<mint>" width="100%" height="560"></iframe>
Badge: <img src="https://bubblemaps.dev/badge/<mint>.svg">
Usage counts
GET https://bubblemaps.dev/api/statsDaily aggregate counts only (lookups, requests, shares). No personal data.