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.
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.