Skip to content

Concepts

Short glossary of the Kalshi domain objects you'll hit. Each link goes to the resource page that operates on them.

Series, event, market

The three-level ticker hierarchy:

  • Series — a recurring family (e.g. KXPRES covers presidential elections). Series tickers look like KXPRES. See Series.
  • Event — one instance of a series (e.g. KXPRES-24, the 2024 election). See Events.
  • Market — a single YES/NO contract under an event (e.g. KXPRES-24-DJT, "will Trump win"). See Markets.

Every market belongs to exactly one event; every event belongs to exactly one series.

YES, NO, side, action

A Kalshi market trades two complementary contracts that always sum to $1: YES and NO. Each trade has a side (which contract) and an action:

  • side="yes", action="buy" — buying YES.
  • side="yes", action="sell" — selling YES.
  • side="no", action="buy" — buying NO (equivalent to selling YES against the orderbook, but accounted separately).

These are Literal types — see Types & literals.

Prices

Prices live in [0.00, 1.00] and represent dollars (a YES at $0.65 implies a 65% market-implied probability). Always pass them as strings or Decimal:

order = client.orders.create(..., yes_price="0.65")
order = client.orders.create(..., yes_price=Decimal("0.65"))

Float is a footgun; the SDK accepts it but normalizes through str() to avoid 0.65 → 0.6499999…. See DollarDecimal.

The Kalshi API returns prices as JSON strings with a _dollars suffix (yes_bid_dollars: "0.5600"). The SDK maps these to short field names (yes_bid: Decimal("0.5600")). Both directions round-trip.

Cents vs dollars

A few fields are integer cents, not dollars:

  • Balance.balance / portfolio_value — cents.
  • CreateOrderRequest.buy_max_cost — cents.
  • ApplySubaccountTransferRequest.amount_cents — cents.

These are typed int. Passing a Decimal or float raises ValueError at construction. The rule: anything with _cents / buy_max_cost is cents; anything with _dollars or yes_price / no_price is Decimal dollars.

Order, fill, position, settlement

  • Order — your intent. Has a status (resting, canceled, executed).
  • Fill — an actual execution against an order. One order can produce many fills.
  • Position — your aggregate exposure on a market (signed by side).
  • Settlement — what the exchange paid out when the market resolved.

Orders come in two families:

  • V1/portfolio/orders/*. Yes/no sides, paired yes_price / no_price. Stable surface; deprecation no earlier than May 6, 2026.
  • V2/portfolio/events/orders/*. Event-scoped, single-book bid / ask sides, single price field, required client_order_id acting as an idempotency key. Use this for new event-market integrations.

See Orders, Portfolio.

RFQ and Quote

RFQ ("Request For Quote") — a private "Can someone make me a market on this contract at this size?" message. Quote — a counterparty's answer ("I'll sell you YES at $0.62 / buy from you at $0.60"). The requester picks a side and accepts; the maker confirms.

This is Kalshi's bilateral block-trade rail, alongside the public order book. See Communications.

Multivariate event collection

A template for combo bets: "Will it rain in NYC AND the Yankees win Saturday?" The collection holds the building-block markets; calling create_market with a list of leg selections mints a derived YES/NO contract.

See Multivariate.

Milestone

A real-world reference event a market is anchored to — a baseball game, an economic release, an election. Live data (scores, clocks, weather) is keyed by milestone id.

See Milestones, Live data.

Structured target

The entity a market is "about" — a team, player, candidate, company. Two markets pointing at the same Yankees roster share a structured target id, so you can group markets by underlying entity.

See Structured targets.

Incentive program

Time-boxed reward campaigns (maker rebates, volume bonuses) on specific markets or series.

See Incentive programs.

Subaccount

A logical wallet partition under your main account. Used to isolate strategies or risk pools. Subaccount 0 is your primary account; 132 are numbered extras. Most resource methods accept a subaccount= kwarg to route the call.

See Subaccounts.

Order group

A rolling contracts-limit bucket that several orders can share. Trips when the group hits its cap; can be reset() or trigger()ed manually.

See Order groups.

FCM

Futures Commission Merchant. Kalshi-side broker designation. FCM members get a separate /fcm/* surface that takes a subtrader_id discriminator and returns the same shapes as portfolio.*. Non-FCM accounts get 401/403.

See FCM.

API key, scope

Authentication identity. Has read and write scopes; write requires read. Can be created via the web UI or via client.api_keys.generate() / client.api_keys.create().

See API keys.