Skip to main content
Use Polymarket’s real-time feeds to react as market conditions and related data change. They keep the public market data your application depends on current without repeated polling. For authenticated order and trade updates, see Real-Time Order Updates.

Market Stream

Use the market stream to keep your application in sync with changes to a market’s order book and trading state.
The unified SDK uses assetId for an outcome’s trading identifier: a token ID for a CTF market or a position ID for a Polymarket Protocol V2 market. Use the identifier exposed for that outcome.Given a PublicClient or SecureClient, subscribe to the market topic with one or more outcome IDs:

Order Book

Price Change

Last Trade Price

Tick Size Change

Enable customFeatureEnabled to include top-of-book and market lifecycle updates:

Best Bid and Ask

New Market

Market Resolved

Sports Stream

Use the sports stream to keep live game information current alongside sports markets. Updates arrive when a game goes live, its score or period changes, or it ends. NFL and CFB updates can also reflect possession changes.
Sports data is provided for informational purposes only. It may be delayed, contain errors, or omit recent events. Polymarket does not provide trading or investment advice, and this data should not be used as the basis for a trading decision.
Given a PublicClient or SecureClient, subscribe to the sports topic to receive every game update:
score is a combined "<home>-<away>" string, not separate home and away fields.

Period Values

The meaning and format of a period depend on the sport:

Game Status Values

Status values vary by sport and are case-sensitive:

Reference Prices

Stream crypto, equity, and time-weighted average reference prices through Polymarket. Authenticate, select the symbols you need, and process historical prices and live updates.
Reference price subscriptions require authentication. Existing RTDS integrations should follow the migration guide.
Use lowercase symbols. See the PolyBolt overview for crypto and TWAP lists, and the equity catalog below for equity symbols.

Historical Snapshot

Each new subscription provides a snapshot of the preceding two minutes of prices and live updates. Seed local state from the snapshot, then apply the latest price. Applications that only need live prices can ignore the snapshot.

Crypto Prices

Stream crypto reference prices in USD to keep prices current alongside related markets.
Call client.subscribe with an authenticated SecureClient from @polymarket/client 0.11.0 or later. See Wallet Integrations to create the client.
events: CryptoPriceEvent[]
For live prices only, skip events whose type is "subscribe".

Equity Prices

Stream reference prices for stocks, ETFs, forex pairs, precious metals, and commodities.
Call client.subscribe to subscribe to the prices.equity topic and your chosen symbols with an authenticated SecureClient.
events: EquityPriceEvent[]
For live prices only, skip events whose type is "subscribe".

Supported Equity Symbols

Read the Market Status

Use market status to distinguish a closed market from a price that has stopped updating. Status describes the instrument priced by the provider, so two providers can report different states for the same symbol. For example, a Chainlink series can remain open over a weekend while a Pyth series follows the underlying exchange’s session hours.
In SDK 0.14.0 and later, read payload.marketStatus on both subscribe snapshots and update events. Import EquityMarketStatus from @polymarket/client and use an existing authenticated SecureClient:
EquityMarketStatus.Open, .Closed, and .Unknown correspond to the three stated values. undefined means not stated. The same field is available on prices.equity.twap. Subscribe with { topic: "prices.equity.twap", symbol: "eurusd" }. In a snapshot, status is on payload, alongside data, rather than on each historical price point.
A spot status change can repeat the last price and its timestamp. The update is marked as carried forward (isCarriedForward in TypeScript, is_carried_forward in Python and the API). Do not discard an update solely because its price timestamp repeats: doing so can hide a market close or reopen. Equity TWAP status changes arrive with a new price. While status is closed or unknown, a snapshot can retain a closing price older than the usual two-minute history window. Re-read status and source after every reconnect. SDK cached spot snapshots retain the last stated status when a later update omits it. A status change on an older price does not roll newer history back. An unstated live update still has undefined or None for its own status. During market hours, prices can update up to five times per second for each feed.

TWAP Prices

A time-weighted average price (TWAP) represents an asset’s price across a lookback window. Stream Chainlink-computed crypto TWAPs with a fixed 60-second window through Polymarket.
Call client.subscribe to subscribe to the prices.crypto.twap topic and your chosen symbols with an authenticated SecureClient.
events: CryptoTwapPriceEvent[]
For live prices only, skip events whose type is "subscribe". payload.value is already an exact decimal string. No E18 conversion is needed.Use a canonical symbol such as btcusd. The returned windowSeconds: 60 describes the lookback period, not the update interval. Use payload.timestamp to check price freshness.

Comments

Live comment and reaction streaming is being retired without a replacement streaming channel. Check below for the corresponding fetch method.
Create a public client and call client.listComments() to list comments for an event. This method does not provide live comment or reaction events.
page.items contains Comment objects. Check page.hasMore for more results and continue with pages.from(page.nextCursor).
One comment from page.items, serialized as JSON with selected fields shown.