Agent Gateway

Developers

Pay-per-call API over the Healthparse dataset family: hospital cost-report financials, price-transparency negotiated rates, sanctions screening, nonprofit Form 990 filings, Medicare provider analytics, wage benchmarks, CMS quality ratings, and provider change-event feeds. Every response carries a signed attestation (_meta.signature) and per-dataset license terms.

Base URL: https://api.healthparse.io · Machine-readable catalog · license terms · MCP server at https://api.healthparse.io/mcp (streamable HTTP, x-api-key auth; every endpoint below is a tool).

Two ways to pay

1. API key — metered billing via Stripe. Pass it in the x-api-key header (or as a Bearer token). Get an API key below.

curl -H "x-api-key: YOUR_KEY" \
  "https://api.healthparse.io/v1/hospitals/search?state=TX&limit=5"

2. x402 — no account, no key. Call any endpoint bare and the gateway answers 402 Payment Required with the exact USDC price on Base in the accepts array; an x402 client (e.g. x402-fetch) pays and retries automatically. Settlement is on-chain and gasless for the payer.

# Bare call returns the 402 challenge with pricing:
curl -i "https://api.healthparse.io/v1/hospitals/450054"

# An x402 client handles the payment round-trip for you:
#   import { privateKeyToAccount } from "viem/accounts";
#   import { wrapFetchWithPayment } from "x402-fetch";
#   const payFetch = wrapFetchWithPayment(fetch, privateKeyToAccount(PK));
#   await payFetch("https://api.healthparse.io/v1/hospitals/450054");

Get an API key

Keys bill per call at the prices in the table below — no flat fee, no monthly minimum. Subscribing (free to start, card on file) activates metered billing for your account; you then create a key and pass it as x-api-key.

Subscribe — pay per call →

After checkout you'll land on a welcome page to set your password. Once signed in, create and manage keys at healthparse.io/account (each key is shown once — save it), or via the API:

curl -X POST https://healthparse.io/api/platform/api-keys \
  -H "cookie: $HEALTHPARSE_SESSION_COOKIE" \
  -H "content-type: application/json" \
  -d '{"name": "my-agent"}'

How billing works

  • Every endpoint has a fixed price per call — listed in the table below and in the machine-readable catalog. There is no flat fee, no monthly minimum, and no per-seat charge.
  • Each successful call is metered as it happens. Your invoice is simply the sum of the per-call prices for the month. Failed calls (4xx/5xx) are not billed.
  • One invoice per month from Stripe (Healthparse), charged to your card on file at the end of each billing cycle. Example: 1,000 hospital searches at $0.02 + 200 exclusion screens at $0.15 = $20.00 + $30.00 = $50.00.
  • Under the hood, usage is reported to Stripe in millionths of a dollar so the month-end sum is exact to the cent — a $0.02 call meters as 20,000 units at $0.000001 each. You'll see this unit math on the invoice line item; the dollar total always equals the catalog prices you saw.
  • Prefer no account at all? Every endpoint also accepts x402: call it bare, get an HTTP 402 challenge, settle in USDC on Base per call. Same prices, no subscription, no invoice.

Questions, invoicing, or higher rate limits: hello@healthparse.io.

Endpoints (42)

