Skip to main content
A prediction market on the unified surface. Prices are YES probabilities in [0, 1]. Every field is one of three entry types — direct (taken from upstream), synthetic (computed by OpenPX), or omitted (not exposed upstream).

Coverage

ExchangeDirectSyntheticOmitted
kalshi1384
polymarket1870

Field crosswalk

Unified fieldTypekalshi sourcepolymarket sourceNotes
openpx_idstringsyntheticsynthetickalshi: Composite key \{exchange\}:\{ticker\}. polymarket: Composite key \{exchange\}:\{ticker\}.
exchangestringsyntheticsynthetickalshi: Literal string "kalshi". polymarket: Literal string "polymarket".
tickerstringMarket.tickerMarket.slugkalshi: Native Kalshi market ticker. polymarket: Polymarket slug; stable, human-readable identifier (numeric id lives in numeric_id).
numeric_idstring?omittedMarket.idkalshi: Kalshi has no separate numeric id surface. polymarket: Polymarket numeric DB id used for REST deep-links.
event_tickerstring?Market.event_tickersynthetickalshi: Native Kalshi event ticker. polymarket: Read from the embedded events[0].slug (falls back to events[0].id).
titlestringsyntheticMarket.questionkalshi: Composed as \{yes_sub_title\} | \{no_sub_title\}. polymarket: Polymarket market question text.
rulesstring?syntheticMarket.descriptionkalshi: Composed as \{rules_primary\} | \{rules_secondary\}. polymarket: Polymarket market description.
statusMarketStatussyntheticsynthetickalshi: Mapped from Kalshi’s status enum (initialized/active/closed/determined/…) to unified MarketStatus. polymarket: Combined from the active/closed/archived booleans into unified MarketStatus.
market_typeMarketTypesyntheticsynthetickalshi: Mapped from Kalshi’s market_type enum (binary/scalar) to unified MarketType. polymarket: Derived from outcomes.len() — binary if 2, otherwise categorical.
outcomesarraysyntheticsynthetickalshi: Two entries (Yes/No); price computed from yes_ask_dollars/last_price_dollars. polymarket: Zipped element-wise from the stringified-JSON arrays outcomes, outcomePrices, clobTokenIds.
condition_idstring?omittedMarket.conditionIdkalshi: Kalshi has no CTF condition id. polymarket: On-chain CTF condition id.
volumenumber (double)Market.volume_fpMarket.volumeNumkalshi: FixedPointCount string parsed to f64 USD. polymarket: Lifetime volume in USD.
volume_24hnumber? (double)Market.volume_24h_fpMarket.volume24hrkalshi: FixedPointCount string parsed to f64 USD. polymarket: 24-hour volume in USD.
last_trade_pricenumber? (double)Market.last_price_dollarsMarket.lastTradePricekalshi: Fixed-point dollar string parsed to YES probability in [0, 1]. polymarket: Already a YES probability in [0, 1].
best_bidnumber? (double)Market.yes_bid_dollarsMarket.bestBidkalshi: Fixed-point dollar string parsed to YES probability in [0, 1]. polymarket: Already a YES probability in [0, 1].
best_asknumber? (double)Market.yes_ask_dollarsMarket.bestAskkalshi: Fixed-point dollar string parsed to YES probability in [0, 1]. polymarket: Already a YES probability in [0, 1].
tick_sizenumber? (double)Market.price_rangesMarket.orderPriceMinTickSizekalshi: Smallest step across all tiers in the price_ranges array. polymarket: Single scalar tick size.
min_order_sizenumber? (double)syntheticMarket.orderMinSizekalshi: 1.0 by default, 0.01 when fractional_trading_enabled. polymarket: Polymarket minimum order size in contracts.
open_timestring? (date-time)Market.open_timeMarket.startDatekalshi: RFC3339 string parsed to UTC. polymarket: ISO 8601 string parsed to UTC.
close_timestring? (date-time)Market.close_timeMarket.endDatekalshi: RFC3339 string parsed to UTC. polymarket: ISO 8601 string parsed to UTC.
created_atstring? (date-time)Market.created_timeMarket.createdAtkalshi: RFC3339 string parsed to UTC. polymarket: ISO 8601 string parsed to UTC.
settlement_timestring? (date-time)Market.settlement_tsMarket.closedTimekalshi: RFC3339 string parsed to UTC. polymarket: On-chain settlement time, populated only after the market resolves.
neg_riskboolean?omittednegRisk (spec gap)kalshi: Kalshi has no neg-risk concept. polymarket: Spec gap: negRisk is present on every live /markets row but undeclared on Market in the gamma OpenAPI.
neg_risk_market_idstring?omittednegRiskMarketID (spec gap)kalshi: Kalshi has no neg-risk concept. polymarket: Spec gap: present on every live /markets row but undeclared on Market in the gamma OpenAPI.
resultstring?Market.resultsynthetickalshi: Native Kalshi resolution enum string. polymarket: Winning outcomes[i] where outcomePrices[i] == 1.0 after settlement.

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.