WebSocket Reference
market:prices
Real-time price updates for active markets
The market:prices channel broadcasts real-time YES and NO price updates for all active markets. Prices are refreshed every 60 seconds from both Polymarket and Kalshi.
Subscribe
{ "event": "subscribe", "data": { "channel": "market:prices" } }Unsubscribe
{ "event": "unsubscribe", "data": { "channel": "market:prices" } }Server Broadcast
When prices update, the server emits a data event:
{
"channel": "market:prices",
"data": {
"marketId": "c5a2e7f1-3b4d-4e6a-8f9c-1d2e3f4a5b6c",
"slug": "will-bitcoin-hit-100k-by-june-2026",
"yesPrice": "0.672300",
"noPrice": "0.327700",
"volume24h": "1245678.90",
"change5m": "0.003200",
"change1h": "-0.012500",
"change24h": "0.045600",
"source": "polymarket",
"updatedAt": "2026-03-27T14:30:00.000Z"
}
}Payload Schema
| Field | Type | Description |
|---|---|---|
marketId | string | Unique market identifier (UUID) |
slug | string | URL-safe market slug |
yesPrice | string | Current YES share price (Decimal, 6 decimal places) |
noPrice | string | Current NO share price (Decimal, 6 decimal places) |
volume24h | string | 24-hour trading volume in USD |
change5m | string | Price change over last 5 minutes |
change1h | string | Price change over last 1 hour |
change24h | string | Price change over last 24 hours |
source | string | Exchange source: polymarket or kalshi |
updatedAt | string | ISO 8601 timestamp of the update |
Notes
- Prices are broadcast every 60 seconds during the price-sync cycle
- Price values are strings representing
Decimal(10, 6)-- parse with appropriate precision handling - Price change values (
change5m,change1h, etc.) are updated during full-sync (every 5 minutes), not on every price-sync - Only markets with a price delta greater than
0.0001trigger a new snapshot write, but all active market prices are broadcast
Financial values are transmitted as strings to preserve decimal precision. Parse them with a decimal library rather than parseFloat() for critical calculations.