Skip to main content
The Polymarket Real-Time Data Socket (RTDS) is a WebSocket-based streaming service that provides real-time updates for comments, crypto prices, and equity prices.

TypeScript client

Official RTDS TypeScript client (real-time-data-client).

Endpoint

Some user-specific streams may require gamma_auth with your wallet address.

Subscribing

Send a JSON message to subscribe to data streams:
To unsubscribe, send the same structure with "action": "unsubscribe". Subscriptions can be added, removed, and modified without disconnecting. Send PING messages every 5 seconds to maintain the connection.
Only the subscription types documented below are supported.

Message Structure

All messages follow this structure:

Crypto Prices

Real-time cryptocurrency price data from two sources: Binance and Chainlink. No authentication required.

Binance Source

Subscribe to all symbols:
Subscribe to specific symbols with a comma-separated filter:
Symbols use lowercase concatenated format (e.g., solusdt, btcusdt). Solana price update:
Bitcoin price update:
Trading 15m Crypto Markets? Get a sponsored Chainlink API key with onboarding support from Chainlink. Fill out this form.
Subscribe to all symbols:
Subscribe to a specific symbol with a JSON filter:
Symbols use slash-separated format (e.g., eth/usd, btc/usd). Ethereum price update:
Bitcoin price update:

Price Payload Fields

Supported Symbols

Binance Source — lowercase concatenated format:
  • btcusdt — Bitcoin to USDT
  • ethusdt — Ethereum to USDT
  • solusdt — Solana to USDT
  • xrpusdt — XRP to USDT
Chainlink Source — slash-separated format:
  • btc/usd — Bitcoin to USD
  • eth/usd — Ethereum to USD
  • sol/usd — Solana to USD
  • xrp/usd — XRP to USD

Equity Prices

Real-time price data for stocks, ETFs, forex pairs, precious metals, and commodities sourced from Pyth Network. No authentication required.
Trading Equity Markets? Get a Pyth Network data feed - first 30 days free, then $99/month. Subscribe here.
All asset classes stream through a single equity_prices topic. When you subscribe with a symbol filter, the server sends a historical snapshot (last 2 minutes of data), then continues streaming live updates.

Subscribe

Subscribe to a specific symbol with a JSON filter:
Subscribe to multiple symbols across asset classes:
Use type: "*" to receive all message types (live updates and snapshots):
Filter values are case-insensitive on subscribe, but the symbol field in payloads is always returned lowercase.
Need the price-to-beat value? Pass the market slug to the price-to-beat endpoint:GET https://polymarket.com/api/equity/price-to-beat/{slug}Example: https://polymarket.com/api/equity/price-to-beat/wti-up-or-down-on-april-7-2026

Live Price Update

Apple stock update:
Gold price update (market closed):

Historical Snapshot

On subscribe, the server delivers a backfill of the last 2 minutes of price data. Use the type field to distinguish: "subscribe" for the initial snapshot vs "update" for live ticks.

Equity Price Payload Fields

Supported Symbols

Stocks: ETFs: Forex: Precious Metals: Commodities (rolling front-month futures):

Market Hours

When a market session is closed, the stream continues with the last known price and is_carried_forward: true. This lets you distinguish stale prices from live ticks. Update frequency is sub-second (up to 5 per second per feed) during market hours.

Comments

Real-time comment events on the Polymarket platform, including new comments, replies, reactions, and removals. May require Gamma authentication for user-specific data.

Subscribe

Message Types

comment_created

Emitted when a user posts a new comment or replies to an existing one.
A reply to the above comment — note parentCommentID references the parent:

Comment Payload Fields

Profile Object Fields

Comment Hierarchy

Comments support nested threading:
  • Top-level comments: parentCommentID is null or empty
  • Reply comments: parentCommentID contains the ID of the parent comment
  • All comments are associated with a parentEntityID and parentEntityType (Event or Market)

Troubleshooting

Send PING messages every 5 seconds to keep the connection alive. Connection errors will trigger automatic reconnection attempts.
Verify your subscription message is valid JSON with the correct action, topic, and type fields. Invalid subscription messages may result in connection closure.
If subscribing to user-specific streams, ensure your gamma_auth object includes a valid wallet address. Authentication failures will prevent subscription to protected topics.