Agent-readable docs index: /llms.txt. Full docs in one file: /llms-full.txt. Download /docs.zip to grep all markdown files locally.
/api/v1/marketsGET
Get a paginated list of prediction markets with filtering options
Authorization
bearerAuth *Bearer <token>
Clerk session JWT, or an API key (the ak_ prefix), sent as a Bearer token or an ?api_key= query parameter. Each endpoint requires the read scope for its resource (e.g. org:rates:read for rates). Token in: header
Query Parameters
platform?string
Filter by platform (kalshi, polymarket)
category?string
Filter by category
status?string
Filter by exact market status. One of: unknown, active, closed, resolved, expired. The live list is also served by the snapshot meta endpoint.
state_code?string
Filter by assigned US state abbreviation (case-insensitive)
search?string
Case-insensitive, all-words match (every whitespace-separated token must match) over question, description, series title, and market_id (e.g. kalshi:KXPRESPARTY-2028-R)
tag?string
Case-sensitive substring match against the market's raw metadata document (not a discrete tag field), so short values match broadly. Example: 2026-senate.
start?string (date-time)
Filter by creation date (after)
end?string (date-time)
Filter by creation date (before)
end_date_after?string (date-time)
Filter markets ending after this date
end_date_before?string (date-time)
Filter markets ending before this date
probability_min?number
Minimum probability (0-100)
probability_max?number
Maximum probability (0-100)
volume_min?number
Minimum volume
volume_max?number
Maximum volume
include_closed?boolean
Include closed markets
Default: false
include_resolved?boolean
Include resolved markets
Default: false
sort_dir?"asc" | "desc"
Sort direction
Default: "desc"
page?integer
Page number
Default: 1
per_page?integer
Items per page
Default: 100Max: 500
Response
200 · List of markets
data?object[]
Show item properties
market_id?string
Canonical identifier for the market, formed as <platform>:<venue ticker> (for example kalshi:SENATEPA-26-R). This is the id every other endpoint accepts, so use it rather than ticker when looking a market up.
ticker?string
The venue's own symbol for the market, without the <platform>: prefix. Not guaranteed unique across venues, so use market_id as the lookup key and display_ticker as the human-readable label.
display_ticker?string
Human-readable market label — Polymarket market slug when present, else the raw ticker.
platform?string
The venue that lists this market: kalshi or polymarket. It is also the prefix of market_id, and it determines what the volume and open interest figures are counted in (see the companion volume_unit, volume_24h_unit, and open_interest_unit fields).
question?string
The market's question, worded as the venue words it. When a venue supplies no title we fall back to the raw ticker, so this is never empty.
probability?numbernull
Implied yes-side probability on the 0-100 scale, where 48.5 means 48.5 percent. This is the market's latest traded price.
volume?numbernull
All-time traded volume as a contract/share count (Kalshi contracts, Polymarket shares), not dollars. Unit is in volume_unit.
volume_unit?object | null
Wire unit for volume. See QuantityUnit.
volume_24h?numbernull
Trailing 24h volume. Platform-native: Kalshi contracts, Polymarket USD. Unit is in volume_24h_unit.
volume_24h_unit?object | null
Wire unit for volume_24h. See QuantityUnit.
open_interest?numbernull
Open interest: a Kalshi contract count; Polymarket's is USD. Unit is in open_interest_unit.
open_interest_unit?object | null
Wire unit for open_interest. See QuantityUnit.
status?string
Lifecycle state of the market: active (trading), closed (trading has ended, outcome not yet published), resolved (settled with a known outcome), expired (ended long ago and never settled by the venue), or unknown (the venue reported no status we recognize).
category?stringnull
Topic category of this market's parent event, normalized across venues (for example Politics, Sports, Crypto). Every market under the same event shares it.
is_constituent?boolean
True when the market is a constituent of at least one index. The public markets list exposes every tracked market; default to constituents by filtering on this flag.
indices?string[]
Index ids this market is a constituent of, ascending. Omitted when the market is in no index. Populated only on the authenticated /api/v1/markets list.
end_date?string,null (date-time)
When trading closes on the venue. This is not the settlement time; a market can sit in closed for a while before its outcome is published.
created_at?string (date-time)
When we first recorded this market, not when the venue listed it. Only the authenticated markets list returns it; the public markets list omits it.
updated_at?string (date-time)
When any stored field on this market last changed on our side, so it also moves on routine metadata refreshes and is not a price-move timestamp. Only the authenticated markets list returns it; the public markets list omits it.
link?stringnull
URL of the venue's public page for this contract, which on both venues is the parent event page rather than a single strike. Null when no working URL can be built, which happens for Kalshi markets whose series is unknown.
state_code?stringnull
Two-letter US state code when the contract is tied to a state race. Absent for national contests and for markets with no state on record.
city_code?stringnull
Mayoral city code parsed at ingest; present for Mayoral markets, absent otherwise.
meta?object
Show properties
total?integer
Total number of records matching the request across every page, not just the number returned in this one.
page?integer
The 1-based page number this response covers.
per_page?integer
Maximum number of items on a page. The last page may hold fewer.
total_pages?integer
Number of pages available at this per_page. It is at least 1, even when nothing matched.
has_next?boolean
True when a page exists after this one.
has_prev?boolean
True when this is not the first page.
403 · The organization has no paid plan, so the realtime read scopes are refused. Distinct from a 429, which means a plan's budget ran out: nothing here resets on a timer, and the request succeeds only once the organization holds a plan.
error *string
Human-readable reason the request was refused.
status *integer
HTTP status code, repeated in the body.
upgrade_url?string (uri)
Page listing the plans and their request allowances, for buying access. Absent when no plan is available for purchase.
429 · The paid organization's minute or UTC-day request budget is exhausted.
error *"rate_limited"
Always rate_limited. Branch on this to detect a throttled request.
limit *"rpm" | "daily"
Which limit was hit: rpm for the per-minute cap or daily for the daily one.
message *string
Human-readable explanation naming the limit that was exceeded.
upgrade_url?string (uri)
Page listing the plans and their request allowances, for buying a larger budget. Absent when no plan is available for purchase.
Request example
curl -X GET "https://api.adjacent.markets/api/v1/markets" \ -H "Authorization: Bearer <token>"
Response example
{ "data": [ { "market_id": "kalshi:KXNBA-26-SAS", "ticker": "KXNBA-26-SAS", "display_ticker": "KXNBA-26-SAS", "platform": "kalshi", "question": "Will the San Antonio win the 2026 Pro Basketball Finals?", "link": "https://kalshi.com/markets/kxnba/kxnba-26", "probability": 65, "volume": 44526290, "volume_24h": 1157100.4, "open_interest": 21229516, "status": "active", "category": "Sports", "is_constituent": false, "end_date": "2028-06-29T14:00:00Z", "created_at": "2026-06-03T14:46:46.966195Z", "updated_at": "2026-06-03T14:46:46.966195Z" }, { "market_id": "kalshi:KXNBA-26-NYK", "ticker": "KXNBA-26-NYK", "display_ticker": "KXNBA-26-NYK", "platform": "kalshi", "question": "Will the New York win the 2026 Pro Basketball Finals?", "link": "https://kalshi.com/markets/kxnba/kxnba-26", "probability": 37, "volume": 42456692, "volume_24h": 1904408, "open_interest": 24467278, "status": "active", "category": "Sports", "is_constituent": false, "end_date": "2028-06-29T14:00:00Z", "created_at": "2026-06-03T14:41:36.373567Z", "updated_at": "2026-06-03T14:41:36.373567Z" } ], "meta": { "total": 87749, "page": 1, "per_page": 20, "total_pages": 4388, "has_next": true, "has_prev": false } }