Skip to main content
PolyBolt streams crypto, equity and TWAP reference prices over a single connection. Subscriptions require CLOB API credentials. For existing RTDS integrations, see Migrating from RTDS.

Connect

Open a WebSocket connection to:
Choose a channel, authenticate, then send a subscription request.

Channels

Use lowercase symbols.

Authenticate for Gated Channels

Send your CLOB API credentials on the open connection before subscribing:
Wait for the server to confirm authentication:
The server reports authentication problems with an error acknowledgement, for example:
These errors leave the connection open:

Subscribe

Send the channels and filters you want to follow. This request subscribes to the BTC reference price on the authenticated connection:
A batch counts as one request against the rate limit.

Envelope

Data envelopes carry snapshots and live updates. Acknowledgements report the result of a request.
Acknowledgements echo 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:
  • seq is consecutive per connection and per channel, including snapshots. It resets on reconnect.
  • ts is the producer’s event time in Unix milliseconds.
  • snapshot: true identifies the initial snapshot.
  • dropped, when present, counts frames dropped on that channel since the last delivered frame because the client fell behind.
Compare sequence numbers only within the same connection and channel. See the Live Data Channel for every message schema and https://ws-live-v2.polymarket.com/asyncapi.json for the machine-readable contract.

Unsubscribe

Send the same channel and filter with op: "unsubscribe" to stop a subscription:
The server confirms with 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.