market_id | VARCHAR | Unique market identifier, one binary contract (e.g. KXBTCD-26APR04-T99499.99). Kalshi calls this the ticker |
event_id | VARCHAR | Parent event: the group of markets resolving off the same underlying occurrence. Kalshi calls this the event ticker |
market_type | VARCHAR | Market type (e.g. binary) |
title | VARCHAR | Market question text |
subtitle | VARCHAR | Market subtitle |
yes_sub_title | VARCHAR | Label for the Yes outcome. For threshold and range markets it reflects the strike |
no_sub_title | VARCHAR | Label for the No outcome |
created_time | TIMESTAMP | When the market was created |
updated_time | TIMESTAMP | When the market was last updated upstream |
open_time | TIMESTAMP | When trading opened |
close_time | TIMESTAMP | When trading closes. Reflects later changes to the close date, so it can be well past the originally scheduled time |
latest_expiration_time | TIMESTAMP | Latest possible expiration time |
expected_expiration_time | TIMESTAMP | When the outcome is expected to be known. The scheduled boundary to use for markets that have not settled yet; usually much closer to actual settlement than latest_expiration_time |
settlement_ts | TIMESTAMP | When the market settled, falling back to its determination time. NULL until the market resolves |
determination_ts | TIMESTAMP | When the outcome was determined. Precedes settlement and is populated whenever result is |
status | VARCHAR | Lifecycle state, in order of precedence: finalized (settled), determined (outcome known), inactive (deactivated), closed (past close time), active (open for trading), initialized (not yet open) |
result | VARCHAR | Settlement outcome: yes, no, void (refund) or scalar (fractional payout). NULL until the market is determined. Binary results are reconciled to settlement_value_usd |
settlement_value_usd | DOUBLE | Payout per contract at settlement, in USD. Authoritative: a yes/no result that contradicts it is corrected to match |
expiration_value | VARCHAR | Expiration outcome value |
can_close_early | BOOLEAN | Whether the market can close before expiration |
early_close_condition | VARCHAR | Condition that triggers early close |
notional_value_dollars | DOUBLE | Notional value of one contract in USD |
strike_type | VARCHAR | Strike structure: custom, greater, greater_or_equal, less, less_or_equal, between or structured |
floor_strike | DOUBLE | Lower bound for range and threshold markets |
cap_strike | DOUBLE | Upper bound for range markets |
custom_strike | VARCHAR | JSON blob with structured strike metadata (e.g. competitor ID, team ID) |
fractional_trading_enabled | BOOLEAN | Whether fractional contract trading is enabled |
rules_primary | VARCHAR | Primary resolution rules text |
rules_secondary | VARCHAR | Secondary resolution rules text, covering edge cases and settlement sources |
settlement_timer_seconds | INTEGER | Delay between determination and settlement, in seconds |
is_provisional | BOOLEAN | Whether the market is provisional and may be withdrawn before opening |
primary_participant_key | VARCHAR | Identifier of the market’s primary participant (team, candidate or entity). Populated for only some markets |
price_ranges | VARCHAR | JSON array describing the tradeable price grid (start, end, step) |
mve_collection_id | VARCHAR | Multivariate event (MVE) collection grouping related events under one umbrella. NULL for non-MVE markets |
legs | VARCHAR | JSON array of the parlay’s legs, each with its event ticker, market ticker and required side. NULL for single markets |
leg_count | BIGINT | Number of legs in the parlay. NULL for single markets |
is_parlay | BOOLEAN | Whether this market is a multi-leg parlay. See legs and leg_count |
series_id | VARCHAR | Recurring series the event belongs to; carries the category, tags, fee terms and cadence. Kalshi calls this the series ticker. Inferred from event_id when Kalshi published no event metadata |
event_title | VARCHAR | Parent event title |
event_sub_title | VARCHAR | Parent event subtitle |
collateral_return_type | VARCHAR | How collateral is returned |
mutually_exclusive | BOOLEAN | Whether event outcomes are mutually exclusive |
available_on_brokers | BOOLEAN | Whether available via broker integrations |
product_metadata | VARCHAR | JSON blob with additional product metadata |
category | VARCHAR | Unified category shared across prediction market venues: sports, crypto, politics, finance, technology, culture, weather, world, health, other, or mixed for a parlay whose legs span several categories. A parlay takes its category from its legs rather than from its own series |
category_native | VARCHAR | Kalshi’s own coarse category, taken from the series and falling back to the event |
competition | VARCHAR | Competition name from product_metadata, such as a sports league or a crypto asset |
strike_date | TIMESTAMP | Strike/resolution date from event metadata |
strike_period | VARCHAR | Strike period description from event metadata |
series_title | VARCHAR | Human-readable series name |
series_tags | ARRAY(VARCHAR) | Series topic tags. Finer-grained than category_native and the main input to category |
settlement_sources | VARCHAR | JSON array of the series’ settlement sources, each with a name and URL |
contract_terms_url | VARCHAR | Link to the series’ contract terms document |
frequency | VARCHAR | Series recurrence cadence: custom, one_off, annual, monthly, weekly, daily, hourly or fifteen_min |
fee_type | VARCHAR | Series fee model: quadratic (taker fees only), quadratic_with_maker_fees or quadratic_with_combo_maker_fees |
fee_multiplier | DOUBLE | Series fee scalar applied on top of Kalshi’s standard fee coefficients (1.0 = standard rate). Used in fee_usd and maker_fee_usd on kalshi.market_trades |
source_updated_at | TIMESTAMP | When the market’s data last changed at Kalshi, across the market itself, its event, its series, its lifecycle events and its pricing snapshot |
_updated_at | TIMESTAMP | When this row was last written by the pipeline |