API REFERENCE
Free, open REST API for congressional accountability data — campaign finance, stock trades, voting records, travel disclosures, and legislation. Data from CongressWatch, rebuilt daily from public records.
Quick StartAuthenticationRate LimitsResponse FormatData NotesPublicMembersGlobal
QUICK START
curl -H "X-API-Key: YOUR_KEY" \
https://api.opensourceforall.com/api/v1/members/P000197/trades
Get a free API key →
AUTHENTICATION
Send your key in the X-API-Key header. Two endpoints are public: /v1/members and /v1/stats. Invalid keys return 401; exceeding your rate limit returns 429.
X-API-Key: osp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
RATE LIMITS
| Tier | Limit | Who |
|---|
| free | 1,000 req/hr | Anyone |
| discounted | 10,000 req/hr | Educators, nonprofits, researchers |
| paid | 10,000 req/hr | Commercial use |
RESPONSE FORMAT
Lists are paginated and wrapped with a meta block; single objects return only data. Pagination: page (default 1), per_page (default 50, max 100).
{
"data": [ ... ],
"meta": { "page": 1, "per_page": 50, "total": 536 }
}DATA NOTES
Field names are CongressWatch's native ones, passed through unchanged. A few shapes will surprise you:
| Field | Type | Note |
|---|
| cash_on_hand | string | Preformatted currency, e.g. $1,234,567 — not a number. |
| amount (trades) | string | null | A disclosure bracket, e.g. $15,001 - $50,000. Null on ~231 rows. |
| district | string | Empty string for senators. Always a string, never a number. |
| total_raised | number | null | Null for 69 of 536 members with no resolved FEC record. |
| dates | string | Mostly ISO (YYYY-MM-DD); some legacy trade/travel rows are MM/DD/YYYY. |
Coverage is uneven by design — trades exists for 124 members, travel for 307. A member with no trades returns an empty list, not a 404.
PUBLIC ENDPOINTS
LIVE
GET/api/v1/membersPUBLICThe leaderboard — every sitting member with their anomaly score. No API key required.
QUERY PARAMETERS
| Name | Type | Description |
|---|
| chamber | string | House or Senate |
| party | string | Republican, Democratic, Independent |
| state | string | Full state name |
| min_score | int | Minimum anomaly score (0–100) |
| search | string | Case-insensitive name substring |
| sort | string | field.direction, e.g. score.desc (score|name|state|total_raised) |
EXAMPLE RESPONSE
{
"data": [{
"id": "B001288",
"name": "Cory A. Booker",
"party": "Democratic",
"state": "New Jersey",
"chamber": "Senate",
"score": 32,
"total_raised": 5107416.85
}],
"meta": { "page": 1, "per_page": 50, "total": 9 }
}LIVE
GET/api/v1/statsPUBLICCorpus-wide totals and the last pipeline run. No API key required.
EXAMPLE RESPONSE
{
"data": {
"total_members": 537,
"members_with_scores": 509,
"last_updated": "2026-07-13T09:18:39.759170"
}
}MEMBER ENDPOINTS
Each takes a bioguide ID (e.g. P000197) and requires an API key.
LIVE
GET/api/v1/members/{bioguide_id}AUTHThe full vault for one member — every data block in a single object.
LIVE
GET/api/v1/members/{bioguide_id}/scoreAUTHAnomaly score with six weighted components, recomputed from live inputs. Returns stored, total, and drift.
LIVE
GET/api/v1/members/{bioguide_id}/tradesAUTHDisclosed stock trades (STOCK Act periodic transaction reports), newest first. Filter by ticker, type.
LIVE
GET/api/v1/members/{bioguide_id}/votesAUTHRecorded floor votes via GovTrack.
LIVE
GET/api/v1/members/{bioguide_id}/billsAUTHBills sponsored or cosponsored, with ALEC similarity and donor-interest analysis.
LIVE
GET/api/v1/members/{bioguide_id}/travelAUTHPrivately sponsored foreign travel disclosures.
LIVE
GET/api/v1/members/{bioguide_id}/donorsAUTHTop individual donors from FEC filings, largest first (native field: top_donors_list).
LIVE
GET/api/v1/members/{bioguide_id}/financesAUTHCampaign finance summary. cash_on_hand is a preformatted string, not a number.
GLOBAL ENDPOINTS
Cross-member queries. Each row carries the member it belongs to (bioguide_id, member_name, party, state, chamber).
LIVE
GET/api/v1/tradesAUTHEvery disclosed trade across all members (6,800+), newest first. Filter by ticker, type, chamber, party, state, start_date, end_date.
Every tracked bill across all members (5,200+), newest first. Filter by congress, keyword, chamber, party, min_alec_similarity (0–1).