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/events/{id}GET
Get event with all linked markets
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 · Event details
event_id?string
Stable identifier for the event, formed as <venue>:<venue event ticker> (for example kalshi:KXPRESPARTY-2028).
name?string
The event's title as published by its venue, intended for display.
description?stringnull
Longer description of the event as published by its venue. Null when the venue supplies none.
category?string
The event's category, folded into a fixed cross-venue taxonomy (Politics, Elections, Economics, Crypto, Sports and similar, with Other as the catch-all).
markets?object[]
Every market under this event, with no status filter applied, so settled and closed markets appear alongside open ones. Ordered by market identifier, and each entry carries that market's latest price, freshest tape mid, and all-time volume.
Show item properties
market_id *string
Canonical identifier for this child market, formed as <platform>:<venue ticker> (for example kalshi:KXPRESPARTY-2028-R). This is the id every other endpoint accepts.
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 volume is counted in (see volume_unit).
question?stringnull
Market question text (same field as MarketSummary.question).
probability?number,null (float)
Yes-side probability on the 0-100 cents scale, from the market's last traded price. Same projection as MarketSummary.probability.
tape_mid_1m?numbernull
Most recent 1-minute average of yes-side trade prices, on the 0-100 cents scale. The freshest tape read available, and distinct from probability, which is the single last traded price. This is the newest minute that had trades, not necessarily the minute just past: on an inactive market it can be well in the past. Null only when no trades have been recorded for the market.
volume?number,null (float)
All-time traded volume as a contract/share count, the same number the markets list serves for this market (MarketSummary.volume), so the two surfaces agree. Unit is in volume_unit.
volume_unit?object | null
Unit for volume: contracts for Kalshi and shares for Polymarket. Without it the volume column mixes two different quantities.
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 · Event 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/events/<id>" \ -H "Authorization: Bearer <token>"
Response example
{ "event_id": "kalshi:CONTROLH-2028", "name": "2028 House winner", "description": "In 2028", "category": "Elections", "markets": [ { "market_id": "kalshi:CONTROLH-2028-D", "display_ticker": "CONTROLH-2028-D", "platform": "kalshi", "question": "Will Democrats win control of the House in 2028?", "probability": 65, "tape_mid_1m": 64.8, "volume": 1850000, "volume_unit": "contracts" }, { "market_id": "kalshi:CONTROLH-2028-R", "display_ticker": "CONTROLH-2028-R", "platform": "kalshi", "question": "Will Republicans win control of the House in 2028?", "probability": 36, "tape_mid_1m": 36.2, "volume": 1420000, "volume_unit": "contracts" } ] }