Skip to content
FonteumPublic-records evidence

API REFERENCE · v1

Public records your app can re-check.

Query source-linked public records across healthcare, federal procurement, sanctions and watchlists, enforcement, and corporate and securities records. REST, FHIR R4, and MCP surfaces return available source and observation metadata with documented limitations for AI agents and data pipelines; nullable fields stay null.

Read the docs →
$ curl https://api.fonteum.com/v1/npi/1234567893 -H "Authorization: Bearer fnt_DEMO_PUBLIC_V1"
Fonteum API architecture — client lane, Fonteum API surface (REST gateway, MCP server, webhooks), provenance core.FONTEUM API SURFACEYOUR APPLICATIONPROVENANCE CORESame provenance contract on every endpoint.Client. Python · TypeScript · cURLClientPython · TypeScript · cURLREST gatewayREST gatewayMCP serverMCP serverWebhooksWebhooks14-tuple resolver14-tuple resolverSnapshot storeSnapshot storeSource ledgerSource ledger
Three layers, one contract. Whether you hit REST, MCP, or webhooks, the response carries the same 14-tuple provenance record back from the federal source.

Don’t trust the response — re-check it

Responses expose available source and observation metadata. When a response supplies a concrete snapshot id, /verify/<id>can inspect that snapshot's stored attestation. The current provenance claims do not have a deterministic link to the signature ledger, so this is not represented as a signature on every returned fact.

Re-check it yourself

Look up a snapshot id to see the source, date, digest, and chain fields that record actually returns. Digest comparison checks archive bytes; signature status is shown separately. No account needed.

snapshot field guide
source shown when returned
date saved shown when returned
sha-256 shown when returned
chain signature shown only when returned

Or run the full flow at /verify · curl /verify/<id>

Getting started

Run your first authenticated request against a deterministic synthetic provider fixture. The sample key fnt_DEMO_PUBLIC_V1 is live, read-only, and limited to 20 requests/minute and 100 requests/day per trusted source IP. Swap it for your own fnt_ key when you move past the sandbox.

The base URL is https://api.fonteum.com/v1. Consult the current endpoint documentation for its access requirements. Responses are JSON and expose the source, observation date, and other provenance fields available for that route. No provenance fact currently links deterministically to a signature.

MethodGET
URL/v1/npi/{npi}
AuthAuthorization: Bearer fnt_<opaque>
ReturnsProvider record + available provenance fields
curl https://api.fonteum.com/v1/npi/1234567893 \
  -H "Authorization: Bearer fnt_DEMO_PUBLIC_V1"
{
  "npi": "1234567893",
  "type": "organization",
  "organization_name": "EXAMPLE MEDICAL CENTER",
  "address": { "city": "AUSTIN", "state": "TX", "postal_code": "78701" },
  "is_excluded_oig": null,
  "exclusion_coverage_status": "indeterminate",
  "exclusion_determination": "indeterminate",
  "_source": "Synthetic demo fixture — not a live source record",
  "_source_url": null,
  "_dataset_id": "synthetic-demo-npi",
  "_snapshot": null,
  "_methodology": "synthetic-demo-v1",
  "_last_checked": null,
  "_data_availability": "synthetic_demo_fixture; exclusion_coverage_indeterminate",
  "_confidence": null,
  "_pipeline_version": null,
  "_doi": null,
  "_license": "Synthetic example; no source-record license asserted",
  "_coverage_period_start": null,
  "_coverage_period_end": null,
  "_slsa_provenance_url": null
}

The response is deliberately synthetic and issues no live exclusion clearance. It illustrates fields that supported NPPES, OIG LEIE, CMS PECOS, CMS Care Compare, and CMS Open Payments responses can expose. Source blocks and provenance fields vary by identifier and can be null; use an account key with a real NPI for source-resolved data. The next sections cover authentication, each resolver, and the nullable provenance contract.

Authentication

Get a key: create a free account at /account/signup — no card, 2,500 grounded retrievals a month. Pass it as Authorization: Bearer fnt_…. Manage keys, watch usage against your quota, and upgrade from your dashboard. Usage is metered per key — a grounded retrieval is one credit, a /verify re-check a quarter credit; see pricing and the API Terms of Use.

Pass your key in the Authorization header as Bearer fnt_<opaque> on every protected request. There is no OAuth exchange for REST API keys. Keep production keys server-side; the sample key is safe to ship in client examples because it is read-only and rate-limited.

