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.
One row per release: revision is the CMS revision in force for that quarter (a superseded correction is disclosed by the sources endpoint, never listed here).
status is current for the release a request without a period resolves to, upcoming for a quarter CMS has published ahead of its effective date (request it explicitly with year and quarter), and historical otherwise.
/v1/releases
{
"count": 6,
"releases": [
{ "schedule": "pfs", "year": 2026, "quarter": "D", "revision": 2, "status": "upcoming", "published_at": "2026-08-26" },
{ "schedule": "pfs", "year": 2026, "quarter": "C", "revision": 1, "status": "current", "published_at": "2026-06-30" },
{ "schedule": "pfs", "year": 2026, "quarter": "B", "revision": 1, "status": "historical", "published_at": "2026-03-10" },
{ "schedule": "zip_locality", "year": 2026, "quarter": "C", "revision": 1, "status": "current", "published_at": null }
]
}
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.