Quickstart
Make your first Openborough API call in two minutes.
1. Create a key
Sign up (free — no credit card) and create a key on the API Keys page of your dashboard. Copy the obp_live_... secret when it's shown; that's the only time you'll see it.
2. Make a request
curl "https://pro.openborough.nyc/api/v1/matters?category=legislation&limit=2" \ -H "Authorization: Bearer obp_live_YOUR_KEY"
{
"data": [
{
"id": 12345,
"file": "Int 0987-2026",
"title": "A Local Law to amend the administrative code...",
"short_title": "Curb-cut permit reform",
"summary": "This bill would require...",
"ai_summary": "Requires DOT to publish curb-cut permits within 30 days.",
"type": "Introduction",
"body": "Committee on Transportation",
"status": "Committee",
"introduced_at": "2026-06-11T00:00:00.000Z",
"last_modified_at": "2026-09-20T14:03:22.000Z"
}
],
"pagination": { "total": 1284, "limit": 2, "offset": 0, "has_more": true }
}
3. Drill into one matter
Take an id from the list and fetch its votes and sponsors:
curl "https://pro.openborough.nyc/api/v1/matters/12345" \ -H "Authorization: Bearer obp_live_YOUR_KEY"
{
"data": {
"id": 12345,
"file": "Int 0987-2026",
"title": "A Local Law to amend the administrative code...",
"votes": [
{ "person_name": "Rita Joseph", "district": "40", "value": "Affirmative" }
],
"sponsors": [
{ "name": "Rita Joseph", "district": "40", "type": "Primary", "sequence": 1 }
],
"translations": [
{ "locale": "es", "title": "...", "summary": "..." }
]
}
}
That's the whole loop: list → detail. See the endpoint reference for every filter.