Medicare fee schedule API
Medicare rates in your product. Maintained for you.
Send a code, ZIP and date of service. Get the allowed amount, the payment locality and the CMS release behind it, with every quarterly update handled on our side.
Edit the code or ZIP
Live data
GET/v1/rates/?zip=&setting=non_facility
Sending…- codes with a Medicare rate
- 8,570
- payment localities
- 109
- ZIP codes mapped
- 42,957
- CMS releases since 2013
- 135
Serving nowRVU26D · ZIP2026Q4Coverage details
Source attached
Every amount traces to a line in a CMS file.
Add include=sources and each rate comes back with the CMS archive, file and line it was read from. Audits and disputes start from evidence, not a screenshot.
99214 · Manhattan (ZIP 10001) · office
ZIP to locality, solved
One code. 109 different answers.
Medicare pays 99214 differently in each payment locality. Send a ZIP and we resolve the locality that applied on the date of service.
109 payment localities
$123.92 to $170.02
Every release, versioned
Any date of service. The rate that applied then.
The date of service picks the release, and each response returns its release ID. Here is 99214 in Manhattan across every release we serve.
Q1 2013
$119.41
RVU13AR
Q2 2013
$119.41
RVU13B
Q3 2013
$119.41
RVU13C
Q4 2013
$119.41
RVU13D
Q1 2014
$121.08
RVU14A+$1.67
Q2 2014
$121.08
RVU14B
Q3 2014
$121.08
RVU14C
Q4 2014
$121.08
RVU14D
Q1 2015
$122.45
RVU15A+$1.37
Q2 2015
$122.45
RVU15B
Q3 2015
$123.06
RVU15C+$0.61
Q4 2015
$123.06
RVU15D
Q1 2016
$122.20
RVU16A−$0.86
Q2 2016
$122.20
RVU16B
Q3 2016
$122.20
RVU16C
Q4 2016
$122.20
RVU16D
Q1 2017
$122.95
RVU17A+$0.75
Q2 2017
$122.95
RVU17B
Q3 2017
$122.95
RVU17C
Q4 2017
$122.95
RVU17D
Q1 2018
$123.79
RVU18AR1+$0.84
Q2 2018
$123.79
RVU18B
Q3 2018
$123.79
RVU18C
Q4 2018
$123.79
RVU18D
Q1 2019
$124.78
RVU19A+$0.99
Q2 2019
$124.78
RVU19B
Q3 2019
$124.78
RVU19C
Q4 2019
$124.78
RVU19D
Q1 2020
$126.67
RVU20A+$1.89
Q2 2020
$126.67
RVU20B
Q3 2020
$126.67
RVU20C
Q4 2020
$126.67
RVU20D
Q1 2021
$152.03
RVU21A+$25.36
Q2 2021
$152.03
RVU21B
Q3 2021
$152.03
RVU21C
Q4 2021
$152.03
RVU21D
Q1 2022
$149.79
RVU22A−$2.24
Q2 2022
$149.79
RVU22B
Q3 2022
$149.79
RVU22C
Q4 2022
$149.79
RVU22D
Q1 2023
$147.19
RVU23A−$2.60
Q2 2023
$147.19
RVU23B
Q3 2023
$147.19
RVU23C
Q4 2023
$147.19
RVU23D
Q1 2024
$142.89
RVU24A−$4.30
Q1 2024
$145.26
RVU24AR+$2.37
Q2 2024
$145.26
RVU24B
Q3 2024
$145.26
RVU24C
Q4 2024
$145.26
RVU24D
Q1 2025
$142.07
RVU25A−$3.19
Q2 2025
$142.07
RVU25B
Q3 2025
$142.07
RVU25C
Q4 2025
$142.07
RVU25D
Q1 2026
$153.27
RVU26A+$11.20
Q2 2026
$153.27
RVU26B
Q3 2026
$153.27
RVU26C
Q4 2026
$153.27
RVU26D
Batch pricing
Price a whole code list at once.
Send a list of codes with a shared ZIP, date and setting. Results come back in the order you asked, and unknown codes stay in place with a reason.
GET/v1/rates?codes[]=99213&codes[]=99214&codes[]=99215&codes[]=93000&codes[]=97110&zip=10001&setting=non_facility&date=2026-11-07
| Code | Service | amount |
|---|---|---|
| 99213 | Office visit, established, low | 10763$107.63 |
| 99214 | Office visit, established, moderate | 15327$153.27 |
| 99215 | Office visit, established, high | 21737$217.37 |
| 93000 | Electrocardiogram, complete | 1758$17.58 |
| 97110 | Therapeutic exercise, 15 min | 3243$32.43 |
▸ Raw response▾ Raw response
{
"data": [
{
"code": "99213",
"amount": 10763,
"currency": "usd",
"setting": "non_facility",
"date": "2026-11-07",
"qp_status": "non_qp",
"location": {
"type": "locality",
"id": "13202-01",
"geography_match": "exact"
},
"release": 1,
"payment_status": "A",
"fee_schedule": "pfs"
},
{
"code": "99214",
"amount": 15327,
"currency": "usd",
"setting": "non_facility",
"date": "2026-11-07",
"qp_status": "non_qp",
"location": {
"type": "locality",
"id": "13202-01",
"geography_match": "exact"
},
"release": 1,
"payment_status": "A",
"fee_schedule": "pfs"
},
{
"code": "99215",
"amount": 21737,
"currency": "usd",
"setting": "non_facility",
"date": "2026-11-07",
"qp_status": "non_qp",
"location": {
"type": "locality",
"id": "13202-01",
"geography_match": "exact"
},
"release": 1,
"payment_status": "A",
"fee_schedule": "pfs"
},
{
"code": "93000",
"amount": 1758,
"currency": "usd",
"setting": "non_facility",
"date": "2026-11-07",
"qp_status": "non_qp",
"location": {
"type": "locality",
"id": "13202-01",
"geography_match": "exact"
},
"release": 1,
"payment_status": "A",
"fee_schedule": "pfs"
},
{
"code": "97110",
"amount": 3243,
"currency": "usd",
"setting": "non_facility",
"date": "2026-11-07",
"qp_status": "non_qp",
"location": {
"type": "locality",
"id": "13202-01",
"geography_match": "exact"
},
"release": 1,
"payment_status": "A",
"fee_schedule": "pfs"
}
]
}
One less system to maintain
New CMS releases are our backlog. Not yours.
CMS changes the data every quarter and the format every year. We parse, check and accept each release, and the API keeps returning correct, backwards-compatible results.
- Changing file formats
- Every year
- Columns, file names and indicator rules shift between years and quarters. Your integration never sees it.
- Codes that come and go
- Every quarter
- New codes appear, old ones are deleted, and prices are revised mid-year. Each date of service gets the right answer.
- Locality factors and conversion factors
- Each revision
- GPCIs for every payment locality, and separate QP and non-QP conversion factors from 2026.
- ZIP to payment locality
- Quarterly
- The carrier locality crosswalk, including ZIPs that CMS splits by ZIP+4.
- Every prior release
- Kept
- Older quarters stay queryable, so a March date of service prices with March’s data.
- Citations
- Every answer
- The CMS archive, file, line and checksum behind each amount.
Release log
GET /v1/releasesBuild or buy
The formula fits on one line. The files don’t.
Every FeeBase amount is computed from CMS’s own RVU, GPCI, conversion factor and ZIP-to-locality files, and comes back with the file and line it was read from. It is the CMS number, not an approximation of it. Building the same thing yourself is possible. This is the work it takes.
01
Archive every quarterly release
RVU, GPCI, anesthesia and lab files, plus the ZIP crosswalk, four times a year. Keep the old ones: a March claim still prices with March’s data.
02
Parse files that keep changing shape
File names and columns shift between quarters and years, and from 2026 there are two RVU payment files, one for QPs and one for everyone else.
03
Map ZIP codes to payment localities
Nearly 43,000 ZIP codes and over a million ZIP+4 rows, re-issued quarterly. Some ZIPs fall in two localities and only the ZIP+4 settles it.
04
Pick the right release for the date
Choose the quarter in effect on the date of service, and the latest correction when CMS re-issues a file for the same period.
05
Handle the codes the formula doesn’t fit
Contractor-priced codes, lab codes paid from the Clinical Lab Fee Schedule, anesthesia base and time units, OPPS-capped rows, codes with no facility rate.
06
Apply the rules around the formula
Modifiers 26 and TC, NP, PA and LCSW percentages, non-participating amounts and limiting charges, therapy multiple-procedure reductions.
Then do it again next quarter, without breaking the answers you gave last quarter. A mistake rarely looks like an error: it looks like a plausible rate from the wrong locality, quarter or conversion factor. What a DIY build involves
Why not use CMS’s own tools?
They’re the right place for an occasional manual check. None of them returns an allowed amount for a code, ZIP and date of service.
- PFS Look-Up Tool
- A search page for people. You accept an AMA license, choose a MAC and locality by name rather than entering a ZIP, and search a single code, a short list or a range.
- Not built to sit behind software.CMS source
- PFS data catalog API
- Open query access to the RVU and GPCI tables on pfs.data.cms.gov. It returns rows, not prices, has no ZIP crosswalk, and updates each year’s data in place.
- You still build the pricing on top.CMS source
- Procedure Price Lookup API
- Requires an AMA license and a CMS-issued key that expires every 60 days. Covers about 3,900 procedures at national averages for hospital outpatient departments and surgery centers.
- Not a physician fee schedule API.CMS source
Checked against CMS’s pages on October 10, 2026. CMS’s lookup tools compared
What teams build
One rate, many jobs.
- Patient cost estimates
- The allowed amount a cost estimator starts from: price each line where the service is given, apply the contract’s percentage, then the patient’s benefits. Therapy visits get timed units and payment reductions applied.
- GET /v1/rates · POST /v1/therapy/estimate
- Payer contract benchmarking
- Most contracts are written as a percentage of Medicare. Compare every payer against the same, citable baseline.
- rate.amount × 1.28
- Setting your own fee schedule
- Price every code you bill as a multiple of Medicare, and update it when CMS does.
- GET /v1/code-sets/{id} · GET /v1/rates
- Market and site comparisons
- See what the same services pay in each locality before opening a location or entering a market.
- GET /v1/localities · GET /v1/rates
- Revenue modelling
- Combine historical service volumes with the rates that apply in each period to size a service line.
- GET /v1/utilization · GET /v1/rates
- Pre-billing checks
- Flag lines that are priced far from the Medicare amount before a bill goes out.
- GET /v1/rates?codes[]=…
The v1 API
A small API with a predictable contract.
Bearer-key auth, JSON, integer cents and ISO dates. Versioned under /v1 with a public changelog.
API reference- GET/v1/rates/{code}One rate at a ZIP, locality or national
- GET/v1/ratesA list of codes in one call
- GET/v1/searchFind codes by number or description
- GET/v1/codes/{code}RVUs, status and payment indicators
- GET/v1/localitiesPayment localities, or resolve a ZIP
- GET/v1/releasesEvery dataset and its effective period
- GET/v1/utilizationHistorical service counts and allowed amounts
- GET/v1/code-setsCurated starting lists by specialty
- POST/v1/therapy/estimateTimed units and therapy MPPR for a visit
- GET/v1/meYour key, plan and usage this period
Errors and gaps
When there’s no answer, you get a reason.
Request errors and unavailable rates are different things, and the API keeps them apart. Neither one is ever a silent zero.
404Unknown code
A request error: fix the input. Nothing is charged.
{
"error": {
"code": "code_not_found",
"message": "This procedure code was not found.",
"param": "code"
}
}
200No Medicare amount
Understood, but CMS doesn’t set a national rate. The reason is machine-readable.
{
"code": "0054T",
"amount": null,
"currency": "usd",
"unavailable_reason": "contractor_priced"
}
422ZIP split across localities
Some ZIPs span two payment areas. We say so instead of guessing.
{
"error": {
"code": "zip_plus4_required",
"message": "Provide ZIP+4 or a locality to resolve the payment locality.",
"param": "zip"
}
}
Pricing
Start small. Move up when you ship.
Included requests each month, then pay only for what you use beyond them. Set a usage limit in your account whenever you need one.
Try it
$49/month
Enough to wire up an integration and see if it fits.
- 500 included requests a month
- $0.20 per additional request
- 5 requests a minute
- Every endpoint, code, locality and release
Scale
$999/month
A maintained Medicare pricing dependency inside your product.
- 100,000 included requests a month
- $0.02 per additional request
- 300 requests a minute
- Commercial use in your product
- Direct engineering support
Enterprise
Custom
For higher volume, data licensing or a negotiated SLA.
- Everything in Scale
- Higher volume and bulk exports
- Contracted SLA and security review
- Invoicing and annual terms
Running a practice rather than building software? Fee sheets and contract analysis are coming soon at $199/month.
Good questions. Clear answers.
How is usage billed?
Month to month. Additional requests are billed after use, and you can turn on Stop at included requests to prevent any extra charges. Failed requests never count.
What about SLAs and response times?
Scale includes direct engineering support. If your integration needs contracted availability or response-time targets, talk to us about Enterprise.
Isn’t CMS the authoritative source?
Yes, and these are CMS’s numbers. Each amount is computed from the CMS RVU, GPCI, conversion factor and ZIP-to-locality files in effect on the date of service, and include=sources returns the archive, file and line behind it, so you can check any amount against CMS directly.
Does CMS have an API for this?
Not one that returns an allowed amount for a code and ZIP. CMS’s PFS data catalog has an open query API over the RVU and GPCI tables, and the Procedure Price Lookup API requires an AMA license and covers national averages for hospital outpatient departments and surgery centers.
Which years are covered?
Physician Fee Schedule and ZIP-to-locality releases from January 2013 onward. The coverage page lists the exact periods and sources.
Are these the amounts Medicare will actually pay?
They are base participating-physician fee schedule amounts before claim-level adjustments such as deductibles, sequestration or multiple-procedure rules. Provider-type and non-participating adjustments are available as options.
Make your first request this afternoon.
Questions before you buy go straight to the engineers who wrote the parser, not a support queue.
