Skip to main content
LitePart of the Lite plan; Developer includes it too. See plans · Get your key

Advanced Data Stream

The per-pool streams answer "what happened to this token". This one answers "what happened in this transaction", for every transaction on every launchpad we index. Server emits stream. Comes with Lite and Developer: connect with your plan's key.

Use it for copy-trading, scam filtering and anything that needs the whole market rather than one pool. If you only care about a few tokens, subscribe_trades is cheaper for you and for us.

ChannelSocket.IO event
Authyour plan's key in the handshake, auth: { api_key }
Emitsstream
PlanLite (2 sockets) and Developer (5 sockets)
Filteroptional protocols and actions lists

Disconnected? Reconnect with sinceSlot and everything since that slot is sent first; see Replay and resume. For the same transactions before they execute, see Ultra Fast Shred Stream.

One socket, every launchpad

Subscribe once with no filter and you have the whole market: every trade, launch, migration and liquidity change on every launchpad we index, one event per transaction. Narrow it with protocols and actions when you only want part of it.

How it compares​

The same pump.fun transaction on every feed: Ultra Fast Shred Stream on the New York region first, the New York Advanced Data Stream 6 ms later, pumpapi.io 16 ms later, PumpPortal 115 ms later

Example​

import { io } from "socket.io-client";

const socket = io("https://sol.shrine.trade", { auth: { api_key: "sk_…" } });

// Everything, or narrow it: protocols and/or actions.
socket.emit("subscribe_stream", {
protocols: ["PUMPFUN", "PUMPSWAP", "STONKFUN"],
actions: ["buy", "sell", "create"],
});

socket.on("stream", (e) => {
if (e.action === "create" && (e.mintAuthority || e.freezeAuthority)) return; // not a clean launch
if (e.action === "buy") console.log(e.mint, e.tradersInvolved, e.quoteAmount, e.price);
});

// later, to stop (free): socket.emit("unsubscribe_stream");

Actions​

actionWhenProtocols
buy / sellAny swap. One event per pool per transaction; several swaps in one transaction are aggregated with a per-swap breakdown.every launchpad
createA launchpad mint.PUMPFUN, PUMPFUN_MAYHEM, BONK, STONKFUN, METEORA_DBC
createPoolAn AMM pool opened on an existing token.PUMPSWAP, RAYDIUM, RAYDIUM_CLMM, METEORA, METEORA_DLMM, ORCA
migrateA curve graduating into its AMM.PUMPFUN→PumpSwap, BONK and STONKFUN→Raydium, METEORA_DBC→DAMM v2
curveCompleteA DBC curve filled, before migration.METEORA_DBC
curveCompleteA pump.fun curve filled by the trade in this transaction, before migration.PUMPFUN
add / removeLiquidity provided or withdrawn.PumpSwap, Raydium CPMM and AMM v4, DAMM v2, DLMM, Orca
claimCreatorFeesA creator collecting fees.PUMPFUN, PUMPSWAP
sweepFees a trade kept on its curve or pool paid out to the protocol or the creator's vault. Not a trade: no price, no volume.PUMPFUN, PUMPSWAP

Payload​

Every event carries signature, block, timestamp, action, protocol and txSigner, the fee payer. block is the slot and timestamp is the chain's own time for that slot, the second getBlockTime answers for it, on every launchpad; two trades in one slot carry the same second. txSigner is not always the trader: bots route through relayers. For copy-trading use tradersInvolved.

Trades​

{
"signature": "…", "block": 445627693, "timestamp": 1788976012,
"action": "buy", "protocol": "PUMPFUN", "txSigner": "…",
"pool": "…", "mint": "…", "quoteMint": "So111…",
"tokenAmount": 31952.74, "quoteAmount": 0.0161, "price": 0.000000504,
"marketCapQuote": 504.1, "tokensInPool": 1041000000, "quoteInPool": 30.5,
"tradersInvolved": ["…"],
"breakdown": [
{ "trader": "…", "action": "buy", "tokenAmount": 31952.74, "quoteAmount": 0.0161, "price": 0.000000504 }
]
}

price and the pool reserves are the post-trade state where the launchpad reports it. marketCapQuote is price times supply, in the quote asset. Amounts are in UI units.

Two pump.fun cases carry extra fields:

  • A buy that completes the curve. The event carries "completesCurve": true and the breakdown entry that emptied the curve is tagged "stage": "curve". A v3 buy may take more than the curve has left: it empties the curve at the curve's price, then buys the rest from the tokens the migration deposits, at the price that pool opens with. That second part is a further breakdown entry for the same trader tagged "stage": "postComplete"; the event's tokenAmount and quoteAmount are then the buyer's total, and price and the reserves are the pool's opening state. A curveComplete event follows in the same transaction.
  • A multi-hop route. A PumpSwap multi_hop_swap trades through several pools and curves in one instruction, for coins paired with another pump coin. Each hop is a normal buy or sell on its own pool, tagged "via": "multi_hop" on the event and on its breakdown entries. The middle coins net to zero for the trader; the volume on every pool is real.

Fee sweeps​

{
"action": "sweep", "protocol": "PUMPFUN",
"mint": "…", "pool": "…", "quoteMint": "So111…",
"recipient": "…", "fee": "creator", "bucket": 1,
"amount": 0.000888889, "amountRaw": 888889
}

v3 curve trades and v2 pool trades keep the protocol fee and the creator fee where the trade happened; a sweep pays them out later. fee is protocol (bucket 0) or creator (bucket 1), amount is in the quote asset. Fee income is in the trades; a sweep is the payout, not new income.

Creates​

{
"action": "create", "protocol": "PUMPFUN",
"mint": "…", "pool": "…", "quoteMint": "So111…", "creator": "…",
"name": "…", "symbol": "…", "uri": "…", "decimals": 6, "supply": 1000000000,
"tokensInPool": 1073000000, "quoteInPool": 30,
"initialBuy": { "quoteAmount": 0.5, "tokenAmount": 17000000 },
"mintAuthority": null, "freezeAuthority": null, "tokenExtensions": []
}

mintAuthority and freezeAuthority should both be null on an honest launch; a value means supply can be minted or wallets frozen. tokenExtensions lists Token-2022 extensions by name; transferFeeConfig and permanentDelegate deserve a look outside trusted launchpads. initialBuy is the creator's own buy in the launch transaction, null if there was none. Authorities and extensions are read from the mint account as it was created; if the mint predates the stream they may be absent.

Migrations and pools​

Migrations carry fromPool, toPool and toProtocol. Pool creates carry pool, creator and, when known, mint and quoteMint. Liquidity events carry pool, owner and the raw amounts of both sides (amountARaw, amountBRaw); the side-to-mint mapping follows the launchpad's own ordering.

Try it​

Notes​

  • One connection per client, please. Everything is filtered per socket, so open one socket and subscribe once.
  • Events for a transaction are emitted in a fixed order: trades, then creates and pool creates, then migrations, liquidity and sweeps, then fee claims.
  • Every event on this stream is also archived by the hour for backtesting: see Historical replay.

LimitsLite 2 socketsDeveloper 5 socketsSee plans →