OpenFEC · Capability

OpenFEC API

The OpenFEC API is a RESTful web service from the Federal Election Commission supporting full-text and field-specific searches on FEC data including candidates, committees, filings, financial summaries, and transaction schedules. Data are updated nightly.

Run with Naftiko OpenFecAPI

What You Can Do

GET
Listcandidates — List candidates
/candidates/
GET
Searchcandidates — Search candidates with principal committees
/candidates/search/
GET
Getcandidate — Retrieve a single candidate
/candidate/{candidate_id}
GET
Getcandidatetotals — Candidate financial totals
/candidate/{candidate_id}/totals/
GET
Getcandidatecommittees — Committees associated with a candidate
/candidate/{candidate_id}/committees/
GET
Listcommittees — List committees
/committees/
GET
Getcommittee — Retrieve a single committee
/committee/{committee_id}
GET
Getcommitteetotals — Committee financial totals
/committee/{committee_id}/totals/
GET
Listfilings — List filings
/filings/
GET
Listschedulea — Itemized individual contributions (Schedule A)
/schedules/schedule_a/
GET
Listscheduleb — Itemized disbursements (Schedule B)
/schedules/schedule_b/
GET
Listschedulee — Independent expenditures (Schedule E)
/schedules/schedule_e/
GET
Listelections — Election summaries by office, cycle, and district
/elections/
GET
Candidatenames — Candidate name typeahead
/names/candidates/
GET
Committeenames — Committee name typeahead
/names/committees/

MCP Tools

listcandidates

List candidates

read-only idempotent
searchcandidates

Search candidates with principal committees

read-only idempotent
getcandidate

Retrieve a single candidate

read-only idempotent
getcandidatetotals

Candidate financial totals

read-only idempotent
getcandidatecommittees

Committees associated with a candidate

read-only idempotent
listcommittees

List committees

read-only idempotent
getcommittee

Retrieve a single committee

read-only idempotent
getcommitteetotals

Committee financial totals

read-only idempotent
listfilings

List filings

read-only idempotent
listschedulea

Itemized individual contributions (Schedule A)

read-only idempotent
listscheduleb

Itemized disbursements (Schedule B)

read-only idempotent
listschedulee

Independent expenditures (Schedule E)

read-only idempotent
listelections

Election summaries by office, cycle, and district

read-only idempotent
candidatenames

Candidate name typeahead

read-only idempotent
committeenames

Committee name typeahead

read-only idempotent

Capability Spec

open-fec-capability.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: OpenFEC API
  description: The OpenFEC API is a RESTful web service from the Federal Election Commission supporting full-text and field-specific
    searches on FEC data including candidates, committees, filings, financial summaries, and transaction schedules. Data are
    updated nightly.
  tags:
  - Open
  - Fec
  - API
  created: '2026-05-06'
  modified: '2026-05-06'
