STAT-API

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

seriesKalshiSeries
Families of related Kalshi binary markets organized around a common theme — all NBA game-winner markets, all NBA spread markets, all NFL totals markets, election markets, weather markets. Tracks series-level metadata and sync state.
Fields (10)
idBigIntkey

Primary Key

series_tickerString

e.g. "KXNBAGAME"

ex: KXNBAGAME
titleString
ex: MVE NFL Pre Pack
categoryString

e.g. "Sports > Basketball > NBA"

ex: Sports > Football > NFLValues:Sports > Football > NFLSports > Basketball > NBASports > Baseball > MLBSports > Golf > PGASports > Hockey > NHL
league_codeStringnullable

e.g. "nba", "nfl", null for non-sport

ex: nflValues:nflnbamlbgolfnhl
contract_typeStringnullable

"gw", "spread", "ou"

ex: gw
frequencyStringnullable

"daily", "weekly"

is_activeBoolean
ex: true
created_atString
updated_atString
Arguments (2)
  • firstIntPage size; clamped to the table's REST default/max limits.
  • afterBigIntKeyset cursor — returns rows with id > after, ordered by id ascending.
eventsKalshiEvents
A real-world event that anchors a set of Kalshi markets — for sports, a specific game or matchup; for politics, an election or vote; for finance, a price level on a target date. E.g., MEM@POR game-winner event has 2 markets (MEM wins, POR wins).
Required filters: one of series_id | league_code | competition_id.
Fields (16)
idBigIntkey

Primary Key

event_tickerString

e.g. "KXNBAGAME-26FEB06MEMPOR"

ex: KXNBAGAME-26FEB12DALLAL
series_idBigIntKalshiSeries
ex: 1
competition_idBigIntnullable

Polymorphic cross-schema ref — {league}.games (team sports) or golf.tournaments (golf), resolved during sync by league_code. Dereference via main.competitions. NULL until linked.

ex: 6005250
titleString
ex: Toronto wins by over 8.5 Points?
categoryString
ex: Sports > Basketball > NBAValues:Sports > Basketball > NBASports > Baseball > MLBSports > Golf > PGA
statusString

"open", "closed", "settled"

ex: closedValues:closedunknown
league_codeStringnullable

Denormalized for filtering

ex: nbaValues:nbamlbgolf
game_dateStringnullable

Game date for sport events

ex: 2026-04-26T04:00:00.000Z
home_teamStringnullable

Tricode: "POR"

ex: SAS
away_teamStringnullable

Tricode: "MEM"

ex: SAS
league_game_idStringnullable

NBA CDN game ID for fallback cross-ref

market_countIntnullable
ex: 11
settled_atStringnullable
created_atString
updated_atString
Relations (2)
markets[KalshiMarkets!]!KalshiMarkets

kalshi.markets rows whose event_id references this row.

competitionCompetitionCompetition

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 of series ⇒ 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.
marketsKalshiMarkets
An individual binary contract on Kalshi — a YES/NO question with a defined resolution date and rule, priced between 0 and 100 cents. Stores latest known state (overwritten on sync).
Required filters: one of event_id | competition_id.
Fields (24)
idBigIntkey

Primary Key

tickerString

e.g. "KXNBAGAME-26FEB06MEMPOR-POR"

ex: KXNBAGAME-26FEB12DALLAL-LAL
event_idBigIntKalshiEvents
ex: 66
series_idBigIntKalshiSeries

Denormalized from event for direct queries

ex: 2
competition_idBigIntnullable

Polymorphic cross-schema ref (denormalized from event) — {league}.games or golf.tournaments, by league_code. Dereference via main.competitions. NULL until linked.

ex: 73851
contract_typeString

"gw", "spread", "ou"

ex: spreadValues:spreadgwou
titleString
ex: Los Angeles C at Houston: Total Points
subtitleStringnullable
lineFloatnullable

Spread 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.

ex: 1.5000
statusString

"initialized", "inactive", "active", "closed", "determined", "disputed", "amended", "finalized"

ex: finalized
resultStringnullable

"yes", "no", "scalar", null if undetermined

ex: noValues:noyesscalar
yes_bidIntnullable

Cents. 1-99 while an order book exists; 0 when there is no resting bid (the common state on settled markets).

ex: 0
yes_askIntnullable

