KeyVex
Campaign finance & influence

FEC Candidates

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.

EndpointGET /v1/fec-candidate-profile
SourceFEC candidates + committees
Authx-api-key — a free key works

What it returns

One record per result. Fields (from a live response):

Filters

candidate_idFEC-assigned candidate ID (immutable across cycles), e.g., 'S6PA00091' for Pat Toomey, 'P80003338' for Mitt Romney's 2008 presidential bid. Direct…
candidate_nameCase-insensitive substring against the FEC-filed candidate name (typically LASTNAME, FIRSTNAME format). Example: 'mccormick' or 'collins'.
officeOffice code: H=House, S=Senate, P=President. Narrows ambiguous name matches.
state2-letter state abbreviation (e.g., 'PA', 'CA'). Empty for President. Combine with office=S to find the senators from a state.
districtHouse district as 2-digit string ('01'-'53') or 'AL' for at-large. Senate/President leave blank.
partyParty code: DEM | REP | LIB | GRE | IND | OTH.
cycleElection cycle year (e.g., 2026). Returns candidates whose cycles[] includes this value. Common cycles: 2022, 2024, 2026.
active_onlyWhen true, restricts to candidate_inactive=false (currently active filers). Default false (includes withdrawn / defeated / inactive).
include_committeesWhen true (default), each returned candidate is enriched with a `committees` array containing all FEC committees linked via candidate_ids[]. The…
sort_bySort key. Default: last_file_date (most recent first).
sort_orderDefault: desc.
limitMaximum candidates to return. Default 50, max 500.

Example request

curl "https://api.keyvex.com/v1/fec-candidate-profile?limit=1" \
  -H "x-api-key: YOUR_KEY"

Response

{
  "results": [
    {
      "incumbent_challenge": "O",
      "candidate_status": "C",
      "cycles": [
        2026
      ],
      "office": "S",
      "office_full": "Senate",
      "first_file_date": "2025-08-18",
      "candidate_id": "S6AL00476",
      "district": "00",
      "name": "MOORE, FELIX BARRY",
      "state": "AL",
      "active_through": 2026,
      "election_years": [
        2026
      ],
      "district_number": 0,
      "party": "REP",
      "candidate_inactive": false,
      "fec_url": "https://www.fec.gov/data/candidate/S6AL00476/",
      "party_full": "REPUBLICAN PARTY",
      "last_file_date": "2026-06-18",
      "scraped_at": "2026-06-21T10:30:04.565Z",
      "load_date": "2026-06-18T20:57:48",
      "committees": [
        {
          "committee_type_full": "Senate",
          "organization_type_full": "",
          "cycles": [
            2020,
            2022,
            2024,
            2026
          ],
          "treasurer_name": "LAPRADE, SHAG",
          "first_file_date": "2019-09-23",
          "filing_frequency": "Q",
          "sponsor_candidate_ids": [],
          "designation_full": "Principal campaign committee",
          "organization_type": "",
          "designation": "P",
          "state": "AL",
          "candidate_ids": [
            "H8AL02171",
            "S6AL00476"
          ],
          "committee_id": "C00720375",
          "party": "REP",
          "fec_url": "https://www.fec.gov/data/committee/C00720375/",
       
      …
    }
  ],
  "count": 1,
  "has_more": true
}

Example questions you can answer

Related datasets

Query FEC Candidates from your AI

Hand any AI your key + the OpenAPI spec and it can pull this dataset directly. Free key = full data, 60 requests/day.

Get a free key OpenAPI spec → REST docs →
← All 60+ datasets