Bill Radar API
A complete legislative + regulatory REST API over all 50 states, D.C. + Congress: bills, votes,
legislators, regulations, scorecards, similar-bills, advocacy-org target discovery, and a
Find Your Rep endpoint (address → district → seated officials).
JSON responses; cursor pagination ({ data: [...], next_cursor }); every
collection supports updated_since for incremental sync.
Authentication
Send your API token as a bearer credential:
Authorization: Bearer <token>
For drop-in migration from legacy tools, the API also accepts
Authorization: apikey <token>. Rate limits are per-tier; exceeding the
per-minute window returns 429.
Find Your Rep API
Standalone product
A self-serve address → district → seated officials API — a drop-in for address-based
representative lookups, ideal for teams migrating off a sunset civic API. Metered against
your plan's monthly lookup cap, JSON-first, with no credit expiry. Free tier includes
1,000 lookups / mo, then Developer ($49/mo) and Business ($199/mo).
GET /api/v1/representatives?address=123+Main+St,+Cheyenne,+WY
Authorization: Bearer <token>
{
"matched": true,
"geographies": { "matched": true, "state": "Wyoming", "upper_district": "12", "lower_district": "34" },
"representatives": [
{ "id": 1, "name": "Sam Senator", "party": "Republican", "chamber": "upper", "district": "12", "email": null }
]
}
Endpoints
Bills
| Method |
Path |
Description |
GET |
/v1/bills |
Search (q, jurisdiction, session, subject, status, updated_since, cursor) |
GET |
/v1/bills/ask |
Natural-language "ask your bills" RAG search |
GET |
/v1/bills/{id} |
Bill detail (incl. ai_summary) |
GET |
/v1/bills/{id}/explain |
Tiered plain-language explainer |
GET |
/v1/bills/{id}/copycats |
Copycat / model-legislation matches |
GET |
/v1/bills/{id}/changes |
Amendment change-summaries |
GET |
/v1/bills/{id}/sponsors |
Sponsors |
GET |
/v1/bills/{id}/votes |
Roll-call votes |
GET |
/v1/bills/{id}/actions |
Action history / timeline |
GET |
/v1/bills/{id}/text |
Current version extracted text + S3 link |
GET |
/v1/bills/{id}/legislators |
Take-Action legislator targets |
GET |
/v1/bills/{id}/committees |
Committees this bill was referred to |
GET |
/v1/bills/{id}/similar |
Cross-state similar bills (pgvector) |
GET |
/v1/bills/{id}/versions |
Version diffs (what changed between texts) |
GET |
/v1/bills/{id}/targets |
Ranked advocacy-org targets (types, limit) |
GET |
/v1/bills/{id}/outreach |
Composed outreach for matched orgs |
Legislators
| Method |
Path |
Description |
GET |
/v1/legislators/{id} |
Legislator detail |
Scorecards
| Method |
Path |
Description |
GET |
/v1/scorecards |
Vote scorecards (index) |
GET |
/v1/scorecards/{id} |
Scorecard detail |
Regulations
| Method |
Path |
Description |
GET |
/v1/regulations |
Regulations search |
GET |
/v1/regulations/{id} |
Regulation detail |
GET |
/v1/regulations/{id}/targets |
Ranked advocacy-org targets for a rule |
Find Your Rep API
| Method |
Path |
Description |
GET |
/v1/representatives |
Address → state + legislative districts + seated officials (find_your_rep scope) |
Search
| Method |
Path |
Description |
GET |
/v1/search |
Unified corpus search across bills + regulations |
GET |
/v1/comment-capabilities |
Agency comment-capability inventory |
Stakeholder pages & widgets
| Method |
Path |
Description |
GET |
/v1/stakeholder-pages/{slug} |
Published bill grids |
GET |
/v1/widgets/{type}/{token} |
Embeddable widget data (token-auth) |
Target discovery
| Method |
Path |
Description |
GET |
/v1/targets/advocacy-prospects |
Advocacy-displacement prospects |
Alerts & analytics
| Method |
Path |
Description |
GET/POST/DELETE |
/v1/alert_subscriptions |
Watch a bill sheet; daily digest of activity |
GET |
/v1/analytics/leads |
Lead production |
GET |
/v1/analytics/usage |
Your usage |
GET |
/v1/analytics/api |
API analytics |
GET |
/v1/analytics/summary |
Admin roll-up |
OCD division IDs
Every entity — bills, legislators, committees, jurisdictions, roll calls, events, and matched
reps — carries a stable ocd_id (aliased division_id on jurisdiction
envelopes). They implement the open
OpenCivicData division-id
standard, so the same id is stable across our API and interoperable with other civic datasets.
You can pass one straight back to GET /api/v1/coverage?ocd_id=… and
GET /api/v1/districts/:id/boundary.
Grammar: ocd-division/country:<cc>/state:<st>/<tier>:<id>.
Ids are lowercased and slugged (spaces → _), leading zeros are stripped
(05 → 5), and an at-large / single-district seat is numbered
1.
| Tier |
Example |
| State / jurisdiction |
ocd-division/country:us/state:tx |
| U.S. House district |
ocd-division/country:us/state:tx/cd:5 |
| State senate (upper) |
ocd-division/country:us/state:tx/sldu:12 |
| State house (lower) |
ocd-division/country:us/state:tx/sldl:34 |
| County |
ocd-division/country:us/state:tx/county:travis |
| Place (city) |
ocd-division/country:us/state:tx/place:austin |
| City council district |
ocd-division/country:us/state:tx/place:austin/council_district:5 |
| Canada (riding) |
ocd-division/country:ca/ed:24001 |
| UK (constituency, GSS) |
ocd-division/country:gb/constituency:e14000540 |
council_district ids populate as local boundaries come online; until a division's
boundary is loaded, /districts/:id/boundary returns 404 and
/coverage reports it as requestable.