greeks and greeks:<TICKER>.
Websocket access for personal use is only available through the Advanced plan.
You can find fully-functional examples that stream data from many channels here:
- Python: https://github.com/unusual-whales/api-examples/tree/main/examples/ws-multi-channel-multi-output
- Javascript: https://github.com/unusual-whales/api-examples/tree/main/examples/ws-multi-channel-multi-output-nodejs
wss://api.unusualwhales.com/socket?token=<YOUR_API_TOKEN>
then join the channel you wish to stream: greeks for every underlying at once,
or greeks:SPY for a single one.
Both channels stream the live counterpart of /api/stock/{ticker}/greeks,
with a different shape: the REST endpoint returns one row per strike for a single
expiry with call_*/put_* field pairs, while these channels stream one message
per contract, across all expiries, with a single set of greek fields plus
option_type. A message is emitted every time a contract’s greeks are recalculated
and its theoretical price moved - for a busy underlying that is many messages per
second across the whole chain.
Weekly/PM index series are folded into their canonical root on both channels:
greeks:SPX includes SPXW contracts (likewise VIXW under VIX, NDXP under NDX, RUTW
under RUT). The ticker field carries the canonical root; use option_symbol to
tell the series apart.
Payload format:
Format for greeks:<TICKER>:
greeks channel streams the same per-contract object for every
underlying, tagged greeks (the ticker field distinguishes them):
greeks channel is a firehose. Every contract of every optionable
underlying is repriced continuously, so this channel is in the same volume class as
option_trades and gex_strike_expiry - tens of thousands of messages per second
at peak. Prefer greeks:<TICKER> unless you genuinely need the whole chain, and if
you do subscribe globally, read the socket on a dedicated task and buffer/flush
rather than processing inline: a client that cannot keep up will have frames
dropped.
Note that unlike the gex and periscope channels, the greek values on these
channels are JSON numbers, not decimal strings: they are floating point
quantities as computed, so you may see full double precision (e.g.
0.30000000000000004). Round on your side to whatever precision you display.
Fields:
