Everything about an NDC in one call
GET /v1/drugs/ndc/{ndc}/full
GET https://api.healthcare.dev/v1/drugs/ndc/{ndc}/fullPro plan and up (403 plan-upgrade-required below Pro). One NDC (product, package in any 10-digit layout, or 11-digit) joined across every published drug dataset, looked up together and billed as one call: the FDA product (product), RxNorm concepts (rxnorm), J-codes from CMS's ASP NDC-HCPCS crosswalk with the Medicare Part B payment limit in effect today (asp), the current NADAC rate of the package, or of each package of a product (nadac), FDA label status (label: set id, version and which sections exist, not their text), and the FDA shortage and recall flags (shortage; recalls: open is any recall of this NDC FDA hasn't terminated, whatever its date, and the list adds closed recalls reported in the last recall_months months, default 12). A package NDC is matched at the package level wherever the source names packages (J-codes, NADAC, RxNorm, shortages, recalls); entries that name no package match by product, and matched_on and reason say so. J-codes are the ones the current crosswalk assigns; codes only earlier quarters assigned are in asp.data.historical. Each component has its own source (dataset, data_version, as_of) and a status: available, not_listed (the dataset has nothing for this NDC; reason says what that means) or unavailable (not published or not licensed). Nothing is left out silently: missing lists every component without data and why. view=compact returns the flags and key ids only. Reference data, not clinical or billing advice.
Requires an API key: Authorization: Bearer hdev_live_.... See Authentication.
Path parameters
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
ndc | string | yes | Product, package (any 10-digit layout) or 11-digit NDC, with or without hyphens | 0006-3026-02 |
Query parameters
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
recall_months | integer | no | How far back to list closed recalls, in months of FDA report dates (1 to 120, default 12); open recalls are always listed and always set the flag | 12 |
view | "compact" | "standard" | "full" | no | How much of each record to return (default full). compact: ndc, product_ndc, ndc11, name, rxcuis, hcpcs_codes, label_set_ids, flags, missing (fewest tokens, for agents). standard: every field. full: every field. | compact |
fields | string | no | Comma-separated fields to return instead of a view. Valid fields: ndc, product_ndc, ndc11, name, rxcuis, hcpcs_codes, label_set_ids, flags, missing, product, rxnorm, asp, nadac, label, shortage, recalls. | ndc,product_ndc,ndc11 |
Examples
curl
curl "https://api.healthcare.dev/v1/drugs/ndc/0006-3026-02/full" \
-H "Authorization: Bearer $HDEV_API_KEY"TypeScript
const res = await fetch("https://api.healthcare.dev/v1/drugs/ndc/0006-3026-02/full", {
headers: { Authorization: `Bearer ${process.env.HDEV_API_KEY}` },
});
const { data, meta } = await res.json();Python
import os
import requests
res = requests.get("https://api.healthcare.dev/v1/drugs/ndc/0006-3026-02/full", headers={"Authorization": f"Bearer {os.environ['HDEV_API_KEY']}"})
body = res.json()Try it
Response
The NDC joined across the drug datasets
{
"data": {
"ndc": "string",
"product_ndc": "string",
"ndc11": "string",
"name": "string",
"rxcuis": [
"string"
],
"hcpcs_codes": [
"string"
],
"label_set_ids": [
"string"
],
"flags": {
"active_shortage": true,
"open_recall": true,
"boxed_warning": true
},
"missing": [
{
"component": "product",
"status": "not_listed",
"reason": "string"
}
],
"product": {
"status": "available",
"reason": "string",
"source": {
"dataset": "string",
"source": "string",
"source_url": "string",
"source_sha256": "string",
"data_version": "string",
"pipeline_version": "string",
"license": "string",
"license_terms": null,
"as_of": "2026-10-01",
"published_at": "2026-10-24T12:00:00Z"
},
"data": {
"product_ndc": "string",
"spl_document_ids": [
null
],
"brand_name": "string",
"generic_name": "string",
"labeler": "string",
"dosage_form": "string",
"route": [
null
],
"active_ingredients": [
null
],
"product_type": "string",
"marketing_category": "string",
"application_number": "string",
"pharm_classes": [
null
],
"dea_schedule": "string",
"listing_certified_through": "2026-10-01",
"rxcuis": [
null
],
"rxnorm": [
null
],
"packages": [
null
],
"status": "active",
"effective_start": "2026-10-01",
"effective_end": "2026-10-01",
"replaced_by": [
null
],
"care_categories": [
null
],
"care_category_details": [
null
]
}
},
"rxnorm": {
"status": "available",
"reason": "string",
"source": {
"dataset": "string",
"source": "string",
"source_url": "string",
"source_sha256": "string",
"data_version": "string",
"pipeline_version": "string",
"license": "string",
"license_terms": null,
"as_of": "2026-10-01",
"published_at": "2026-10-24T12:00:00Z"
},
"data": {
"concepts": [
null
]
}
},
"asp": {
"status": "available",
"reason": "string",
"source": {
"dataset": "string",
"source": "string",
"source_url": "string",
"source_sha256": "string",
"data_version": "string",
"pipeline_version": "string",
"license": "string",
"license_terms": null,
"as_of": "2026-10-01",
"published_at": "2026-10-24T12:00:00Z"
},
"data": {
"codes": [
null
],
"historical": [
null
]
}
},
"nadac": {
"status": "available",
"reason": "string",
"source": {
"dataset": "string",
"source": "string",
"source_url": "string",
"source_sha256": "string",
"data_version": "string",
"pipeline_version": "string",
"license": "string",
"license_terms": null,
"as_of": "2026-10-01",
"published_at": "2026-10-24T12:00:00Z"
},
"data": {
"prices": [
null
]
}
},
"label": {
"status": "available",
"reason": "string",
"source": {
"dataset": "string",
"source": "string",
"source_url": "string",
"source_sha256": "string",
"data_version": "string",
"pipeline_version": "string",
"license": "string",
"license_terms": null,
"as_of": "2026-10-01",
"published_at": "2026-10-24T12:00:00Z"
},
"data": {
"labels": [
null
]
}
},
"shortage": {
"status": "available",
"reason": "string",
"source": {
"dataset": "string",
"source": "string",
"source_url": "string",
"source_sha256": "string",
"data_version": "string",
"pipeline_version": "string",
"license": "string",
"license_terms": null,
"as_of": "2026-10-01",
"published_at": "2026-10-24T12:00:00Z"
},
"data": {
"active": true,
"entries": [
null
],
"link": "string"
}
},
"recalls": {
"status": "available",
"reason": "string",
"source": {
"dataset": "string",
"source": "string",
"source_url": "string",
"source_sha256": "string",
"data_version": "string",
"pipeline_version": "string",
"license": "string",
"license_terms": null,
"as_of": "2026-10-01",
"published_at": "2026-10-24T12:00:00Z"
},
"data": {
"open": true,
"months": 1,
"since": "2026-10-01",
"recalls": [
null
],
"link": "string"
}
}
},
"meta": {
"source": "cms-icd10",
"data_version": "2026.1",
"retrieved_at": "2026-10-24T12:00:00Z",
"license": "Public domain (CMS). Reference data, not medical advice."
},
"links": {
"self": "/v1/drugs/ndc/0006-3026-02/full",
"next": null
}
}Fields
| Field | Type | Always present | Description |
|---|---|---|---|
ndc | string | yes | The NDC asked for, normalized: the product NDC as labeled, or a package's NDC-11 |
product_ndc | string | yes | |
ndc11 | string | null | yes | The package's NDC-11 when a package NDC was asked for; null for a product NDC |
name | string | yes | Brand name with the generic name, as FDA lists them |
rxcuis | string[] | yes | Linked RxNorm concepts; null when RxNorm is unavailable |
hcpcs_codes | string[] | yes | Billing codes (J-codes) the newest or current ASP NDC-HCPCS crosswalk assigns; null when ASP is unavailable |
label_set_ids | string[] | yes | SPL set ids of the product's FDA labels; null when labels are unavailable |
flags | object | yes | Yes/no answers; null means the data to answer isn't available (see missing) |
missing | object[] | yes | Every component without data, and why; empty when every component answered |
product | DrugFullProduct | yes | The FDA NDC Directory product with its packages |
rxnorm | DrugFullRxNormComponent | yes | RxNorm concepts (NLM) |
asp | DrugFullAspComponent | yes | J-codes through CMS's ASP NDC-HCPCS crosswalk, and their Medicare Part B payment limits |
nadac | DrugFullNadacComponent | yes | CMS NADAC: current national average pharmacy acquisition cost |
label | DrugFullLabelComponent | yes | FDA label status (DailyMed): set id, version and which sections exist, not their text |
shortage | DrugFullShortageComponent | yes | FDA drug shortage list (openFDA) |
recalls | DrugFullRecallsComponent | yes | FDA drug recalls (Enforcement Report, openFDA) |
Errors
Errors are application/problem+json (RFC 9457). Branch on type, not on title. See Errors.
| Status | type | When |
|---|---|---|
| 400 | invalid-request | A parameter or the body failed validation; errors lists each field. |
| 401 | unauthorized | Missing, malformed or revoked API key. |
| 403 | plan-upgrade-required | The plan doesn't include this feature; required_plan names the plan that does. |
| 404 | not-found | No record with that id (retired records are still returned). |
| 429 | rate-limited / quota-exceeded | Too many requests per second (retry after Retry-After), or the monthly quota is used up. |
| 503 | dataset-unavailable / unavailable | The dataset has no published version yet, or the service is degraded. |