{
"type": "orderbook_snapshot",
"marketId": "clv2abc123def456",
"seq": 1710000001,
"checksum": 2918476531,
"bids": [
{
"price": 0.55,
"totalSize": 1500,
"venues": {
"kalshi": 800,
"polymarket": 700
}
}
],
"asks": [
{
"price": 0.55,
"totalSize": 1500,
"venues": {
"kalshi": 800,
"polymarket": 700
}
}
],
"venueOrderbooks": {
"kalshi": {
"bids": [
{
"price": 0.55,
"size": 100
}
],
"asks": [
{
"price": 0.55,
"size": 100
}
]
},
"polymarket": {
"bids": [
{
"price": 0.55,
"size": 100
}
],
"asks": [
{
"price": 0.55,
"size": 100
}
]
}
},
"venues": {
"kalshi": {
"bestBid": 0.54,
"bestAsk": 0.56
},
"polymarket": {
"bestBid": 0.54,
"bestAsk": 0.56
}
},
"midpoint": 0.55,
"spread": 0.01,
"timestamp": 1710000000000
}{
"type": "orderbook_delta",
"marketId": "clv2abc123def456",
"seq": 1710000001,
"checksum": 2918476531,
"bidChanges": [
{
"price": 0.55,
"totalSize": 1500,
"venues": {
"kalshi": 800,
"polymarket": 700
}
}
],
"askChanges": [
{
"price": 0.55,
"totalSize": 1500,
"venues": {
"kalshi": 800,
"polymarket": 700
}
}
],
"venueDeltaBooks": {
"kalshi": {
"bidChanges": [
{
"price": 0.55,
"size": 100
}
],
"askChanges": [
{
"price": 0.55,
"size": 100
}
]
},
"polymarket": {
"bidChanges": [
{
"price": 0.55,
"size": 100
}
],
"askChanges": [
{
"price": 0.55,
"size": 100
}
]
}
},
"venues": {
"kalshi": {
"bestBid": 0.54,
"bestAsk": 0.56
},
"polymarket": {
"bestBid": 0.54,
"bestAsk": 0.56
}
},
"midpoint": 0.55,
"spread": 0.01,
"timestamp": 1710000000000
}{
"type": "subscribed",
"marketIds": [
"clv2abc123def456",
"clv2xyz789ghi012"
]
}{
"type": "unsubscribed",
"marketIds": [
"clv2abc123def456",
"clv2xyz789ghi012"
]
}{
"action": "subscribe",
"marketIds": [
"clv2abc123def456",
"clv2xyz789ghi012"
]
}{
"action": "unsubscribe",
"marketIds": [
"clv2abc123def456",
"clv2xyz789ghi012"
]
}{
"action": "resnapshot",
"marketIds": [
"clv2abc123def456",
"clv2xyz789ghi012"
]
}Subscribe to aggregated orderbook updates for canonical markets. Receive an initial snapshot, then incremental deltas with sequencing and checksums. Client maintains a local book by applying deltas. Request a resnapshot if checksum mismatches.
Sequencing: seq increments by exactly 1 between consecutive messages for a given market. Values are epoch-based (large numbers, not starting from 1) so they never collide across server restarts. If you receive a seq that is not your last seq + 1, you missed messages — the server auto-sends a snapshot in that case, but you can also request one via resnapshot.
{
"type": "orderbook_snapshot",
"marketId": "clv2abc123def456",
"seq": 1710000001,
"checksum": 2918476531,
"bids": [
{
"price": 0.55,
"totalSize": 1500,
"venues": {
"kalshi": 800,
"polymarket": 700
}
}
],
"asks": [
{
"price": 0.55,
"totalSize": 1500,
"venues": {
"kalshi": 800,
"polymarket": 700
}
}
],
"venueOrderbooks": {
"kalshi": {
"bids": [
{
"price": 0.55,
"size": 100
}
],
"asks": [
{
"price": 0.55,
"size": 100
}
]
},
"polymarket": {
"bids": [
{
"price": 0.55,
"size": 100
}
],
"asks": [
{
"price": 0.55,
"size": 100
}
]
}
},
"venues": {
"kalshi": {
"bestBid": 0.54,
"bestAsk": 0.56
},
"polymarket": {
"bestBid": 0.54,
"bestAsk": 0.56
}
},
"midpoint": 0.55,
"spread": 0.01,
"timestamp": 1710000000000
}{
"type": "orderbook_delta",
"marketId": "clv2abc123def456",
"seq": 1710000001,
"checksum": 2918476531,
"bidChanges": [
{
"price": 0.55,
"totalSize": 1500,
"venues": {
"kalshi": 800,
"polymarket": 700
}
}
],
"askChanges": [
{
"price": 0.55,
"totalSize": 1500,
"venues": {
"kalshi": 800,
"polymarket": 700
}
}
],
"venueDeltaBooks": {
"kalshi": {
"bidChanges": [
{
"price": 0.55,
"size": 100
}
],
"askChanges": [
{
"price": 0.55,
"size": 100
}
]
},
"polymarket": {
"bidChanges": [
{
"price": 0.55,
"size": 100
}
],
"askChanges": [
{
"price": 0.55,
"size": 100
}
]
}
},
"venues": {
"kalshi": {
"bestBid": 0.54,
"bestAsk": 0.56
},
"polymarket": {
"bestBid": 0.54,
"bestAsk": 0.56
}
},
"midpoint": 0.55,
"spread": 0.01,
"timestamp": 1710000000000
}{
"type": "subscribed",
"marketIds": [
"clv2abc123def456",
"clv2xyz789ghi012"
]
}{
"type": "unsubscribed",
"marketIds": [
"clv2abc123def456",
"clv2xyz789ghi012"
]
}{
"action": "subscribe",
"marketIds": [
"clv2abc123def456",
"clv2xyz789ghi012"
]
}{
"action": "unsubscribe",
"marketIds": [
"clv2abc123def456",
"clv2xyz789ghi012"
]
}{
"action": "resnapshot",
"marketIds": [
"clv2abc123def456",
"clv2xyz789ghi012"
]
}App-level auth: pass appId as a query parameter on connect. Required for all connections. The appId must belong to an active app with matching allowed origins.
User-level auth: pass JWT as token query param on connect, or send { action: 'authenticate', token } mid-session. Required for user-specific events (orders, balances). Same JWT as the REST API.
Full aggregated orderbook state with venue attribution
Incremental update — only changed levels. size=0 means level removed.
Subscribe to aggregated orderbook updates for markets
Resets client seq tracking and sends a full snapshot from gateway cache