List markets (flat)
Returns a paginated list of individual markets, most-traded first. Unlike the event-grouped GET /markets, results aren't grouped by event and are never capped per event, so every market is reachable. Filter by venue, category, subcategory, or one or more series.
Paginate with cursor until it returns null; meta.total is the total number of matches. For a complete sync, de-duplicate by ticker — markets with equal volume aren't guaranteed a stable order between requests. Scoping to a subcategory or series_ticker set avoids this entirely.
Query parameters
Filter by category, e.g. sports or crypto.
Source venue for a market.
Filter by venue: kalshi or polymarket.
Subcategory wire format (lowercase snake_case). Valid values depend on the selected category and are enforced server-side.
Filter by subcategory, e.g. world_cup. Requires category.
Filter by series cadence: daily, weekly, monthly, or hourly.
Filter by one or more series, comma-separated and case-sensitive, e.g. KXWCAST,KXWCTCORNERS. Up to 100.
Filter by status. Defaults to tradeable markets (active,open); pass a comma-separated list of active, open, closed, settled, finalized, or all. An empty or unrecognised value returns 400.
Opaque pagination cursor from a previous response's meta.cursor. Do not construct manually.
Number of markets per page, from 1 to 500. Defaults to 100. Only the first 10,000 matches are reachable — narrow the filters to page further.
Response
OK