Use the WebSocket when a screen needs several channels (a token page wants trades, candles and the token). Use SSE for a single feed where a plain HTTP stream is simpler.
Channels
Payloads are the REST objects: a
trade is a Trade, a candle a Candle, a launchpad row a TokenSummary. Details per channel: Channels.
Rules every channel follows
- Snapshot, then changes. The first frame of a subscription is
snapshot, so you never need a REST call next to a stream. Trades already in the snapshot are not sent again. A latersnapshoton the same subscription replaces what you hold. - Push, not poll. Solana trades come straight from the chain, EVM trades from an indexer’s push feed, launchpad progress and native prices from push feeds too. Nothing is refreshed on a timer.
- One source for chart and tape. Live candles and token ticks are built from the same trades the
tradeschannel shows. - Falling behind is announced. A subscriber that cannot keep up gets a
laggedframe with the number of frames it lost. The channel then catches up on its own: a freshsnapshot(right away ontradesandlaunchpad, as soon as it is read again oncandles,tokenandwallet), or a fullupdateonprices. - Reconnects are yours. If the socket drops, open a new one and subscribe again: each subscription starts with a fresh snapshot, so nothing is lost.
- A busy server refuses new connections, not open ones. At capacity, a new WebSocket or SSE connection answers
503server_busywithRetry-After: 30; connections already open keep running. Reconnect after the wait, with backoff. See Live errors.
WebSocket
Ops and control frames
SSE
EventSource examples
Channels
Every frame, with examples