Skip to content

Developer API

Structured FEC data via REST API. Live 2026 election tracking, 538 current members, 13.8M+ FEC contributions. Votes updated daily, races and members weekly, contributions monthly.

Quick Start

Get your first result in 30 seconds. No credit card required.

1. Get your API key

2. Make your first request

curl -H "x-api-key: YOUR_KEY" https://whoboughtmyrep.com/api/v1/reps?state=GA&chamber=senate

Example Response

All endpoints return { success, data, meta }. Paginated responses include meta.count, meta.offset, and meta.limit (default 20, max 100). All keys are prefixed wbr_.

{
  "success": true,
  "data": [
    {
      "bioguide_id": "W000790",
      "name": "Warnock, Raphael G.",
      "party": "Democratic",
      "state": "GA",
      "chamber": "senate",
      "total_raised": 338000860.99,
      "total_funding": 411638341.95,
      "pac_percent": 0.91,
      "small_donor_percent": 68.4,
      "ie_support_total": 73637480.96,
      "grassroots_chamber_rank": 2
    }
  ],
  "meta": { "count": 2, "offset": 0, "limit": 20 }
}

Note: pac_percent and small_donor_percent are already percentages (e.g. 0.91 = 0.91%, not 91%).

Endpoints

Base URL: https://whoboughtmyrep.com/api/v1

EndpointTierDescriptionParameters
GET /repsFreeList & search current members of Congressq, state, chamber, party, limit, offset
GET /reps/{id}FreeFull politician profile + top industriesid = bioguide_id
GET /reps/{id}/committeesFreeCongressional committee membershipsnone (id in path)
GET /challengersFreeChallenger & candidate data (default: 2026 cycle)state, office, party, cycle, incumbent_challenge (I/C/O), limit, offset
GET /industriesFreeIndustry funding overview across all memberslimit
GET /electionsFree2026 race data with funding totalsstate, office, cook_rating, limit, offset
GET /reps/{id}/donorsProPaginated individual donor listlimit, offset
GET /reps/{id}/pac-donorsProPAC contributions to a politicianlimit, offset
GET /reps/{id}/industry-votesProIndustry money → voting record connectionsindustry, limit, offset
GET /reps/{id}/votesProIndividual voting recordlimit, offset
GET /donors/searchProSearch donors by name across all membersq, limit
GET /pacs/{id}ProPAC profile + top fundersid = FEC committee ID
GET /reps/{id}/independent-expendituresEnterpriseOutside spending for/against a politiciansup_opp (S=support, O=oppose), cycle, limit, offset
GET /roll-callsEnterpriseFull roll call votes with party breakdownschamber, congress, vote_category, limit, offset

Authentication

Pass your API key in the x-api-key header with every request.

fetch('https://whoboughtmyrep.com/api/v1/reps', { headers: { 'x-api-key': 'wbr_your_key_here' } })

Rate Limits

Limits reset at midnight UTC. Rate limit headers are included in every response.

TierRate LimitPrice
Free100 requests/day$0
Pro5,000 requests/day$49/mo
EnterpriseUnlimited$199/mo

Error Responses

Errors return a JSON body with an error field and the appropriate HTTP status code.

401  { "error": "Invalid or missing API key" }
403  { "error": "Pro or Enterprise tier required..." }
429  { "error": "Too Many Requests" }  // + Retry-After header
500  { "error": "Query failed" }

Data Notes

All data is sourced from the Federal Election Commission (FEC) and Congress.gov. Campaign finance data covers the 2020 cycle through present.

total_funding = total_raised + ie_support_total. Use this as the denominator for percentage calculations, not total_raised alone.

Industry attribution traces every dollar back through PAC hops. total_attributed is campaign-only (direct + PAC hops). IE spending is in ie_attributed_support_total separately.

Donations under $200 are not individually itemized by the FEC. small_donor_total reflects the aggregate from FEC summary filings.

Names are stored in FEC format: Last, First M.

Data sourced from the Federal Election Commission and Congress.gov. This is not an official government website.