IDEndpointPriceWhat it answers
hcris.hospital.searchGET /v1/hospitals/search$0.020Search US hospitals by state, city, type, control, beds, discharges, revenues, or operating margin. Answers: which hospitals in a market match a financial or operational profile? Source: CMS cost reports (HCRIS 2552-10).
hcris.hospital.byCcnGET /v1/hospitals/:ccn$0.010Hospital cost-report record by CMS Certification Number (CCN). Answers: what are the financial and operational metrics for this hospital across fiscal years? Includes identity, beds, discharges, revenues, net income, operating margin.
hcris.asc.searchGET /v1/asc/search$0.020Search ambulatory surgical centers (ASCs) by state, CCN, or name. Answers: which ASCs are in a given market? Source: CMS ASC cost data.
hcris.provider.searchGET /v1/providers/search$0.020Search Medicare providers by NPI, state, specialty, service volume, beneficiaries, or payments. Answers: which providers in a market match this specialty, volume, or beneficiary profile? Source: CMS Medicare claims.
irs990.org.searchGET /v1/nonprofits/search$0.020Search nonprofit health organizations by state, NTEE code, revenue or expense range, or name. Answers: which nonprofit hospitals/health orgs match this financial profile? Source: IRS Form 990 e-filings.
irs990.org.byEinGET /v1/nonprofits/:ein$0.010Nonprofit health organization Form 990 filing history by EIN. Answers: what are the revenues, expenses, and trends for this nonprofit across fiscal years? Source: IRS Form 990 e-filings.
irs990.officers.searchGET /v1/nonprofits/officers/search$0.020Search nonprofit hospital executive compensation: officers and key employees by organization (EIN), name, or compensation range. Answers: who are the executives at this nonprofit health org and what do they earn? Source: IRS Form 990 Schedule J.
sanctions.leie.searchGET /v1/exclusions/search$0.030Search the OIG List of Excluded Individuals/Entities (LEIE) by name, NPI, state, or exclusion type. Answers: is this provider excluded from federal healthcare programs? Monthly refresh.
oews.wage.searchGET /v1/wages/search$0.020Healthcare wage benchmarks by SOC occupation and area (national, state, metro): median, mean, and P25–P90 percentiles plus employment. Answers: what does this role pay in this market? Source: BLS OEWS.
carecompare.hospitals.searchGET /v1/facilities/hospitals/search$0.020Search hospitals quality data by state, city, ZIP, or CMS star rating. Answers: which hospitals meet quality thresholds in a market? Source: CMS Care Compare, monthly refresh.
carecompare.hospitals.byCcnGET /v1/facilities/hospitals/:ccn$0.010CMS Care Compare quality record by CCN for a hospitals. Answers: what are the quality ratings and performance measures for this facility? Source: CMS Care Compare.
carecompare.snf.searchGET /v1/facilities/snf/search$0.020Search snf quality data by state, city, ZIP, or CMS star rating. Answers: which snf meet quality thresholds in a market? Source: CMS Care Compare, monthly refresh.
carecompare.snf.byCcnGET /v1/facilities/snf/:ccn$0.010CMS Care Compare quality record by CCN for a snf. Answers: what are the quality ratings and performance measures for this facility? Source: CMS Care Compare.
carecompare.home-health.searchGET /v1/facilities/home-health/search$0.020Search home health quality data by state, city, ZIP, or CMS star rating. Answers: which home health meet quality thresholds in a market? Source: CMS Care Compare, monthly refresh.
carecompare.home-health.byCcnGET /v1/facilities/home-health/:ccn$0.010CMS Care Compare quality record by CCN for a home health. Answers: what are the quality ratings and performance measures for this facility? Source: CMS Care Compare.
carecompare.hospice.searchGET /v1/facilities/hospice/search$0.020Search hospice quality data by state, city, ZIP, or CMS star rating. Answers: which hospice meet quality thresholds in a market? Source: CMS Care Compare, monthly refresh.
carecompare.hospice.byCcnGET /v1/facilities/hospice/:ccn$0.010CMS Care Compare quality record by CCN for a hospice. Answers: what are the quality ratings and performance measures for this facility? Source: CMS Care Compare.
carecompare.dialysis.searchGET /v1/facilities/dialysis/search$0.020Search dialysis quality data by state, city, ZIP, or CMS star rating. Answers: which dialysis meet quality thresholds in a market? Source: CMS Care Compare, monthly refresh.
carecompare.dialysis.byCcnGET /v1/facilities/dialysis/:ccn$0.010CMS Care Compare quality record by CCN for a dialysis. Answers: what are the quality ratings and performance measures for this facility? Source: CMS Care Compare.
hpt.rates.searchGET /v1/prices/search$0.030Search hospital price-transparency negotiated rates by billing code (CPT/HCPCS/MS-DRG), state, payer, hospital CCN, or rate type. Answers: what do payers actually pay for this procedure at these hospitals? Source: hospital-published MRFs.
sanctions.screenGET /v1/screen$0.150Screen a provider (name and/or NPI) against all federal and state exclusion lists in one call — OIG LEIE, GSA SAM, OFAC SDN, FDA debarment, state Medicaid exclusions, and licensing-board sanctions from 13 states. Returns an attested clear/flagged verdict with per-list counts. NPI-only screens (no name) cover 4 of 6 lists — OFAC SDN and FDA debarment need a name; see lists_checked/lists_not_applicable. For hiring, credentialing, and vendor-onboarding agents.
hpt.code.statsGET /v1/prices/stats/:code$0.005National price statistics for a billing code (CPT/HCPCS/MS-DRG) from hospital price-transparency files: median and spread of payer-negotiated rates. Answers: what is a fair price for this procedure? Shape varies: a code under one billing_code_type (common case) returns the flat row shown below; a code ambiguous across types instead returns { billing_code, stats_by_type: [...] } — check for a top-level stats_by_type array to tell them apart.
hcris.hospital.financialsGET /v1/hospitals/:ccn/financials$0.050Multi-year financial history for one hospital by CCN: beds, discharges, revenues, net income per fiscal year, up to 15 years. Source: CMS cost reports.
providers.events.feedGET /v1/providers/events$0.100Provider change-event feed over 7 federal sources: new NPI enumerations, newly billing Medicare, enrollment pending, address changes, deactivations, CLIA lab certificates, ownership changes (CHOW), mammography facility cert changes, and hospital capex jumps. Answers: what changed in my territory since I last looked? Filter by type (comma-separated), state, since (YYYY-MM-DD), npi, ccn; page via next_cursor (keyset). 85k+ events, refreshed twice-weekly to quarterly by source.
hospitals.capex.signalsGET /v1/hospitals/capex-signals$0.100Hospital capital-expenditure jump signals from CMS cost reports (Worksheet A-7): hospitals whose major movable equipment purchases hit at least $1M and at least 2x the prior fiscal year — an observational marker that a hospital reported a step-up in equipment spend. Answers: which hospitals just bought equipment? Includes purchase dollars by asset class and the prior-year comparison. Filter by state, min_amount (movable-equipment dollars), since; keyset cursor pagination.
providers.provider360GET /v1/providers/:npi/provider360$0.250One-call dossier of everything Healthparse knows about a provider NPI: NPPES identity, taxonomy and practice address; Medicare ordering-and-referring privileges; NPI exclusion screen (OIG LEIE, GSA SAM, state Medicaid, state boards); change-event history; Medicare Part B utilization and Part D prescribing summaries; Open Payments totals by year; hospital affiliations with star ratings; MIPS quality scores. Absent legs say so explicitly. Records as filed; not a consumer report.
manufacturers.searchGET /v1/manufacturers/search$0.030Discover pharma & device MANUFACTURERS from CMS Open Payments by name, total-spend band, or year of first appearance — the emerging/small-brand filter (low total_spend and/or recent first_seen_year) plus optional specialty/state activity. Answers: which small or new manufacturers pay physicians in my category and territory? Entity-resolved company dimension (DBA/subsidiary variants merged). Filter: name, max_total_spend, first_seen_year_min/max, specialty, state.
manufacturers.openPaymentsGET /v1/manufacturers/open-payments$0.030Which manufacturers pay a given physician specialty in a territory, and how much — CMS Open Payments rolled up to the paying company. Answers: which pharma/device companies already reach cardiologists in Texas, and which are the small/emerging ones (max_total_spend) to partner with or compete against? Filter: specialty, state, performance_year (defaults to latest), max_total_spend/min_total_spend, min_physicians; sort by matched_amount or manufacturer_total_spend (asc = smallest first).
hrsa.healthCenters.searchGET /v1/health-centers/search$0.030Discover FQHC / Look-Alike health-center SITES from the HRSA roster by state, type, county, name, or newly-added-to-scope date (added_since = new-site trigger). Answers: which FQHC sites exist in my territory, and which are new? Each site is entity-resolved into NPPES (matched_npi / match_method). Powers pharma-sales 340B, medical-device, and medical/travel-nurse staffing targeting. Filter: state, health_center_type, status, name, county, added_since, resolved_only.
hrsa.hpsa.searchGET /v1/hpsa/search$0.030Find HRSA Health Professional Shortage Areas (Primary Care / Dental / Mental Health) by state, discipline, minimum shortage score, or FTE shortage — a mapped staffing-demand signal. Answers: where is the designated shortage most severe, and how many practitioner FTEs are needed? Powers medical & travel-nurse staffing. Defaults to currently-designated areas. Filter: state, discipline, min_score, min_fte, rural_status, designated_since, status; sort by hpsa_score or hpsa_fte.
hrsa.coveredEntities340b.searchGET /v1/covered-entities-340b/search$0.030Search HRSA 340B OPAIS covered entities + child sites by state, entity type (FQHC/DSH/CAH/RHC/…), or name — the 340B buyer/pharmacy roster. Answers: which 340B-eligible entities operate in my territory, and which have an NPI to join into the provider graph? Powers pharma-sales (340B pharmacies) targeting. Filter: state, entity_type, name, has_npi, parents_only.
nppes.enumeration.searchGET /v1/providers/enumeration$0.030Newly-enumerated NPIs with their EXACT Provider Enumeration Date and taxonomy detail, from the CMS NPPES full monthly file joined to the NPPES directory. Answers: which providers/organizations of a given taxonomy were newly issued an NPI in my state since a date? Precise new-provider dating (enumerated_since) that sharpens the existing NPPES event feed. Filter: enumerated_since/before, taxonomy, state, license_state, entity_type, active_only; sort by enumeration_date.
prescribers.partDByDrug.searchGET /v1/prescribers/part-d/by-drug/search$0.030Find Medicare Part D prescribers of a specific DRUG or therapeutic CLASS at NPI level — the core pharma targeting query. Filter by drug_class (GLP-1, SGLT2, DPP-4, Statin, from partd_drug_class) or a single drug (brand or generic, e.g. 'Ozempic'), plus specialty, state, min_claims, min_beneficiaries, year. Each hit carries the drug's claim/cost volume and the prescriber's specialty/state/city. Public CMS provider-level data; not a consumer report.
prescribers.partDClassYoyDelta.searchGET /v1/prescribers/part-d/class-yoy-delta/search$0.100Find prescribers who ENTERED or LEFT a Medicare Part D therapeutic class year-over-year (PY2023→PY2024) — the switchable moment for a pharma team. direction=new_entrant returns NPIs writing the class in 2024 who wrote ≤max_prior_claims in 2023 (new-to-class); direction=de_adopter returns NPIs whose class volume fell ≥min_pct_drop%. Filter by drug_class (GLP-1|SGLT2|DPP-4|Statin), state, specialty. Public CMS provider-level data; not a consumer report.
prescribers.partDClassWhitespace.searchGET /v1/prescribers/part-d/class-whitespace/search$0.100Find high-volume Medicare Part D prescribers of a therapeutic class who have NO reported CMS Open Payments — the greenfield 'reachable before a competitor' audience for a smaller or newer brand. Filter by drug_class (GLP-1|SGLT2|DPP-4|Statin), min_claims, state, specialty, and optionally nature_of_payment (whitespace within that payment category). Anti-join of by-drug prescribers to Open Payments recipients. Public CMS data; not a consumer report.
prescribers.partDAtypicalSpecialty.searchGET /v1/prescribers/part-d/atypical-specialty/search$0.100Find Medicare Part D prescribers of a therapeutic class whose specialty is OUTSIDE the class's typical set — off-specialty early adopters (e.g. a GLP-1 written by a cardiologist or nephrologist rather than an endocrinologist/PCP). Filter by drug_class (GLP-1|SGLT2|DPP-4|Statin), min_claims, state; override the typical set with typical_specialties. Public CMS provider-level data; not a consumer report.
prescribers.partDBrandShareShift.searchGET /v1/prescribers/part-d/brand-share-shift/search$0.100Find prescribers whose within-class molecule mix shifted toward or away from a molecule year-over-year (PY2023→PY2024) — e.g. GLP-1 prescribers moving share toward Tirzepatide. Params: drug_class (GLP-1|SGLT2|DPP-4|Statin), molecule (a generic in the class), direction (toward|away), min_claims (class volume), min_share_shift (percentage points), state, specialty. Share is molecule claims ÷ class claims that year. Public CMS data; not a consumer report.
prescribers.lookup.searchGET /v1/prescribers/lookup/search$0.050Look up a prescriber by NAME (or exact NPI) and get identity plus a Medicare Part D prescribing summary. Matches the NPPES directory by name prefix (first/last), optionally narrowed by state and specialty, then rolls up that NPI's latest-year Part D claims: top drug, distinct drugs, beneficiaries, and tracked class flags (GLP-1/SGLT2/DPP-4/Statin) with a new-to-class signal. Provide name or npi. Public CMS + NPPES provider-level data; not a consumer report.
prescribers.partD.searchGET /v1/prescribers/part-d/search$0.100Screen Medicare Part D prescribers by specialty, state, and claim volume — the per-prescriber roster a pharma / device team targets. Optional drug_category (brand | opioid | opioid_long_acting | antibiotic) selects the matching CMS *_total_claims column for BOTH the min_claims threshold and the ranking (else total_claims). Returns one row per NPI with the CMS claim rollups. Public CMS provider-level data; not a consumer report.
openPayments.recipients.searchGET /v1/open-payments/recipients/search$0.100Screen physicians industry is already paying — the recipient side of the CMS Open Payments (Sunshine Act) file, ranked by total reported payment amount. Filter by specialty, state, nature_of_payment, and min_amount. Prescriber name / specialty / state / city are resolved by joining the NPI to the CMS Part D Prescribers file (Open Payments carries none of them). Public CMS provider-level data; not a consumer report.
openPayments.recipients.yoyIncrease.searchGET /v1/open-payments/recipients/yoy-increase/search$0.100Physicians whose TOTAL CMS Open Payments industry payments genuinely increased year-over-year — a real per-NPI delta (amount_current vs amount_prior), not a magnitude threshold. Defaults to 2023→2024 (any loaded year pair selectable via year/prior_year). Filter: specialty, state, min_increase_usd (default $1,000), min_pct_change (default 10%). Only physicians paid in BOTH years with a real rise clearing both thresholds are returned. Public CMS provider-level data; not a consumer report.
manufacturers.openPayments.yoyIncrease.searchGET /v1/manufacturers/yoy-increase/search$0.100Manufacturers/GPOs whose TOTAL Open Payments spend genuinely increased year-over-year — a real per-manufacturer delta (amount_current vs amount_prior), not a magnitude threshold. Defaults to 2023→2024 (any loaded year pair via year/prior_year). Filter: specialty, state, min_increase_usd (default $10,000), min_pct_change (default 10%). NOTE: op_manufacturer_payments holds only PY2024 today — real, returns total_matched=0 (never fabricated) until a prior year is imported; see stage1b-report.md.