MethodGET
URL/v1/{any-read-endpoint}
AuthAuthorization: Bearer fnt_DEMO_PUBLIC_V1
Returns401 missing_api_key / invalid_api_key · 429 rate_limit_exceeded
curl https://api.fonteum.com/v1/npi/1234567893 \
  -H "Authorization: Bearer fnt_DEMO_PUBLIC_V1"

A missing or unknown key returns 401; exceeding either the minute or day window returns 429 with a Retry-After header.

{
  "error": {
    "code": "invalid_api_key",
    "message": "API key is invalid, revoked, or expired."
  },
  "meta": {
    "request_id": "req_8Fk2pQ",
    "api_version": "v1"
  }
}

Plan tiers

CredentialMinute budgetDaily budgetKey prefix
Public sample20 per trusted source IP100 per trusted source IPfnt_DEMO_PUBLIC_V1
Account keyKey-specificKey-specificfnt_...

Rate-limit headers ride on every response — see Rate limits.

Resolve a provider by NPI

The NPI resolver accepts a 10-digit National Provider Identifier and returns the public NPPES record. It can add enrollment, exclusion, quality, or payment rows only where those sources publish the same NPI; sources keyed by CCN, license number, name, or another identifier are not treated as deterministic NPI matches.

MethodGET
URL/v1/npi/{npi}
AuthAuthorization: Bearer fnt_<opaque>
ReturnsProvider record + available provenance fields
curl https://api.fonteum.com/v1/npi/1234567893 \
  -H "Authorization: Bearer fnt_DEMO_PUBLIC_V1"
{
  "npi": "1234567893",
  "type": "organization",
  "organization_name": "EXAMPLE MEDICAL CENTER",
  "address": { "city": "AUSTIN", "state": "TX", "postal_code": "78701" },
  "is_enrolled_medicare": true,
  "is_excluded_oig": null,
  "exclusion_coverage_status": "indeterminate",
  "exclusion_determination": "indeterminate",
  "_source": "Synthetic demo fixture — not a live source record",
  "_source_url": null,
  "_dataset_id": "synthetic-demo-npi",
  "_snapshot": null,
  "_methodology": "synthetic-demo-v1",
  "_last_checked": null,
  "_data_availability": "synthetic_demo_fixture; exclusion_coverage_indeterminate",
  "_confidence": null,
  "_pipeline_version": null,
  "_doi": null,
  "_license": "Synthetic example; no source-record license asserted",
  "_coverage_period_start": null,
  "_coverage_period_end": null,
  "_slsa_provenance_url": null
}

The sample NPI returns a synthetic fixture and no live exclusion clearance. With a real NPI, the resolver returns source-resolved data; an unknown NPI returns 404 not_found. After successful authentication, malformed identifiers (wrong length, non-numeric) return 400 invalid_npi before data lookup.

Resolve an NPI crosswalk link by CCN

The deployed CCN operation is GET /v1/entity/ccn/{ccn}. It returns a canonical CCN-to-NPI crosswalk link and its matching evidence; it does not return a facility record or Care Compare quality measures.

MethodGET
URL/v1/entity/ccn/{ccn}
AuthAuthorization: Bearer fnt_<opaque>
ReturnsCCN-to-NPI link + matching method

Template only — no fixed CCN fixture is guaranteed. Set FONTEUM_CCN to a CCN present in the canonical crosswalk and use an account key. The sample key is guaranteed only for the documented demo NPI request.

curl "https://api.fonteum.com/v1/entity/ccn/${FONTEUM_CCN}" \
  -H "Authorization: Bearer ${FONTEUM_API_KEY}"

The deployed response contains ccn, npi, link_method, link_confidence, link_tier, source_table, methodology_version, and attested_at. A missing canonical link returns 404. CCNs may be 6 or 10 alphanumeric characters; other shapes return 400.

Cross-dataset facts — contract preview

Contract preview — not currently deployed. include=facts is not an active GET /v1/npi/{npi} query option, and no runnable facts[] response is available today.

The planned contract would return independently provenance-bound facts instead of flattening assertions from different source families into one value. Until that projection is deployed, use the deployed GET /v1/npi/{npi} operation and the dataset-specific routes listed in the OpenAPI document.

No sample credential or fixed response is shown here because this contract cannot be executed against the live API.

Data quality scorecard

The deployed quality operation returns Fonteum's machine-readable data-quality scorecard. It is an explicitly public, read-only route; no key is required.

MethodGET
URL/v1/quality
AuthPublic allowlist — no key required
ReturnsData-quality scorecard
curl https://api.fonteum.com/v1/quality

The live response carries generated_at, composite_score, completeness, consistency, timeliness, oig_leie_match_rate, and _methodology. Scorecard values are computed from the current serving data and therefore are not hard-coded in this reference.

