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/public/indices/{id}/constituentsGET
Constituents (markets and/or child sub-indices) of an index with their weights. kind=market rows also carry all-time volume + open interest. Returns the {data, meta} envelope, paginated: meta.total counts the rows matching this request, so a search narrows it, and has_next is true when the basket does not fit one page. The default page holds every current index's basket whole.
Query Parameters
expand?string
markets flattens a composite index into its leaf markets server-side, each returned once with its effective weight (product of the BASE parent×child weights along the path; sums to ~1.0 for a full composite basket, under 1.0 for a partial basket whose methodology categories are not all linked). Non-composite indices are unaffected; absent, the direct-components shape is kept for back-compat. true is also accepted as an alias for markets.
flatten?boolean
Boolean alias for expand=markets.
Default: false
search?string
Case-insensitive substring match over ticker and name, applied server-side.
page?integer
Page number, 1-based.
Default: 1Min: 1
per_page?integer
Rows per page (max 500). The default holds every current index's basket in one page; when a basket is larger, meta.has_next is true and the remaining rows are on later pages.
Default: 500Min: 1Max: 500
Response
200 · List of constituents
data *object[]
Show item properties
kind *"market" | "index"
Discriminator: 'market' for leaf prediction markets, 'index' for composite sub-indices.
market_id *string
Canonical id. For markets: <platform>:<raw_ticker>. For composites: the child index_id.
ticker *string
For markets: raw exchange ticker. For composites: the child index_id.
display_ticker *string
Human-readable market label — Polymarket market slug when present, else the raw ticker.
platform *string
'kalshi'/'polymarket' for markets; 'index' for composite components.
weight *number
This constituent's share of the index, as a fraction of 1 (0.18 means 18 percent). These are the index's stored base weights, which sum to 1 across the full constituent list; a given published price point can differ, because the calculation renormalizes over only the constituents that had a usable price that cycle.
price?numbernull
Latest value for the constituent: for market constituents, the most recent yes-side traded price on the 0-100 cents scale; for sub-index constituents (kind = index), the child index's latest published level, which is in index points and not on the 0-100 scale. Null when the constituent has never traded or has no published value yet, and it carries no age bound, so an inactive market's price can be hours old.
name?stringnull
Display label for the constituent: the market's question for market rows, and the sub-index's name for kind = index rows.
volume?numbernull
All-time traded volume as a contract/share count (Kalshi contracts, Polymarket shares), not dollars. Present for kind='market' rows only. Unit is in volume_unit.
volume_unit?object | null
Wire unit for volume. See QuantityUnit.
open_interest?numbernull
Open interest: a Kalshi contract count; Polymarket's is USD. Present for kind='market' rows only. Unit is in open_interest_unit.
open_interest_unit?object | null
Wire unit for open_interest. See QuantityUnit.
end_date?string,null (date-time)
When trading closes for a market constituent. Always null for sub-index constituents (kind = index), which do not expire.
state_code?stringnull
Two-letter state code (House/Senate/Gubernatorial); market rows only
city_code?stringnull
City code (Mayoral); market rows only
meta *object
404 · Index 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.
Request example
curl -X GET "https://api.adjacent.markets/api/v1/public/indices/<id>/constituents"
Response example
{ "data": [ { "kind": "index", "market_id": "presr_kalshi", "ticker": "presr_kalshi", "display_ticker": "presr_kalshi", "platform": "index", "weight": 0.4000000059604645, "price": 91.5, "name": "Presidential (R)" } ], "meta": { "total": 5, "page": 1, "per_page": 1, "total_pages": 5, "has_next": true, "has_prev": false } }