Catch Pump.fun Graduations Before and After Migration
Alert before a Pump.fun bonding curve fills, then catch the exact graduation event as liquidity migrates to Raydium.
Graduation alerts need warning and confirmation
A Pump.fun token "graduates" when its bonding curve fills up and liquidity migrates to Raydium / pumpfun-amm. That moment matters for trading, and you want to see it coming, not after the fact. A good graduation monitor tracks both sides of the event: tokens approaching the curve threshold and tokens that just migrated.
What you need
- Node.js 18+
- A Solana Tracker API key (free) and Datastream key (Premium+, same dashboard)
Step 1: Alert on near-graduation (bonding curve %)
The Datastream can notify you as soon as a token crosses a curve threshold:
import WebSocket from 'ws';
(globalThis as any).WebSocket = WebSocket;
const { Datastream } = await import('@solana-tracker/data-api');
const ds = new Datastream({ wsUrl: `wss://datastream.solanatracker.io/${process.env.ST_DATASTREAM_KEY}` });
await ds.connect();
ds.subscribe.curvePercentage('pumpfun', 90).on((token) => {
const pct = token.pools[0]?.curvePercentage;
console.log(`Near graduation: ${token.token.mint}, ${pct}%`);
});
Step 2: Catch the graduation moment itself
ds.subscribe.graduated().on((token) => {
const pool = token.pools[0]?.poolId;
console.log(`Graduated: ${token.token.name} -> ${pool}`);
});
Step 3: Fetch recently graduated tokens (REST, for backfill)
const graduated = await fetch(
'https://data.solanatracker.io/tokens/multi/graduated',
{ headers: { 'x-api-key': process.env.ST_API_KEY } }
).then(r => r.json());
Step 4: Combine into one pipeline
const watching = new Set<string>();
ds.subscribe.curvePercentage('pumpfun', 85).on(t => watching.add(t.token.mint));
ds.subscribe.graduated().on(t => {
if (watching.has(t.token.mint)) {
console.log('Watchlist token graduated:', t.token.mint);
watching.delete(t.token.mint);
}
});
FAQ
What does "graduation" mean on Pump.fun?
The moment the bonding curve is full and liquidity migrates to a Raydium or pumpfun-amm pool.
Can I choose the threshold myself?
Yes, pass any percentage to curvePercentage("pumpfun", threshold), e.g. 80, 90 or 95.
Do I get pool data at graduation?
Yes, token responses include pool and curve data so you can find the new Raydium pool immediately.
Previous: Stream Pump.fun launches -> · More on the Pump.fun API page.
Download the example
Clone the full runnable project on GitHub, npm install && npm start with your keys in .env. Or open it in StackBlitz to run in your browser (free). See the tutorial for step-by-step context.
Runnable Node.js project — clone from GitHub, add keys to .env, then npm start. StackBlitz runs REST and Datastream examples in your browser for free.