# Models

## The localizedValue object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]}}}}
```

## The coreErrorMessage object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"coreErrorMessage":{"type":"object","properties":{"code":{"type":"integer","description":"HTTP Status Code."},"status":{"type":"string","description":"HTTP Status."},"message":{"type":"string","description":"Error message."}}}}}}
```

## The coreErrorMessageWithDetails object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"coreErrorMessageWithDetails":{"type":"object","allOf":[{"$ref":"#/components/schemas/coreErrorMessage"},{"type":"object","properties":{"details":{"type":"array","description":"Error message details.","items":{"type":"object","properties":{"field":{"type":"string"},"type":{"type":"string"},"message":{"type":"string"},"moreInfo":{"type":"string"}}}}}}]},"coreErrorMessage":{"type":"object","properties":{"code":{"type":"integer","description":"HTTP Status Code."},"status":{"type":"string","description":"HTTP Status."},"message":{"type":"string","description":"Error message."}}}}}}
```

## The productErrorMessage object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productErrorMessage":{"allOf":[{"$ref":"#/components/schemas/coreErrorMessage"},{"type":"object","properties":{"productId":{"type":"string","description":"Identifier of the product."}}}]},"coreErrorMessage":{"type":"object","properties":{"code":{"type":"integer","description":"HTTP Status Code."},"status":{"type":"string","description":"HTTP Status."},"message":{"type":"string","description":"Error message."}}}}}}
```

## The productTemplateBase object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productTemplateBase":{"type":"object","properties":{"name":{"type":"object","description":"Localized product template name in a form of a map of translations.","additionalProperties":{"type":"string"}},"attributes":{"type":"array","description":"List of attributes related to the product template.","items":{"$ref":"#/components/schemas/productTemplateAttribute"}}},"required":["name","attributes"]},"productTemplateAttribute":{"title":"productTemplateAttribute","type":"object","properties":{"key":{"type":"string","description":"An identifier of the attribute. The key is used as a field name in a product instance created based on the product template. The key can contain only alphanumeric characters. "},"name":{"type":"object","additionalProperties":{"type":"string"},"description":"Localized resource name in a form of a map of translations."},"type":{"type":"string","description":"Attribute type. Correct values: `TEXT`, `NUMBER`, `BOOLEAN`, `DATETIME`. Regardless of the chosen type, the defaultValue and values fields are validated. The DATETIME values must be compliant with the ISO 8601 standard, for example: 2022-03-31T09:52:15.423Z."},"metadata":{"type":"object","description":"Metadata contains additional information about the attribute.","properties":{"mandatory":{"type":"boolean","description":"Indicates whether the attribute should be treated as a mandatory."},"variantAttribute":{"type":"boolean","description":"Indicates whether the attribute is a variant-specific attribute. Variant attributes are taken into account during variants creation.\nIf the value is set to true, then the 'values' array cannot be null."},"defaultValue":{"description":"The attribute stores a default value for the attribute.","oneOf":[{"type":"string"},{"type":"boolean"},{"type":"number"}]}}},"values":{"allOf":[{"$ref":"#/components/schemas/values"},{"type":"object","description":"If the values are populated then the attribute behaves as an enum property. In other words, the attribute in a product instance can contain only values mentioned in this array. For each\nattribute the value should consist of object with key and localized names."}]}},"required":["key","name","type","metadata"]},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}}
```

## The productTemplateCreation object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productTemplateCreation":{"title":"productTemplateCreation","type":"object","allOf":[{"$ref":"#/components/schemas/productTemplateBase"},{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the product template."}}}]},"productTemplateBase":{"type":"object","properties":{"name":{"type":"object","description":"Localized product template name in a form of a map of translations.","additionalProperties":{"type":"string"}},"attributes":{"type":"array","description":"List of attributes related to the product template.","items":{"$ref":"#/components/schemas/productTemplateAttribute"}}},"required":["name","attributes"]},"productTemplateAttribute":{"title":"productTemplateAttribute","type":"object","properties":{"key":{"type":"string","description":"An identifier of the attribute. The key is used as a field name in a product instance created based on the product template. The key can contain only alphanumeric characters. "},"name":{"type":"object","additionalProperties":{"type":"string"},"description":"Localized resource name in a form of a map of translations."},"type":{"type":"string","description":"Attribute type. Correct values: `TEXT`, `NUMBER`, `BOOLEAN`, `DATETIME`. Regardless of the chosen type, the defaultValue and values fields are validated. The DATETIME values must be compliant with the ISO 8601 standard, for example: 2022-03-31T09:52:15.423Z."},"metadata":{"type":"object","description":"Metadata contains additional information about the attribute.","properties":{"mandatory":{"type":"boolean","description":"Indicates whether the attribute should be treated as a mandatory."},"variantAttribute":{"type":"boolean","description":"Indicates whether the attribute is a variant-specific attribute. Variant attributes are taken into account during variants creation.\nIf the value is set to true, then the 'values' array cannot be null."},"defaultValue":{"description":"The attribute stores a default value for the attribute.","oneOf":[{"type":"string"},{"type":"boolean"},{"type":"number"}]}}},"values":{"allOf":[{"$ref":"#/components/schemas/values"},{"type":"object","description":"If the values are populated then the attribute behaves as an enum property. In other words, the attribute in a product instance can contain only values mentioned in this array. For each\nattribute the value should consist of object with key and localized names."}]}},"required":["key","name","type","metadata"]},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}}
```

## The productTemplateAttribute object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productTemplateAttribute":{"title":"productTemplateAttribute","type":"object","properties":{"key":{"type":"string","description":"An identifier of the attribute. The key is used as a field name in a product instance created based on the product template. The key can contain only alphanumeric characters. "},"name":{"type":"object","additionalProperties":{"type":"string"},"description":"Localized resource name in a form of a map of translations."},"type":{"type":"string","description":"Attribute type. Correct values: `TEXT`, `NUMBER`, `BOOLEAN`, `DATETIME`. Regardless of the chosen type, the defaultValue and values fields are validated. The DATETIME values must be compliant with the ISO 8601 standard, for example: 2022-03-31T09:52:15.423Z."},"metadata":{"type":"object","description":"Metadata contains additional information about the attribute.","properties":{"mandatory":{"type":"boolean","description":"Indicates whether the attribute should be treated as a mandatory."},"variantAttribute":{"type":"boolean","description":"Indicates whether the attribute is a variant-specific attribute. Variant attributes are taken into account during variants creation.\nIf the value is set to true, then the 'values' array cannot be null."},"defaultValue":{"description":"The attribute stores a default value for the attribute.","oneOf":[{"type":"string"},{"type":"boolean"},{"type":"number"}]}}},"values":{"allOf":[{"$ref":"#/components/schemas/values"},{"type":"object","description":"If the values are populated then the attribute behaves as an enum property. In other words, the attribute in a product instance can contain only values mentioned in this array. For each\nattribute the value should consist of object with key and localized names."}]}},"required":["key","name","type","metadata"]},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}}
```

## The productTemplateMetadata object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productTemplateMetadata":{"title":"productTemplateMetadata","type":"object","properties":{"variantAttributesSchema":{"type":"string","description":"Schema url of the variant attributes."},"templateAttributesSchema":{"type":"string","description":"Schema url of the template attributes."},"createdAt":{"type":"string","description":"Date and time when the object was created, compliant with the ISO 8601 standard. For example: `2022-03-31T09:52:15.423Z`"},"modifiedAt":{"type":"string","description":"Date and time when the object was last modified, compliant with the ISO 8601 standard. For example: `2022-03-31T09:52:15.423Z`"},"version":{"type":"number","description":"Version of the object. The value is required during update operation."}}}}}}
```

## The productTemplateResponse object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productTemplateResponse":{"allOf":[{"$ref":"#/components/schemas/productTemplateCreation"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productTemplateMetadata"}}}]},"productTemplateCreation":{"title":"productTemplateCreation","type":"object","allOf":[{"$ref":"#/components/schemas/productTemplateBase"},{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the product template."}}}]},"productTemplateBase":{"type":"object","properties":{"name":{"type":"object","description":"Localized product template name in a form of a map of translations.","additionalProperties":{"type":"string"}},"attributes":{"type":"array","description":"List of attributes related to the product template.","items":{"$ref":"#/components/schemas/productTemplateAttribute"}}},"required":["name","attributes"]},"productTemplateAttribute":{"title":"productTemplateAttribute","type":"object","properties":{"key":{"type":"string","description":"An identifier of the attribute. The key is used as a field name in a product instance created based on the product template. The key can contain only alphanumeric characters. "},"name":{"type":"object","additionalProperties":{"type":"string"},"description":"Localized resource name in a form of a map of translations."},"type":{"type":"string","description":"Attribute type. Correct values: `TEXT`, `NUMBER`, `BOOLEAN`, `DATETIME`. Regardless of the chosen type, the defaultValue and values fields are validated. The DATETIME values must be compliant with the ISO 8601 standard, for example: 2022-03-31T09:52:15.423Z."},"metadata":{"type":"object","description":"Metadata contains additional information about the attribute.","properties":{"mandatory":{"type":"boolean","description":"Indicates whether the attribute should be treated as a mandatory."},"variantAttribute":{"type":"boolean","description":"Indicates whether the attribute is a variant-specific attribute. Variant attributes are taken into account during variants creation.\nIf the value is set to true, then the 'values' array cannot be null."},"defaultValue":{"description":"The attribute stores a default value for the attribute.","oneOf":[{"type":"string"},{"type":"boolean"},{"type":"number"}]}}},"values":{"allOf":[{"$ref":"#/components/schemas/values"},{"type":"object","description":"If the values are populated then the attribute behaves as an enum property. In other words, the attribute in a product instance can contain only values mentioned in this array. For each\nattribute the value should consist of object with key and localized names."}]}},"required":["key","name","type","metadata"]},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"productTemplateMetadata":{"title":"productTemplateMetadata","type":"object","properties":{"variantAttributesSchema":{"type":"string","description":"Schema url of the variant attributes."},"templateAttributesSchema":{"type":"string","description":"Schema url of the template attributes."},"createdAt":{"type":"string","description":"Date and time when the object was created, compliant with the ISO 8601 standard. For example: `2022-03-31T09:52:15.423Z`"},"modifiedAt":{"type":"string","description":"Date and time when the object was last modified, compliant with the ISO 8601 standard. For example: `2022-03-31T09:52:15.423Z`"},"version":{"type":"number","description":"Version of the object. The value is required during update operation."}}}}}}
```

## The productTemplatesResponse object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productTemplatesResponse":{"title":"productTemplatesResponse","type":"array","items":{"$ref":"#/components/schemas/productTemplateResponse"}},"productTemplateResponse":{"allOf":[{"$ref":"#/components/schemas/productTemplateCreation"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productTemplateMetadata"}}}]},"productTemplateCreation":{"title":"productTemplateCreation","type":"object","allOf":[{"$ref":"#/components/schemas/productTemplateBase"},{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the product template."}}}]},"productTemplateBase":{"type":"object","properties":{"name":{"type":"object","description":"Localized product template name in a form of a map of translations.","additionalProperties":{"type":"string"}},"attributes":{"type":"array","description":"List of attributes related to the product template.","items":{"$ref":"#/components/schemas/productTemplateAttribute"}}},"required":["name","attributes"]},"productTemplateAttribute":{"title":"productTemplateAttribute","type":"object","properties":{"key":{"type":"string","description":"An identifier of the attribute. The key is used as a field name in a product instance created based on the product template. The key can contain only alphanumeric characters. "},"name":{"type":"object","additionalProperties":{"type":"string"},"description":"Localized resource name in a form of a map of translations."},"type":{"type":"string","description":"Attribute type. Correct values: `TEXT`, `NUMBER`, `BOOLEAN`, `DATETIME`. Regardless of the chosen type, the defaultValue and values fields are validated. The DATETIME values must be compliant with the ISO 8601 standard, for example: 2022-03-31T09:52:15.423Z."},"metadata":{"type":"object","description":"Metadata contains additional information about the attribute.","properties":{"mandatory":{"type":"boolean","description":"Indicates whether the attribute should be treated as a mandatory."},"variantAttribute":{"type":"boolean","description":"Indicates whether the attribute is a variant-specific attribute. Variant attributes are taken into account during variants creation.\nIf the value is set to true, then the 'values' array cannot be null."},"defaultValue":{"description":"The attribute stores a default value for the attribute.","oneOf":[{"type":"string"},{"type":"boolean"},{"type":"number"}]}}},"values":{"allOf":[{"$ref":"#/components/schemas/values"},{"type":"object","description":"If the values are populated then the attribute behaves as an enum property. In other words, the attribute in a product instance can contain only values mentioned in this array. For each\nattribute the value should consist of object with key and localized names."}]}},"required":["key","name","type","metadata"]},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"productTemplateMetadata":{"title":"productTemplateMetadata","type":"object","properties":{"variantAttributesSchema":{"type":"string","description":"Schema url of the variant attributes."},"templateAttributesSchema":{"type":"string","description":"Schema url of the template attributes."},"createdAt":{"type":"string","description":"Date and time when the object was created, compliant with the ISO 8601 standard. For example: `2022-03-31T09:52:15.423Z`"},"modifiedAt":{"type":"string","description":"Date and time when the object was last modified, compliant with the ISO 8601 standard. For example: `2022-03-31T09:52:15.423Z`"},"version":{"type":"number","description":"Version of the object. The value is required during update operation."}}}}}}
```

