Claims & MPPR API
API v1Check cross-line claim rules, NCCI edits, unit ceilings, and multiple-procedure reductions.
Claim check
Check the lines of one claim (one patient, one date of service) against the rules that only
exist between lines: the multiple-procedure reduction (MPPR) ranks the surgical lines
and pays 100%/50%/50%…, NCCI procedure-to-procedure (PTP) edits flag pairs that bundle
(including whether a 59/X{EPSU} modifier bypasses the edit), and medically
unlikely edits (MUE) check units per line or summed per date of service, per each code's
adjudication indicator.
PTP and MUE verdicts are edit facts, not deductions — a flagged line keeps its computed amount and the flag says why a payer would deny it. Two releases answer a claim check and both are echoed: the PFS release that priced the lines and the NCCI release that supplied the edits. When no NCCI release covers the period, the edit sections are absent and a warning says so.
/v1/claims/check
- lines
- array — required
- Up to 50 claim lines, each an object { code, modifier?, units?, time_minutes? }. The whole claim is one patient on one date of service — that scope is what makes the cross-line rules meaningful.
- lines.*.modifier
- string
- The billed modifier. Informational modifiers (59, XE/XS/XP/XU, 25, 51, …) are accepted: they don't change the fee-schedule amount, but 59/X{EPSU} drive the NCCI PTP bypass check.
- lines.*.units
- integer
- Units of service on the line (default 1). Feeds the MUE check for every indicator; also multiplies into MPPR ranking for indicator-5 (therapy) lines specifically — a 2-unit line contributes 2 ranking slots.
- qpp
- boolean
- Claim-level (one claim has one rendering provider): use the QP conversion factor (CY2026+).
- claim_type
- professional|institutional
- Disambiguates indicator-5 (therapy) MPPR for a date of service in 2013-01-01–2013-03-31 only, when CMS's reduction depends on claim format (837P vs 837I), not date alone. Applies to every line on the claim.
- locality / locality_id / zip
- string / integer / string
- Same as the single lookup — shared across every line on the claim.
- setting, sequestration, year, quarter, as_of
- Same as the single lookup. as_of doubles as the claim's date of service for the PTP effective/deletion windows.
| Param | Type | Description |
|---|---|---|
| lines | array — required | Up to 50 claim lines, each an object { code, modifier?, units?, time_minutes? }. The whole claim is one patient on one date of service — that scope is what makes the cross-line rules meaningful. |
| lines.*.modifier | string | The billed modifier. Informational modifiers (59, XE/XS/XP/XU, 25, 51, …) are accepted: they don't change the fee-schedule amount, but 59/X{EPSU} drive the NCCI PTP bypass check. |
| lines.*.units | integer | Units of service on the line (default 1). Feeds the MUE check for every indicator; also multiplies into MPPR ranking for indicator-5 (therapy) lines specifically — a 2-unit line contributes 2 ranking slots. |
| qpp | boolean | Claim-level (one claim has one rendering provider): use the QP conversion factor (CY2026+). |
| claim_type | professional|institutional | Disambiguates indicator-5 (therapy) MPPR for a date of service in 2013-01-01–2013-03-31 only, when CMS's reduction depends on claim format (837P vs 837I), not date alone. Applies to every line on the claim. |
| locality / locality_id / zip | string / integer / string | Same as the single lookup — shared across every line on the claim. |
| setting, sequestration, year, quarter, as_of | Same as the single lookup. as_of doubles as the claim's date of service for the PTP effective/deletion windows. |
curl -X POST https://localishealth.com/v1/claims/check \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"lines": [{"code": "27447"}, {"code": "27369", "modifier": "59", "units": 1}], "locality": "01182-18"}'
{
"release": { "schedule": "pfs", "year": 2026, "quarter": "A", "revision": 1 },
"ncci_release": { "schedule": "ncci", "year": 2026, "quarter": "A", "revision": 1 },
"locality": { "mac": "01182", "code": "18", "state": "CA", "name": "Los Angeles, CA" },
"setting": "non_facility",
"sequestration_requested": false,
"count": 2,
"lines": [
{
"line": 0, "hcpcs": "27447", "modifier": null, "units": 1,
"payable": true, "amount": 1391.42, "gross_amount": 1391.42,
"rate": { "hcpcs": "27447", "amount": 1391.42, "payable": true, … },
"mppr": { "rank": 1, "percentage_applied": 1.0, "adjusted_amount": 1391.42, "reduction_applied": false, "silo": "standard" },
"mue": { "within_limit": true, "limit": 1, "adjudication_indicator": 2, "units_counted": 1, … }
},
{
"line": 1, "hcpcs": "27369", "modifier": "59", "units": 1,
"payable": true, "amount": 103.55, "gross_amount": 103.55,
"rate": { "hcpcs": "27369", "amount": 207.10, "gross_amount": 207.10, "payable": true, … },
"mppr": { "rank": 2, "percentage_applied": 0.5, "base_allowed": 207.10, "adjusted_amount": 103.55, "reduction_applied": true, "silo": "standard" },
"mue": { … }
}
],
"ptp_edits": [
{
"column1": { "line": 0, "hcpcs": "27447" },
"column2": { "line": 1, "hcpcs": "27369" },
"modifier_indicator": "1",
"bundled": true, "bypassable": true, "billable": true,
"reason": "Modifier indicator 1: bypassed by modifier 59.",
"citation": { "file": "ccipra-…csv", "row": 118204, … }
}
]
}
The per-line audit chain reads rate.gross_amount (the base allowed amount)
→ mppr.adjusted_amount (after ranking) → amount (after
sequestration, when requested). mppr.silo names which MPPR ranking pool priced the
line (standard, endoscopy, imaging, therapy, cardio, or ophtho) and, when a reduction cites a specific
CMS transmittal or manual section, mppr.citation carries it. A line whose silo couldn't
price it (missing component data, an unresolvable endoscopy base code) is never guessed — it comes
back at full amount with a reason.
NCCI procedure-to-procedure edit
Whether CMS bundles a code pair, without constructing a claim. Same rows that drive claim check — reach for this when the question is the reference fact rather than a specific claim.
PTP pairs are directional: column 2 is the component code that gets denied. You don't have to know which side yours is on — both orders are checked, and the response names the real column assignment. A pair with no edit is not thereby payable together; MUE, medical necessity, and each code's fee-schedule status are separate gates.
/v1/ncci/ptp
- code_1
- string — required
- One of the two codes. Order doesn't matter — both directions are checked, and the response reports which code CMS files in column 2.
- code_2
- string — required
- The other code.
- as_of
- date
- Selects the NCCI release effective on this date and supplies the date of service for the edit's effective/deletion window. Defaults to today.
- year, quarter
- integer, A|B|C|D
- Answer from a specific NCCI release instead of the latest.
| Param | Type | Description |
|---|---|---|
| code_1 | string — required | One of the two codes. Order doesn't matter — both directions are checked, and the response reports which code CMS files in column 2. |
| code_2 | string — required | The other code. |
| as_of | date | Selects the NCCI release effective on this date and supplies the date of service for the edit's effective/deletion window. Defaults to today. |
| year, quarter | integer, A|B|C|D | Answer from a specific NCCI release instead of the latest. |
curl "https://localishealth.com/v1/ncci/ptp?code_1=11111&code_2=22222" \
-H "Authorization: Bearer sk_live_…"
{
"codes": ["11111", "22222"],
"as_of": "2026-08-10",
"edit": {
"column_1": "11111",
"column_2": "22222",
"modifier_indicator": "1",
"effective_date": "2013-01-01",
"deletion_date": null
},
"bundled": true,
"bypassable": true,
"bypass_modifiers": ["59", "XE", "XS", "XP", "XU"],
"reason": "Modifier indicator 1: bundled without an NCCI-associated modifier …",
"release": { "schedule": "ncci", "year": 2026, "quarter": "A", "revision": 1 }
}
Medically unlikely edit
The unit ceiling for a code, with the window it applies over — which is what makes the bare number safe to act on. Indicator 1 is a claim-line edit; 2 and 3 apply across every line of the code on one date of service, so three lines of two units is six units against the ceiling, not two.
2 and 3 are both date-of-service edits but are not interchangeable, and the response distinguishes them: an indicator of 2 is absolute, and CMS instructs contractors that overriding it would be contrary to CMS policy, while an indicator of 3 rests on clinical benchmarks and a contractor may bypass it given evidence the units were provided, correctly coded, and medically necessary. Either way the denial is appealable — the indicator governs the contractor's bypass, not your right to appeal.
/v1/mue/{hcpcs}
- mue_value
- integer
- The unit ceiling CMS publishes for the code.
- adjudication_indicator
- integer
- 1 is a claim-line edit; 2 and 3 apply per date of service.
- adjudication
- string
- The window the ceiling applies over, spelled out — "claim line" or "date of service".
- adjudication_basis
- string|null
- What a date-of-service ceiling rests on — "absolute" for indicator 2, "clinical benchmarks" for 3. Null for a claim-line edit, where the question doesn't arise in this form.
- contractor_may_bypass
- boolean
- Whether a contractor may allow units above the ceiling on evidence. True only for indicator 3. False for 1 not because the units are unrecoverable, but because the remedy there is reporting them correctly across lines rather than a contractor override.
- notes[]
- array
- Rule statements, each with a stable code and — where it states a rule rather than describes our data — a source naming the CMS document, passage, and sentence.
- year, quarter
- integer, A|B|C|D
- Answer from a specific NCCI release instead of the latest.
- as_of
- date
- Answer from the NCCI release effective on this date instead of the latest.
| Param | Type | Description |
|---|---|---|
| mue_value | integer | The unit ceiling CMS publishes for the code. |
| adjudication_indicator | integer | 1 is a claim-line edit; 2 and 3 apply per date of service. |
| adjudication | string | The window the ceiling applies over, spelled out — "claim line" or "date of service". |
| adjudication_basis | string|null | What a date-of-service ceiling rests on — "absolute" for indicator 2, "clinical benchmarks" for 3. Null for a claim-line edit, where the question doesn't arise in this form. |
| contractor_may_bypass | boolean | Whether a contractor may allow units above the ceiling on evidence. True only for indicator 3. False for 1 not because the units are unrecoverable, but because the remedy there is reporting them correctly across lines rather than a contractor override. |
| notes[] | array | Rule statements, each with a stable code and — where it states a rule rather than describes our data — a source naming the CMS document, passage, and sentence. |
| year, quarter | integer, A|B|C|D | Answer from a specific NCCI release instead of the latest. |
| as_of | date | Answer from the NCCI release effective on this date instead of the latest. |
{
"hcpcs": "11111",
"mue_value": 3,
"adjudication_indicator": 3,
"adjudication": "date of service",
"adjudication_basis": "clinical benchmarks",
"contractor_may_bypass": true,
"release": { "schedule": "ncci", "year": 2026, "quarter": "A", "revision": 1 },
"notes": [
{
"code": "mue_adjudicated_per_day_clinical",
"message": "Adjudication indicator 3 is a date-of-service edit based on clinical benchmarks: …",
"source": {
"label": "CMS Medicare NCCI Policy Manual (2026)",
"url": "https://www.cms.gov/files/document/2026-ncci-medicare-policy-manual-all-chapters.pdf",
"locator": "Chapter 1, pages I-27–I-28",
"quote": "the contractor may bypass the MUE for a HCPCS code with an MAI of \"3\" …"
}
}
]
}
Each entry in notes carries a stable code you can branch on, and — where the statement is a rule rather than a description of our own data — a source naming the CMS document, the passage, and the sentence it rests on. The codes are part of the API contract; we won't rename or reuse one once it ships.
MPPR calculator
The dedicated Multiple Procedure Payment Reduction endpoint — same engine as
claim check,
with a response shaped for the MPPR question specifically. Every reduction — and every
non-reduction — carries a reason and a citation, and the response adds a
summary block grouping lines by ranking silo (standard, endoscopy, imaging,
therapy, cardio, ophtho) with the unreduced-vs-reduced totals, so you don't have to compute
the delta by hand.
/v1/mppr
- lines
- array — required
- Up to 50 claim lines, each an object { code, modifier?, units?, time_minutes? }. The whole claim is one patient on one date of service — that scope is what makes the cross-line rules meaningful.
- lines.*.modifier
- string
- The billed modifier. Informational modifiers (59, XE/XS/XP/XU, 25, 51, …) are accepted: they don't change the fee-schedule amount, but 59/X{EPSU} drive the NCCI PTP bypass check.
- lines.*.units
- integer
- Units of service on the line (default 1). Feeds the MUE check for every indicator; also multiplies into MPPR ranking for indicator-5 (therapy) lines specifically — a 2-unit line contributes 2 ranking slots.
- qpp
- boolean
- Claim-level (one claim has one rendering provider): use the QP conversion factor (CY2026+).
- claim_type
- professional|institutional
- Disambiguates indicator-5 (therapy) MPPR for a date of service in 2013-01-01–2013-03-31 only, when CMS's reduction depends on claim format (837P vs 837I), not date alone. Applies to every line on the claim.
- locality / locality_id / zip
- string / integer / string
- Same as the single lookup — shared across every line on the claim.
- setting, sequestration, year, quarter, as_of
- Same as the single lookup. as_of doubles as the claim's date of service for the PTP effective/deletion windows.
| Param | Type | Description |
|---|---|---|
| lines | array — required | Up to 50 claim lines, each an object { code, modifier?, units?, time_minutes? }. The whole claim is one patient on one date of service — that scope is what makes the cross-line rules meaningful. |
| lines.*.modifier | string | The billed modifier. Informational modifiers (59, XE/XS/XP/XU, 25, 51, …) are accepted: they don't change the fee-schedule amount, but 59/X{EPSU} drive the NCCI PTP bypass check. |
| lines.*.units | integer | Units of service on the line (default 1). Feeds the MUE check for every indicator; also multiplies into MPPR ranking for indicator-5 (therapy) lines specifically — a 2-unit line contributes 2 ranking slots. |
| qpp | boolean | Claim-level (one claim has one rendering provider): use the QP conversion factor (CY2026+). |
| claim_type | professional|institutional | Disambiguates indicator-5 (therapy) MPPR for a date of service in 2013-01-01–2013-03-31 only, when CMS's reduction depends on claim format (837P vs 837I), not date alone. Applies to every line on the claim. |
| locality / locality_id / zip | string / integer / string | Same as the single lookup — shared across every line on the claim. |
| setting, sequestration, year, quarter, as_of | Same as the single lookup. as_of doubles as the claim's date of service for the PTP effective/deletion windows. |
curl -X POST https://localishealth.com/v1/mppr \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"lines": [{"code": "70450"}, {"code": "71250"}], "locality": "01182-18"}'
{
"release": { "schedule": "pfs", "year": 2026, "quarter": "A", "revision": 1 },
"count": 2,
"lines": [
{
"line": 0, "hcpcs": "70450", "modifier": null, "units": 1,
"payable": true, "amount": 60.00,
"mppr": { "rank": 1, "silo": "imaging", "adjusted_amount": 60.00, "reduction_applied": false, "reason": "TC ranked 1 …" }
},
{
"line": 1, "hcpcs": "71250", "modifier": null, "units": 1,
"payable": true, "amount": 19.50,
"mppr": {
"silo": "imaging", "adjusted_amount": 19.50, "reduction_applied": true,
"reason": "TC rank 2: TC −50%, ACA §3135(b), effective 2010-07-01. PC rank 2: PC −5%, CAA 2016 §502(a)(2), effective 2017-01-01.",
"citation": { "label": "CMS Transmittal R694OTN: MPPR on the Technical Component of Certain Diagnostic Imaging Procedures", "url": "https://www.cms.gov/…" }
}
}
],
"summary": {
"by_silo": { "imaging": [0, 1] },
"totals": { "unreduced_total": 80.00, "reduced_total": 79.50, "delta": 0.50, "by_report_line_count": 0 }
}
}
MPPR policy table
The date-ranged rule table behind MPPR pricing, as data — every rule with its effective range, percentage, mechanics, and citation. Static and release-independent, and the natural home for advertising an upcoming (future-dated) rule change once it's appended. Rules are append-only: an old date of service always resolves to the rule that was actually in force.
/v1/mppr/policy
{
"count": 11,
"rows": [
{
"indicator": "7", "component": "tc", "percentage_paid": 0.80,
"effective_from": "2013-01-01", "effective_to": null,
"mechanics": "TC reduced 20% for the second and subsequent ranked procedure …",
"authority_note": null, "claim_type": null,
"citation": { "label": "CMS Transmittal R1149OTN: MPPR on the Technical Component of Diagnostic Cardiovascular and Ophthalmology Procedures", "url": "https://www.cms.gov/…" }
}
]
}