---
name: cookin-memecoin-intelligence
description: Judge a Solana or Pump.fun token at any stage, before entering, while holding, or after exiting: bundled supply, coordinated wallets, rug risk, holder quality, KOL holders, wallet reputation, and deployer history. Paid per call in USDC over x402, no account needed.
---

# Cookin memecoin intelligence

Cookin tracks every Pump.fun launch in real time and scores it from holder and trader behavior: coordinated wallet groups (bundles) and the supply they hold, holder quality, KOL positions, trader reputation, and deployer launch history. It answers "who is behind this token", not "what is the price".

## When to use this

Whenever a Solana or Pump.fun token needs judging, at any stage of
its life:

- **Before entering**: bundled supply, coordinated wallets, holder
  quality, which KOLs hold, the deployer's track record.
- **While holding**: whether coordinated groups still hold or have
  started selling, whether holders are rotating out, how the score
  and ratings have moved.
- **After exiting**: what the holder base actually did, and how this
  launch compares with the deployer's earlier ones.

Also to find candidates: the list routes return filtered launches,
tokens that are pumping, recent graduates, and what the top Cookin
agents just bought.

It covers a token from its first seconds through graduation, and it
covers wallets and deployers across their whole history.

Do not use it for prices, charts, or order routing. It describes who
is behind a token, not what it trades at.

## Paying for a call

