Skip to content
FonteumPublic-records evidence
Integrity runbook

Re-hash an eligible snapshot. Check the bytes yourself.

A snapshot can be re-hashed only when that record exposes both a source archive URL and a SHA-256 digest. This runbook shows how to compare those values with a standard hashing tool. Availability is record-specific; a digest match checks archive bytes, not parsed rows or row-level signature linkage.

← Attestation index Snapshot-chain reference →

What a match proves

Bytes, not promises.

Some records in the public snapshot endpoint expose a content_hash, hash_algorithm, and source_archive_url. For one of those records, a 64-character match supports two limited conclusions:

  • Digest equality — the archive you fetched produces the digest recorded on that snapshot record.
  • Recorded source context — the endpoint names the source identifier, observation date, and archive URL associated with that digest.

It does not validate parsed rows, transformations, current upstream availability, or a signature. The separate snapshot-chain reference at /docs/chain reports chain artifacts independently. Chain-artifact presence and row provenance are reported as separate fields.

Runbook — shell

Five steps, one command that matters.

On macOS and Linux, shasum -a 256 (or sha256sum) is all you need. On Windows, use certutil -hashfile snapshot.bin SHA256.

# 1. Open the snapshot record you care about.
#    Browse https://fonteum.com/trust/integrity or request the record directly:
#      https://fonteum.com/verify/<snapshot_id>
#    Continue only when content_hash and source_archive_url are populated.

# 2. Fetch the source archive named by that record.
curl -L -o snapshot.bin "<source_archive_url from the record>"

# 3. Confirm the byte count matches content_size_bytes (cheap pre-check).
wc -c snapshot.bin

# 4. Re-hash the bytes with the same algorithm.
shasum -a 256 snapshot.bin
#    → 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08  snapshot.bin

# 5. Compare the 64-character hex with the record's content_hash.
#    A match means the fetched bytes produce that digest. It does not validate
#    parsed rows, transformations, or a row-level signature.
Runbook — Node 20+

Same check, in code.

Any language with a SHA-256 implementation can compare the downloaded bytes with a populated digest. Node, stdlib only:

// Node 20+ (stdlib only) — re-hash a downloaded archive and compare.
import { createHash } from 'node:crypto';
import { readFile } from 'node:fs/promises';

// A populated content_hash from https://fonteum.com/verify/<snapshot_id>
const PUBLISHED = '<paste the 64-char content_hash here>';

const bytes = await readFile('snapshot.bin');
const recomputed = createHash('sha256').update(bytes).digest('hex');

console.log('recomputed:', recomputed);
console.log('matches:   ', recomputed === PUBLISHED.toLowerCase());
When the hash doesn’t match

A mismatch is a signal, not a dead end.

A non-matching hash usually means one of the following — work down the list before concluding the data drifted:

  • Partial download — the byte count from wc -c does not equal content_size_bytes. Re-fetch.
  • Upstream republished the file — federal portals sometimes re-issue an archive in place. A current download may then differ from the digest recorded for an earlier snapshot.
  • Wrong archive — confirm you fetched the exact source_archive_url recorded on the snapshot response, not a sibling or index page.
  • Transform vs. raw — the hash covers the upstream source archive, not the post-ingest parsed table. Hash the archive, not the rendered dataset.

If the archive is byte-complete, fetched from the recorded URL, and still doesn’t match, that is exactly the kind of discrepancy this system exists to surface — email security@fonteum.com with the snapshot id.

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