Cents. 1-99 while an order book exists; 100 when there is no resting ask (the common state on settled markets).

ex: 100
last_priceIntnullable

Cents (1-99)

ex: 1
volumeInt

Lifetime volume

ex: 2226
open_interestInt
ex: 0
liquidityInt
ex: 0
open_timeStringnullable
ex: 2026-02-07T02:07:00.000Z
close_timeStringnullable
ex: 2026-02-27T03:00:00.000Z
expiration_timeStringnullable
ex: 2026-02-26T00:30:00.000Z
settled_atStringnullable

Settlement timestamp from Kalshi settlement_ts

ex: 2026-01-20T02:37:00.941Z
created_atString
updated_atString
settlement_valueIntnullable

Settlement payout for YES side in cents (0-100 for binary, 1-99 possible for scalar)

ex: 0
Relations (3)
eventKalshiEventsKalshiEvents

The kalshi.events row referenced by event_id; null when unlinked.

public_trades[KalshiPublicTrades!]!KalshiPublicTrades

kalshi.public_trades rows whose market_id references this row.

candles[KalshiCandles!]!KalshiCandles

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

market_statusesKalshiMarketStatuses
The trading-status period log for each Kalshi market — one row per state change with start/end timestamps, recording when the market was open, closed, settled, etc. Sparse coverage — captured 2025-10 through 2026-02 for ~1,500 markets; not currently updating.
Required filters: one of market_id.
Fields (7)
idBigIntkey

Primary Key

tickerString
ex: KXNBAGAME-25OCT22NOPMEM-NOP
start_tsString
ex: 2025-10-23T03:01:00.000Z
end_tsString
ex: 2025-10-23T03:00:00.000Z
statusString

"open", "closed", "settled", etc.

ex: HALTED_FILLEDValues:HALTED_FILLEDFILLEDDETECTED
detailsJSONnullable
ex: [object Object]
created_atString
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 status periods for a single Kalshi market by numeric id (resolves to ticker via JOIN to kalshi.markets).
candlesKalshiCandles
OHLC candlestick price summaries for Kalshi markets — the open, high, low, and close prices over standard time bins (1 minute, 5 minute, 1 hour, 1 day), with traded volume per bin. Flattened columns (not JSON) for SQL queryability.
Required filters: one of market_id.
Fields (17)
idBigIntkey

Primary Key

market_idBigIntKalshiMarkets
ex: 8
tickerString

Denormalized

ex: KXNBAGAME-26FEB11MEMDEN-DENValues:KXNBAGAME-26FEB11MEMDEN-DENKXNBAGAME-26FEB11OKCPHX-PHX
period_intervalInt

Seconds (1, 60, 3600, 86400)

ex: 1
end_period_tsInt

Unix timestamp of period end

ex: 1770781714
yes_bid_openIntnullable

Cents

ex: 86
yes_bid_highIntnullable
ex: 86
yes_bid_lowIntnullable
ex: 30
yes_bid_closeIntnullable
ex: 86
yes_ask_openIntnullable
ex: 86
yes_ask_highIntnullable
ex: 86
yes_ask_lowIntnullable
ex: 30
yes_ask_closeIntnullable
ex: 86
volumeInt

Period volume

ex: 1
open_interestInt

OI at period end

ex: 0
created_atString
updated_atString
Relations (1)
marketKalshiMarketsKalshiMarkets

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.
public_tradesKalshiPublicTrades
Every executed trade on Kalshi — price, size, side (YES or NO), and timestamp, comprising the public market tape. Represents completed market trades across all users.
Required filters: one of market_id.
Fields (15)
idBigIntkey

Primary Key

trade_idString
ex: befe59d2-106d-6057-517e-eeddd083eba6
tickerString
ex: KXNBATOTAL-26FEB12DALLAL-229
countInt
ex: 1.00
count_fpString
priceFloatnullable
ex: 0.99
yes_priceIntnullable
ex: 99
no_priceIntnullable
ex: 1
yes_price_dollarsStringnullable
ex: 0.9900
no_price_dollarsStringnullable
ex: 0.0100
taker_sideStringnullable

"yes" | "no"

ex: noValues:noyes
created_timeStringnullable
ex: 2026-02-13T05:23:27.794Z
created_atString
updated_atString
market_idBigIntKalshiMarkets
ex: 900
Relations (1)
marketKalshiMarketsKalshiMarkets

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.