Skip to main content

Data Stream – WebSocket API

Use this endpoint to stream live:

  • Solana and tokens transfers
  • Pump.fun
  • PumpSwap
  • Raydium Launchpad (Bonk)
  • Raydium-CPMM
  • Meteora Launchpad (Bags, moonshot)

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

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 to avoid rate limits.
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 pumpapi_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) # {'txType': 'buy', 'pool': 'pump', ...}

asyncio.run(pumpapi_data_stream())

Event Examples

{
"signature": "3mGAAs4CkM86s3bN8Jkt2EZRGf7ZVkbgNk2pV3STrEof8nCdFg5kqWdFyohp23uFVwierCvdeuXBzy3QDwNdaX4L",
"txType": "transfer",
"txSigner": "YubQzu18FDqJRyNfG8JqHmsdbxhnoQqcKUHBdUkN6tP",
"transfers": [
{
"from": "YubQzu18FDqJRyNfG8JqHmsdbxhnoQqcKUHBdUkN6tP",
"to": "2XxKhfVBna1Jjs5PdCQmjAXHg6NnFXoNVEHfEz2ZnnL8",
"amount": 500.0,
"isSolana": False,
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
},
{
"from": "YubQzu18FDqJRyNfG8JqHmsdbxhnoQqcKUHBdUkN6tP",
"to": "2XxKhfVBna1Jjs5PdCQmjAXHg6NnFXoNVEHfEz2ZnnL8",
"amount": 0.00002,
"isSolana": True, <----- is TRUE when mint is Sol or WSOL (wrapped sol)
"mint": "So11111111111111111111111111111111111111111"
}
],
"block": 388677942,
"timestamp": 1766513012579
}

Glossary

FieldDescription
signatureTransaction signature on the Solana blockchain.
txTypeTransaction type — one of transfer, create, buy, sell, migrate, createPool, add, remove.
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. We send this parameter only if quote token is NOT Solana. By default, quoteMint is Solana, so we do not send it. For example, in some pools you can buy a token only with USDC, USDT, or another token. In these cases, we send quoteMint, and its address.
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.
solAmountThe amount of SOL involved in the transaction. This is returned only when the second (quote) token in the trading pair is Solana. If the quote token is something else (e.g., USDT or USDC), you will receive quoteAmount instead.
quoteAmountThe amount of the quoteMint token involved in the transaction. This is returned only when the second token in the trading pair is not Solana.
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.
solInPoolTotal amount of SOL currently locked in the liquidity pool. This field is present only when SOL is the quote token. It represents SOL liquidity available for trades.
quoteInPoolTotal amount of the quote token (quoteMint) locked in the liquidity pool. This field is present only when the quote token is NOT SOL (e.g. USDC, USDT). 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.
vSolInBondingCurveVirtual SOL reserves in the bonding curve pool. Reflects liquidity available on the SOL side. This field is present only when the pool is pump or raydium-launchpad and when quote token is Solana. If it's anything else (like USDC/USDT/etc.) you will get vQuoteInBondingCurve instead.
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 and when quote token is NOT Solana (like USDC/USDT/etc.). If it's Solana you will get vSolInBondingCurve instead
pricePrice in quoteMint (usually SOL) including this transaction’s impact.
marketCapSolMarket capitalization in SOL. We send this only when quote mint is Solana.
marketCapQuoteMarket capitalization in Quote. We send this only when quote mint is NOT Solana. (like USDC, USDT, etc.)
poolLiquidity source. Before migration, the value is either pump or raydium-launchpad. After migration, pumppump-amm, raydium-launchpadraydium-cpmm.
poolCreatedByshows who created the pool on pump-amm or raydium-cpmm. If the pool was created by migration, the value is pump or raydium-launchpad. These pools are trusted. If the pool was created manually, the value is custom. Be careful with such pools.
lockedLiquidityAfterMigrationShows what percentage of liquidity will be locked after the migration. Beware of values below 100%, as the pool or launchpad creator can withdraw the liquidity after the migration (rug pull).
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.
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.)
launchpadConfigThe address where the settings for the Meteora or Raydium launchpad are stored. Anyone can create their own config on these launchpad.
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
isSolanaOnly in transfer events. Indicates whether the mint represents Solana. True if the mint is native SOL or WSOL (Wrapped SOL); otherwise False.
blockBlock number in which the transaction was included. New blocks are produced every 400 ms
timestampBlockchain timestamp of transaction.