Per-facility paths such as /v1/quality/hospital/{ccn} are not deployed.

Open Payments

CMS Open Payments discloses industry transfers of value to physicians and teaching hospitals. The contract below previews an NPI-level aggregation plus underlying records.

Contract preview — not currently deployed. /v1/payments/{npi} is not in the current v1 route inventory. The request and response below are illustrative and are not produced by the public sample key today.

MethodGET
URL/v1/payments/{npi}
AuthUnavailable until deployment
ReturnsIllustrative aggregate + records + provenance
GET /v1/payments/<npi>  # illustrative contract; not currently deployed

Illustrative response shape:

{
  "npi": "<npi>",
  "program_year": 2024,
  "total_amount_usd": 18420.55,
  "record_count": 37,
  "records": [
    {
      "manufacturer": "EXAMPLE MANUFACTURER",
      "amount_usd": 2500.0,
      "nature": "Consulting Fee",
      "date": "2024-09-12"
    }
  ],
  "_source": "CMS Open Payments",
  "_dataset_id": "cms_open_payments",
  "_snapshot": "2026-03-30",
  "_confidence": 0.95
}

If deployed with name-and-address matching rather than a direct NPI field, _confidence would need to disclose match strength. Records below the CMS de-minimis threshold are excluded by the publisher.

Batch resolution availability

No POST /api/v1/batch/npi endpoint is currently published. Do not send a panel to that path or rely on the previously documented request limits.

For now, resolve identifiers individually through their documented routes, or use the nine-tool MCP surface where it suits the workflow. A batch contract will appear in OpenAPI before it is advertised here.

Webhooks — delivery contract preview

Contract preview — not currently deployed. Fonteum does not currently expose a public webhook subscription or delivery service, and webhooks.fonteum.com is not an active delivery endpoint.

The planned contract would notify a customer-controlled endpoint when a source snapshot changes. A future delivery would be authenticated with a delivery signature, not with the customer's REST API Bearer credential.

MethodPOST
URLNot deployed
AuthPlanned delivery signature
ReturnsCustomer endpoint acknowledges with 2xx

The payload and event catalog remain design material only. No retry, delivery, or subscription behavior is available today, so this page intentionally provides no runnable curl command.

Errors

Authentication, quota, and standard withApi errors use the envelope below: an error object with a stable machine code and human message, plus meta.request_id to quote in support. Individual streaming/raw endpoints document any route-local validation shape in their own reference. HTTP status follows convention — 4xx is your request, 5xx is ours.

MethodGET
URL/v1/npi/0000000000
AuthAuthorization: Bearer fnt_<opaque>
Returns404 provider_not_found with the standard error envelope
curl -i https://api.fonteum.com/v1/npi/0000000000 \
  -H "Authorization: Bearer fnt_DEMO_PUBLIC_V1"
{
  "error": {
    "code": "provider_not_found",
    "message": "No provider with NPI 0000000000 found in the CMS NPPES NPI Registry."
  },
  "meta": {
    "request_id": "req_8Fk2pQ",
    "api_version": "v1"
  }
}

Codes

StatusCodeRetry guidance
400invalid_npiFix the identifier; do not retry
401missing_api_key / invalid_api_keyCheck the Authorization: Bearer fnt_... header
404provider_not_foundThe identifier is unknown; do not retry
429rate_limit_exceededBack off until Retry-After
500internal_errorRetry with exponential backoff
503source_unavailableRetry with exponential backoff
503rate_limit_unavailableRetry later; quota admission failed closed

Retry only on 429, 500, and 503. Treat 4xx codes other than 429 as terminal — retrying will not change the outcome.

Provenance contract

Fonteum responses expose a 14-key provenance schema. The keys are nullable, and their population varies by source, endpoint, and record; use only values present in the response. The underscore prefix prevents collisions with source field names. When populated, these fields let an integrator cite the named source and observation date.

MethodGET
URL/v1/npi/{npi}
AuthAuthorization: Bearer fnt_<opaque>
ReturnsRecord fields + available values from the 14-key provenance schema
{
  "_source": "NPPES",
  "_source_url": "https://npiregistry.cms.hhs.gov",
  "_dataset_id": "nppes",
  "_snapshot": null,
  "_methodology": "resolver/v6",
  "_last_checked": null,
  "_confidence": null,
  "_data_availability": ["present"],
  "_pipeline_version": null,
  "_doi": null,
  "_license": "US-Government-Works",
  "_coverage_period_start": "2005-05-23",
  "_coverage_period_end": "ongoing",
  "_slsa_provenance_url": null
}

