Skip to main content
A grouping of related markets — one Kalshi event_ticker or one Polymarket event slug. Every field is one of three entry types — direct (taken from upstream), synthetic (computed by OpenPX), or omitted (not exposed upstream).

Coverage

ExchangeDirectSyntheticOmitted
kalshi716
polymarket1220

Field crosswalk

Unified fieldTypekalshi sourcepolymarket sourceNotes
tickerstringEventData.event_tickerEvent.slugkalshi: Native Kalshi event ticker. polymarket: Polymarket event slug; numeric id lives in numeric_id.
numeric_idstring?omittedEvent.idkalshi: Kalshi has no separate numeric event id. polymarket: Polymarket numeric event id.
titlestringEventData.titleEvent.titlekalshi: Kalshi event title. polymarket: Polymarket event title.
descriptionstring?EventData.sub_titleEvent.descriptionkalshi: Kalshi sub_title carries the disambiguating prose; empty strings become null. polymarket: Polymarket event description.
categorystring?omittedEvent.categorykalshi: Kalshi events have no category; the category lives on the parent Series. polymarket: Polymarket event category.
series_tickerstring?EventData.series_tickersynthetickalshi: Native Kalshi series ticker. polymarket: Read from the embedded series[0].ticker (falls back to series[0].slug).
market_tickersarraysyntheticsynthetickalshi: Read from the nested markets[*].ticker when with_nested_markets=true. polymarket: Read from the embedded markets[*].slug.
statusstring?omittedEvent.closedkalshi: Kalshi has no event-level status; lifecycle is per-market. polymarket: Derived closed/open string from the boolean closed flag.
start_tsstring? (date-time)omittedEvent.startDatekalshi: Kalshi events expose only strike_date, no separate start. polymarket: ISO 8601 string parsed to UTC.
end_tsstring? (date-time)EventData.strike_dateEvent.endDatekalshi: Kalshi strike_date is the resolution time. polymarket: ISO 8601 string parsed to UTC.
last_updated_tsstring? (date-time)EventData.last_updated_tsEvent.updatedAtkalshi: RFC3339 string parsed to UTC. polymarket: ISO 8601 string parsed to UTC.
volumenumber? (double)omittedEvent.volumekalshi: Kalshi does not aggregate volume at the event level. polymarket: Polymarket event lifetime volume in USD.
open_interestnumber? (double)omittedopenInterest (spec gap)kalshi: Kalshi does not aggregate open interest at the event level. polymarket: Spec gap: live event payloads return a flat openInterest, but the gamma OpenAPI types only openInterestAmm.
mutually_exclusiveboolean?EventData.mutually_exclusiveEvent.negRiskkalshi: True when only one child market resolves YES (e.g. races). polymarket: negRisk flag carries the same semantics for pick-one-of-N events.

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.