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.