# 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"]}}}}
```

## 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"]}}}}
```

## 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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]}}}}
```

## 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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]}}}}
```

## 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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]}}}}
```

## 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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]}}}}
```

## 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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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"]}}}}
```

## 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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]}}}}
```

## 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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]}}}}
```

## 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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]}}}}
```

## 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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]}}}}
```

## 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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"]},"id":{"type":"string","description":"Unique resource identifier."}}}}
```

## 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."},"labelIds":{"type":"array","items":{"type":"string"},"description":"Collection of label IDs."}}},"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"]},"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"}}}}}}}
```
