---
title: "Returns IRS Form 990-series e-filing records — the registry of every e-filed nonprofit return the IRS has released, 2017→present (~5.5M filings; ~400-750K/yr)"
method: GET
path: "/v1/nonprofit-filings"
---

# Returns IRS Form 990-series e-filing records — the registry of every e-filed nonprofit return the IRS has released, 2017→present (~5.5M filings; ~400-750K/yr)

`GET /v1/nonprofit-filings`

## Request

- Base URL: `https://api.keyvex.com`
- URL: `https://api.keyvex.com/v1/nonprofit-filings`
- Auth: API key in header `x-api-key`

Returns IRS Form 990-series e-filing records — the registry of every e-filed nonprofit return the IRS has released, 2017→present (~5.5M filings; ~400-750K/yr). One record per return: EIN, organization name, return type (990 = full; 990EZ = small; 990PF = private foundation; 990T = unrelated business income; the 2019-era index also carries IRS codes 990EO/990O verbatim), the tax period covered (YYYYMM), and the IRS release year. Use this when the user asks: does nonprofit X file with the IRS, when did a foundation last file, which returns has an EIN filed, or to anchor a nonprofit's identity (EIN) before joining grants / lobbying / OIG data by name.  Records carry the filing's extracted FINANCIALS: total_revenue, total_expenses, total_assets_eoy, net_assets_eoy, and officers[] — top 25 by reported compensation with name/title. Coverage (reconciled 2026-07-08): 100% for release years 2019-2026, 97% for 2018, 69% for 2017 — the shortfall is IRS-side (the pre-2017 XML archives that held those filings' documents were retired by the IRS; the registry rows remain, without financials). Meanings follow the form: for 990T, total_revenue is unrelated-business taxable income. Officer compensation is as reported to the IRS. sub_date is set only for 2019-era records (later IRS indexes carry only the year — KeyVex never fabricates dates); tax_period is the reliable time axis. A nonprofit's fiscal year varies — tax_period 202506 means the period ENDING June 2025.  Pure-publisher posture: the IRS index rows as published.

## Query parameters

- `object_id` string
- `ein` string
- `name` string
- `return_type` string
- `submission_year` integer
- `since` string
- `until` string
- `sort_order` 'asc' | 'desc'
- `limit` integer

## Response `200`

JSON envelope: { results: [...], count, has_more }.

## Other responses

- `400`: Invalid parameter.
- `401`: Missing or invalid API key.
- `402`: This tool requires a higher plan (upgrade_required). Retrying will not help.
- `429`: Tier rate/quota limit reached (rate_limited). Retry-After points at the reset.

---

[API](https://skmtc.dev/keyvex/apis/keyvex-api.md) · [All operations](https://skmtc.dev/keyvex/apis/keyvex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/keyvex/apis/keyvex-api/revisions/01c0210c19cd?raw)
