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/export/markets/{ext}GET
Export a filtered list of markets as a CSV or TSV file download. Supports the same filters as the List Markets endpoint. Up to 10,000 rows are returned (server-side cap), ordered by volume descending by default, or ascending when sort_dir=asc. Columns: market_id, ticker, platform, question, probability, volume, volume_24h, open_interest, status, category, end_date, created_at.
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
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
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)
sort_dir?"asc" | "desc"
Sort direction
Default: "desc"
Response
200 · CSV/TSV file of markets (up to 10,000 rows)
CSV/TSV file of markets (up to 10,000 rows)
400 · Invalid format (ext must be csv or tsv)
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.
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.dev.adjacent.markets/api/v1/export/markets/csv" \ -H "Authorization: Bearer <token>"
Response example
{ "error": "bad_request", "message": "Invalid format: xml" }