Skip to main content
Polymarket provides WebSocket channels for near real-time streaming of orderbook data, trades, and personal order activity. There are four available channels: market, user, sports, and RTDS (Real-Time Data Socket).

Channels

ChannelEndpointAuth
Marketwss://ws-subscriptions-clob.polymarket.com/ws/marketNo
Userwss://ws-subscriptions-clob.polymarket.com/ws/userYes
Sportswss://sports-api.polymarket.com/wsNo
RTDSwss://ws-live-data.polymarket.comOptional

Market Channel

TypeDescriptionCustom Feature
bookFull orderbook snapshotNo
price_changePrice level updatesNo
tick_size_changeTick size changesNo
last_trade_priceTrade executionsNo
best_bid_askBest prices updateYes
new_marketNew market createdYes
market_resolvedMarket resolutionYes
Types marked “Custom Feature” require custom_feature_enabled: true in your subscription.

User Channel

TypeDescription
tradeTrade lifecycle updates (MATCHED → CONFIRMED)
orderOrder placements, updates, and cancellations

Sports

TypeDescription
sport_resultLive game scores, periods, and status

Subscribing

Send a subscription message after connecting to specify which data you want to receive.

Market Channel

{
  "assets_ids": [
    "21742633143463906290569050155826241533067272736897614950488156847949938836455",
    "48331043336612883890938759509493159234755048973500640148014422747788308965732"
  ],
  "type": "market",
  "custom_feature_enabled": true
}
FieldTypeDescription
assets_idsstring[]Token IDs to subscribe to
typestringChannel identifier
custom_feature_enabledbooleanEnable best_bid_ask, new_market, and market_resolved events

User Channel

{
  "auth": {
    "apiKey": "your-api-key",
    "secret": "your-api-secret",
    "passphrase": "your-passphrase"
  },
  "markets": ["0x1234...condition_id"],
  "type": "user"
}
The auth fields (apiKey, secret, passphrase) are only required for the user channel. For the market channel, these fields are optional and can be omitted.
FieldTypeDescription
authobjectAPI credentials (apiKey, secret, passphrase)
marketsstring[]Condition IDs to receive events for
typestringChannel identifier
The user channel subscribes by condition IDs (market identifiers), not asset IDs. Each market has one condition ID but two asset IDs (Yes and No tokens).

Sports Channel

No subscription message required. Connect and start receiving data for all active sports events.

Dynamic Subscription

Modify subscriptions without reconnecting.

Subscribe to more assets

{
  "assets_ids": ["new_asset_id_1", "new_asset_id_2"],
  "operation": "subscribe",
  "custom_feature_enabled": true
}

Unsubscribe from assets

{
  "assets_ids": ["asset_id_to_remove"],
  "operation": "unsubscribe"
}
For the user channel, use markets instead of assets_ids:
{
  "markets": ["0x1234...condition_id"],
  "operation": "subscribe"
}

Heartbeats

Market and User Channels

Send PING every 10 seconds. The server responds with PONG.
PING

Sports Channel

The server sends ping every 5 seconds. Respond with pong within 10 seconds.
pong
If you don’t respond to the server’s ping within 10 seconds, the connection will be closed.

Troubleshooting

Send a valid subscription message immediately after connecting. The server may close connections that don’t subscribe within a timeout period.
You’re not sending heartbeats. Send PING every 10 seconds for market/user channels, or respond to server ping with pong for the sports channel.
  1. Verify your asset IDs or condition IDs are correct 2. Check that the markets are active (not resolved) 3. Set custom_feature_enabled: true if expecting best_bid_ask, new_market, or market_resolved events
Verify your API credentials are correct and haven’t expired.