# Quickstart

### 1. Get an API key

[Sign in](https://www.chicagopolitics.org/signin?next=/account) with your email, then create a key under **API keys** on [My tracker](https://www.chicagopolitics.org/account). Keys start with `cp_live_`. Store it in an environment variable, not in your code:

```shell
export CHICAGO_POLITICS_KEY="cp_live_..."
```

### 2. Make a request

Search all legislation for "budget":

```bash
curl "https://www.chicagopolitics.org/api/v1/legislation?q=budget&limit=1" \
  -H "Authorization: Bearer $CHICAGO_POLITICS_KEY"
```

```javascript
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);
```

```python
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).

```json
{
  "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"
  }
}
```

---
Source: https://www.chicagopolitics.org/developers/quickstart · Chicago Politics, an independent, nonpartisan tracker of the Chicago City Council. Guide for agents: https://www.chicagopolitics.org/llms.txt
