{
  "id": "exemptorgs",
  "name": "Exempt Organizations",
  "description": "IRS tax-exempt organization intelligence: Business Master File and Publication 78 identity, auto-revocations, 1023-EZ approvals, mirrored Form 990 e-filed returns and PDFs, geocoded locations, website-domain resolution, Section 527 political organizations, and linked FEC committees, filings, and itemized receipts.",
  "kind": "api",
  "audience": "public",
  "access": "open",
  "auth": "No authentication is required for documented public read operations; ingest sessions, release promotion, overrides, geography and domain jobs, and maintenance routes are private.",
  "lifecycle": "active",
  "health": "operational",
  "canonicalUrl": "https://exemptorgs.datasourceapi.com",
  "aliases": [],
  "docsUrl": "https://exemptorgs.datasourceapi.com/api/v1/docs",
  "docsMediaType": "text/html",
  "openapiUrl": "https://exemptorgs.datasourceapi.com/openapi.yaml",
  "openapiMediaType": "text/yaml",
  "statusUrl": "https://exemptorgs.datasourceapi.com/api/v1/status",
  "statusMediaType": "application/json",
  "repository": "https://github.com/coopalliance/cca-exemptorgs",
  "governanceNote": "The service is an IRS and FEC mirror, not an authority: records are reproduced from published bulk releases and remain release-based rather than real-time, and read-time overrides are recorded explicitly to preserve mirror purity. Coverage is uneven across cycles because upstream release schedules differ, and 1023-EZ approval data is only current to the 2023 release. Geocoding is derived rather than authoritative: 145,722 of 1,983,563 organizations are unmatched and precision ranges from rooftop to postal-centroid. Master canonical identifier links to the corporate entity graph are not yet populated. The service does not publish llms.txt or an RFC 9727 catalog, and its OpenAPI document omits operationId, so the operations recorded here are catalog-curated identifiers for verified public routes.",
  "serviceBinding": {
    "supported": true,
    "description": "Approved fleet Workers call the Worker through the EXEMPTORGS service binding using the same documented /api/v1 routes; the repository publishes a service-binding contract. The service itself consumes the geocode, postal-facilities, and taxonomy bindings for address context."
  },
  "provenance": [
    {
      "name": "Internal Revenue Service",
      "description": "EO BMF, Publication 78, auto-revocations, 1023-EZ approvals, Form 990 e-file releases, Form 990 website fields, and Section 527 Form 8871 and 8872 records.",
      "url": "https://www.irs.gov/charities-non-profits/exempt-organizations-business-master-file-extract-eo-bmf"
    },
    {
      "name": "Federal Election Commission",
      "description": "Committee master records, filings, whole-report PDFs, and itemized Schedule A receipts mirrored to link Section 527 organizations to federal committees.",
      "url": "https://www.fec.gov/data/browse-data/?tab=bulk-data"
    },
    {
      "name": "CCA Exempt Orgs repository contract",
      "description": "Routes, ingest sessions, release promotion, permalinks, service-binding contract, and public read surface verified at repository commit df625b42dfba198c1155de0850273a60bab73656.",
      "url": "https://github.com/coopalliance/cca-exemptorgs/tree/df625b42dfba198c1155de0850273a60bab73656"
    },
    {
      "name": "Live coverage and cycle bookkeeping",
      "description": "Public status verified 2026-09-08 reports 1,983,563 organizations, 1,435,544 Publication 78 rows, 1,187,976 revocations, 509,064 1023-EZ approvals, 4,608,757 mirrored e-filed returns, 2,212,937 identifiers and indexed website domains, 59,128 Section 527 organizations, 77,182,209 FEC contribution records, and 1,837,841 geocoded organizations.",
      "url": "https://exemptorgs.datasourceapi.com/api/v1/status"
    }
  ],
  "freshness": {
    "cadence": "Monthly IRS release cycles, currently 2026-07 for the EO Business Master File and Publication 78 and 2026-08 for auto-revocations, with annually promoted Form 990 e-file releases whose 2026 release was promoted 2026-08-28, 2026 FEC cycles, 1023-EZ data current only to 2023, and a cron-triggered archive-first refresh handoff.",
    "lastVerified": "2026-09-08"
  },
  "capabilities": [
    "change-history",
    "charities",
    "domain-resolution",
    "fec-filings",
    "filing-documents",
    "form-990",
    "geospatial-search",
    "identifier-resolution",
    "nonprofits",
    "political-organizations",
    "tax-exempt-organizations",
    "taxonomy-lookup"
  ],
  "examples": [
    {
      "label": "Service status",
      "description": "Inspect coverage, ingest cycles, geography jobs, and e-file releases.",
      "method": "GET",
      "url": "https://exemptorgs.datasourceapi.com/api/v1/status"
    },
    {
      "label": "Search organizations",
      "description": "Search names and places across the Business Master File and return one match.",
      "method": "GET",
      "url": "https://exemptorgs.datasourceapi.com/api/v1/search?q=american%20red%20cross&limit=1"
    },
    {
      "label": "Organization bundle",
      "description": "Read the full organization bundle for the American National Red Cross by EIN.",
      "method": "GET",
      "url": "https://exemptorgs.datasourceapi.com/api/v1/organization/530196605"
    },
    {
      "label": "Classification catalogs",
      "description": "List the versioned NTEE and EO subsection classification catalogs available for lookup.",
      "method": "GET",
      "url": "https://exemptorgs.datasourceapi.com/api/v1/taxonomy"
    }
  ],
  "operations": [
    {
      "operationId": "getExemptOrganizationsHealth",
      "summary": "Get the service banner and documentation links.",
      "method": "GET",
      "path": "/api/v1/health"
    },
    {
      "operationId": "getExemptOrganizationsStatus",
      "summary": "Get exempt-organization data health.",
      "method": "GET",
      "path": "/api/v1/status"
    },
    {
      "operationId": "listExemptOrganizationSources",
      "summary": "List upstream sources merged with live cycle bookkeeping.",
      "method": "GET",
      "path": "/api/v1/sources"
    },
    {
      "operationId": "listTaxonomies",
      "summary": "List available versioned classification catalogs.",
      "method": "GET",
      "path": "/api/v1/taxonomy"
    },
    {
      "operationId": "lookupTaxonomyCode",
      "summary": "Resolve an NTEE code or EO subsection label through one typed lookup.",
      "method": "GET",
      "path": "/api/v1/taxonomy/lookup"
    },
    {
      "operationId": "getTaxonomyCatalog",
      "summary": "Get a complete NTEE or EO subsection code catalog.",
      "method": "GET",
      "path": "/api/v1/taxonomy/{catalog}"
    },
    {
      "operationId": "getTaxonomyCode",
      "summary": "Resolve one NTEE or EO subsection code.",
      "method": "GET",
      "path": "/api/v1/taxonomy/{catalog}/{code}"
    },
    {
      "operationId": "searchOrganizations",
      "summary": "Search by EIN, domain, name, or place across exempt-organization records.",
      "method": "GET",
      "path": "/api/v1/search"
    },
    {
      "operationId": "searchOrganizationsAlias",
      "summary": "Search organizations through the documented search alias.",
      "method": "GET",
      "path": "/api/v1/organization/search"
    },
    {
      "operationId": "getOrganizationsGeoJson",
      "summary": "Get geocoded organizations as a GeoJSON feature collection.",
      "method": "GET",
      "path": "/api/v1/organizations.geojson"
    },
    {
      "operationId": "getNearestOrganizations",
      "summary": "Find organizations nearest a point over geocoded coordinates.",
      "method": "GET",
      "path": "/api/v1/organization/nearest"
    },
    {
      "operationId": "getOrganization",
      "summary": "Get the full organization bundle for one EIN.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}"
    },
    {
      "operationId": "listOrganizationEfilings",
      "summary": "List every mirrored e-filed return for one organization.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/efilings"
    },
    {
      "operationId": "getOrganizationFinancials",
      "summary": "Get Form 990 headline summaries, newest first.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/financials"
    },
    {
      "operationId": "getOrganizationFiling",
      "summary": "Get the full parsed Form 990 JSON for one tax year.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/filing/{tax_year}"
    },
    {
      "operationId": "getOrganizationCompliance",
      "summary": "Get the computed deductibility, revocation, and filing compliance view.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/compliance"
    },
    {
      "operationId": "getOrganizationFilingStatus",
      "summary": "Explain whether and why a standalone annual Form 990 is expected.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/filing-status"
    },
    {
      "operationId": "getOrganizationIdentifiers",
      "summary": "Get the identifier graph in which the EIN is canonical.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/identifiers"
    },
    {
      "operationId": "getOrganizationRelationships",
      "summary": "Get national, chapter, booster, and affiliate relationships.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/relationships"
    },
    {
      "operationId": "getOrganizationPolitical",
      "summary": "Get Section 527 identity, disclosures, and linked FEC committees.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/political"
    },
    {
      "operationId": "getOrganizationPoliticalContributions",
      "summary": "Get Form 8872 Schedule A contribution records from a bounded page.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/political/contributions"
    },
    {
      "operationId": "getOrganizationPoliticalExpenditures",
      "summary": "Get Form 8872 Schedule B expenditure records from a bounded page.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/political/expenditures"
    },
    {
      "operationId": "getOrganizationHistory",
      "summary": "Get snapshot cycles and change counts per cycle.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/history"
    },
    {
      "operationId": "getOrganizationChanges",
      "summary": "Get the field-level change log for one organization.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/changes"
    },
    {
      "operationId": "listOrganizationSnapshots",
      "summary": "List frozen per-cycle snapshots in the archive.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/snapshots"
    },
    {
      "operationId": "getOrganizationSnapshot",
      "summary": "Get one frozen per-cycle snapshot.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/snapshots/{cycle}"
    },
    {
      "operationId": "getOrganizationRaw",
      "summary": "Get raw source rows exactly as ingested in the latest snapshot.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/raw"
    },
    {
      "operationId": "getOrganizationRawCycle",
      "summary": "Get raw source rows for a specific cycle.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/raw/{cycle}"
    },
    {
      "operationId": "compareOrganizationCycles",
      "summary": "Diff two snapshot cycles for one organization.",
      "method": "GET",
      "path": "/api/v1/organization/{ein}/compare"
    },
    {
      "operationId": "getFilingMetadata",
      "summary": "Get e-filed return metadata with viewer and XML links.",
      "method": "GET",
      "path": "/api/v1/filing/{objectId}"
    },
    {
      "operationId": "getFilingXml",
      "summary": "Stream the original e-filed XML from the mirrored IRS archive.",
      "method": "GET",
      "path": "/api/v1/filing/{objectId}.xml"
    },
    {
      "operationId": "getFilingPdf",
      "summary": "Download a rendered PDF of the complete self-hosted return.",
      "method": "GET",
      "path": "/api/v1/filing/{objectId}.pdf"
    },
    {
      "operationId": "getPoliticalFiling",
      "summary": "Get mirrored IRS Form 8871 or 8872 filing metadata.",
      "method": "GET",
      "path": "/api/v1/political-filing/{source}/{filingId}"
    },
    {
      "operationId": "getPoliticalFilingPdf",
      "summary": "Stream a digest-verified IRS Form 8871 or 8872 PDF.",
      "method": "GET",
      "path": "/api/v1/political-filing/{source}/{filingId}.pdf"
    },
    {
      "operationId": "getFecCommittee",
      "summary": "Get FEC committee identity, Section 527 links, and recent filings.",
      "method": "GET",
      "path": "/api/v1/fec/committee/{committeeId}"
    },
    {
      "operationId": "getFecCommitteeContributions",
      "summary": "Get itemized FEC receipts from one bounded contribution page.",
      "method": "GET",
      "path": "/api/v1/fec/committee/{committeeId}/contributions"
    },
    {
      "operationId": "getFecFiling",
      "summary": "Get FEC filing metadata with local raw and PDF availability.",
      "method": "GET",
      "path": "/api/v1/fec/filing/{fileNumber}"
    },
    {
      "operationId": "getFecFilingPdf",
      "summary": "Stream a digest-verified whole-report FEC PDF.",
      "method": "GET",
      "path": "/api/v1/fec/filing/{fileNumber}.pdf"
    },
    {
      "operationId": "getChangeFeed",
      "summary": "Get the global field-level change feed.",
      "method": "GET",
      "path": "/api/v1/changes"
    },
    {
      "operationId": "compareCycles",
      "summary": "Get the global cycle-over-cycle change summary.",
      "method": "GET",
      "path": "/api/v1/compare"
    },
    {
      "operationId": "resolveOrganizationIdentifier",
      "summary": "Resolve an external identifier to the canonical organization bundle.",
      "method": "GET",
      "path": "/api/v1/resolve/{scheme}/{value}"
    },
    {
      "operationId": "resolveOrganizationDomain",
      "summary": "Resolve a website domain to linked organizations.",
      "method": "GET",
      "path": "/api/v1/domain/{domain}"
    },
    {
      "operationId": "resolveOrganizationDomainQuery",
      "summary": "Resolve a website URL or domain supplied as a query parameter.",
      "method": "GET",
      "path": "/api/v1/domain"
    },
    {
      "operationId": "getPermalink",
      "summary": "Replay a frozen citation permalink envelope verbatim.",
      "method": "GET",
      "path": "/api/v1/permalink/{id}"
    }
  ],
  "agentReadiness": {
    "level": "partial",
    "score": 78,
    "summary": "Live status, source bookkeeping, OpenAPI 3.1, HTML documentation, citation permalinks, and 44 verified public read operations are published. The upstream document omits operationId and response examples, and neither llms.txt nor RFC 9727 discovery is served, so the recorded operation identifiers are catalog-curated rather than upstream-authoritative."
  }
}