capability:
  consumes:
  - type: http
    namespace: open-fec
    baseUri: https://api.open.fec.gov/v1
    description: OpenFEC API HTTP API.
    authentication:
      type: apikey
      in: query
      name: api_key
      value: '{{OPEN_FEC_TOKEN}}'
    resources:
    - name: candidates
      path: /candidates/
      operations:
      - name: listcandidates
        method: GET
        description: List candidates
        inputParameters:
        - name: q
          in: query
          type: string
          description: Full-text search.
        - name: candidate_id
          in: query
          type: array
        - name: cycle
          in: query
          type: array
        - name: office
          in: query
          type: array
        - name: state
          in: query
          type: string
        - name: party
          in: query
          type: string
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: candidates-search
      path: /candidates/search/
      operations:
      - name: searchcandidates
        method: GET
        description: Search candidates with principal committees
        inputParameters:
        - name: q
          in: query
          type: string
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: candidate-candidate-id
      path: /candidate/{candidate_id}
      operations:
      - name: getcandidate
        method: GET
        description: Retrieve a single candidate
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: candidate-candidate-id-totals
      path: /candidate/{candidate_id}/totals/
      operations:
      - name: getcandidatetotals
        method: GET
        description: Candidate financial totals
        inputParameters:
        - name: cycle
          in: query
          type: array
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: candidate-candidate-id-committees
      path: /candidate/{candidate_id}/committees/
      operations:
      - name: getcandidatecommittees
        method: GET
        description: Committees associated with a candidate
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: committees
      path: /committees/
      operations:
      - name: listcommittees
        method: GET
        description: List committees
        inputParameters:
        - name: q
          in: query
          type: string
        - name: committee_id
          in: query
          type: array
        - name: committee_type
          in: query
          type: string
        - name: cycle
          in: query
          type: array
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: committee-committee-id
      path: /committee/{committee_id}
      operations:
      - name: getcommittee
        method: GET
        description: Retrieve a single committee
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: committee-committee-id-totals
      path: /committee/{committee_id}/totals/
      operations:
      - name: getcommitteetotals
        method: GET
        description: Committee financial totals
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: filings
      path: /filings/
      operations:
      - name: listfilings
        method: GET
        description: List filings
        inputParameters:
        - name: candidate_id
          in: query
          type: array
        - name: committee_id
          in: query
          type: array
        - name: form_type
          in: query
          type: array
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: schedules-schedule-a
      path: /schedules/schedule_a/
      operations:
      - name: listschedulea
        method: GET
        description: Itemized individual contributions (Schedule A)
        inputParameters:
        - name: contributor_name
          in: query
          type: string
        - name: committee_id
          in: query
          type: array
        - name: two_year_transaction_period
          in: query
          type: integer
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: schedules-schedule-b
      path: /schedules/schedule_b/
      operations:
      - name: listscheduleb
        method: GET
        description: Itemized disbursements (Schedule B)
        inputParameters:
        - name: committee_id
          in: query
          type: array
        - name: recipient_name
          in: query
          type: string
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: schedules-schedule-e
      path: /schedules/schedule_e/
      operations:
      - name: listschedulee
        method: GET
        description: Independent expenditures (Schedule E)
        inputParameters:
        - name: candidate_id
          in: query
          type: array
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: elections
      path: /elections/
      operations:
      - name: listelections
        method: GET
        description: Election summaries by office, cycle, and district
        inputParameters:
        - name: cycle
          in: query
          type: integer
        - name: office
          in: query
          type: string
        - name: state
          in: query
          type: string
        - name: district
          in: query
          type: string
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: names-candidates
      path: /names/candidates/
      operations:
      - name: candidatenames
        method: GET
        description: Candidate name typeahead
        inputParameters:
        - name: q
          in: query
          type: string
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: names-committees
      path: /names/committees/
      operations:
      - name: committeenames
        method: GET
        description: Committee name typeahead
        inputParameters:
        - name: q
          in: query
          type: string
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
  exposes:
  - type: rest
    port: 8080
    namespace: open-fec-rest
    description: REST adapter for OpenFEC API.
    resources:
    - path: /candidates/
      name: listcandidates
      operations:
      - method: GET
        name: listcandidates
        description: List candidates
        call: open-fec.listcandidates
        outputParameters:
        - type: object
          mapping: $.
    - path: /candidates/search/
      name: searchcandidates
      operations:
      - method: GET
        name: searchcandidates
        description: Search candidates with principal committees
        call: open-fec.searchcandidates
        outputParameters:
        - type: object
          mapping: $.
    - path: /candidate/{candidate_id}
      name: getcandidate
      operations:
      - method: GET
        name: getcandidate
        description: Retrieve a single candidate
        call: open-fec.getcandidate
        outputParameters:
        - type: object
          mapping: $.
    - path: /candidate/{candidate_id}/totals/
      name: getcandidatetotals
      operations:
      - method: GET
        name: getcandidatetotals
        description: Candidate financial totals
        call: open-fec.getcandidatetotals
        outputParameters:
        - type: object
          mapping: $.
    - path: /candidate/{candidate_id}/committees/
      name: getcandidatecommittees
      operations:
      - method: GET
        name: getcandidatecommittees
        description: Committees associated with a candidate
        call: open-fec.getcandidatecommittees
        outputParameters:
        - type: object
          mapping: $.
    - path: /committees/
      name: listcommittees
      operations:
      - method: GET
        name: listcommittees
        description: List committees
        call: open-fec.listcommittees
        outputParameters:
        - type: object
          mapping: $.
    - path: /committee/{committee_id}
      name: getcommittee
      operations:
      - method: GET
        name: getcommittee
        description: Retrieve a single committee
        call: open-fec.getcommittee
        outputParameters:
        - type: object
          mapping: $.
    - path: /committee/{committee_id}/totals/
      name: getcommitteetotals
      operations:
      - method: GET
        name: getcommitteetotals
        description: Committee financial totals
        call: open-fec.getcommitteetotals
        outputParameters:
        - type: object
          mapping: $.
    - path: /filings/
      name: listfilings
      operations:
      - method: GET
        name: listfilings
        description: List filings
        call: open-fec.listfilings
        outputParameters:
        - type: object
          mapping: $.
    - path: /schedules/schedule_a/
      name: listschedulea
      operations:
      - method: GET
        name: listschedulea
        description: Itemized individual contributions (Schedule A)
        call: open-fec.listschedulea
        outputParameters:
        - type: object
          mapping: $.
    - path: /schedules/schedule_b/
      name: listscheduleb
      operations:
      - method: GET
        name: listscheduleb
        description: Itemized disbursements (Schedule B)
        call: open-fec.listscheduleb
        outputParameters:
        - type: object
          mapping: $.
    - path: /schedules/schedule_e/
      name: listschedulee
      operations:
      - method: GET
        name: listschedulee
        description: Independent expenditures (Schedule E)
        call: open-fec.listschedulee
        outputParameters:
        - type: object
          mapping: $.
    - path: /elections/
      name: listelections
      operations:
      - method: GET
        name: listelections
        description: Election summaries by office, cycle, and district
        call: open-fec.listelections
        outputParameters:
        - type: object
          mapping: $.
    - path: /names/candidates/
      name: candidatenames
      operations:
      - method: GET
        name: candidatenames
        description: Candidate name typeahead
        call: open-fec.candidatenames
        outputParameters:
        - type: object
          mapping: $.
    - path: /names/committees/
      name: committeenames
      operations:
      - method: GET
        name: committeenames
        description: Committee name typeahead
        call: open-fec.committeenames
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    port: 9090
    namespace: open-fec-mcp
    transport: http
    description: MCP adapter for OpenFEC API for AI agent use.
    tools:
    - name: listcandidates
      description: List candidates
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.listcandidates
      with:
        q: tools.q
        candidate_id: tools.candidate_id
        cycle: tools.cycle
        office: tools.office
        state: tools.state
        party: tools.party
      inputParameters:
      - name: q
        type: string
        description: Full-text search.
      - name: candidate_id
        type: array
        description: candidate_id
      - name: cycle
        type: array
        description: cycle
      - name: office
        type: array
        description: office
      - name: state
        type: string
        description: state
      - name: party
        type: string
        description: party
      outputParameters:
      - type: object
        mapping: $.
    - name: searchcandidates
      description: Search candidates with principal committees
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.searchcandidates
      with:
        q: tools.q
      inputParameters:
      - name: q
        type: string
        description: q
      outputParameters:
      - type: object
        mapping: $.
    - name: getcandidate
      description: Retrieve a single candidate
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.getcandidate
      outputParameters:
      - type: object
        mapping: $.
    - name: getcandidatetotals
      description: Candidate financial totals
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.getcandidatetotals
      with:
        cycle: tools.cycle
      inputParameters:
      - name: cycle
        type: array
        description: cycle
      outputParameters:
      - type: object
        mapping: $.
    - name: getcandidatecommittees
      description: Committees associated with a candidate
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.getcandidatecommittees
      outputParameters:
      - type: object
        mapping: $.
    - name: listcommittees
      description: List committees
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.listcommittees
      with:
        q: tools.q
        committee_id: tools.committee_id
        committee_type: tools.committee_type
        cycle: tools.cycle
      inputParameters:
      - name: q
        type: string
        description: q
      - name: committee_id
        type: array
        description: committee_id
      - name: committee_type
        type: string
        description: committee_type
      - name: cycle
        type: array
        description: cycle
      outputParameters:
      - type: object
        mapping: $.
    - name: getcommittee
      description: Retrieve a single committee
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.getcommittee
      outputParameters:
      - type: object
        mapping: $.
    - name: getcommitteetotals
      description: Committee financial totals
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.getcommitteetotals
      outputParameters:
      - type: object
        mapping: $.
    - name: listfilings
      description: List filings
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.listfilings
      with:
        candidate_id: tools.candidate_id
        committee_id: tools.committee_id
        form_type: tools.form_type
      inputParameters:
      - name: candidate_id
        type: array
        description: candidate_id
      - name: committee_id
        type: array
        description: committee_id
      - name: form_type
        type: array
        description: form_type
      outputParameters:
      - type: object
        mapping: $.
    - name: listschedulea
      description: Itemized individual contributions (Schedule A)
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.listschedulea
      with:
        contributor_name: tools.contributor_name
        committee_id: tools.committee_id
        two_year_transaction_period: tools.two_year_transaction_period
      inputParameters:
      - name: contributor_name
        type: string
        description: contributor_name
      - name: committee_id
        type: array
        description: committee_id
      - name: two_year_transaction_period
        type: integer
        description: two_year_transaction_period
      outputParameters:
      - type: object
        mapping: $.
    - name: listscheduleb
      description: Itemized disbursements (Schedule B)
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.listscheduleb
      with:
        committee_id: tools.committee_id
        recipient_name: tools.recipient_name
      inputParameters:
      - name: committee_id
        type: array
        description: committee_id
      - name: recipient_name
        type: string
        description: recipient_name
      outputParameters:
      - type: object
        mapping: $.
    - name: listschedulee
      description: Independent expenditures (Schedule E)
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.listschedulee
      with:
        candidate_id: tools.candidate_id
      inputParameters:
      - name: candidate_id
        type: array
        description: candidate_id
      outputParameters:
      - type: object
        mapping: $.
    - name: listelections
      description: Election summaries by office, cycle, and district
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.listelections
      with:
        cycle: tools.cycle
        office: tools.office
        state: tools.state
        district: tools.district
      inputParameters:
      - name: cycle
        type: integer
        description: cycle
      - name: office
        type: string
        description: office
      - name: state
        type: string
        description: state
      - name: district
        type: string
        description: district
      outputParameters:
      - type: object
        mapping: $.
    - name: candidatenames
      description: Candidate name typeahead
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.candidatenames
      with:
        q: tools.q
      inputParameters:
      - name: q
        type: string
        description: q
      outputParameters:
      - type: object
        mapping: $.
    - name: committeenames
      description: Committee name typeahead
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: open-fec.committeenames
      with:
        q: tools.q
      inputParameters:
      - name: q
        type: string
        description: q
      outputParameters:
      - type: object
        mapping: $.
binds:
- namespace: env
  keys:
    OPEN_FEC_TOKEN: OPEN_FEC_TOKEN