## The productTemplateUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productTemplateUpdate":{"title":"productTemplateUpdate","allOf":[{"$ref":"#/components/schemas/productTemplateBase"},{"type":"object","properties":{"metadata":{"type":"object","properties":{"version":{"type":"number","description":"Version of the object. The value is required while product template update."}},"required":["version"]}}}],"required":["name","attributes","metadata"]},"productTemplateBase":{"type":"object","properties":{"name":{"type":"object","description":"Localized product template name in a form of a map of translations.","additionalProperties":{"type":"string"}},"attributes":{"type":"array","description":"List of attributes related to the product template.","items":{"$ref":"#/components/schemas/productTemplateAttribute"}}},"required":["name","attributes"]},"productTemplateAttribute":{"title":"productTemplateAttribute","type":"object","properties":{"key":{"type":"string","description":"An identifier of the attribute. The key is used as a field name in a product instance created based on the product template. The key can contain only alphanumeric characters. "},"name":{"type":"object","additionalProperties":{"type":"string"},"description":"Localized resource name in a form of a map of translations."},"type":{"type":"string","description":"Attribute type. Correct values: `TEXT`, `NUMBER`, `BOOLEAN`, `DATETIME`. Regardless of the chosen type, the defaultValue and values fields are validated. The DATETIME values must be compliant with the ISO 8601 standard, for example: 2022-03-31T09:52:15.423Z."},"metadata":{"type":"object","description":"Metadata contains additional information about the attribute.","properties":{"mandatory":{"type":"boolean","description":"Indicates whether the attribute should be treated as a mandatory."},"variantAttribute":{"type":"boolean","description":"Indicates whether the attribute is a variant-specific attribute. Variant attributes are taken into account during variants creation.\nIf the value is set to true, then the 'values' array cannot be null."},"defaultValue":{"description":"The attribute stores a default value for the attribute.","oneOf":[{"type":"string"},{"type":"boolean"},{"type":"number"}]}}},"values":{"allOf":[{"$ref":"#/components/schemas/values"},{"type":"object","description":"If the values are populated then the attribute behaves as an enum property. In other words, the attribute in a product instance can contain only values mentioned in this array. For each\nattribute the value should consist of object with key and localized names."}]}},"required":["key","name","type","metadata"]},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}}
```

## The productType object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]}}}}
```

## The productTypeUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]}}}}
```

## The template object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]}}}}
```

## The bundledProducts object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"bundledProducts":{"type":"array","description":"List of bundled products","items":{"type":"object","properties":{"productId":{"type":"string","description":"Identifier of the bundled product."},"amount":{"type":"integer","description":"Amount of bundled products. Must be a positive number."}},"required":["productId","amount"]}}}}}
```

## The value object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}}
```

## The values object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}}
```

## The variantAttributes object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"variantAttributes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/values"},"description":"This field contains all information about attributes and their values that are used for creating variants. It is presented in the form of a map, where 'key' is the name of the attribute and 'value' is the list of values of that attribute. The attributes and their values are based on their definitions in the `template` element assigned to the parent variant. Each attribute defined in the product template is flagged as a `variantAttribute`. Only the attributes that have this flag set as `true` can be used in the `variantAttributes` field."},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}}
```

## The resourceLocation object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"resourceLocation":{"type":"object","properties":{"id":{"type":"string"},"yrn":{"$ref":"#/components/schemas/YRN"}}},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."}}}}
```

## The YRN object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."}}}}
```

## The taxClasses object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."}}}}
```

## The published object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false}}}}
```

## The salePricesData object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"salePricesData":{"type":"array","items":{"description":"Mixins of the `salePricesData`.","properties":{"salePricesAmount":{"type":"number","description":"The sale price for the product."},"salePriceStart":{"type":"string","format":"date-time","description":"The start date of the sale price."},"salePriceEnd":{"type":"string","format":"date-time","description":"The end date of the sale price."},"enabled":{"type":"boolean","description":"Marks the enabled sale price. Only one price should be marked."}}}}}}}
```

## The productCustomAttributes object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productCustomAttributes":{"type":"object","description":"Mixins of the `productCustomAttributes`.","properties":{"pricingMeasurePrice":{"type":"number","description":"Product price per specified order unit."},"unitPricingMeasure":{"type":"object","description":"Information about the value and measurement unit per one order unit.","properties":{"value":{"type":"number","description":"Quantity of the measurement unit.\n\nFor example, if one piece weighs around 180 g, the value should be set to `180`."},"unitCode":{"type":"string","description":"Code of the measurement unit. The possible values for the `unitCode` field are explained in the table below:\n|     |     |\n| --- | --- |\n| **Value** | **Measurement unit** |\n| `H87` | Pieces |\n| `KGM` | Kilograms |\n| `GRM` | Grams |\n| `LTR` | Liters |\n| `MLT` | Milliliters |\n| `MTR` | Meters |\n| `RO` | Rolls |\n\nFor example, if one piece weighs around 180 g, the value should be set to `GRM`."}}},"unitPricingBaseMeasure":{"type":"object","description":"Information about the value and measurement unit of the base price.","properties":{"value":{"type":"number","description":"Quantity of the base price measurement unit.\n\nFor example, if the base price is calculated for 1 kg, the value should be set to `1`."},"unitCode":{"type":"string","description":"Code of the measurement unit. The possible values for the `unitCode` field are explained in the table below:\n|     |     |\n| --- | --- |\n| **Value** | **Measurement unit** |\n| `H87` | Pieces |\n| `KGM` | Kilograms |\n| `GRM` | Grams |\n| `LTR` | Liters |\n| `MLT` | Milliliters |\n| `MTR` | Meters |\n| `RO` | Rolls |\n\nFor example, if the base price is calculated per 1 kg, the value should be set to `KGM`."}}},"pricingMeasure":{"type":"object","description":"Information about the product price per specified measurement unit.","properties":{"value":{"type":"number","description":"Quantity of the price measurement unit.\n\nFor example, if the price is calculated for 100 g, the value should be set to `100`."},"unitCode":{"type":"string","description":"Code of the measurement unit. The possible values for the `unitCode` field are explained in the table below:\n|     |     |\n| --- | --- |\n| **Value** | **Measurement unit** |\n| `H87` | Pieces |\n| `KGM` | Kilograms |\n| `GRM` | Grams |\n| `LTR` | Liters |\n| `MLT` | Milliliters |\n| `MTR` | Meters |\n| `RO` | Rolls |\n\nFor example, if the price is calculated per 100 g, the value should be set to `GRM`."}}},"orderUnit":{"type":"string","description":"Code of the measurement unit by which the customer can order the product. The possible values for the `unitCode` field are explained in the table below:\n|     |     |\n| --- | --- |\n| **Value** | **Measurement unit** |\n| `H87` | Pieces |\n| `KGM` | Kilograms |\n| `GRM` | Grams |\n| `LTR` | Liters |\n| `MLT` | Milliliters |\n| `MTR` | Meters |\n| `RO` | Rolls |\n\nFor example, if the customer can order a product by pieces, the value should be set to `H87`."},"minOrderQuantity":{"type":"number","description":"Minimum quantity which can be ordered."},"maxOrderQuantity":{"type":"number","description":"Maximum quantity which can be ordered."},"defaultOrderQuantity":{"type":"number","description":"Default order quantity which appears on the product page."}}}}}}
```

## The productTemplateAttributes object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productTemplateAttributes":{"type":"object","description":"Mixins of the `productTemplateAttributes` which contains information about the attributes used from the product template in the form of a map, where 'key' is an attribute name and 'value' is the attribute value."}}}}
```

## The productVariantAttributes object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productVariantAttributes":{"type":"object","description":"Mixins of the `productVariantAttributes` which contains information about the variant attributes used from the product template in the form of a map, where 'key' is an attribute name and 'value' is the attribute value."}}}}
```

## The productMixins object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true}}}}
```

## The productVariantMixins object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productVariantMixins":{"type":"object","description":"Mixins request.","additionalProperties":true}}}}
```

## The productMetadataCore object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}}}}}
```

## The productMetadataWithVersion object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}}}}}
```

## The productMetadataGet object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}}}}}
```

## The variantProductMetadataGet object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"variantProductMetadataGet":{"type":"object","description":"Variant metadata response.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataGet"},{"$ref":"#/components/schemas/variantProductMetadataWithVersion"}]},"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"variantProductMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/variantProductMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document."}}}]},"variantProductMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"overridden":{"type":"array","description":"By default, all variant products inherit their attributes from the parent variant. You need to include the name of the attribute in the `metadata.overridden` field to be able to replace the attribute values. For the `mixins` and `metadata` fields, you can provide a nested path so that only a single mixin attribute is overridden, for example `mixins.productCustomAttributes.pricingMeasurePrice`. The same rule is valid for providing the mixins schema, as you can override just this particular field with the provided schema, for example metadata.mixins.yourCustomAttributes.\n\n**Note:**You cannot override the following attributes: `id`, `code`, `template`, `variantAttributes`.","items":{"type":"string","description":"Name of overridden product field, for example `published`."}}}}]}}}}
```

## The variantProductMetadataCore object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"variantProductMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"overridden":{"type":"array","description":"By default, all variant products inherit their attributes from the parent variant. You need to include the name of the attribute in the `metadata.overridden` field to be able to replace the attribute values. For the `mixins` and `metadata` fields, you can provide a nested path so that only a single mixin attribute is overridden, for example `mixins.productCustomAttributes.pricingMeasurePrice`. The same rule is valid for providing the mixins schema, as you can override just this particular field with the provided schema, for example metadata.mixins.yourCustomAttributes.\n\n**Note:**You cannot override the following attributes: `id`, `code`, `template`, `variantAttributes`.","items":{"type":"string","description":"Name of overridden product field, for example `published`."}}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}}}}}
```

## The variantProductMetadataWithVersion object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"variantProductMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/variantProductMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document."}}}]},"variantProductMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"overridden":{"type":"array","description":"By default, all variant products inherit their attributes from the parent variant. You need to include the name of the attribute in the `metadata.overridden` field to be able to replace the attribute values. For the `mixins` and `metadata` fields, you can provide a nested path so that only a single mixin attribute is overridden, for example `mixins.productCustomAttributes.pricingMeasurePrice`. The same rule is valid for providing the mixins schema, as you can override just this particular field with the provided schema, for example metadata.mixins.yourCustomAttributes.\n\n**Note:**You cannot override the following attributes: `id`, `code`, `template`, `variantAttributes`.","items":{"type":"string","description":"Name of overridden product field, for example `published`."}}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}}}}}
```

## The id object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"id":{"type":"string","description":"Unique resource identifier."}}}}
```

## The productMedia object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productMedia":{"type":"array","uniqueItems":false,"description":"Media files attached to the product.","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"yrn":{"$ref":"#/components/schemas/YRN"},"contentType":{"type":"string"},"createdAt":{"type":"string"},"uploadLink":{"type":"string"},"url":{"type":"string"},"cloudinaryUrl":{"type":"string"},"uncommittedMedia":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"customAttributes":{"type":"object"}}}},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."}}}}
```

## The productCore object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}}}}}
```

## The brand object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}}}}}
```

## The labelOverlay object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}}}}}
```

## The label object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}}}}}
```

## The basicProduct object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"basicProduct":{"type":"object","description":"Products of the BASIC type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]}}}}
```

## The basicProductCreation object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"basicProductCreation":{"type":"object","description":"Creating products of the BASIC type.","allOf":[{"$ref":"#/components/schemas/basicProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"basicProduct":{"type":"object","description":"Products of the BASIC type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]}}}}
```

