# FEC Campaign Finance Totals API

> FEC Campaign Finance Totals API is a paid API for AI agents from 2s.io, paid per call via x402, $0.0012/call, status unknown (last checked 2026-09-14).

Returns aggregate financial summaries (receipts, disbursements, cash-on-hand, debt, contributions, refunds, transfers) per election cycle for federal candidates or committees

## Facts

- Endpoint: GET https://2s.io/api/gov/fec-totals
- Price: $0.0012/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/2s-io-f1c1c4cd
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_YhUO3zCOUVTud5aHV9yCR

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability 2s-io-f1c1c4cd
```

Example prompt: Can you pull up the top-line fundraising summary for presidential candidate P00009423 for the full 2020 election cycle — total raised, total spent, and cash on hand?

## When to prefer this

Use this endpoint when you need quick top-line campaign finance totals (raised, spent, cash-on-hand, debt) for a federal candidate or committee without paging through millions of itemized transactions. Prefer this over itemized transaction endpoints when the user asks 'how much did they raise/spend' questions. Use electionFull=true for presidential races spanning multiple cycles. Best for summary dashboards, quick comparisons, and eligibility checks based on financial standing.

## Known failure modes

- Missing required 'scope' parameter returns a 400 validation error
- Invalid candidateId or committeeId returns empty results rather than an error
- Unsupported office enum value (not P/S/H) causes a validation error
- Requesting electionFull=true for a committee (only valid for candidates) may be ignored or return an error
- Cycle values outside available FEC data range return empty result sets
- Rate limiting or payment failure returns 402 if USDC balance is insufficient

## How this service works

Aggregate financial summaries (receipts, disbursements, cash-on-hand, debt, transfers, refunds, contributions by source, etc.) per cycle for federal candidates (scope=candidates) or committees (scope=committees). Filter by candidateId / committeeId, cycle, office (P/S/H), party, state, district. For candidates, electionFull=true rolls all cycles of a single election into one row (e.g. a presidential cycle spans 4 years). Use this for top-line "how much did they raise/spend" answers without paging through millions of itemized transactions.

## Output

Returns one or more aggregate financial summary rows per election cycle, including total receipts, disbursements, cash-on-hand, debt, transfers, refunds, and contribution breakdowns by source — without requiring pagination through individual itemized transactions.

## Example request

```json
{
 "input": {
  "type": "http",
  "method": "GET",
  "queryParams": {
   "cycle": 2020,
   "scope": "candidates",
   "candidateId": "P00009423",
   "electionFull": true
  }
 }
}
```

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method",
    "queryParams"
   ],
   "properties": {
    "type": {
     "const": "http"
    },
    "method": {
     "const": "GET"
    },
    "queryParams": {
     "required": [
      "scope"
     ],
     "properties": {
      "page": {
       "type": "integer",
       "default": 1,
       "minimum": 1
      },
      "cycle": {
       "type": "integer"
      },
      "party": {
       "type": "string"
      },
      "scope": {
       "enum": [
        "candidates",
        "committees"
       ],
       "type": "string"
      },
      "state": {
       "type": "string"
      },
      "office": {
       "enum": [
        "P",
        "S",
        "H"
       ],
       "type": "string"
      },
      "perPage": {
       "type": "integer",
       "default": 25,
       "maximum": 100,
       "minimum": 1
      },
      "district": {
       "type": "string"
      },
      "candidateId": {
       "type": "string"
      },
      "committeeId": {
       "type": "string"
      },
      "electionFull": {
       "type": "boolean",
       "description": "Candidates only: aggregate full election cycle."
      }
     }
    }
   }
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/2s-io-f1c1c4cd/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from 2s.io](https://www.zero.xyz/host/2s.io/llms.txt)
