v1 · Free during beta

Every Pump.fun token, scored in real-time.

The Cookin API is a REST + WebSocket signal layer on top of Pump.fun and Solana memecoins. Quality scores, bundle detection, trader behavior, live trade frames. The same data our own UI runs on.

What every response tells you

Quality score
Derived from ~50 underlying metrics like holder concentration, sell impact, bundle overlap.
Bundle detection
Union-find clustering of coordinated wallets. Every trade tells you if it's bundled and what percent of supply the bundle holds.
Trader stats
Per-wallet ROI, win rate, average hold, chart-nuking history. Snapshotted at trade time.
Duplication flags
7 booleans per token (symbol, name, twitter, image, ...) so copy-cats filter out immediately.
KOL tracking
Curated Solana KOL wallets flagged per token with % of supply held and expected sell slot.
Token lifecycle events
tokens:live WebSocket. Pushed as they happen: created, graduated, DEX-paid, metadata retrieved, duplication flags flipped.
Live trade frames
frames:live WebSocket firehose. Every enriched trade with per-trade trader context.
Cohort distributions
Uniform holders clustering by hold-time, past-buys, and SOL balance flags to detect coordinated supply.
Pump / dump signals
Per-token count of signal conditions currently met historically predicting pump or dump.

Two ways to start

REST · one-off lookup
Get everything we know about one token
curl -sS -H "Authorization: Bearer $API_KEY" \
  https://api.cookin.fun/v1/tokens/BgNrWZKAaZAa...
Snapshot schema →
WebSocket · live stream
Stream every enriched trade in real-time
const WebSocket = require("ws");

const API_KEY = process.env.API_KEY;
const url = `wss://api.cookin.fun/socket/websocket?vsn=2.0.0&api_key=${API_KEY}`;
const ws  = new WebSocket(url);

ws.on("open", () => {
  // Join frames:live (ref="1", join_ref="1").
  ws.send(JSON.stringify(["1", "1", "frames:live", "phx_join", {}]));

  // Heartbeat every 25s so Phoenix doesn't drop us.
  let n = 2;
  setInterval(() => {
    ws.send(JSON.stringify([null, String(n++), "phoenix", "heartbeat", {}]));
  }, 25_000);
});

ws.on("message", (buf) => {
  const [_joinRef, _ref, _topic, event, payload] = JSON.parse(buf);
  if (event === "frame") {
    const trade = payload.data.trades[0];
    console.log(payload.data.signature, trade.mint, trade.sol_amount);
  }
});
frames:live schema →

API endpoints

The full public surface. Each route links to its full schema page.

Tokens

List endpoints are curated: only promising tokens, obvious rugs filtered out. Full details on the Token lists page.

GET /v1/tokens/new Tokens deployed in the last few minutes. GET /v1/tokens/pumps Tokens currently pumping. GET /v1/tokens/graduated Tokens that recently graduated to Raydium / PumpSwap. GET /v1/tokens/survivors Tokens still alive 3-24h after deploy. GET /v1/tokens/:mint Full snapshot for one mint: score, holders, bundles, KOLs, cohorts, signals. GET /v1/tokens/:mint/trades Recent trades for one mint, each enriched with the trader's stats at trade time.

Traders

GET /v1/traders/:wallet Behavioral stats for one wallet: ROI, win rate, sell impact, holdings.

WebSocket

WS tokens:live Lifecycle events: created, graduated, DEX-paid, metadata retrieved, duplication flags flipped. WS frames:live Enriched trade firehose. One frame per Solana signature; each trade carries per-trade trader context.

Built for

Token scannersFilter Pump.fun deploys by quality score, holders, bundle status.
Wallet-tracker botsFrames firehose + user_address filter. No RPC calls needed.
Trading dashboardsSnapshot on load + WebSocket for live updates. Same signals as our UI.
Sniper strategiesSub-second new-token events with score attached at first frame.
Analytics + researchTrader behavioral history, KOL flow analysis, cohort distributions.
Alert botsGraduation, DEX-paid, dup flag flips, pushed as they happen.

Full endpoint-per-use-case mapping in the Use cases guide.

Quick facts

Base URL https://api.cookin.fun
Auth Authorization: Bearer <api_key>
Rate limit 60 req/min per key
Pricing Free during beta. No daily quota, no per-tx fees.

Try it in the next minute

Mint a free API key, paste the curl one-liner from the Quickstart, get a live token list back. No credit card, no rate limit until you're actually using it in production.

Bug or unclear docs? Include the request_id from the response envelope when reporting.

Ready to build? Mint an API key.