> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rcintell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# NCCI Edits

> Query NCCI MUE limits, PTP bundling edits, and Add-On Code edits with optional AI summaries

The NCCI (National Correct Coding Initiative) endpoints resolve Medicare correct coding edits from CMS quarterly data. The sample dataset includes 56 MUE entries (across Practitioner, Hospital Outpatient, and DME settings), 42 PTP pairs (both Practitioner and Hospital tables), and 29 AOC relationships. Three edit types are supported:

| Type    | What it answers                                             |
| ------- | ----------------------------------------------------------- |
| **MUE** | "How many units of this code can I bill per encounter?"     |
| **PTP** | "Can I bill these two codes together?"                      |
| **AOC** | "Which add-on codes are valid with this primary procedure?" |

<Note>
  Every NCCI route is also available under the canonical knowledge namespace at `/v1/knowledge/ncci/...`. Both `/v1/ncci/mue/practitioner/99213` and `/v1/knowledge/ncci/mue/practitioner/99213` return identical results — pick whichever fits your URL conventions.
</Note>

## Pick a `date_of_service` to select the right NCCI version

Every endpoint accepts an optional `date_of_service=YYYY-MM-DD` query parameter (and `validate/batch` accepts `date_of_service` in the request body). The platform stores every quarterly NCCI release with its `effective_date` and (where applicable) `deletion_date`, then returns the row that was *active on that date* — not just the latest.

```bash theme={null}
# What was the MUE for 99213 on a 2025-06-15 date of service?
curl "https://api-dev.rcintell.com/v1/ncci/mue/practitioner/99213?date_of_service=2025-06-15" \
  -H "X-API-Key: kp_test_..."

# Was 27447 + 27440 bundled on 2024-12-31?
curl "https://api-dev.rcintell.com/v1/ncci/validate?code1=27447&code2=27440&date_of_service=2024-12-31" \
  -H "X-API-Key: kp_test_..."
```

Behaviour:

| Scenario                                    | Response                                                                                   |
| ------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `date_of_service` omitted                   | Latest active version (highest `version_year` / `effective_date`)                          |
| Date inside an active edit's window         | That edit's row, with the `version_*_dt` fields telling you which CMS quarter it came from |
| Date before any version was effective       | `404 No NCCI edit found … on the given date`                                               |
| Date after a deleted edit's `deletion_date` | `404` (or the next active version, if one exists)                                          |

This means you can confidently reprice or re-validate an *historical* claim without worrying that the response reflects a later CMS revision.

## MUE — Medically Unlikely Edits

MUE limits are split by clinical setting. Use the endpoint matching your claim type:

<CodeGroup>
  ```bash Practitioner theme={null}
  curl "https://api-dev.rcintell.com/v1/ncci/mue/practitioner/99213" \
    -H "X-API-Key: kp_test_..."
  ```

  ```bash Hospital Outpatient theme={null}
  curl "https://api-dev.rcintell.com/v1/ncci/mue/hosp-op/99213" \
    -H "X-API-Key: kp_test_..."
  ```

  ```bash DME theme={null}
  curl "https://api-dev.rcintell.com/v1/ncci/mue/dme/E0601" \
    -H "X-API-Key: kp_test_..."
  ```
</CodeGroup>

### Response

```json theme={null}
{
  "proc_cd": "99213",
  "date_of_service": "2026-03-25",
  "mue_value": 3,
  "mue_adj_ind": "3 Date of Service Edit: Clinical",
  "mue_rationale": "Clinical: Data",
  "mue_type": "practitioner",
  "version_effective_dt": "2026-01-01",
  "version_posted_dt": null,
  "ai_summary": null
}
```

### MAI (MUE Adjudication Indicator)

| Value | Meaning                        | Appeal                                                                     |
| ----- | ------------------------------ | -------------------------------------------------------------------------- |
| **1** | Line Edit                      | Claim line adjudication                                                    |
| **2** | Date of Service Edit: Policy   | Per-day limit based on statute/regulation — not appealable                 |
| **3** | Date of Service Edit: Clinical | Per-day limit based on clinical benchmarks — appealable with documentation |

## PTP — Procedure-to-Procedure Edits

PTP edits tell you whether two codes are bundled. Endpoints are split by claim type:

<CodeGroup>
  ```bash Practitioner theme={null}
  curl "https://api-dev.rcintell.com/v1/ncci/ptp/prac?col1_proc_cd=27447&col2_proc_cd=27440" \
    -H "X-API-Key: kp_test_..."
  ```

  ```bash Hospital theme={null}
  curl "https://api-dev.rcintell.com/v1/ncci/ptp/hosp?col1_proc_cd=27447&col2_proc_cd=27440" \
    -H "X-API-Key: kp_test_..."
  ```
</CodeGroup>

### Response

```json theme={null}
{
  "col1_proc_cd": "27447",
  "col2_proc_cd": "27440",
  "date_of_service": "2026-03-25",
  "edit_effective_dt": "2020-01-01",
  "edit_delete_dt": "",
  "modifier": "0",
  "ptp_edit_rationale": "More extensive procedure",
  "version": "2026Q1",
  "version_effective_dt": "2020-01-01",
  "version_posted_dt": null,
  "ptp_type": "prac",
  "ai_summary": null
}
```

