Skip to content
FonteumPublic-records evidence
Researcher API · Reference

Free for academic research. Bearer-auth across every endpoint.

Fonteum grants free .edu/.gov API access in exchange for the standard academic citation. Same auth pattern as paid tiers (Authorization: Bearer); rate limits scale with your tier. This page covers signup, key usage, rate limits, and code samples for the four most common languages in research.

Register → Citation format → Researchers using Fonteum

1. Register

.edu / .gov email + citation TOS.

  1. Visit /signup/researcher and submit your institutional email + citation TOS acceptance.
  2. Copy the API key shown ONCE on the success page (we don’t store the plaintext).
  3. Click the activation link in your email (24h expiry).
  4. Start using your key on any /api/v1/* endpoint.

Allowlisted domains: .edu, .gov, .ac.uk, .ac.jp, .ac.kr, .ac.za, .edu.au, .edu.cn, .edu.sg, .edu.hk, .edu.tw, .edu.in. For non-academic-domain institutional access, contact our team via /contact.

2. Authenticate

Authorization: Bearer header.

Every protected operation under https://fonteum.com/api/v1/* requires the Bearer header. Only operations on the explicit public allowlist are key-exempt:

Authorization: Bearer fnt_<your-key>

Same header pattern across all tiers (researcher / standard / institutional). The key’s tier is server-side metadata; consumers don’t need to pick a header per tier.

3. Rate limits

Tier scales the per-minute + per-day window.

  • Public allowlist: no key; limited to explicitly designated discovery, status, provenance, transparency, chain, and bulk-download operations.
  • Researcher (Bearer key tier=researcher, email_verified): 300 req/min, 10,000 req/day per key.
  • Standard (paid Bearer key): negotiated per agreement.
  • Institutional (reserved for future enterprise tier).

Rate-limit headers on every response surface the current usage:

X-RateLimit-Limit-Minute: 300
X-RateLimit-Remaining-Minute: 287
X-RateLimit-Limit-Day: 10000
X-RateLimit-Remaining-Day: 9942
X-RateLimit-Reset-At: 2026-05-10T17:42:31.000Z

On 429 (rate-limit exceeded), responses include Retry-After in seconds. Back off + retry per the standard HTTP pattern.

4. Citation requirement

Cite Fonteum in any publication that uses the API.

Researcher signups accept the citation TOS at signup time (an explicit checkbox; the version is recorded on the api_keys row). The model relies on academic norms — no bot-driven enforcement, no retroactive takedowns. Three citation formats (APA, AMA, BibTeX) at /cite.

For papers that need version-specific reproducibility, cite the specific methodology version your data came from. Recorded version entries are dated on /methodology/changelog; the changelog is not a universal archive of every historical dataset state. Where a separate snapshot attestation exists, inspect it independently at /chain; provenance facts do not currently link deterministically to those signatures.

5. Code samples — curl

For shell scripting + ad-hoc lookups.

# Resolve an NPI to its canonical PECOS-ID
curl -H "Authorization: Bearer fnt_..." \
  https://fonteum.com/api/v1/identity/nppes/1245319599

# Aggregate identity stats
curl -H "Authorization: Bearer fnt_..." \
  https://fonteum.com/api/v1/identity/stats

# Snapshot integrity check
curl -H "Authorization: Bearer fnt_..." \
  https://fonteum.com/verify/123
6. Code samples — Node 18+

stdlib fetch.

// Node 18+ (built-in fetch)
const KEY = process.env.FONTEUM_API_KEY; // fnt_...

const res = await fetch("https://fonteum.com/api/v1/identity/nppes/1245319599", {
  headers: { Authorization: `Bearer ${KEY}` },
});
if (!res.ok) {
  console.error("API error:", res.status, await res.text());
  process.exit(1);
}
const data = await res.json();
console.log(data);
7. Code samples — Python 3.10+

stdlib + requests.

# Python 3.10+ (stdlib + requests)
import os
import requests

KEY = os.environ["FONTEUM_API_KEY"]  # fnt_...

res = requests.get(
    "https://fonteum.com/api/v1/identity/nppes/1245319599",
    headers={"Authorization": f"Bearer {KEY}"},
)
res.raise_for_status()
print(res.json())
8. Code samples — R 4.0+

httr + jsonlite.

# R 4.0+ (httr + jsonlite)
library(httr)
library(jsonlite)

key <- Sys.getenv("FONTEUM_API_KEY")  # fnt_...

res <- GET(
  "https://fonteum.com/api/v1/identity/nppes/1245319599",
  add_headers(Authorization = paste("Bearer", key))
)
stop_for_status(res)
data <- fromJSON(content(res, "text", encoding = "UTF-8"))
print(data)

For analyst stacks: pull any dataset as CSV/JSON from Fonteum's /data or query the FHIR R4 API directly from R / Python / SQL over plain HTTP — no SDK or package install required.

Phase roadmap

Phase 1 ships the tier. Phases 2-3 add discovery + lifecycle.

  • Phase 1 (this wave): signup flow + activation email + Bearer auth + 300/10000 rate limits + /cite + /researchers + this page.
  • §sprint3-citation-discovery-pipeline (queued): automated detection of papers citing Fonteum via OpenAlex API. Auto-populates /researchers featured-citations list.
  • §sprint3-orcid-integration (queued): attested researcher identity via ORCID OAuth.
  • §sprint3-researcher-key-rotation (queued): per-researcher key rotation UI (current: lost keys → operator re-issues).
  • §sprint3-tier-expansion (queued): additional tiers (institutional / press).

What’s on file, by the numbers

Platform snapshot · 2026-08-24

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