# Product with Variants Model in Norce Commerce Product Service **Overview:** The Norce Commerce Product model supports products with multiple variants. The root Product entity contains shared data, while each variant holds unique information. This structure enables flexible product representation for e-commerce scenarios. > **Description of the schema:** The Product entity contains a `Variants` collection. Each variant is a product-like object with its own identifiers and attributes, but shares some data with the root Product. Nested variants (variants within variants) are not allowed. [View the Product with Variants schema.](/api-reference/schemas/product#product) details summary Example: Product with Variants ```JSON { "Id": 31883770, "Name": "Delta t-shirt", "Description": "T-shirt från MINIMUM. Rak modell med rundad hals. ", "PartNo": "", "SubHeader": "", "Manufacturer": { "Id": 25030, "Name": "Minimum", "PartNo": "", "LogoPath": "", "LogoKey": null, "UniqueName": "Minimum" }, "Image": null, "CampaignImage": null, "LargeImage": null, "ThumbnailImage": null, "Files": [], "FlagIdSeed": "917,915,1001", "Price": 240.00, "PriceCatalog": null, "PriceRecommended": null, "PriceFreight": null, "PriceFreightVatRate": null, "VatRate": 1.25, "RecommendedQuantity": 1.000, "OnHand": { "Value": 10.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": 0, "LastChecked": null, "IsActive": true, "IsReturnable": false, "Info": null }, "OnHandStore": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": false, "Info": null }, "OnHandSupplier": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": false, "Info": null }, "Variants": [ { "Id": 31883770, "Name": "Adobe Rose, S", "Description": "T-shirt från MINIMUM. Rak modell med rundad hals. ", "PartNo": "124480222-S-ROSE", "SubHeader": "", "Manufacturer": { "Id": 25030, "Name": "Minimum", "PartNo": "124480222-S-ROSE", "LogoPath": "", "LogoKey": null, "UniqueName": "Minimum" }, "Image": null, "CampaignImage": null, "LargeImage": null, "ThumbnailImage": null, "Files": [], "FlagIdSeed": "", "Price": 240.00, "PriceCatalog": null, "PriceRecommended": null, "PriceFreight": null, "PriceFreightVatRate": null, "VatRate": 1.25, "RecommendedQuantity": 1.000, "OnHand": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandStore": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandSupplier": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "Variants": null, "PriceListId": 1, "Key": "f7e9a96c-eb29-48fa-906b-852279f93bdf", "Updated": "/Date(1527770280000+0200)/", "NavigationNodeKey": null, "CategoryId": null, "CategoryName": null, "ImageKey": "7c63e89d-b131-4b05-8840-ebaa1a186ac4", "VariantParametrics": [ { "Name": "Färg", "Value": "Adobe Rose", "Id": 14113, "ValueId": 53535, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "Adobe Rose", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 1 }, { "Name": "Storlek", "Value": "S", "Id": 14314, "ValueId": 53534, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "S", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 2 } ], "StatusId": 1, "MetaTags": "", "MetaDescription": "", "VariantName": "Delta t-shirt", "DescriptionHeader": "", "UniqueName": "delta-t-shirt-31883770", "StockDisplayBreakPoint": null, "Parametrics": [], "Families": null, "IsBuyable": true, "SubDescription": "", "Uom": "st", "UomCount": 1.000, "EanCode": null, "Type": 1, "Categories": null, "IsRecommendedQuantityFixed": false, "PopularityRank": null, "CostPurchase": 0.00, "CostUnit": 0.00, "Title": null, "ActualWeight": 0.00, "IsDropShipOnly": false, "Synonyms": null, "IsSubscribable": false, "UnspscCode": null, "PriceStandard": null, "Width": null, "Height": null, "Depth": null }, { "Id": 31883771, "Name": "Adobe Rose, M", "Description": "T-shirt från MINIMUM. Rak modell med rundad hals. ", "PartNo": "124480222-M-ROSE", "SubHeader": "", "Manufacturer": { "Id": 25030, "Name": "Minimum", "PartNo": "124480222-M-ROSE", "LogoPath": "", "LogoKey": null, "UniqueName": "Minimum" }, "Image": null, "CampaignImage": null, "LargeImage": null, "ThumbnailImage": null, "Files": [ { "Id": 11, "Type": 1, "Path": null, "Name": "", "Description": "", "Key": "e9e10c69-e410-4950-b0b8-d6595e88976f", "Extension": ".jpg", "Code": "Additional" } ], "FlagIdSeed": "", "Price": 240.00, "PriceCatalog": null, "PriceRecommended": null, "PriceFreight": null, "PriceFreightVatRate": null, "VatRate": 1.25, "RecommendedQuantity": 1.000, "OnHand": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandStore": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandSupplier": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "Variants": null, "PriceListId": 1, "Key": "dd851207-bd92-4048-90f1-2c50aa8dcd26", "Updated": "/Date(1527770280000+0200)/", "NavigationNodeKey": null, "CategoryId": null, "CategoryName": null, "ImageKey": "6f525f31-76e9-46b3-93c3-a3fe080b9ca9", "VariantParametrics": [ { "Name": "Färg", "Value": "Adobe Rose", "Id": 14113, "ValueId": 53535, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "Adobe Rose", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 1 }, { "Name": "Storlek", "Value": "M", "Id": 14314, "ValueId": 53536, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "M", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 2 } ], "StatusId": 1, "MetaTags": "", "MetaDescription": "", "VariantName": "Delta t-shirt", "DescriptionHeader": "", "UniqueName": "delta-t-shirt-31883771", "StockDisplayBreakPoint": null, "Parametrics": [], "Families": null, "IsBuyable": true, "SubDescription": "", "Uom": "st", "UomCount": 1.000, "EanCode": null, "Type": 1, "Categories": null, "IsRecommendedQuantityFixed": false, "PopularityRank": null, "CostPurchase": 0.00, "CostUnit": 0.00, "Title": null, "ActualWeight": 0.00, "IsDropShipOnly": false, "Synonyms": null, "IsSubscribable": false, "UnspscCode": null, "PriceStandard": null, "Width": null, "Height": null, "Depth": null }, { "Id": 31883772, "Name": "Adobe Rose, L", "Description": "T-shirt från MINIMUM. Rak modell med rundad hals. ", "PartNo": "124480222-L-ROSE", "SubHeader": "", "Manufacturer": { "Id": 25030, "Name": "Minimum", "PartNo": "124480222-L-ROSE", "LogoPath": "", "LogoKey": null, "UniqueName": "Minimum" }, "Image": null, "CampaignImage": null, "LargeImage": null, "ThumbnailImage": null, "Files": [], "FlagIdSeed": "", "Price": 240.00, "PriceCatalog": null, "PriceRecommended": null, "PriceFreight": null, "PriceFreightVatRate": null, "VatRate": 1.25, "RecommendedQuantity": 1.000, "OnHand": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandStore": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandSupplier": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "Variants": null, "PriceListId": 1, "Key": "c1f63c94-4ac4-4f51-a50f-e6f71c25c56b", "Updated": "/Date(1527770280000+0200)/", "NavigationNodeKey": null, "CategoryId": null, "CategoryName": null, "ImageKey": "eab6bebf-f1a7-42cc-9ff9-fa085e169f75", "VariantParametrics": [ { "Name": "Färg", "Value": "Adobe Rose", "Id": 14113, "ValueId": 53535, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "Adobe Rose", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 1 }, { "Name": "Storlek", "Value": "L", "Id": 14314, "ValueId": 53537, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "L", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 2 } ], "StatusId": 1, "MetaTags": "", "MetaDescription": "", "VariantName": "Delta t-shirt", "DescriptionHeader": "", "UniqueName": "delta-t-shirt-31883772", "StockDisplayBreakPoint": null, "Parametrics": [], "Families": null, "IsBuyable": true, "SubDescription": "", "Uom": "st", "UomCount": 1.000, "EanCode": null, "Type": 1, "Categories": null, "IsRecommendedQuantityFixed": false, "PopularityRank": null, "CostPurchase": 0.00, "CostUnit": 0.00, "Title": null, "ActualWeight": 0.00, "IsDropShipOnly": false, "Synonyms": null, "IsSubscribable": false, "UnspscCode": null, "PriceStandard": null, "Width": null, "Height": null, "Depth": null }, { "Id": 31883773, "Name": "Adobe Rose, XL", "Description": "T-shirt från MINIMUM. Rak modell med rundad hals. ", "PartNo": "124480222-XL-ROSE", "SubHeader": "", "Manufacturer": { "Id": 25030, "Name": "Minimum", "PartNo": "124480222-XL-ROSE", "LogoPath": "", "LogoKey": null, "UniqueName": "Minimum" }, "Image": null, "CampaignImage": null, "LargeImage": null, "ThumbnailImage": null, "Files": [], "FlagIdSeed": "", "Price": 240.00, "PriceCatalog": null, "PriceRecommended": null, "PriceFreight": null, "PriceFreightVatRate": null, "VatRate": 1.25, "RecommendedQuantity": 1.000, "OnHand": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandStore": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandSupplier": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "Variants": null, "PriceListId": 1, "Key": "f42bbe91-2f73-4bdc-a19f-81c1e75c80d4", "Updated": "/Date(1527770280000+0200)/", "NavigationNodeKey": null, "CategoryId": null, "CategoryName": null, "ImageKey": "6f7282b4-7c17-46ff-a2b6-d643bfa41fb2", "VariantParametrics": [ { "Name": "Färg", "Value": "Adobe Rose", "Id": 14113, "ValueId": 53535, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "Adobe Rose", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 1 }, { "Name": "Storlek", "Value": "XL", "Id": 14314, "ValueId": 53538, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "XL", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 2 } ], "StatusId": 1, "MetaTags": "", "MetaDescription": "", "VariantName": "Delta t-shirt", "DescriptionHeader": "", "UniqueName": "delta-t-shirt-31883773", "StockDisplayBreakPoint": null, "Parametrics": [], "Families": null, "IsBuyable": true, "SubDescription": "", "Uom": "st", "UomCount": 1.000, "EanCode": null, "Type": 1, "Categories": null, "IsRecommendedQuantityFixed": false, "PopularityRank": null, "CostPurchase": 0.00, "CostUnit": 0.00, "Title": null, "ActualWeight": 0.00, "IsDropShipOnly": false, "Synonyms": null, "IsSubscribable": false, "UnspscCode": null, "PriceStandard": null, "Width": null, "Height": null, "Depth": null } ], "PriceListId": 1, "Key": "f7e9a96c-eb29-48fa-906b-852279f93bdf", "Updated": "/Date(1527770280000+0200)/", "NavigationNodeKey": "8cf3381a-4205-4fd8-8d90-034e8fa6e249", "CategoryId": 42507, "CategoryName": "Clothes", "ImageKey": "7c63e89d-b131-4b05-8840-ebaa1a186ac4", "VariantParametrics": [ { "Name": "Material", "Value": "100% bomull", "Id": 14313, "ValueId": 53533, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "100% bomull", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 5 }, { "Name": "Tvättråd", "Value": "40 C", "Id": 14315, "ValueId": null, "Description": "", "ValueDescription": null, "IsPrimary": true, "ValueIdSeed": "", "Value2": "40 C", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 6 }, { "Name": "Storlek/Längd", "Value": "Modellen är 189 cm lång och bär storlek L. Längd bak är 76 cm. I stl L.", "Id": 12717, "ValueId": null, "Description": "", "ValueDescription": null, "IsPrimary": true, "ValueIdSeed": "", "Value2": "Modellen är 189 cm lång och bär storlek L. Längd bak är 76 cm. I stl L.", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 7 } ], "StatusId": 1, "MetaTags": "", "MetaDescription": "", "VariantName": null, "DescriptionHeader": "", "UniqueName": "delta-t-shirt", "StockDisplayBreakPoint": null, "Parametrics": [ { "Name": "Material", "Value": "100% bomull", "Id": 14313, "ValueId": 53533, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "100% bomull", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 5 }, { "Name": "Tvättråd", "Value": "40 C", "Id": 14315, "ValueId": null, "Description": "", "ValueDescription": null, "IsPrimary": true, "ValueIdSeed": "", "Value2": "40 C", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 6 }, { "Name": "Storlek/Längd", "Value": "Modellen är 189 cm lång och bär storlek L. Längd bak är 76 cm. I stl L.", "Id": 12717, "ValueId": null, "Description": "", "ValueDescription": null, "IsPrimary": true, "ValueIdSeed": "", "Value2": "Modellen är 189 cm lång och bär storlek L. Längd bak är 76 cm. I stl L.", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 7 } ], "Families": [], "IsBuyable": false, "SubDescription": "", "Uom": "st", "UomCount": 1.000, "EanCode": null, "Type": 1, "Categories": [ { "Id": 42507, "Value": "Clothes", "Code": "clothes" } ], "IsRecommendedQuantityFixed": false, "PopularityRank": null, "CostPurchase": 0.00, "CostUnit": 0.00, "Title": null, "ActualWeight": 0.00, "IsDropShipOnly": false, "Synonyms": null, "IsSubscribable": false, "UnspscCode": null, "PriceStandard": null, "Width": null, "Height": null, "Depth": null } ``` ## Product Root Level The root Product level contains data common to all variants. This includes general identifiers, shared text fields, images, pricing, and availability. The `Variants` field lists all variant objects. **Key points:** - The root Product may appear similar to a product without variants, but the `Variants` collection will contain one or more variant objects. - The root Product's identifiers and some fields may differ depending on how the product is retrieved (see below). ### Product Retrieval Scenarios There are two main ways to retrieve a product with variants: 1. **By common product `UniqueName`:** - The root Product's `Id` is the internal ID of one of the variants (may change over time). - `PartNo` and `Manufacturer.PartNo` are empty. - `UniqueName` is the SEO-friendly name shared by all variants. 2. **By specific variant identifier (`PartNo` or `UniqueName`):** - The root Product's `Id`, `PartNo`, and `Manufacturer.PartNo` refer to the selected variant. - `UniqueName` remains the shared SEO-friendly name. ### Shared Data at Root Level - **Text, Images, and Files:** Only information common to all variants is present at the root level. - **Parametrics:** The `Parametrics` collection contains attributes shared by all variants. The `VariantParametrics` collection is not relevant at the root level. - **Flags:** The `FlagIdSeed` field lists all flags set at the product (root) level. - **Price:** The root-level `Price` field shows the lowest price among all variants (useful for "from price" displays). - **On Hand (Availability):** Aggregated availability across all variants. - **Buying Information:** Should not be used from the root level; refer to each variant for buying status. ## Variant Level Each object in the `Variants` collection represents a unique variant of the product. Variants contain their own identifiers and data that differ from the root or other variants. **Key points:** - Each variant has its own `Id`, `PartNo`, `Manufacturer.PartNo`, and `UniqueName`. - Only data unique to the variant is included; shared data remains at the root. - The `VariantParametrics` collection lists attributes used to distinguish variants (e.g., color, size). - The `Parametrics` collection contains other attributes unique to the variant. - The `FlagIdSeed` field lists flags specific to the variant. - Price, availability, and buying information at the variant level are specific to that variant. > **Note:** Nested variants are not supported. Each variant is a direct child of the root Product. ### Variant Filtering When retrieving a product, you can filter variants by status (e.g., only "Active" or "Coming" variants). Variants with excluded statuses (e.g., "Inactive") will not be returned. ## Field Reference | Field | Level | Description | | --- | --- | --- | | Id | Root/Variant | Internal identifier (see retrieval scenarios above) | | PartNo | Variant | External identifier for the variant | | Manufacturer.PartNo | Variant | Manufacturer-specific identifier for the variant | | UniqueName | Root/Variant | SEO-friendly, language-specific identifier (shared by all variants) | | Name, Description, etc. | Root/Variant | Text fields; root contains shared data, variant contains unique data | | Parametrics | Root/Variant | Shared attributes at root; unique attributes at variant | | VariantParametrics | Variant | Attributes used to distinguish variants (e.g., color, size) | | FlagIdSeed | Root/Variant | Flags set at root or variant level | | Price | Root/Variant | Lowest price among variants at root; specific price at variant | | OnHand | Root/Variant | Aggregated at root; specific at variant | | IsBuyable | Variant | Indicates if the variant can be purchased | ## Best Practices - Use `PartNo` and `UniqueName` for stable product and variant references. - Always check `IsBuyable` at the variant level before allowing purchase. - Present the root-level price as a "from price" when displaying a group of variants. - Use `VariantParametrics` to build variant selectors (e.g., color/size dropdowns).