↑ ↓ move · Enter open · Esc close

WebSockets / Channels / Kalshi Prices

Kalshi Prices

WS·kalshi_prices·Dev Tier+·Kalshi

Kalshi-specific live prices and volume for markets, including combinations across the full catalog. Subscribe by full market ticker, or use an Enterprise all-market subscription to include newly listed symbols automatically.

Overview

Use case: Maintain a Kalshi market mirror with live pricing and periodic symbol reconciliation.

Requirements

  • Uses your existing prices entitlement. Dev and Pro keys must specify market_ids; Enterprise may omit IDs for all markets, including combinations. All-market scope counts as one subscription. Per-key connection and explicit-ticker limits still apply.
  • Use REST ticker as market_ids, optionally prefixed with kalshi:. Event tickers, group_ids, and event_ids are not supported. Syntactic acceptance is not proof a ticker exists: use the REST catalog as the symbol authority.
  • This channel uses decimal-dollar strings, not the cents used by the general prices channel. It supplies updates, not an initial snapshot or historical replay.
  • Wait for KALSHI_STREAM_READY and reconcile REST prices on initial connect and every recovery. KALSHI_STREAM_INTERRUPTED means cached prices must be treated as stale.
  • A slow consumer is disconnected with code 1013 rather than silently losing queued updates. Reconnect, resubscribe, and reconcile. Unsubscribe without IDs to remove an all-market subscription before changing scope.

Send

FieldTypeRequiredNotes
actionstringyesMust be "subscribe" for this section.
channelstringyesMust be "kalshi_prices".
market_idsstring[]optionalFull Kalshi tickers. Omit only for Enterprise all-market delivery.
group_idsnumber[]unsupportedRejected when non-empty.
event_idsnumber[]unsupportedRejected when non-empty.
wildcardbehavioroptionalOmit both market_ids and group_ids to receive all channel events.

Receive

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

Enterprise all-market subscription: {"action":"subscribe","channel":"kalshi_prices"}. Unknown or quiet tickers do not produce a snapshot or an UNKNOWN_ID warning. Optional fields can be omitted or null; merge present fields and do not convert missing quotes to zero.

Seed your mirror from the Kalshi market catalog with /api/v2/kalshi/markets?limit=1000&include_combos=true and follow every cursor, including empty pages with a cursor. Every 15 minutes, run separate creation and metadata windows using min_created_ts/max_created_ts andmin_updated_ts/max_updated_ts. Fix the upper bound before each walk, overlap the previous completed window, deduplicate by ticker, and advance your checkpoint only after every page succeeds. Omit status during discovery so a short-lived market that opens and closes between polls is retained. Use include_combos=true for creation and settlement walks to cover combinations too. Metadata windows cover standalone markets and do not include prices; periodically refresh the full catalog to reconcile combination metadata.

Track settlements separately with min_settled_ts/max_settled_ts and recheck unresolved tickers with /api/v2/kalshi/markets/{ticker} after long outages. The catalog covers currently retained markets; older settled markets need individual lookups. Periodic full reconciliation repairs gaps beyond your overlap window. An empty page, absent tick, or closed market is not a deletion or settlement signal.

Buffer the latest live update per ticker while seeding or reconciling, merge source timestamps in order, and continue receiving updates throughout REST paging. The two transports do not provide an atomic snapshot. Persist your own symbols and checkpoints. Cross-market matching remains available through /api/v2/matching-markets?kalshi_key={ticker}; a missing match does not exclude a ticker from Kalshi pricing.

Data fields (inside data)

FieldTypeDescription
market_idstringFull Kalshi market ticker, identical to REST ticker.
sourcestringkalshi
price_dollarsstring?Last price in dollars (0 to 1); REST calls this last_price_dollars.
yes_bid_dollars / yes_ask_dollarsstring?Best YES quotes in dollars (0 to 1).
yes_bid_size_fp / yes_ask_size_fpstring?Fixed-point contract quantity at the best quote.
volume_fp / open_interest_fpstring?Fixed-point cumulative volume and open interest, in contracts.
last_trade_size_fpstring?Fixed-point size of the last trade, in contracts.
ts / ts_msnumber?Source timestamps in seconds / milliseconds. Outer ts is delivery time.