Webhooks

The provider change-event feed (providers.events.feed) can also push to you: a webhook subscription filters events by type and/or state and POSTs matching events to your HTTPS endpoint at the end of every refresh run, batched, in ascending event_id order. Subscriptions are set up per account (not self-serve yet) — email hello@healthparse.io with your gateway key, filters, and endpoint URL. See a full sample delivery.

  • Signature — every request carries X-Healthparse-Signature: sha256=<hex>, an HMAC-SHA256 of the raw request body with your subscription secret, plus X-Healthparse-Delivery (per-delivery UUID) and X-Healthparse-Event-Count. Verify by recomputing the HMAC over the exact raw body before parsing.
  • Delivery semantics — at-least-once. Each subscription keeps a strict cursor (last_delivered_event_id) that advances only after your endpoint returns 2xx; a failed or timed-out delivery is retried with the same events on the next refresh run. Dedupe on event_id or dedupe_key.
  • Payload — JSON: { subscription_id, delivered_at, event_count, events: [...] }, where each event has the same shape as a /v1/providers/events row.
# Verify a delivery (Node):
const { createHmac, timingSafeEqual } = require("node:crypto");
const expected = "sha256=" +
  createHmac("sha256", SECRET).update(rawBody, "utf8").digest("hex");
const ok = timingSafeEqual(
  Buffer.from(expected), Buffer.from(req.headers["x-healthparse-signature"]));

Full input schemas and output examples for every endpoint are in the JSON catalog. Data is derived from public U.S. government sources; per-dataset attribution and redistribution terms are at /v1/license.