Kalshi data API

Kalshi Data API

One clean API for Kalshi depth: plain JSON over REST with a single Bearer key for history, and a live WebSocket stream for the present — both emitting the identical snapshot objects, so the code you backtest with reads the live feed unchanged.

The DepthFeed Kalshi data API serves order-book depth and price data as plain JSON over HTTPS. A metered REST API returns market discovery, metadata, and full-depth historical/latest snapshots with one Bearer key; a WebSocket stream pushes the same objects live. No SDK required — it drops into any stack, including function-calling and MCP-style agent tools.

Kalshi data API at a glance

Protocol
JSON over HTTPS — REST + WebSocket
Auth
Bearer / X-API-Key (or ?api_key= on WS)
Discovery
Markets → snapshots → live /v3/stream
Agent-ready
No SDK; MCP / function-calling friendly
Assets
7 — BTC · ETH · SOL · XRP · DOGE · BNB · HYPE
Timestamps
Epoch-ms exchange + receive, per snapshot
Underlying price
Binance spot/futures, joined per snapshot
History
7/30/90-day windows + full archive (Desk)
Delivery
REST API + live WebSocket, identical JSON
Resolution
Every change, or ?interval= 30s–1d downsample

What the API gives you

REST for history, WebSocket for live — one JSON shape

Discover markets, then pull full-depth snapshots for any market over the REST API. The live stream (wss://api.depthfeed.com/v3/stream) pushes the identical snapshot objects as books change, so the loader you write to replay history reads the live feed unchanged — backtest against the archive, then point the same code at the stream and trade.

Built for automation and agents

The API is plain JSON with one Bearer key (or X-API-Key), so it needs no SDK and drops straight into any function-calling or MCP-style tool definition. The WebSocket protocol is three JSON ops (subscribe / unsubscribe / ping), with ?api_key= auth where headers can't be set. Errors use a stable code enum you can branch on (AUTH_INVALID, COIN_NOT_IN_PLAN, RATE_LIMIT_BURST, …).

Metered, paginated, and tunable

Keyset (cursor) pagination and per-plan rate limits keep large pulls predictable, with X-RateLimit-* headers on every response. Choose your resolution: every recorded book change by default, or add ?interval= (30s–1d) to downsample server-side to one book per bucket. Full reference with copy-pasteable examples lives in the docs.

Start pulling kalshi data api

Free Explorer tier, no card. Full bid/ask depth and the underlying price on every snapshot, over a REST API and a live WebSocket stream.

Questions, answered.

No. It's plain JSON over HTTPS with a single Bearer key, so it works from any language with an HTTP client and drops into function-calling or MCP-style agent tools without a wrapper. The live WebSocket uses three simple JSON ops (subscribe / unsubscribe / ping), and ?api_key= auth covers clients that can't set headers.