Get a rulebook's versions
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>"
}
}Rules
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.
GET
/
v1
/
rulebooks
/
{venue}
/
{kind}
/
{id}
Get a rulebook's versions
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>"
}
}