Skip to main content

ODDS — Kalshi Trade API v2 market data (api.elections.kalshi.com)

sportsdataverse.odds — 9 endpoints.

kalshi_event​

One event, optionally with its markets nested.

Endpoint URL: GET https://api.elections.kalshi.com/trade-api/v2/events/{event_ticker}

Valid URL: https://api.elections.kalshi.com/trade-api/v2/events/KXNFLGAME-26OCT08TBDAL?with_nested_markets=true

API ParameterPythonPatternRequiredNullableDescription
event_tickerevent_tickerYEvent ticker, e.g. KXNFLGAME-26OCT08TBDAL (from /events).
with_nested_marketswith_nested_marketsYtrue nests the event's markets under event.markets.

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
categorycharacter
collateral_return_typecharacter
event_tickercharacter
exchange_indexinteger
last_updated_tscharacter
marketscharacter
mutually_exclusivelogical
series_tickercharacter
settlement_sourcescharacter
strike_periodcharacter
sub_titlecharacter
titlecharacter
product_metadata_competitioncharacter
product_metadata_competition_scopecharacter

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

kalshi_event(event_ticker='KXNFLGAME-26OCT08TBDAL', with_nested_markets='true')

Last validated n/a.

kalshi_events​

Events, filterable by series and status; cursor-paged.

Endpoint URL: GET https://api.elections.kalshi.com/trade-api/v2/events

Valid URL: https://api.elections.kalshi.com/trade-api/v2/events?limit=3&status=open&series_ticker=KXNFLGAME

API ParameterPythonPatternRequiredNullableDescription
limitlimitYRows per page (max 1000 on /markets, 200 on /events; default 100).
statusstatusYLifecycle filter: open, closed, settled (events also accept unopened).
series_tickerseries_tickerYSeries ticker, e.g. KXNFLGAME (from /series).
cursorcursorYOpaque page cursor returned in the previous page's cursor field (verified 2026-10-06).

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
categorycharacter
collateral_return_typecharacter
event_tickercharacter
exchange_indexinteger
last_updated_tscharacter
mutually_exclusivelogical
series_tickercharacter
settlement_sourcescharacter
strike_periodcharacter
sub_titlecharacter
titlecharacter
product_metadata_competitioncharacter
product_metadata_competition_scopecharacter

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

kalshi_events(limit='3', series_ticker='KXNFLGAME', status='open')

Last validated n/a.

kalshi_exchange_status​

Exchange and trading status.

Endpoint URL: GET https://api.elections.kalshi.com/trade-api/v2/exchange/status

Valid URL: https://api.elections.kalshi.com/trade-api/v2/exchange/status

API ParameterPythonPatternRequiredNullableDescription

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
exchange_activelogical
exchange_index_statusescharacter
intra_exchange_transfers_activelogical
trading_activelogical

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

kalshi_exchange_status()

Last validated n/a.

kalshi_market​

One market.

Endpoint URL: GET https://api.elections.kalshi.com/trade-api/v2/markets/{ticker}

Valid URL: https://api.elections.kalshi.com/trade-api/v2/markets/KXNFLGAME-26OCT08TBDAL-DAL

API ParameterPythonPatternRequiredNullableDescription
tickertickerYMarket ticker, e.g. KXNFLGAME-26OCT08TBDAL-DAL (from /markets).

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
can_close_earlylogical
close_timecharacter
created_timecharacter
early_close_conditioncharacter
event_tickercharacter
exchange_indexinteger
expected_expiration_timecharacter
expiration_timecharacter
expiration_valuecharacter
last_price_dollarscharacter
latest_expiration_timecharacter
market_typecharacter
no_ask_dollarscharacter
no_bid_dollarscharacter
no_sub_titlecharacter
notional_value_dollarscharacter
occurrence_datetimecharacter
open_interest_fpcharacter
open_timecharacter
previous_price_dollarscharacter
previous_yes_ask_dollarscharacter
previous_yes_bid_dollarscharacter
price_level_structurecharacter
price_rangescharacter
resultcharacter
rules_primarycharacter
rules_secondarycharacter
settlement_bounds_typecharacter
settlement_timer_secondsinteger
statuscharacter
strike_typecharacter
tickercharacter
titlecharacter
updated_timecharacter
volume_24h_fpcharacter
volume_fpcharacter
yes_ask_dollarscharacter
yes_ask_size_fpcharacter
yes_bid_dollarscharacter
yes_bid_size_fpcharacter
yes_sub_titlecharacter
custom_strike_football_teamcharacter

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

kalshi_market(ticker='KXNFLGAME-26OCT08TBDAL-DAL')

Last validated n/a.

kalshi_markets​

Markets, filterable by event/series/status; cursor-paged.

Endpoint URL: GET https://api.elections.kalshi.com/trade-api/v2/markets

Valid URL: https://api.elections.kalshi.com/trade-api/v2/markets?limit=3&event_ticker=KXNFLGAME-26OCT08TBDAL

