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 of an index, both markets and child sub-indices, with their weights.
Query Parameters
expand?string
markets flattens a composite into its leaf markets, each returned once with the share that entered the published price. Included shares sum to 1.0. A name omitted from that price has weight 0.
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).
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'/'gemini' for markets; 'index' for composite components.
weight *number
Share of the index as a fraction of 1 (0.18 means 18 percent). When the index has a published price, this is that name's share of that price: included shares sum to 1.0, and a name that did not enter is 0. When the index has no published price yet, this is the catalog share.
excluded *boolean
True when a book quality check omitted this constituent from the published price.
exclude_reason?stringnull
The book quality check that omitted this constituent. Present only when excluded is true.
price?numbernull
For a market, the yes-side mid (0-100) that entered the published price. For a child index (kind = index), the child's published level from the same computation. When the index has no published price yet, the latest yes-side trade (markets) or latest published level (child indices). Null when this constituent has never traded or has no published value.
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)", "excluded": false } ], "meta": { "total": 5, "page": 1, "per_page": 1, "total_pages": 5, "has_next": true, "has_prev": false } }