Quickstart

1. Get an API key

Sign in with your email, then create a key under API keys on My tracker. Keys start with cp_live_. Store it in an environment variable, not in your code:

export CHICAGO_POLITICS_KEY="cp_live_..."

2. Make a request

Search all legislation for "budget":

curl "https://www.chicagopolitics.org/api/v1/legislation?q=budget&limit=1" \
  -H "Authorization: Bearer $CHICAGO_POLITICS_KEY"
const res = await fetch('https://www.chicagopolitics.org/api/v1/legislation?q=budget&limit=1', {
  headers: { Authorization: 'Bearer ' + process.env.CHICAGO_POLITICS_KEY },
});
const { data, meta } = await res.json();
console.log(meta.total, data[0].title);
import os
import requests

r = requests.get(
    "https://www.chicagopolitics.org/api/v1/legislation",
    params={"q": "budget", "limit": 1},
    headers={"Authorization": f"Bearer {os.environ['CHICAGO_POLITICS_KEY']}"},
)
r.raise_for_status()
body = r.json()
print(body["meta"]["total"], body["data"][0]["title"])

3. Read the response

Every response has the same shape: data (the record or list), meta (counts, paging, and when the data was last updated), and links (where to go next).

{
  "data": [
    {
      "id": "1AB8959D-89B7-F111-AAAC-001DD80B58E5",
      "record": "O2026-0028931",
      "title": "Scope of services, budget and management agreement for Special Service Area (SSA) No. 54 (Sheridan Road) for Year 2027",
      "type": "Ordinance",
      "status": "In Committee",
      "introduced": "2026-09-23",
      "committee": "Committee on Economic, Capital and Technology Development",
      "sponsor": { "name": "Johnson, Brandon", "member": null },
      "links": {
        "page": "https://www.chicagopolitics.org/matter/1AB8959D-89B7-F111-AAAC-001DD80B58E5",
        "markdown": "https://www.chicagopolitics.org/matter/1AB8959D-89B7-F111-AAAC-001DD80B58E5.md",
        "api": "https://www.chicagopolitics.org/api/v1/legislation/1AB8959D-89B7-F111-AAAC-001DD80B58E5"
      }
    }
  ],
  "meta": {
    "count": 1,
    "total": 231,
    "limit": 1,
    "nextCursor": "MQ",
    "dataUpdated": "2026-10-07T01:37:20+00:00",
    "source": "Office of the City Clerk (eLMS) and Chicago Data Portal, via chicagopolitics.org",
    "license": "CC BY 4.0: cite Chicago Politics (chicagopolitics.org) and link to the page"
  },
  "links": {
    "self": "https://www.chicagopolitics.org/api/v1/legislation?q=budget&limit=1",
    "next": "https://www.chicagopolitics.org/api/v1/legislation?q=budget&limit=1&cursor=MQ"
  }
}