Returns FEC-registered candidate profiles (House, Senate, President) and — when include_committees=true (default) — each candidate's associated FEC committees in the same response
Returns FEC-registered candidate profiles (House, Senate, President) and — when include_committees=true (default) — each candidate's associated FEC committees in the same response. Use this when the user asks about: who's running in race X, the campaign finance ID for a member, what PAC is sponsoring a candidate, or to bridge from a Congressional member name to their FEC committee_id before looking up contributions (v1.1 tool). Source: api.open.fec.gov — the official Federal Election Commission public-disclosure API. Records include current sitting members, primary challengers, defeated candidates, future-cycle registrants, and presidential candidates. Cycles tracked: 2022, 2024, 2026. Filter by candidate_id for the fastest direct lookup. Otherwise use candidate_name (case-insensitive substring) optionally narrowed by office + state + cycle. FEC names are typically filed as LASTNAME, FIRSTNAME (e.g., 'MCCORMICK, DAVE' for Dave McCormick). Office codes: H (House), S (Senate), P (President). Party codes: DEM (Democratic), REP (Republican), LIB (Libertarian), GRE (Green), IND (Independent), OTH (Other). Incumbent_challenge: I (Incumbent), C (Challenger), O (Open seat). When active_only=true, only candidates with candidate_status='C' (currently filing) are returned. Committee designations on returned committees: P (Principal campaign committee — the primary donation recipient), A (Authorized — accepts donations on candidate's behalf), B (Lobbyist), D (Leadership PAC), J (Joint fundraiser), U (Unauthorized). The Principal (P) committee is the one you want for 'donations to X's campaign'. Committee types: H (House campaign), S (Senate campaign), P (Presidential campaign), Q (PAC qualified), N (PAC non-qualified), O (Super PAC), I (Independent expenditure non-PAC), X/Y/Z (Party), V/W (Carey/hybrid). For 'follow the money to Senator X', look for designation=P, committee_type=S among the returned committees.
Request
- Base URL: https://api.keyvex.com
- URL: https://api.keyvex.com/v1/fec-candidate-profile
- Auth: API key in header x-api-key
Query parameters
FEC-assigned candidate ID (immutable across cycles), e.g., 'S6PA00091' for Pat Toomey, 'P80003338' for Mitt Romney's 2008 presidential bid. Direct doc lookup, fastest path.
Case-insensitive substring against the FEC-filed candidate name (typically LASTNAME, FIRSTNAME format). Example: 'mccormick' or 'collins'.
Office code: H=House, S=Senate, P=President. Narrows ambiguous name matches.
2-letter state abbreviation (e.g., 'PA', 'CA'). Empty for President. Combine with office=S to find the senators from a state.
House district as 2-digit string ('01'-'53') or 'AL' for at-large. Senate/President leave blank.
Party code: DEM | REP | LIB | GRE | IND | OTH.
Election cycle year (e.g., 2026). Returns candidates whose cycles[] includes this value. Common cycles: 2022, 2024, 2026.
When true, restricts to candidate_inactive=false (currently active filers). Default false (includes withdrawn / defeated / inactive).
When true (default), each returned candidate is enriched with a committees array containing all FEC committees linked via candidate_ids[]. The principal campaign committee (designation='P') is listed first. Set false to skip the committee fetch for faster responses when you only need candidate profile fields.
Sort key. Default: last_file_date (most recent first).
Default: desc.
Maximum candidates to return. Default 50, max 500.
Response
JSON envelope: { results: [...], count, has_more }.
Changes
No recorded changes to this operation across all 1 revision of this API.