The 14 keys

KeyMeaning
_sourceHuman name of the federal source
_source_urlCanonical source landing page
_dataset_idStable internal dataset slug
_snapshotDate of the source snapshot used
_methodologyPinned pipeline methodology version
_last_checkedWhen we last checked the value against the source
_confidenceMatch/parse confidence, 0.00–1.00
_data_availabilityField-availability flags
_pipeline_version7-char git SHA of the pipeline
_doiDataset DOI, when one is minted
_licenseSPDX license of the source
_coverage_period_startFirst date the data covers
_coverage_period_endLast date covered, or ongoing
_slsa_provenance_urlBuild attestation, when available

_doi and _slsa_provenance_url are null until the source has a minted DOI or a published build attestation — we return null rather than inventing a value.

MCP server

Agents call Fonteum tools instead of hand-writing API requests. The hosted Model Context Protocol server exposes nine read-only tools for US healthcare providers, federal contractors, exclusions, sanctions, source catalogs, and snapshot re-checks. Tool descriptions start with the question each tool is meant to answer so an agent can select the narrowest operation.

MethodPOST
URLhttps://fonteum.com/api/mcp (Streamable HTTP)
AuthHosted access is anonymous and rate-limited
ReturnsNine read-only MCP tools with a uniform source-context envelope

The hosted endpoint is https://fonteum.com/api/mcp and advertises MCP server version 1.1.0. Every tool has annotations.readOnlyHint: true. The stdio source targets @fonteum/mcp@0.5.0, which is pending operator publication; npm currently serves 0.4.0. Do not use the command or config below until the operator publishes 0.5.0.

FONTEUM_API_KEY="$FONTEUM_API_KEY" npx -y @fonteum/mcp@0.5.0
{
  "mcpServers": {
    "fonteum": {
      "command": "npx",
      "args": ["-y", "@fonteum/mcp@0.5.0"],
      "env": { "FONTEUM_API_KEY": "${FONTEUM_API_KEY}" }
    }
  }
}

Full client setup lives on the agents page.

Canonical tools

ToolArgumentsUse
fonteum_lookup_npinpiLook up one 10-digit NPI and return available NPPES provider facts with dated source context.
fonteum_lookup_contractoruei?, cage?Look up one federal contractor by UEI or CAGE across available SAM.gov, USASpending, FAPIIS, exclusion, and ownership records.
fonteum_search_providersvertical, state, county?, limit?Search the loaded NPPES specialty caches for chiropractors, dermatologists, or plastic surgeons.
fonteum_check_exclusionnpiCheck an NPI against OIG LEIE, SAM.gov, available state Medicaid exclusion lists, OIG CIA, and CMS penalty sources.
fonteum_search_sanctionsnameSearch a person or organization name across the named OFAC, EU, UK, UN, OIG, SAM.gov, and available state exclusion sources.
fonteum_lookup_contractor_historyas_of, uei?, cage?Retrieve available contractor records for a date. Retained history is currently limited to USASpending award rows.
fonteum_recheck_snapshotsnapshot_id?Inspect the live chain head or one identified snapshot object and its digest. A snapshot digest does not sign an individual fact.
fonteum_list_sourcesnoneList the generated source catalog and separately reported dated platform coverage.
fonteum_get_dataset_infononeReturn methodology, provenance-schema, and public source-catalog metadata.

Response contract

Every successful or failed tool response includes JSON text plus matching MCP structuredContent. These four keys are always present at the top level:

  • source_file: string | null — exact retained source filename when one file honestly represents the response.
  • as_of_date: string | null — source publish or snapshot date; never the request time substituted for missing source metadata.
  • snapshot_digest: string | null — digest for an identified retained snapshot object; never a per-fact signature or live-chain-head substitute.
  • verifiable_url: string — public source, methodology, or snapshot re-check URL appropriate to the response.

Composite results and errors use null when one source file, date, or digest does not honestly represent the response. Per-source details remain inside the returned data and provenance blocks.

Package REST bridges

