Skip to content
FonteumPublic-records evidence
Docs · Exclusion screening in CI/CD

Fail the build before you onboard an excluded provider

The exclusion endpoint screens a list of NPIs against the excluded/compromised-anywhere check, so a pull request, an onboarding job, or a deploy can fail before a provider who is on a federal or state exclusion list slips through. Call it from a shell loop or a GitHub Actions step. Every result carries its source, public list URL to re-confirm against, record date, and limitations metadata.

REST base: https://api.fonteum.com/v1 · Credential: Authorization: Bearer $FONTEUM_API_KEY

What it screens

For each NPI, call GET /api/v1/exclusions/{npi} and partitions the result into two clearly-distinct layers. The umbrella signal, compromised_anywhere, is true when either layer matches.

LayerMeaningSources
ExcludedHard, in-force debarment — the provider may not be paid by the program.OIG LEIE · SAM.gov · currently loaded state Medicaid exclusion lists (GA/IA/MD/MS/MT/NC/ND/NH/NY/OH/PA/TN/WA); other states not covered
Compromised-flagA monitoring or sanction signal short of exclusion.OIG Corporate Integrity Agreements · CMS Civil Money Penalties

Screening aid — re-confirm any match against the primary source list before acting. An absence is reported as a no-match only under reconciled current coverage. Stale or unreconciled coverage is indeterminate, should fail the workflow, and is not a clearance. Not a legal or credentialing certification.

Shell

Call the exclusion endpoint directly. The second example reads one NPI per line fromnpis.txt; adapt the input parsing to your roster format.

# Screen one NPI with an account key or the read-only demo key.
FONTEUM_API_KEY="${FONTEUM_API_KEY:-fnt_DEMO_PUBLIC_V1}"
curl --fail-with-body \
  "https://api.fonteum.com/v1/exclusions/1245319599" \
  -H "Authorization: Bearer $FONTEUM_API_KEY" \
  -H "Accept: application/json"

# Screen a newline-delimited list of NPIs and keep the JSON response for each.
while IFS= read -r npi; do
  curl --fail-with-body \
    "https://api.fonteum.com/v1/exclusions/$npi" \
    -H "Authorization: Bearer $FONTEUM_API_KEY" \
    -H "Accept: application/json"
done < npis.txt

Response fields

Read both the determination and the coverage context before deciding how a pipeline should proceed. A no-match is not a clearance when coverage is stale or unreconciled.

{
  "data": {
    "npi": "1245319599",
    "excluded": false,
    "compromised_anywhere": false,
    "determination": "no_match",
    "sources": { "...": "source context" },
    "coverage": { "...": "coverage context" }
  },
  "meta": {
    "data_freshness": [{ "source": "…", "cadence": "…" }],
    "limitations_url": "https://fonteum.com/methodology#limitations"
  }
}

GitHub Actions

Add the same request to any workflow — onboarding gates, vendor-roster pull requests, or pre-deploy checks. Store the issued key in a repository or organization secret rather than placing it in the workflow file.

# .github/workflows/provider-onboarding.yml
name: provider-onboarding
on: [pull_request]

jobs:
  screen-providers:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Screen NPIs against Fonteum exclusion sources
        env:
          FONTEUM_API_KEY: ${{ secrets.FONTEUM_API_KEY }}
        run: |
          while IFS= read -r npi; do
            response=$(curl --silent --show-error --fail-with-body \
              "https://api.fonteum.com/v1/exclusions/$npi" \
              -H "Authorization: Bearer $FONTEUM_API_KEY" \
              -H "Accept: application/json")
            echo "$response" | jq .
            excluded=$(echo "$response" | jq -r '.data.excluded // false')
            if [ "$excluded" = "true" ]; then
              echo "Exclusion match for $npi" >&2
              exit 1
            fi
          done < npis.txt

Screen a fixed roster inline

      - name: Set the NPI list for the screening step
        run: |
          printf '%s\n' 1245319599 1003002627 > npis.txt

Failure policy

  • Exclusion match. The workflow example exits non-zero when data.excluded is true.
  • Coverage or API failure. Treat stale or indeterminate coverage, a network error, and a non-success API response as a failure condition rather than a pass.
  • Other signals. Decide explicitly whether data.compromised_anywhere should block your workflow; it can include a monitoring or sanction signal short of an exclusion.

Keep this policy in your own repository so it is reviewed alongside the workflow that uses it.

Auth, rate limits, and source metadata

  • Demo key. The read-only fnt_DEMO_PUBLIC_V1 credential is limited to 20 requests/minute and 100 requests/day per trusted source IP.
  • Account key. Create a developer account at /account/signup, issue a fnt_… key from the dashboard, and send it as Authorization: Bearer $FONTEUM_API_KEY. In GitHub Actions, store it as a repository or organization secret.
  • Source on every match. Each match prints the issuing list, the public source URL to re-confirm against, the in-force date, the snapshot date, and limitations metadata. See methodology and limitations.
  • Read-only. The screening endpoint only reads. It does not mutate Fonteumdata.

What’s on file, by the numbers

Platform snapshot · 2026-08-25

13.4Mproviders & companiesProviders, organizations, owners, and facilities on file
26.2Msource-linked factsSource-linked field facts in the dated platform snapshot
90sources with dataDistinct snapshot source IDs with at least one positive record count
70fresh sourcesDistinct source IDs whose latest positive-data snapshot falls within the preceding 45 days
111sources integratedActive registry rows; integration does not establish a load
13state Medicaid jurisdictionsDistinct states represented in the state-exclusions serving table

Integrated, with-data, and fresh-observation counts are separate. No platform-wide source-completeness count is published. Completeness is source-specific and must be evaluated against the named source's expected scope. State coverage is a separate jurisdiction measure.

Source authority is record-specific

Use the issuer named on the record.

Fonteum spans federal, state, and global public publishers. A source page or returned record identifies its issuer and dataset where that metadata is available. A platform registry count does not assign every page to one authority or establish loaded, fresh, or complete coverage.

Browse source records and their stated limitations →

Reproducible by design

Inspect the evidence each published figure actually supplies.

Source and date

Research pages expose the named public file and observation date where those fields are available. Source-file SHA-256 coverage is separate; facts do not currently link deterministically to signatures.

Available derivation

Studies with a retained release and committed derivation link the SQL or method used. Other studies state the evidence and reproduction limits they actually have.

Daily observations

Dated table row-count observations can detect local drift. They do not imply that an upstream publisher released or Fonteum ingested new data that day.

Named medical review

Reviewed by Jennifer Montecillo, MD, medical reviewer. Non-practicing medical reviewer.

Read the full provenance and attestation methodology →

Request access