Either send a Pro API key as `Authorization: Bearer <key>` (1 SOL
per 30 days, 600 requests per minute, WebSocket streams included,
from https://cookin.fun/account/api-keys), or pay per call with x402
(USDC on Solana) using any x402 client. Without one of the two,
every route answers 402 with the price. The facilitator pays the
network fee, so a wallet needs USDC only, and an errored call is
never charged.

Rate limits without a key, per IP: 600 requests per minute for paid
calls, 60 per minute for unpaid ones.

In an MCP host (Claude, Cursor, anything else that speaks MCP), skip
the code. Two ways in:

- Remote, nothing to install: point the host at
  `https://api.cookin.fun/mcp`. A tool call with no payment
  answers with the x402 quote; sign it and call again with the
  payment in the `x_payment` argument, or send a Pro key in the
  Authorization header.
- Local: `npx -y @cookinfun/mcp` runs the same tools on your machine
  and pays per call itself from the wallet in `SOLANA_KEY`.

```js
// npm i @x402/fetch @x402/svm @solana/kit @scure/base
import { x402Client, wrapFetchWithPayment } from "@x402/fetch";
import { registerExactSvmScheme } from "@x402/svm/exact/client";
import { createKeyPairSignerFromBytes } from "@solana/kit";
import { base58 } from "@scure/base";

const signer = await createKeyPairSignerFromBytes(base58.decode(process.env.SOLANA_KEY));
const client = new x402Client();
client.setSpendControls({ maxAmountPerPayment: "$0.05" });
registerExactSvmScheme(client, { signer });

const fetchWithPayment = wrapFetchWithPayment(fetch, client);
const res = await fetchWithPayment("https://api.cookin.fun/v1/tokens/<mint>");
const { data } = await res.json();
data.ratings; // { score: "green", bundle: "red", ... }
```

## Endpoints

- `GET /v1/tokens/{mint}` ($0.02): Full Cookin snapshot for one Solana token: quality score, holders, bundles (coordinated wallets), KOL positions, holder behavior cohorts, pump/dump signals, and a green/yellow/red rating per metric. Query: fields. [Docs](https://cookin.fun/api/tokens/snapshot)
- `GET /v1/tokens/{mint}/trades` ($0.01): Recent trades for one Solana token, each with the trader's history: PnL, win rate, bundle membership, and smart-money flag. [Docs](https://cookin.fun/api/tokens/trades)
- `GET /v1/tokens/new` ($0.01): Newly launched Pump.fun tokens that passed Cookin's rug filters, with quality signals. [Docs](https://cookin.fun/api/tokens/lists)
- `GET /v1/tokens/pumps` ($0.01): Pump.fun tokens currently pumping, with quality signals and holder behavior. [Docs](https://cookin.fun/api/tokens/lists)
- `GET /v1/tokens/graduated` ($0.01): Recently graduated Pump.fun tokens, with quality signals and holder behavior. [Docs](https://cookin.fun/api/tokens/lists)
- `GET /v1/tokens/agents` ($0.01): The 20 most recent buys by the top Cookin trading agents, newest first, each with quality signals plus when it was bought and by which agent. [Docs](https://cookin.fun/api/tokens/lists)
- `GET /v1/traders/{address}` ($0.01): Trading profile of one Solana wallet: PnL, ROI, win rate, bundle and smart-money flags. [Docs](https://cookin.fun/api/traders/stats)
- `GET /v1/devs/{address}/tokens` ($0.01): Launch history of one token deployer: every token, bond rate, and peak market caps. Query: limit, offset. [Docs](https://cookin.fun/api/devs/tokens)

Every response is `{"data": ..., "meta": {...}}`.

## Judging a token

`ratings` is the fastest read: one verdict per metric, using the
same thresholds as the Cookin UI. `neutral` means no reading yet,
which is normal in a token's first seconds, not a pass.

The thresholds behind the verdicts, so a number can be judged
without the verdict:

| Metric | green | yellow | red |
|---|---|---|---|
| `score.value` | 5 and up | 3 to 5 | under 3 |
| `score.bundle_pct` | under 50 | 50 to 65 | 65 and up |
| `score.dirty_pct` | under 50 | 50 to 60 | over 60 |
| `score.jeets_pct` | under 10 | 10 to 20 | over 20 |
| `score.dumpers_pct` | under 50 | 50 to 65 | over 65 |
| `score.alpha_hands_pct` | over 30 | 25 to 30 | under 25 |
| `score.in_profit_pct` | over 55 | 40 to 55 | under 40 |
| `score.conviction_score` | over 60 | 50 to 60 | under 50 |
| `score.cooktimer_slots` | 2500 and up | 1000 to 2499 | under 1000 |

Three more reads that carry most of the signal:

- `bundles.owned_pct_supply` is the share of supply held by
  coordinated wallet groups, and `bundles.red_count` is how many of
  those groups are heavy net sellers. High supply plus red groups is
  the classic coordinated exit setup.
- The two heaviest `cohorts.sell_impact_pct` buckets
  (`under_neg9_9` and `neg9_9_to_neg3_6`) are the share of supply
  held by wallets that historically nuke charts when they exit.
- `status.is_og` false means the token reuses an earlier token's
  symbol, name, image, or socials. `status.duplication` says which.

## Spending less

- Start with one `/v1/tokens/{mint}` snapshot per token, then stop if
  its ratings already answer the question.
- `?fields=bundles,score,ratings` trims the response at the same price.
- Cache deployer history; it changes slowly.
- Use a Pro key and its WebSocket feeds instead of polling, past a
  few thousand calls a month.

## Field reference

Every field of every response, with what it means. A type like
`integer | null` means the field can be absent in that reading.

### DevSummary

- `ath_mcap_percentiles`: Spread of peaks, so one lucky launch does not read as typical.
  - `p25` (integer | null): 25th percentile of this deployer's peak market caps, in USD.
  - `p50` (integer | null): Median of this deployer's peak market caps, in USD.
  - `p75` (integer | null): 75th percentile of this deployer's peak market caps, in USD.
  - `p90` (integer | null): 90th percentile of this deployer's peak market caps, in USD.
- `ath_milestones[]`: Survival curve: how many launches reached each market cap rung.
  - `mcap` (integer): Market cap rung, in USD.
  - `pct` (number): Share of the sample that reached it.
  - `reached` (integer): Launches that ever reached it.
- `ath_sample_size` (integer): Launches with a recorded peak, the denominator below.
- `best_ath_mcap` (integer | null): Highest peak market cap across all launches, in USD.
- `bond_rate` (number): Share of launches that graduated, 0 to 100.
- `bonded_count` (integer): Of those, how many graduated.
- `total_deployed` (integer): Tokens this deployer has launched.

### DevToken

- `ath_at` (string | null): Time of that peak.
- `ath_mcap` (integer | null): Highest market cap reached, in USD. Null when never recorded.
- `ath_slot` (integer | null): Solana slot of that peak.
- `deployed_at` (string | null): Launch time.
- `dex_paid` (boolean): True once a DexScreener order was confirmed.
- `has_migrated` (boolean): True when this launch graduated.
- `image_uri` (string | null): Token image URL.
- `launchpad` (string | null): Launchpad the token was deployed on.
- `migrated_at` (string | null): When it graduated.
- `mint` (string): Token mint address.
- `name` (string): Token name.
- `symbol` (string): Token symbol.

### Duplication

- `image` (boolean | null): True when the image hash matches an earlier token.
- `name` (boolean | null): True when the name matches an earlier token.
- `symbol` (boolean | null): True when the symbol matches an earlier token.
- `symbol_name` (boolean | null): True when the symbol and name together matches an earlier token.
- `telegram` (boolean | null): True when the Telegram link matches an earlier token.
- `twitter` (boolean | null): True when the Twitter link matches an earlier token.
- `website` (boolean | null): True when the website matches an earlier token.

### Error

- `code` (string): Stable machine-readable error code.
- `message` (string): Human-readable explanation. May change.
- `request_id` (string): Matches the X-Request-Id response header.
- `retry_after` (integer): Seconds until the window resets. Present on rate_limited.
- `upgrade_url` (string): Where to subscribe. Present on payment_required.

### Meta

- `cached_at` (string): When this response was rendered.
- `request_id` (string): Matches the X-Request-Id response header. Quote it in support.

### Page

- `limit` (integer): Page size applied, after clamping to the maximum.
- `offset` (integer): Rows skipped.
- `returned` (integer): Rows in this page.

### Ratings

- `alpha_hands` (string): Supply held by wallets that historically pick winners.
- `bundle` (string): Supply held by coordinated wallet groups.
- `conviction` (string): Holder conviction index.
- `cooktimer` (string): Expected slots before holders sell.
- `dirty` (string): Supply held by suspicious wallets.
- `dumpers` (string): Supply held by wallets with heavy sell impact.
- `in_profit` (string): Supply currently in unrealized profit.
- `jeets` (string): Supply held by quick sellers.
- `pump_dump` (string): Pump versus dump condition counters.
- `score` (string): Overall Cookin quality score.

### TokenCard

- `agent_bought_at` (string | null): When a top Cookin agent bought this token. Set on the agents list only.
- `agent_buyer` (string | null): Which agent bought it. Set on the agents list only.
- `alpha_hands_pct` (number): Supply held by wallets that historically pick winners.
- `chart_nukers_pct` (number): Supply held by wallets that historically nuke charts.
- `conviction_score` (number | null): Weighted holder conviction.
- `deployed_at` (string | null): Launch time.
- `description` (string | null): Token description from its metadata.
- `dex_paid` (boolean): True once a DexScreener order was confirmed.
- `diamond_hands_pct` (number): Supply held longer than 10 minutes.
- `dirty_pct` (number): Supply held by suspicious wallets.
- `dump_conditions_met` (integer | null): Dump conditions currently true.
- `duplication`: see Duplication.
- `has_migrated` (boolean): True once the token graduated.
- `image_uri` (string | null): Token image URL.
- `kols_in_count` (integer): Tracked KOL wallets currently holding.
- `launchpad` (string | null): Launchpad the token was deployed on.
- `mcap` (integer): Current market cap in USD.
- `mint` (string): Token mint address.
- `name` (string): Token name.
- `pump_conditions_met` (integer | null): Pump conditions currently true.
- `ratings`: see Ratings.
- `score` (number): Cookin quality score.
- `symbol` (string): Token symbol.
- `telegram` (string | null): Telegram link from the token metadata.
- `twitter` (string | null): Twitter link from the token metadata.
- `website` (string | null): Website link from the token metadata.

### TokenSnapshot

- `bundles`: Coordinated wallet groups (bundles) holding this token.
  - `count` (integer): Confirmed coordinated wallet groups holding this token.
  - `owned_pct_supply` (number): Share of supply held by bundle wallets.
  - `red_count` (integer): Of those, the groups flagged as heavy net sellers.
  - `top_3_sizes_pct[]`: The three largest bundles, by supply held.
- `cohorts`: Which share of owned supply sits in each behavioral bucket.
  - `buys_pct`: How many tokens holders have bought before.
    - `between_100_1k` (number): Share of owned supply.
    - `between_10_100` (number): Share of owned supply.
    - `between_1k_10k` (number): Share of owned supply.
    - `over_10k` (number): Share of owned supply.
    - `under_10` (number): Share of owned supply.
  - `hcr_pct`: Holders' healthy-coins rate: how often their picks survive.
    - `doa` (number): Share of owned supply.
    - `insider_vibes` (number): Share of owned supply.
    - `kiss_of_death` (number): Share of owned supply.
    - `mid` (number): Share of owned supply.
    - `strong` (number): Share of owned supply.
  - `hold_duration_pct`: How long holders have held.
    - `between_150s_300s` (number): Share of owned supply.
    - `between_300s_600s` (number): Share of owned supply.
    - `between_60s_150s` (number): Share of owned supply.
    - `over_600s` (number): Share of owned supply.
    - `under_60s` (number): Share of owned supply.
  - `pnl_pct`: Holders' lifetime profit and loss, in SOL.
    - `loss_0_to_50` (number): Share of owned supply.
    - `loss_50_plus` (number): Share of owned supply.
    - `profit_0_to_50` (number): Share of owned supply.
    - `profit_150_plus` (number): Share of owned supply.
    - `profit_50_to_150` (number): Share of owned supply.
  - `roi_pct`: Holders' lifetime return on investment.
    - `bleeding` (number): Share of owned supply.
    - `flat` (number): Share of owned supply.
    - `printing` (number): Share of owned supply.
    - `rekt` (number): Share of owned supply.
    - `sus_high` (number): Share of owned supply.
  - `sell_impact_pct`: What holders' past exits did to the price. The first two buckets are chart nukers.
    - `neg0_61_to_pos2_2` (number): Share of owned supply.
    - `neg3_6_to_neg0_61` (number): Share of owned supply.
    - `neg9_9_to_neg3_6` (number): Share of owned supply.
    - `over_pos2_2` (number): Share of owned supply.
    - `under_neg9_9` (number): Share of owned supply.
  - `sol_balance_pct`: Holders' SOL balances.
    - `between_10_100` (number): Share of owned supply.
    - `between_1_3` (number): Share of owned supply.
    - `between_3_10` (number): Share of owned supply.
    - `over_100` (number): Share of owned supply.
    - `under_1` (number): Share of owned supply.
- `holders`: Holder count and concentration. Percentages are 0 to 100.
  - `count` (integer): Holder count.
  - `pct_supply_owned` (number): Share of supply held by tracked wallets.
  - `top[]`: The three largest holders.
    - `address` (string): Holder wallet.
    - `pct_of_supply` (number): Share of supply this wallet holds.
  - `top_10_pct` (number): Share of supply held by the top 10 holders.
  - `top_3_pct` (number): Share of supply held by the top 3 holders.
  - `top_5_pct` (number): Share of supply held by the top 5 holders.
- `kols`: KOL wallets currently holding this token.
  - `count` (integer): Tracked KOL wallets currently holding.
  - `list[]`: 
    - `expected_sell_slot` (integer | null): Slot this KOL is expected to sell at.
    - `pct_of_supply` (number): Share of supply this KOL holds.
    - `sell_impact` (number | null): What this KOL's past exits did to prices.
    - `user_name` (string | null): KOL name as Cookin tracks it.
    - `wallet` (string): KOL wallet.
- `market`: Market cap now and at its peak.
  - `ath_at` (string | null): Time of that peak. Null before the first trade.
  - `ath_mcap` (integer): Highest market cap reached, in USD.
  - `ath_slot` (integer): Solana slot of that peak.
  - `mcap` (integer): Current market cap in USD.
- `meta`: Identity and static metadata.
  - `deployed_at` (string | null): Launch time.
  - `deployer` (string | null): Wallet that deployed the token.
  - `description` (string | null): Token description from its metadata.
  - `image_uri` (string | null): Token image URL.
  - `launchpad` (string | null): Launchpad the token was deployed on, for example pumpfun.
  - `mint` (string): Token mint address.
  - `name` (string | null): Token name.
  - `symbol` (string | null): Token symbol.
  - `telegram` (string | null): Telegram link from the token metadata.
  - `twitter` (string | null): Twitter link from the token metadata.
  - `website` (string | null): Website link from the token metadata.
- `ratings`: see Ratings.
- `score`: Headline score and the sub-metrics behind it. Percentages are 0 to 100.
  - `alpha_hands_pct` (number): Supply held by wallets that historically pick winners.
  - `bundle_pct` (number): Supply held by coordinated wallet groups.
  - `conviction_score` (number | null): Weighted holder conviction.
  - `cooktimer_slots` (number): Expected slots before the average holder sells.
  - `dirty_pct` (number): Supply held by suspicious wallets.
  - `dumpers_pct` (number): Supply held by wallets with heavy historical sell impact.
  - `in_profit_pct` (number): Supply currently in unrealized profit.
  - `jeets_pct` (number): Supply held by wallets that historically sell within seconds.
  - `smart_wallets_count` (integer): Smart-money wallets currently holding.
  - `value` (number): Cookin quality score, the same value the UI shows.
- `signals`: Momentum counters. Null until the token has traded.
  - `dump_conditions_met` (integer | null): Dump conditions currently true.
  - `pump_conditions_met` (integer | null): Pump conditions currently true.
- `status`: Lifecycle and duplication status.
  - `dex_paid` (boolean): True once a DexScreener order was confirmed.
  - `dex_paid_at` (string | null): When the DexScreener order was confirmed.
  - `duplication`: see Duplication.
  - `has_migrated` (boolean): True once the token graduated to Raydium or PumpSwap.
  - `is_og` (boolean): True when no duplication flag is set: an original, not a copy.
  - `migrated_at` (string | null): When it graduated.

### Trade

- `avg_hold_slots` (number | null): Slots the trader typically holds for.
- `bundle_id` (string | null): Identifier of that group.
- `bundle_name` (string | null): Name of that group.
- `bundled` (boolean): True when this trader belongs to a coordinated group.
- `bundled_trades_rate` (number | null): Share of the trader's trades that were bundled.
- `buys_count` (integer | null): Buys the trader had made before, at this trade.
- `healthy_coins_rate` (number | null): Share of the trader's past picks that survived.
- `is_buy` (boolean): True for a buy, false for a sell.
- `mcap` (integer): Market cap in USD at this trade.
- `mint` (string): Token mint address.
- `roi` (number | null): Trader's lifetime return on investment at this trade.
- `sell_impact` (number | null): What the trader's past exits did to prices.
- `signature` (string): Solana transaction signature.
- `slot` (integer): Solana slot.
- `smart_money` (boolean): True when Cookin classes this trader as smart money.
- `sol_amount` (number): SOL moved.
- `timestamp` (string | null): When the trade happened.
- `token_amount` (number): Tokens moved.
- `total_buys_sol` (number | null): SOL the trader had ever spent buying, at this trade.
- `unique_id` (string): Stable id for this trade.
- `user_address` (string): Trader wallet.
- `user_name` (string | null): Trader name, when Cookin tracks one.
- `user_pnl` (number | null): Trader's lifetime PnL in SOL at this trade.
- `user_sol_balance` (number | null): Trader's SOL balance at this trade.
- `win_rate` (number | null): Trader's win rate at this trade.

### Trader

- `avg_hold_slots` (integer | null): Slots this wallet typically holds for.
- `bundled_trades_rate` (number | null): Share of trades made inside a coordinated group.
- `healthy_coins_rate` (number | null): Share of past picks that survived.
- `last_active` (string | null): Last trade Cookin saw from this wallet.
- `median_hold_slots` (integer | null): Median slots held.
- `name` (string | null): Trader name, when Cookin tracks one.
- `pnl_sol` (number | null): Lifetime profit and loss, in SOL. Can be negative.
- `recent_mints[]`: Most recent tokens traded.
- `roi` (number | null): Lifetime return on investment, as a ratio.
- `sell_impact` (number | null): What this wallet's exits typically do to prices.
- `smart_money` (boolean): True when Cookin classes this wallet as smart money.
- `total_buys_sol` (number | null): SOL ever spent buying.
- `user_address` (string): Wallet address.
- `win_rate` (number | null): Share of trades closed in profit.


## Further reading

- [Overview: what the API returns and who it is for](https://cookin.fun/api)
- [Quickstart: the first call in a few lines](https://cookin.fun/api/quickstart)
- [Authentication: Bearer keys and key management](https://cookin.fun/api/authentication)
- [Pay per call with x402: prices, headers, client example](https://cookin.fun/api/x402)
- [Pricing: Pro at 1 SOL per 30 days, or per call](https://cookin.fun/api/pricing)
- [Rate limits: windows, headers, Retry-After](https://cookin.fun/api/rate-limits)
- [Errors: the envelope and every error code](https://cookin.fun/api/errors)
- [Token lists: new, pumps, graduated, agents](https://cookin.fun/api/tokens/lists)
- [Token snapshot: every metric for one mint](https://cookin.fun/api/tokens/snapshot)
- [Token trades: recent trades with trader history](https://cookin.fun/api/tokens/trades)
- [Trader stats: one wallet's lifetime profile](https://cookin.fun/api/traders/stats)
- [Deployer tokens: a deployer's launch history](https://cookin.fun/api/devs/tokens)
- [WebSocket tokens:live: every new deploy](https://cookin.fun/api/websocket/tokens)
- [WebSocket frames:live: enriched trade frames](https://cookin.fun/api/websocket/frames)
- [Pump.fun data: what Cookin tracks and how](https://cookin.fun/api/pumpfun)
- [DEX coverage: venues and graduation](https://cookin.fun/api/dexes)
- [Use cases: what people build on this](https://cookin.fun/api/use-cases)
- [SDKs: the Node and Python clients](https://cookin.fun/api/sdk)
- [Changelog: what changed and when](https://cookin.fun/api/changelog)
