Skip to main content
GET /v1/stream/{channel} with the channel’s parameters in the query. The frames are the WebSocket’s; each one is an SSE event whose name is the frame type.
A comment line every 15 s keeps proxies from closing an idle stream. Wrong parameters answer 400 JSON before the stream starts. While the server is at capacity, a new stream answers 503 server_busy with Retry-After: 30 before it starts; streams already open keep running.

Browser

EventSource cannot set headers: pass ?apiKey=. Because every event is named, onmessage never fires; listen to the types you want.
EventSource reconnects on its own after a network drop, and the new stream starts with a fresh snapshot. It does not retry a refused stream (a 503): open a new EventSource after 30 s.

curl

URLs per channel

One stream is one channel. A page that needs several channels opens one EventSource each, and browsers allow only about six HTTP/1.1 connections per host: past two or three channels, use the WebSocket.