J-Code/NDC Crosswalk API
Bidirectional crosswalk between HCPCS J-codes (injectable drugs) and NDC codes from CMS ASP pricing files.
Overview
HCPCS J-codes identify injectable drugs administered in physician offices and outpatient settings, billed under Medicare Part B. Each J-code may correspond to dozens of NDC products from different manufacturers. The J-Code/NDC Crosswalk API provides bidirectional lookups between J-codes and NDC codes, sourced from CMS Average Sales Price (ASP) pricing files. This is essential for Medicare Part B drug billing, 340B compliance, and drug cost analysis.
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /v1/jcode/by-hcpcs/:code |
Find NDC codes for a J-code |
| GET | /v1/jcode/by-ndc/:ndc |
Find J-codes for an NDC |
Lookup by HCPCS J-Code
Given a HCPCS J-code, find all NDC products mapped to it:
Find NDC codes for bevacizumab (J9035)
const response = await fetch(
"https://api.fhirfly.io/v1/jcode/by-hcpcs/J9035",
{
method: "GET",
headers: {
"x-api-key": "YOUR_API_KEY",
}
}
);
const data = await response.json();
console.log(data);{
"data": {
"hcpcs_code": "J9035",
"description": "INJECTION, BEVACIZUMAB, 10 MG",
"ndc_count": 4,
"entries": [
{
"ndc": "50242-0060-01",
"labeler": "Genentech Inc",
"description": "AVASTIN 100MG/4ML",
"pkg_size": "4 ML",
"asp_price_per_unit": 6.42
},
{
"ndc": "50242-0061-01",
"labeler": "Genentech Inc",
"description": "AVASTIN 400MG/16ML",
"pkg_size": "16 ML",
"asp_price_per_unit": 6.42
},
{
"ndc": "67457-0048-05",
"labeler": "Mylan Institutional LLC",
"description": "BEVACIZUMAB-AWWB 100MG/4ML",
"pkg_size": "4 ML",
"asp_price_per_unit": 4.85
},
{
"ndc": "67457-0049-16",
"labeler": "Mylan Institutional LLC",
"description": "BEVACIZUMAB-AWWB 400MG/16ML",
"pkg_size": "16 ML",
"asp_price_per_unit": 4.85
}
]
},
"meta": {
"legal": {
"license": "public_domain",
"attribution_required": false,
"citation": "CMS ASP Drug Pricing Files. CMS.gov. Accessed 2026-03-15 via FHIRfly.",
"source_name": "CMS ASP Pricing"
}
}
}Reverse Lookup by NDC
Given an NDC code, find all HCPCS J-codes it maps to:
Find J-codes for NDC 00004-1100-02
const response = await fetch(
"https://api.fhirfly.io/v1/jcode/by-ndc/00004110002",
{
method: "GET",
headers: {
"x-api-key": "YOUR_API_KEY",
}
}
);
const data = await response.json();
console.log(data);{
"data": {
"ndc": "00004-1100-02",
"labeler": "Genentech Inc",
"hcpcs_codes": [
{
"hcpcs_code": "J9035",
"description": "INJECTION, BEVACIZUMAB, 10 MG",
"billing_units": "per 10 mg"
}
]
},
"meta": {
"legal": {
"license": "public_domain",
"attribution_required": false,
"source_name": "CMS ASP Pricing"
}
}
}Use Cases
Medicare Part B Drug Billing
When billing injectable drugs under Part B, payers require both the HCPCS J-code (for the service) and the NDC (for the specific product administered). Use the crosswalk to validate that the NDC billed matches an accepted product for the J-code.
340B Drug Pricing Compliance
Covered entities in the 340B program must track which NDC products are dispensed under each HCPCS code. The crosswalk helps identify all eligible NDC products for a given J-code.
Drug Cost Analysis
Compare ASP pricing across manufacturers for the same J-code to identify cost-effective alternatives.
Notes
- No shapes: The crosswalk returns full detail on every request. There is no
shapequery parameter. - No batch: Crosswalk lookups are single-code only. For bulk needs, iterate over individual requests.
- NDC format: The
by-ndcendpoint accepts 10-digit and 11-digit NDC formats. - J-code scope: This crosswalk covers HCPCS codes in the J range (J0000-J9999) that appear in CMS ASP pricing files. Not all HCPCS codes are included.
Required Scopes
jcode.read- Forward and reverse crosswalk lookups
See Also
- HCPCS API — Look up HCPCS Level II procedure codes
- NDC API — Look up National Drug Codes
- RxNorm API — Look up drug concepts by RxCUI