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/eventsGET
List all events, filterable by category, region, venue, and a resolution-date window (expires_after / expires_before).
Authorization
bearerAuth *Bearer <token>
Session token from the app, or an API key (the ak_ prefix), sent as a Bearer token or an ?api_key= query parameter.. Token in: header
Query Parameters
category?string
Filter by category
region?string
Filter by region: a two-letter US state code for a state-level race, or US for a federal one.
search?string
Case-insensitive word match over an event's member markets (question, description, series title, market ID, and market slug) plus the event name and ID.
venue?string
Filter by venue: a comma-separated list of platforms (kalshi, polymarket, gemini). Keeps events with at least one market on a listed venue. platform is an accepted alias.
platform?string
Alias for venue.
expires_before?string
ISO date/datetime inclusive upper bound on a market's end_date (a bare date snaps to end-of-day).
expires_after?string
ISO date/datetime inclusive lower bound on a market's end_date (a bare date snaps to start-of-day).
created_since?string
Filters events first listed on this platform at or after this ISO date or datetime.
created_until?string
Filters events first listed on this platform at or before this ISO date or datetime.
start?string (date-time)
Deprecated.
end?string (date-time)
Deprecated.
sort?"created" | "election_date" | "title" | "volume" | "open_interest" | "market_count"
Sort key.
Default: "created"
sort_dir?"asc" | "desc"
Sort direction, asc or desc (default desc).
Default: "desc"
page?integer
Default: 1
per_page?integer
Default: 100Max: 500
Response
200 · List of events
data?object[]
Show item properties
event_id?string
Stable identifier for the event, formed as <venue>:<venue event ticker> (for example kalshi:KXPRESPARTY-2028). Use it to fetch the event's detail and to group markets by their parent event.
name?string
The event's title as published by its venue, intended for display.
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). Every market under the event inherits this value.
region?stringnull
Geographic scope of the event: a two-letter US state code for state-level races, or US for federal ones. Null whenever the event carries no geographic anchor, which covers non-election events and all Polymarket events.
election_date?string,null (date)
The election day this event resolves against, derived from the event's identifier for election markets and null for everything else. Pass sort=election_date to order the events list by it (undated events last).
description?stringnull
Longer description of the event as published by its venue. Omitted when the venue supplies none.
created_at?string,null (date-time)
When this event was first recorded by the API. It is a first-seen timestamp on our side, not a venue publication date.
updated_at?string,null (date-time)
When this event's record was last written. The record is rewritten every time the event is re-read from its venue, so this advances even when no field actually changed.
market_count?integer
Total number of markets under this event, counted with no status or filter restriction, so settled and closed markets are included. The public events list reports a market_count covering only the markets that match that request's filters, so the two can legitimately differ for the same event.
volume?numbernull
Summed all-time contract/share volume across the event's markets, not dollars. Unit is in volume_unit. Omitted when no market reports volume.
volume_unit?object | null
Wire unit for volume, from the event's venue (every market shares the event's venue). See QuantityUnit.
open_interest?numbernull
Summed open interest across the event's markets. Unit is in open_interest_unit. Omitted when no market reports open interest.
open_interest_unit?object | null
Wire unit for open_interest, from the event's venue. See QuantityUnit.
meta?object
Show properties
total?integernull
Total number of records matching the request across every page, not just the current one. null on an uncounted list; page using has_next. A relevance-ranked search is uncounted, and a searched events list stays uncounted even with sort. A searched markets list with sort returns a total over the ranked matches (at most 10,000).
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?integernull
Total number of pages available at the current per_page. null whenever total is null; page using has_next.
has_next?boolean
True when a page exists after this one.
has_prev?boolean
True when this is not the first page.
total_capped?boolean
True when total and total_pages reflect the server's counting ceiling rather than the exact matched count: the real set is at least total large. Render such totals as a lower bound (for example "10,000+"). Omitted when the count is exact. A sorted markets search that fills the 10,000-candidate ceiling sets this flag.
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 organization's minute or UTC-day request budget is exhausted, or the organization has reached its cap on requests running at the same time (`limit: "concurrency"`). Wait `Retry-After` seconds before retrying; for a concurrency 429, reduce parallelism.
error *"rate_limited"
Always rate_limited. Branch on this to detect a throttled request.
limit *"rpm" | "daily" | "concurrency"
Which limit was hit: rpm for the per-minute cap, daily for the daily one, or concurrency for the cap on requests running at the same time.
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" \ -H "Authorization: Bearer <token>"
Response example
{ "data": [ { "event_id": "kalshi:CONTROLH-2028", "name": "2028 House winner", "category": "Elections", "region": "US", "election_date": "2028-11-07", "description": "In 2028", "created_at": "2026-06-02T16:28:27.350946Z", "updated_at": "2026-06-02T16:29:39.257577Z", "market_count": 2 }, { "event_id": "kalshi:CONTROLS-2028", "name": "2028 Senate winner", "category": "Elections", "region": "US", "election_date": "2028-11-07", "description": "In 2028", "created_at": "2026-06-02T16:28:24.146031Z", "updated_at": "2026-06-02T16:29:34.765363Z", "market_count": 2 } ], "meta": { "total": 204963, "page": 1, "per_page": 20, "total_pages": 10249, "has_next": true, "has_prev": false } }