Kalshi Python SDK (sync and async)
Kalshi's current official Python client - weekly releases, Python 3.13 only, no source.
by Kalshi
Last updated
What it is
Kalshi's current official Python client, and the reason the older kalshi-python
card is a dead end. It ships as two packages built from the same specification -
kalshi_python_sync and kalshi_python_async - and Kalshi's SDK documentation names both, adds a
TypeScript sibling on npm (kalshi-typescript), and says in as many words that the old
kalshi-python package is deprecated.
It is generated code, and it does not pretend otherwise: the README inside the wheel is the
OpenAPI Generator's template, naming generator version 7.17.0 and API version 3.30.0. The package
metadata carries Kalshi's support address as the author email, which is the strongest evidence
available that this is the exchange's own publication - the homepage it lists,
github.com/Kalshi/exchange-infra, is not readable by the public.
Inside are seventeen API modules covering what the exchange does: markets, events, orders, order
groups, portfolio, account, exchange status, historical data, live data, multivariate contracts,
milestones, structured targets, search, communications, incentive programs, API keys and FCM. Six
runtime dependencies - urllib3, python-dateutil, pydantic, typing-extensions,
lazy-imports and cryptography, the last of which does the request signing.
Release cadence is the best thing about it. Thirty-one versions since 3.0.0 on 2025-12-02, the latest 3.30.0 on 2026-09-15, and Kalshi's documentation says releases track the OpenAPI specification and generally go out on a Tuesday or Wednesday, ahead of the corresponding API change. Compare that with the package it replaced, which has not shipped since September 2025.
Availability
The library imposes nothing and installs anywhere pip works - subject to Python 3.13.
The credential does the gating. Authentication is an API key id plus an RSA private key, with RSA-PSS request signing, and the key comes from a funded Kalshi account. Who may open one is a question about the exchange, answered on kalshi; the flags on this card describe the package, which grants no access and blocks none.
Pricing
Free to install, and the exchange does not charge for API access. The licence is not free in the
other sense: the published metadata says LicenseRef-Proprietary, so this is a package you may
install and use, not one you may fork, vendor or relicense. If you need code you own, Kalshi's own
documentation tells you to generate your own client from its specifications.
What a fill costs is Kalshi's fee schedule, which lives on the venue's card.
Markets & resolution
A client resolves nothing. Orders placed through it rest on Kalshi's order book and settle in dollars against the exchange's determination, and the questions reachable through it are whatever Kalshi lists. Prices are in cents over the wire - the generated examples divide balances by 100 - which is the one data-model detail that bites first.
Integrations
REST only. There is no WebSocket client in either package, no CLI and no MCP server; anything
live has to be written against Kalshi's separate streaming specification by hand. The TypeScript
package kalshi-typescript is the same generated family in another language, published by the
same account and at the same version, and its npm metadata carries an OpenAPI Generator default
licence rather than a considered one.
For a Python client that does stream, and that you may read, pykalshi is the third-party answer.
Limitations
Python 3.13 or nothing. The requirement is in the package metadata, and it rules out most production images in use today. Nothing on the package page explains why a generated REST client needs the newest interpreter.
No WebSocket. The whole streaming half of the Kalshi API is outside these packages.
No public source repository. The link in the metadata 404s, and the licence is proprietary, so the answer to "what does this do with my key" comes from reading the installed wheel rather than a repository, a changelog or an issue tracker. There is no issue tracker.
Kalshi says it may lag. Its documentation tells active traders to treat the REST OpenAPI and WebSocket AsyncAPI specifications as the source of truth and, for production, to generate their own client or integrate directly. That is unusually honest, and it is also a recommendation not to depend on this package.
Generated ergonomics. Model names track the specification, not the way a trader thinks; there are no domain objects, no local order book, no dataframe helpers and no retry policy of its own.
The documentation host was not reachable from here. The deprecation notice, the RSA-PSS detail and the release cadence above were read in the Internet Archive's capture of Kalshi's SDK overview page dated 2026-07-09, because the live host refused every automated request we made on 2026-09-19. The package facts - versions, dates, dependencies, module list, licence field, Python floor - come from PyPI and from the wheel itself, both read on 2026-09-19.
Alternatives
pykalshi is the maintained third-party client: MIT, WebSocket streaming, a local order book, pandas output, Python 3.9 and up.
ccxt and pmxt reach Kalshi among several venues, if one integration across exchanges matters more than exchange-shaped errors.
kalshi-python is the deprecated package this one replaces, and kalshi-api is the API underneath all of them, which you can call with plain HTTP if a generated client is not worth 3.13.
Specs
- Interfaces
- API, Python
- Export
- JSON
- Available in
- Global
- KYC required
- No
- Market subjects
- —
- Resolved by
- Resolves nothing
- Maker fee
- None
- Platforms
- Library
- AI features
- None
- Capabilities
- Order book, Automation, Live trading, Portfolio tracking
- Pricing verified
- Availability verified
- Capabilities verified
Also from Kalshi
Background
How this part of the sector works, rather than which product to pick.
- What running a bot does not solve — A bot fixes speed and consistency. Rate limits, a missing rehearsal, a field that stops arriving, a partial fill and a paused market are not coding problems.
- Where your key lives when software trades for you — Four different credentials are all called a key, and they differ in what a copy permits. What the clients in this catalogue ask for, and what to ask them back.
Also worth comparing
- Polymarket US Python SDK — Official SDK for Polymarket US - installs as polymarket-us, unreleased since January.
- Polymarket US TypeScript SDK — Official TypeScript client for Polymarket US - npm has shipped nothing since January.
- pykalshi — Unofficial Kalshi client with what the generated SDK leaves out - streams and retries.
- CCXT — One client for seven prediction venues, inside a 104-exchange crypto library.
- limitless-sdk — Limitless Exchange's own async Python SDK - CLOB and NegRisk orders, WebSocket, MIT.
- PMXT — CCXT-shaped client for prediction markets, with a hosted API and a self-hosted mode.
FAQ
Which Kalshi Python package should I install?
kalshi_python_sync or kalshi_python_async. Kalshi's SDK documentation marks the older kalshi-python package as deprecated. Both current packages were at 3.30.0 on 2026-09-15; the older one stopped at 2.1.4 on 2025-09-06.
Why does it refuse to install?
Most often the Python version. The published metadata requires Python 3.13 or newer - not 3.12 - which is stricter than almost anything else in this category and stricter than the deprecated package it replaces, which accepted 3.9.
Can I stream order book updates with it?
No. These packages are generated from the REST specification and ship no WebSocket client; the seventeen API modules inside are all HTTP. Kalshi documents its streaming API through a separate AsyncAPI specification, and you write that client yourself or use a third-party one.
Is the source public?
Not as far as we can see. The package metadata points at github.com/Kalshi/exchange-infra, which returns 404 to an unauthenticated request, and the licence field reads LicenseRef-Proprietary. What you can read is the generated Python inside the wheel.