## The basicProductWithId object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"basicProductWithId":{"type":"object","description":"Products of the BASIC type.","allOf":[{"$ref":"#/components/schemas/basicProductCreation"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"},"yrn":{"$ref":"#/components/schemas/YRN"},"media":{"$ref":"#/components/schemas/productMedia"},"metadata":{"$ref":"#/components/schemas/productMetadataGet"},"customerSegmentIds":{"type":"array","description":"Customer segment IDs assigned to the product.","items":{"type":"string"}},"categoryIds":{"type":"array","description":"Category IDs assigned to the product.","items":{"type":"string"}}}}]},"basicProductCreation":{"type":"object","description":"Creating products of the BASIC type.","allOf":[{"$ref":"#/components/schemas/basicProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"basicProduct":{"type":"object","description":"Products of the BASIC type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"id":{"type":"string","description":"Unique resource identifier."},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."},"productMedia":{"type":"array","uniqueItems":false,"description":"Media files attached to the product.","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"yrn":{"$ref":"#/components/schemas/YRN"},"contentType":{"type":"string"},"createdAt":{"type":"string"},"uploadLink":{"type":"string"},"url":{"type":"string"},"cloudinaryUrl":{"type":"string"},"uncommittedMedia":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"customAttributes":{"type":"object"}}}},"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]}}}}
```

## The basicProductsArray object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"basicProductsArray":{"type":"array","description":"List of products of the BASIC type.","items":{"$ref":"#/components/schemas/basicProductWithId"}},"basicProductWithId":{"type":"object","description":"Products of the BASIC type.","allOf":[{"$ref":"#/components/schemas/basicProductCreation"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"},"yrn":{"$ref":"#/components/schemas/YRN"},"media":{"$ref":"#/components/schemas/productMedia"},"metadata":{"$ref":"#/components/schemas/productMetadataGet"},"customerSegmentIds":{"type":"array","description":"Customer segment IDs assigned to the product.","items":{"type":"string"}},"categoryIds":{"type":"array","description":"Category IDs assigned to the product.","items":{"type":"string"}}}}]},"basicProductCreation":{"type":"object","description":"Creating products of the BASIC type.","allOf":[{"$ref":"#/components/schemas/basicProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"basicProduct":{"type":"object","description":"Products of the BASIC type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"id":{"type":"string","description":"Unique resource identifier."},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."},"productMedia":{"type":"array","uniqueItems":false,"description":"Media files attached to the product.","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"yrn":{"$ref":"#/components/schemas/YRN"},"contentType":{"type":"string"},"createdAt":{"type":"string"},"uploadLink":{"type":"string"},"url":{"type":"string"},"cloudinaryUrl":{"type":"string"},"uncommittedMedia":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"customAttributes":{"type":"object"}}}},"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]}}}}
```

## The basicProductUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"basicProductUpdate":{"type":"object","description":"Updating products of the BASIC type.","allOf":[{"$ref":"#/components/schemas/basicProduct"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataWithVersion"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"}}}]},"basicProduct":{"type":"object","description":"Products of the BASIC type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]}}}}
```

## The basicProductBulkUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"basicProductBulkUpdate":{"type":"object","description":"Updating products of the BASIC type in bulk.","allOf":[{"$ref":"#/components/schemas/basicProductUpdate"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"}},"required":["id"]}]},"basicProductUpdate":{"type":"object","description":"Updating products of the BASIC type.","allOf":[{"$ref":"#/components/schemas/basicProduct"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataWithVersion"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"}}}]},"basicProduct":{"type":"object","description":"Products of the BASIC type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"id":{"type":"string","description":"Unique resource identifier."}}}}
```

## The bundleProduct object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"bundleProduct":{"type":"object","description":"Products of the BUNDLE type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"},"bundledProducts":{"$ref":"#/components/schemas/bundledProducts"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"}},"required":["name","code","bundledProducts","productType"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"bundledProducts":{"type":"array","description":"List of bundled products","items":{"type":"object","properties":{"productId":{"type":"string","description":"Identifier of the bundled product."},"amount":{"type":"integer","description":"Amount of bundled products. Must be a positive number."}},"required":["productId","amount"]}},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]}}}}
```

## The bundleProductCreation object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"bundleProductCreation":{"type":"object","description":"Creating products of the BUNDLE type.","allOf":[{"$ref":"#/components/schemas/bundleProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"bundleProduct":{"type":"object","description":"Products of the BUNDLE type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"},"bundledProducts":{"$ref":"#/components/schemas/bundledProducts"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"}},"required":["name","code","bundledProducts","productType"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"bundledProducts":{"type":"array","description":"List of bundled products","items":{"type":"object","properties":{"productId":{"type":"string","description":"Identifier of the bundled product."},"amount":{"type":"integer","description":"Amount of bundled products. Must be a positive number."}},"required":["productId","amount"]}},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]}}}}
```

## The bundleProductWithId object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"bundleProductWithId":{"type":"object","description":"Products of the BUNDLE type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/bundleProductCreation"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"},"yrn":{"$ref":"#/components/schemas/YRN"},"media":{"$ref":"#/components/schemas/productMedia"},"metadata":{"$ref":"#/components/schemas/productMetadataGet"},"customerSegmentIds":{"type":"array","description":"Customer segment IDs assigned to the product.","items":{"type":"string"}},"categoryIds":{"type":"array","description":"Category IDs assigned to the product.","items":{"type":"string"}}}}]},"bundleProductCreation":{"type":"object","description":"Creating products of the BUNDLE type.","allOf":[{"$ref":"#/components/schemas/bundleProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"bundleProduct":{"type":"object","description":"Products of the BUNDLE type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"},"bundledProducts":{"$ref":"#/components/schemas/bundledProducts"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"}},"required":["name","code","bundledProducts","productType"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"bundledProducts":{"type":"array","description":"List of bundled products","items":{"type":"object","properties":{"productId":{"type":"string","description":"Identifier of the bundled product."},"amount":{"type":"integer","description":"Amount of bundled products. Must be a positive number."}},"required":["productId","amount"]}},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"id":{"type":"string","description":"Unique resource identifier."},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."},"productMedia":{"type":"array","uniqueItems":false,"description":"Media files attached to the product.","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"yrn":{"$ref":"#/components/schemas/YRN"},"contentType":{"type":"string"},"createdAt":{"type":"string"},"uploadLink":{"type":"string"},"url":{"type":"string"},"cloudinaryUrl":{"type":"string"},"uncommittedMedia":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"customAttributes":{"type":"object"}}}},"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]}}}}
```

## The bundleProductsArray object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"bundleProductsArray":{"type":"array","description":"List of products of the BUNDLE type.","items":{"$ref":"#/components/schemas/bundleProductWithId"}},"bundleProductWithId":{"type":"object","description":"Products of the BUNDLE type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/bundleProductCreation"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"},"yrn":{"$ref":"#/components/schemas/YRN"},"media":{"$ref":"#/components/schemas/productMedia"},"metadata":{"$ref":"#/components/schemas/productMetadataGet"},"customerSegmentIds":{"type":"array","description":"Customer segment IDs assigned to the product.","items":{"type":"string"}},"categoryIds":{"type":"array","description":"Category IDs assigned to the product.","items":{"type":"string"}}}}]},"bundleProductCreation":{"type":"object","description":"Creating products of the BUNDLE type.","allOf":[{"$ref":"#/components/schemas/bundleProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"bundleProduct":{"type":"object","description":"Products of the BUNDLE type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"},"bundledProducts":{"$ref":"#/components/schemas/bundledProducts"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"}},"required":["name","code","bundledProducts","productType"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"bundledProducts":{"type":"array","description":"List of bundled products","items":{"type":"object","properties":{"productId":{"type":"string","description":"Identifier of the bundled product."},"amount":{"type":"integer","description":"Amount of bundled products. Must be a positive number."}},"required":["productId","amount"]}},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"id":{"type":"string","description":"Unique resource identifier."},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."},"productMedia":{"type":"array","uniqueItems":false,"description":"Media files attached to the product.","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"yrn":{"$ref":"#/components/schemas/YRN"},"contentType":{"type":"string"},"createdAt":{"type":"string"},"uploadLink":{"type":"string"},"url":{"type":"string"},"cloudinaryUrl":{"type":"string"},"uncommittedMedia":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"customAttributes":{"type":"object"}}}},"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]}}}}
```

## The bundleProductUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"bundleProductUpdate":{"type":"object","description":"Updating products of the BUNDLE type.","allOf":[{"$ref":"#/components/schemas/bundleProduct"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataWithVersion"}}}]},"bundleProduct":{"type":"object","description":"Products of the BUNDLE type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"},"bundledProducts":{"$ref":"#/components/schemas/bundledProducts"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"}},"required":["name","code","bundledProducts","productType"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"bundledProducts":{"type":"array","description":"List of bundled products","items":{"type":"object","properties":{"productId":{"type":"string","description":"Identifier of the bundled product."},"amount":{"type":"integer","description":"Amount of bundled products. Must be a positive number."}},"required":["productId","amount"]}},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]}}}}
```

## The bundleProductBulkUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"bundleProductBulkUpdate":{"type":"object","description":"Updating products of the BUNDLE type in bulk.","allOf":[{"$ref":"#/components/schemas/bundleProductUpdate"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"}},"required":["id"]}]},"bundleProductUpdate":{"type":"object","description":"Updating products of the BUNDLE type.","allOf":[{"$ref":"#/components/schemas/bundleProduct"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataWithVersion"}}}]},"bundleProduct":{"type":"object","description":"Products of the BUNDLE type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"},"bundledProducts":{"$ref":"#/components/schemas/bundledProducts"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"}},"required":["name","code","bundledProducts","productType"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"bundledProducts":{"type":"array","description":"List of bundled products","items":{"type":"object","properties":{"productId":{"type":"string","description":"Identifier of the bundled product."},"amount":{"type":"integer","description":"Amount of bundled products. Must be a positive number."}},"required":["productId","amount"]}},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"id":{"type":"string","description":"Unique resource identifier."}}}}
```

## The parentVariantProduct object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"parentVariantProduct":{"type":"object","description":"Products of the PARENT_VARIANT type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"},"variantAttributes":{"$ref":"#/components/schemas/variantAttributes"}},"required":["name","code","template","productType","variantAttributes"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"variantAttributes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/values"},"description":"This field contains all information about attributes and their values that are used for creating variants. It is presented in the form of a map, where 'key' is the name of the attribute and 'value' is the list of values of that attribute. The attributes and their values are based on their definitions in the `template` element assigned to the parent variant. Each attribute defined in the product template is flagged as a `variantAttribute`. Only the attributes that have this flag set as `true` can be used in the `variantAttributes` field."},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}}
```

## The parentVariantProductCreation object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"parentVariantProductCreation":{"type":"object","description":"Creating products of the PARENT_VARIANT type.","allOf":[{"$ref":"#/components/schemas/parentVariantProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"parentVariantProduct":{"type":"object","description":"Products of the PARENT_VARIANT type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"},"variantAttributes":{"$ref":"#/components/schemas/variantAttributes"}},"required":["name","code","template","productType","variantAttributes"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"variantAttributes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/values"},"description":"This field contains all information about attributes and their values that are used for creating variants. It is presented in the form of a map, where 'key' is the name of the attribute and 'value' is the list of values of that attribute. The attributes and their values are based on their definitions in the `template` element assigned to the parent variant. Each attribute defined in the product template is flagged as a `variantAttribute`. Only the attributes that have this flag set as `true` can be used in the `variantAttributes` field."},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]}}}}
```

