Skip to main content

Data Stream – WebSocket API

Use this endpoint to stream live:

  • Solana and tokens transfers
  • Pump.fun
  • PumpSwap
  • Raydium Launchpad (e.g. StonkFun, Bonk)
  • Raydium CPMM
  • Raydium CLMM
  • Meteora Launchpad (e.g. Bags, moonshot, etc)
  • Meteora DAMM V1
  • Meteora DAMM V2
  • Meteora DLMM

Subscribing delivers every event the moment it happens — transfers, token creations, buys, sells, migrations, pool creations, adding and removing liquidity, and creator fee claims.

Endpoint​

wss://stream.pumpapi.io/

Filter on the client. The server sends all events.
One connection only. Open a single WebSocket per client and reuse it.
Reconnect logic. Connections can drop (for example, due to server-side updates or your network issues). You should implement automatic reconnection in your client.

📦 Code Examples​

import asyncio
import websockets
import orjson as json # or use the standard json module (orjson is faster)

async def zeroslip_data_stream():
uri = "wss://stream.pumpapi.io/"
async with websockets.connect(uri) as websocket:
async for message in websocket:
event = json.loads(message)
print(event) # {'action': 'buy', 'pool': 'pump', ...}

asyncio.run(zeroslip_data_stream())

Event Examples​

{
"signature": "3mGAAs4CkM86s3bN8Jkt2EZRGf7ZVkbgNk2pV3STrEof8nCdFg5kqWdFyohp23uFVwierCvdeuXBzy3QDwNdaX4L",
"action": "transfer",
"txSigner": "YubQzu18FDqJRyNfG8JqHmsdbxhnoQqcKUHBdUkN6tP",
"transfers": [
{
"from": "YubQzu18FDqJRyNfG8JqHmsdbxhnoQqcKUHBdUkN6tP",
"to": "2XxKhfVBna1Jjs5PdCQmjAXHg6NnFXoNVEHfEz2ZnnL8",
"amount": 500.0,
"isSolana": False,
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"programsUsed": []
},
{
"from": "YubQzu18FDqJRyNfG8JqHmsdbxhnoQqcKUHBdUkN6tP",
"to": "2XxKhfVBna1Jjs5PdCQmjAXHg6NnFXoNVEHfEz2ZnnL8",
"amount": 0.00002,
"isSolana": True, <----- is TRUE when mint is Sol or WSOL (wrapped sol)
"mint": "So11111111111111111111111111111111111111111",
"programsUsed": []
}
],
"preBalances": {
"YubQzu18FDqJRyNfG8JqHmsdbxhnoQqcKUHBdUkN6tP": {
"sol": 9.75023633,
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v": 613333.083011
},
"2XxKhfVBna1Jjs5PdCQmjAXHg6NnFXoNVEHfEz2ZnnL8": {
"sol": 0.001152379,
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v": 0.0
}
},
"postBalances": {
"YubQzu18FDqJRyNfG8JqHmsdbxhnoQqcKUHBdUkN6tP": {
"sol": 9.75021133,
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v": 612833.083011,
},
"2XxKhfVBna1Jjs5PdCQmjAXHg6NnFXoNVEHfEz2ZnnL8": {
"sol": 0.001172379,
"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v": 500.0,
}
},
"addressLookupTables": [],
"priorityFee": 0.000005,
"block": 388677942,
"timestamp": 1766513012579
}
How the stream works

📨 The stream sends events, not transactions. A single transaction can produce many events (buys in different pools, transfers, a token creation, etc.) that all share the same signature. If you skip a signature you've already seen, you will drop most events.

🧮 Trades and liquidity changes arrive aggregated. If one transaction has a 5 SOL buy and a 4 SOL sell in the same pool, you receive a single buy event for 1 SOL. Need them separately? Read breakdown — it is always there and lists every trade with its own trader and amounts.

📑 Events of one transaction always arrive in this fixed order: transfers → trades → liquidity changes (add/remove) → distribute fees.

Glossary​

