# Errors

Errors use standard HTTP status codes and an RFC 9457 problem-details body (`application/problem+json`). `detail` is written to be shown to a person or read by an agent, and says how to fix the request.

```json
{
  "type": "https://www.chicagopolitics.org/developers/errors",
  "title": "Not found",
  "status": 404,
  "detail": "No member with id 999 (use ward 1-50, or 100 + ward for a former member)."
}
```

## Status codes

| Status | Title | What to do |
| --- | --- | --- |
| `400` | Bad request | A parameter is invalid; `detail` names it (for example "limit must be an integer from 1 to 200.") |
| `401` | API key required / Invalid API key | Send a valid key. The `WWW-Authenticate` header points OAuth clients to the authorization server |
| `404` | Not found | No such member, matter, meeting, or endpoint. Check the id or the path |
| `429` | Too many requests / Daily limit reached | Wait `Retry-After` seconds (see [rate limits](https://www.chicagopolitics.org/developers/rate-limits)) |
| `503` | Unavailable | A data source is loading or briefly down. Retry later |

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