Returns Form 278 annual financial disclosures filed by members of Congress — assets, income, liabilities, transactions, gifts and outside positions. The same filings are published free as news at https://keyvex.com/disclosures under 5 U.S.C. § 13107(c).
Returns Form 278 (Public Financial Disclosure / Annual Financial Disclosure) filings — the annual snapshot members of Congress file each year showing assets, income sources, liabilities, transactions, gifts, outside positions, and (for spouse + dependent children) the same. The same filings are published free as news at https://keyvex.com/disclosures under 5 U.S.C. § 13107(c). SCOPE — v1 covers BOTH chambers: Senate (Senate eFD) and House (House Clerk). Filed by every senator and representative (and senior executive-branch officials, federal judges) by May 15 each year. Use this when the user asks about: a member's asset composition, outside income sources, board seats / outside positions, liabilities (mortgages, loans), or for news reporting on annual disclosures. CONTENT — when a filing's schedules were machine-parsed, content_parsed is true and the record carries structured assets (Schedule A) and liabilities arrays plus asset_count / liability_count. value_range / amount_range are the disclosed RANGES (e.g., '$50,001 - $100,000'), NOT point estimates — KeyVex does not collapse a range to a single number. SENATE rows carry the ranges verbatim. HOUSE rows are read from the House Clerk PDF by column position. On a House candidate or new-filer report, whose income prints in two columns ('current year to filing', 'preceding year'), income_range is empty — neither is the reporting period; report_url shows both. A row KeyVex could not read with confidence carries parse_unreliable: true, and for such rows report_url is authoritative. Net-worth roll-up is intentionally NOT provided (it would be a KeyVex-derived aggregate, not a disclosed value). When schedules are unavailable — Senate PAPER (scanned-image) filings, which carry no machine-readable text, or the occasional parse skip — content_parsed is false and coverage_note names the limitation; follow report_url to read the original. This honest coverage boundary is never a silent omission. Different from get_congressional_trades: PTRs are per-trade real-time notices (filed within 30-45 days), while Form 278 is the year-end balance-sheet snapshot. Combine both for the full activity + position view of a member. Report types: 'Annual' (yearly filing covering prior calendar year), 'New Filer' (initial disclosure on entering office), 'Termination' (final disclosure on leaving office), 'Combined' (annual+termination for filer who left mid-year), 'Amendment' (correction of a prior filing), 'Other' (rare).
Request
- Base URL: https://api.keyvex.com
- URL: https://api.keyvex.com/v1/annual-financial-disclosures
- Auth: API key in header x-api-key
Query parameters
Filer's bioguide_id (e.g., 'P000197' for Nancy Pelosi). Exact match. Most precise filter. A filing carries a bioguide_id only when exactly one member of Congress can be its filer: reports by candidates who never served carry none, and neither does a filing saved before its filer appeared in the member catalog. So for a brand-new member, cross-check with member_name.
Substring match against the filer's full name (case-insensitive). E.g., 'Pelosi', 'Mitch McConnell'. Use bioguide_id when possible for precision.
Filter to one chamber ('senate' or 'house'). v1 covers both.
Two-letter state code (e.g., 'CA', 'TX'). Exact match. Empty for candidate filings (the Senate eFD covers candidates too).
Exact match on the record's party, where the party is the party the member held on the date of the record (a trade's transaction date, a disclosure's filing date); for a date outside the member's terms in office, the party of their nearest term (the last one before that date, or the first one after it). So party='Democrat' matches filings made while the filer was a Democrat. Empty on filings by candidates who never served.
The year of the FILING period being reported on (NOT the date filed). Most filers report the prior calendar year — e.g., a May 2026 Annual filing has filing_year=2025. New Filer reports cover the partial year up to filing.
Filter to one filing flavor. Default is unfiltered (returns all types).
ISO date (YYYY-MM-DD). Lower bound on the chosen sort_by field. Defaults to filtering by filing_date.
ISO date (YYYY-MM-DD). Upper bound on the chosen sort_by field.
Field to sort by. Default 'filing_date' (most recent filings first).
Sort direction. Default 'desc'.
Max records to return (1-500). Default 50.
Response
JSON envelope: { results: [...], count, has_more }.
Changes
No recorded changes to this operation across all 1 revision of this API.