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.
KXPREScovers presidential elections). Series tickers look likeKXPRES. 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, pairedyes_price/no_price. Stable surface; deprecation no earlier than May 6, 2026. - V2 —
/portfolio/events/orders/*. Event-scoped, single-bookbid/asksides, singlepricefield, requiredclient_order_idacting as an idempotency key. Use this for new event-market integrations.
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; 1–32 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.