Agent-readable docs index: /llms.txt. Full docs in one file: /llms-full.txt. Download /docs.zip to grep all markdown files locally.

Changelog

Implied sleeve component returns. On GET /api/v1/indices/{id} and GET /api/v1/public/indices/{id}, an unemployment or inflation component in constituent_returns has kind sleeve and ticker Unemployment (U-3) or Inflation (CPI-U). start_price and end_price are that sleeve's level in percentage points. percent_change is the change between those levels, and is null when the start level is 0.
Public events list total. On GET /api/v1/public/events, the default list reports meta.total as the number of events with at least one active constituent market, when that number is 10,000 or fewer. total_capped is omitted. The same request with status=all reports the number of events with at least one constituent market in any status. status=all and scope=all together report the number of events. When the matching set is larger than 10,000, total is 10000 and total_capped is true. A category, venue, volume floor, open-interest floor, or category exclusion still reports that ceiling.
Daily market prices. On a 1d series, a window with no completed day's trade returns recorded daily closes: one sample per day over the requested window (up to 90 days on the public route), repeating the last sample across days with no new price. Days before the first recorded sample are empty. On the public route the last sample is the last completed US Eastern day in the window.
Public rate limits. The free public tier (/api/v1/public/*) is limited at the edge to 400 requests / 10 seconds burst and 480 requests / 60 seconds sustained, per IP. A 429 includes Retry-After for the window that blocked.
Events text search stops at the first match window. On GET /api/v1/events and GET /api/v1/public/events, a text search with no sort returns 400 once the page would rank past the first 1,000 matching markets. The first page is always served, and the response does not report a next page that would be refused. A search that also sets sort is unchanged. A search equal to one event id, or one member market id, is unchanged.
Markets list stays available during a catalog refresh. GET /api/v1/markets, GET /api/v1/public/markets, and the markets list export stay available while an already listed market is refreshed. They still return 503, with error service_unavailable and message catalog is rebuilding, until the catalog has been built. Event search returns that same 503 when the search cannot be served. A market that is not in the catalog yet can be missing until the refresh that adds it finishes. An events list with no search is unchanged.
Implied level release dates. On GET /api/v1/indices/{id} and GET /api/v1/public/indices/{id}, an index with methodology implied_level may include implied_releases. Each row has sleeve, label, reference_month, and release_date. reference_month is the first day of the month that print covers. release_date is the calendar date that print is released. Rows are earliest release first. The field is omitted for every other family.
Team-index sleeves include their share of the index. On GET /api/v1/indices/{id} and GET /api/v1/public/indices/{id}, each sleeves[] row may carry weight, that sleeve's share of the index as a fraction of 1. A live sleeve is 0.25, including a win-total pair. weight is omitted when the seat is empty.
Championship sleeve on team indices. On GET /api/v1/indices/{id} and GET /api/v1/public/indices/{id}, sleeves[].sleeve may be championship, super_bowl, conference, division, or wins. Membership events and official daily values describe team indices. Methodology bti uses the same daily-value stamp as methodology nti.
Index news and filings. GET /api/v1/indices/{id}/news, GET /api/v1/public/indices/{id}/news, and GET /api/v1/indices/{id}/filings use the markets the index currently includes. A contract staged for later inclusion does not contribute articles or filings. On the news routes for a market, an index, and a reference rate, a similarity read that exceeds the time budget asks the caller to retry.
Market id search. On the markets list, the events list, and the markets export, a search value that is one market id (kalshi:TICKER, polymarket:<id>, polymarket-us:<id>, or gemini:<id>) returns that market. On the events list, a search equal to one event id, or one member market id, returns that event.
Sorted text search. On GET /api/v1/markets and GET /api/v1/public/markets, a text search that also sets sort orders the best 1,000 matches. total counts that set. A match outside those 1,000 is omitted. The same search without sort stays in relevance order and does not return a total.
Similarity time budget. GET /api/v1/search and GET /api/v1/markets/{id}/similar ask the caller to retry when a similarity read exceeds the time budget.
Related filings. GET /api/v1/public/markets/{id}/filings, GET /api/v1/public/indices/{id}/filings, and GET /api/v1/public/rates/{id}/filings each return up to 3 filings whose status date is in the last 90 days and whose match clears the relevance floor, in similarity order. per_page defaults to 3 and accepts 1 to 3. A filing below the floor, or with a status date older than 90 days, is omitted. An unknown id is not found. A known id with no close filing returns an empty list. GET /api/v1/rates/{id}/filings returns the ranked list for a reference rate, including filings matched through its source markets, and includes older filings. On these filings routes, a similarity read that exceeds the time budget asks the caller to retry. A successful public response may be cached for 15 minutes.
Implied level daily values. On GET /api/v1/indices/{id} and GET /api/v1/public/indices/{id}, an index with methodology implied_level includes official_daily_value. quote_convention is points. GET /api/v1/indices/{id}/daily-values and GET /api/v1/public/indices/{id}/daily-values return that official series, newest first: one value for each US-Eastern weekday, the level at or after 5:30 p.m. Eastern. A weekday with no stamped value has no row. GET /api/v1/indices/{id}/news, GET /api/v1/public/indices/{id}/news, GET /api/v1/indices/{id}/filings, and GET /api/v1/public/indices/{id}/filings include the markets on that index's strikes.
Implied level sleeves. On GET /api/v1/indices/{id} and GET /api/v1/public/indices/{id}, an index with methodology implied_level may include implied_sleeves. Each row has label, reference_month, weight (that month's share of the sleeve, from 0 to 1), level in percentage points, and held. next_month is present while the sleeve is rolling into the next month. lower_strike and upper_strike are the current month's bracket, with lower_rate_id and upper_rate_id when those strikes have rates. The next month's pair is present during a roll. The sleeve level slides between the two strikes by where 0.50 sits. The field is omitted for every other family. latest_price remains the index level. On the public index, implied_sleeves is as of the same time as latest_price.
Related markets. GET /api/v1/public/markets/{id}/related returns up to 3 active markets similar to that market. per_page defaults to 3 and accepts 1 to 3. Each row has market_id, similarity, platform, question, and, when present, description and latest_price. latest_price is the market's current price in cents (0 to 100), the same mark as market detail. The requested market is excluded. When the nearest markets include more than one venue, the list includes more than one venue. An unknown market id is not found. A known market with no similar markets returns an empty list. A similarity read that exceeds the time budget asks the caller to retry. A successful response may be cached for 15 minutes. The public related-news routes for a market, an index, and a reference rate use that same 15-minute cache.
List catalog unavailable. GET /api/v1/markets, GET /api/v1/public/markets, and the markets list export return 503 while the list catalog is rebuilding. Event search and the events list export do the same when that search cannot be served. The body is error service_unavailable and message catalog is rebuilding. Retry in a few seconds. An events list with no search is unchanged, and a successful list response is unchanged.
NFL team index opening level. On GET /api/v1/indices/{id} and GET /api/v1/public/indices/{id}, an NFL team index (methodology nti, quote_convention points) whose ticker has no suffix publishes its first latest_price at the latest positive level of the index with ticker {TICKER}.K in the 7 days at or before that print. GET /api/v1/indices/{id}/prices and GET /api/v1/public/indices/{id}/prices start at the same level. When that .K index has no positive level in those 7 days, the first print is 1000. A ticker that already contains a dot, including .K and a season suffix, opens at 1000. Later levels compound from the first print. A live series resets to 1000 at reconstitution. A historical series opens at the {TICKER}.K level of its first bucket.
Page the public indices list. GET /api/v1/public/indices returns one page. page defaults to 1 and per_page defaults to 100 (maximum 500), including when you omit them. The response includes methodologies, the distinct methodology tokens for the list you asked for. search, methodology, sort, sort_dir, and window narrow or order that page. exclude_derived=true omits derived total-return indices. sort is order (the published presentation order, the default), ticker, name, last, change, constituents, or methodology. window is 1d, 7d (default), 30d, or 90d. When sort is change, the page is ordered by the percent change for that window.
Page the public rates list. GET /api/v1/public/rates accepts page, per_page (default 100, maximum 500), search, methodology, sort, and sort_dir. With any of those set, the response is one page of the matching rates. It also includes methodologies, the distinct methodology tokens. Omit those parameters to receive every listed rate in one response, as before. sort is ticker, name, last, change, spread, sources, or methodology. The default order is name, ascending.
Account API usage. GET /api/v1/usage returns the authenticated account's request totals for a UTC window. Pass days (1 to 90, default 30). The response includes total_requests, successful_requests, error_requests, per-day buckets in daily, and per-route totals in by_endpoint (matched path templates such as /api/v1/markets/{id}). Rate-limit refusals are not counted.
Indices that include a market. GET /api/v1/markets/{id}/indices and GET /api/v1/public/markets/{id}/indices list the indices that include that market. Each row has index_id, ticker, name, and weight. weight is the market's share of the index as a fraction of 1 (0.12 means 12 percent), the same figure that index's constituent list shows for this market. The list is empty when the market is not part of any index. weight is 0 when the market is included and carried no weight in the latest published value.
Events expiry windows are markets-only. GET /api/v1/events and GET /api/v1/public/events reject expires_after and expires_before. Date windows apply to markets.
Authenticated detail returns previous closes. GET /api/v1/indices/{id} and GET /api/v1/rates/{id} include previous_close_1d and previous_close_7d, the last completed daily close in US Eastern time and the close seven days before that. GET /api/v1/rates/{id} also includes stats, the trailing returns and risk figures from the daily series.
Filter markets and events to index constituents. GET /api/v1/markets and GET /api/v1/events accept scope=constituents or scope=all. constituents keeps markets that belong to a public index, and events that contain one. Omit scope, or pass all, to list everything the token can read. GET /api/v1/events accepts embed=markets to include each event's child markets and is_constituent on the list row.
Live correlation. GET /api/v1/indices/{id}/correlation returns the same Pearson matrix as GET /api/v1/public/indices/{id}/correlation, computed through the current time.
Index constituent weights follow the published price. On GET /api/v1/indices/{id}/constituents and GET /api/v1/public/indices/{id}/constituents, weight is that name's share of the index as a fraction of 1 (0.18 means 18 percent). When the index has a published price, included shares sum to 1.0. When a book quality check omits a name, weight is 0, excluded is true, and exclude_reason names the check (for example one_sided_book). A name that has not been priced yet has weight 0 and excluded false. When the index has no published price yet, weight is the catalog share and excluded is false.
Polymarket US market detail fields. On GET /api/v1/markets/{id} and GET /api/v1/public/markets/{id}, a Polymarket US contract includes event_ticker (the event slug), rules_primary (the contract rules), yes_sub_title (the Yes outcome title), and market_type when the venue publishes them.
Polymarket US candle source. GET /api/v1/markets/{id}/candles reports source polymarket_us_price_history for Polymarket US rows. Those candles carry bid and ask from the venue display-price feed. volume is absent on those rows. Polymarket Global rows stay polymarket_clob_history.
Public over-limit responses are JSON. An IP over the Free-tier budget on /api/v1/public/* receives 429 Too Many Requests with error too_many_requests and a retry message. Wait 10 seconds, then retry.
Polymarket market link URLs. On GET /api/v1/markets, GET /api/v1/markets/{id}, and their public twins, a Polymarket link is https://polymarket.com/event/<event-slug>/<market-slug> when both slugs exist and differ. When only the event slug is usable, link is the event page. When only the market slug is usable, link is /market/<market-slug>. link is null when no working URL can be built.
Governance announcements. GET /api/v1/announcements and GET /api/v1/announcements/{id} list index-change notices (rebalances, methodology updates, corporate actions), newest first. Filter with type, from, to, and index. The public twins under /api/v1/public/announcements delay notices 15 minutes: a notice dated after the current delay window is not yet visible. Rebalance rows carry added_markets and removed_markets.
Team-index sleeve members include their active window. On GET /api/v1/indices/{id} and GET /api/v1/public/indices/{id}, each sleeves[].members[] row may carry active_from and active_until. active_until is omitted while that rate is still in the priced sleeve.
Filter similar markets by venue. GET /api/v1/markets/{id}/similar accepts platform (kalshi, polymarket, or gemini) to rank neighbors from that venue only. Omit it to search across venues.
Gemini contracts. GET /api/v1/markets, GET /api/v1/events, their public twins, and the matching export paths accept gemini as a venue. Market platform is gemini for those contracts. Catalog volume is the lifetime taker contract count for that Gemini contract.
Unknown event volume and open interest are omitted. GET /api/v1/events and GET /api/v1/public/events omit volume and open_interest when no child market reports a value. A measured zero still serializes as 0.
Rate source weights follow the print. On GET /api/v1/rates/{id}, GET /api/v1/public/rates/{id}, and inlined sources on GET /api/v1/public/rates, weight is that market's share of the latest print. For claim-price and NTI sleeve rates, that share is lifetime volume among sources that entered the print. A source that did not enter still appears, with its catalog weight and no latest_price. volume is omitted when the print did not record it.
NFL Team Index reads. Index detail for an NFL team index (methodology nti) includes sleeves (four seats: Super Bowl, conference, division, win-total) and official_daily_value. quote_convention is points and the level starts at 1000. GET /api/v1/indices/{id}/daily-values and GET /api/v1/indices/{id}/membership-events (and the /api/v1/public/indices/... twins) return the official daily series and recent sleeve admissions or settlements. Other families return empty lists.
Quiet rate sources omit the last print's price. On GET /api/v1/public/rates (inlined sources) and GET /api/v1/public/rates/{id}, each source's latest_price is omitted when the rate's last print is older than seven days. Configured sources still appear. GET /api/v1/rates/{id} uses the same window.
Filings list by last listing observation. GET /api/v1/filings and GET /api/v1/public/filings accept last_seen_days (integer, at least 1) to return only filings not observed on a CFTC listing in that many days. Pass sort=last_seen with sort_dir to order by when a filing last appeared on a listing.
Quiet public indices omit a stale last print. GET /api/v1/public/indices/{id} quotes the same stamped latest_price. A quiet index still omits latest_price when its last print is older than seven days.
Public rates list stays complete when the catalog is large. GET /api/v1/public/rates returns every public rate when the catalog has hundreds of rows (NFL team sleeve rates). A quiet rate still omits latest_price when its last print is older than seven days.
NTI sleeve members include each contract's mark. On GET /api/v1/indices/{id} and GET /api/v1/public/indices/{id}, each sleeves.members[] entry has mark_price (0-1) for that contract. A win-total pair therefore carries both marks.
Event-contract rates treat a 0¢ bid or ask as missing. When only one side of the book is present, GET /api/v1/rates/{id} (and the public twin) uses last trade, then the remaining quote, then the half-cent floor. A prior half-cent print does not stick once last trade or a one-sided quote is available.
Rate constituents in component returns. Index detail (GET /api/v1/indices/{id} and the public tier) labels a rate-backed constituent in constituent_returns with kind rate. Link those rows to the rate page.
Rate news includes source-market matches. GET /api/v1/rates/{id}/news and GET /api/v1/public/rates/{id}/news return articles that match the rate itself or any of its source markets. via_market_id names the source market when that match wins; it is omitted when the rate itself matched more closely.
Index news includes constituent rate sources. GET /api/v1/indices/{id}/news and GET /api/v1/public/indices/{id}/news draw related articles from the index's constituent markets, including the source markets of any constituent rates. via_market_id names the closest market. GET /api/v1/indices/{id}/filings uses the same market set.
Wins-sleeve members follow the wrapping pair before the first print. On GET /api/v1/indices/{id} and GET /api/v1/public/indices/{id}, an NTI index's wins sleeves.members lists the wrapping win-total rates from the latest prints. After the first mark, members continue to follow the printed pair.
Quiet rates omit the latest price. GET /api/v1/rates and the rates CSV export look back seven days when you omit start: a rate whose last print is older than that window returns latest_price and spread as null. Pass an earlier start to include older prints. GET /api/v1/public/rates, GET /api/v1/rates/{id}, and GET /api/v1/public/rates/{id} use the same seven-day window.
Rate sources stay on the detail page when the print did not use a two-sided book. GET /api/v1/public/rates/{id} (and the list's inlined sources) includes every configured source market. A source that did not enter the latest print omits latest_price.
Inactive rates drop off the public list. GET /api/v1/public/rates omits a rate when every source is inactive (is_active is false). The rate detail URL still returns the rate. The authenticated catalog is unchanged.
Searched event lists stay uncounted with sort. GET /api/v1/events and GET /api/v1/public/events return total and total_pages as null when search is set, including when you also pass sort; page with has_next. A searched markets list is uncounted on relevance ranking, but passing sort on GET /api/v1/markets or GET /api/v1/public/markets returns a total over the ranked matches (at most 10,000). Events have no stable number for that request shape.
Sorted market-search totals at the ceiling are a floor. When search and sort are both set on a markets list and meta.total is 10,000, meta.total_capped is true. Render that as "10,000+", not as an exact count. Below the ceiling the total is exact.
Searched event lists are uncounted. GET /api/v1/events and GET /api/v1/public/events return total and total_pages as null when search is set; page with has_next instead. Unsearched lists are unchanged and still carry an exact total. This matches GET /api/v1/markets, which has always been uncounted on a searched page. The previous total was bounded by the search's internal candidate window rather than the matched set, so it under-reported broad queries and changed as you paged through the same result set.
CFTC industry filings. A new catalog of product certifications and rule submissions from the four CFTC industry-filing registries (PTC/DCM rules, DCM products, DCO, DCO rules). GET /api/v1/public/filings returns filings whose CFTC status date falls in the last 90 days, with GET /api/v1/public/filings/filters for the feed, organization, and status values present, GET /api/v1/public/filings/{id} for one filing, and GET /api/v1/public/filings/{id}/markdown for the extracted text of its attachments. Filtering, relevance-ranked search, and sorting work on this tier too, within that window. Filings older than it, the change feed, and related records require the org:filings:read scope.
Full filings history. GET /api/v1/filings returns the whole catalog, filtered by feed, org, status, and a relevance-ranked search across the organization, description, product name and type, affected products, and filing id. A searched page is uncounted, so page with has_next rather than a total, the same as the markets list. Pass sort (status_date, received, first_seen, org) with sort_dir to order by a field instead. GET /api/v1/filings/{id}/actions returns one filing's dated history: its receipt, each status change, and each later attachment.
Filing change feed. GET /api/v1/filings/events returns every observed change across the catalog, oldest first, each row carrying the filing it happened to. Poll it with since_seq set to the highest seq of the previous page to receive only what has changed since. Filter by kind (received, status_changed, documents_added), by feed, or by a since timestamp for a first poll that has no cursor yet.
Filings alongside markets, news, and indices. GET /api/v1/filings/{id}/markets, /news, and /similar return records related to a filing. GET /api/v1/markets/{id}/filings, GET /api/v1/news/{id}/filings, and GET /api/v1/indices/{id}/filings return the same relationships from the other side.
Filter events by venue and market close window. GET /api/v1/events and GET /api/v1/export/events/{ext} accept venue (for example kalshi or polymarket). expires_after and expires_before apply to markets, not events. start and end are deprecated. Events are returned newest-added first, or by relevance when search is set.
Filter events by listing time. GET /api/v1/events (and GET /api/v1/export/events/{ext}) accept created_since and created_until (ISO date or datetime), which filter events by when they were first listed on the platform. The anonymous public events list does not implement those parameters; use an API key. Date windows (expires_after / expires_before) are markets-only.
Grouped constituent returns with percent change. Index detail (GET /api/v1/indices/{id} and the public tier) returns constituent_returns grouped by a dimension (group_by, for example state); each group carries its weight and both its point change and percent_change.
Index visibility. Indices carry a visibility field on authenticated responses (public or organization; other values are reserved). The anonymous public tier returns only public indices and omits the field.
Relevance-ranked market search. search on GET /api/v1/markets and GET /api/v1/public/markets ranks results by relevance and matches a market's slug. A relevance-ranked search is uncounted: meta.total is null, so page with meta.has_next rather than a total count.
Explicit sort on searched lists. GET /api/v1/public/events and GET /api/v1/public/markets honor an explicit sort and sort_dir when a search query is present.
Capped list totals. List responses carry meta.total_capped. When true, meta.total and meta.total_pages are a lower bound rather than an exact count, so render them as, for example, "10,000+". The field is omitted when the count is exact.