Pump.fun WebSocket API
One WebSocket connection. Four channels — every Pump.fun launch, graduation, trade, and live price, delivered sub-450ms from chain confirmation as versioned JSON (wallet transfers coming soon). Subscribe with one message; filter server-side; no program IDs, no log decoding, no funded wallet.
Live streams on the free plan · No credit card · Sub-450ms · Flat pricing from $0
Protocol
How the Pump.fun WebSocket works
Three frames: connect, subscribe, receive. Copy the shapes — they match the live gateway.
Connect
Open a WebSocket to the connect URL, or send Authorization: Bearer on the upgrade (preferred server-side). The first frame is connected — it discloses your per-channel subscription cap.
Server sendsconnected{ "v": 1, "type": "connected", "ts": 1751008800000, "limits": { "connectionsPerStream": 1 } }Subscribe
Send one JSON control message with type, id, channel, and filters. The server acks with a subscribed frame echoing your id and filters.
You sendsubscribe{ "type": "subscribe", "id": "grads-1", "channel": "graduations", "filters": { "minLiquiditySol": 50 } }Server sendssubscribed{ "v": 1, "type": "subscribed", "id": "grads-1", "channel": "graduations", "filters": { "minLiquiditySol": 50 }, "ts": 1751008800100 }Receive
Data arrives in a versioned envelope. v:1 is additive-only — your parser reads data and survives new optional fields.
Server sendsenvelope{ "v": 1, "channel": "graduations", "type": "graduated", "sub": "grads-1", "ts": 1751009291000, "data": { "type": "graduated", "source": "pump_fun", "mint": "2ajrYELtYtvtJd8fQAGXpfQbgXXZe3YjPtNJ9K3bpump", "name": "Pepe", "symbol": "PEPE", "creator": "7BvK3nF2HxR8mP5qW9tL4sY6jC1dA8eU3gN2fM5A1zXY", "uri": "https://ipfs.io/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG", "mayhemMode": false, "socials": { "website": "https://www.pepe.vip", "twitter": "https://x.com/pepecoineth", "telegram": "https://t.me/pepe_coin" }, "liquiditySol": 85.005, "timeToGraduateSeconds": 4523, "signature": "8Hn2vQ3xR7mLdW9fJcY6zT1nGpK5uA3oXvE2mBpS8dRzL4nJb9FgKtR5zXvY2mNc8hAeQ4WcS7pTz", "slot": 309845102, "timestamp": 1751009291000 } }
With one WebSocket connection, four channels cover the Pump.fun lifecycle end to end — plus transfers when that stream ships. Events arrive sub-450ms from chain confirmation.
Reference
Pump.fun WebSocket streams: channels, events, and filters
Server-side filters on every channel. Wrong-channel filters are rejected — never silently ignored.
Filters AND across fields and OR within a list. An empty {} means everything on that channel. A filter that does not belong on the channel returns invalid_filters — it is not ignored. On Starter, trades require mints (up to 10); Pro may omit mints for the firehose.
Quickstart
Subscribe to Pump.fun graduations in Python or TypeScript
Python uses the standard websockets library — there is no Python SDK. TypeScript uses @anaxer/sdk. Prove the wire with wscat in ten seconds.
import asyncio, json, websockets
API_KEY = "YOUR_API_KEY" # free at console.anaxer.com
async def main():
url = f"wss://api.anaxer.com/v1/stream?apiKey={API_KEY}"
async with websockets.connect(url) as ws:
await ws.send(json.dumps({
"type": "subscribe",
"id": "grads",
"channel": "graduations",
"filters": {"minLiquiditySol": 50, "excludeMayhem": True},
}))
async for raw in ws:
msg = json.loads(raw)
if msg.get("channel") == "graduations":
g = msg["data"]
print(g["symbol"], g["liquiditySol"], g["timeToGraduateSeconds"])
asyncio.run(main())import { connect } from "@anaxer/sdk";
const client = connect({ apiKey: process.env.ANAXER_API_KEY! });
// Track up to 10 tokens on Starter. Pro can omit `mints` for the full firehose.
client
.stream("trades", { mints: ["YOUR_TOKEN_MINT"], minVolumeUsd: 500 })
.on("data", (swap) => {
console.log(swap.wallet, swap.volumeUsd, swap.swap.to.mint);
});npx wscat -c "wss://api.anaxer.com/v1/stream?apiKey=YOUR_KEY"
> {"type":"subscribe","id":"launches","channel":"creations","filters":{}}Full tutorial: Solana WebSocket streams guide · Stream docs
Production
Running a Pump.fun WebSocket in production
Reconnect, heartbeats, backpressure, and close codes — the parts tutorial posts usually get wrong.
Reconnects and gap recovery
Reconnect with jittered backoff and resubscribe — subscriptions do not survive a socket. There is no WebSocket replay: note the last ts or slot you processed and backfill the gap via REST from/to + cursor on /v1/creations, /v1/graduations, or /v1/tokens/:mint/trades. See REST docs.
Heartbeats
Remember: the server never sends unsolicited pings and imposes no pong deadline. Send {"type":"ping"} yourself if your platform needs traffic to keep NATs or proxies open, and treat a missing pong as a dead socket.
Backpressure
Consume faster than you receive, or buffer internally. A client that falls too far behind gets an error frame with slow_consumer, then close 1013. Do not do heavy work inline in the message handler.
Errors and close codes
Most errors are inline v1 error frames and the socket stays open (invalid_filters, subscription_limit, duplicate_id, plan_restricted, …). Only three closes exist: 1008 unauthorized, 1013 slow consumer, 1011 internal — each preceded by an error frame that tells you why. See error docs.
Compare
Pump.fun WebSocket providers compared
WebSocket-scoped — flat USD and live streams on the free plan versus wallets, SOL metering, and Premium-gated streams.
Competitor details from public pricing and docs pages as of July 25, 2026 — verify before relying on them. PumpPortal trade streams meter at 0.01 SOL per 10k events to a linked wallet; PumpDev's free feed is funded by a 0.25% fee on trades routed through them.
Free tier
A free Pump.fun WebSocket — without a catch
On the free plan
- creations stream — every new launch
- graduations stream — every bonding-curve fill
- 2,500 REST requests per month for backfill
- No credit card to start
What you never pay
- No funded Solana wallet
- No SOL-metered events
- No fees on your trades — we are data-only
- No compute units or credits to forecast
Live streams on the free plan are the product, not a loss-leader — creations and graduations ship with a free API key, no credit card. Anaxer is data-only: there is no trade fee waiting downstream, no SOL metering, and no wallet linkage. Paid plans buy more channels and throughput, not the removal of a toll.
Streaming into an AI agent instead of a bot? The same channels are exposed to Claude and Cursor through our MCP server — see the Pump.fun API overview.
Learn more
WebSocket guides and resources
Tutorials and docs for the wire protocol and Pump.fun streams.
Pricing
Simple pricing. No compute units. No credits.
Flat monthly plans you can understand in 10 seconds. The bill is the price on the box.
Streams
Token Creation
Token Graduation
Token Prices
DEX Trades
Wallet Transfers
Stream limits
Connections per stream
REST API
Requests / mo
Rate limit
Streams
Token Creation
Token Graduation
Token Prices
DEX Trades
Track up to 10 tokens (SOL pairs via solOnly)
Wallet Transfers
Stream limits
Connections per stream
REST API
Requests / mo
Rate limit
Streams
Token Creation
Token Graduation
Token Prices
DEX Trades
All tokens, unlimited
Wallet Transfers
Stream limits
Connections per stream
REST API
Requests / mo
Rate limit
Enterprise
High volume, custom limits, dedicated support and an SLA.
FAQ