{"openapi":"3.0.3","info":{"title":"Avut PIM Public API","version":"2026-03","description":"Server-to-server customer API for products, media, structures, feeds, imports, search, and tariff lookup. Keep API keys out of browser code; permissive browser CORS is not supported. Internal/operator endpoints are intentionally excluded."},"servers":[{"url":"https://api.avut.io"}],"tags":[{"name":"Products"},{"name":"Media"},{"name":"Structures"},{"name":"Feeds"},{"name":"Imports"},{"name":"Search"},{"name":"Tariff"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"API key token as Bearer token."},"apiKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key","description":"API key token in x-api-key header."}},"schemas":{"ErrorResponse":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"retryAt":{"type":"string","format":"date-time"},"quotaKey":{"type":"string"},"limit":{"type":"number"},"used":{"type":"number"},"resetAt":{"type":"string","format":"date-time"},"upgradeUrl":{"type":"string"}},"required":["error"]},"StructureReference":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","nullable":true},"code":{"type":"string","nullable":true}},"required":["id","name","code"]},"Product":{"type":"object","properties":{"id":{"type":"string"},"sku":{"type":"string"},"name":{"type":"string"},"name_i18n":{"type":"object","additionalProperties":{"type":"string"}},"description":{"type":"string","nullable":true},"description_i18n":{"type":"object","additionalProperties":{"type":"string"}},"status":{"$ref":"#/components/schemas/StructureReference"},"product_kind":{"type":"string","enum":["standard","bundle","assortment","digital","service"],"example":"standard"},"brand":{"$ref":"#/components/schemas/StructureReference"},"supplier":{"$ref":"#/components/schemas/StructureReference"},"product_group":{"$ref":"#/components/schemas/StructureReference"},"categories":{"type":"array","items":{"$ref":"#/components/schemas/StructureReference"}},"packaging":{"type":"object","nullable":true,"additionalProperties":true},"eu_taric_code":{"type":"string","nullable":true},"no_tariff_code":{"type":"string","nullable":true},"eu_antidumping_declarations":{"type":"array","items":{"type":"object","additionalProperties":true}},"no_preferential_duty_confirmations":{"type":"array","items":{"type":"object","additionalProperties":true}},"tariff_signals":{"type":"object","additionalProperties":true},"eu_taric_full_description_i18n":{"type":"object","nullable":true,"additionalProperties":{"type":"string"}},"no_tariff_full_description_i18n":{"type":"object","nullable":true,"additionalProperties":{"type":"string"}},"variant_model":{"allOf":[{"$ref":"#/components/schemas/StructureReference"}],"nullable":true},"variant_parent":{"type":"object","nullable":true,"additionalProperties":true},"variant_options":{"type":"array","nullable":true,"items":{"type":"object","additionalProperties":true}},"attributes":{"type":"object","additionalProperties":{"type":"string"},"example":{"sample_color":"Black"}},"attributes_i18n":{"type":"object","additionalProperties":true},"attribute_count":{"type":"integer"},"mediaSummary":{"type":"object","additionalProperties":true},"mediaStatus":{"type":"object","additionalProperties":true},"variantMediaCount":{"type":"integer"},"archived_at":{"type":"string","nullable":true},"updated_at":{"type":"string","format":"date-time"},"gtin":{"type":"string","nullable":true},"product_template":{"type":"object","nullable":true,"additionalProperties":true},"bundle_components":{"type":"array","items":{"type":"object","additionalProperties":true}},"used_in_bundles":{"type":"array","items":{"type":"object","additionalProperties":true}},"assortment_items":{"type":"array","items":{"type":"object","additionalProperties":true}},"assortment_metadata":{"type":"object","nullable":true,"additionalProperties":true},"relations":{"type":"array","items":{"type":"object","additionalProperties":true}},"collections":{"type":"array","items":{"type":"object","additionalProperties":true}},"media":{"type":"array","items":{"type":"object","additionalProperties":true}},"variants":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["id","sku","name","description","status","product_kind","categories","eu_antidumping_declarations","no_preferential_duty_confirmations","tariff_signals","variant_options","updated_at","attributes","attribute_count","mediaSummary","mediaStatus","variantMediaCount"]},"ProductListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"nextCursor":{"type":"string","nullable":true},"limit":{"type":"integer"}},"required":["data","nextCursor","limit"]},"SearchResponse":{"type":"object","properties":{"query":{"type":"string"},"total":{"type":"integer"},"groups":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string","nullable":true},"href":{"type":"string"}},"required":["id","type","title","subtitle","href"]}}},"required":["key","label","items"]}}},"required":["query","total","groups"]},"TariffSignalsResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"high_duty":{"type":"object","additionalProperties":true},"anti_dumping":{"type":"object","additionalProperties":true}},"required":["high_duty","anti_dumping"]}},"required":["data"]}},"responses":{"Unauthorized":{"description":"Missing or invalid authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"Authenticated but not permitted for this endpoint or scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"QuotaExceeded":{"description":"The tenant API quota is exhausted or the current plan does not include API access.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"NotFound":{"description":"Resource was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"TooManyRequests":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"InternalServerError":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"paths":{"/api/v1/products":{"get":{"tags":["Products"],"summary":"List products","parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum records to return. Defaults to 50 and is capped at 100 without expansions or 25 when expand is used.","schema":{"type":"integer"},"example":50},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor returned as nextCursor from the previous page.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"Case-insensitive product search across supported product identifiers and text fields.","schema":{"type":"string"}},{"name":"filters","in":"query","required":false,"description":"JSON-encoded advanced product filters using the same filter clauses supported by the product list.","schema":{"type":"string"}},{"name":"includeArchived","in":"query","required":false,"description":"Legacy compatibility flag that includes archived rows. Prefer status=archived or status=all for new integrations.","schema":{"type":"boolean"},"example":false},{"name":"sku","in":"query","required":false,"description":"Optional comma-separated list of exact SKUs to return. The list is capped at 100 SKUs.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Product status filter. Defaults to active.","schema":{"type":"string"},"example":"active"},{"name":"updated_since","in":"query","required":false,"description":"Return products updated after this ISO 8601 timestamp.","schema":{"type":"string"}},{"name":"updated_before","in":"query","required":false,"description":"Return products updated at or before this ISO 8601 timestamp.","schema":{"type":"string"}},{"name":"include_i18n","in":"query","required":false,"description":"Set true to include localized/translatable values in the response.","schema":{"type":"boolean"},"example":false},{"name":"expand","in":"query","required":false,"description":"Comma-separated linked data to include: media, relations, collections, bundle_components, assortment_items, variants, packaging, or all.","schema":{"type":"string"},"example":"media,relations"}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductListResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Products"],"summary":"Create product","description":"Create a product. Manage product packaging and relations through their dedicated product sub-resource endpoints after the product exists.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sku":{"type":"string"},"name":{"type":"string"},"name_i18n":{"type":"object","properties":{"en":{"type":"string"},"nb":{"type":"string"}}},"status":{"type":"string"},"product_kind":{"type":"string"},"description":{"type":"object","properties":{"en":{"type":"string"}}},"eu_antidumping_declarations":{"type":"array","items":{}},"no_preferential_duty_confirmations":{"type":"array","items":{}}}},"example":{"sku":"JACKET-NORDIC-001","name":"Nordic performance jacket","name_i18n":{"en":"Nordic performance jacket","nb":"Nordisk skalljakke"},"status":"draft","product_kind":"standard","description":{"en":"Lightweight shell jacket for changing weather."},"eu_antidumping_declarations":[],"no_preferential_duty_confirmations":[]}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}}}},"400":{"description":"The product payload is invalid or missing required fields.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The product payload is invalid or missing required fields."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"description":"A product with the same SKU or external identifier already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"A product with the same SKU or external identifier already exists."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/changes":{"get":{"tags":["Products"],"summary":"List changed products","description":"Returns products that have product change-log entries after a timestamp. Use this as the first step in an integration delta sync: page until nextCursor is null, then store the returned until value as the next sync watermark.","parameters":[{"name":"since","in":"query","required":true,"description":"Return products with changes after this ISO 8601 timestamp.","schema":{"type":"string"},"example":"2026-05-14T10:00:00Z"},{"name":"until","in":"query","required":false,"description":"Optional upper ISO 8601 timestamp for the change window. When omitted, the API uses the request time and returns it in the response.","schema":{"type":"string"},"example":"2026-05-15T08:20:00Z"},{"name":"status","in":"query","required":false,"description":"Product status filter. Defaults to active. Use all to include archived and draft products.","schema":{"type":"string"},"example":"active"},{"name":"include_fields","in":"query","required":false,"description":"Set true to include changed field paths per product.","schema":{"type":"boolean"},"example":true},{"name":"limit","in":"query","required":false,"description":"Maximum records to return. Defaults to 100 and is capped at 500.","schema":{"type":"integer"},"example":100},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor returned as nextCursor from the previous page.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","properties":{"since":{"type":"string"},"until":{"type":"string"},"status":{"type":"string"},"include_fields":{"type":"boolean"},"limit":{"type":"integer"},"data":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string"},"sku":{"type":"string"},"status":{"type":"string"},"last_changed_at":{"type":"string"},"changed_fields":{"type":"array","items":{"type":"string"}}},"required":["product_id","sku","status","last_changed_at","changed_fields"]}},"nextCursor":{"nullable":true}},"required":["since","until","status","include_fields","limit","data","nextCursor"]},"example":{"since":"2026-05-14T10:00:00Z","until":"2026-05-15T08:20:00Z","status":"active","include_fields":true,"limit":100,"data":[{"product_id":"{{productId}}","sku":"JACKET-NORDIC-001","status":"active","last_changed_at":"2026-05-15T08:14:00Z","changed_fields":["assortment_items","assortment_description","bundle_components","description_i18n.nb","packaging.roles","product_kind"]}],"nextCursor":null}}}},"400":{"description":"since, until, status, or cursor is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"since, until, status, or cursor is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"}},"/api/v1/products/{id}":{"get":{"tags":["Products"],"summary":"Get product","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}},{"name":"include_i18n","in":"query","required":false,"description":"Set true to include localized/translatable values in the response.","schema":{"type":"boolean"},"example":false},{"name":"expand","in":"query","required":false,"description":"Comma-separated linked data to include: media, relations, collections, bundle_components, assortment_items, variants, packaging, or all.","schema":{"type":"string"},"example":"all"}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"patch":{"tags":["Products"],"summary":"Update product","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"object","properties":{"en":{"type":"string"}}},"status":{"type":"string"},"product_kind":{"type":"string"},"eu_antidumping_declarations":{"type":"array","items":{}},"no_preferential_duty_confirmations":{"type":"array","items":{}},"attributes":{"type":"object","properties":{"sample_color":{"type":"string"}}}}},"example":{"name":"Nordic performance jacket","description":{"en":"Lightweight shell jacket for changing weather."},"status":"active","product_kind":"standard","eu_antidumping_declarations":[],"no_preferential_duty_confirmations":[],"attributes":{"sample_color":"Black"}}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}}}},"400":{"description":"The update payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The update payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"409":{"description":"The update conflicts with another product identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The update conflicts with another product identifier."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Products"],"summary":"Archive product","description":"Archives the product by setting archived_at. The product row is not permanently deleted and can be restored if its SKU is still available.","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Product archived and returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/{id}/restore":{"post":{"tags":["Products"],"summary":"Restore archived product","description":"Restores an archived product by clearing archived_at. If another product now uses the same SKU, the restore is rejected with SKU_COLLISION.","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Product restored and returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"409":{"description":"The archived product SKU is already in use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The archived product SKU is already in use.","code":"SKU_COLLISION"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/{id}/permanent":{"delete":{"tags":["Products"],"summary":"Delete product permanently","description":"Permanently deletes an archived product and its product-scoped history. This cannot be undone. The request is blocked unless the product is archived first, and is also blocked when the product has variants or is used as a bundle component.","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Product permanently deleted.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"409":{"description":"Product cannot be deleted permanently yet.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product cannot be deleted permanently yet.","code":"DELETE_BLOCKED"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/{id}/changes":{"get":{"tags":["Products"],"summary":"Get product changed fields","description":"Returns product field changes from the product change log for integration delta sync. Use latest mode for one row per changed field, or events mode for every change event.","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}},{"name":"since","in":"query","required":true,"description":"Return changes after this ISO 8601 timestamp.","schema":{"type":"string"},"example":"2026-05-14T10:00:00Z"},{"name":"until","in":"query","required":false,"description":"Optional upper ISO 8601 timestamp for the change window.","schema":{"type":"string"}},{"name":"mode","in":"query","required":false,"description":"Change output mode. latest returns one row per changed field; events returns each change event.","schema":{"type":"string"},"example":"latest"},{"name":"limit","in":"query","required":false,"description":"Maximum records to return. Defaults to 100 and is capped at 500.","schema":{"type":"integer"},"example":100},{"name":"cursor","in":"query","required":false,"description":"Pagination cursor returned as nextCursor from the previous page.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","properties":{"product_id":{"type":"string"},"sku":{"type":"string"},"since":{"type":"string"},"until":{"nullable":true},"mode":{"type":"string"},"limit":{"type":"integer"},"changes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"field":{"type":"string"},"old_value":{"type":"array","items":{}},"new_value":{"type":"array","items":{"type":"object","properties":{"componentSku":{"type":"string"},"quantity":{"type":"string"}},"required":["componentSku","quantity"]}},"changed_at":{"type":"string"},"source":{"type":"string"},"actor_display_name":{"nullable":true},"import_run_id":{"nullable":true}},"required":["id","field","old_value","new_value","changed_at","source","actor_display_name","import_run_id"]}},"nextCursor":{"nullable":true}},"required":["product_id","sku","since","until","mode","limit","changes","nextCursor"]},"example":{"product_id":"{{productId}}","sku":"JACKET-NORDIC-001","since":"2026-05-14T10:00:00Z","until":null,"mode":"latest","limit":100,"changes":[{"id":123,"field":"bundle_components","old_value":[],"new_value":[{"componentSku":"JACKET-NORDIC-COMPONENT","quantity":"1.0000"}],"changed_at":"2026-05-15T08:12:00Z","source":"public_api","actor_display_name":null,"import_run_id":null}],"nextCursor":null}}}},"400":{"description":"since, until, or cursor is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"since, until, or cursor is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"}},"/api/v1/products/{id}/attributes":{"get":{"tags":["Products"],"summary":"Get product attributes","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}},{"name":"include_i18n","in":"query","required":false,"description":"Set true to include localized/translatable values in the response.","schema":{"type":"boolean"},"example":false}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"patch":{"tags":["Products"],"summary":"Update product attributes","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"attributes":{"type":"object","properties":{"sample_color":{"type":"string"},"sample_material":{"type":"string"}}}}},"example":{"attributes":{"sample_color":"Black","sample_material":"Recycled polyester"}}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"One or more attribute values are invalid for the attribute type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"One or more attribute values are invalid for the attribute type."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product or attribute not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product or attribute not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/{id}/relations":{"get":{"tags":["Products"],"summary":"List product relations","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}},{"name":"include_i18n","in":"query","required":false,"description":"Set true to include localized/translatable values in the response.","schema":{"type":"boolean"},"example":false}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Products"],"summary":"Create product relation","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"related_product_id":{"type":"string"},"relation_type_id":{"type":"string"},"sort_order":{"type":"integer"}}},"example":{"related_product_id":"{{relatedProductId}}","relation_type_id":"{{relationTypeId}}","sort_order":0}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The relation type or target product is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The relation type or target product is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Source product, target product, or relation type not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Source product, target product, or relation type not found."}}}},"409":{"description":"The relation already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The relation already exists."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/{id}/relations/{relationId}":{"patch":{"tags":["Products"],"summary":"Update product relation","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}},{"name":"relationId","in":"path","required":true,"description":"relationId path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"relation_type_id":{"type":"string"},"sort_order":{"type":"integer"}}},"example":{"relation_type_id":"{{relationTypeId}}","sort_order":0}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product relation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product relation not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Products"],"summary":"Delete product relation","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}},{"name":"relationId","in":"path","required":true,"description":"relationId path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource deleted or archived.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product relation not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product relation not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/{id}/bundle-components":{"get":{"tags":["Products"],"summary":"List product bundle components","description":"Returns the components contained in a bundle product, plus bundles where this product is used as a component.","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Products"],"summary":"Add or update bundle component","description":"Adds a sellable standalone product or variant to a standalone bundle product. Parent products and nested bundles are rejected.","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"component_product_id":{"type":"string"},"quantity":{"type":"integer"},"sort_order":{"type":"integer"}}},"example":{"component_product_id":"{{componentProductIdOrSku}}","quantity":1,"sort_order":0}}}},"responses":{"200":{"description":"Bundle component created or updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The bundle product, component product, or quantity is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The bundle product, component product, or quantity is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/{id}/bundle-components/{componentId}":{"delete":{"tags":["Products"],"summary":"Remove bundle component","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}},{"name":"componentId","in":"path","required":true,"description":"componentId path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Bundle component removed.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product or bundle component not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product or bundle component not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/{id}/assortment-items":{"get":{"tags":["Products"],"summary":"List product assortment contents","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"patch":{"tags":["Products"],"summary":"Replace product assortment contents","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"object","properties":{"description":{"type":"string"},"descriptionI18n":{"type":"object","properties":{"nb":{"type":"string"}}}}},"items":{"type":"array","items":{"type":"object","properties":{"itemType":{"type":"string"},"label":{"type":"string"},"sku":{"type":"string"},"gtin":{"type":"string"},"quantity":{"type":"integer"},"share_percent":{"type":"number"},"description":{"type":"string"}}}}}},"example":{"metadata":{"description":"Contains one small and one medium item packed as one sellable assortment.","descriptionI18n":{"nb":"Inneholder en small og en medium pakket som ett salgbart sett."}},"items":[{"itemType":"size","label":"Size M","sku":"SET-A123-M","gtin":"1234567890123","quantity":1,"share_percent":33.33,"description":"Medium item in the set"}]}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Assortment content values are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Assortment content values are invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/{id}/packaging":{"get":{"tags":["Products"],"summary":"Get product packaging roles","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"patch":{"tags":["Products"],"summary":"Update product packaging roles","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","items":{"type":"object","properties":{"colliIndex":{"type":"integer"},"colliLabel":{"type":"string"},"colliDescription":{"nullable":true},"roleCode":{"type":"string"},"typeCode":{"type":"string"},"quantityToConsumerUnit":{"type":"integer"},"gtin":{"type":"string"},"gtinDescription":{"type":"string"},"additionalGtins":{"type":"array","items":{"type":"string"}},"additionalGtinDescriptions":{"type":"array","items":{"type":"string"}},"length":{"type":"integer"},"width":{"type":"integer"},"height":{"type":"integer"},"dimensionUnit":{"type":"string"},"volumeSource":{"type":"string"},"netWeight":{"type":"number"},"grossWeight":{"type":"integer"},"weightUnit":{"type":"string"}}}}}},"example":{"roles":[{"colliIndex":0,"colliLabel":"Colli 1","colliDescription":null,"roleCode":"consumer_unit","typeCode":"polybag","quantityToConsumerUnit":1,"gtin":"1234567890123","gtinDescription":"Consumer unit barcode","additionalGtins":["1234567890124"],"additionalGtinDescriptions":["Alternate barcode"],"length":45,"width":35,"height":8,"dimensionUnit":"cm","volumeSource":"derived","netWeight":0.9,"grossWeight":1,"weightUnit":"kg"},{"colliIndex":1,"colliLabel":"Colli 2","colliDescription":"Second physical package","roleCode":"master_carton","typeCode":"brown_box","quantityToConsumerUnit":12,"length":60,"width":40,"height":30,"dimensionUnit":"cm","volumeSource":"derived","grossWeight":8.4,"weightUnit":"kg"}]}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Packaging role, quantity, GTIN, or dimension values are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Packaging role, quantity, GTIN, or dimension values are invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product, packaging level, or packaging type not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product, packaging level, or packaging type not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/{id}/media":{"get":{"tags":["Products"],"summary":"List product media","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}},{"name":"variant_id","in":"query","required":false,"description":"Optional child variant product id for variant-specific media. Use only when {id} is the parent product; omit for product-level media.","schema":{"type":"string"}},{"name":"resolve","in":"query","required":false,"description":"Set true to resolve inherited variant media fallback.","schema":{"type":"boolean"},"example":false}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The variant id is invalid for this product.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The variant id is invalid for this product."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product or variant not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product or variant not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Products"],"summary":"Link product media","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asset_id":{"type":"string"},"role":{"type":"string"},"sort_index":{"type":"integer"},"alt_text":{"type":"string"}}},"example":{"asset_id":"{{assetId}}","role":"primary","sort_index":0,"alt_text":"Front view of Nordic performance jacket"}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The asset, URL, role, or variant scope is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The asset, URL, role, or variant scope is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product, variant, or media asset not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product, variant, or media asset not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/{id}/media/{linkId}":{"patch":{"tags":["Products"],"summary":"Update product media link","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}},{"name":"linkId","in":"path","required":true,"description":"linkId path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string"},"sort_index":{"type":"integer"},"alt_text":{"type":"string"}}},"example":{"role":"primary","sort_index":0,"alt_text":"Front view"}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product or media link not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product or media link not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Products"],"summary":"Unlink media from product","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}},{"name":"linkId","in":"path","required":true,"description":"linkId path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource deleted or archived.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product or media link not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product or media link not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/product-collections":{"get":{"tags":["Products"],"summary":"List product collections","description":"Returns reusable product collections. Collections can be manual, rule-based, or mixed.","parameters":[{"name":"status","in":"query","required":false,"description":"Collection status filter. Valid values: active, archived, all.","schema":{"type":"string"},"example":"active"}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","properties":{"collections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"mode":{"type":"string"},"rules":{"type":"object","properties":{"productKinds":{"type":"array","items":{"type":"string"}},"includeCollectionIds":{"type":"array","items":{}},"attributeRules":{"type":"array","items":{}}},"required":["productKinds","includeCollectionIds","attributeRules"]},"manualCount":{"type":"integer"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","code","description","status","mode","rules","manualCount","created_at","updated_at"]}}},"required":["collections"]},"example":{"collections":[{"id":"79c33e3a-6c43-4d1d-8fa9-766d2c3d6327","name":"Winter campaign","code":"winter-campaign","description":"Products for the winter launch.","status":"active","mode":"mixed","rules":{"productKinds":["bundle"],"includeCollectionIds":[],"attributeRules":[]},"manualCount":4,"created_at":"2026-05-24T12:20:00.000Z","updated_at":"2026-05-24T12:20:00.000Z"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Products"],"summary":"Create product collection","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"description":{"type":"string"},"mode":{"type":"string"},"status":{"type":"string"},"rules":{"type":"object","properties":{}}}},"example":{"name":"Winter campaign","code":"winter-campaign","description":"Products for the winter launch.","mode":"manual","status":"active","rules":{}}}}},"responses":{"200":{"description":"Product collection created.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The collection payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The collection payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/product-collections/{id}":{"get":{"tags":["Products"],"summary":"Get product collection","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product collection not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product collection not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"patch":{"tags":["Products"],"summary":"Update product collection","description":"Updates collection metadata, status, mode, or rules. Manual members are managed with the products subresource.","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string"},"mode":{"type":"string"},"rules":{"type":"object","properties":{"includeCollectionIds":{"type":"array","items":{"type":"string"}},"brandIds":{"type":"array","items":{"type":"string"}},"attributeRules":{"type":"array","items":{"type":"object","properties":{"attributeKey":{"type":"string"},"operator":{"type":"string"},"value":{"type":"string"}}}}}}}},"example":{"name":"Winter campaign","status":"active","mode":"mixed","rules":{"includeCollectionIds":["79c33e3a-6c43-4d1d-8fa9-766d2c3d6327"],"brandIds":["4ff7a9d0-4db1-4ba4-964c-b2d3cab8d8d8"],"attributeRules":[{"attributeKey":"season","operator":"equals","value":"Winter"}]}}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The collection payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The collection payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product collection not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product collection not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Products"],"summary":"Archive product collection","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Collection archived.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product collection not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product collection not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/product-collections/{id}/products":{"get":{"tags":["Products"],"summary":"List products in collection","description":"Returns manual members plus rule-matched products for rule-based and mixed collections.","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"Optional product search used by the app when adding members.","schema":{"type":"string"},"example":"jacket"}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Products"],"summary":"Add products to collection","description":"Adds manual product members. Rule-matched products are controlled by collection rules.","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"productIds":{"type":"array","items":{"type":"string"}}}},"example":{"productIds":["e112ef8d-22a2-4599-a4cf-0527db82bd40"]}}}},"responses":{"200":{"description":"Collection members updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The productIds payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The productIds payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Products"],"summary":"Remove products from collection","description":"Removes manual members. Products can still appear if they match the collection rules.","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"productIds":{"type":"array","items":{"type":"string"}}}},"example":{"productIds":["e112ef8d-22a2-4599-a4cf-0527db82bd40"]}}}},"responses":{"200":{"description":"Collection members updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/products/{id}/collections":{"get":{"tags":["Products"],"summary":"List collections for product","description":"Returns product collections where the product is included manually or by rules.","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Product not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Product not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"}},"/api/v1/media/assets":{"get":{"tags":["Media"],"summary":"List media assets","parameters":[{"name":"page","in":"query","required":false,"description":"Zero-based page number. Defaults to 0.","schema":{"type":"integer"},"example":0},{"name":"pageSize","in":"query","required":false,"description":"Number of records to return. Defaults to 48 and is capped at 200.","schema":{"type":"integer"},"example":48},{"name":"q","in":"query","required":false,"description":"Optional text search across media URL/storage key, alt text, linked product name, SKU, and variant name/SKU.","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"Sort order. Valid values: newest, oldest, size, role.","schema":{"type":"string"},"example":"newest"},{"name":"roles","in":"query","required":false,"description":"Comma-separated media roles to filter by.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Comma-separated asset statuses to filter by.","schema":{"type":"string"}},{"name":"quality","in":"query","required":false,"description":"Comma-separated media quality filters.","schema":{"type":"string"}},{"name":"linked","in":"query","required":false,"description":"Link status filter. Valid values: linked, unlinked.","schema":{"type":"string"}},{"name":"variant","in":"query","required":false,"description":"Variant scope filter. Valid values: product, variant.","schema":{"type":"string"}},{"name":"duplicates","in":"query","required":false,"description":"Set true to return only assets with duplicate matches.","schema":{"type":"boolean"},"example":false}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"}},"/api/v1/media/assets/{id}":{"get":{"tags":["Media"],"summary":"Get media asset","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Media asset not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Media asset not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"}},"/api/v1/media/collections":{"get":{"tags":["Media"],"summary":"List media collections","parameters":[{"name":"status","in":"query","required":false,"description":"Collection status filter. Valid values: active, archived, all.","schema":{"type":"string"},"example":"active"}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","properties":{"collections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"rules":{"type":"object","properties":{"query":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}},"sort":{"type":"string"}},"required":["query","roles","sort"]},"publicToken":{"type":"string"},"publicTokenExpiresAt":{"nullable":true},"manifestUrl":{"type":"string"},"publicManifestUrl":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","name","description","status","rules","publicToken","publicTokenExpiresAt","manifestUrl","publicManifestUrl","createdAt","updatedAt"]}}},"required":["collections"]},"example":{"collections":[{"id":"collection_01J9Z7QH8V8C2P2K7A6X9M4D3E","name":"Spring campaign","description":"Assets for spring product launches.","status":"active","rules":{"query":"jacket","roles":["primary"],"sort":"newest"},"publicToken":"public_media_token","publicTokenExpiresAt":null,"manifestUrl":"https://api.avut.io/api/v1/media/collections/collection_01J9Z7QH8V8C2P2K7A6X9M4D3E/manifest","publicManifestUrl":"https://api.avut.io/api/media/collections/public/public_media_token/manifest","createdAt":"2026-05-14T12:20:00.000Z","updatedAt":"2026-05-14T12:20:00.000Z"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Media"],"summary":"Create media collection","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}}},"example":{"name":"Spring campaign","description":"Assets for spring product launches."}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"rules":{"type":"object","properties":{}},"publicToken":{"type":"string"},"publicTokenExpiresAt":{"nullable":true},"manifestUrl":{"type":"string"},"publicManifestUrl":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","name","description","status","rules","publicToken","publicTokenExpiresAt","manifestUrl","publicManifestUrl","createdAt","updatedAt"]},"example":{"id":"collection_01J9Z7QH8V8C2P2K7A6X9M4D3E","name":"Spring campaign","description":"Assets for spring product launches.","status":"active","rules":{},"publicToken":"public_media_token","publicTokenExpiresAt":null,"manifestUrl":"https://api.avut.io/api/v1/media/collections/collection_01J9Z7QH8V8C2P2K7A6X9M4D3E/manifest","publicManifestUrl":"https://api.avut.io/api/media/collections/public/public_media_token/manifest","createdAt":"2026-05-14T12:20:00.000Z","updatedAt":"2026-05-14T12:20:00.000Z"}}}},"400":{"description":"The collection payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The collection payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/media/collections/{id}":{"get":{"tags":["Media"],"summary":"Get media collection","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"rules":{"type":"object","properties":{"query":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}},"sort":{"type":"string"}},"required":["query","roles","sort"]},"publicToken":{"type":"string"},"publicTokenExpiresAt":{"nullable":true},"manifestUrl":{"type":"string"},"publicManifestUrl":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","name","description","status","rules","publicToken","publicTokenExpiresAt","manifestUrl","publicManifestUrl","createdAt","updatedAt"]},"example":{"id":"collection_01J9Z7QH8V8C2P2K7A6X9M4D3E","name":"Spring campaign","description":"Assets for spring product launches.","status":"active","rules":{"query":"jacket","roles":["primary"],"sort":"newest"},"publicToken":"public_media_token","publicTokenExpiresAt":null,"manifestUrl":"https://api.avut.io/api/v1/media/collections/collection_01J9Z7QH8V8C2P2K7A6X9M4D3E/manifest","publicManifestUrl":"https://api.avut.io/api/media/collections/public/public_media_token/manifest","createdAt":"2026-05-14T12:20:00.000Z","updatedAt":"2026-05-14T12:20:00.000Z"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Media collection not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Media collection not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"patch":{"tags":["Media"],"summary":"Update media collection","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"rules":{"type":"object","properties":{"query":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}},"sort":{"type":"string"}}}}},"example":{"name":"Spring campaign","description":"Primary assets for spring product launches.","status":"active","rules":{"query":"jacket","roles":["primary"],"sort":"newest"}}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"rules":{"type":"object","properties":{"query":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}},"sort":{"type":"string"}},"required":["query","roles","sort"]},"publicToken":{"type":"string"},"publicTokenExpiresAt":{"nullable":true},"manifestUrl":{"type":"string"},"publicManifestUrl":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","name","description","status","rules","publicToken","publicTokenExpiresAt","manifestUrl","publicManifestUrl","createdAt","updatedAt"]},"example":{"id":"collection_01J9Z7QH8V8C2P2K7A6X9M4D3E","name":"Spring campaign","description":"Primary assets for spring product launches.","status":"active","rules":{"query":"jacket","roles":["primary"],"sort":"newest"},"publicToken":"public_media_token","publicTokenExpiresAt":null,"manifestUrl":"https://api.avut.io/api/v1/media/collections/collection_01J9Z7QH8V8C2P2K7A6X9M4D3E/manifest","publicManifestUrl":"https://api.avut.io/api/media/collections/public/public_media_token/manifest","createdAt":"2026-05-14T12:20:00.000Z","updatedAt":"2026-05-14T12:30:00.000Z"}}}},"400":{"description":"The collection payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The collection payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Media collection not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Media collection not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/media/collections/{id}/manifest":{"get":{"tags":["Media"],"summary":"Get media collection manifest","description":"Returns the paginated asset manifest generated from a media collection's rules.","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Zero-based page number. Defaults to 0.","schema":{"type":"integer"},"example":0},{"name":"pageSize","in":"query","required":false,"description":"Number of assets to return. Defaults to 96 and is capped at 500.","schema":{"type":"integer"},"example":96}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","properties":{"schemaVersion":{"type":"integer"},"collection":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"publicToken":{"type":"string"},"publicTokenExpiresAt":{"nullable":true}},"required":["id","name","description","status","publicToken","publicTokenExpiresAt"]},"generatedAt":{"type":"string"},"page":{"type":"integer"},"pageSize":{"type":"integer"},"total":{"type":"integer"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"},"url":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"bytes":{"type":"integer"},"createdAt":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}},"linkCount":{"type":"integer"}},"required":["id","status","url","width","height","bytes","createdAt","roles","linkCount"]}}},"required":["schemaVersion","collection","generatedAt","page","pageSize","total","items"]},"example":{"schemaVersion":1,"collection":{"id":"collection_01J9Z7QH8V8C2P2K7A6X9M4D3E","name":"Spring campaign","description":"Assets for spring product launches.","status":"active","publicToken":"public_media_token","publicTokenExpiresAt":null},"generatedAt":"2026-05-14T12:30:00.000Z","page":0,"pageSize":96,"total":1,"items":[{"id":"asset_01J9Z7QH8V8C2P2K7A6X9M4D3E","status":"active","url":"https://cdn.avut.io/sample/jacket-front.jpg","width":1600,"height":2000,"bytes":245000,"createdAt":"2026-05-14T12:20:00.000Z","roles":["primary"],"linkCount":1}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Media collection not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Media collection not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"}},"/api/v1/structures/{type}":{"get":{"tags":["Structures"],"summary":"List structure records by type","parameters":[{"name":"type","in":"path","required":true,"description":"type path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Structures"],"summary":"Create structure record by type","parameters":[{"name":"type","in":"path","required":true,"description":"type path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"}}},"example":{"name":"Outerwear","code":"outerwear"}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The structure type or payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The structure type or payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"description":"A structure record with the same key already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"A structure record with the same key already exists."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/{type}/{id}":{"patch":{"tags":["Structures"],"summary":"Update structure record by type","parameters":[{"name":"type","in":"path","required":true,"description":"type path parameter.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"isActive":{"type":"boolean"}}},"example":{"name":"Outerwear","code":"outerwear","isActive":true}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The structure type or update payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The structure type or update payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Structure record not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Structure record not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Structures"],"summary":"Delete structure record by type","parameters":[{"name":"type","in":"path","required":true,"description":"type path parameter.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource deleted or archived.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Structure record not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Structure record not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/categories":{"get":{"tags":["Structures"],"summary":"List categories","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"category_structure_id":{"type":"string"},"parent_id":{"nullable":true},"name_i18n":{"type":"object","properties":{"en":{"type":"string"}},"required":["en"]},"sort_order":{"type":"integer"},"relations":{"type":"integer"},"child_count":{"type":"integer"}},"required":["id","name","code","is_active","category_structure_id","parent_id","name_i18n","sort_order","relations","child_count"]}},"example":[{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Example","code":"example","is_active":true,"category_structure_id":"category-structure-id","parent_id":null,"name_i18n":{"en":"Outdoor"},"sort_order":0,"relations":0,"child_count":0}]}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Structures"],"summary":"Create category","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"name_i18n":{"type":"object","properties":{"nb":{"type":"string"}}},"code":{"type":"string"},"parentId":{"nullable":true},"isActive":{"type":"boolean"}}},"example":{"name":"Outdoor","name_i18n":{"nb":"Friluft"},"code":"outdoor","parentId":null,"isActive":true}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"category_structure_id":{"type":"string"},"parent_id":{"nullable":true},"name_i18n":{"type":"object","properties":{"en":{"type":"string"}},"required":["en"]},"sort_order":{"type":"integer"},"relations":{"type":"integer"},"child_count":{"type":"integer"}},"required":["id","name","code","is_active","category_structure_id","parent_id","name_i18n","sort_order","relations","child_count"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Example","code":"example","is_active":true,"category_structure_id":"category-structure-id","parent_id":null,"name_i18n":{"en":"Outdoor"},"sort_order":0,"relations":0,"child_count":0}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/categories/{id}":{"patch":{"tags":["Structures"],"summary":"Update category","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"name_i18n":{"type":"object","properties":{"nb":{"type":"string"}}},"code":{"type":"string"},"parentId":{"nullable":true},"isActive":{"type":"boolean"}}},"example":{"name":"Outdoor","name_i18n":{"nb":"Friluft"},"code":"outdoor","parentId":null,"isActive":true}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"category_structure_id":{"type":"string"},"parent_id":{"nullable":true},"name_i18n":{"type":"object","properties":{"en":{"type":"string"}},"required":["en"]},"sort_order":{"type":"integer"},"relations":{"type":"integer"},"child_count":{"type":"integer"}},"required":["id","name","code","is_active","category_structure_id","parent_id","name_i18n","sort_order","relations","child_count"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Example","code":"example","is_active":true,"category_structure_id":"category-structure-id","parent_id":null,"name_i18n":{"en":"Outdoor"},"sort_order":0,"relations":0,"child_count":0}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Structures"],"summary":"Delete category","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource deleted or archived.","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}},"required":["deleted"]},"example":{"deleted":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/variants":{"get":{"tags":["Structures"],"summary":"List variant models","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"relations":{"type":"integer"},"dimension_count":{"type":"integer"},"children_overview_columns":{"type":"array","items":{}}},"required":["id","name","code","is_active","relations","dimension_count","children_overview_columns"]}},"example":[{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Example","code":"example","is_active":true,"relations":0,"dimension_count":1,"children_overview_columns":[]}]}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Structures"],"summary":"Create variant model","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"name_i18n":{"type":"object","properties":{"nb":{"type":"string"}}},"code":{"type":"string"},"isActive":{"type":"boolean"},"dimensions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"}}}}}}}}},"example":{"name":"Size","name_i18n":{"nb":"Storrelse"},"code":"size","isActive":true,"dimensions":[{"name":"Size","type":"size","options":[{"value":"M"}]}]}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"dimensions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"}},"required":["id","value"]}}},"required":["id","name","type","options"]}},"children_overview_columns":{"type":"array","items":{}}},"required":["id","name","code","is_active","dimensions","children_overview_columns"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Size","code":"size","is_active":true,"dimensions":[{"id":"dimension-id","name":"Size","type":"size","options":[{"id":"option-id","value":"M"}]}],"children_overview_columns":[]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/variants/{id}":{"get":{"tags":["Structures"],"summary":"Get variant model","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"dimensions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"}},"required":["id","value"]}}},"required":["id","name","type","options"]}},"children_overview_columns":{"type":"array","items":{}}},"required":["id","name","code","is_active","dimensions","children_overview_columns"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Size","code":"size","is_active":true,"dimensions":[{"id":"dimension-id","name":"Size","type":"size","options":[{"id":"option-id","value":"M"}]}],"children_overview_columns":[]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"patch":{"tags":["Structures"],"summary":"Update variant model","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"name_i18n":{"type":"object","properties":{"nb":{"type":"string"}}},"code":{"type":"string"},"isActive":{"type":"boolean"},"dimensions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"}}}}}}}}},"example":{"name":"Size","name_i18n":{"nb":"Storrelse"},"code":"size","isActive":true,"dimensions":[{"name":"Size","type":"size","options":[{"value":"M"}]}]}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"dimensions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"}},"required":["id","value"]}}},"required":["id","name","type","options"]}},"children_overview_columns":{"type":"array","items":{}}},"required":["id","name","code","is_active","dimensions","children_overview_columns"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Size","code":"size","is_active":true,"dimensions":[{"id":"dimension-id","name":"Size","type":"size","options":[{"id":"option-id","value":"M"}]}],"children_overview_columns":[]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Structures"],"summary":"Delete variant model","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource deleted or archived.","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}},"required":["deleted"]},"example":{"deleted":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/relation-types":{"get":{"tags":["Structures"],"summary":"List product relation types","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"direction":{"type":"string"},"reverse_label":{"type":"string"},"reverse_label_i18n":{"nullable":true},"sort_order":{"type":"integer"}},"required":["id","name","code","is_active","direction","reverse_label","reverse_label_i18n","sort_order"]}},"example":[{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Example","code":"example","is_active":true,"direction":"one_way","reverse_label":"Accessory for","reverse_label_i18n":null,"sort_order":0}]}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Structures"],"summary":"Create product relation type","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"direction":{"type":"string"},"reverseLabel":{"type":"string"},"sort_order":{"type":"integer"},"isActive":{"type":"boolean"}}},"example":{"name":"Accessory","code":"accessory","direction":"one_way","reverseLabel":"Accessory for","sort_order":0,"isActive":true}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"direction":{"type":"string"},"reverse_label":{"type":"string"},"reverse_label_i18n":{"nullable":true},"sort_order":{"type":"integer"}},"required":["id","name","code","is_active","direction","reverse_label","reverse_label_i18n","sort_order"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Example","code":"example","is_active":true,"direction":"one_way","reverse_label":"Accessory for","reverse_label_i18n":null,"sort_order":0}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/relation-types/{id}":{"patch":{"tags":["Structures"],"summary":"Update product relation type","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"direction":{"type":"string"},"reverseLabel":{"type":"string"},"sort_order":{"type":"integer"},"isActive":{"type":"boolean"}}},"example":{"name":"Accessory","code":"accessory","direction":"one_way","reverseLabel":"Accessory for","sort_order":0,"isActive":true}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"direction":{"type":"string"},"reverse_label":{"type":"string"},"reverse_label_i18n":{"nullable":true},"sort_order":{"type":"integer"}},"required":["id","name","code","is_active","direction","reverse_label","reverse_label_i18n","sort_order"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Example","code":"example","is_active":true,"direction":"one_way","reverse_label":"Accessory for","reverse_label_i18n":null,"sort_order":0}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Structures"],"summary":"Delete product relation type","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource deleted or archived.","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}},"required":["deleted"]},"example":{"deleted":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/packaging-levels":{"get":{"tags":["Structures"],"summary":"List packaging levels","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"role":{"type":"string"},"role_id":{"type":"string"},"role_set_id":{"type":"string"},"role_name":{"type":"string"},"sort_order":{"type":"integer"},"capabilities":{"type":"object","properties":{"identifiers":{"type":"boolean"},"quantityRelation":{"type":"boolean"},"dimensions":{"type":"boolean"},"weights":{"type":"boolean"},"volume":{"type":"boolean"},"logistics":{"type":"boolean"}},"required":["identifiers","quantityRelation","dimensions","weights","volume","logistics"]}},"required":["id","name","code","is_active","role","role_id","role_set_id","role_name","sort_order","capabilities"]}},"example":[{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Example","code":"example","is_active":true,"role":"consumer_unit","role_id":"4b6dbf24-e3b8-4a53-a56c-4209f950698b","role_set_id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","role_name":"Consumer unit","sort_order":0,"capabilities":{"identifiers":true,"quantityRelation":true,"dimensions":true,"weights":true,"volume":true,"logistics":false}}]}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Structures"],"summary":"Create packaging level","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"roleId":{"type":"string"},"sortOrder":{"type":"integer"},"isActive":{"type":"boolean"},"capabilities":{"type":"object","properties":{"identifiers":{"type":"boolean"},"quantityRelation":{"type":"boolean"},"dimensions":{"type":"boolean"},"weights":{"type":"boolean"},"volume":{"type":"boolean"},"logistics":{"type":"boolean"}}}}},"example":{"name":"Case","code":"case","roleId":"4b6dbf24-e3b8-4a53-a56c-4209f950698b","sortOrder":0,"isActive":true,"capabilities":{"identifiers":true,"quantityRelation":true,"dimensions":true,"weights":true,"volume":true,"logistics":false}}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"role":{"type":"string"},"role_id":{"type":"string"},"role_set_id":{"type":"string"},"role_name":{"type":"string"},"sort_order":{"type":"integer"},"capabilities":{"type":"object","properties":{"identifiers":{"type":"boolean"},"quantityRelation":{"type":"boolean"},"dimensions":{"type":"boolean"},"weights":{"type":"boolean"},"volume":{"type":"boolean"},"logistics":{"type":"boolean"}},"required":["identifiers","quantityRelation","dimensions","weights","volume","logistics"]}},"required":["id","name","code","is_active","role","role_id","role_set_id","role_name","sort_order","capabilities"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Example","code":"example","is_active":true,"role":"consumer_unit","role_id":"4b6dbf24-e3b8-4a53-a56c-4209f950698b","role_set_id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","role_name":"Consumer unit","sort_order":0,"capabilities":{"identifiers":true,"quantityRelation":true,"dimensions":true,"weights":true,"volume":true,"logistics":false}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/packaging-levels/{id}":{"patch":{"tags":["Structures"],"summary":"Update packaging level","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"roleId":{"type":"string"},"sortOrder":{"type":"integer"},"isActive":{"type":"boolean"},"capabilities":{"type":"object","properties":{"identifiers":{"type":"boolean"},"quantityRelation":{"type":"boolean"},"dimensions":{"type":"boolean"},"weights":{"type":"boolean"},"volume":{"type":"boolean"},"logistics":{"type":"boolean"}}}}},"example":{"name":"Case","code":"case","roleId":"4b6dbf24-e3b8-4a53-a56c-4209f950698b","sortOrder":0,"isActive":true,"capabilities":{"identifiers":true,"quantityRelation":true,"dimensions":true,"weights":true,"volume":true,"logistics":false}}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"role":{"type":"string"},"role_id":{"type":"string"},"role_set_id":{"type":"string"},"role_name":{"type":"string"},"sort_order":{"type":"integer"},"capabilities":{"type":"object","properties":{"identifiers":{"type":"boolean"},"quantityRelation":{"type":"boolean"},"dimensions":{"type":"boolean"},"weights":{"type":"boolean"},"volume":{"type":"boolean"},"logistics":{"type":"boolean"}},"required":["identifiers","quantityRelation","dimensions","weights","volume","logistics"]}},"required":["id","name","code","is_active","role","role_id","role_set_id","role_name","sort_order","capabilities"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Example","code":"example","is_active":true,"role":"consumer_unit","role_id":"4b6dbf24-e3b8-4a53-a56c-4209f950698b","role_set_id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","role_name":"Consumer unit","sort_order":0,"capabilities":{"identifiers":true,"quantityRelation":true,"dimensions":true,"weights":true,"volume":true,"logistics":false}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Structures"],"summary":"Delete packaging level","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource deleted or archived.","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}},"required":["deleted"]},"example":{"deleted":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/packaging-role-sets":{"get":{"tags":["Structures"],"summary":"List packaging role sets","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"is_default":{"type":"boolean"},"roles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"role_set_id":{"type":"string"},"code":{"type":"string"},"name":{"type":"string"},"semantic_key":{"type":"string"},"is_base_level":{"type":"boolean"},"capabilities":{"type":"object","properties":{"identifiers":{"type":"boolean"},"quantityRelation":{"type":"boolean"},"dimensions":{"type":"boolean"},"weights":{"type":"boolean"},"volume":{"type":"boolean"},"logistics":{"type":"boolean"}},"required":["identifiers","quantityRelation","dimensions","weights","volume","logistics"]}},"required":["id","role_set_id","code","name","semantic_key","is_base_level","capabilities"]}}},"required":["id","name","code","is_active","is_default","roles"]}},"example":[{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Example","code":"example","is_active":true,"is_default":true,"roles":[{"id":"4b6dbf24-e3b8-4a53-a56c-4209f950698b","role_set_id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","code":"consumer_unit","name":"Consumer unit","semantic_key":"consumer_unit","is_base_level":true,"capabilities":{"identifiers":true,"quantityRelation":true,"dimensions":true,"weights":true,"volume":true,"logistics":false}}]}]}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Structures"],"summary":"Create packaging role set","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"}}},"example":{"name":"Default packaging","code":"default-packaging"}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"is_default":{"type":"boolean"},"sort_order":{"type":"integer"}},"required":["id","name","code","is_active","is_default","sort_order"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Default packaging","code":"default-packaging","is_active":true,"is_default":false,"sort_order":0}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/packaging-role-sets/{id}":{"patch":{"tags":["Structures"],"summary":"Update packaging role set","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"}}},"example":{"name":"Default packaging","code":"default-packaging"}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"is_active":{"type":"boolean"},"is_default":{"type":"boolean"},"sort_order":{"type":"integer"}},"required":["id","name","code","is_active","is_default","sort_order"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Default packaging","code":"default-packaging","is_active":true,"is_default":false,"sort_order":0}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Structures"],"summary":"Delete packaging role set","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource deleted or archived.","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}},"required":["deleted"]},"example":{"deleted":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/product-templates":{"get":{"tags":["Structures"],"summary":"List product templates","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"attributeKeys":{"type":"array","items":{"type":"string"}},"attributeLayout":{"type":"string"},"attributeSplit":{"type":"integer"},"textLayout":{"type":"string"},"textSplit":{"type":"integer"},"is_active":{"type":"boolean"},"productCount":{"type":"integer"}},"required":["id","name","attributeKeys","attributeLayout","attributeSplit","textLayout","textSplit","is_active","productCount"]}},"example":[{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Outdoor products","attributeKeys":["sample_color"],"attributeLayout":"horizontal","attributeSplit":5,"textLayout":"horizontal","textSplit":5,"is_active":true,"productCount":0}]}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Structures"],"summary":"Create product template","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"attributeKeys":{"type":"array","items":{"type":"string"}},"attributeLayout":{"type":"string"},"attributeSplit":{"type":"integer"},"textLayout":{"type":"string"},"textSplit":{"type":"integer"}}},"example":{"name":"Outdoor products","attributeKeys":["sample_color"],"attributeLayout":"horizontal","attributeSplit":5,"textLayout":"horizontal","textSplit":5}}}},"responses":{"200":{"description":"product template created.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"attributeKeys":{"type":"array","items":{"type":"string"}},"attributeLayout":{"type":"string"},"attributeSplit":{"type":"integer"},"textLayout":{"type":"string"},"textSplit":{"type":"integer"},"is_active":{"type":"boolean"},"productCount":{"type":"integer"}},"required":["id","name","attributeKeys","attributeLayout","attributeSplit","textLayout","textSplit","is_active","productCount"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Outdoor products","attributeKeys":["sample_color"],"attributeLayout":"horizontal","attributeSplit":5,"textLayout":"horizontal","textSplit":5,"is_active":true,"productCount":0}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/structures/product-templates/{id}":{"get":{"tags":["Structures"],"summary":"Get product template","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"attributeKeys":{"type":"array","items":{"type":"string"}},"attributeLayout":{"type":"string"},"attributeSplit":{"type":"integer"},"textLayout":{"type":"string"},"textSplit":{"type":"integer"},"is_active":{"type":"boolean"},"productCount":{"type":"integer"}},"required":["id","name","attributeKeys","attributeLayout","attributeSplit","textLayout","textSplit","is_active","productCount"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Outdoor products","attributeKeys":["sample_color"],"attributeLayout":"horizontal","attributeSplit":5,"textLayout":"horizontal","textSplit":5,"is_active":true,"productCount":0}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"patch":{"tags":["Structures"],"summary":"Update product template","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"attributeKeys":{"type":"array","items":{"type":"string"}},"attributeLayout":{"type":"string"},"attributeSplit":{"type":"integer"},"textLayout":{"type":"string"},"textSplit":{"type":"integer"}}},"example":{"name":"Outdoor products","attributeKeys":["sample_color"],"attributeLayout":"horizontal","attributeSplit":5,"textLayout":"horizontal","textSplit":5}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"attributeKeys":{"type":"array","items":{"type":"string"}},"attributeLayout":{"type":"string"},"attributeSplit":{"type":"integer"},"textLayout":{"type":"string"},"textSplit":{"type":"integer"},"is_active":{"type":"boolean"},"productCount":{"type":"integer"}},"required":["id","name","attributeKeys","attributeLayout","attributeSplit","textLayout","textSplit","is_active","productCount"]},"example":{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Outdoor products","attributeKeys":["sample_color"],"attributeLayout":"horizontal","attributeSplit":5,"textLayout":"horizontal","textSplit":5,"is_active":true,"productCount":0}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Structures"],"summary":"Delete product template","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource deleted or archived.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]},"example":{"ok":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/feeds":{"get":{"tags":["Feeds"],"summary":"List feeds","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"outputFormat":{"type":"string"},"deliveryMethod":{"type":"string"},"status":{"type":"string"},"productsIncluded":{"type":"integer"},"lastRunAt":{"type":"string"},"errorCount":{"type":"integer"},"channelId":{"nullable":true},"scheduleType":{"type":"string"},"scheduleTime":{"nullable":true},"scheduleTimezone":{"type":"string"},"scheduleEnabled":{"type":"boolean"}},"required":["id","name","outputFormat","deliveryMethod","status","productsIncluded","lastRunAt","errorCount","channelId","scheduleType","scheduleTime","scheduleTimezone","scheduleEnabled"]}},"example":[{"id":"7f4319e6-d3e4-4531-a619-8b9507a8a1c0","name":"Marketplace product feed","outputFormat":"CSV","deliveryMethod":"Manual","status":"ready","productsIncluded":120,"lastRunAt":"2026-07-22T12:00:00.000Z","errorCount":0,"channelId":null,"scheduleType":"manual","scheduleTime":null,"scheduleTimezone":"Europe/Oslo","scheduleEnabled":false}]}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Feeds"],"summary":"Create feed","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"outputFormat":{"type":"string"},"deliveryMethod":{"type":"string"}}},"example":{"name":"Marketplace product feed","description":"Daily product feed for marketplace channel.","outputFormat":"CSV","deliveryMethod":"Manual"}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The feed configuration is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The feed configuration is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/feeds/{id}":{"get":{"tags":["Feeds"],"summary":"Get feed","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Feed not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Feed not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"patch":{"tags":["Feeds"],"summary":"Update feed","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"outputFormat":{"type":"string"},"deliveryMethod":{"type":"string"},"scheduleType":{"type":"string"},"scheduleEnabled":{"type":"boolean"},"selectionRules":{"type":"array","items":{"type":"object","properties":{"ruleType":{"type":"string"},"operator":{"type":"string"},"value":{"type":"array","items":{"type":"string"}}}}},"mappingRules":{"type":"array","items":{"type":"object","properties":{"sourceField":{"type":"string"},"destinationField":{"type":"string"}}}},"validationRules":{"type":"array","items":{"type":"object","properties":{"ruleType":{"type":"string"}}}}}},"example":{"name":"Marketplace product feed","description":"Daily product feed for marketplace channel.","outputFormat":"CSV","deliveryMethod":"Manual","scheduleType":"manual","scheduleEnabled":false,"selectionRules":[{"ruleType":"product_kind","operator":"in","value":["standard","bundle","assortment"]}],"mappingRules":[{"sourceField":"sku","destinationField":"sku"},{"sourceField":"name","destinationField":"title","locale":"en"},{"sourceField":"product_kind","destinationField":"product_kind"},{"sourceField":"category_paths","destinationField":"category_paths","transform":{"join":" | "}},{"sourceField":"bundle_components","destinationField":"bundle_components"},{"sourceField":"assortment_items","destinationField":"assortment_items"},{"sourceField":"colli","destinationField":"colli"},{"sourceField":"relations","destinationField":"relations"},{"sourceField":"product_collection_codes","destinationField":"product_collection_codes"}],"validationRules":[{"ruleType":"bundle_has_components"},{"ruleType":"assortment_has_items"},{"ruleType":"category_required"}]}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The feed update payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The feed update payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Feed not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Feed not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Feeds"],"summary":"Delete feed","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource deleted or archived.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Feed not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Feed not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/feeds/{id}/run":{"post":{"tags":["Feeds"],"summary":"Run feed now","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Feed run started or returned from its idempotent result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Feed not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Feed not found."}}}},"409":{"description":"A feed run is already queued or running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"A feed run is already queued or running."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/import-runs":{"get":{"tags":["Imports"],"summary":"List import runs","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"}},"/api/v1/import-runs/{id}":{"get":{"tags":["Imports"],"summary":"Get import run","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Import run not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Import run not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"}},"/api/v1/imports/jobs":{"post":{"tags":["Imports"],"summary":"Queue product import job","description":"Queue normalized product import rows for background processing. This endpoint does not accept CSV or Excel files; the caller sends product rows as JSON. Use this for larger product imports where the caller should receive a job id and poll import runs instead of waiting for the full import to complete in the request.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"sku":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"productKind":{"type":"string"},"assortmentDescription":{"type":"string"}}}},"sourceFilename":{"type":"string"},"identifierKey":{"type":"string"},"importMode":{"type":"string"},"validation":{"type":"object","properties":{"status":{"type":"string"},"errors":{"type":"integer"},"total":{"type":"integer"}}},"mappingSummary":{"type":"object","properties":{"mappedFieldsCount":{"type":"integer"},"attributesCount":{"type":"integer"},"ignoredFieldsCount":{"type":"integer"}}}}},"example":{"rows":[{"rowIndex":1,"sku":"API-IMPORT-JOB-{{$timestamp}}","name":"API import job product","status":"active","productKind":"assortment","assortmentDescription":"Contains one small and one medium item packed as one sellable assortment."}],"sourceFilename":"api-product-import.json","identifierKey":"sku","importMode":"upsert","validation":{"status":"valid","errors":0,"total":1},"mappingSummary":{"mappedFieldsCount":4,"attributesCount":0,"ignoredFieldsCount":0}}}}},"responses":{"202":{"description":"Product import job accepted and queued.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The product import job payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The product import job payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"413":{"description":"The product import is too large for a single request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The product import is too large for a single request."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"503":{"description":"Background import processing is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Background import processing is temporarily unavailable."}}}}},"x-avut-scope":"write"}},"/api/v1/imports/apply":{"post":{"tags":["Imports"],"summary":"Apply product import rows","description":"Apply normalized product import rows immediately in the request. This endpoint does not accept CSV or Excel files; the caller sends product rows as JSON together with validation metadata. Use this for small product imports where the caller can wait for the request to complete. For larger imports, prefer Queue product import job.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"sku":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"productKind":{"type":"string"},"productGroup":{"type":"string"}}}},"sourceFilename":{"type":"string"},"identifierKey":{"type":"string"},"importMode":{"type":"string"},"validation":{"type":"object","properties":{"status":{"type":"string"},"errors":{"type":"integer"},"total":{"type":"integer"}}},"mappingSummary":{"type":"object","properties":{"mappedFieldsCount":{"type":"integer"},"attributesCount":{"type":"integer"},"ignoredFieldsCount":{"type":"integer"}}}}},"example":{"rows":[{"rowIndex":1,"sku":"API-IMPORT-APPLY-{{$timestamp}}","name":"API import apply product","status":"active","productKind":"bundle","productGroup":"bundles"}],"sourceFilename":"api-product-import.json","identifierKey":"sku","importMode":"upsert","validation":{"status":"valid","errors":0,"total":1},"mappingSummary":{"mappedFieldsCount":3,"attributesCount":0,"ignoredFieldsCount":0}}}}},"responses":{"200":{"description":"Product import rows applied.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The product import apply request is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The product import apply request is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"description":"The product import apply rate limit was exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The product import apply rate limit was exceeded."}}}},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/imports/products/validate":{"post":{"tags":["Imports"],"summary":"Validate product import rows","description":"Validate normalized product import rows before applying or queueing a product import. This endpoint does not accept CSV or Excel files and does not write product data; it returns validation errors and warnings for the proposed JSON rows.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"importMode":{"type":"string"},"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"sku":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"productKind":{"type":"string"}}}}}},"example":{"importMode":"upsert","rows":[{"rowIndex":1,"sku":"API-IMPORT-VALIDATE-{{$timestamp}}","name":"API import validation product","status":"active","productKind":"standard"}]}}}},"responses":{"200":{"description":"Product import rows validated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The product import rows or mapping metadata are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The product import rows or mapping metadata are invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"413":{"description":"The product import rows exceed the accepted size or row limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The product import rows exceed the accepted size or row limit."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/imports/product-collections/validate":{"post":{"tags":["Imports"],"summary":"Validate product collection import rows","description":"Validate flat product collection membership rows before applying them. This endpoint does not accept CSV or Excel files; send parsed rows as JSON.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"collection_code":{"type":"string"},"collection_name":{"type":"string"},"product_sku":{"type":"string"},"action":{"type":"string"}}}}}},"example":{"rows":[{"rowIndex":1,"collection_code":"winter-campaign","collection_name":"Winter campaign","product_sku":"KIT-WINTER-ACCESSORY","action":"add"}]}}}},"responses":{"200":{"description":"Product collection rows validated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The product collection import rows are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The product collection import rows are invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/imports/product-collections/apply":{"post":{"tags":["Imports"],"summary":"Apply product collection import rows","description":"Adds or removes products in collections from flat rows. Add collection_name to create a missing manual collection.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"collection_code":{"type":"string"},"collection_name":{"type":"string"},"product_sku":{"type":"string"},"action":{"type":"string"}}}}}},"example":{"rows":[{"rowIndex":1,"collection_code":"winter-campaign","collection_name":"Winter campaign","product_sku":"KIT-WINTER-ACCESSORY","action":"add"}]}}}},"responses":{"200":{"description":"Product collection rows applied.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Validation failed."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"description":"The product collection import apply rate limit was exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The product collection import apply rate limit was exceeded."}}}},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/imports/product-bundles/validate":{"post":{"tags":["Imports"],"summary":"Validate product bundle import rows","description":"Validate normalized JSON rows for product bundle data. This endpoint does not accept CSV or Excel files.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string"},"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"bundle_sku":{"type":"string"},"component_sku":{"type":"string"},"quantity":{"type":"string"},"sort_order":{"type":"string"}}}}}},"example":{"mode":"upsert","rows":[{"rowIndex":1,"bundle_sku":"BUNDLE-001","component_sku":"PRODUCT-001","quantity":"1","sort_order":"0"}]}}}},"responses":{"200":{"description":"product bundle import rows validated.","content":{"application/json":{"schema":{"type":"object","properties":{"summary":{"type":"object","properties":{"total":{"type":"integer"},"errors":{"type":"integer"},"warnings":{"type":"integer"},"willCreate":{"type":"integer"},"willUpdate":{"type":"integer"},"willSkip":{"type":"integer"}},"required":["total","errors","warnings","willCreate","willUpdate","willSkip"]},"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"action":{"type":"string"},"normalized":{"type":"object","properties":{}}},"required":["rowIndex","action","normalized"]}},"issues":{"type":"array","items":{}}},"required":["summary","rows","issues"]},"example":{"summary":{"total":1,"errors":0,"warnings":0,"willCreate":1,"willUpdate":0,"willSkip":0},"rows":[{"rowIndex":1,"action":"create","normalized":{}}],"issues":[]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/imports/product-bundles/apply":{"post":{"tags":["Imports"],"summary":"Apply product bundle import rows","description":"Apply normalized JSON rows for product bundle data. This endpoint does not accept CSV or Excel files.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string"},"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"bundle_sku":{"type":"string"},"component_sku":{"type":"string"},"quantity":{"type":"string"},"sort_order":{"type":"string"}}}}}},"example":{"mode":"upsert","rows":[{"rowIndex":1,"bundle_sku":"BUNDLE-001","component_sku":"PRODUCT-001","quantity":"1","sort_order":"0"}]}}}},"responses":{"200":{"description":"product bundle import rows applied.","content":{"application/json":{"schema":{"type":"object","properties":{"summary":{"type":"object","properties":{"total":{"type":"integer"},"created":{"type":"integer"},"updated":{"type":"integer"},"skipped":{"type":"integer"},"failed":{"type":"integer"}},"required":["total","created","updated","skipped","failed"]},"results":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"action":{"type":"string"}},"required":["rowIndex","action"]}}},"required":["summary","results"]},"example":{"summary":{"total":1,"created":1,"updated":0,"skipped":0,"failed":0},"results":[{"rowIndex":1,"action":"created"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/imports/product-assortments/validate":{"post":{"tags":["Imports"],"summary":"Validate product assortment import rows","description":"Validate normalized JSON rows for product assortment data. This endpoint does not accept CSV or Excel files.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"product_sku":{"type":"string"},"item_type":{"type":"string"},"label":{"type":"string"},"item_sku":{"type":"string"},"quantity":{"type":"string"},"sort_order":{"type":"string"}}}}}},"example":{"rows":[{"rowIndex":1,"product_sku":"ASSORTMENT-001","item_type":"product","label":"Included product","item_sku":"PRODUCT-001","quantity":"1","sort_order":"0"}]}}}},"responses":{"200":{"description":"product assortment import rows validated.","content":{"application/json":{"schema":{"type":"object","properties":{"summary":{"type":"object","properties":{"total":{"type":"integer"},"errors":{"type":"integer"},"warnings":{"type":"integer"},"willReplace":{"type":"integer"},"products":{"type":"integer"}},"required":["total","errors","warnings","willReplace","products"]},"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"action":{"type":"string"},"normalized":{"type":"object","properties":{}}},"required":["rowIndex","action","normalized"]}},"issues":{"type":"array","items":{}}},"required":["summary","rows","issues"]},"example":{"summary":{"total":1,"errors":0,"warnings":0,"willReplace":1,"products":1},"rows":[{"rowIndex":1,"action":"replace","normalized":{}}],"issues":[]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/imports/product-assortments/apply":{"post":{"tags":["Imports"],"summary":"Apply product assortment import rows","description":"Apply normalized JSON rows for product assortment data. This endpoint does not accept CSV or Excel files.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"product_sku":{"type":"string"},"item_type":{"type":"string"},"label":{"type":"string"},"item_sku":{"type":"string"},"quantity":{"type":"string"},"sort_order":{"type":"string"}}}}}},"example":{"rows":[{"rowIndex":1,"product_sku":"ASSORTMENT-001","item_type":"product","label":"Included product","item_sku":"PRODUCT-001","quantity":"1","sort_order":"0"}]}}}},"responses":{"200":{"description":"product assortment import rows applied.","content":{"application/json":{"schema":{"type":"object","properties":{"summary":{"type":"object","properties":{"total":{"type":"integer"},"created":{"type":"integer"},"updated":{"type":"integer"},"skipped":{"type":"integer"},"failed":{"type":"integer"}},"required":["total","created","updated","skipped","failed"]},"results":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"action":{"type":"string"}},"required":["rowIndex","action"]}}},"required":["summary","results"]},"example":{"summary":{"total":1,"created":0,"updated":1,"skipped":0,"failed":0},"results":[{"rowIndex":1,"action":"updated"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/imports/product-packaging/validate":{"post":{"tags":["Imports"],"summary":"Validate product packaging import rows","description":"Validate normalized JSON rows for product packaging data. This endpoint does not accept CSV or Excel files.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"product_sku":{"type":"string"},"colli":{"type":"string"},"role_code":{"type":"string"},"type_code":{"type":"string"},"quantity":{"type":"string"},"dimension_unit":{"type":"string"},"weight_unit":{"type":"string"}}}}}},"example":{"rows":[{"rowIndex":1,"product_sku":"PRODUCT-001","colli":"1","role_code":"consumer_unit","type_code":"each","quantity":"1","dimension_unit":"cm","weight_unit":"kg"}]}}}},"responses":{"200":{"description":"product packaging import rows validated.","content":{"application/json":{"schema":{"type":"object","properties":{"summary":{"type":"object","properties":{"total":{"type":"integer"},"errors":{"type":"integer"},"warnings":{"type":"integer"},"willReplace":{"type":"integer"},"products":{"type":"integer"}},"required":["total","errors","warnings","willReplace","products"]},"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"action":{"type":"string"},"normalized":{"type":"object","properties":{}}},"required":["rowIndex","action","normalized"]}},"issues":{"type":"array","items":{}}},"required":["summary","rows","issues"]},"example":{"summary":{"total":1,"errors":0,"warnings":0,"willReplace":1,"products":1},"rows":[{"rowIndex":1,"action":"replace","normalized":{}}],"issues":[]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/imports/product-packaging/apply":{"post":{"tags":["Imports"],"summary":"Apply product packaging import rows","description":"Apply normalized JSON rows for product packaging data. This endpoint does not accept CSV or Excel files.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"product_sku":{"type":"string"},"colli":{"type":"string"},"role_code":{"type":"string"},"type_code":{"type":"string"},"quantity":{"type":"string"},"dimension_unit":{"type":"string"},"weight_unit":{"type":"string"}}}}}},"example":{"rows":[{"rowIndex":1,"product_sku":"PRODUCT-001","colli":"1","role_code":"consumer_unit","type_code":"each","quantity":"1","dimension_unit":"cm","weight_unit":"kg"}]}}}},"responses":{"200":{"description":"product packaging import rows applied.","content":{"application/json":{"schema":{"type":"object","properties":{"summary":{"type":"object","properties":{"total":{"type":"integer"},"created":{"type":"integer"},"updated":{"type":"integer"},"skipped":{"type":"integer"},"failed":{"type":"integer"}},"required":["total","created","updated","skipped","failed"]},"results":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"action":{"type":"string"}},"required":["rowIndex","action"]}}},"required":["summary","results"]},"example":{"summary":{"total":1,"created":0,"updated":1,"skipped":0,"failed":0},"results":[{"rowIndex":1,"action":"updated"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/imports/product-relations/validate":{"post":{"tags":["Imports"],"summary":"Validate product relation import rows","description":"Validate normalized JSON rows for product relation data. This endpoint does not accept CSV or Excel files.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string"},"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"source_sku":{"type":"string"},"target_sku":{"type":"string"},"relation_type_code":{"type":"string"},"sort_order":{"type":"string"}}}}}},"example":{"mode":"upsert","rows":[{"rowIndex":1,"source_sku":"PRODUCT-001","target_sku":"PRODUCT-002","relation_type_code":"accessory","sort_order":"0"}]}}}},"responses":{"200":{"description":"product relation import rows validated.","content":{"application/json":{"schema":{"type":"object","properties":{"summary":{"type":"object","properties":{"total":{"type":"integer"},"errors":{"type":"integer"},"warnings":{"type":"integer"},"willCreate":{"type":"integer"},"willUpdate":{"type":"integer"},"willSkip":{"type":"integer"}},"required":["total","errors","warnings","willCreate","willUpdate","willSkip"]},"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"action":{"type":"string"},"normalized":{"type":"object","properties":{}}},"required":["rowIndex","action","normalized"]}},"issues":{"type":"array","items":{}}},"required":["summary","rows","issues"]},"example":{"summary":{"total":1,"errors":0,"warnings":0,"willCreate":1,"willUpdate":0,"willSkip":0},"rows":[{"rowIndex":1,"action":"create","normalized":{}}],"issues":[]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/imports/product-relations/apply":{"post":{"tags":["Imports"],"summary":"Apply product relation import rows","description":"Apply normalized JSON rows for product relation data. This endpoint does not accept CSV or Excel files.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string"},"rows":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"source_sku":{"type":"string"},"target_sku":{"type":"string"},"relation_type_code":{"type":"string"},"sort_order":{"type":"string"}}}}}},"example":{"mode":"upsert","rows":[{"rowIndex":1,"source_sku":"PRODUCT-001","target_sku":"PRODUCT-002","relation_type_code":"accessory","sort_order":"0"}]}}}},"responses":{"200":{"description":"product relation import rows applied.","content":{"application/json":{"schema":{"type":"object","properties":{"summary":{"type":"object","properties":{"total":{"type":"integer"},"created":{"type":"integer"},"updated":{"type":"integer"},"skipped":{"type":"integer"},"failed":{"type":"integer"}},"required":["total","created","updated","skipped","failed"]},"results":{"type":"array","items":{"type":"object","properties":{"rowIndex":{"type":"integer"},"action":{"type":"string"}},"required":["rowIndex","action"]}}},"required":["summary","results"]},"example":{"summary":{"total":1,"created":1,"updated":0,"skipped":0,"failed":0},"results":[{"rowIndex":1,"action":"created"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/attributes":{"get":{"tags":["Structures"],"summary":"List attributes","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Structures"],"summary":"Create attribute","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"type":{"type":"string"},"text_mode":{"type":"string"},"attribute_group":{"type":"string"}}},"example":{"key":"sample_color","label":"Sample color","type":"text","text_mode":"single_line","attribute_group":"sample_content"}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The attribute definition is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The attribute definition is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"description":"An attribute with the same key already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"An attribute with the same key already exists."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/attributes/{key}":{"get":{"tags":["Structures"],"summary":"Get attribute","parameters":[{"name":"key","in":"path","required":true,"description":"key path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Attribute not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Attribute not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"patch":{"tags":["Structures"],"summary":"Update attribute","parameters":[{"name":"key","in":"path","required":true,"description":"key path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"},"type":{"type":"string"},"text_mode":{"type":"string"},"attribute_group":{"type":"string"},"required":{"type":"boolean"}}},"example":{"label":"Sample color","type":"text","text_mode":"single_line","attribute_group":"sample_content","required":false}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The attribute update payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The attribute update payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Attribute not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Attribute not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Structures"],"summary":"Delete attribute","parameters":[{"name":"key","in":"path","required":true,"description":"key path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource deleted or archived.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Attribute not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Attribute not found."}}}},"409":{"description":"The attribute is still used by products, templates, or imports.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The attribute is still used by products, templates, or imports."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/value-lists":{"get":{"tags":["Structures"],"summary":"List value lists","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"post":{"tags":["Structures"],"summary":"Create value list","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"name_i18n":{"type":"object","properties":{"en":{"type":"string"},"nb":{"type":"string"}}},"values":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"},"label_i18n":{"type":"object","properties":{"en":{"type":"string"},"nb":{"type":"string"}}},"is_active":{"type":"boolean"}}}}}},"example":{"key":"sample_colors","name":"Sample colors","name_i18n":{"en":"Sample colors","nb":"Eksempelfarger"},"values":[{"value":"black","label":"Black","label_i18n":{"en":"Black","nb":"Svart"},"is_active":true},{"value":"blue","label":"Blue","label_i18n":{"en":"Blue","nb":"Bla"},"is_active":true}]}}}},"responses":{"201":{"description":"Resource created.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The value list payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The value list payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"description":"A value list with the same key already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"A value list with the same key already exists."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/value-lists/{id}":{"get":{"tags":["Structures"],"summary":"Get value list","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Value list not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Value list not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"},"patch":{"tags":["Structures"],"summary":"Update value list","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"name_i18n":{"type":"object","properties":{"en":{"type":"string"},"nb":{"type":"string"}}},"is_active":{"type":"boolean"},"values":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"},"label_i18n":{"type":"object","properties":{"en":{"type":"string"},"nb":{"type":"string"}}},"is_active":{"type":"boolean"}}}}}},"example":{"name":"Sample colors","name_i18n":{"en":"Sample colors","nb":"Eksempelfarger"},"is_active":true,"values":[{"value":"black","label":"Black","label_i18n":{"en":"Black","nb":"Svart"},"is_active":true},{"value":"blue","label":"Blue","label_i18n":{"en":"Blue","nb":"Bla"},"is_active":true}]}}}},"responses":{"200":{"description":"Resource updated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"The value list update payload is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The value list update payload is invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Value list not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Value list not found."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"},"delete":{"tags":["Structures"],"summary":"Delete value list","parameters":[{"name":"id","in":"path","required":true,"description":"id path parameter.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource deleted or archived.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Value list not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Value list not found."}}}},"409":{"description":"The value list is still used by attributes or products.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The value list is still used by attributes or products."}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"write"}},"/api/v1/search":{"get":{"tags":["Search"],"summary":"Global search","parameters":[{"name":"q","in":"query","required":true,"description":"Search query.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum total results to return. Defaults to 40 and is capped at 200.","schema":{"type":"integer"},"example":40}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"400":{"description":"The search query is invalid or too short.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The search query is invalid or too short."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"}},"/api/v1/tariff/signals":{"get":{"tags":["Tariff"],"summary":"Resolve tariff compliance signals","description":"Checks supplied tariff codes for compliance signals. Send eu_taric_code to check whether an EU TARIC code has anti-dumping/countervailing context. Send no_tariff_code to check whether a Norwegian tariff code has high-duty risk. The endpoint does not classify products; it evaluates the codes you provide.","parameters":[{"name":"eu_taric_code","in":"query","required":false,"description":"EU TARIC code to check for anti-dumping/countervailing context. Required if you want the anti_dumping signal.","schema":{"type":"string"},"example":"6911100000"},{"name":"no_tariff_code","in":"query","required":false,"description":"Norwegian Tolltariff code to check for high-duty risk. Required if you want the high_duty signal.","schema":{"type":"string"},"example":"69111000"},{"name":"anti_dumping_declared","in":"query","required":false,"description":"EU-only. Set false when you want to know if the supplied eu_taric_code appears to need anti-dumping review and no declaration is registered. Set true when the caller already has a declaration.","schema":{"type":"boolean"},"example":false},{"name":"taric_additional_codes","in":"query","required":false,"description":"EU-only. Comma-separated TARIC additional codes already known or declared for the product, for example B999.","schema":{"type":"string"}}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TariffSignalsResponse"}}}},"400":{"description":"One or more tariff codes are missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"One or more tariff codes are missing or invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"x-avut-scope":"read"}},"/api/v1/tariff/lookup":{"get":{"tags":["Tariff"],"summary":"Lookup tariff code","description":"Returns deterministic tariff data for a supplied EU TARIC or Norwegian Tolltariff code. Use this endpoint to resolve descriptions, hierarchy, duties, measures, and optional compliance signals for a code you already have. This endpoint does not classify or suggest tariff codes.","parameters":[{"name":"code","in":"query","required":true,"description":"Tariff code or hierarchy level to look up. TARIC accepts 2, 4, 6, 8, or 10 digits. Norwegian tariff accepts 2, 4, 6, or 8 digits. Full duty/measure details are only available from commodity-level codes.","schema":{"type":"string"},"example":"6204310000"},{"name":"source","in":"query","required":false,"description":"Tariff source to search. Valid values: taric, no, all. Defaults to all.","schema":{"type":"string"},"example":"taric"},{"name":"include_duties","in":"query","required":false,"description":"Set true to include Norwegian duty/rate details when source includes no. Defaults to true.","schema":{"type":"boolean"},"example":true},{"name":"include_measures","in":"query","required":false,"description":"Set true to include EU TARIC measure details when source includes taric. Defaults to true.","schema":{"type":"boolean"},"example":true},{"name":"include_preferential","in":"query","required":false,"description":"Set true to include Norwegian preferential agreement data when source includes no. Defaults to include_duties.","schema":{"type":"boolean"},"example":true},{"name":"include_signals","in":"query","required":false,"description":"Set true to include the same high-duty and anti-dumping compliance signals returned by /tariff/signals. Defaults to false.","schema":{"type":"boolean"},"example":false}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Resource returned.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"requestedCode":{"type":"string"},"normalizedCode":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"found":{"type":"boolean"},"code":{"type":"object","properties":{"source":{"type":"string"},"code":{"type":"string"},"chapter2":{"type":"string"},"heading4":{"type":"string"},"subheading6":{"type":"string"},"commodity8":{"type":"string"},"level":{"type":"string"},"descriptions":{"type":"object","properties":{"en":{"type":"string"}},"required":["en"]},"declarable":{"type":"boolean"},"parentCode":{"type":"string"}},"required":["source","code","chapter2","heading4","subheading6","commodity8","level","descriptions","declarable","parentCode"]},"hierarchy":{"type":"object","properties":{"chapter":{"type":"object","properties":{"code":{"type":"string"},"descriptions":{"type":"object","properties":{"en":{"type":"string"}},"required":["en"]}},"required":["code","descriptions"]},"heading":{"type":"object","properties":{"code":{"type":"string"},"descriptions":{"type":"object","properties":{"en":{"type":"string"}},"required":["en"]}},"required":["code","descriptions"]},"subheading":{"type":"object","properties":{"code":{"type":"string"},"descriptions":{"type":"object","properties":{"en":{"type":"string"}},"required":["en"]}},"required":["code","descriptions"]},"commodity":{"type":"object","properties":{"code":{"type":"string"},"descriptions":{"type":"object","properties":{"en":{"type":"string"}},"required":["en"]}},"required":["code","descriptions"]}},"required":["chapter","heading","subheading","commodity"]},"taricMeasures":{"type":"array","items":{}},"taricThirdCountryDuty":{"nullable":true}},"required":["source","found","code","hierarchy","taricMeasures","taricThirdCountryDuty"]}}},"required":["requestedCode","normalizedCode","sources"]}},"required":["data"]},"example":{"data":{"requestedCode":"6204310000","normalizedCode":"6204310000","sources":[{"source":"taric","found":true,"code":{"source":"taric","code":"6204310000","chapter2":"62","heading4":"6204","subheading6":"620431","commodity8":"62043100","level":"commodity","descriptions":{"en":"Jackets and blazers"},"declarable":true,"parentCode":"62043100"},"hierarchy":{"chapter":{"code":"62","descriptions":{"en":"Articles of apparel and clothing accessories, not knitted or crocheted"}},"heading":{"code":"6204","descriptions":{"en":"Women's or girls' suits, ensembles, jackets, blazers, dresses, skirts..."}},"subheading":{"code":"620431","descriptions":{"en":"Jackets and blazers"}},"commodity":{"code":"62043100","descriptions":{"en":"Jackets and blazers"}}},"taricMeasures":[],"taricThirdCountryDuty":null}]}}}}},"400":{"description":"The code or source is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"The code or source is missing or invalid."}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/QuotaExceeded"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"503":{"description":"Tariff index is not available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"Tariff index is not available."}}}}},"x-avut-scope":"read"}}}}