## The parentVariantProductWithId object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"parentVariantProductWithId":{"type":"object","description":"Products of the PARENT_VARIANT type.","allOf":[{"$ref":"#/components/schemas/parentVariantProductCreation"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"},"yrn":{"$ref":"#/components/schemas/YRN"},"media":{"$ref":"#/components/schemas/productMedia"},"metadata":{"$ref":"#/components/schemas/productMetadataGet"},"customerSegmentIds":{"type":"array","description":"Customer segment IDs assigned to the product.","items":{"type":"string"}},"categoryIds":{"type":"array","description":"Category IDs assigned to the product.","items":{"type":"string"}}}}]},"parentVariantProductCreation":{"type":"object","description":"Creating products of the PARENT_VARIANT type.","allOf":[{"$ref":"#/components/schemas/parentVariantProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"parentVariantProduct":{"type":"object","description":"Products of the PARENT_VARIANT type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"},"variantAttributes":{"$ref":"#/components/schemas/variantAttributes"}},"required":["name","code","template","productType","variantAttributes"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"variantAttributes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/values"},"description":"This field contains all information about attributes and their values that are used for creating variants. It is presented in the form of a map, where 'key' is the name of the attribute and 'value' is the list of values of that attribute. The attributes and their values are based on their definitions in the `template` element assigned to the parent variant. Each attribute defined in the product template is flagged as a `variantAttribute`. Only the attributes that have this flag set as `true` can be used in the `variantAttributes` field."},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"id":{"type":"string","description":"Unique resource identifier."},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."},"productMedia":{"type":"array","uniqueItems":false,"description":"Media files attached to the product.","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"yrn":{"$ref":"#/components/schemas/YRN"},"contentType":{"type":"string"},"createdAt":{"type":"string"},"uploadLink":{"type":"string"},"url":{"type":"string"},"cloudinaryUrl":{"type":"string"},"uncommittedMedia":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"customAttributes":{"type":"object"}}}},"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]}}}}
```

## The parentVariantProductsArray object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"parentVariantProductsArray":{"type":"array","description":"List of products of the PARENT_VARIANT type.","items":{"$ref":"#/components/schemas/parentVariantProductWithId"}},"parentVariantProductWithId":{"type":"object","description":"Products of the PARENT_VARIANT type.","allOf":[{"$ref":"#/components/schemas/parentVariantProductCreation"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"},"yrn":{"$ref":"#/components/schemas/YRN"},"media":{"$ref":"#/components/schemas/productMedia"},"metadata":{"$ref":"#/components/schemas/productMetadataGet"},"customerSegmentIds":{"type":"array","description":"Customer segment IDs assigned to the product.","items":{"type":"string"}},"categoryIds":{"type":"array","description":"Category IDs assigned to the product.","items":{"type":"string"}}}}]},"parentVariantProductCreation":{"type":"object","description":"Creating products of the PARENT_VARIANT type.","allOf":[{"$ref":"#/components/schemas/parentVariantProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"parentVariantProduct":{"type":"object","description":"Products of the PARENT_VARIANT type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"},"variantAttributes":{"$ref":"#/components/schemas/variantAttributes"}},"required":["name","code","template","productType","variantAttributes"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"variantAttributes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/values"},"description":"This field contains all information about attributes and their values that are used for creating variants. It is presented in the form of a map, where 'key' is the name of the attribute and 'value' is the list of values of that attribute. The attributes and their values are based on their definitions in the `template` element assigned to the parent variant. Each attribute defined in the product template is flagged as a `variantAttribute`. Only the attributes that have this flag set as `true` can be used in the `variantAttributes` field."},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"id":{"type":"string","description":"Unique resource identifier."},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."},"productMedia":{"type":"array","uniqueItems":false,"description":"Media files attached to the product.","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"yrn":{"$ref":"#/components/schemas/YRN"},"contentType":{"type":"string"},"createdAt":{"type":"string"},"uploadLink":{"type":"string"},"url":{"type":"string"},"cloudinaryUrl":{"type":"string"},"uncommittedMedia":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"customAttributes":{"type":"object"}}}},"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]}}}}
```

## The parentVariantProductUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"parentVariantProductUpdate":{"type":"object","description":"Updating products of the PARENT_VARIANT type.","allOf":[{"$ref":"#/components/schemas/parentVariantProduct"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataWithVersion"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"}}}]},"parentVariantProduct":{"type":"object","description":"Products of the PARENT_VARIANT type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"},"variantAttributes":{"$ref":"#/components/schemas/variantAttributes"}},"required":["name","code","template","productType","variantAttributes"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"variantAttributes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/values"},"description":"This field contains all information about attributes and their values that are used for creating variants. It is presented in the form of a map, where 'key' is the name of the attribute and 'value' is the list of values of that attribute. The attributes and their values are based on their definitions in the `template` element assigned to the parent variant. Each attribute defined in the product template is flagged as a `variantAttribute`. Only the attributes that have this flag set as `true` can be used in the `variantAttributes` field."},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]}}}}
```

## The parentVariantProductBulkUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"parentVariantProductBulkUpdate":{"type":"object","description":"Updating products of the PARENT_VARIANT type in bulk.","allOf":[{"$ref":"#/components/schemas/parentVariantProductUpdate"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"}},"required":["id"]}]},"parentVariantProductUpdate":{"type":"object","description":"Updating products of the PARENT_VARIANT type.","allOf":[{"$ref":"#/components/schemas/parentVariantProduct"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataWithVersion"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"}}}]},"parentVariantProduct":{"type":"object","description":"Products of the PARENT_VARIANT type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"template":{"$ref":"#/components/schemas/template"},"variantAttributes":{"$ref":"#/components/schemas/variantAttributes"}},"required":["name","code","template","productType","variantAttributes"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"variantAttributes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/values"},"description":"This field contains all information about attributes and their values that are used for creating variants. It is presented in the form of a map, where 'key' is the name of the attribute and 'value' is the list of values of that attribute. The attributes and their values are based on their definitions in the `template` element assigned to the parent variant. Each attribute defined in the product template is flagged as a `variantAttribute`. Only the attributes that have this flag set as `true` can be used in the `variantAttributes` field."},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"id":{"type":"string","description":"Unique resource identifier."}}}}
```

## The variantProduct object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"variantProduct":{"type":"object","description":"Products of the VARIANT type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"mixins":{"$ref":"#/components/schemas/productVariantMixins"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productVariantMixins":{"type":"object","description":"Mixins request.","additionalProperties":true}}}}
```

## The variantProductCreation object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"variantProductCreation":{"type":"object","description":"Creating products of the VARIANT type.","allOf":[{"$ref":"#/components/schemas/variantProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"metadata":{"$ref":"#/components/schemas/variantProductMetadataCore"},"parentVariantId":{"type":"string","description":"Identifier of the PARENT_VARIANT product."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"variantProduct":{"type":"object","description":"Products of the VARIANT type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"mixins":{"$ref":"#/components/schemas/productVariantMixins"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productVariantMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"variantProductMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"overridden":{"type":"array","description":"By default, all variant products inherit their attributes from the parent variant. You need to include the name of the attribute in the `metadata.overridden` field to be able to replace the attribute values. For the `mixins` and `metadata` fields, you can provide a nested path so that only a single mixin attribute is overridden, for example `mixins.productCustomAttributes.pricingMeasurePrice`. The same rule is valid for providing the mixins schema, as you can override just this particular field with the provided schema, for example metadata.mixins.yourCustomAttributes.\n\n**Note:**You cannot override the following attributes: `id`, `code`, `template`, `variantAttributes`.","items":{"type":"string","description":"Name of overridden product field, for example `published`."}}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]}}}}
```

## The variantProductWithId object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"variantProductWithId":{"type":"object","description":"Products of the VARIANT type.","allOf":[{"$ref":"#/components/schemas/variantProductCreation"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"},"yrn":{"$ref":"#/components/schemas/YRN"},"media":{"$ref":"#/components/schemas/productMedia"},"metadata":{"$ref":"#/components/schemas/variantProductMetadataGet"},"customerSegmentIds":{"type":"array","description":"Customer segment IDs assigned to the product.","items":{"type":"string"}},"categoryIds":{"type":"array","description":"Category IDs assigned to the product.","items":{"type":"string"}}}}]},"variantProductCreation":{"type":"object","description":"Creating products of the VARIANT type.","allOf":[{"$ref":"#/components/schemas/variantProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"metadata":{"$ref":"#/components/schemas/variantProductMetadataCore"},"parentVariantId":{"type":"string","description":"Identifier of the PARENT_VARIANT product."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"variantProduct":{"type":"object","description":"Products of the VARIANT type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"mixins":{"$ref":"#/components/schemas/productVariantMixins"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productVariantMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"variantProductMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"overridden":{"type":"array","description":"By default, all variant products inherit their attributes from the parent variant. You need to include the name of the attribute in the `metadata.overridden` field to be able to replace the attribute values. For the `mixins` and `metadata` fields, you can provide a nested path so that only a single mixin attribute is overridden, for example `mixins.productCustomAttributes.pricingMeasurePrice`. The same rule is valid for providing the mixins schema, as you can override just this particular field with the provided schema, for example metadata.mixins.yourCustomAttributes.\n\n**Note:**You cannot override the following attributes: `id`, `code`, `template`, `variantAttributes`.","items":{"type":"string","description":"Name of overridden product field, for example `published`."}}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"id":{"type":"string","description":"Unique resource identifier."},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."},"productMedia":{"type":"array","uniqueItems":false,"description":"Media files attached to the product.","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"yrn":{"$ref":"#/components/schemas/YRN"},"contentType":{"type":"string"},"createdAt":{"type":"string"},"uploadLink":{"type":"string"},"url":{"type":"string"},"cloudinaryUrl":{"type":"string"},"uncommittedMedia":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"customAttributes":{"type":"object"}}}},"variantProductMetadataGet":{"type":"object","description":"Variant metadata response.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataGet"},{"$ref":"#/components/schemas/variantProductMetadataWithVersion"}]},"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"variantProductMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/variantProductMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document."}}}]}}}}
```

## The variantProductsArray object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"variantProductsArray":{"type":"array","description":"List of products of the VARIANT type.","items":{"$ref":"#/components/schemas/variantProductWithId"}},"variantProductWithId":{"type":"object","description":"Products of the VARIANT type.","allOf":[{"$ref":"#/components/schemas/variantProductCreation"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"},"yrn":{"$ref":"#/components/schemas/YRN"},"media":{"$ref":"#/components/schemas/productMedia"},"metadata":{"$ref":"#/components/schemas/variantProductMetadataGet"},"customerSegmentIds":{"type":"array","description":"Customer segment IDs assigned to the product.","items":{"type":"string"}},"categoryIds":{"type":"array","description":"Category IDs assigned to the product.","items":{"type":"string"}}}}]},"variantProductCreation":{"type":"object","description":"Creating products of the VARIANT type.","allOf":[{"$ref":"#/components/schemas/variantProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"metadata":{"$ref":"#/components/schemas/variantProductMetadataCore"},"parentVariantId":{"type":"string","description":"Identifier of the PARENT_VARIANT product."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"variantProduct":{"type":"object","description":"Products of the VARIANT type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"mixins":{"$ref":"#/components/schemas/productVariantMixins"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productVariantMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"variantProductMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"overridden":{"type":"array","description":"By default, all variant products inherit their attributes from the parent variant. You need to include the name of the attribute in the `metadata.overridden` field to be able to replace the attribute values. For the `mixins` and `metadata` fields, you can provide a nested path so that only a single mixin attribute is overridden, for example `mixins.productCustomAttributes.pricingMeasurePrice`. The same rule is valid for providing the mixins schema, as you can override just this particular field with the provided schema, for example metadata.mixins.yourCustomAttributes.\n\n**Note:**You cannot override the following attributes: `id`, `code`, `template`, `variantAttributes`.","items":{"type":"string","description":"Name of overridden product field, for example `published`."}}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"id":{"type":"string","description":"Unique resource identifier."},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."},"productMedia":{"type":"array","uniqueItems":false,"description":"Media files attached to the product.","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"yrn":{"$ref":"#/components/schemas/YRN"},"contentType":{"type":"string"},"createdAt":{"type":"string"},"uploadLink":{"type":"string"},"url":{"type":"string"},"cloudinaryUrl":{"type":"string"},"uncommittedMedia":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"customAttributes":{"type":"object"}}}},"variantProductMetadataGet":{"type":"object","description":"Variant metadata response.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataGet"},{"$ref":"#/components/schemas/variantProductMetadataWithVersion"}]},"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"variantProductMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/variantProductMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document."}}}]}}}}
```

## The variantProductUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"variantProductUpdate":{"type":"object","description":"Updating products of the VARIANT type.","allOf":[{"$ref":"#/components/schemas/variantProduct"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/variantProductMetadataWithVersion"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"},"parentVariantId":{"type":"string","description":"Identifier of the PARENT_VARIANT product. This property is taken into account only for insert operations."}}}]},"variantProduct":{"type":"object","description":"Products of the VARIANT type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"mixins":{"$ref":"#/components/schemas/productVariantMixins"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productVariantMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"variantProductMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/variantProductMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document."}}}]},"variantProductMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"overridden":{"type":"array","description":"By default, all variant products inherit their attributes from the parent variant. You need to include the name of the attribute in the `metadata.overridden` field to be able to replace the attribute values. For the `mixins` and `metadata` fields, you can provide a nested path so that only a single mixin attribute is overridden, for example `mixins.productCustomAttributes.pricingMeasurePrice`. The same rule is valid for providing the mixins schema, as you can override just this particular field with the provided schema, for example metadata.mixins.yourCustomAttributes.\n\n**Note:**You cannot override the following attributes: `id`, `code`, `template`, `variantAttributes`.","items":{"type":"string","description":"Name of overridden product field, for example `published`."}}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]}}}}
```

## The variantProductBulkUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"variantProductBulkUpdate":{"type":"object","description":"Updating products of the VARIANT type in bulk.","allOf":[{"$ref":"#/components/schemas/variantProductUpdate"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"}},"required":["id"]}]},"variantProductUpdate":{"type":"object","description":"Updating products of the VARIANT type.","allOf":[{"$ref":"#/components/schemas/variantProduct"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/variantProductMetadataWithVersion"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"},"parentVariantId":{"type":"string","description":"Identifier of the PARENT_VARIANT product. This property is taken into account only for insert operations."}}}]},"variantProduct":{"type":"object","description":"Products of the VARIANT type.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"mixins":{"$ref":"#/components/schemas/productVariantMixins"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productVariantMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"variantProductMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/variantProductMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document."}}}]},"variantProductMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"overridden":{"type":"array","description":"By default, all variant products inherit their attributes from the parent variant. You need to include the name of the attribute in the `metadata.overridden` field to be able to replace the attribute values. For the `mixins` and `metadata` fields, you can provide a nested path so that only a single mixin attribute is overridden, for example `mixins.productCustomAttributes.pricingMeasurePrice`. The same rule is valid for providing the mixins schema, as you can override just this particular field with the provided schema, for example metadata.mixins.yourCustomAttributes.\n\n**Note:**You cannot override the following attributes: `id`, `code`, `template`, `variantAttributes`.","items":{"type":"string","description":"Name of overridden product field, for example `published`."}}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"id":{"type":"string","description":"Unique resource identifier."}}}}
```

