> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raze.bot/llms.txt
> Use this file to discover all available pages before exploring further.

# Streaming overview

> Six channels over one WebSocket, or one per SSE stream. Snapshot first, then changes.

Everything that moves is pushed. Two transports, the same channels and the same frames:

| | WebSocket | SSE |
| - | - | - |
| URL | `GET /v1/ws` | `GET /v1/stream/{channel}` |
| Channels | Up to 200 per socket | One per connection |
| Auth | Same as REST (`?apiKey=` in a browser) | Same as REST (`?apiKey=` in a browser) |
| Frame | One JSON text frame | One `data:` line; the event name is the frame `type` |
| Keep-alive | Server ping every 20 s | Comment line every 15 s |

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

| Channel | Parameters | Snapshot | Then |
| - | - | - | - |
| `trades` | `chain`, `token` | The last 100 trades, newest first | `trade` on every trade; on Solana, `retract` when a block loses its fork |
| `candles` | `chain`, `token`, `interval`, `unit` | The last 300 candles, oldest first | `candle`: the forming candle, on every trade |
| `token` | `chain`, `token` | The full token | `tick` on every trade; the full token again every 15 s while it trades |
| `launchpad` | `board`, `chain` (optional) | Up to 100 tokens of the board | `add`, `update`, `remove` |
| `prices` | — | SOL, ETH, BNB | `update` |
| `wallet` | `wallet` (Solana) | The wallet's last 50 swaps | `trade` on every swap |

Payloads are the REST objects: a `trade` is a [`Trade`](/api-reference/tokens/trades), a `candle` a [`Candle`](/api-reference/tokens/candles), a launchpad row a [`TokenSummary`](/api-reference/discovery/launchpad). Details per channel: [Channels](/streaming/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 later `snapshot` on 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 `trades` channel shows.
* **Falling behind is announced.** A subscriber that cannot keep up gets a `lagged` frame with the number of frames it lost. The channel then catches up on its own: a fresh `snapshot` (right away on `trades` and `launchpad`, as soon as it is read again on `candles`, `token` and `wallet`), or a full `update` on `prices`.
* **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 `503` `server_busy` with `Retry-After: 30`; connections already open keep running. Reconnect after the wait, with backoff. See [Live errors](/get-started/errors#live-errors).

<CardGroup cols={3}>
  <Card title="WebSocket" href="/streaming/websocket" icon="plug">
    Ops and control frames
  </Card>

  <Card title="SSE" href="/streaming/sse" icon="tower-broadcast">
    EventSource examples
  </Card>

  <Card title="Channels" href="/streaming/channels" icon="tags">
    Every frame, with examples
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.