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/markets/{id}GET
Get detailed information about a specific market
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
Response
200 · Market details
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?stringnull
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.
description?stringnull
Longer explanatory text for the contract as supplied by the venue (Kalshi's subtitle, Polymarket's description). Frequently absent, especially on Kalshi.
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.
yes_bid?numbernull
Latest top-of-book YES bid (0-100 cents, ~1-min fresh).
yes_ask?numbernull
Latest top-of-book YES ask (0-100 cents, ~1-min fresh).
no_bid?numbernull
Derived NO bid (100 - yes_ask).
no_ask?numbernull
Derived NO ask (100 - yes_bid).
event_ticker?stringnull
Raw venue event ticker (unprefixed).
status?stringnull
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).
open_time?string,null (date-time)
When the market opened for trading on the venue. Static once set, and absent for venues that do not report an open time.
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 it resolves, so see expiration_date for the expected settlement.
expiration_date?string,null (date-time)
Expected settlement time as published by the venue. Distinct from end_date, which is when trading closes; a market sits between the two while awaiting its outcome.
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.
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.
state_code?stringnull
Two-letter US state code parsed from the ticker when the contract is tied to a state (Senate, Governor, House). Absent for contracts with no state, including Mayoral markets, which carry city_code instead.
city_code?stringnull
Mayoral city code parsed at ingest; present for Mayoral markets, absent otherwise.
market_type?stringnull
The venue's own contract-type label (for example a binary or scalar market). Static contract metadata, absent when the venue reports none.
rules_primary?stringnull
The venue's primary settlement rules text, describing what resolves the contract YES.
rules_secondary?stringnull
Additional settlement rules text from the venue, covering edge cases and sourcing. Frequently absent.
yes_sub_title?stringnull
Short label for the YES leg as the venue words it, suitable for a button or leg header.
no_sub_title?stringnull
Short label for the NO leg as the venue words it, suitable for a button or leg header.
settlement?objectnull
Resolution provenance — platform-agnostic (Kalshi series object / Polymarket resolution_source).
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.
404 · Market not found
error?string
Stable, machine-readable code identifying the failure; branch on this rather than on message. One of bad_request, unauthorized, forbidden, not_found, conflict, service_unavailable, upstream_error, service_error, or internal_error.
message?string
Human-readable explanation, safe to show to a user. For client errors it names the specific problem; for server-side failures it is a generic notice and the underlying detail is deliberately withheld.
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/<id>" \ -H "Authorization: Bearer <token>"
Response example
{ "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?", "probability": 65, "volume": 44526290, "volume_24h": 1157100.4, "open_interest": 21229516, "status": "active", "open_time": "2025-07-12T14:00:00Z", "end_date": "2028-06-29T14:00:00Z", "expiration_date": "2026-06-30T14:00:00Z", "link": "https://kalshi.com/markets/kxnba/kxnba-26", "category": "Sports", "market_type": "binary", "rules_primary": "If San Antonio win the 2026 Pro Basketball Finals, then the market resolves to Yes.", "rules_secondary": "", "yes_sub_title": "San Antonio", "no_sub_title": "San Antonio" }