↑ ↓ move · Enter open · Esc close

REST API / Kalshi / Markets

Markets (Kalshi)

Browse Kalshi markets with prices, status, volume, and contract details. Discover new symbols and reconcile changes with paginated timestamp windows. Combination markets are optional.

GET/v2/kalshi/markets

Parameters

min_created_tsinteger

Markets created after this Unix second. Pair with max_created_ts to freeze a discovery window. Supports open, unopened, or omitted status. Use one timestamp family per request; cannot combine with created_since. Persist the window end only after all pages succeed.

max_created_tsinteger

Upper creation-time bound in Unix seconds. Keep fixed while paging with cursor. Use one timestamp family per request; cannot combine with created_since. Persist the window end only after all pages succeed.

min_updated_tsinteger

Markets with non-trading metadata updated after this Unix second. Does not track price changes. Omit status, event_ticker and tickers; combos must remain excluded. Use one timestamp family per request; cannot combine with created_since. Persist the window end only after all pages succeed.

max_updated_tsinteger

Upper metadata-update bound in Unix seconds. Keep fixed while paging with cursor. Use one timestamp family per request; cannot combine with created_since. Persist the window end only after all pages succeed.

min_settled_tsinteger

Markets settled after this Unix second. Supports settled or omitted status. Older archived settlements require individual market lookups. Use one timestamp family per request; cannot combine with created_since. Persist the window end only after all pages succeed.

max_settled_tsinteger

Upper settlement-time bound in Unix seconds. Keep fixed while paging with cursor. Use one timestamp family per request; cannot combine with created_since. Persist the window end only after all pages succeed.

statusstring

Filter by status. A single value, one of: unopened, open, closed, settled (comma-separated lists are rejected with a 400). Omit for all. Note the returned market objects use Kalshi's own status vocabulary: markets matching status=open carry status "active" in the response.

created_sincestring

Delta mode: return only markets we first observed after this instant (Unix seconds or ISO 8601), ordered oldest first. Page with cursor until it is null, then pass _meta.watermark back as the next created_since to poll for newly listed markets without re-crawling the catalog. Combines with status, category, and limit; tickers, event_ticker, series_ticker, min_close_ts, and max_close_ts are not valid alongside it. Each page examines at most limit newly observed markets, so a page filtered by status or category can hold fewer markets than limit, or none, while cursor is non-null: keep paging until cursor is null. When status excludes finished markets (for example status=open), markets we already know are past their close time are skipped without a live read. The window is resolved from when our own capture first observed each market, using Prediction.com observation time rather than Kalshi creation time. Two consequences worth coding for. First, the value this filters and pages on is an internal, immutable record time, not the first_seen_at we report; those are deliberately different, and a market whose first_seen_at predates your created_since can legitimately appear in the window (it happens when a source that saw the market earlier reports it late). Treat first_seen_at as information, not as a bound to re-check, and do not discard such a market as out-of-window. Second, short-lived markets need a poll cadence at least as fast as the shortest book you care about, since Kalshi lists 15-minute crypto books: a market that opens and closes between two of your polls is already past its close time when you ask, and under a status filter that excludes finished markets it does not appear in markets. When we do not yet hold a close time for it, it is reported in _meta.omitted_tickers; when we already know it closed, it is skipped entirely. So omitted_tickers is worth reading, but neither array is a guarantee that nothing else was listed in the window.

include_combosboolean

Include Kalshi's auto-generated combo (parlay) markets. Default: false. These multi-leg series make up roughly 99% of the raw venue feed, so leaving this off is what keeps a full status=open crawl at about 83,000 markets and 83 pages rather than 700,000 markets and 700 pages. Not valid alongside created_since (combo markets are not tracked there).

categorystring

Return only markets whose series belongs to this category (case-insensitive). One of: Climate and Weather, Companies, Crypto, Economics, Entertainment, Financials, Mentions, Politics, Science and Technology, Sports. A filtered request scans up to 10 full-size catalog pages to fill the response toward limit matching markets; the cursor resumes from the last scanned page, so a response may hold fewer or more than limit markets with a non-null cursor - keep walking until cursor is null.

limitinteger

Results per page. Default: 100, max: 1000. With category, this is the target number of matching markets per response; the scan itself always uses full-size catalog pages, and a final page's matches are never trimmed. In delta mode (created_since), limit is the number of newly observed markets each page examines, so a filtered page can return fewer.

min_close_tsinteger

Return only markets closing at or after this Unix timestamp (seconds).

max_close_tsinteger

Return only markets closing at or before this Unix timestamp (seconds).

cursorstring

Opaque cursor from a previous response. Reuse only with the same filters to fetch the next page.

event_tickerstring

Return only markets belonging to this Kalshi event ticker.

series_tickerstring

Return only markets belonging to this Kalshi series ticker.

tickersstring

Comma-separated list of specific market tickers to return.

Response

marketsobject[]

Kalshi markets matching the filters. Each entry is the full Kalshi market object; the most commonly used fields are listed below.

Show 17 fields
tickerstring

Kalshi market ticker (unique identifier; pass to the single-market endpoint).

event_tickerstring

Ticker of the event this market belongs to.

titlestring

Market title.

statusstring

Market status as exposed by Kalshi (initialized, active, closed, determined, finalized). Note the vocabulary differs from the status request parameter: markets returned by status=open read "active" here, never "open", so do not re-filter the response on the literal "open".

yes_bid_dollarsstring

Best YES bid, in dollars (0–1).

yes_ask_dollarsstring

Best YES ask, in dollars (0–1).

no_bid_dollarsstring

Best NO bid, in dollars (0–1).

no_ask_dollarsstring

Best NO ask, in dollars (0–1).

last_price_dollarsstring

Last traded price, in dollars (0–1).

volume_fpstring

Cumulative contracts traded as a fixed-point string.

open_interest_fpstring

Open contracts outstanding as a fixed-point string.

volume / open_interestinteger

Legacy integer fields, present only when supplied by Kalshi.

liquidity_dollarsstring

Resting liquidity, in dollars.

close_timestring

ISO 8601 close time.

categorystring

Category of the market's series (e.g. Sports), resolved from the Kalshi series catalog. Absent when the series is unknown.

tagsstring[]

Series tags (e.g. Tennis, Basketball), resolved from the Kalshi series catalog. Absent when the series is unknown.

first_seen_atstring

ISO 8601 instant our capture first observed this market. This is our observation time, not a venue-stated listing or open time. It may be revised earlier if a source that saw the market sooner reports it later; paging is unaffected, as the cursor uses a separate immutable ordering key. Present only in delta mode (created_since).

cursorstring

Opaque cursor for the next page (null on the last page). Pass it back as the cursor parameter, keeping the same filters, to continue walking the catalog.

_metaobject

Response metadata.

Show 6 fields
sourcestring

Data source identifier.

countinteger

Number of markets in this page.

created_sinceinteger

Echo of the created_since filter as Unix seconds. Present only in delta mode.

degradedboolean

Present and true only while delta serving is temporarily degraded. The watermark is frozen at your created_since for the duration, so keep polling with the same value; repeated markets across such polls deduplicate on ticker. Absent in normal operation.

watermarkinteger

Unix seconds to pass as the next created_since. Computed with a safety margin, so a few markets may repeat across polls; deduplicate on ticker. Present only in delta mode.

omitted_tickersstring[]

Tickers first observed inside the window that this response does not include: filtered out by status or category, momentarily unavailable, or closed between your polls while we did not yet hold a close time for them. Not exhaustive: markets we already knew had closed are skipped before this list is built. Present only in delta mode.

Full API response