6. Packaging Data Structure
The API relies on the Recyda Open Packaging Standard (OPS). The structure is hierarchical and follows dot-notation for nested attributes.
Consumer Sales Unit (consumerSalesUnit)
The top-level object representing the sellable product / SKU (e.g., a bottle of detergent).
| Field | Type | Required | Description |
|---|---|---|---|
id |
String | ✅ | Unique ID for the SKU. Note: During API import, the root foreignKey is the actual determinator for upserts; this internal payload id is ignored for identification. |
name |
String | ✅ | Name of the product. |
description |
String | No | Detailed description. |
metaData |
Map<String> | No | Key-value pairs for custom data (e.g., productCategory). |
packagingUnits |
Array | ✅ | List of packaging units (see 6.2). |
Packaging Unit (packagingUnit)
Represents a packaging in form of a physical container or group of components (e.g., "The Bottle", "The Box").
| Field | Type | Required | Description |
|---|---|---|---|
id |
String | ✅ | Unique ID for this unit. |
name |
String | No | Name of the unit. |
description |
String | No | Description. |
packagingType |
Enum | ✅ | Code for the packaging unit type (see 6.1). |
quantity |
Number | ✅ | Quantity of this unit in the sales unit (default is set to 1). |
mainPackagingBodyComponentId |
String | ✅ | ID of the component that acts as the main body. |
metaData |
Map<String> | No | Key-value pairs for custom data. |
fillingGood |
Object | No | Content details. See Filling Good table below. |
components |
Array | ✅ | List of components (see 6.3). |
attributes |
Object | No | See Attributes table below. |
Packaging Unit Attributes (packagingUnit.attributes)
| Field | Type | Enum Ref | Description |
|---|---|---|---|
shape |
String | 6.7 | e.g., CYLINDRICAL, RECTANGULAR. |
function |
Array | 6.8 | e.g., RECLOSABLE, PROTECTED. |
dimensions |
Object | - | Contains height, width, depth. Each has value (Number) and unitOfMeasurement (see 7.4). |
volume |
Object | - | Net volume. Has value and unitOfMeasurement (see 7.4). |
brimfulVolume |
Object | - | Max volume. Has value and unitOfMeasurement (see 7.4). |
degradability |
Object | - | Booleans: isBiodegradable, isPhotodegradable, isOxodegradable, isCompostable, isWaterSoluble. |
isIntendedForReuseByConsumer |
Boolean | - | true if designed for reuse. |
Filling Good (packagingUnit.fillingGood)
| Field | Type | Description |
|---|---|---|
name |
String | Name of the content. |
fillingGoodAggregationState |
String | GAS, LIQUID, SOLID. |
fillingGoodConsumptionType |
String | FOOD, BEVERAGE, MEDICINE, etc. |
fillingGoodViscosity |
Object | value and unitOfMeasurement (C24 or C65). |
Component (component)
Represents a distinct part of the packaging unit (e.g., Cap, Label, Body).
| Field | Type | Required | Description |
|---|---|---|---|
id |
String | ✅ | Unique ID for this component. |
name |
String | No | Name of the component. |
description |
String | No | Description. |
componentType |
Enum | No | Code for the component (see 7.2). |
metaData |
Map<String> | No | Custom metadata. |
layers |
Array | ✅ | List of material layers (see 6.4). |
attributes |
Object | No | See Attributes table below in 6.3.1 |
Component Attributes (component.attributes)
| Field | Type | Required | Description |
|---|---|---|---|
dimensions |
Object | No | height, width, depth (value + unit from 7.4). |
volume |
Object | No | value + unit from 7.4. |
surfaceCoverage |
Object | No | value (0-1) + unit P1. |
opacity |
String | No | OPAQUE or TRANSPARENT (see 7.5). |
colourFamilyCode |
String | No | Dominant color (see 7.6). |
colourTintCode |
String | No | e.g., DARK, LIGHT (see 7.6). |
colourant |
String | No | NIR_DETECTABLE status (see 7.6). |
separability |
Array | No | e.g., EASY_TO_SEPARATE (see 7.5). |
rigidity |
String | No | RIGID or FLEXIBLE (see 7.5). |
degradability |
Object | No | Booleans for bio/photo/oxo/compostable. |
canBeWashedOffInColdWash |
Boolean | No | true for wash-off labels. |
Layer (layer)
Represents a specific material layer within a component (e.g., HDPE, PET, Paper).
| Field | Type | Required | Description |
|---|---|---|---|
id |
String | ✅ | Unique ID for this layer. |
name |
String | No | Name of the layer. |
description |
String | No | Description. |
packagingMaterialTypeCode |
Enum | ✅ | Material code |
metaData |
Map<String> | No | Custom metadata. |
attributes |
Object | No | See Attributes table below in 6.4.1 |
Layer Attributes (layer.attributes)
Physical Properties:
| Field | Type | Required | Description |
|---|---|---|---|
weight |
Object | No | Required. value + unit (GRM, KGM). |
density |
Object | No | value + unit (23 for g/cm³). |
layerThickness |
Object | No | value + unit (4H for µm). |
paperGrammage |
Object | No | value + unit (GM for g/m²). |
grammage |
Object | No | value + unit (GM for g/m²). |
Composition Details:
| Field | Type | Required | Description |
|---|---|---|---|
isBiobased |
Boolean | No | Is the material bio-based? |
additives |
Array | No | List of additives (see 7.11). |
metallisation |
Object | No | materialTypeCode (e.g., METAL_ALUMINUM). |
inkProperties |
Object | No | printCoverage (val+unit), compositionBase (see 7.12). |
isLayerMagnetic |
Boolean | No | |
isPECrosslinked |
Boolean | No | |
isPaperWetStrengthPaper |
Boolean | No | |
isGlassNonSodaLime |
Boolean | No | |
isCardboardReinforced |
Boolean | No | |
recyclate |
Object | No | Contains nested objects for: - postConsumerRecyclateMechanical- postConsumerRecyclateChemical- postIndustrialRecyclateEach has value (0-1) and unitOfMeasurement (P1). |
nirDetectable |
Boolean | No | Is the layer detectable by NIR? |
degradability |
Object | No | Booleans for bio/photo/oxo/compostable. |
Example: Applying Barriers and Coatings (metallisation)
When a layer has a specific barrier or coating applied to it (such as an aluminum layer), it is represented using the metallisation object nested within the layer's attributes. You must specify the specific type of barrier applied using the materialTypeCode field. Common material codes used for coatings and barriers can be found in Section 7.3 (e.g., METAL_ALUMINUM, OPS_ALOX, OPS_SIOX).
{ "id": "1090-mpet", "name": "metPET", "packagingMaterialTypeCode": "POLYMER_PET", "attributes": { "weight": { "value": 10.90, "unitOfMeasurement": "GRM" }, "metallisation": { "materialTypeCode": "METAL_ALUMINUM" } }}