Kalshi GraphQL Reference
Kalshi's prediction-market exchange — binary YES/NO contracts on NBA games (winner, spread, and total markets) from the 2025-26 season onward, with event-driven price candles, the public trade tape, and on-exchange settlement results.
Every GraphQL type, relation, argument, and field — generated from the served schema, so it can never disagree with the API. Each column is documented inline; relations and foreign keys link straight to the type they resolve to. Root fields take the same filters as REST; requests are metered by rows resolved, nested lists included.
Main
KalshiSeriesFields (10)
idBigIntkeyPrimary Key
series_tickerStringe.g. "KXNBAGAME"
KXNBAGAMEtitleStringMVE NFL Pre PackcategoryStringe.g. "Sports > Basketball > NBA"
Sports > Football > NFLValues:Sports > Football > NFLSports > Basketball > NBASports > Baseball > MLBSports > Golf > PGASports > Hockey > NHLleague_codeStringnullablee.g. "nba", "nfl", null for non-sport
nflValues:nflnbamlbgolfnhlcontract_typeStringnullable"gw", "spread", "ou"
gwfrequencyStringnullable"daily", "weekly"
is_activeBooleantruecreated_atStringupdated_atStringArguments (2)
firstIntPage size; clamped to the table's REST default/max limits.afterBigIntKeyset cursor — returns rows with id > after, ordered by id ascending.
KalshiEventsseries_id | league_code | competition_id.Fields (16)
idBigIntkeyPrimary Key
event_tickerStringe.g. "KXNBAGAME-26FEB06MEMPOR"
KXNBAGAME-26FEB12DALLAL1competition_idBigIntnullablePolymorphic cross-schema ref — {league}.games (team sports) or golf.tournaments (golf), resolved during sync by league_code. Dereference via main.competitions. NULL until linked.
6005250titleStringToronto wins by over 8.5 Points?categoryStringSports > Basketball > NBAValues:Sports > Basketball > NBASports > Baseball > MLBSports > Golf > PGAstatusString"open", "closed", "settled"
closedValues:closedunknownleague_codeStringnullableDenormalized for filtering
nbaValues:nbamlbgolfgame_dateStringnullableGame date for sport events
2026-04-26T04:00:00.000Zhome_teamStringnullableTricode: "POR"
SASaway_teamStringnullableTricode: "MEM"
SASleague_game_idStringnullableNBA CDN game ID for fallback cross-ref
market_countIntnullable11settled_atStringnullablecreated_atStringupdated_atStringRelations (2)
kalshi.markets rows whose event_id references this row.
The sporting event this row prices, resolved through the cross-sport competition registry via (league_code, competition_id); null when the row is not linked to a game or tournament.
Arguments (5)
firstIntPage size; clamped to the table's REST default/max limits.afterBigIntKeyset cursor — returns rows with id > after, ordered by id ascending.series_idIntFilter to events within a single Kalshi series (e.g., one row ofseries⇒ all KXNBAGAME events).competition_idIntFilter to events linked to a specific competition (cross-schema game or golf tournament; resolved during sync via league_code).league_codeStringFilter to all events for a league (e.g. league_code=nba) — the league-level entry point, mirroring polymarket.events.
KalshiMarketsevent_id | competition_id.Fields (24)
idBigIntkeyPrimary Key
tickerStringe.g. "KXNBAGAME-26FEB06MEMPOR-POR"
KXNBAGAME-26FEB12DALLAL-LAL66competition_idBigIntnullablePolymorphic cross-schema ref (denormalized from event) — {league}.games or golf.tournaments, by league_code. Dereference via main.competitions. NULL until linked.
73851contract_typeString"gw", "spread", "ou"
spreadValues:spreadgwoutitleStringLos Angeles C at Houston: Total PointssubtitleStringnullablelineFloatnullableSpread line for spread markets (e.g., -3.5). UNRELIABLE for ou (totals) markets — mostly null, and populated values hold the playoff series game number, not the total; parse the numeric ticker suffix (e.g. …-238 ⇒ 238) for the O/U line.
1.5000statusString"initialized", "inactive", "active", "closed", "determined", "disputed", "amended", "finalized"
finalizedresultStringnullable"yes", "no", "scalar", null if undetermined
noValues:noyesscalaryes_bidIntnullableCents. 1-99 while an order book exists; 0 when there is no resting bid (the common state on settled markets).
0yes_askIntnullableCents. 1-99 while an order book exists; 100 when there is no resting ask (the common state on settled markets).
100last_priceIntnullableCents (1-99)
1volumeIntLifetime volume
2226open_interestInt0liquidityInt0open_timeStringnullable2026-02-07T02:07:00.000Zclose_timeStringnullable2026-02-27T03:00:00.000Zexpiration_timeStringnullable2026-02-26T00:30:00.000Zsettled_atStringnullableSettlement timestamp from Kalshi settlement_ts
2026-01-20T02:37:00.941Zcreated_atStringupdated_atStringsettlement_valueIntnullableSettlement payout for YES side in cents (0-100 for binary, 1-99 possible for scalar)
0Relations (3)
The kalshi.events row referenced by event_id; null when unlinked.
kalshi.public_trades rows whose market_id references this row.
kalshi.candles rows whose market_id references this row.
Arguments (5)
firstIntPage size; clamped to the table's REST default/max limits.afterBigIntKeyset cursor — returns rows with id > after, ordered by id ascending.event_idIntFilter to all markets that belong to a single event (e.g., MEM@POR game-winner event ⇒ two markets, MEM wins and POR wins).series_idIntFilter to all markets in a single series (denormalized for direct queries).competition_idIntFilter to markets linked to a specific competition — all of its markets in one call.
Markets
KalshiMarketStatusesmarket_id.Fields (7)
idBigIntkeyPrimary Key
tickerStringKXNBAGAME-25OCT22NOPMEM-NOPstart_tsString2025-10-23T03:01:00.000Zend_tsString2025-10-23T03:00:00.000ZstatusString"open", "closed", "settled", etc.
HALTED_FILLEDValues:HALTED_FILLEDFILLEDDETECTEDdetailsJSONnullable[object Object]created_atStringArguments (3)
firstIntPage size; clamped to the table's REST default/max limits.afterBigIntKeyset cursor — returns rows with id > after, ordered by id ascending.market_idIntFilter to status periods for a single Kalshi market by numeric id (resolves to ticker via JOIN to kalshi.markets).
KalshiCandlesmarket_id.Fields (17)
idBigIntkeyPrimary Key
8tickerStringDenormalized
KXNBAGAME-26FEB11MEMDEN-DENValues:KXNBAGAME-26FEB11MEMDEN-DENKXNBAGAME-26FEB11OKCPHX-PHXperiod_intervalIntSeconds (1, 60, 3600, 86400)
1end_period_tsIntUnix timestamp of period end
1770781714yes_bid_openIntnullableCents
86yes_bid_highIntnullable86yes_bid_lowIntnullable30yes_bid_closeIntnullable86yes_ask_openIntnullable86yes_ask_highIntnullable86yes_ask_lowIntnullable30yes_ask_closeIntnullable86volumeIntPeriod volume
1open_interestIntOI at period end
0created_atStringupdated_atStringRelations (1)
The kalshi.markets row referenced by market_id; null when unlinked.
Arguments (4)
firstIntPage size; clamped to the table's REST default/max limits.afterBigIntKeyset cursor — returns rows with id > after, ordered by id ascending.market_idIntFilter to candles for a single Kalshi market.period_intervalIntBin width in seconds. Currently every row is period_interval=1 (event-driven captures at up-to-1s resolution, irregular spacing) — resample client-side for fixed OHLC bins.
KalshiPublicTradesmarket_id.Fields (15)
idBigIntkeyPrimary Key
trade_idStringbefe59d2-106d-6057-517e-eeddd083eba6tickerStringKXNBATOTAL-26FEB12DALLAL-229countInt1.00count_fpStringpriceFloatnullable0.99yes_priceIntnullable99no_priceIntnullable1yes_price_dollarsStringnullable0.9900no_price_dollarsStringnullable0.0100taker_sideStringnullable"yes" | "no"
noValues:noyescreated_timeStringnullable2026-02-13T05:23:27.794Zcreated_atStringupdated_atString900Relations (1)
The kalshi.markets row referenced by market_id; null when unlinked.
Arguments (3)
firstIntPage size; clamped to the table's REST default/max limits.afterBigIntKeyset cursor — returns rows with id > after, ordered by id ascending.market_idIntFilter to trades on a single Kalshi market.