The future stdio package calls these deployed routes under https://fonteum.com/api using Authorization: Bearer $FONTEUM_API_KEY where required:

  • GET /api/v1/npi/{npi}fonteum_lookup_npi.
  • GET /api/v1/procurement/screen?uei={uei} or GET /api/v1/procurement/screen?cage={cage}fonteum_lookup_contractor (pass exactly one identifier).
  • GET /api/v1/mcp/search-records?vertical={slug}&state={USPS}&county={optional}&limit={1..100}fonteum_search_providers.
  • GET /api/v1/exclusions/{npi}fonteum_check_exclusion.
  • GET /api/sanctions/screen?q={name}fonteum_search_sanctions.
  • GET /api/v1/procurement/screen?as_of={YYYY-MM-DD}&uei={uei} or GET /api/v1/procurement/screen?as_of={YYYY-MM-DD}&cage={cage}fonteum_lookup_contractor_history (pass exactly one identifier).
  • GET /api/v1/mcp/recheck?snapshot_id={optional-positive-integer}fonteum_recheck_snapshot.
  • GET /api/v1/sourcesfonteum_list_sources.
  • GET /api/v1/mcp/dataset-info — no-argument fonteum_get_dataset_info.

For fonteum_lookup_npi, only an explicit zero-result response from CMS NPPES is a not-found result. If NPPES cannot answer reliably or returns an invalid payload, the REST bridge returns 503 nppes_unavailable and the MCP error identifies the lookup as indeterminate. Do not interpret that error as provider absence.

The REST bridges are not substitutes for an MCP JSON-RPC session; they keep the future stdio package and the hosted tools on the same data contract.

Rate limits & SLAs

Limits use rolling per-minute and per-day windows. Every authenticated response carries the current budget in headers, so you can throttle proactively instead of reacting to 429s. The shared sample credential is limited to 20 requests/minute and 100 requests/day per trusted source IP.

MethodGET
URL/v1/{any-endpoint}
AuthAuthorization: Bearer fnt_<opaque>
ReturnsX-RateLimit-* headers on every response
curl -i https://api.fonteum.com/v1/npi/1234567893 \
  -H "Authorization: Bearer fnt_DEMO_PUBLIC_V1"
{
  "X-RateLimit-Limit-Minute": 20,
  "X-RateLimit-Remaining-Minute": 18,
  "X-RateLimit-Limit-Day": 100,
  "X-RateLimit-Remaining-Day": 98,
  "X-RateLimit-Limit": 100,
  "X-RateLimit-Remaining": 98,
  "X-RateLimit-Reset": 1730000000,
  "X-RateLimit-Reset-At": "2024-10-27T03:33:20.000Z"
}

Tiers

TierRateUptime SLASupport
Public sample20/minute + 100/day per trusted source IPnonecommunity
Account keykey-specific minute + day limitsplan-specificplan-specific

The compatibility X-RateLimit-Limit and X-RateLimit-Remaining headers mirror the day window. X-RateLimit-Reset is a Unix epoch second; X-RateLimit-Reset-At is the same reset as an ISO timestamp. On 429, prefer the Retry-After header over computing your own backoff.

Changelog

The API is versioned by URL prefix (/v1). Breaking changes normally ship behind a new prefix. The FND-010 status reconciliation below is a documented corrective exception: the previous status fields contradicted each other, so summary.overall now carries the shared canonical operational state and the former source-only assessment is preserved as summary.findings_state. Current source status is available from GET /v1/status; the webhook delivery contract remains a non-deployed preview.

VersionDateChange
v1.62026-07-17Reconciled health and status surfaces onto one canonical operational | degraded | outage | unknown state. GET /v1/status.summary.overall now uses that state; migrate consumers of the former ok | attention source-only verdict to summary.findings_state. The response adds operational_state with separate transport, pipeline, source-completeness, and incident dimensions.
v1.62026-07-12Standardized protected operations on Authorization: Bearer fnt_..., activated fnt_DEMO_PUBLIC_V1, and moved API-key minute/day admission plus last_used_at stamping to one atomic Postgres limiter
v1.52026-05-27Drafted the non-deployed include=facts contract preview
v1.42026-05-20Extended provenance from 8 to the full 14-tuple
v1.32026-05-12Drafted the POST /v1/batch/npi contract preview; route not deployed
v1.22026-05-04Added the public GET /v1/quality data-quality scorecard
v1.12026-04-22Drafted the /v1/payments/{npi} contract preview; route not deployed

Deprecations are announced here at least 90 days before removal. Nothing in v1 is currently deprecated.

Programmatic access is governed by the API & MCP Terms of Service. The data is a billing / program-integrity control and must not be used for any FCRA permissible purpose — employment, credit, insurance, housing, or professional-licensing eligibility decisions about an individual.

READY TO SHIP

Add federal-data citations to your agent in 60 seconds.

Drop our MCP server into your agent or call the API with fnt_DEMO_PUBLIC_V1. The read-only sample is limited to 20 requests/minute and 100 requests/day per trusted source IP.

What’s on file, by the numbers

Platform snapshot · 2026-08-12

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
73fresh 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