### Modifier Indicator

| Value | Meaning                                                  |
| ----- | -------------------------------------------------------- |
| **0** | Not Allowed — modifier cannot bypass the bundle          |
| **1** | Allowed — modifier (e.g. -59, -XE) may unbundle the pair |
| **9** | Not Applicable                                           |

## AOC — Add-On Code Edits

Look up which add-on codes are valid with a primary procedure (or vice versa). Provide at least one of `add_on_code` or `primary_proc_cd`:

```bash theme={null}
# By primary procedure
curl "https://api-dev.rcintell.com/v1/ncci/aoc?primary_proc_cd=27447" \
  -H "X-API-Key: kp_test_..."

# By add-on code
curl "https://api-dev.rcintell.com/v1/ncci/aoc?add_on_code=22614" \
  -H "X-API-Key: kp_test_..."

# Specific pair
curl "https://api-dev.rcintell.com/v1/ncci/aoc?primary_proc_cd=27447&add_on_code=22614" \
  -H "X-API-Key: kp_test_..."
```

### Response

```json theme={null}
{
  "code": "27447",
  "edit_count": 4,
  "results": [
    {
      "aoc_edit_type": "1",
      "add_on_code": "22614",
      "aoc_delete_dt": "",
      "primary_proc_cd": "27447",
      "primary_proc_cd_delete_dt": "",
      "aoc_edit_effect_dt": "2026-01-01",
      "aoc_edit_delete_dt": "",
      "special_instruct": null,
      "ai_summary": null
    }
  ],
  "ai_summary": null
}
```

### AOC Edit Types

| Type  | Meaning                                                                |
| ----- | ---------------------------------------------------------------------- |
| **1** | Limited number of specific primary codes listed by CMS                 |
| **2** | No specific primary code list — MACs define their own                  |
| **3** | Partial list — CPT Manual identifies some primaries, MACs may add more |

## Validate a Code Pair

Quick check whether two codes have a PTP bundling edit:

```bash theme={null}
curl "https://api-dev.rcintell.com/v1/ncci/validate?code1=99214&code2=99213" \
  -H "X-API-Key: kp_test_..."
```

```json theme={null}
{
  "code1": "99214",
  "code2": "99213",
  "is_bundled": true,
  "modifier_allowed": false,
  "modifier_indicator": "0",
  "column1_code": "99214",
  "column2_code": "99213",
  "ptp_rationale": "Mutually exclusive procedures",
  "effective_date": "2022-01-01"
}
```

## AI Summaries

Add `?include_summary=true` to any MUE, PTP, or AOC request to get a plain-English explanation written for billing staff:

```bash theme={null}
curl "https://api-dev.rcintell.com/v1/ncci/mue/practitioner/99213?include_summary=true" \
  -H "X-API-Key: kp_test_..."
```

Summaries are generated by the rcm-agents service using Claude. They explain:

* What the procedure code represents
* Why it appears on the edit list
* Practical billing impact
* A follow-up question to confirm interpretation

<Note>
  AI summaries require the rcm-agents service running at `RCM_AGENTS_URL` with a valid `ANTHROPIC_API_KEY`. Without it, `ai_summary` returns `null` — the structured data still works.
</Note>

## Sample data coverage

The bundled sample data covers these codes across all settings and claim types:

| MUE (Practitioner)       | MUE (Hospital OP)   | MUE (DME)           |
| ------------------------ | ------------------- | ------------------- |
| 99213, 99214, 99215      | 99213, 99214, 99215 | E0601, E0470, E0471 |
| 99221-99223, 99231-99233 | 27447, 27440, 36415 | K0823, K0824, K0856 |
| 27440, 27447, 36415      | 70553, 71046, 73610 | A4253, A4259, A7027 |
| 70553-70554, 71046       | 80053, 85025, 93000 | E1390, E0260, L3000 |
| 80053, 85025, 86900      | 92004, 99291        | L3020, E0431, E0439 |

| PTP Pairs (both tables)  | AOC Pairs                          |
| ------------------------ | ---------------------------------- |
| 27447/27440, 27447/29881 | 27447 + 22614, 22840, 20930, 27580 |
| 99213/99214, 99214/99215 | 99213 + 99354, 99417, 99358        |
| 70553/70554, 71046/71047 | 99291/99292, 96365/96366           |
| 80053/85025, 85025/86900 | 96374/96376, 36415/36416           |
| 10060/12001, 20610/20611 | 70553/70554, 93000/93042           |

## Data freshness

NCCI data is sourced from CMS quarterly releases. The platform tracks the `version_year` / `quarter` / `effective_date` of every row so historical versions coexist (this is what powers `date_of_service` selection above). Use the admin API to check data freshness and trigger syncs:

```bash theme={null}
# Check data sources
curl "https://api-dev.rcintell.com/v1/admin/data/sources" \
  -H "X-API-Key: kp_test_..."

# Trigger a manual refresh of all NCCI + reference data
curl -X POST "https://api-dev.rcintell.com/v1/admin/data/refresh" \
  -H "X-API-Key: kp_test_..."
```

The `data/refresh` response now also reports `betos_nodes` and `betos_assignments` counters from the BETOS/RBCS taxonomy loader (see [Service Code Groups](/knowledge/codes-groups)).
