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.
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)
| ID | Endpoint | Price | What it answers |
|---|---|---|---|
| hcris.hospital.search | GET /v1/hospitals/search | $0.020 | Search 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.byCcn | GET /v1/hospitals/:ccn | $0.010 | Hospital 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.search | GET /v1/asc/search | $0.020 | Search ambulatory surgical centers (ASCs) by state, CCN, or name. Answers: which ASCs are in a given market? Source: CMS ASC cost data. |
| hcris.provider.search | GET /v1/providers/search | $0.020 | Search 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.search | GET /v1/nonprofits/search | $0.020 | Search 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.byEin | GET /v1/nonprofits/:ein | $0.010 | Nonprofit 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.search | GET /v1/nonprofits/officers/search | $0.020 | Search 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.search | GET /v1/exclusions/search | $0.030 | Search 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.search | GET /v1/wages/search | $0.020 | Healthcare 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.search | GET /v1/facilities/hospitals/search | $0.020 | Search 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.byCcn | GET /v1/facilities/hospitals/:ccn | $0.010 | CMS 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.search | GET /v1/facilities/snf/search | $0.020 | Search 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.byCcn | GET /v1/facilities/snf/:ccn | $0.010 | CMS 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.search | GET /v1/facilities/home-health/search | $0.020 | Search 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.byCcn | GET /v1/facilities/home-health/:ccn | $0.010 | CMS 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.search | GET /v1/facilities/hospice/search | $0.020 | Search 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.byCcn | GET /v1/facilities/hospice/:ccn | $0.010 | CMS 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.search | GET /v1/facilities/dialysis/search | $0.020 | Search 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.byCcn | GET /v1/facilities/dialysis/:ccn | $0.010 | CMS 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.search | GET /v1/prices/search | $0.030 | Search 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.screen | GET /v1/screen | $0.150 | Screen 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.stats | GET /v1/prices/stats/:code | $0.005 | National 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.financials | GET /v1/hospitals/:ccn/financials | $0.050 | Multi-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.feed | GET /v1/providers/events | $0.100 | Provider 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.signals | GET /v1/hospitals/capex-signals | $0.100 | Hospital 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.provider360 | GET /v1/providers/:npi/provider360 | $0.250 | One-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.search | GET /v1/manufacturers/search | $0.030 | Discover 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.openPayments | GET /v1/manufacturers/open-payments | $0.030 | Which 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.search | GET /v1/health-centers/search | $0.030 | Discover 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.search | GET /v1/hpsa/search | $0.030 | Find 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.search | GET /v1/covered-entities-340b/search | $0.030 | Search 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.search | GET /v1/providers/enumeration | $0.030 | Newly-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.search | GET /v1/prescribers/part-d/by-drug/search | $0.030 | Find 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.search | GET /v1/prescribers/part-d/class-yoy-delta/search | $0.100 | Find 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.search | GET /v1/prescribers/part-d/class-whitespace/search | $0.100 | Find 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.search | GET /v1/prescribers/part-d/atypical-specialty/search | $0.100 | Find 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.search | GET /v1/prescribers/part-d/brand-share-shift/search | $0.100 | Find 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.search | GET /v1/prescribers/lookup/search | $0.050 | Look 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.search | GET /v1/prescribers/part-d/search | $0.100 | Screen 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.search | GET /v1/open-payments/recipients/search | $0.100 | Screen 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.search | GET /v1/open-payments/recipients/yoy-increase/search | $0.100 | Physicians 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.search | GET /v1/manufacturers/yoy-increase/search | $0.100 | Manufacturers/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, plusX-Healthparse-Delivery(per-delivery UUID) andX-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 onevent_idordedupe_key. - Payload — JSON:
{ subscription_id, delivered_at, event_count, events: [...] }, where each event has the same shape as a/v1/providers/eventsrow.
# 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.