Product Package Structure & Examples
Structure Overview
These structures describe how drug products are packaged and labelled for distribution. Drug products may be packaged on their own, or in combination with other drug products as a kit. The packaging for a product may have multiple levels (i.e. an inner package within an outer package).
When a manufacturer relabels a product with new NDC package codes, DrugBank retains every package code we have ever seen for that product. Each package includes a status field so you can distinguish currently-marketed codes from historical ones. See Historical Package Codes below for details.
An example of a simple package containing a single drug product and one level of packaging is shown below:
{
"package_ndc_code": "50580-0111-08",
"description": "240 mL in 1 BOTTLE, PLASTIC",
"amount": "240",
"unit": "mL",
"form": "BOTTLE, PLASTIC",
"status": "active",
"for_product": {
"ndc_product_code": "50580-0111",
"name": "Tylenol Extra Strength",
"active_ingredients": [
{
"name": "Acetaminophen",
"unii": "362O9ITL9D",
"strength_number": "500",
"strength_unit": "mg/15mL"
}
],
"inactive_ingredients": [
{
"name": "anhydrous citric acid",
"unii": "XF417D3PSL",
"strength_number": null,
"strength_unit": null
},
{
"name": "D&C Red NO. 33",
"unii": "9DBA0SBB0L",
"strength_number": null,
"strength_unit": null
},
{
"name": "FD&C Red NO. 40",
"unii": "WZB9127XOA",
"strength_number": null,
"strength_unit": null
},
{
"name": "high fructose corn syrup",
"unii": "XY6UN3QB6S",
"strength_number": null,
"strength_unit": null
},
{
"name": "polyethylene glycols",
"unii": "3WJQ0SDW1A",
"strength_number": null,
"strength_unit": null
},
{
"name": "propylene glycol",
"unii": "6DC9Q167V3",
"strength_number": null,
"strength_unit": null
},
{
"name": "water",
"unii": "059QF0KO0R",
"strength_number": null,
"strength_unit": null
},
{
"name": "saccharin sodium",
"unii": "SB8ZUX40TY",
"strength_number": null,
"strength_unit": null
},
{
"name": "sodium benzoate",
"unii": "OJ245FE5EU",
"strength_number": null,
"strength_unit": null
},
{
"name": "sorbitol",
"unii": "506T60A25R",
"strength_number": null,
"strength_unit": null
}
]
},
"packaging_tree": [
{
"package_ndc_code": "50580-0111-08",
"description": "240 mL in 1 BOTTLE, PLASTIC",
"amount": "240",
"unit": "mL",
"form": "BOTTLE, PLASTIC"
}
]
}Multi-level Packaging
A single drug product can have any number of levels of packaging. It can also have multiple package combinations. Below is an example of a package that can have three different types of outer packaging:
{
"package_ndc_code": "00002-1445-01",
"description": "1 mL in 1 SYRINGE",
"amount": "1",
"unit": "mL",
"form": "SYRINGE",
"for_product": {
"ndc_product_code": "00002-1445",
"name": "Taltz",
"active_ingredients": [
{
"name": "ixekizumab",
"unii": "BTY153760O",
"strength_number": "80",
"strength_unit": "mg/1mL"
}
],
"inactive_ingredients": [
{
"name": "Anhydrous Citric Acid",
"unii": "XF417D3PSL",
"strength_number": "0.51",
"strength_unit": "mg/1mL"
},
{
"name": "Polysorbate 80",
"unii": "6OZP39ZG8H",
"strength_number": "0.30",
"strength_unit": "mg/1mL"
},
{
"name": "Sodium Chloride",
"unii": "451W47IQ8X",
"strength_number": "11.69",
"strength_unit": "mg/1mL"
},
{
"name": "Trisodium Citrate Dihydrate",
"unii": "B22547B95K",
"strength_number": "5.11",
"strength_unit": "mg/1mL"
},
{
"name": "Water",
"unii": "059QF0KO0R",
"strength_number": null,
"strength_unit": null
}
]
},
"packaging_tree": [
{
"package_ndc_code": "00002-1445-11",
"description": "1 in 1 CARTON",
"amount": "1",
"unit": "1",
"form": "CARTON",
"content": {
"package_ndc_code": "00002-1445-01",
"description": "1 mL in 1 SYRINGE",
"amount": "1",
"unit": "mL",
"form": "SYRINGE"
}
},
{
"package_ndc_code": "00002-1445-27",
"description": "2 in 1 CARTON",
"amount": "2",
"unit": "1",
"form": "CARTON",
"content": {
"package_ndc_code": "00002-1445-01",
"description": "1 mL in 1 SYRINGE",
"amount": "1",
"unit": "mL",
"form": "SYRINGE"
}
},
{
"package_ndc_code": "00002-1445-09",
"description": "3 in 1 CARTON",
"amount": "3",
"unit": "1",
"form": "CARTON",
"content": {
"package_ndc_code": "00002-1445-01",
"description": "1 mL in 1 SYRINGE",
"amount": "1",
"unit": "mL",
"form": "SYRINGE"
}
}
]
}Kits
A package that contains multiple products is a kit. Each of these products is represented as a part that has its own product and packaging. The packaged parts are assumed to be contained within the kit packaging. An example of a kit with parts is shown below:
{
"package_ndc_code": "68405-0018-06",
"description": "1 in 1 KIT",
"amount": "1",
"unit": "1",
"form": "KIT",
"for_product": {
"ndc_product_code": "68405-0018",
"name": "Theraproxen-90",
"active_ingredients": [
{
"name": "NAPROXEN",
"unii": "57Y76R9ATQ",
"strength_number": "250",
"strength_unit": "mg/1"
},
{
"name": ".GAMMA.-AMINOBUTYRIC ACID",
"unii": "2ACZ6IPC6I",
"strength_number": "100",
"strength_unit": "mg/1"
}
],
"inactive_ingredients": [
{
"name": "CROSCARMELLOSE SODIUM",
"unii": "M28OL1HH48",
"strength_number": null,
"strength_unit": null
},
{
"name": "POVIDONE",
"unii": "FZ989GH94E",
"strength_number": null,
"strength_unit": null
},
{
"name": "MAGNESIUM STEARATE",
"unii": "70097M6I30",
"strength_number": null,
"strength_unit": null
},
{
"name": "MAGNESIUM STEARATE",
"unii": "70097M6I30",
"strength_number": null,
"strength_unit": null
},
{
"name": "CELLULOSE, MICROCRYSTALLINE",
"unii": "OP1R32D61U",
"strength_number": null,
"strength_unit": null
},
{
"name": "MALTODEXTRIN",
"unii": "7CVR7L4A2D",
"strength_number": null,
"strength_unit": null
},
{
"name": "GELATIN",
"unii": "2G86QN327L",
"strength_number": null,
"strength_unit": null
}
]
},
"parts": [
{
"number": 1,
"ndc_product_code": "52959-0190",
"name": "NAPROXEN",
"route": "ORAL",
"amount": "60",
"unit": "1",
"dosage_form": "TABLET",
"marketing_category": "ANDA",
"application_number": "ANDA075927",
"packaging_tree": [
{
"package_ndc_code": "52959-0190-30",
"description": "60 in 1 BOTTLE",
"amount": "60",
"unit": "1",
"form": "BOTTLE"
}
],
"active_ingredients": [
{
"name": "NAPROXEN",
"unii": "57Y76R9ATQ",
"strength_number": "250",
"strength_unit": "mg/1"
}
],
"inactive_ingredients": [
{
"name": "CROSCARMELLOSE SODIUM",
"unii": "M28OL1HH48",
"strength_number": null,
"strength_unit": null
},
{
"name": "POVIDONE",
"unii": "FZ989GH94E",
"strength_number": null,
"strength_unit": null
},
{
"name": "MAGNESIUM STEARATE",
"unii": "70097M6I30",
"strength_number": null,
"strength_unit": null
}
]
},
{
"number": 2,
"ndc_product_code": null,
"name": "Theramine",
"route": "ORAL",
"amount": "90",
"unit": "1",
"dosage_form": "CAPSULE",
"marketing_category": "MEDICAL FOOD",
"application_number": null,
"packaging_tree": [
{
"package_ndc_code": null,
"description": "90 in 1 BOTTLE",
"amount": "90",
"unit": "1",
"form": "BOTTLE"
}
],
"active_ingredients": [
{
"name": ".GAMMA.-AMINOBUTYRIC ACID",
"unii": "2ACZ6IPC6I",
"strength_number": "100",
"strength_unit": "mg/1"
}
],
"inactive_ingredients": [
{
"name": "MAGNESIUM STEARATE",
"unii": "70097M6I30",
"strength_number": null,
"strength_unit": null
},
{
"name": "CELLULOSE, MICROCRYSTALLINE",
"unii": "OP1R32D61U",
"strength_number": null,
"strength_unit": null
},
{
"name": "MALTODEXTRIN",
"unii": "7CVR7L4A2D",
"strength_number": null,
"strength_unit": null
},
{
"name": "GELATIN",
"unii": "2G86QN327L",
"strength_number": null,
"strength_unit": null
}
]
}
],
"packaging_tree": [
{
"package_ndc_code": "68405-0018-06",
"description": "1 in 1 KIT",
"amount": "1",
"unit": "1",
"form": "KIT"
}
]
}Note that a kit and its parts can still have multiple levels and combinations of packaging.
If a package is part of a kit, it will be represented like the example below:
{
"package_ndc_code": "52959-0190-30",
"description": "60 in 1 BOTTLE",
"amount": "60",
"unit": "1",
"form": "BOTTLE",
"for_part": {
"ndc_product_code": "52959-0190",
"name": "NAPROXEN",
"active_ingredients": [
{
"name": "NAPROXEN",
"unii": "57Y76R9ATQ",
"strength_number": "250",
"strength_unit": "mg/1"
}
],
"inactive_ingredients": [
{
"name": "CROSCARMELLOSE SODIUM",
"unii": "M28OL1HH48",
"strength_number": null,
"strength_unit": null
},
{
"name": "POVIDONE",
"unii": "FZ989GH94E",
"strength_number": null,
"strength_unit": null
},
{
"name": "MAGNESIUM STEARATE",
"unii": "70097M6I30",
"strength_number": null,
"strength_unit": null
}
]
},
"packaging_tree": [
{
"package_ndc_code": "52959-0190-30",
"description": "60 in 1 BOTTLE",
"amount": "60",
"unit": "1",
"form": "BOTTLE"
}
],
"part_of": [
{
"package_ndc_code": "68405-0018-06",
"description": "1 in 1 KIT",
"product": {
"ndc_product_code": "68405-0018",
"name": "Theraproxen-90"
}
},
{
"package_ndc_code": "68405-0016-36",
"description": "1 in 1 KIT",
"product": {
"ndc_product_code": "68405-0016",
"name": "Trepoxen-250"
}
},
{
"package_ndc_code": "68405-0180-06",
"description": "1 in 1 KIT",
"product": {
"ndc_product_code": "68405-0180",
"name": "Theraproxen"
}
}
]
}Historical Package Codes
When a manufacturer updates a product label and assigns new NDC package codes while keeping the same NDC product code, DrugBank now retains the older codes alongside the current set. Each package is tagged with a status so you can tell which codes reflect the current label and which are historical.
| Status | Meaning |
|---|---|
active | The NDC package code appears on the manufacturer's current label. |
inactive | The NDC package code was on a prior label and has since been replaced. The package was discontinued or relabelled, but the code is kept so you can still resolve historical references. |
Where the change appears
- Clinical API —
GET /products/:id/packages,GET /drugs/:id/packages, andGET /packages/:idall return active and historical packages, each with astatusfield. Looking up a previously dropped NDC package code now returns the historical record withstatus: "inactive"instead of a 404. - CSV / SQL exports — the
product_packagestable includes astatuscolumn. Historical codes appear as additional rows. - Full JSON drug export files — per-drug
.jsonfiles include historical packages alongside active ones under each product'spackagesarray, each with the samestatusfield.
Integration guidance
No action is required if your integration treats unknown packages as transient — you will simply see more rows and a new field.
If your application distinguishes between currently-marketed and discontinued packaging, branch on status. Active packages reflect the current label; inactive packages are useful for resolving older records but should not be treated as available for sale.
Heads-up: if you relied on a 404 from GET /packages/:id to detect a discontinued package, switch to checking status == "inactive". JSON export consumers who do not expect discontinued entries may want to filter to status == "active" to preserve previous behaviour.
For full details on package attributes, see the Data Details page.







