curl --request GET \
--url https://api.routeur.app/v1/rulebooks/{venue}/{kind}/{id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.routeur.app/v1/rulebooks/{venue}/{kind}/{id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.routeur.app/v1/rulebooks/{venue}/{kind}/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.routeur.app/v1/rulebooks/{venue}/{kind}/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"data": {
"venue": "kalshi",
"kind": "series",
"id": "KXCPI",
"markets": 48,
"versions": [
{
"venue": "kalshi",
"kind": "series",
"id": "KXCPI",
"content_hash": "2c9e7a1d4b6f8e0c1a3d5f7b9e1c3a5d7f9b1e3c5a7d9f1b3e5c7a9d1f3b5e7c",
"first_seen_at": "2026-09-14T12:00:00Z",
"last_seen_at": "2026-09-17T09:00:00Z",
"fields": {
"contract_terms_url": "https://assets.kalshi.com/contract_terms/KXCPI.pdf",
"contract_url": "https://assets.kalshi.com/regulatory/product-certifications/KXCPI.pdf",
"settlement_sources": [
{
"name": "Bureau of Labor Statistics",
"url": "https://www.bls.gov/cpi/"
}
],
"additional_prohibitions": [
"Persons who are employed by any of the Source Agencies are not permitted to trade on the Contract."
],
"product_metadata": {}
},
"settlement_sources": [
{
"name": "Bureau of Labor Statistics",
"url": "https://www.bls.gov/cpi/"
}
],
"source_url": "https://assets.kalshi.com/contract_terms/KXCPI.pdf",
"document": {
"url": "https://assets.kalshi.com/contract_terms/KXCPI.pdf",
"content_hash": "9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e7b9d1f3a5c7e9b1d",
"text": "KXCPI\nScope: These rules shall apply to this contract.\nUnderlying: The Consumer Price Index for All Urban Consumers...",
"fetched_at": "2026-09-17T03:10:00Z"
},
"changed_fields": []
}
]
}
}{
"error": {
"code": "invalid_parameter",
"message": "Invalid or unsupported query parameter: limit."
}
}{
"error": {
"code": "api_key_required",
"message": "Send an API key in the X-API-Key header or as a Bearer token."
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Get a rulebook's versions
Every recorded version of one rulebook above the markets: a Kalshi series (contract terms document, settlement sources, prohibitions, product metadata), a Kalshi event (settlement sources, exclusivity, strike period) or a Polymarket market’s resolution metadata. Each version carries the venue’s fields verbatim, the settlement sources read from them, the contract terms document in force with its extracted text, which fields changed from the version before and a diff. Use it to read the terms a whole series settles by and to see when they changed.
curl --request GET \
--url https://api.routeur.app/v1/rulebooks/{venue}/{kind}/{id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.routeur.app/v1/rulebooks/{venue}/{kind}/{id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.routeur.app/v1/rulebooks/{venue}/{kind}/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.routeur.app/v1/rulebooks/{venue}/{kind}/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"data": {
"venue": "kalshi",
"kind": "series",
"id": "KXCPI",
"markets": 48,
"versions": [
{
"venue": "kalshi",
"kind": "series",
"id": "KXCPI",
"content_hash": "2c9e7a1d4b6f8e0c1a3d5f7b9e1c3a5d7f9b1e3c5a7d9f1b3e5c7a9d1f3b5e7c",
"first_seen_at": "2026-09-14T12:00:00Z",
"last_seen_at": "2026-09-17T09:00:00Z",
"fields": {
"contract_terms_url": "https://assets.kalshi.com/contract_terms/KXCPI.pdf",
"contract_url": "https://assets.kalshi.com/regulatory/product-certifications/KXCPI.pdf",
"settlement_sources": [
{
"name": "Bureau of Labor Statistics",
"url": "https://www.bls.gov/cpi/"
}
],
"additional_prohibitions": [
"Persons who are employed by any of the Source Agencies are not permitted to trade on the Contract."
],
"product_metadata": {}
},
"settlement_sources": [
{
"name": "Bureau of Labor Statistics",
"url": "https://www.bls.gov/cpi/"
}
],
"source_url": "https://assets.kalshi.com/contract_terms/KXCPI.pdf",
"document": {
"url": "https://assets.kalshi.com/contract_terms/KXCPI.pdf",
"content_hash": "9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e7b9d1f3a5c7e9b1d",
"text": "KXCPI\nScope: These rules shall apply to this contract.\nUnderlying: The Consumer Price Index for All Urban Consumers...",
"fetched_at": "2026-09-17T03:10:00Z"
},
"changed_fields": []
}
]
}
}{
"error": {
"code": "invalid_parameter",
"message": "Invalid or unsupported query parameter: limit."
}
}{
"error": {
"code": "api_key_required",
"message": "Send an API key in the X-API-Key header or as a Bearer token."
}
}{
"error": {
"code": "<string>",
"message": "<string>"
}
}Authorizations
Path Parameters
The venue the market is listed on.
kalshi, polymarket series or event on Kalshi; market on Polymarket, whose resolution metadata is per market.
series, event, market The venue's id for the rulebook, such as a Kalshi series or event ticker, or a Polymarket market slug.
^[A-Za-z0-9][A-Za-z0-9_.-]{0,199}$Response
The rulebook and its versions, oldest first.
Show child attributes
Show child attributes