Direct answer
To determine whether a nonprofit is a public charity or private foundation, use Pactman's foundation-classification fields rather than relying on the BMF subsection alone.
Start with foundation_type_code and foundation_type_description, then review foundation_code, foundation_code_description and foundation_509a_status. Use pub78_verified, the Pub. 78 contribution classification, source dates and irs_bmf_pub78_conflict as supporting context when your workflow needs to reconcile foundation classification across IRS sources.
Recommended verification flow
- Normalize the EIN. Remove spaces or dashes so
12-3456789becomes123456789. - Send the EIN to the Nonprofit Check Plus API. Use the single-EIN endpoint for one organization or the bulk endpoint for multiple EINs.
- Confirm the organization. Match
einandorganization_nameto the nonprofit you intended to classify. - Review foundation type. Evaluate
foundation_type_codeandfoundation_type_description. - Review the IRS foundation code. Evaluate
foundation_codeandfoundation_code_description. - Review 509(a) context. Use
foundation_509a_statusas an additional foundation-classification signal. - Keep BMF subsection separate. Review
bmf_subsectionandsubsection_description, but do not use them as the only public-charity/private-foundation classifier. - Review Pub. 78 contribution classification. When relevant, evaluate
pub78_verifiedand theorganization_typesinformation. - Check for source disagreement. Review
irs_bmf_pub78_conflict. - Check freshness and status history. Review
most_recent_bmf,most_recent_pub78,organization_info_last_modified, and revocation/reinstatement fields when the workflow needs a current classification decision.
Example request(s)
curl --request GET \
--url https://entities.pactman.org/api/entities/nonprofitcheck/v1/us/ein/YOUR_EIN \
--header 'Authorization: Bearer YOUR_API_KEY'
Implementation note: The endpoint name above reflects the Pactman single-EIN Nonprofit Check endpoint used in Pactman's Production/Customer Environment.
curl --request POST \
--url https://entities.pactman.org/api/entities/nonprofitcheckbulk/v1/us/eins \
--header 'accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '[
"YOUR_EIN_1",
"YOUR_EIN_2",
"YOUR_EIN_3",
"YOUR_EIN_4",
"YOUR_EIN_5"
]'
Implementation note: The endpoint name above reflects the Pactman bulk-EIN Nonprofit Check endpoint used in Pactman's Production/Customer Environment. You can have at most 50 EINs in a bulk-EIN Nonprofit Check endpoint request.
What your application should evaluate
| Signal | Why it matters | Typical application decision |
|---|---|---|
foundation_type_code / foundation_type_description |
Provides the normalized foundation classification and its text description in the Pactman response. | Use as a direct public-charity/private-foundation classification input. |
foundation_code / foundation_code_description |
Provides the IRS foundation code and its textual description. | Use to retain the underlying IRS organization-type context. |
foundation_509a_status |
Provides additional 509(a) foundation-status context. | Preserve as a separate classification attribute rather than overwriting the other foundation fields. |
bmf_subsection / subsection_description |
Describes the BMF subsection classification. | Use for tax-exempt subsection context, but not as the only public-charity/private-foundation classifier. |
pub78_verified |
Indicates whether the organization is included in the most recent Publication 78 data set used by Pactman. | Use when Pub. 78 classification or contribution eligibility matters to the workflow. |
organization_types |
Contains Pub. 78 contribution information including organization_type, deductibility_limitation and deductibility_status_description. |
Preserve the Pub. 78 contribution classification as a separate source signal. |
irs_bmf_pub78_conflict |
Indicates whether BMF and Pub. 78 differ on the organization's private-foundation classification. | Route source disagreement through explicit review or source-aware logic. |
| Source dates | most_recent_bmf, most_recent_pub78 and organization_info_last_modified provide freshness context. |
Use them when deciding which source information is current enough for the workflow. |
| Revocation fields | revocation_code, revocation_date and reinstatement_date expose revocation-related history. |
Keep status history separate from foundation classification, but consider it when the broader workflow needs current eligibility. |
Example decision logic
A practical foundation-classification layer might:
- match
einandorganization_nameto the intended nonprofit; - classify the organization using
foundation_type_codeandfoundation_type_description; - retain
foundation_code,foundation_code_descriptionandfoundation_509a_status; - keep
bmf_subsectionandsubsection_descriptionas separate BMF classification attributes; - preserve Pub. 78 contribution classification when relevant;
- flag
irs_bmf_pub78_conflictinstead of silently choosing one source; and - use source dates before treating a classification as current enough for the workflow.
The supplied bulk sample shows why these fields should remain separate. EIN "680343125" returns bmf_subsection: "03" and subsection_description: "501(c)(3) Public Charity", with foundation_code: "16", foundation_type_code: "pc" and foundation_type_description: "Public charity described in section 509(a)(1) or (2)". EIN "996103790" also returns bmf_subsection: "03" and the same subsection_description, while its foundation_code is "04", its foundation_type_code is "pf", and its foundation_type_description is "Private non-operating foundation (section 509(a))".
Important: The current sample demonstrates that BMF subsection and foundation classification are different dimensions. Do not hard-code a rule that assumes every record with the same bmf_subsection must have the same public-charity/private-foundation classification.
Why use a consolidated nonprofit verification API?
Public-charity/private-foundation determination can require more than one IRS-derived field. An application may need the foundation type, foundation code, 509(a) status, BMF subsection, Pub. 78 contribution classification, source-conflict flag and source dates to preserve the full classification context.
Pactman Nonprofit Check Plus returns those signals in one normalized response. The supplied single-EIN and bulk examples use the same current 43 organization-level fields, so the same classification logic can be reused across interactive and batch workflows.
One normalized response
Evaluate foundation type, IRS foundation code, 509(a) status, BMF subsection and Pub. 78 context from one Pactman organization record.
Separate source signals
Keep foundation classification, BMF subsection, Pub. 78 contribution information and irs_bmf_pub78_conflict distinct so downstream logic preserves what each source actually says.
Reusable compliance rules
Apply one foundation-classification layer across grantmaking, donation, donor-advised fund, nonprofit onboarding and recurring compliance workflows.
Developer-friendly automation
Convert the returned foundation fields into structured application attributes so public-charity/private-foundation classification can happen automatically from an EIN.
Frequently asked questions
Which Pactman field should I use first for public-charity/private-foundation classification?
Start with foundation_type_code and foundation_type_description, then retain the supporting foundation_code, foundation_code_description and foundation_509a_status fields.
Can I determine public-charity/private-foundation status from bmf_subsection alone?
No. The supplied API samples show organizations with the same bmf_subsection value while their foundation classifications differ. Keep the subsection fields separate from the foundation-specific fields.
What does irs_bmf_pub78_conflict tell me?
It indicates whether BMF and Pub. 78 provide differing reports on the organization's classification as a private foundation. Use it to preserve and route a cross-source disagreement instead of silently collapsing the sources.
Should Pub. 78 contribution classification be stored separately?
Yes. organization_types contains Pub. 78 contribution information such as organization_type, deductibility_limitation and deductibility_status_description. Keep that information separate from the foundation classification fields so your application preserves the meaning of each source.
Related Pactman artifacts
- How to Interpret IRS BMF Data for a Nonprofit
- How to Interpret a Nonprofit’s IRS Foundation Code
- How to Verify a Nonprofit When IRS BMF and Pub. 78 Data Conflict
Next step
Use the Pactman foundation-specific fields as the primary public-charity/private-foundation classification inputs, preserve BMF subsection and Pub. 78 contribution data separately, and explicitly handle irs_bmf_pub78_conflict when IRS-derived sources disagree.
Ready to automate foundation classification?
Use Pactman Nonprofit Check Plus API to bring public-charity and private-foundation classification directly into your application.