# Add products in bulk (JSON) This operation is used to import products into the system from JSON formatted data: Products that are already present will be updated and new products will be added. Identification of the products is done based on the identifying attributes, which need to be provided via the request body.Note: This endpoint should be used in conjunction with: DELETE /api/v3/vendor/contracts/{contractId}/products. Procedure: 1. Add your products in bulks with multiple requests via this endpoint. 2. Send a DELETE request to /api/v3/vendor/contracts/{contractId}/products and set the parameter updatedMax to a date which is older or equal to your first request from step 1. Endpoint: POST /api/v3/vendor/contracts/{contractId}/products Version: 0.0.7224 Security: BasicAuth, BearerAuth ## Path parameters: - `contractId` (string, required) Unique identifier of the contract Example: "qbcxvb" ## Header parameters: - `content-type` (string, required) Enum: "application/json" - `patagona-tags-decimal-separator` (string, required) The decimal separator is used for parsing numbers in tags. English and German number formats are supported: dot and comma. Enum: ".", "," ## Request fields (application/json): - `products` (array, required) Products which should be added to the pricemonitor - `products.name` (string, required) Product name or title as displayed to customers Example: "Samsung Galaxy S24 Ultra 256GB" - `products.customerProductId` (string) Customer-specific product identifier. This can be your internal SKU or product ID. Used for mapping products between your system and the pricemonitor. Example: "SKU-GALAXY-S24-256" - `products.gtin` (integer) Global Trade Item Number (GTIN) - typically EAN-13, UPC-A, or GTIN-14. Must be a valid positive number representing the product's global identifier. Example: 8806094937329 - `products.referencePrice` (number, required) Reference price for the product. This represents the selling price - the actual price at which you sell the product. One of the use cases is to treat this as MSRP (Manufacturer's Suggested Retail Price). Used as a baseline for pricing strategies and recommendations. Will be rounded to two decimal places using half-up rounding. Example: 1199.99 - `products.minPriceBoundary` (number, required) Minimum allowed price boundary for automated pricing. Must be less than or equal to maxPriceBoundary. Will be rounded to two decimal places using half-up rounding. Example: 999.99 - `products.maxPriceBoundary` (number, required) Maximum allowed price boundary for automated pricing. Must be greater than or equal to minPriceBoundary. Will be rounded to two decimal places using half-up rounding. Example: 1399.99 - `products.tags` (array, required) Product tags for categorization and strategy application. Used by pricing strategies to group and target specific products. Example: [{"key":"brand","value":"Samsung"},{"key":"category","value":"smartphones"},{"key":"storage","value":"256GB"}] - `products.tags.key` (string, required) Tag identifier/name. Must be unique within a single product. Used to categorize products for pricing strategies and reporting. Example: "brand" - `products.tags.value` (string, required) Tag value associated with the key. Contains the actual categorization data for the product. Example: "Samsung" - `version` (string, required) Version of the request body. Only version 2 is supported. Enum: "2" - `identifyingAttributes` (array, required) Non-empty list of product attributes which identify your products uniquely. Please ensure that you specify only one attribute in the list. Avoid using tags as an identifier, as this feature will soon be deprecated. By doing so, may loose historical market data during product import. Enum: "customerProductId", "gtin", "name" ## Response 200 fields (application/json): - `data` (array) - `data.errors` (array) - `data.errors.code` (string, required) Machine-readable error code for programmatic error handling. Typically follows a structured format like 'request.invalid' or 'resource.invalid'. Example: "request.invalid" - `data.errors.message` (string, required) Human-readable error message providing details about the issue Example: "The provided email address is not in a valid format" ## Response 400 fields (application/json): - `errors` (array, required) List of errors that occurred during request processing Example: [{"code":"request.invalid","message":"The provided request data is invalid"},{"code":"resource.invalid","message":"The requested resource could not be found"}] - `errors.code` (string, required) Machine-readable error code for programmatic error handling. Typically follows a structured format like 'request.invalid' or 'resource.invalid'. Example: "request.invalid" - `errors.message` (string, required) Human-readable error message providing details about the issue Example: "The provided email address is not in a valid format"