Connect
Open a WebSocket connection to:Channels
Use lowercase symbols.
Authenticate for Gated Channels
Send your CLOB API credentials on the open connection before subscribing:Subscribe
Send the channels and filters you want to follow. This request subscribes to the BTC reference price on the authenticated connection:Envelope
Data envelopes carry snapshots and live updates. Acknowledgements report the result of a request.rid when the request includes it.
Each new subscription receives an acknowledgement and one snapshot. Seed local state from the snapshot, then apply the latest price. Snapshots contain the preceding two minutes of prices, with an empty
data array when no recent data is available. Repeating an existing channel and filter returns another acknowledgement without a new snapshot.
For data envelopes:
seqis consecutive per connection and per channel, including snapshots. It resets on reconnect.tsis the producer’s event time in Unix milliseconds.snapshot: trueidentifies the initial snapshot.dropped, when present, counts frames dropped on that channel since the last delivered frame because the client fell behind.
https://ws-live-v2.polymarket.com/asyncapi.json for the machine-readable contract.
Unsubscribe
Send the same channel and filter withop: "unsubscribe" to stop a subscription:
unsubscribed. Both subscribe and unsubscribe
accept a single channel and filter or a subscriptions array.
Supported Symbols
Crypto Prices
For
price.crypto.twap, use window_seconds: 60. Other windows do not provide data.
Equity Prices
price.equity supports these lowercase symbols:
Limits and Liveness
The server sends a WebSocket ping every 25 seconds. Standard clients answer
automatically. Two missed pongs close the connection with
4002.
You can also send { "op": "ping" } to check the connection at the application
level. The server responds with pong.
Close Codes and Reconnecting
Choose the retry behavior based on the close code:
If the connection is refused with HTTP
429 or 503, use Retry-After as the minimum
wait and add jitter. Browser clients see handshake failures as 1006 and should
use exponential backoff with full jitter.
After reconnecting, authenticate again for gated channels and resend your
subscriptions. Initialize from the new snapshots. Sequence numbers start over.