Dashboard

NCCI PTP Edit Validation

Validate whether two CPT/HCPCS codes can be billed together on the same claim.

Overview

The National Correct Coding Initiative (NCCI) Procedure-to-Procedure (PTP) edits identify pairs of codes that should not normally be billed together. CMS publishes these edits quarterly for both practitioner and hospital outpatient settings.

When a code pair has an active edit, the column 2 code is typically denied unless a valid modifier is appended. The modifier_indicator field tells you whether modifier use is allowed.

Endpoint

Method Path Description
GET /v1/ncci/validate Validate a code pair

Validate a Code Pair

Check if arthroscopy codes can be billed together

Request
Node.js
const response = await fetch(
  "https://api.fhirfly.io/v1/ncci/validate?code1=29881&code2=29880",
  {
    method: "GET",
    headers: {
    "x-api-key": "YOUR_API_KEY",
  }
  }
);

const data = await response.json();
console.log(data);
Response
JSON
{
  "data": {
    "code1": "29881",
    "code2": "29880",
    "can_bill_together": false,
    "edits": [
      {
        "claim_type": "hospital",
        "modifier_indicator": "1",
        "modifier_allowed": true,
        "effective_date": "2004-01-01",
        "is_active": true,
        "rationale": "Standards of medical/surgical practice"
      },
      {
        "claim_type": "practitioner",
        "modifier_indicator": "1",
        "modifier_allowed": true,
        "effective_date": "1996-01-01",
        "is_active": true,
        "rationale": "Standards of medical/surgical practice"
      }
    ],
    "summary": "These codes cannot be billed together. Modifier use is allowed for both claim types."
  },
  "meta": {
    "source": {
      "name": "CMS NCCI PTP Edits",
      "quarter": "2026-Q1"
    },
    "legal": {
      "license": "public_domain",
      "attribution_required": false,
      "source_name": "CMS National Correct Coding Initiative",
      "citation": "CMS National Correct Coding Initiative PTP Edits. Accessed via FHIRfly."
    }
  }
}

A clean pair (no edit found) returns can_bill_together: true with an empty edits array:

Check an office visit + venipuncture pair

Request
Node.js
const response = await fetch(
  "https://api.fhirfly.io/v1/ncci/validate?code1=99213&code2=36415",
  {
    method: "GET",
    headers: {
    "x-api-key": "YOUR_API_KEY",
  }
  }
);

const data = await response.json();
console.log(data);
Response
JSON
{
  "data": {
    "code1": "99213",
    "code2": "36415",
    "can_bill_together": true,
    "edits": [],
    "summary": "No NCCI PTP edit found for this code pair. These codes can be billed together."
  },
  "meta": {
    "source": {
      "name": "CMS NCCI PTP Edits",
      "quarter": "2026-Q1"
    },
    "legal": {
      "license": "public_domain",
      "attribution_required": false,
      "source_name": "CMS National Correct Coding Initiative",
      "citation": "CMS National Correct Coding Initiative PTP Edits. Accessed via FHIRfly."
    }
  }
}

Parameters

Parameter Required Description
code1 Yes First CPT/HCPCS code (4-5 alphanumeric characters)
code2 Yes Second CPT/HCPCS code (4-5 alphanumeric characters)
claim_type No Filter by "practitioner" or "hospital". Returns both if omitted.

Understanding the Response

can_bill_together

  • true — No active NCCI edit exists for this pair. Safe to bill together.
  • false — An active edit exists. The column 2 code will typically be denied unless a modifier is used.

edits[]

Each edit in the array represents a PTP edit rule for a specific claim type.

Field Type Description
claim_type string "practitioner" or "hospital"
modifier_indicator string "0" = no modifier allowed, "1" = modifier allowed, "9" = not applicable
modifier_allowed boolean Whether appending a modifier can override the edit
effective_date string | null When the edit took effect (ISO date)
is_active boolean Whether the edit is currently active
rationale string CMS rationale for the edit

Modifier Indicators

Value Meaning
0 No modifier allowed — the code pair cannot be unbundled
1 Modifier allowed — append modifier 59 (or XE/XP/XS/XU) to override
9 Not applicable

SDK Usage

Node.js
import { Fhirfly } from "@fhirfly-io/terminology";

const client = new Fhirfly({ apiKey: "your-api-key" });

// Check if two codes can be billed together
const result = await client.claims.validateNcci("29881", "29880");

if (!result.data.can_bill_together) {
  console.log("NCCI edit found — these codes conflict");
  for (const edit of result.data.edits) {
    console.log(`  ${edit.claim_type}: modifier ${edit.modifier_allowed ? "allowed" : "not allowed"}`);
  }
}

// Filter by claim type
const practitioner = await client.claims.validateNcci("29881", "29880", {
  claim_type: "practitioner",
});

Required Scopes

  • claims.read — NCCI PTP edit validation

See Also