Reference data API
API v1Inspect published releases, their exact source files, and the payment rules the pricing engine applies.
Release directory
Every (schedule, year, quarter) release published, newest first — including the
zip_locality crosswalk releases the ZIP endpoints resolve against.
/v1/releases
{
"count": 6,
"releases": [
{ "schedule": "pfs", "year": 2026, "quarter": "A", "published_at": "2026-01-01" },
{ "schedule": "zip_locality", "year": 2026, "quarter": "A", "published_at": "2026-01-01" }
]
}
Release source files
The CMS files behind one release, with each file's SHA-256, row count, and column map. Where the citations on a rate answer "where did this number come from", this answers "what exactly did you parse for this whole release" — the manifest you'd pin an ingest to, or diff to spot CMS moving a column between quarters.
Metadata only. The archived bytes stay internal, and archive.download_url points at CMS's own published zip rather than at us.
/v1/releases/{schedule}/{year}/{quarter}/sources
- sources.*.dataset
- string
- Which input the file fed — "rvu", "gpci", "zip_locality", "opps_caps", "anesthesia", and so on.
- sources.*.file
- string
- The member file inside the CMS release, e.g. "PPRRVU2026_Jan_nonQPP.csv".
- sources.*.sha256
- string
- SHA-256 of that member file — pin an ingest to it and you can prove you read the same bytes we did.
- sources.*.row_count
- integer
- Data rows parsed out of the file.
- sources.*.columns
- object
- The file's own header names mapped to their 1-based column positions. Diff this between releases to catch CMS renaming or reordering a column.
- archive
- object
- The outer CMS zip: its file name, CMS download URL, and SHA-256 where CMS publishes a stable one.
| Param | Type | Description |
|---|---|---|
| sources.*.dataset | string | Which input the file fed — "rvu", "gpci", "zip_locality", "opps_caps", "anesthesia", and so on. |
| sources.*.file | string | The member file inside the CMS release, e.g. "PPRRVU2026_Jan_nonQPP.csv". |
| sources.*.sha256 | string | SHA-256 of that member file — pin an ingest to it and you can prove you read the same bytes we did. |
| sources.*.row_count | integer | Data rows parsed out of the file. |
| sources.*.columns | object | The file's own header names mapped to their 1-based column positions. Diff this between releases to catch CMS renaming or reordering a column. |
| archive | object | The outer CMS zip: its file name, CMS download URL, and SHA-256 where CMS publishes a stable one. |
curl https://localishealth.com/v1/releases/pfs/2026/A/sources \
-H "Authorization: Bearer sk_live_…"
{
"release": { "schedule": "pfs", "year": 2026, "quarter": "A", "revision": 1, "superseded": false },
"cms_page_url": "https://www.cms.gov/medicare/payment/fee-schedules/physician/pfs-relative-value-files",
"archive": { "file": "RVU26A.zip", "download_url": "https://www.cms.gov/…/rvu26a.zip", "sha256": "…" },
"count": 4,
"sources": [
{
"dataset": "gpci",
"file": "GPCI2026.csv",
"sha256": "f28471c5…",
"row_count": 113,
"columns": { "MAC": 1, "STATE": 2, "LOCALITY_NUMBER": 3, "WORK_GPCI": 6, "PE_GPCI": 7, "MP_GPCI": 8 }
}
]
}
{schedule} is a value from the release directory — pfs, zip_locality, ncci, and so on. A quarter that was corrected answers with the revision currently in force.
Pricing-rule coverage matrix
Which PFS payment rules this API applies, applies with a documented simplification, or
deliberately does not apply. When a rule is not_applied, affected
lines are priced at full amount and the pricing response carries a reason — never a guessed
discount. Static and release-independent; useful for audit trails and for deciding which
claim shapes to route elsewhere. The human-readable version lives on the methodology page.
/v1/pricing-rules
{
"statuses": { "applied": "…", "partial": "…", "not_applied": "…" },
"areas": { "formula": "Formula & payability", … },
"count": 25,
"rules": [
{
"id": "mppr-standard",
"area": "multiple-procedure",
"name": "Standard multiple-procedure reduction (indicator 2)",
"status": "applied",
"does": "Indicator-2 lines on a claim are ranked by fee-schedule amount: …",
"limit": null,
"indicator": { "field": "multiple_proc_indicator", "value": "2" }
}
]
}
Conversion factors
The national physician conversion factor(s) and every locality's anesthesia conversion factor for one PFS release — the last term in the payment formula, alongside GPCI and RVU rows.
Each CF type traces to a different CMS file, so sources carries one entry per contributing dataset rather than a single file reference: the standard physician CF is read from the PPRRVU file itself, the qualifying-APM physician CF (CY2026+) from the separate QPP PPRRVU file, and anesthesia CFs from their own per-locality file.
Anesthesia rows keep the release-stable MAC/locality key and omit mutable cross-release locality names and states.
/v1/conversion-factors
- year, quarter, as_of
- Answer from a specific PFS release instead of the latest.
| Param | Type | Description |
|---|---|---|
| year, quarter, as_of | Answer from a specific PFS release instead of the latest. |
curl https://localishealth.com/v1/conversion-factors \
-H "Authorization: Bearer sk_live_…"
{
"release": { "schedule": "pfs", "year": 2026, "quarter": "A", "revision": 1 },
"sources": {
"rvu": { "dataset": "rvu", "file": "PPRRVU2026_Jan_nonQPP.csv", "sha256": "…", "row_count": 11762 },
"rvu_qpp": { "dataset": "rvu_qpp", "file": "PPRRVU2026_Jan_QPP.csv", "sha256": "…", "row_count": 11413 },
"anesthesia": { "dataset": "anesthesia", "file": "ANES2026.csv", "sha256": "…", "row_count": 109 }
},
"count": 220,
"national": [
{ "type": "physician", "amount": 33.4009 },
{ "type": "physician_qpp", "amount": 33.5675 }
],
"anesthesia": [
{ "type": "anesthesia_non_qpp", "locality": "01182-18", "mac": "01182", "code": "18", "amount": 24.3312 },
{ "type": "anesthesia_qpp", "locality": "01182-18", "mac": "01182", "code": "18", "amount": 24.9312 }
]
}
national.physician is the standard/non-QP CF — the headline number CMS publishes and the basis rate lookups use by default. physician_qpp only exists from CY2026 on, when MACRA split the physician CF in two.