API ParameterPythonPatternRequiredNullableDescription
limitlimitYRows per page (max 1000 on /markets, 200 on /events; default 100).
event_tickerevent_tickerYEvent ticker, e.g. KXNFLGAME-26OCT08TBDAL (from /events).
cursorcursorYOpaque page cursor returned in the previous page's cursor field (verified 2026-10-06).

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
can_close_earlylogical
close_timecharacter
created_timecharacter
early_close_conditioncharacter
event_tickercharacter
exchange_indexinteger
expected_expiration_timecharacter
expiration_timecharacter
expiration_valuecharacter
last_price_dollarscharacter
latest_expiration_timecharacter
market_typecharacter
no_ask_dollarscharacter
no_bid_dollarscharacter
no_sub_titlecharacter
notional_value_dollarscharacter
occurrence_datetimecharacter
open_interest_fpcharacter
open_timecharacter
previous_price_dollarscharacter
previous_yes_ask_dollarscharacter
previous_yes_bid_dollarscharacter
price_level_structurecharacter
price_rangescharacter
resultcharacter
rules_primarycharacter
rules_secondarycharacter
settlement_bounds_typecharacter
settlement_timer_secondsinteger
statuscharacter
strike_typecharacter
tickercharacter
titlecharacter
updated_timecharacter
volume_24h_fpcharacter
volume_fpcharacter
yes_ask_dollarscharacter
yes_ask_size_fpcharacter
yes_bid_dollarscharacter
yes_bid_size_fpcharacter
yes_sub_titlecharacter
custom_strike_football_teamcharacter

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

kalshi_markets(event_ticker='KXNFLGAME-26OCT08TBDAL', limit='3')

Last validated n/a.

kalshi_orderbook​

Order book of a market (fixed-point dollar levels).

Endpoint URL: GET https://api.elections.kalshi.com/trade-api/v2/markets/{ticker}/orderbook

Valid URL: https://api.elections.kalshi.com/trade-api/v2/markets/KXNFLGAME-26OCT08TBDAL-DAL/orderbook?depth=3

API ParameterPythonPatternRequiredNullableDescription
tickertickerYMarket ticker, e.g. KXNFLGAME-26OCT08TBDAL-DAL (from /markets).
depthdepthYPrice levels per side (omit for the full book).

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
sidecharacter
pricecharacter
sizecharacter

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

kalshi_orderbook(depth='3', ticker='KXNFLGAME-26OCT08TBDAL-DAL')

Last validated n/a.

kalshi_series​

One series.

Endpoint URL: GET https://api.elections.kalshi.com/trade-api/v2/series/{series_ticker}

Valid URL: https://api.elections.kalshi.com/trade-api/v2/series/KXNFLGAME

API ParameterPythonPatternRequiredNullableDescription
series_tickerseries_tickerYSeries ticker, e.g. KXNFLGAME (from /series).

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
additional_prohibitionscharacter
categoriescharacter
categorycharacter
contract_terms_urlcharacter
contract_urlcharacter
exchange_indexinteger
fee_multiplierinteger
fee_typecharacter
frequencycharacter
last_updated_tscharacter
settlement_sourcescharacter
tagscharacter
tickercharacter
titlecharacter
product_metadata_scopecharacter

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

kalshi_series(series_ticker='KXNFLGAME')

Last validated n/a.

kalshi_series_list​

Series (market families) in a category; the whole category in one body.

Endpoint URL: GET https://api.elections.kalshi.com/trade-api/v2/series

Valid URL: https://api.elections.kalshi.com/trade-api/v2/series?category=Sports

API ParameterPythonPatternRequiredNullableDescription
categorycategoryYSeries category, e.g. Sports.

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
additional_prohibitionscharacter
categoriescharacter
categorycharacter
contract_terms_urlcharacter
contract_urlcharacter
exchange_indexinteger
fee_multiplierinteger
fee_typecharacter
frequencycharacter
last_updated_tscharacter
settlement_sourcescharacter
tagscharacter
tickercharacter
titlecharacter

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

kalshi_series_list(category='Sports')

Last validated n/a.

kalshi_trades​

Public trades, filterable by market; cursor-paged.

Endpoint URL: GET https://api.elections.kalshi.com/trade-api/v2/markets/trades

Valid URL: https://api.elections.kalshi.com/trade-api/v2/markets/trades?limit=3&ticker=KXNFLGAME-26OCT08TBDAL-DAL

API ParameterPythonPatternRequiredNullableDescription
limitlimitYRows per page (max 1000 on /markets, 200 on /events; default 100).
tickertickerYMarket ticker, e.g. KXNFLGAME-26OCT08TBDAL-DAL (from /markets).
cursorcursorYOpaque page cursor returned in the previous page's cursor field (verified 2026-10-06).

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
count_fpcharacter
created_timecharacter
is_block_tradelogical
no_price_dollarscharacter
taker_book_sidecharacter
taker_outcome_sidecharacter
taker_sidecharacter
tickercharacter
trade_idcharacter
yes_price_dollarscharacter

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

kalshi_trades(limit='3', ticker='KXNFLGAME-26OCT08TBDAL-DAL')

Last validated n/a.