↑ ↓ move · Enter open · Esc close

WebSockets / Channels / Prices

Prices

WS·prices·Dev Tier+·KalshiPolymarketPolymarket USOpinionPredictItPredict.funNovig

Real-time bid, ask, last, and volume for subscribed markets or match groups. Works for any market we ingest - matched cross-platform groups and single-platform markets alike - plus any live market in the Kalshi catalog by its market ticker.

Overview

Use case: Power live dashboards, price alerts, and cross-venue comparisons without polling REST.

Requirements

  • Available with a Dev, Pro, or Enterprise API key.
  • Subscribe with market_ids (any platform-native id we ingest, or the REST-style platform:market_id composite, e.g. kalshi:KXMENWORLDCUP-26-FR) and/or group_ids (matched cross-platform groups).
  • Wildcard subscriptions are not supported - specify at least one id.
  • Requires an authenticated WebSocket session (same as all channels).

Send

FieldTypeRequiredNotes
actionstringyesMust be "subscribe" for this section.
channelstringyesMust be "prices".
market_idsstring[]optionalMarket scope; can be combined with group_ids.
group_idsnumber[]optionalGroup scope; expands to markets linked to each group.
event_idsnumber[]unsupportedIgnored / not used by this channel.
wildcardbehaviornot availableAt least one supported id list should be provided.

Receive

Data messages use the standard envelope: channel, type, ts, data. Types for this channel include: price_update.

After subscribed, you receive a price_update per resolved market that already has a cached tick (same shape as streaming updates). Markets we know about but haven't ticked yet stay subscribed silently and deliver on the next tick - no snapshot, no warning. A warning with code UNKNOWN_ID is only emitted when an id is neither in our ingestion universe nor in the live Kalshi catalog (typo, retired market, or an event ticker - subscribe with the market ticker, e.g. KXODIMATCH-26JUL160800INDENG-IND, not its event ticker). Kalshi catalog markets outside our tracked set get a snapshot immediately and begin streaming live ticks within a few seconds of the first subscribe.

Explicit Kalshi ticker subscriptions also use the dedicated Kalshi feed. Keep subscribing to prices and handling price_update: prices remain numeric cents, and the subscription counts toward the usual limits. kalshi_prices remains available for decimal-dollar ticker messages and Enterprise all-market subscriptions.

For these Kalshi subscriptions, KALSHI_STREAM_INTERRUPTED means prices are stale. After KALSHI_STREAM_READY, refresh current prices through REST before relying on the stream again. Updates are not replayed. Partial ticks retain fields from the current session, while explicit nulls clear fields. A reconnect starts a new baseline. Group-only subscriptions continue to use the general price feed.

Data fields (inside data)

FieldTypeDescription
market_idstringPlatform-native market identifier.
sourcestringe.g. kalshi, polymarket, opinion.
group_idint?Match group id when the market is linked across platforms. Omitted for single-platform markets.
yes_bid / yes_asknumberYES side best bid and ask in cents (0 to 100).
no_bid / no_asknumberNO side best bid and ask in cents (0 to 100).
last_pricenumberLast traded price in cents (0 to 100).
volumenumberReported volume.
tsnumberUnix seconds: source time for direct Kalshi ticker updates, otherwise the cached timestamp when present.