## The dynamicVariantAttributeValue object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantAttributeValue":{"type":"object","description":"The value part of a dynamic variant attribute. Holds the canonical qualifier used for matching, an optional localized display label, and an optional unit code for measurement attributes.\n","required":["type","qualifier"],"properties":{"type":{"type":"string","description":"Data type of the qualifier value.\n","enum":["STRING","NUMBER","DECIMAL","BOOLEAN"]},"qualifier":{"description":"The canonical value used for variant matching. The JSON type must match `type`: a string for `STRING`, a number for `NUMBER` or `DECIMAL`, or a boolean for `BOOLEAN`.\n","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"name":{"$ref":"#/components/schemas/localizedValue"},"unit":{"type":"string","description":"Optional unit code for measurement attributes (for example, `\"MMT\"` for millimetres, `\"PCE\"` for pieces). Unit translations are resolved by the frontend from a separate dictionary.\n"}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]}}}}
```

## The dynamicVariantAttribute object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantAttribute":{"type":"object","description":"A single dynamic variant attribute. Combines a localized display name for the attribute itself with a typed, optionally localized value.\n","required":["value"],"properties":{"name":{"$ref":"#/components/schemas/localizedValue"},"value":{"$ref":"#/components/schemas/dynamicVariantAttributeValue"}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"dynamicVariantAttributeValue":{"type":"object","description":"The value part of a dynamic variant attribute. Holds the canonical qualifier used for matching, an optional localized display label, and an optional unit code for measurement attributes.\n","required":["type","qualifier"],"properties":{"type":{"type":"string","description":"Data type of the qualifier value.\n","enum":["STRING","NUMBER","DECIMAL","BOOLEAN"]},"qualifier":{"description":"The canonical value used for variant matching. The JSON type must match `type`: a string for `STRING`, a number for `NUMBER` or `DECIMAL`, or a boolean for `BOOLEAN`.\n","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"name":{"$ref":"#/components/schemas/localizedValue"},"unit":{"type":"string","description":"Optional unit code for measurement attributes (for example, `\"MMT\"` for millimetres, `\"PCE\"` for pieces). Unit translations are resolved by the frontend from a separate dictionary.\n"}}}}}}
```

## The ownVariantAttributes object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"ownVariantAttributes":{"type":"object","description":"Map of variant attributes defined directly on this product. Keys are attribute identifiers (for example, `storageCapacity`). These are the attributes the caller can set by create/update requests. On responses they represent what is stored on this specific product.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}},"dynamicVariantAttribute":{"type":"object","description":"A single dynamic variant attribute. Combines a localized display name for the attribute itself with a typed, optionally localized value.\n","required":["value"],"properties":{"name":{"$ref":"#/components/schemas/localizedValue"},"value":{"$ref":"#/components/schemas/dynamicVariantAttributeValue"}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"dynamicVariantAttributeValue":{"type":"object","description":"The value part of a dynamic variant attribute. Holds the canonical qualifier used for matching, an optional localized display label, and an optional unit code for measurement attributes.\n","required":["type","qualifier"],"properties":{"type":{"type":"string","description":"Data type of the qualifier value.\n","enum":["STRING","NUMBER","DECIMAL","BOOLEAN"]},"qualifier":{"description":"The canonical value used for variant matching. The JSON type must match `type`: a string for `STRING`, a number for `NUMBER` or `DECIMAL`, or a boolean for `BOOLEAN`.\n","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"name":{"$ref":"#/components/schemas/localizedValue"},"unit":{"type":"string","description":"Optional unit code for measurement attributes (for example, `\"MMT\"` for millimetres, `\"PCE\"` for pieces). Unit translations are resolved by the frontend from a separate dictionary.\n"}}}}}}
```

## The inheritedVariantAttributes object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"inheritedVariantAttributes":{"type":"object","description":"Read-only map of variant attributes inherited from ancestor products in the hierarchy. These cannot be modified on this product — to change an inherited attribute, update the ancestor that owns it.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}},"dynamicVariantAttribute":{"type":"object","description":"A single dynamic variant attribute. Combines a localized display name for the attribute itself with a typed, optionally localized value.\n","required":["value"],"properties":{"name":{"$ref":"#/components/schemas/localizedValue"},"value":{"$ref":"#/components/schemas/dynamicVariantAttributeValue"}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"dynamicVariantAttributeValue":{"type":"object","description":"The value part of a dynamic variant attribute. Holds the canonical qualifier used for matching, an optional localized display label, and an optional unit code for measurement attributes.\n","required":["type","qualifier"],"properties":{"type":{"type":"string","description":"Data type of the qualifier value.\n","enum":["STRING","NUMBER","DECIMAL","BOOLEAN"]},"qualifier":{"description":"The canonical value used for variant matching. The JSON type must match `type`: a string for `STRING`, a number for `NUMBER` or `DECIMAL`, or a boolean for `BOOLEAN`.\n","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"name":{"$ref":"#/components/schemas/localizedValue"},"unit":{"type":"string","description":"Optional unit code for measurement attributes (for example, `\"MMT\"` for millimetres, `\"PCE\"` for pieces). Unit translations are resolved by the frontend from a separate dictionary.\n"}}}}}}
```

## The variantMapEntry object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"variantMapEntry":{"type":"object","description":"A single entry in the root product's `variants` map. In API responses the `variantAttributes` field contains **accumulated** attributes — the entry's own delta attributes merged with all ancestor attributes up the chain, so storefront clients receive a ready-to-use combination without additional API calls. The `published` flag is included only when the caller has the `product.product_read_unpublished` scope.\n","properties":{"version":{"type":"integer","description":"Version of the source variant product at the time of the last recalculation."},"code":{"type":"string","description":"Code of the source variant product."},"name":{"$ref":"#/components/schemas/localizedValue"},"parentVariantId":{"type":"string","description":"Identifier of the immediate parent product in the variant hierarchy."},"sellable":{"type":"boolean","description":"Indicates whether this variant can be sold directly."},"published":{"type":"boolean","description":"Publication state of this variant. Only included in responses when the caller has the `product.product_read_unpublished` scope; entries with `published: false` are otherwise omitted from the map.\n"},"dynamicVariantType":{"type":"string","description":"Optional label identifying the variant level or kind (for example, `\"H1_L1\"`)."},"variantAttributes":{"type":"object","description":"Accumulated variant attributes for this entry. For leaf variants this includes all ancestor attributes merged with the entry's own delta. Keys are attribute identifiers.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"dynamicVariantAttribute":{"type":"object","description":"A single dynamic variant attribute. Combines a localized display name for the attribute itself with a typed, optionally localized value.\n","required":["value"],"properties":{"name":{"$ref":"#/components/schemas/localizedValue"},"value":{"$ref":"#/components/schemas/dynamicVariantAttributeValue"}}},"dynamicVariantAttributeValue":{"type":"object","description":"The value part of a dynamic variant attribute. Holds the canonical qualifier used for matching, an optional localized display label, and an optional unit code for measurement attributes.\n","required":["type","qualifier"],"properties":{"type":{"type":"string","description":"Data type of the qualifier value.\n","enum":["STRING","NUMBER","DECIMAL","BOOLEAN"]},"qualifier":{"description":"The canonical value used for variant matching. The JSON type must match `type`: a string for `STRING`, a number for `NUMBER` or `DECIMAL`, or a boolean for `BOOLEAN`.\n","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"name":{"$ref":"#/components/schemas/localizedValue"},"unit":{"type":"string","description":"Optional unit code for measurement attributes (for example, `\"MMT\"` for millimetres, `\"PCE\"` for pieces). Unit translations are resolved by the frontend from a separate dictionary.\n"}}}}}}
```

## The variantsMap object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"variantsMap":{"type":"object","description":"Denormalized flat map of all descendant variants stored on the root product. Keys are variant product identifiers. In API responses each entry's `variantAttributes` contains accumulated attributes.\n","additionalProperties":{"$ref":"#/components/schemas/variantMapEntry"}},"variantMapEntry":{"type":"object","description":"A single entry in the root product's `variants` map. In API responses the `variantAttributes` field contains **accumulated** attributes — the entry's own delta attributes merged with all ancestor attributes up the chain, so storefront clients receive a ready-to-use combination without additional API calls. The `published` flag is included only when the caller has the `product.product_read_unpublished` scope.\n","properties":{"version":{"type":"integer","description":"Version of the source variant product at the time of the last recalculation."},"code":{"type":"string","description":"Code of the source variant product."},"name":{"$ref":"#/components/schemas/localizedValue"},"parentVariantId":{"type":"string","description":"Identifier of the immediate parent product in the variant hierarchy."},"sellable":{"type":"boolean","description":"Indicates whether this variant can be sold directly."},"published":{"type":"boolean","description":"Publication state of this variant. Only included in responses when the caller has the `product.product_read_unpublished` scope; entries with `published: false` are otherwise omitted from the map.\n"},"dynamicVariantType":{"type":"string","description":"Optional label identifying the variant level or kind (for example, `\"H1_L1\"`)."},"variantAttributes":{"type":"object","description":"Accumulated variant attributes for this entry. For leaf variants this includes all ancestor attributes merged with the entry's own delta. Keys are attribute identifiers.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"dynamicVariantAttribute":{"type":"object","description":"A single dynamic variant attribute. Combines a localized display name for the attribute itself with a typed, optionally localized value.\n","required":["value"],"properties":{"name":{"$ref":"#/components/schemas/localizedValue"},"value":{"$ref":"#/components/schemas/dynamicVariantAttributeValue"}}},"dynamicVariantAttributeValue":{"type":"object","description":"The value part of a dynamic variant attribute. Holds the canonical qualifier used for matching, an optional localized display label, and an optional unit code for measurement attributes.\n","required":["type","qualifier"],"properties":{"type":{"type":"string","description":"Data type of the qualifier value.\n","enum":["STRING","NUMBER","DECIMAL","BOOLEAN"]},"qualifier":{"description":"The canonical value used for variant matching. The JSON type must match `type`: a string for `STRING`, a number for `NUMBER` or `DECIMAL`, or a boolean for `BOOLEAN`.\n","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"name":{"$ref":"#/components/schemas/localizedValue"},"unit":{"type":"string","description":"Optional unit code for measurement attributes (for example, `\"MMT\"` for millimetres, `\"PCE\"` for pieces). Unit translations are resolved by the frontend from a separate dictionary.\n"}}}}}}
```

## The dynamicVariantInfo object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantInfo":{"type":"object","description":"Hierarchy integrity information populated when the variant tree has structural problems. Present only when an issue is detected.\n","properties":{"missingAncestorId":{"type":"string","description":"Identifier of an ancestor product that could not be found, indicating a broken hierarchy chain."},"cycleDetected":{"type":"boolean","description":"Indicates that a circular reference was detected in the `parentVariantId` chain."}}}}}}
```

## The dynamicVariantProductMetadataGet object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantProductMetadataGet":{"type":"object","description":"Metadata for GET responses on DYNAMIC_VARIANT products. Extends the standard product metadata with hierarchy integrity information.","allOf":[{"$ref":"#/components/schemas/productMetadataGet"},{"type":"object","properties":{"dynamicVariantInfo":{"$ref":"#/components/schemas/dynamicVariantInfo"}}}]},"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"dynamicVariantInfo":{"type":"object","description":"Hierarchy integrity information populated when the variant tree has structural problems. Present only when an issue is detected.\n","properties":{"missingAncestorId":{"type":"string","description":"Identifier of an ancestor product that could not be found, indicating a broken hierarchy chain."},"cycleDetected":{"type":"boolean","description":"Indicates that a circular reference was detected in the `parentVariantId` chain."}}}}}}
```

## The dynamicVariantProduct object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantProduct":{"type":"object","description":"Base schema for products of the DYNAMIC_VARIANT type.","allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"parentVariantId":{"type":"string","description":"Identifier of the immediate parent product in the variant hierarchy. Omit or leave empty for root-level dynamic variant products.\n"},"dynamicVariantType":{"type":"string","description":"Optional label identifying the variant level or kind within the hierarchy (for example, `\"H1_L1\"`). Used for display and filtering purposes.\n"},"sellable":{"type":"boolean","description":"Indicates whether this variant can be sold directly, if it's a leaf in the hierarchy that a customer can add to a cart. This value is **not inherited** from parent variants — it must be set explicitly on each product. Root products and intermediate-level variants are typically `false`. Leaf variants are typically `true`.\n"},"ownVariantAttributes":{"$ref":"#/components/schemas/ownVariantAttributes"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"ownVariantAttributes":{"type":"object","description":"Map of variant attributes defined directly on this product. Keys are attribute identifiers (for example, `storageCapacity`). These are the attributes the caller can set by create/update requests. On responses they represent what is stored on this specific product.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}},"dynamicVariantAttribute":{"type":"object","description":"A single dynamic variant attribute. Combines a localized display name for the attribute itself with a typed, optionally localized value.\n","required":["value"],"properties":{"name":{"$ref":"#/components/schemas/localizedValue"},"value":{"$ref":"#/components/schemas/dynamicVariantAttributeValue"}}},"dynamicVariantAttributeValue":{"type":"object","description":"The value part of a dynamic variant attribute. Holds the canonical qualifier used for matching, an optional localized display label, and an optional unit code for measurement attributes.\n","required":["type","qualifier"],"properties":{"type":{"type":"string","description":"Data type of the qualifier value.\n","enum":["STRING","NUMBER","DECIMAL","BOOLEAN"]},"qualifier":{"description":"The canonical value used for variant matching. The JSON type must match `type`: a string for `STRING`, a number for `NUMBER` or `DECIMAL`, or a boolean for `BOOLEAN`.\n","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"name":{"$ref":"#/components/schemas/localizedValue"},"unit":{"type":"string","description":"Optional unit code for measurement attributes (for example, `\"MMT\"` for millimetres, `\"PCE\"` for pieces). Unit translations are resolved by the frontend from a separate dictionary.\n"}}}}}}
```

## The dynamicVariantProductCreation object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantProductCreation":{"type":"object","description":"Creating products of the DYNAMIC_VARIANT type.","allOf":[{"$ref":"#/components/schemas/dynamicVariantProduct"},{"type":"object","properties":{"id":{"type":"string","maxLength":32,"description":"Custom product identifier. If not provided, it is automatically generated."},"productType":{"$ref":"#/components/schemas/productType"}}}]},"dynamicVariantProduct":{"type":"object","description":"Base schema for products of the DYNAMIC_VARIANT type.","allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"parentVariantId":{"type":"string","description":"Identifier of the immediate parent product in the variant hierarchy. Omit or leave empty for root-level dynamic variant products.\n"},"dynamicVariantType":{"type":"string","description":"Optional label identifying the variant level or kind within the hierarchy (for example, `\"H1_L1\"`). Used for display and filtering purposes.\n"},"sellable":{"type":"boolean","description":"Indicates whether this variant can be sold directly, if it's a leaf in the hierarchy that a customer can add to a cart. This value is **not inherited** from parent variants — it must be set explicitly on each product. Root products and intermediate-level variants are typically `false`. Leaf variants are typically `true`.\n"},"ownVariantAttributes":{"$ref":"#/components/schemas/ownVariantAttributes"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"ownVariantAttributes":{"type":"object","description":"Map of variant attributes defined directly on this product. Keys are attribute identifiers (for example, `storageCapacity`). These are the attributes the caller can set by create/update requests. On responses they represent what is stored on this specific product.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}},"dynamicVariantAttribute":{"type":"object","description":"A single dynamic variant attribute. Combines a localized display name for the attribute itself with a typed, optionally localized value.\n","required":["value"],"properties":{"name":{"$ref":"#/components/schemas/localizedValue"},"value":{"$ref":"#/components/schemas/dynamicVariantAttributeValue"}}},"dynamicVariantAttributeValue":{"type":"object","description":"The value part of a dynamic variant attribute. Holds the canonical qualifier used for matching, an optional localized display label, and an optional unit code for measurement attributes.\n","required":["type","qualifier"],"properties":{"type":{"type":"string","description":"Data type of the qualifier value.\n","enum":["STRING","NUMBER","DECIMAL","BOOLEAN"]},"qualifier":{"description":"The canonical value used for variant matching. The JSON type must match `type`: a string for `STRING`, a number for `NUMBER` or `DECIMAL`, or a boolean for `BOOLEAN`.\n","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"name":{"$ref":"#/components/schemas/localizedValue"},"unit":{"type":"string","description":"Optional unit code for measurement attributes (for example, `\"MMT\"` for millimetres, `\"PCE\"` for pieces). Unit translations are resolved by the frontend from a separate dictionary.\n"}}},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]}}}}
```

## The dynamicVariantProductWithId object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantProductWithId":{"type":"object","description":"Response schema for products of the DYNAMIC_VARIANT type.\n\n- **`sellable`** — not inherited from parents; must be set explicitly on each product. Root and intermediate variants are typically `false`; leaf variants are typically `true`.\n- **Root products** include a `variants` map containing all descendants with accumulated attributes.\n- **Child products** include `ownVariantAttributes` (attributes defined on this product) and `inheritedVariantAttributes` (read-only, merged from ancestors).\n- `parentVariantPath` is an ordered array of ancestor IDs from direct parent (index 0) to root (last index). Empty for root products.\n- `metadata.dynamicVariantInfo` is present only when a hierarchy integrity issue is detected.\n","properties":{"id":{"$ref":"#/components/schemas/id"},"yrn":{"$ref":"#/components/schemas/YRN"},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"name":{"$ref":"#/components/schemas/localizedValue"},"description":{"$ref":"#/components/schemas/localizedValue"},"productType":{"$ref":"#/components/schemas/productType"},"published":{"$ref":"#/components/schemas/published"},"sellable":{"type":"boolean","description":"Indicates whether this variant can be sold directly (i.e. it is a leaf in the hierarchy that a customer can add to a cart). This value is **not inherited** from parent variants — it must be set explicitly on each product. Root products and intermediate-level variants are typically `false`; leaf variants are typically `true`.\n"},"parentVariantId":{"type":"string","description":"Identifier of the immediate parent product in the variant hierarchy. Absent for root-level products."},"parentVariantPath":{"type":"array","description":"Ordered array of ancestor product identifiers, from the direct parent (index 0) to the root (last index). Empty for root-level products.\n","items":{"type":"string"}},"dynamicVariantType":{"type":"string","description":"Optional label identifying the variant level or kind within the hierarchy (for example, `\"H1_L1\"`)."},"ownVariantAttributes":{"$ref":"#/components/schemas/ownVariantAttributes"},"inheritedVariantAttributes":{"$ref":"#/components/schemas/inheritedVariantAttributes"},"variants":{"$ref":"#/components/schemas/variantsMap"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"vendor":{"$ref":"#/components/schemas/vendor"},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}},"categoryIds":{"type":"array","description":"Category IDs assigned to the product.","items":{"type":"string"}},"customerSegmentIds":{"type":"array","description":"Customer segment IDs assigned to the product.","items":{"type":"string"}},"relatedItems":{"type":"array","description":"List of items in a relationship with this product.","items":{"$ref":"#/components/schemas/relatedItem"}},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging."},"mixins":{"$ref":"#/components/schemas/productMixins"},"media":{"$ref":"#/components/schemas/productMedia"},"metadata":{"$ref":"#/components/schemas/dynamicVariantProductMetadataGet"}},"required":["id","code","name","productType"]},"id":{"type":"string","description":"Unique resource identifier."},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"ownVariantAttributes":{"type":"object","description":"Map of variant attributes defined directly on this product. Keys are attribute identifiers (for example, `storageCapacity`). These are the attributes the caller can set by create/update requests. On responses they represent what is stored on this specific product.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}},"dynamicVariantAttribute":{"type":"object","description":"A single dynamic variant attribute. Combines a localized display name for the attribute itself with a typed, optionally localized value.\n","required":["value"],"properties":{"name":{"$ref":"#/components/schemas/localizedValue"},"value":{"$ref":"#/components/schemas/dynamicVariantAttributeValue"}}},"dynamicVariantAttributeValue":{"type":"object","description":"The value part of a dynamic variant attribute. Holds the canonical qualifier used for matching, an optional localized display label, and an optional unit code for measurement attributes.\n","required":["type","qualifier"],"properties":{"type":{"type":"string","description":"Data type of the qualifier value.\n","enum":["STRING","NUMBER","DECIMAL","BOOLEAN"]},"qualifier":{"description":"The canonical value used for variant matching. The JSON type must match `type`: a string for `STRING`, a number for `NUMBER` or `DECIMAL`, or a boolean for `BOOLEAN`.\n","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"name":{"$ref":"#/components/schemas/localizedValue"},"unit":{"type":"string","description":"Optional unit code for measurement attributes (for example, `\"MMT\"` for millimetres, `\"PCE\"` for pieces). Unit translations are resolved by the frontend from a separate dictionary.\n"}}},"inheritedVariantAttributes":{"type":"object","description":"Read-only map of variant attributes inherited from ancestor products in the hierarchy. These cannot be modified on this product — to change an inherited attribute, update the ancestor that owns it.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}},"variantsMap":{"type":"object","description":"Denormalized flat map of all descendant variants stored on the root product. Keys are variant product identifiers. In API responses each entry's `variantAttributes` contains accumulated attributes.\n","additionalProperties":{"$ref":"#/components/schemas/variantMapEntry"}},"variantMapEntry":{"type":"object","description":"A single entry in the root product's `variants` map. In API responses the `variantAttributes` field contains **accumulated** attributes — the entry's own delta attributes merged with all ancestor attributes up the chain, so storefront clients receive a ready-to-use combination without additional API calls. The `published` flag is included only when the caller has the `product.product_read_unpublished` scope.\n","properties":{"version":{"type":"integer","description":"Version of the source variant product at the time of the last recalculation."},"code":{"type":"string","description":"Code of the source variant product."},"name":{"$ref":"#/components/schemas/localizedValue"},"parentVariantId":{"type":"string","description":"Identifier of the immediate parent product in the variant hierarchy."},"sellable":{"type":"boolean","description":"Indicates whether this variant can be sold directly."},"published":{"type":"boolean","description":"Publication state of this variant. Only included in responses when the caller has the `product.product_read_unpublished` scope; entries with `published: false` are otherwise omitted from the map.\n"},"dynamicVariantType":{"type":"string","description":"Optional label identifying the variant level or kind (for example, `\"H1_L1\"`)."},"variantAttributes":{"type":"object","description":"Accumulated variant attributes for this entry. For leaf variants this includes all ancestor attributes merged with the entry's own delta. Keys are attribute identifiers.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}}}},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"productMedia":{"type":"array","uniqueItems":false,"description":"Media files attached to the product.","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"yrn":{"$ref":"#/components/schemas/YRN"},"contentType":{"type":"string"},"createdAt":{"type":"string"},"uploadLink":{"type":"string"},"url":{"type":"string"},"cloudinaryUrl":{"type":"string"},"uncommittedMedia":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"customAttributes":{"type":"object"}}}},"dynamicVariantProductMetadataGet":{"type":"object","description":"Metadata for GET responses on DYNAMIC_VARIANT products. Extends the standard product metadata with hierarchy integrity information.","allOf":[{"$ref":"#/components/schemas/productMetadataGet"},{"type":"object","properties":{"dynamicVariantInfo":{"$ref":"#/components/schemas/dynamicVariantInfo"}}}]},"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"dynamicVariantInfo":{"type":"object","description":"Hierarchy integrity information populated when the variant tree has structural problems. Present only when an issue is detected.\n","properties":{"missingAncestorId":{"type":"string","description":"Identifier of an ancestor product that could not be found, indicating a broken hierarchy chain."},"cycleDetected":{"type":"boolean","description":"Indicates that a circular reference was detected in the `parentVariantId` chain."}}}}}}
```

## The dynamicVariantProductsArray object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantProductsArray":{"type":"array","description":"List of products of the DYNAMIC_VARIANT type.","items":{"$ref":"#/components/schemas/dynamicVariantProductWithId"}},"dynamicVariantProductWithId":{"type":"object","description":"Response schema for products of the DYNAMIC_VARIANT type.\n\n- **`sellable`** — not inherited from parents; must be set explicitly on each product. Root and intermediate variants are typically `false`; leaf variants are typically `true`.\n- **Root products** include a `variants` map containing all descendants with accumulated attributes.\n- **Child products** include `ownVariantAttributes` (attributes defined on this product) and `inheritedVariantAttributes` (read-only, merged from ancestors).\n- `parentVariantPath` is an ordered array of ancestor IDs from direct parent (index 0) to root (last index). Empty for root products.\n- `metadata.dynamicVariantInfo` is present only when a hierarchy integrity issue is detected.\n","properties":{"id":{"$ref":"#/components/schemas/id"},"yrn":{"$ref":"#/components/schemas/YRN"},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"name":{"$ref":"#/components/schemas/localizedValue"},"description":{"$ref":"#/components/schemas/localizedValue"},"productType":{"$ref":"#/components/schemas/productType"},"published":{"$ref":"#/components/schemas/published"},"sellable":{"type":"boolean","description":"Indicates whether this variant can be sold directly (i.e. it is a leaf in the hierarchy that a customer can add to a cart). This value is **not inherited** from parent variants — it must be set explicitly on each product. Root products and intermediate-level variants are typically `false`; leaf variants are typically `true`.\n"},"parentVariantId":{"type":"string","description":"Identifier of the immediate parent product in the variant hierarchy. Absent for root-level products."},"parentVariantPath":{"type":"array","description":"Ordered array of ancestor product identifiers, from the direct parent (index 0) to the root (last index). Empty for root-level products.\n","items":{"type":"string"}},"dynamicVariantType":{"type":"string","description":"Optional label identifying the variant level or kind within the hierarchy (for example, `\"H1_L1\"`)."},"ownVariantAttributes":{"$ref":"#/components/schemas/ownVariantAttributes"},"inheritedVariantAttributes":{"$ref":"#/components/schemas/inheritedVariantAttributes"},"variants":{"$ref":"#/components/schemas/variantsMap"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"vendor":{"$ref":"#/components/schemas/vendor"},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}},"categoryIds":{"type":"array","description":"Category IDs assigned to the product.","items":{"type":"string"}},"customerSegmentIds":{"type":"array","description":"Customer segment IDs assigned to the product.","items":{"type":"string"}},"relatedItems":{"type":"array","description":"List of items in a relationship with this product.","items":{"$ref":"#/components/schemas/relatedItem"}},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging."},"mixins":{"$ref":"#/components/schemas/productMixins"},"media":{"$ref":"#/components/schemas/productMedia"},"metadata":{"$ref":"#/components/schemas/dynamicVariantProductMetadataGet"}},"required":["id","code","name","productType"]},"id":{"type":"string","description":"Unique resource identifier."},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"productType":{"type":"string","description":"Indicates the product type, which is immutable. Once the product type is set, it cannot be updated.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"ownVariantAttributes":{"type":"object","description":"Map of variant attributes defined directly on this product. Keys are attribute identifiers (for example, `storageCapacity`). These are the attributes the caller can set by create/update requests. On responses they represent what is stored on this specific product.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}},"dynamicVariantAttribute":{"type":"object","description":"A single dynamic variant attribute. Combines a localized display name for the attribute itself with a typed, optionally localized value.\n","required":["value"],"properties":{"name":{"$ref":"#/components/schemas/localizedValue"},"value":{"$ref":"#/components/schemas/dynamicVariantAttributeValue"}}},"dynamicVariantAttributeValue":{"type":"object","description":"The value part of a dynamic variant attribute. Holds the canonical qualifier used for matching, an optional localized display label, and an optional unit code for measurement attributes.\n","required":["type","qualifier"],"properties":{"type":{"type":"string","description":"Data type of the qualifier value.\n","enum":["STRING","NUMBER","DECIMAL","BOOLEAN"]},"qualifier":{"description":"The canonical value used for variant matching. The JSON type must match `type`: a string for `STRING`, a number for `NUMBER` or `DECIMAL`, or a boolean for `BOOLEAN`.\n","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"name":{"$ref":"#/components/schemas/localizedValue"},"unit":{"type":"string","description":"Optional unit code for measurement attributes (for example, `\"MMT\"` for millimetres, `\"PCE\"` for pieces). Unit translations are resolved by the frontend from a separate dictionary.\n"}}},"inheritedVariantAttributes":{"type":"object","description":"Read-only map of variant attributes inherited from ancestor products in the hierarchy. These cannot be modified on this product — to change an inherited attribute, update the ancestor that owns it.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}},"variantsMap":{"type":"object","description":"Denormalized flat map of all descendant variants stored on the root product. Keys are variant product identifiers. In API responses each entry's `variantAttributes` contains accumulated attributes.\n","additionalProperties":{"$ref":"#/components/schemas/variantMapEntry"}},"variantMapEntry":{"type":"object","description":"A single entry in the root product's `variants` map. In API responses the `variantAttributes` field contains **accumulated** attributes — the entry's own delta attributes merged with all ancestor attributes up the chain, so storefront clients receive a ready-to-use combination without additional API calls. The `published` flag is included only when the caller has the `product.product_read_unpublished` scope.\n","properties":{"version":{"type":"integer","description":"Version of the source variant product at the time of the last recalculation."},"code":{"type":"string","description":"Code of the source variant product."},"name":{"$ref":"#/components/schemas/localizedValue"},"parentVariantId":{"type":"string","description":"Identifier of the immediate parent product in the variant hierarchy."},"sellable":{"type":"boolean","description":"Indicates whether this variant can be sold directly."},"published":{"type":"boolean","description":"Publication state of this variant. Only included in responses when the caller has the `product.product_read_unpublished` scope; entries with `published: false` are otherwise omitted from the map.\n"},"dynamicVariantType":{"type":"string","description":"Optional label identifying the variant level or kind (for example, `\"H1_L1\"`)."},"variantAttributes":{"type":"object","description":"Accumulated variant attributes for this entry. For leaf variants this includes all ancestor attributes merged with the entry's own delta. Keys are attribute identifiers.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}}}},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"productMedia":{"type":"array","uniqueItems":false,"description":"Media files attached to the product.","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"yrn":{"$ref":"#/components/schemas/YRN"},"contentType":{"type":"string"},"createdAt":{"type":"string"},"uploadLink":{"type":"string"},"url":{"type":"string"},"cloudinaryUrl":{"type":"string"},"uncommittedMedia":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"customAttributes":{"type":"object"}}}},"dynamicVariantProductMetadataGet":{"type":"object","description":"Metadata for GET responses on DYNAMIC_VARIANT products. Extends the standard product metadata with hierarchy integrity information.","allOf":[{"$ref":"#/components/schemas/productMetadataGet"},{"type":"object","properties":{"dynamicVariantInfo":{"$ref":"#/components/schemas/dynamicVariantInfo"}}}]},"productMetadataGet":{"type":"object","description":"Metadata for GET requests.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataWithVersion"},{"type":"object","properties":{"classificationMixins":{"type":"array","description":"List of mixin schemas used for classification.","items":{"type":"object","description":"Mixin schema.","properties":{"name":{"type":"string","description":"Name of the mixin","pattern":"^[a-zA-Z0-9_]\\S*$"},"mixinPath":{"type":"string","description":"The mixins path that should be used when defining attributes on a product. It's built based on the following pattern - `class_<sourceCategory.code>_<name>`."},"schemaUrl":{"type":"string","description":"URL of the mixin schema defined on the category level.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"usedSchemaUrl":{"type":"string","description":"If given mixin has been already used in the product, then this field contains the URL of the used mixin schema.","pattern":"^https?://[^\\s/$.?#].\\S*$"},"obsoleteSchemaUrlUsed":{"type":"boolean","description":"Indicates whether the used mixin schema is obsolete - `usedSchemaUrl` differs from `schemaUrl`."},"required":{"type":"boolean","description":"Indicates whether the mixin is required."},"sourceCategoryId":{"type":"string","description":"Unique identifier of the category from which the mixin comes from. Can be this category ID or one of the parent categories IDs."}}}},"createdAt":{"type":"string","description":"Creation date in the ISO 8601 standard."},"modifiedAt":{"type":"string","description":"Modification date in the ISO 8601 standard."}}}]},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"dynamicVariantInfo":{"type":"object","description":"Hierarchy integrity information populated when the variant tree has structural problems. Present only when an issue is detected.\n","properties":{"missingAncestorId":{"type":"string","description":"Identifier of an ancestor product that could not be found, indicating a broken hierarchy chain."},"cycleDetected":{"type":"boolean","description":"Indicates that a circular reference was detected in the `parentVariantId` chain."}}}}}}
```

## The dynamicVariantProductUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantProductUpdate":{"type":"object","description":"Updating products of the DYNAMIC_VARIANT type.","allOf":[{"$ref":"#/components/schemas/dynamicVariantProduct"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataWithVersion"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"}}}]},"dynamicVariantProduct":{"type":"object","description":"Base schema for products of the DYNAMIC_VARIANT type.","allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"parentVariantId":{"type":"string","description":"Identifier of the immediate parent product in the variant hierarchy. Omit or leave empty for root-level dynamic variant products.\n"},"dynamicVariantType":{"type":"string","description":"Optional label identifying the variant level or kind within the hierarchy (for example, `\"H1_L1\"`). Used for display and filtering purposes.\n"},"sellable":{"type":"boolean","description":"Indicates whether this variant can be sold directly, if it's a leaf in the hierarchy that a customer can add to a cart. This value is **not inherited** from parent variants — it must be set explicitly on each product. Root products and intermediate-level variants are typically `false`. Leaf variants are typically `true`.\n"},"ownVariantAttributes":{"$ref":"#/components/schemas/ownVariantAttributes"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"ownVariantAttributes":{"type":"object","description":"Map of variant attributes defined directly on this product. Keys are attribute identifiers (for example, `storageCapacity`). These are the attributes the caller can set by create/update requests. On responses they represent what is stored on this specific product.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}},"dynamicVariantAttribute":{"type":"object","description":"A single dynamic variant attribute. Combines a localized display name for the attribute itself with a typed, optionally localized value.\n","required":["value"],"properties":{"name":{"$ref":"#/components/schemas/localizedValue"},"value":{"$ref":"#/components/schemas/dynamicVariantAttributeValue"}}},"dynamicVariantAttributeValue":{"type":"object","description":"The value part of a dynamic variant attribute. Holds the canonical qualifier used for matching, an optional localized display label, and an optional unit code for measurement attributes.\n","required":["type","qualifier"],"properties":{"type":{"type":"string","description":"Data type of the qualifier value.\n","enum":["STRING","NUMBER","DECIMAL","BOOLEAN"]},"qualifier":{"description":"The canonical value used for variant matching. The JSON type must match `type`: a string for `STRING`, a number for `NUMBER` or `DECIMAL`, or a boolean for `BOOLEAN`.\n","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"name":{"$ref":"#/components/schemas/localizedValue"},"unit":{"type":"string","description":"Optional unit code for measurement attributes (for example, `\"MMT\"` for millimetres, `\"PCE\"` for pieces). Unit translations are resolved by the frontend from a separate dictionary.\n"}}},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]}}}}
```

## The dynamicVariantProductBulkUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantProductBulkUpdate":{"type":"object","description":"Updating products of the DYNAMIC_VARIANT type in bulk.","allOf":[{"$ref":"#/components/schemas/dynamicVariantProductUpdate"},{"type":"object","properties":{"id":{"$ref":"#/components/schemas/id"}},"required":["id"]}]},"dynamicVariantProductUpdate":{"type":"object","description":"Updating products of the DYNAMIC_VARIANT type.","allOf":[{"$ref":"#/components/schemas/dynamicVariantProduct"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataWithVersion"},"productType":{"$ref":"#/components/schemas/productTypeUpdate"}}}]},"dynamicVariantProduct":{"type":"object","description":"Base schema for products of the DYNAMIC_VARIANT type.","allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/productMetadataCore"},"parentVariantId":{"type":"string","description":"Identifier of the immediate parent product in the variant hierarchy. Omit or leave empty for root-level dynamic variant products.\n"},"dynamicVariantType":{"type":"string","description":"Optional label identifying the variant level or kind within the hierarchy (for example, `\"H1_L1\"`). Used for display and filtering purposes.\n"},"sellable":{"type":"boolean","description":"Indicates whether this variant can be sold directly, if it's a leaf in the hierarchy that a customer can add to a cart. This value is **not inherited** from parent variants — it must be set explicitly on each product. Root products and intermediate-level variants are typically `false`. Leaf variants are typically `true`.\n"},"ownVariantAttributes":{"$ref":"#/components/schemas/ownVariantAttributes"}},"required":["name","code"]}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}},"ownVariantAttributes":{"type":"object","description":"Map of variant attributes defined directly on this product. Keys are attribute identifiers (for example, `storageCapacity`). These are the attributes the caller can set by create/update requests. On responses they represent what is stored on this specific product.\n","additionalProperties":{"$ref":"#/components/schemas/dynamicVariantAttribute"}},"dynamicVariantAttribute":{"type":"object","description":"A single dynamic variant attribute. Combines a localized display name for the attribute itself with a typed, optionally localized value.\n","required":["value"],"properties":{"name":{"$ref":"#/components/schemas/localizedValue"},"value":{"$ref":"#/components/schemas/dynamicVariantAttributeValue"}}},"dynamicVariantAttributeValue":{"type":"object","description":"The value part of a dynamic variant attribute. Holds the canonical qualifier used for matching, an optional localized display label, and an optional unit code for measurement attributes.\n","required":["type","qualifier"],"properties":{"type":{"type":"string","description":"Data type of the qualifier value.\n","enum":["STRING","NUMBER","DECIMAL","BOOLEAN"]},"qualifier":{"description":"The canonical value used for variant matching. The JSON type must match `type`: a string for `STRING`, a number for `NUMBER` or `DECIMAL`, or a boolean for `BOOLEAN`.\n","oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"name":{"$ref":"#/components/schemas/localizedValue"},"unit":{"type":"string","description":"Optional unit code for measurement attributes (for example, `\"MMT\"` for millimetres, `\"PCE\"` for pieces). Unit translations are resolved by the frontend from a separate dictionary.\n"}}},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productTypeUpdate":{"type":"string","description":"Indicates the product type, which is immutable. This property is taken into account only for insert operations.\n","default":"BASIC","enum":["BASIC","BUNDLE","PARENT_VARIANT","VARIANT","DYNAMIC_VARIANT"]},"id":{"type":"string","description":"Unique resource identifier."}}}}
```

## The dynamicVariantRecalculationRequest object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantRecalculationRequest":{"type":"object","description":"Request body for triggering dynamic variant recalculation. Accepts up to 1000 product IDs at any level of the hierarchy — the system resolves the root for each ID automatically. Intended to be called after a batch of products has been fully ingested, not per individual product write.\n","required":["productIds"],"properties":{"productIds":{"type":"array","description":"List of product IDs (variants at any hierarchy level) for which recalculation should be triggered. The system groups IDs by their root product and creates one job per unique root.\n","minItems":1,"maxItems":1000,"items":{"type":"string"}}}}}}}
```

## The dynamicVariantRecalculationJobStatus object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantRecalculationJobStatus":{"type":"string","description":"Current status of a dynamic variant recalculation job.","enum":["PENDING","PROCESSING","FINISHED","FAILED","FAILED_PERMANENT"]}}}}
```

## The dynamicVariantRecalculationJobResponse object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantRecalculationJobResponse":{"type":"object","description":"Represents a single dynamic variant recalculation job. One job is created per unique root product. Jobs remain queryable until automatically removed approximately 30 days after reaching a terminal state.\n","properties":{"id":{"type":"string","description":"Unique identifier of the recalculation job."},"parentRoot":{"type":"string","description":"Identifier of the root product whose variant tree is being recalculated."},"requestedByIds":{"type":"array","description":"List of product IDs that were submitted in the recalculation request and resolved to this root.","items":{"type":"string"}},"status":{"$ref":"#/components/schemas/dynamicVariantRecalculationJobStatus"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the job was created."},"processingStartedAt":{"type":"string","format":"date-time","description":"Timestamp when a subscriber picked up the job and started processing. Null while the job is still PENDING."},"finishedAt":{"type":"string","format":"date-time","description":"Timestamp when the job reached a terminal state (FINISHED, FAILED, or FAILED_PERMANENT)."},"error":{"type":"string","description":"Error message if the job failed. Null for successful jobs."},"attempts":{"type":"integer","description":"Number of processing attempts made for this job. Incremented on each delivery from the pub/sub subscription."}}},"dynamicVariantRecalculationJobStatus":{"type":"string","description":"Current status of a dynamic variant recalculation job.","enum":["PENDING","PROCESSING","FINISHED","FAILED","FAILED_PERMANENT"]}}}}
```

## The dynamicVariantRecalculationResponse object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"dynamicVariantRecalculationResponse":{"type":"object","description":"Response returned when recalculation is triggered. Contains one job per unique root product resolved from the submitted IDs, plus any IDs that were skipped (for example, because a job for that root is already PENDING or PROCESSING).\n","properties":{"jobs":{"type":"array","description":"List of recalculation jobs created or referenced for each unique root product.","items":{"$ref":"#/components/schemas/dynamicVariantRecalculationJobResponse"}},"skippedProductIds":{"type":"array","description":"Product IDs that were not processed because a recalculation job for their root is already active (PENDING or PROCESSING). The existing job ID is available in the `jobs` list.\n","items":{"type":"string"}}}},"dynamicVariantRecalculationJobResponse":{"type":"object","description":"Represents a single dynamic variant recalculation job. One job is created per unique root product. Jobs remain queryable until automatically removed approximately 30 days after reaching a terminal state.\n","properties":{"id":{"type":"string","description":"Unique identifier of the recalculation job."},"parentRoot":{"type":"string","description":"Identifier of the root product whose variant tree is being recalculated."},"requestedByIds":{"type":"array","description":"List of product IDs that were submitted in the recalculation request and resolved to this root.","items":{"type":"string"}},"status":{"$ref":"#/components/schemas/dynamicVariantRecalculationJobStatus"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the job was created."},"processingStartedAt":{"type":"string","format":"date-time","description":"Timestamp when a subscriber picked up the job and started processing. Null while the job is still PENDING."},"finishedAt":{"type":"string","format":"date-time","description":"Timestamp when the job reached a terminal state (FINISHED, FAILED, or FAILED_PERMANENT)."},"error":{"type":"string","description":"Error message if the job failed. Null for successful jobs."},"attempts":{"type":"integer","description":"Number of processing attempts made for this job. Incremented on each delivery from the pub/sub subscription."}}},"dynamicVariantRecalculationJobStatus":{"type":"string","description":"Current status of a dynamic variant recalculation job.","enum":["PENDING","PROCESSING","FINISHED","FAILED","FAILED_PERMANENT"]}}}}
```

## The productPartialUpdate object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"productPartialUpdate":{"type":"object","description":"Partially updating a product.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productCore"},{"type":"object","properties":{"template":{"$ref":"#/components/schemas/template"},"bundledProducts":{"$ref":"#/components/schemas/bundledProducts"},"variantAttributes":{"$ref":"#/components/schemas/variantAttributes"},"metadata":{"$ref":"#/components/schemas/productMetadataWithVersion"}}}]},"productCore":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/localizedValue","description":"Product name."},"code":{"type":"string","minLength":1,"description":"Unique product identifier, defined by the user."},"description":{"$ref":"#/components/schemas/localizedValue","description":"Product description."},"vendor":{"$ref":"#/components/schemas/vendor"},"taxClasses":{"$ref":"#/components/schemas/taxClasses"},"published":{"$ref":"#/components/schemas/published"},"weightDependent":{"type":"boolean","description":"Mark the product as weight-dependent if the line item price could change after packaging, as this is necessary to ensure that credit card payments can be authorized."},"mixins":{"$ref":"#/components/schemas/productMixins"},"relatedItems":{"description":"List of items in a relationship with the main product. Assuming that in the system the following relation types are defined: `ACCESSORY` and `CONSUMABLE`, the two products: `Printer` and `Ink` exist, then the `Ink` product can be used as a related item with type `CONSUMABLE` for the Printer product.\nIn order to find all printers for which the ink is defined as a `CONSUMABLE` then `q-param` can be used:\n`products?q=relatedItems.type:CONSUMABLE relatedItems.refId:Ink_Id`\n","type":"array","items":{"$ref":"#/components/schemas/relatedItem"}},"brandId":{"type":"string","description":"ID of brand."},"brand":{"$ref":"#/components/schemas/brand"},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/label"}}}},"localizedValue":{"description":"Localized value which can have different structure which depends on provided `Content-Language` header.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]},"taxClasses":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of key-value pairs that associates tax classes with locations (countries). The key of the map should be specified as the existing location/country identifier (see the country-service). The value of the map entry should contain a tax class code (see the tax-service).\nInformation about the association is required for price matching mechanism (see the price-service#MatchPrice)."},"published":{"type":"boolean","description":"Flag indicating whether the product has been published or not.","default":false},"productMixins":{"type":"object","description":"Mixins request.","additionalProperties":true},"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]},"brand":{"type":"object","description":"Brand data expanded from `brandId`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"localizedName":{"type":"object","additionalProperties":{"type":"string"}},"localizedDescription":{"type":"object","additionalProperties":{"type":"string"}},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"}}},"label":{"type":"object","description":"Label data expanded from `labelIds`.","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"$ref":"#/components/schemas/localizedValue"},"image":{"type":"string","format":"uri"},"cloudinaryUrl":{"type":"string","format":"uri"},"mediaId":{"type":"string"},"overlay":{"$ref":"#/components/schemas/labelOverlay"}}},"labelOverlay":{"type":"object","description":"Overlay metadata for a label.","additionalProperties":false,"properties":{"isTrue":{"type":"boolean"},"position":{"type":"number"}}},"template":{"type":"object","description":"Indicates the template that has been used during the product creation. After assigning a template to the product, the new attributes can be defined under the `productTemplateAttributes` key in the `mixins` field. In case of variant attributes, the attributes should be defined under `productVariantAttributes`. The attributes are then validated in accordance with their definition in the template. \n\n**Note:** The template with defined variant attributes can be used only in PARENT_VARIANT and VARIANT types of product.\n","properties":{"id":{"type":"string","description":"Identifier of the product template."},"version":{"type":"string","description":"Product template version."}},"required":["id","version"]},"bundledProducts":{"type":"array","description":"List of bundled products","items":{"type":"object","properties":{"productId":{"type":"string","description":"Identifier of the bundled product."},"amount":{"type":"integer","description":"Amount of bundled products. Must be a positive number."}},"required":["productId","amount"]}},"variantAttributes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/values"},"description":"This field contains all information about attributes and their values that are used for creating variants. It is presented in the form of a map, where 'key' is the name of the attribute and 'value' is the list of values of that attribute. The attributes and their values are based on their definitions in the `template` element assigned to the parent variant. Each attribute defined in the product template is flagged as a `variantAttribute`. Only the attributes that have this flag set as `true` can be used in the `variantAttributes` field."},"values":{"type":"array","items":{"$ref":"#/components/schemas/value"}},"value":{"type":"object","properties":{"key":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"productMetadataWithVersion":{"type":"object","description":"Metadata with the version information.","additionalProperties":false,"allOf":[{"$ref":"#/components/schemas/productMetadataCore"},{"type":"object","properties":{"version":{"type":"number","description":"Version of the document"}}}]},"productMetadataCore":{"type":"object","description":"Metadata request.","additionalProperties":false,"properties":{"mixins":{"type":"object","description":"Links to the mixin schemas.","additionalProperties":true}}}}}}
```

## The vendor object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"vendor":{"type":"object","properties":{"id":{"type":"string","description":"An identifier of a vendor to whom the product belongs."},"name":{"type":"string","description":"Vendor name."}},"required":["id"]}}}}
```

## The searchProducts object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"searchProducts":{"type":"object","properties":{"q":{"type":"string","description":"A standard query parameter is used to search for specific values. \n\nSee: [Standard practises - Query parameter](https://developer.emporix.io/api-references/standard-practices/q-param)\n"}}}}}}
```

## The searchQuery object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"searchQuery":{"type":"object","additionalProperties":false,"properties":{"yrns":{"description":"List of YRNs. Each YRN identifies a separate product.","type":"array","items":{"$ref":"#/components/schemas/YRN"}},"params":{"description":"Optional query parameters.","type":"object","properties":{"product":{"description":"Optional query parameters for products.","type":"object","properties":{"fields":{"description":"Optional projection for product.","type":"array","items":{"type":"string"}}}}}}},"required":["yrns"]},"YRN":{"title":"YRN (attribute)","type":"string","description":"In YaaS, a global resource identifier is a Uniform Resource Name (URN) with a custom YaaS schema and is called a YaaS Resource Name, or YRN.\n\nIt is a unique identifier, which stores information about a resource, such as its type, ID or name of the tenant."}}}}
```

## The relatedItem object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"relatedItem":{"title":"relatedItem","type":"object","properties":{"refId":{"type":"string","description":"Identifier of a product which is in the relationship with the main product. The product identifier has to exist. "},"type":{"type":"string","description":"A relation type. The type has to exist in the system. All relation types are defined in configuration service under `relation_types` key."}},"required":["refId","type"]}}}}
```

## The bulkResponse object

```json
{"openapi":"3.0.0","info":{"title":"Product Service","version":"0.0.1"},"components":{"schemas":{"bulkResponse":{"title":"bulkResponse","type":"object","properties":{"index":{"type":"integer","description":"Index of the processed product, matching the price position in request body.\n"},"id":{"type":"string","description":"Product unique identifier."},"code":{"type":"integer","description":"HTTP Status Code."},"errorCode":{"type":"string","description":"Error specific errorCode."},"status":{"type":"string","description":"HTTP Status description."},"message":{"type":"string","description":"Error message."},"details":{"type":"array","description":"Error message details.","items":{"type":"string"}}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.emporix.io/api-references/api-guides/products-labels-and-brands/product-service/api-reference/models.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