FieldDescription
signatureTransaction signature on the Solana blockchain.
actionEvent type — one of transfer, create, buy, sell, migrate, createPool, add, remove, distributeFees, createConfig etc. 1 transaction can produce multiple events
poolIdis the unique pool address. By using it, you can see the pool reserves. Tip 1: You can get the Solana price without any external API. Just check if poolId equals Gf7sXMoP8iRw4iiXmJ1nq4vxcRycbGXy5RL8a8LnTd3v. This is the largest SOL–USDC pool on pump-amm, so you can read the Solana price from it. Tip 2: You can pass this address to the trade API using 'poolId': 'address' to trade a token from a specific pool. This is useful for arbitrage. If you do not pass this parameter, we automatically choose the best pool. This means you can even trade USDC at the best price using our trading API, without visiting any websites.
mintToken mint address.
quoteMintThe second token used in the trade. For example, in some pools you can buy a token only with USDC, USDT, or another token. Usually, it's the WSOL Address Sol11...2
txSignerThe public key of the account that sent the transaction and paid the priorityFee. Important: if you build a copy trader or something similar, use tradersInvolved, not txSigner. This is because sometimes traders send a transaction where txSigner is a different account, but the trade uses funds from the account you track. In this case, the account you track will be in the tradersInvolved dictionary.
tokenAmountAmount of mint tokens involved in the transaction. If the transaction contains several trades in this pool, this is their total - see breakdown field for each trade separately.
quoteAmountThe amount of the quoteMint token (usually WSOL or USDC) involved in the transaction. If the transaction contains several trades in this pool, this is their total - see breakdown field for each trade separately.
tokensInPoolTotal amount of the main token (mint) currently in the liquidity pool. This shows how many tokens are available for trading on the token side.
quoteInPoolTotal amount of the quote token (quoteMint) locked in the liquidity pool. It represents liquidity on the quote side.
vTokensInBondingCurveVirtual token reserves in the bonding curve pool. Reflects liquidity available on the token side. This field is present only when the pool is pump or raydium-launchpad.
vQuoteInBondingCurveVirtual Quote reserves in the bonding curve pool. Reflects liquidity available on the Quote side. This field is present only when the pool is pump or raydium-launchpad
virtualQuoteInPoolPresent only in pump-amm pools. Shows the amount of virtual liquidity reserved for buybacks during the first 5 minutes after migration. The value is always around 17 SOL.
virtualTokensInPoolPresent only in pump-amm pools. The same as virtualQuoteInPool, but for reversed pools, where WSOL or a stablecoin is the base token. You can safely ignore this field — it is always 0.0.
pricePrice in quoteMint (usually SOL) including this transaction’s impact.
marketCapQuoteMarket capitalization in Quote token (usually Solana, USDC, USDT)
poolLiquidity source: pump, pump-amm, raydium-launchpad, raydium-cpmm, raydium-clmm, meteora-launchpad, meteora-damm-v1, meteora-damm-v2, meteora-dlmm. Before migration, the value is pump, raydium-launchpad or meteora-launchpad. After migration, pump → pump-amm, raydium-launchpad → raydium-cpmm, meteora-launchpad → meteora-damm-v1 / meteora-damm-v2.
minPriceAvailable only in Meteora DAMM V2. Indicates the minimum price configured for the pool.
maxPriceAvailable only in Meteora DAMM V2. Indicates the maximum price configured for the pool.
curveTypePresent only in Meteora DAMM V1. Indicates the formula used for price calculation. Can be ConstantProduct (the most common one, based on the quote-reserve/base-reserve ratio) or StableSwap (ideal for stablecoin-to-stablecoin pools, keeping the price close to 1:1 even when reserves differ).
binStepPresent only in Meteora DLMM. The price step between adjacent bins, in basis points (e.g. 400 means each bin is 4% apart, 1 means 0.01%). In DLMM liquidity is not spread along a curve — it sits in discrete price bins, and only the bins near the current price are tradable at any moment. A larger binStep means coarser price granularity and a wider spread. Important: unlike constant-product pools, tokensInPool and quoteInPool here are the totals across all bins, so a DLMM pool can show large reserves while still giving heavy slippage on a small trade — the liquidity may sit in bins far from the current price.
poolFeeRateIndicates the current fee rate in the pool. Can range from 0 to 1, where 0.1 represents 10% and 0.001 represents 1%.
tickSpacingPresent only in Raydium CLMM. The minimum distance between initialized ticks. One tick is a 0.01% price step, so tickSpacing 1 means positions can start/end every 0.01%, and 60 means every ~0.6%. Like in DLMM, liquidity sits in price ranges chosen by liquidity providers, and tokensInPool / quoteInPool are the totals across all ranges. A pool can show large reserves and still give heavy slippage if most of the liquidity is far from the current price.
poolCreatedByindicates who created the pool on pump-amm, raydium-cpmm, meteora-damm-v1, or meteora-damm-v2. If the pool was created by migration, the value is pump, raydium-launchpad, or meteora-launchpad. Pools migrated from pump and raydium-launchpad are considered trusted, but pools migrated from meteora-launchpad can be risky because Meteora allows config creators to choose how much liquidity share the pool creator receives after migration. Always check lockedLiquidityAfterMigration before relying on such pools. If the pool was created manually, the value is custom. Be cautious with these pools as well.
lockedLiquidityAfterMigrationPresent in Meteora Launchpad trades, and in createConfig events for both Meteora and Raydium Launchpad. Shows what percent of LP is locked forever after migration. In Meteora Launchpad, beware: the rest can be withdrawn right after migration (rug pull). In Raydium Launchpad there is no such risk: this part is locked in Burn & Earn, so the owner earns its fees but can never withdraw the liquidity.
poolFeeRateAfterMigrationPresent in Meteora Launchpad trades, and in createConfig events for both Meteora and Raydium Launchpad. Indicates what the poolFeeRate will be after migration. Meteora Launchpad allows values up to 0.1 (10%). For Raydium Launchpad it can be None if the CPMM config is not known yet.
platformAdminPresent only in createConfig events. Raydium Launchpad only. The address that owns this config and can change it later.
platformNamePresent only in createConfig events. Raydium Launchpad only. The platform name, for example stonkfun. Don't trust it - anyone can put any name in there
platformWebsitePresent only in createConfig events. Raydium Launchpad only. The platform website. Can be empty.
platformImagePresent only in createConfig events. Raydium Launchpad only. Link to the platform logo. Can be empty.
platformFeeAddressPresent only in createConfig events. Raydium Launchpad & Meteora Launchpad. The address that receives the platform fee from every trade.
platformNftAddressPresent only in createConfig events. Raydium Launchpad only. After migration the locked LP is sent here as a Fee Key NFT. The owner of this address earns the fees from that liquidity forever.
platformVestingAddressPresent only in createConfig events. Raydium Launchpad only. The address that receives the platform's vested tokens. None means not used.
platformFeeRatePresent only in createConfig events. Raydium Launchpad only. The platform fee on every trade, for example 0.01 = 1%.
creatorFeeRatePresent only in createConfig events. Raydium Launchpad only. The token creator fee on every trade.
platformVestingRatePresent only in createConfig events. Raydium Launchpad only. How much of each token's locked supply goes to the platform.
restrictGlobalConfigPresent only in createConfig events. Raydium Launchpad only. True means token creators can only use the global configs this platform allows. Global configs are created by Raydium itself and set the quote token, the curve type and the base trade fee — nobody else can create one, so this flag only limits the choice.
restrictCurveParamPresent only in createConfig events. Raydium Launchpad only. True means the token creator cannot freely choose the bonding curve settings.
transferFeeAuthorityPresent only in createConfig events. Raydium Launchpad only. For spl-token-2022 tokens with a transfer fee: who can change that fee later. None means nobody.
cpmmConfigPresent only in createConfig events. Raydium Launchpad only. The Raydium CPMM config the pool will use after migration.
poolCreatorAfterMigrationPresent only in createConfig events. Raydium Launchpad only. Who becomes the creator of the CPMM pool and earns the creator fee. None means the token creator.
burnedLiquidityAfterMigrationPresent only in createConfig events. Raydium Launchpad only. What percent of LP is burned forever after migration — nobody earns fees from it. On Raydium Launchpad no liquidity can be withdrawn after migration.
migratesToPresent only in createConfig events. Raydium Launchpad & Meteora Launchpad. Where tokens from this config go after migration: raydium-cpmm or meteora-damm-v1 or meteora-damm-v2.
leftoverReceiverPresent only in createConfig events. Meteora Launchpad only. The address that receives all unsold tokens after migration.
leftoverTokensPresent only in createConfig events. Meteora Launchpad only. How many tokens are left over and sent to leftoverReceiver. A big number means most of the supply goes to one address instead of the market. None when fixedSupply is False.
minPoolFeeRatePresent only in createConfig events. Meteora Launchpad only. The lowest fee the pool will ever reach. If it equals poolFeeRate, the fee never changes.
feeScheduleDurationPresent only in createConfig events. Meteora Launchpad only. How long it takes for poolFeeRate to drop to minPoolFeeRate. 0 means the fee is fixed.
feeScheduleUnitPresent only in createConfig events. Meteora Launchpad only. The unit of feeScheduleDuration — slot (~200ms) or second.
baseFeeModePresent only in createConfig events. Meteora Launchpad only. How the fee goes down over time: fixed (never changes), linear, exponential, or rateLimiter (a very high fee for the first seconds, used against snipers).
firstSwapWithMinFeePresent only in createConfig events. Meteora Launchpad only. True means the creator can make the first buy at minPoolFeeRate, skipping the high anti-sniper fee.
dynamicFeeEnabledPresent only in createConfig events. Meteora Launchpad only. True means the fee also grows when the price moves fast.
feeCollectedInPresent only in createConfig events. Meteora Launchpad only. The token the fee is taken in: quote, or output (the token you receive).
creatorFeeSharePresent only in createConfig events. Meteora Launchpad only. How much of the trading fee goes to the token creator, for example '50%'. The rest goes to the platform.
poolCreationFeePresent only in createConfig events. Meteora Launchpad only. How much SOL the token creator pays to launch a token with this config.
transferFeeConfigInside tokenExtensions. Present only for spl-token-2022 tokens with a transfer fee. The token itself takes this fee on every transfer, including buys and sells: when you buy, you receive fewer tokens; when you sell, fewer tokens reach the pool. Contains the fields below.
feeRateInside tokenExtensions.transferFeeConfig. The current transfer fee, for example 0.05 = 5%.
maximumFeeInside tokenExtensions.transferFeeConfig. The max fee for one transfer, in tokens. The fee is amount Ă— feeRate, but never more than this value.
nextFeeRateInside tokenExtensions.transferFeeConfig. Present only if the fee will change in ≤ 2 epochs (~2 days). The new fee rate.
nextMaximumFeeInside tokenExtensions.transferFeeConfig. Present only if the fee will change in ≤ 2 epochs (~2 days). The new max fee.
nextFeeFromBlockInside tokenExtensions.transferFeeConfig. Present only if the fee will change in ≤ 2 epochs (~2 days). The block from which the new fee starts. Compare it with block.
decimalsPresent only in createConfig events. Meteora Launchpad only. How many decimal places tokens from this config will have.
metadataAuthorityPresent only in createConfig events. Meteora Launchpad only. Who can change the token name, symbol and image later: creator, platform, or None (nobody).
mintAuthorityRetainedPresent only in createConfig events. Meteora Launchpad only. True means the address in metadataAuthority can also mint more tokens.
transferHookProgramPresent only in createConfig events. Meteora Launchpad only. An address means tokens will be spl-token-2022 with a transfer hook: every transfer calls that program, and it can block your sell. Be careful. None for normal configs.
fixedSupplyPresent only in createConfig events. Meteora Launchpad only. True means the supply is set in the config, so you know it before the token exists. False means the supply comes later, in the create event.
supplyAfterMigrationPresent only in createConfig events. Meteora Launchpad only. The total supply after migration. None when fixedSupply is False.
tokensSoldBeforeMigrationPresent only in createConfig events. Meteora Launchpad only. How many tokens are for sale on the bonding curve.
tokensInPoolAfterMigrationPresent only in createConfig events. Meteora Launchpad only. How many tokens go into the pool after migration.
creatorVestingTokensPresent only in createConfig events. Meteora Launchpad only. How many tokens are locked for the creator after migration.
creatorVestingDurationPresent only in createConfig events. Meteora Launchpad only. How long those tokens stay locked, in feeScheduleUnit units. 0 means no lock.
initialPricePresent only in createConfig events. Meteora Launchpad only. The token price at the start of the bonding curve.
migrationPricePresent only in createConfig events. Meteora Launchpad only. The token price at migration.
initialMarketCapPresent only in createConfig events. Meteora Launchpad only. Market cap at the start of the bonding curve, in quoteMint (initialPrice Ă— supply).
migrationMarketCapPresent only in createConfig events. Meteora Launchpad only. Market cap at migration, in quoteMint (migrationPrice Ă— supply).
migrationFeePresent only in createConfig events. Meteora Launchpad only. What percent of the collected quote goes to the platform and creator instead of into the pool.
creatorMigrationFeeSharePresent only in createConfig events. Meteora Launchpad only. The creator's share of migrationFee.
platformUnlockedLiquidityAfterMigrationPresent only in createConfig events. Meteora Launchpad only. What percent of LP the platform can withdraw right after migration. A high value is risky.
creatorUnlockedLiquidityAfterMigrationPresent only in createConfig events. Meteora Launchpad only. What percent of LP the creator can withdraw right after migration. A high value is risky.
vestedLiquidityAfterMigrationPresent only in createConfig events. Meteora Launchpad only. What percent of LP unlocks slowly over time.
liquidityVestingDurationPresent only in createConfig events. Meteora Launchpad only. How long the vested liquidity stays locked, in feeScheduleUnit units.
platformLockedLiquidityAfterMigrationPresent only in createConfig events. Meteora Launchpad only. The platform's part of the locked liquidity. This liquidity stays in the pool forever — the platform only earns trading fees from it and can never withdraw it.
creatorLockedLiquidityAfterMigrationPresent only in createConfig events. Meteora Launchpad only. The creator's part of the locked liquidity. This liquidity stays in the pool forever — the platform only earns trading fees from it and can never withdraw it.
migrationThresholdsPresent only in Meteora Launchpad and Raydium Launchpad. Indicates the required quoteInPool or tokensInPool value for a migration to occur. Pump.fun always uses a fixed requirement of ~85 SOL , or once tokensInPool reaches 0
burnedLiquidityshows what percent of liquidity is burned (for example, "99%"). Liquidity means someone adds Solana (or another quote token) and tokens into the pool. Normally, liquidity providers earn fees from trades and can withdraw their share at any time. If one person owns 100% of the liquidity, they can withdraw 100% and drain the pool, even after others buy the token. Pools with 0% burned liquidity are very risky because the owner can rug pull, and you will not be able to sell the token. Launchpads like pump.fun and partly raydium-launchpad burn the right to withdraw liquidity after migration. So if a pool has 20–30% or more burned liquidity, it is a good sign, because this part will always stay in the pool for trading.
cashbackEnabledDeprecated since September 2026, replaced by holderRewardsRate. Indicates whether you are accumulating cashback for trading in this pool. Only older pump.fun and PumpSwap pools that haven't switched to the new format still accrue cashback; newer pools distribute rewards to holders instead. To claim your accumulated cashback, call claimCashback
creatorFeeAddressIt shows the address that receives the creator fees on pump.fun and pumpSwap if cashbackEnabled is False. Important: this address can change, since the real token creator has the right to modify it. Often, this address is the same as the one that originally created the token. The value may be None because not all pools have creator fees enabled.
holderRewardsRatePresent only in pump and pump-amm pools. Shows the percentage the token creator has set aside for distribution to token holders (up to 3%). Rewards are paid out every few hours in the quoteMint of the token's canonical pool. Keep in mind: when you buy in such a pool, you pay this percentage as an additional fee. Currently supported only for pump.fun tokens where quoteMint is not SOL or USDC.
feeMintPresent only for distributeFees events. Shows the token in which the fees were distributed. For pump.fun, this is always sol or mint address. For pump-amm, this is usually So11111111111111111111111111111111111111112 (WSOL), but can be another token.
feeAmountPresent only for distributeFees events. Shows the amount of accumulated fees that were distributed.
mayhemModeIndicates whether “mayhem mode” is active for pump or pump-amm pools. true means mayhem mode is on, false means it’s off. (Other pool types don’t have this field.). Usually, you should avoid mayhemMode == True, because this means that pump.fun’s AI agent receives 1 billion tokens. If it sells before you, you will no longer be able to sell and may encounter a 6024 Overflow error. In such a case, try to sell as much as you can, then call our burn method with 100% to burn all remaining tokens and receive a rent fee refund (0.002 SOL).
launchpadConfigThe address where the settings for the Meteora or Raydium launchpad are stored. Anyone can create their own config on these launchpad.
breakdownThe same event split into individual trades, without aggregation. One transaction can contain several trades in the same pool (for example a bundle, where many wallets buy in one transaction). Top-level tokenAmount and quoteAmount are the sum of all of them, and breakdown shows each one separately: action, trader, tokenAmount, quoteAmount.
mintAuthorityAddress that has permission to mint new tokens. This must always be None — otherwise it’s a red flag for a potential scam. Only stablecoins usually have a non-None value. More info
freezeAuthorityAddress that can freeze token accounts. This must always be None — a non-None value can indicate a honeypot or scam. Only stablecoins may have this set for regulatory reasons. More info
tokenProgramToken program used to create the token — either spl-token (legacy) or spl-token-2022 (newer standard). More info
tokenExtensionsToken extensions are only present in spl-token-2022 tokens. Be cautious — some extensions can be used by scammers! (This does not apply to tokens from pump.fun, Bonk, or other trusted launchpads.) Check our guide to learn which extensions are safe.
tradersInvolvedAddresses that actually executed the trade (spent funds). This field is critical for copy trading and analytics. A transaction may be signed and paid for by one address (txSigner), while the trade itself is executed using funds from another address. In such cases, txSigner shows the fee-payer, but tradersInvolved contains the real trader. Always track accounts by tradersInvolved, not txSigner, or you may miss trades. Visualization
programsUsedPrograms the action was called through, for example a router or an aggregator like Jupiter. Each event has its own list. []
addressLookupTablesAddress Lookup Tables (ALTs) are used to include more accounts than the transaction limit allows by referencing account indices within the tables. We send a list of the ALTs used.
preBalancesSOL and token balances of the accounts involved in the transaction, as they stand before the transaction is executed. Includes: the txSigner, all tradersInvolved, and — in the case of SOL transfers — both the sender and the receiver. In the case of token transfers, the SOL balance of the account that received the tokens is not included.
postBalancesSOL and token balances of the accounts involved in the transaction, as they stand after the transaction has been executed. Includes: the txSigner, all tradersInvolved, and — in the case of SOL transfers — both the sender and the receiver. In the case of token transfers, the SOL balance of the account that received the tokens is not included.
typePresent in certain transfer and distributeFees events. For transfer events, it indicates which method was used to perform the transfer, for example token_account_closure or withdraw_from_nonce. For distributeFees events, it indicates the type of fee claim. The value can be holders, shareholders, creator, social
isSolanaOnly in transfer events. Indicates whether the mint represents Solana. True if the mint is native SOL or WSOL (Wrapped SOL); otherwise False.
priorityFeeShows how much was paid to send this transaction. Minimum is 0.000005 SOL (base network fee) plus an additional tip to increase the likelihood that a validator includes the transaction.
blockBlock number in which the transaction was included. New blocks are produced every 400 ms
timestampBlockchain timestamp of transaction.