Skip to main content
Full-depth L2 orderbook for one asset. Every field is one of three entry types — direct (taken from upstream), synthetic (computed by OpenPX), or omitted (not exposed upstream).

Coverage

ExchangeDirectSyntheticOmitted
kalshi231
polymarket501

Field crosswalk

Unified fieldTypekalshi sourcepolymarket sourceNotes
asset_idstringMarketOrderbookFp.tickerOrderBookSummary.asset_idkalshi: Kalshi market ticker; the single-market REST endpoint stamps the path parameter. polymarket: Polymarket CTF token id of one outcome.
bidsarrayOrderbookCountFp.yes_dollarsOrderBookSummary.bidskalshi: YES bids parsed from [price_$, count_fp] tuples and sorted descending. polymarket: OrderSummary \{ price, size \} strings parsed to f64 and sorted descending.
asksarraysyntheticOrderBookSummary.askskalshi: Synthesized from no_dollars via the binary identity: NO bid at p == YES ask at (1 − p). polymarket: OrderSummary \{ price, size \} strings parsed to f64 and sorted ascending.
last_update_idinteger? (uint64)syntheticomittedkalshi: WS seq on snapshot/delta messages; null on REST since the endpoint omits it. polymarket: Polymarket emits no per-message sequence — book integrity is verified via hash.
timestampstring? (date-time)syntheticOrderBookSummary.timestampkalshi: WS ts_ms on delta messages; REST stamps Utc::now() at receive time. polymarket: Unix millis encoded as a string.
hashstring?omittedOrderBookSummary.hashkalshi: Kalshi exposes no orderbook hash on REST or WS. polymarket: Exchange-provided book-state hash for replay integrity.

Source specs

Tables are auto-generated from schema/mappings/. CI fails if any direct ref no longer resolves in the cached upstream spec; the daily upstream-refresh PR surfaces drift here.