subscribe_new_tokens - live launches
Live feed of new pool/token creations on the DEXes you pick. Server emits new_token. Pass protocols, any subset of PUMPFUN, PUMPSWAP, METEORA, RAYDIUM, ORCA, BONK (one room per protocol; re-subscribe to change the set).
PumpFun new_token events are delivered at no charge. You can connect with a 0 SOL balance and stay subscribed indefinitely as long as you only request PUMPFUN. Every other protocol on this stream is billed per delivered event (see fees).
| Channel | Socket.IO event |
| Auth | auth.api_key in the handshake |
| Emits | new_token |
| Cost | PUMPFUN: free. Others: per event (fees) |
Example
- JavaScript
- Python
Click an icon to toggle it. The example regenerates live, so you can paste it straight into your client.
socket.on("new_token", (n) => {
console.log(`[${n.protocol}] ${n.symbol ?? ''} (${n.name ?? ''}) by ${(n.creator ?? '').slice(0, 4)}…`);
// AMM dexes omit name/symbol/uri/creator, so guard for missing fields
});
socket.emit("subscribe_new_tokens", {
protocols: ["PUMPFUN", "RAYDIUM"],
});
import socketio
sio = socketio.Client()
@sio.on("new_token")
def on_new(n):
# AMM dexes omit name/symbol/uri/creator, so use .get() with a default
print(f"[{n['protocol']}] {n.get('symbol','')} ({n.get('name','')}) by {n.get('creator','')[:4]}…")
# your filter / alert / auto-buy here
sio.connect("https://api.pumpdata.fun", auth={"api_key": "pd_xxxxxxxx…"})
sio.emit("subscribe_new_tokens", {"protocols": ["PUMPFUN", "RAYDIUM"]})
sio.wait()
# later, to stop (free):
# sio.emit("unsubscribe_new_tokens", {"protocols": ["PUMPFUN", "RAYDIUM"]})
Response - new_token
Every DEX you subscribe to emits new_token on each pool/token creation. The fields protocol, mint, pool, decimals, quote, supply and timestamp are always present. The on-chain metadata fields (name, symbol, creator, uri) are only included when the creation instruction actually carries them, so plan for them to be absent (not just empty).
Common quote mints
quote is the mint address of the token the new pool is quoted in (what the launched token trades against). The vast majority of launches are SOL-quoted; compare against these addresses to filter or to label prices correctly:
| Quote token | Mint address | Where you'll see it |
|---|---|---|
| WSOL (wrapped SOL) | So11111111111111111111111111111111111111112 | Default quote on every DEX; nearly all launches |
| USDC | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v | AMM pools (Raydium, Orca, Meteora, PumpSwap) opened against USDC |
| USD1 | USD1ttGY1N17NEEHLmELoaybftRBUSErhqYiQzvEmuB | Bonk launches on USD1-quoted pools |
PumpFun (and Bonk) emit name/symbol/uri inline, so their events are complete:
{
"protocol": "PUMPFUN",
"mint": "3StpvEPanQtd25SvBamVjvyRaawNapjUTmygnVsPpump",
"pool": "Hm9HUNoF3Ua2tSZM1Uzk6HM6tS5LxmR8p7wtxUeYcD6E",
"name": "Mayhem",
"symbol": "Venum",
"decimals": 6,
"quote": "So11111111111111111111111111111111111111112",
"creator": "7ZbfkTHfyeMdXt98sdvJHT2kY9hrYntJm2A5aepK8ypn",
"uri": "https://ipfs.io/ipfs/Qmdq5na6gt6xtEjCS4Lb83yPVCwYTmZ8CKufX1iFPQFE3b",
"supply": 1000000000,
"timestamp": 1779825514
}
Plain AMM pool creations (PumpSwap, Raydium, Orca, and Meteora's AMM pools) are usually opened on a token that already exists, so their create transaction carries no token metadata and those fields are omitted. A Raydium event looks like:
{
"protocol": "RAYDIUM",
"mint": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
"pool": "58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2",
"decimals": 6,
"quote": "So11111111111111111111111111111111111111112",
"creator": "GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ",
"supply": 1000000000,
"timestamp": 1779825514
}
Launchpad creations are the exception: when the create transaction mints the token itself (PumpFun, Bonk, and Meteora's Dynamic Bonding Curve), name/symbol/uri/creator are read straight from that same transaction and included. Meteora DBC tokens arrive on the METEORA stream and keep protocol: "METEORA_DBC", so they look complete like a PumpFun event:
{
"protocol": "METEORA_DBC",
"mint": "CRkgM1oyuYpCLjg39xDAyEwiicEE4xr8hXXRhjDEaQRc",
"pool": "B31Kz7nxfPrWSd9avAto6CZfiANN22LKbAW3g3AktbQ",
"name": "market dead send this",
"symbol": "bread",
"decimals": 6,
"quote": "So11111111111111111111111111111111111111112",
"creator": "9RvZ8kgeHVzpc1f3pWn21i51QMXFsLyvXLXp3uqLxPJM",
"uri": "https://meta.uxento.io/data/b9fe1da7-6a1c-4f93-a3fe-a2cd1798ac9f",
"supply": 1000000000,
"timestamp": 1779825514
}
When a token created on PumpFun later migrates to an AMM, the AMM event still omits name/symbol/uri, but the stored token record keeps the original PumpFun metadata. The live
new_tokenevent always reflects only what is in the create instruction.
Try it
Notes
- All subscribed DEXes emit
new_token. PumpFun is simply the highest-volume launch source, so it dominates the feed. - Launchpad creates carry name/symbol/uri: PumpFun and Bonk inline them, and Meteora DBC tokens (delivered on the
METEORAstream withprotocol: "METEORA_DBC") have them read from the same create transaction. Plain AMM pool creations (PumpSwap, Raydium, Orca, and Meteora AMM pools) usually open on a pre-existing token, so those keys are omitted. Always null-check them. - The
new_tokenevent is real-time and reflects only on-chain create data. Off-chain metadata (image, socials) is fetched separately from the token'suriand is not part of this event. - For the corresponding migration events (e.g. PumpFun to PumpSwap) see
subscribe_migrations.