NOTE:
This is the documentation for websocket channels periscope and periscope:<TICKER>.
Websocket access for personal use is only available through the Advanced plan.
These channels are not available on the enterprise and enterprise startup plans; joining them returns an error.
You can find fully-functional examples that stream data from many channels here:
Connect to the websocket URI:
wss://api.unusualwhales.com/socket?token=<YOUR_API_TOKEN>
then join the channel you wish to stream: periscope for every index ticker at once,
or periscope:SPX for a single ticker.
Payload format:
Format for periscope:<TICKER>:
The global periscope channel streams the same envelope frames for every index ticker,
tagged periscope (the ticker field distinguishes them):
Each frame carries a batch of up to 1024 strike/expiry rows. A full snapshot spans
several frames; all frames of one snapshot share the same timestamp, and a new
timestamp starts the next snapshot (snapshots are published about once a
minute). has_more is true on every frame but the last one of a snapshot, so
the frame with "has_more": false closes the board. Sum the rows lengths across
frames with the same timestamp and compare against total_rows to verify you
received the complete snapshot.
Last modified on September 28, 2026