From 0533ef092fd182b28d71f9c6ed4c6f42b0711e02 Mon Sep 17 00:00:00 2001 From: shopwareBot Date: Fri, 27 Mar 2026 09:21:29 +0000 Subject: [PATCH] [create-pull-request] automated change --- storeapi.json | 15578 ++++++++++++++++++++++++------------------------ 1 file changed, 7787 insertions(+), 7791 deletions(-) diff --git a/storeapi.json b/storeapi.json index f78c19d..b6f5e6d 100644 --- a/storeapi.json +++ b/storeapi.json @@ -3615,6 +3615,10 @@ "description": "Technical name of document type.", "type": "string" }, + "customFields": { + "type": "object", + "description": "Additional fields that offer a possibility to add own fields for the different program-areas." + }, "createdAt": { "type": "string", "format": "date-time", @@ -3625,10 +3629,6 @@ "format": "date-time", "readOnly": true }, - "customFields": { - "type": "object", - "description": "Additional fields that offer a possibility to add own fields for the different program-areas." - }, "translated": { "type": "object", "description": "Contains the translations of all translated fields." @@ -11848,799 +11848,630 @@ }, "type": "object" }, - "ProductDetailResponse": { + "Cart": { "type": "object", - "description": "Represents a product along with detailed information required to display a variant selection.", "properties": { - "product": { - "$ref": "#/components/schemas/Product" + "name": { + "description": "Name of the cart - for example `guest-cart`", + "type": "string" }, - "configurator": { + "token": { + "description": "Context token identifying the cart and the user session", + "type": "string" + }, + "price": { + "$ref": "#/components/schemas/CalculatedPrice" + }, + "lineItems": { + "description": "All items within the cart", "type": "array", - "description": "List of property groups with their corresponding options and information on how to display them.", "items": { - "$ref": "#/components/schemas/PropertyGroup" + "$ref": "#/components/schemas/LineItem" } }, - "id": { - "description": "Unique identity of product detail response." - }, - "available": { - "description": "When boolean value is true, the product is available for purchase." - }, - "isCloseout": { - "description": "Boolean value to check if the product is still buyable when stock value is 0." - }, - "displayGroup": { - "description": "Internal field." - }, - "manufacturerNumber": { - "description": "Unique number of the product manufacturer." - }, - "stock": { - "description": "Quantity of product available." - }, - "sortedProperties": { - "description": "Properties of the product that are sorted" - } - }, - "required": [ - "product" - ] - }, - "CartDeliveryPosition": { - "type": "object", - "description": "A list of all cart errors, such as insufficient stocks, invalid addresses or vouchers.", - "properties": { - "deliveryDate": { + "errors": { "type": "object", + "description": "A list of all cart errors, such as insufficient stocks, invalid addresses or vouchers.", + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/CartError" + } + }, + { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "code": { + "type": "number" + }, + "key": { + "type": "string" + }, + "level": { + "type": "number" + }, + "message": { + "type": "string" + }, + "messageKey": { + "type": "string" + } + }, + "required": [ + "code", + "key", + "level", + "message", + "messageKey" + ] + } + } + ], "properties": { - "earliest": { - "type": "string", - "format": "date-time" + "key": { + "description": "Unique key for every message." }, - "latest": { - "type": "string", - "format": "date-time" + "level": { + "description": "Types of level - Notice, warning and error. " + }, + "message": { + "description": "A persistent error passed from the shopping cart calculation processes to the user end." } } }, - "identifier": { - "type": "string" - }, - "lineItem": { - "$ref": "#/components/schemas/LineItem" + "deliveries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CartDelivery" + } }, - "price": { - "$ref": "#/components/schemas/CalculatedPrice" - } - } - }, - "CartItems": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { + "transactions": { + "description": "A list of all payment transactions associated with the current cart.", "type": "array", "items": { - "$ref": "#/components/schemas/LineItem" + "type": "object", + "properties": { + "paymentMethodId": { + "type": "string" + }, + "amount": { + "$ref": "#/components/schemas/CalculatedPrice" + } + } }, "properties": { - "id": { - "description": "Unique identity of cart item." - }, - "modified": { - "description": "When boolean value is `true`, the cart is said to be modified." + "paymentMethodId": { + "description": "Unique identity of payment method." } } - } - } - }, - "CookieGroup": { - "type": "object", - "properties": { - "isRequired": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" }, - "cookie": { - "type": "string" + "modified": { + "type": "boolean", + "description": "It signifies any changes to cart." }, - "value": { - "type": "string" + "customerComment": { + "description": "A comment that can be added to the cart.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - "expiration": { - "type": "integer" + "affiliateCode": { + "description": "An affiliate tracking code", + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - "entries": { - "$ref": "#/components/schemas/CookieEntryCollection" + "campaignCode": { + "description": "A campaign tracking code", + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, "apiAlias": { "type": "string", "enum": [ - "cookie_group" + "cart" ] + }, + "id": { + "description": "Unique identity of cart." } }, - "not": { - "allOf": [ - { - "required": [ - "cookie" - ] - }, - { - "required": [ - "entries" - ] - } - ] - }, "required": [ - "name", - "isRequired", + "price", "apiAlias" ] }, - "CartPriceQuantity": { + "Association": { + "additionalProperties": { + "$ref": "#/components/schemas/Association" + } + }, + "Breadcrumb": { "type": "object", "properties": { - "apiAlias": { - "type": "string", - "enum": [ - "cart_price_quantity" - ] + "name": { + "type": "string" }, - "isCalculated": { - "type": "boolean" + "categoryId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" }, - "listPrice": { - "$ref": "#/components/schemas/CartListPrice" + "type": { + "$ref": "#/components/schemas/Category/properties/type" }, - "price": { - "type": "number" - }, - "quantity": { - "type": "number" - }, - "regulationPrice": { + "translated": { + "type": "object", + "additionalProperties": true, "properties": { - "price": { - "type": "number", - "format": "float" + "customFields": { + "type": "object" + }, + "slotConfig": { + "type": "object" + }, + "linkType": { + "$ref": "#/components/schemas/Category/properties/linkType" + }, + "internalLink": { + "type": "string" + }, + "externalLink": { + "type": "string" + }, + "linkNewTab": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "metaTitle": { + "type": "string" + }, + "metaDescription": { + "type": "string" + }, + "keywords": { + "type": "string" } - }, - "type": "object" + } }, - "taxRules": { + "path": { + "type": "string" + }, + "seoUrls": { "type": "array", "items": { - "type": "object", - "properties": { - "taxRate": { - "type": "number", - "format": "float" - }, - "name": { - "type": "string" - } - } + "$ref": "#/components/schemas/SeoUrl" } }, - "type": { - "type": "string" + "apiAlias": { + "type": "string", + "enum": [ + "breadcrumb" + ] } }, "required": [ + "name", + "categoryId", + "type", + "translated", + "path", "apiAlias" ] }, - "CartPriceReference": { + "CartDeliveryInformation": { "type": "object", "properties": { - "purchaseUnit": { - "type": "number" - }, - "referenceUnit": { - "type": "number" - }, - "unitName": { - "type": "string" - }, - "price": { - "type": "number" - }, "apiAlias": { "type": "string", "enum": [ - "cart_price_reference" - ] - }, - "listPrice": { - "oneOf": [ - { - "$ref": "#/components/schemas/CartListPrice" - }, - { - "type": "null" - } - ] - }, - "regulationPrice": { - "oneOf": [ - { - "type": "object", - "properties": { - "price": { - "type": "number" - }, - "apiAlias": { - "type": "string", - "enum": [ - "cart_regulation_price" - ] - } - } - }, - { - "type": "null" - } + "cart_delivery_information" ] }, - "hasRange": { + "freeDelivery": { "type": "boolean" }, - "variantId": { - "oneOf": [ - { - "type": "string", - "format": "^[0-9a-f]{32}$" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "apiAlias", - "hasRange", - "regulationPrice", - "listPrice", - "calculatedTaxes", - "totalPrice", - "quantity", - "unitName" - ] - }, - "CartDelivery": { - "type": "object", - "description": "A list of all cart errors, such as insufficient stocks, invalid addresses or vouchers.", - "properties": { - "deliveryDate": { + "deliveryTime": { "type": "object", "properties": { - "earliest": { - "type": "string", - "format": "date-time" + "name": { + "type": "string" + }, + "min": { + "type": "integer" + }, + "max": { + "type": "integer" + }, + "unit": { + "type": "string" }, - "latest": { - "type": "string", - "format": "date-time" - } - } - }, - "location": { - "type": "object", - "properties": { "apiAlias": { "type": "string", "enum": [ - "cart_delivery_shipping_location" + "cart_delivery_time" ] - }, - "country": { - "$ref": "#/components/schemas/Country" - }, - "address": { - "$ref": "#/components/schemas/CustomerAddress" - }, - "state": { - "$ref": "#/components/schemas/CountryState" } } }, - "positions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CartDeliveryPosition" - } - }, - "shippingCosts": { - "$ref": "#/components/schemas/CalculatedPrice" + "height": { + "type": "integer" }, - "shippingMethod": { - "$ref": "#/components/schemas/ShippingMethod" - } - } - }, - "CrossSellingElement": { - "type": "object", - "properties": { - "crossSelling": { - "$ref": "#/components/schemas/ProductCrossSelling" + "length": { + "type": "integer" }, - "products": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Product" - } + "restockTime": { + "type": "integer" }, - "total": { - "type": "integer", - "format": "int32" + "stock": { + "type": "integer" }, - "streamId": { - "type": "string", - "format": "uuid" + "weight": { + "type": "integer" }, - "apiAlias": { - "type": "string", - "enum": [ - "cross_selling_element" - ] + "width": { + "type": "integer" } }, "required": [ - "crossSelling", - "products", - "total", "apiAlias" ] }, - "ShippingMethodPageRouteResponse": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "active": { - "type": "boolean" - }, - "description": { - "type": "string" - }, - "deliveryTimeId": { - "type": "string" - }, - "deliveryTime": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "min": { - "type": "integer", - "format": "int32" - }, - "max": { - "type": "integer", - "format": "int32" - }, - "unit": { - "type": "string" - } - } - }, - "translations": { - "type": "array", - "items": { + "ProductListingResult": { + "allOf": [ + { + "$ref": "#/components/schemas/EntitySearchResult" + }, + { + "type": "object", + "properties": { + "currentFilters": { "type": "object", + "description": "Contains the state of the filters. These can be used to create listing filters.", "properties": { - "shippingMethodId": { - "type": "string" - }, - "name": { + "navigationId": { "type": "string" }, - "description": { - "type": "string" - } - } - } - }, - "orderDeliveries": { - "type": "array", - "items": { - "type": "object", - "properties": { - "orderId": { - "type": "string" + "manufacturer": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } }, - "shippingOrderAddressId": { - "type": "string" + "price": { + "type": "object", + "properties": { + "min": { + "type": "integer", + "default": 0 + }, + "max": { + "type": "integer", + "default": 0 + } + }, + "required": [ + "min", + "max" + ] }, - "shippingMethodId": { - "type": "string" + "rating": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] }, - "shippingDateEarliest": { - "type": "string", - "format": "date-time" + "shipping-free": { + "type": "boolean", + "default": false }, - "shippingDateLatest": { - "type": "string", - "format": "date-time" + "properties": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } }, - "stateId": { + "search": { "type": "string" } - } - } - }, - "salesChannelDefaultAssignments": { - "type": "array", - "items": { - "type": "object", - "properties": { - "typeId": { - "type": "string" - }, - "languageId": { - "type": "string" - }, - "currencyId": { - "type": "string" - }, - "paymentMethodId": { - "type": "string" - }, - "shippingMethodId": { - "type": "string" - }, - "countryId": { - "type": "string" - }, - "navigationCategoryId": { - "type": "string" - }, - "navigationCategoryDepth": { - "type": "integer", - "format": "int32" - }, - "footerCategoryId": { - "type": "string" - }, - "serviceCategoryId": { - "type": "string" - }, - "name": { - "type": "string" - }, - "shortName": { - "type": "string" - }, - "accessKey": { - "type": "string" - }, - "active": { - "type": "boolean" - }, - "maintenance": { - "type": "boolean" - }, - "maintenanceIpWhitelist": { - "type": "string" - }, - "mailHeaderFooterId": { - "type": "string" - }, - "customerGroupId": { - "type": "string" - }, - "hreflangActive": { - "type": "boolean" + }, + "required": [ + "manufacturer", + "navigationId", + "price", + "properties", + "rating", + "shipping-free" + ] + }, + "availableSortings": { + "type": "array", + "description": "Contains the available sorting. These can be used to show a sorting select-box in the product listing.", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "translated": { + "type": "object", + "properties": { + "label": { + "type": "string" + } + }, + "required": [ + "label" + ] + }, + "key": { + "type": "string" + }, + "priority": { + "type": "number" + }, + "apiAlias": { + "type": "string", + "enum": [ + "product_sorting" + ] + } }, - "hreflangDefaultDomainId": { - "type": "string" - } + "required": [ + "label", + "translated", + "key", + "priority", + "apiAlias" + ] + } + }, + "sorting": { + "type": "string" + }, + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Product" } + }, + "entity": { + "type": "string", + "enum": [ + "product" + ] + }, + "apiAlias": { + "type": "string", + "enum": [ + "product_listing" + ] } }, - "salesChannels": { - "type": "array", - "items": { - "type": "object", - "properties": { - "typeId": { - "type": "string" - }, - "languageId": { - "type": "string" - }, - "currencyId": { - "type": "string" - }, - "paymentMethodId": { - "type": "string" - }, - "shippingMethodId": { - "type": "string" - }, - "countryId": { - "type": "string" - }, - "navigationCategoryId": { - "type": "string" - }, - "navigationCategoryDepth": { - "type": "integer", - "format": "int32" - }, - "footerCategoryId": { - "type": "string" - }, - "serviceCategoryId": { - "type": "string" - }, - "name": { - "type": "string" - }, - "shortName": { - "type": "string" - }, - "accessKey": { - "type": "string" - }, - "active": { - "type": "boolean" - }, - "maintenance": { - "type": "boolean" - }, - "maintenanceIpWhitelist": { - "type": "string" - }, - "mailHeaderFooterId": { - "type": "string" - }, - "customerGroupId": { - "type": "string" - }, - "hreflangActive": { - "type": "boolean" - }, - "hreflangDefaultDomainId": { - "type": "string" - } - } - } - }, - "availabilityRule": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "priority": { - "type": "integer", - "format": "int32" - }, - "invalid": { - "type": "boolean" - } - } - }, - "availabilityRuleId": { - "type": "string" - }, - "prices": { - "type": "array", - "items": { - "type": "object", - "properties": { - "shippingMethodId": { - "type": "string" - }, - "currencyId": { - "type": "string" - }, - "ruleId": { - "type": "string" - }, - "calculation": { - "type": "integer", - "format": "int32" - }, - "quantityStart": { - "type": "number", - "format": "float" - }, - "quantityEnd": { - "type": "number", - "format": "float" - }, - "price": { - "type": "number", - "format": "float" - }, - "calculationRuleId": { - "type": "string" - } - } - } - }, - "mediaId": { - "type": "string" - }, - "media": { - "type": "object", - "properties": { - "userId": { - "type": "string" - }, - "mimeType": { - "type": "string" - }, - "fileExtension": { - "type": "string" - }, - "fileSize": { - "type": "integer", - "format": "int32" - }, - "title": { - "type": "string" - }, - "metaDataRaw": { - "type": "string" - }, - "mediaTypeRaw": { - "type": "string" - }, - "uploadedAt": { - "type": "string", - "format": "date-time" - }, - "alt": { - "type": "string" - }, - "url": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "mediaFolderId": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "thumbnailsRo": { - "type": "string" - } - } - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - } - } - } + "required": [ + "elements", + "availableSortings", + "currentFilters", + "apiAlias" + ] } - }, + ] + }, + "AggregationMetrics": { + "type": "object", "properties": { "name": { - "description": "Name of the shipping method." - }, - "active": { - "description": "When boolean value is `true`, the shipping methods are available for selection in the storefront." + "type": "string" }, - "description": { - "description": "The order of the tabs of your defined shipping methods in the storefront by entering numerical values like 1,2,3, etc." + "type": { + "type": "string", + "enum": [ + "avg", + "count", + "max", + "min", + "stats", + "sum" + ] }, - "deliveryTimeId": { - "description": "Unique identity of the delivery time." + "field": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "field" + ] + }, + "MeasurementUnits": { + "type": "object", + "description": "Configuration of the measurement system", + "properties": { + "system": { + "type": "string", + "enum": [ + "metric", + "imperial" + ], + "default": "metric", + "description": "The measurement system used in the store. 'metric' for metric system, 'imperial' for imperial system." }, - "deliveryTime": { + "units": { + "type": "object", + "description": "Units used in the measurement system.", "properties": { - "name": { - "description": "Name given to delivery time." - }, - "min": { - "description": "Minimum delivery time taken." - }, - "max": { - "description": "Maximum delivery time taken." + "length": { + "type": "string", + "enum": [ + "mm", + "cm", + "m", + "in", + "ft" + ], + "default": "mm", + "description": "Unit of length." }, - "unit": { - "description": "Unit in which the delivery time is defined. For example, days or hours." + "weight": { + "type": "string", + "enum": [ + "g", + "kg", + "oz", + "lb" + ], + "default": "kg", + "description": "Unit of weight." } } - }, - "translations": { - "properties": { - "shippingMethodId": { - "description": "Unique identity of shipping method." + } + } + }, + "CartListPrice": { + "type": "object", + "description": "", + "properties": { + "discount": { + "type": "number" + }, + "percentage": { + "type": "number" + }, + "price": { + "type": "number" + }, + "apiAlias": { + "type": "string", + "enum": [ + "cart_list_price" + ] + } + }, + "required": [ + "apiAlias" + ] + }, + "SalesChannelContext": { + "type": "object", + "properties": { + "token": { + "description": "Context the user session", + "type": "string" + }, + "currentCustomerGroup": { + "type": "object", + "description": "Customer group of the current user", + "properties": { + "name": { + "type": "string", + "description": "Name of customer group to which the customer belongs within the specific sales channel they are currently interacting with." }, + "displayGross": { + "type": "boolean", + "description": "When `true`, product's gross price is displayed for that customer group who belongs to the specific sales channel they are currently interacting with." + } + } + }, + "fallbackCustomerGroup": { + "description": "Fallback group if the default customer group is not applicable", + "type": "object", + "properties": { "name": { - "description": "Name of the shipping method." + "type": "string" }, - "description": { - "description": "A short description of the shipping method." + "displayGross": { + "type": "boolean" } } }, - "orderDeliveries": { + "currency": { + "$ref": "#/components/schemas/Currency", "properties": { - "orderId": { - "description": "Unique identity of order." + "isoCode": { + "description": "Standard international three digit code to represent currency in a given sales channel. For example, USD." }, - "shippingOrderAddressId": { - "description": "Unique identity of shipping order address." + "factor": { + "description": "Currency exchange rate in a specific sales channel the customer is currently interacting with." }, - "shippingMethodId": { - "description": "Unique identity of shipping method." + "symbol": { + "description": "A currency symbol is a graphical representation used as shorthand for a currency's name, for example US Dollar - $ in a given sales channel." }, - "shippingDateEarliest": { - "description": "Date and time of earliest delivery of products." + "shortName": { + "description": "Acronym for international currencies, for example, USD in a given sales channel." }, - "shippingDateLatest": { - "description": "Date and time of latest delivery of products." + "name": { + "description": "Full name of the currency in a given sales channel. For example, US-Dollar." }, - "stateId": { - "description": "Unique identity of state." + "position": { + "description": "The order of the tabs for multiple currencies defined in a given sales channel." + }, + "decimalPrecision": { + "description": "It defines the round off value for currency to the nearest decimal point in a given sales channel. If set to 2, it rounds off to two significant decimal points." + }, + "isSystemDefault": { + "description": "Runtime field, cannot be used as part of the criteria." } } }, - "salesChannelDefaultAssignments": { + "salesChannel": { + "$ref": "#/components/schemas/SalesChannel", "properties": { - "stateId": { - "description": "Unique identity of state." + "typeId": { + "description": "Unique identity of a sales channel's type within a specific sales channel." }, "languageId": { - "description": "Unique identity of language." + "description": "Unique identity of a sales channel's language within a specific sales channel." }, "currencyId": { - "description": "Unique identity of currency." + "description": "Unique identity of a sales channel's currency within a specific sales channel." }, "paymentMethodId": { - "description": "Unique identity of payment method." + "description": "Unique identity of a sales channel's payment method within a specific sales channel." }, "shippingMethodId": { - "description": "Unique identity of shipping method." + "description": "Unique identity of a sales channel's shipping method within a specific sales channel." }, "countryId": { - "description": "Unique identity of country." + "description": "Unique identity of a sales channel's country within a specific sales channel." }, "navigationCategoryId": { - "description": "Unique identity of navigation category." + "description": "Unique identity of a sales channel's navigation category within a specific sales channel." }, "navigationCategoryDepth": { - "description": "It determines the number of levels of subcategories in the storefront category menu." + "description": "It determines the number of levels of subcategories in the storefront category menu within a specific sales channel." }, "footerCategoryId": { - "description": "Unique identity of footer category." + "description": "Unique identity of a sales channel's footer category within a specific sales channel." }, "serviceCategoryId": { - "description": "Unique identity of service category." + "description": "Unique identity of a sales channel's service category within a specific sales channel." }, "name": { "description": "Name of the sales channel." @@ -12652,7 +12483,7 @@ "description": "Access key to store api." }, "active": { - "description": "When boolean value is `true`, the shipping methods are available for selection in the sales channel's storefront." + "description": "When `true`, the sales channel is enabled." }, "maintenance": { "description": "When `true`, it indicates that the sales channel is undergoing maintenance, and shopping is temporarily unavailable during this period." @@ -12661,603 +12492,688 @@ "description": "Array of IP address allowed to access the sales channel." }, "mailHeaderFooterId": { - "description": "Unique identity of mail header and footer." + "description": "Unique identity of a sales channel's mail header and footer within a specific sales channel." }, "customerGroupId": { - "description": "Unique identity of customer group." + "description": "Unique identity of a sales channel's customer group within a specific sales channel." }, "hreflangActive": { - "description": "When boolean value is `true`, the sales channel pages are available in different languages." + "description": "When `true`, the sales channel pages are available in different languages within a specific sales channel." }, "hreflangDefaultDomainId": { - "description": "Unique identity of hreflangDefaultDomain." + "description": "Unique identity of a sales channel's hreflangDefaultDomain within a specific sales channel." + }, + "analyticsId": { + "description": "Unique identity of a sales channel's analytics within a specific sales channel." } } }, - "salesChannels": { + "measurementSystem": { + "$ref": "#/components/schemas/ContextMeasurementSystemInfo" + }, + "taxRules": { + "type": "array", + "description": "Currently active tax rules and/or rates", + "items": { + "type": "object", + "properties": { + "taxRate": { + "type": "number", + "format": "float" + }, + "name": { + "type": "string" + } + } + }, "properties": { - "stateId": { - "description": "Unique identity of state." + "taxRate": { + "description": "Rate of tax within a specific sales channel." }, - "languageId": { - "description": "Unique identity of language." + "name": { + "description": "Name defined for a Tax within a specific sales channel." + } + } + }, + "customer": { + "oneOf": [ + { + "type": "null" }, - "currencyId": { - "description": "Unique identity of currency." + { + "$ref": "#/components/schemas/Customer" + } + ], + "properties": { + "groupId": { + "description": "Unique identity of a customer's group within a specific sales channel." }, - "paymentMethodId": { - "description": "Unique identity of payment method." + "defaultPaymentMethodId": { + "description": "Unique identity of a customer's default payment method within a specific sales channel." }, - "shippingMethodId": { - "description": "Unique identity of shipping method." + "salesChannelId": { + "description": "Unique identity of sales channel the customer is currently interacting with." }, - "countryId": { - "description": "Unique identity of country." + "languageId": { + "description": "Unique identity of language within a specific sales channel the customer is interacting." }, - "navigationCategoryId": { - "description": "Unique identity of navigation category." + "lastPaymentMethodId": { + "description": "Unique identity of customer's last payment method within a specific sales channel." }, - "navigationCategoryDepth": { - "description": "It determines the number of levels of subcategories in the storefront category menu." + "defaultBillingAddressId": { + "description": "Unique identity of customer's default billing address within a specific sales channel." }, - "footerCategoryId": { - "description": "Unique identity of footer category." + "defaultShippingAddressId": { + "description": "Unique identity of customer's default shipping address within a specific sales channel." }, - "serviceCategoryId": { - "description": "Unique identity of service category." + "customerNumber": { + "description": "Name of the customer within a specific sales channel the customer is interacting." }, - "name": { - "description": "Name of the sales channel." + "salutationId": { + "description": "Unique identity of customer's default shipping address within a specific sales channel." }, - "shortName": { - "description": "A short name for sales channel." + "firstName": { + "description": "First name of the customer within a specific sales channel." }, - "accessKey": { - "description": "Access key to store api." + "lastName": { + "description": "Last name of the customer within a specific sales channel." }, - "active": { - "description": "When boolean value is `true`, the shipping methods are available for selection in the storefront." + "company": { + "description": "Company name of the customer within a specific sales channel." }, - "maintenance": { - "description": "When `true`, it indicates that the sales channel is undergoing maintenance, and shopping is temporarily unavailable during this period." + "password": { + "description": "Password of the customer within a specific sales channel." }, - "maintenanceIpWhitelist": { - "description": "Array of IP address allowed to access the sales channel." + "email": { + "description": "Email of the customer within a specific sales channel." }, - "mailHeaderFooterId": { - "description": "Unique identity of mail header and footer." + "title": { + "description": "Customer's title or honorifics like Mr, Mrs, etc within a specific sales channel." }, - "customerGroupId": { - "description": "Unique identity of customer group." + "affiliateCode": { + "description": "An affiliate code is an identification option with which website operators can mark outgoing links within a specific sales channel." }, - "hreflangActive": { - "description": "When boolean value is `true``, the sales channel pages are available in different languages." + "campaignCode": { + "description": "A unique identifier for a campaign within a specific sales channel." }, - "hreflangDefaultDomainId": { - "description": "Unique identity of hreflangDefaultDomain." - } - } - }, - "availabilityRule": { - "properties": { - "name": { - "description": "Unique name for the rule." + "active": { + "description": "When `true`, the status of the customer is set active within a specific sales channel." }, - "description": { - "description": "A short description about the rule." + "doubleOptInRegistration": { + "description": "When `true`, user subscriptions to an email marketing list is allowed within a specific sales channel." }, - "priority": { - "description": "A numerical value to prioritize one of the rules from the list." + "doubleOptInEmailSentDate": { + "description": "Date and time when the double opt-in email was sent within a specific sales channel." }, - "invalid": { - "description": "When the boolean value is `true`, the rule is no more available for usage." - } - } - }, - "availabilityRuleId": { - "description": "Unique identity of availability rule." - }, - "prices": { - "properties": { - "shippingMethodId": { - "description": "Unique identity of shipping method." + "doubleOptInConfirmDate": { + "description": "Date and time when the double opt-in email was confirmed within a specific sales channel." }, - "currencyId": { - "description": "Unique identity of currency." + "hash": { + "description": "Password hash for account recovery within a specific sales channel." }, - "ruleId": { - "description": "Unique identity of rule." + "guest": { + "description": "Boolean value is `true` for a guest account within a specific sales channel." }, - "calculation": { - "description": "Shipping price calculated based on quantity, price, weight or volume of items." + "firstLogin": { + "description": "Captures date and time of customer's first login within a specific sales channel." }, - "quantityStart": { - "description": "Starting range of quantity of an item." + "lastLogin": { + "description": "Captures date and time of customer's last login within a specific sales channel." }, - "quantityEnd": { - "description": "Ending range of quantity of an item." + "newsletter": { + "description": "When `true`, then the customer gets subscribe to the newsletter" }, - "price": { - "description": "Shipping method price after applied rules." + "birthday": { + "description": "Captures customer's birthday details within a specific sales channel." }, - "calculationRuleId": { - "description": "Unique identity of calculation rule." + "lastOrderDate": { + "description": "Captures customer's last order date within a specific sales channel." + }, + "orderCount": { + "description": "Captures the number of orders placed by a customer within a specific sales channel." + }, + "legacyEncoder": { + "description": "encapsulates shop credentials when needed to migrate shop system from old instance to new instance" + }, + "legacyPassword": { + "description": "Hashed password of the old shop system" + }, + "autoIncrement": { + "description": "Internal field. " + }, + "remoteAddress": { + "description": "Anonymous IP address of the customer for last session." } } }, - "mediaId": { - "description": "Unique identity of media." - }, - "media": { + "paymentMethod": { + "$ref": "#/components/schemas/PaymentMethod", "properties": { - "userId": { - "description": "Unique identity of user." + "pluginId": { + "description": "Unique identity of payment plugin within a specific sales channel." }, - "mimeType": { - "description": "A string sent along with a file indicating the type of the file. For example: image/jpeg." + "handlerIdentifier": { + "description": "Internal field that contains system identifier details for payment methods like Paypal." }, - "fileExtension": { - "description": "Type of file indication. For example: jpeg, png." + "name": { + "description": "Name of the payment method within a specific sales channel." }, - "fileSize": { - "description": "Size of the file media file uploaded." + "description": { + "description": "A short description about the payment method within a specific sales channel." }, - "title": { - "description": "Title name give to the media." + "position": { + "description": "The order of the tabs of your defined payment methods in the storefront by entering numerical values like 1,2,3, etc within a specific sales channel." }, - "metaDataRaw": { - "description": "Details of the media file uploaded." + "active": { + "description": "When `true`, the payment method is available for usage within a specific sales channel." }, - "alt": { - "description": "Alternate text for media." + "availabilityRuleId": { + "description": "Unique identity of the rule for the payment method." }, - "url": { - "description": "Runtime field, cannot be used as part of the criteria." + "mediaId": { + "description": "Unique identity of media used in payment method within a specific sales channel." }, - "fileName": { - "description": "Name of the media file uploaded." + "formattedHandlerIdentifier": { + "description": "Internal field that contains system identifier details for payment methods like Paypal." + } + } + }, + "shippingLocation": { + "type": "object", + "properties": { + "apiAlias": { + "type": "string", + "enum": [ + "cart_delivery_shipping_location" + ] }, - "mediaFolderId": { - "description": "Unique identity of media folder." + "country": { + "$ref": "#/components/schemas/Country" }, - "private": { - "description": "Boolean value is `true` to keep the media display private." + "address": { + "$ref": "#/components/schemas/CustomerAddress" } } }, - "tags": { + "shippingMethod": { + "$ref": "#/components/schemas/ShippingMethod", "properties": { "name": { - "description": "Name of the tag." + "description": "Name of the shipping method within a specific sales channel." + }, + "active": { + "description": "When `true`, the shipping method is available for usage within a specific sales channel." + }, + "description": { + "description": "A short description about the shipping method within a specific sales channel." + }, + "trackingUrl": { + "description": "URL that allows to track packages for a specific sales channel." + }, + "deliveryTimeId": { + "description": "Unique identity of deliveryTime within a specific sales channel." + }, + "availabilityRuleId": { + "description": "Unique identity of the rule for the payment method." + }, + "mediaId": { + "description": "Unique identity of media used in shipping method within a specific sales channel." } } - } - } - }, - "CookieEntryCollection": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CookieEntry" - } - }, - "NavigationType": { - "type": "string", - "enum": [ - "main-navigation", - "footer-navigation", - "service-navigation" - ] - }, - "Price": { - "type": "object", - "description": "Price object", - "properties": { - "currencyId": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "gross": { - "description": "", - "type": "number" - }, - "net": { - "description": "", - "type": "number" - }, - "linked": { - "description": "", - "type": "boolean" }, - "listPrice": { - "description": "", + "context": { + "description": "Core context with general configuration values and state", "type": "object", "properties": { + "versionId": { + "type": "string", + "description": "Unique identity of context's version in a specific sales channel." + }, "currencyId": { "type": "string", - "pattern": "^[0-9a-f]{32}$" + "description": "Unique identity of currency context in a specific sales channel." }, - "gross": { - "description": "", - "type": "number" + "currencyFactor": { + "type": "integer", + "description": "Unique identity of currency factor context in a specific sales channel." }, - "net": { - "description": "", - "type": "number" + "currencyPrecision": { + "type": "integer", + "format": "int32", + "description": "It defines the round off value of currency to the nearest decimal point. If set to 2, it rounds off to two significant decimal points." }, - "linked": { - "description": "", - "type": "boolean" - } - }, - "required": [ - "gross", - "net" - ] - }, - "regulationPrice": { - "description": "", - "type": "object", - "properties": { - "currencyId": { + "languageIdChain": { + "type": "array", + "items": { + "type": "string" + } + }, + "scope": { "type": "string", - "pattern": "^[0-9a-f]{32}$" + "description": "Scope defines if its related to system or user context." }, - "gross": { - "description": "", - "type": "number" + "source": { + "type": "object", + "required": [ + "salesChannelId", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "sales-channel", + "shop-api" + ] + }, + "salesChannelId": { + "type": "string" + } + }, + "description": "When context is related to user in the source, then there is userId." }, - "net": { - "description": "", - "type": "number" + "taxState": { + "type": "string", + "description": "Tax state can either be `gross` or `net`." }, - "linked": { - "description": "", - "type": "boolean" - } - }, - "required": [ - "gross", - "net" - ] - } - }, - "required": [ - "currencyId", - "gross", - "net" - ] - }, - "Sitemap": { - "type": "object", - "properties": { - "filename": { - "type": "string", - "description": "Name of the file which holds a list of all URL's." - }, - "created": { - "type": "string", - "format": "date-time" - } - }, - "required": [ - "filename", - "created" - ] - }, - "AggregationEntity": { - "title": "AggregationEntity", - "type": "object", - "properties": { - "name": { - "description": "Give your aggregation an identifier, so you can find it easier", - "type": "string" - }, - "type": { - "description": "The type of aggregation", - "type": "string", - "enum": [ - "entity" - ] - }, - "field": { - "description": "The field you want to aggregate over.", - "type": "string" - }, - "definition": { - "description": "The entity definition e.g \"product_manufacturer\".", - "type": "string" - } - }, - "required": [ - "name", - "type", - "field", - "definition" - ] - }, - "AggregationFilter": { - "title": "AggregationFilter", - "type": "object", - "properties": { - "name": { - "description": "Give your aggregation an identifier, so you can find it easier", - "type": "string" - }, - "type": { - "description": "The type of aggregation", - "type": "string", - "enum": [ - "filter" - ] - }, - "filter": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Filters" + "useCache": { + "type": "boolean", + "description": "When boolean value is `true`, caching is used." + } } - } - }, - "required": [ - "name", - "type", - "filter" - ] - }, - "AggregationTerms": { - "title": "AggregationTerms", - "type": "object", - "properties": { - "name": { - "description": "Give your aggregation an identifier, so you can find it easier", - "type": "string" - }, - "type": { - "description": "The type of aggregation", - "type": "string", - "enum": [ - "terms" - ] }, - "field": { - "description": "The field you want to aggregate over.", - "type": "string" + "itemRounding": { + "type": "object", + "required": [ + "decimals", + "interval", + "roundForNet", + "apiAlias" + ], + "properties": { + "apiAlias": { + "type": "string", + "enum": [ + "shopware_core_framework_data_abstraction_layer_pricing_cash_rounding_config" + ] + }, + "decimals": { + "type": "integer", + "format": "int32" + }, + "interval": { + "type": "number", + "format": "float" + }, + "roundForNet": { + "type": "boolean" + } + } }, - "limit": { - "description": "The number of terms to return", - "type": "number" + "totalRounding": { + "type": "object", + "required": [ + "decimals", + "interval", + "roundForNet", + "apiAlias" + ], + "properties": { + "apiAlias": { + "type": "string", + "enum": [ + "shopware_core_framework_data_abstraction_layer_pricing_cash_rounding_config" + ] + }, + "decimals": { + "type": "integer", + "format": "int32" + }, + "interval": { + "type": "number", + "format": "float" + }, + "roundForNet": { + "type": "boolean" + } + } }, - "sort": { - "type": "array", - "description": "Sorting the aggregation result.", - "items": { - "$ref": "#/components/schemas/Sort" + "languageInfo": { + "type": "object", + "required": [ + "localeCode", + "name" + ], + "properties": { + "name": { + "type": "string" + }, + "localeCode": { + "type": "string" + } } - } - }, - "required": [ - "name", - "type", - "field" - ] - }, - "AggregationHistogram": { - "title": "AggregationHistogram", - "type": "object", - "properties": { - "name": { - "description": "Give your aggregation an identifier, so you can find it easier", - "type": "string" }, - "type": { - "description": "The type of aggregation", + "apiAlias": { "type": "string", "enum": [ - "histogram" + "sales_channel_context" ] - }, - "field": { - "description": "The field you want to aggregate over.", - "type": "string" - }, - "interval": { - "description": "The interval of the histogram", - "type": "number" - }, - "format": { - "description": "The format of the histogram", - "type": "string" - }, - "timeZone": { - "description": "The timezone of the histogram", - "type": "string" } }, "required": [ - "name", - "type", - "field" + "salesChannel", + "apiAlias", + "itemRounding", + "totalRounding", + "languageInfo" ] }, - "AggregationRange": { - "title": "AggregationRange", - "description": "For more information, see [Aggregations Reference > Range Aggregation](https://developer.shopware.com/docs/resources/references/core-reference/dal-reference/aggregations-reference.html#range-aggregations)", - "type": "object", - "properties": { - "name": { - "description": "Give your aggregation an identifier, so you can find it easier", - "type": "string" - }, - "type": { - "description": "The type of aggregation", - "type": "string", - "enum": [ - "range" - ] - }, - "field": { - "description": "The field you want to aggregate over.", - "type": "string" + "ProductListingCriteria": { + "allOf": [ + { + "$ref": "#/components/schemas/Criteria" }, - "ranges": { - "description": "The ranges of the aggregation", - "type": "array", - "items": { - "type": "object", - "anyOf": [ - { - "type": "object", - "title": "From and to", - "properties": { - "from": { - "type": "number", - "description": "The lower bound of the range" - }, - "to": { - "type": "number", - "description": "The upper bound of the range" - } - }, - "required": [ - "from", - "to" - ] - }, - { - "type": "object", - "title": "From only", - "properties": { - "from": { - "type": "string", - "description": "The lower bound of the range" - } - }, - "required": [ - "from" - ] - }, - { - "type": "object", - "title": "To only", - "properties": { - "to": { - "type": "string", - "description": "The upper bound of the range" - } - }, - "required": [ - "to" - ] - } - ] - } - } - }, - "required": [ - "name", - "type", - "field", - "ranges" - ] - }, - "Breadcrumb": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "categoryId": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "type": { - "$ref": "#/components/schemas/Category/properties/type" - }, - "translated": { + { "type": "object", - "additionalProperties": true, + "description": "Additional search parameters for product listings", "properties": { - "customFields": { - "type": "object" + "order": { + "description": "Specifies the sorting of the products by `availableSortings`. If not set, the default sorting will be set according to the shop settings. The available sorting options are sent within the response under the `availableSortings` key. In order to sort by a field, consider using the `sort` parameter from the listing criteria. Do not use both parameters together, as it might lead to unexpected results.", + "type": "string" }, - "slotConfig": { - "type": "object" + "limit": { + "description": "Number of items per result page. If not set, the limit will be set according to the default products per page, defined in the system settings.", + "type": "integer", + "minimum": 0 }, - "linkType": { - "$ref": "#/components/schemas/Category/properties/linkType" + "p": { + "description": "Search result page", + "type": "integer", + "default": 1 }, - "internalLink": { + "manufacturer": { + "description": "Filter by manufacturers. List of manufacturer identifiers separated by a `|`.", "type": "string" }, - "externalLink": { - "type": "string" + "min-price": { + "description": "Filters by a minimum product price. Has to be lower than the `max-price` filter.", + "type": "integer", + "minimum": 0, + "default": 0 }, - "linkNewTab": { - "type": "boolean" + "max-price": { + "description": "Filters by a maximum product price. Has to be higher than the `min-price` filter.", + "type": "integer", + "minimum": 0, + "default": 0 }, - "description": { - "type": "string" + "rating": { + "description": "Filter products with a minimum average rating.", + "type": "integer" }, - "metaTitle": { - "type": "string" + "shipping-free": { + "description": "Filters products that are marked as shipping-free.", + "type": "boolean", + "default": false }, - "metaDescription": { + "properties": { + "description": "Filters products by their properties. List of property identifiers separated by a `|`.", "type": "string" }, - "keywords": { + "manufacturer-filter": { + "description": "Enables/disabled filtering by manufacturer. If set to false, the `manufacturer` filter will be ignored. Also the `aggregations[manufacturer]` key will be removed from the response.", + "type": "boolean", + "default": true + }, + "price-filter": { + "description": "Enables/disabled filtering by price. If set to false, the `min-price` and `max-price` filter will be ignored. Also the `aggregations[price]` key will be removed from the response.", + "type": "boolean", + "default": true + }, + "rating-filter": { + "description": "Enables/disabled filtering by rating. If set to false, the `rating` filter will be ignored. Also the `aggregations[rating]` key will be removed from the response.", + "type": "boolean", + "default": true + }, + "shipping-free-filter": { + "description": "Enables/disabled filtering by shipping-free products. If set to false, the `shipping-free` filter will be ignored. Also the `aggregations[shipping-free]` key will be removed from the response.", + "type": "boolean", + "default": true + }, + "property-filter": { + "description": "Enables/disabled filtering by properties products. If set to false, the `properties` filter will be ignored. Also the `aggregations[properties]` key will be removed from the response.", + "type": "boolean", + "default": true + }, + "property-whitelist": { + "description": "A whitelist of property identifiers which can be used for filtering. List of property identifiers separated by a `|`. The `property-filter` must be `true`, otherwise the whitelist has no effect.", "type": "string" + }, + "reduce-aggregations": { + "description": "By sending the parameter `reduce-aggregations` , the post-filters that were applied by the customer, are also applied to the aggregations. This has the consequence that only values are returned in the aggregations that would lead to further filter results. This parameter is a flag, the value has no effect.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + } + } + ], + "properties": { + "filter": { + "properties": { + "type": { + "description": "To filter the results and aggregations with filter types like ==, >=, etc." + }, + "field": { + "description": "To filter the results and aggregations by field like an property identifier." + }, + "value": { + "description": "To filter the results and aggregations by value." } } }, - "path": { - "type": "string" - }, - "seoUrls": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SeoUrl" + "sort": { + "properties": { + "field": { + "description": "Sort the search results by field like an property identifier." + }, + "order": { + "description": "Sort the search results of orders by ascending or descending." + }, + "naturalSorting": { + "description": "Sorting for special cases such as German letters with umlauts and similar characters etc." + } } }, - "apiAlias": { - "type": "string", - "enum": [ - "breadcrumb" - ] + "post-filter": { + "properties": { + "type": { + "description": "To filter only the results but not the aggregations with filter types like ==, >=, etc." + }, + "field": { + "description": "To filter only the results but not the aggregations by field like an property identifier." + }, + "value": { + "description": "To filter only the results but not the aggregations by value." + } + } } - }, - "required": [ - "name", - "categoryId", - "type", - "translated", - "path", - "apiAlias" - ] + } }, - "ReferencePrice": { - "type": "object", + "CustomerAddressBody": { + "description": "Added since version: 6.0.0.0", + "required": [ + "countryId", + "firstName", + "lastName", + "city", + "street" + ], "properties": { - "purchaseUnit": { - "type": "number" + "countryId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" }, - "referenceUnit": { - "type": "number" + "countryStateId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" }, - "unitName": { + "salutationId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "firstName": { "type": "string" }, - "price": { - "type": "number" + "lastName": { + "type": "string" }, - "apiAlias": { - "type": "string", - "enum": [ - "cart_price_reference" - ] + "zipcode": { + "type": "string" + }, + "city": { + "type": "string" + }, + "company": { + "type": "string" + }, + "street": { + "type": "string" + }, + "department": { + "type": "string" + }, + "title": { + "type": "string" + }, + "phoneNumber": { + "type": "string" + }, + "additionalAddressLine1": { + "type": "string" + }, + "additionalAddressLine2": { + "type": "string" + }, + "customFields": { + "type": "object" + }, + "country": { + "$ref": "#/components/schemas/Country" + }, + "countryState": { + "$ref": "#/components/schemas/CountryState" + }, + "salutation": { + "$ref": "#/components/schemas/Salutation" + } + }, + "type": "object" + }, + "NavigationType": { + "type": "string", + "enum": [ + "main-navigation", + "footer-navigation", + "service-navigation" + ] + }, + "Sitemap": { + "type": "object", + "properties": { + "filename": { + "type": "string", + "description": "Name of the file which holds a list of all URL's." + }, + "created": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "filename", + "created" + ] + }, + "OrderRouteResponse": { + "type": "object", + "properties": { + "orders": { + "type": "object", + "allOf": [ + { + "type": "object", + "required": [ + "elements" + ], + "properties": { + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Order" + } + } + } + }, + { + "$ref": "#/components/schemas/EntitySearchResult" + } + ] + }, + "paymentChangeable": { + "type": "object", + "description": "The key-value pairs contain the uuid of the order as key and a boolean as value, indicating that the payment method can still be changed.", + "additionalProperties": { + "type": "boolean" + } + } + }, + "required": [ + "orders" + ] + }, + "CookieEntryCollection": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CookieEntry" + } + }, + "CookieGroupCollection": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CookieGroup" + } + }, + "CartPriceReference": { + "type": "object", + "properties": { + "purchaseUnit": { + "type": "number" + }, + "referenceUnit": { + "type": "number" + }, + "unitName": { + "type": "string" + }, + "price": { + "type": "number" + }, + "apiAlias": { + "type": "string", + "enum": [ + "cart_price_reference" + ] }, "listPrice": { "oneOf": [ { - "$ref": "#/components/schemas/ListPrice" + "$ref": "#/components/schemas/CartListPrice" }, { "type": "null" @@ -13301,6 +13217,7 @@ } }, "required": [ + "apiAlias", "hasRange", "regulationPrice", "listPrice", @@ -13310,907 +13227,749 @@ "unitName" ] }, - "ProductListingResult": { - "allOf": [ - { - "$ref": "#/components/schemas/EntitySearchResult" - }, - { - "type": "object", + "CartItems": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LineItem" + }, "properties": { - "currentFilters": { - "type": "object", - "description": "Contains the state of the filters. These can be used to create listing filters.", - "properties": { - "navigationId": { - "type": "string" - }, - "manufacturer": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - "price": { - "type": "object", - "properties": { - "min": { - "type": "integer", - "default": 0 - }, - "max": { - "type": "integer", - "default": 0 - } - }, - "required": [ - "min", - "max" - ] - }, - "rating": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "shipping-free": { - "type": "boolean", - "default": false - }, - "properties": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - "search": { - "type": "string" - } - }, - "required": [ - "manufacturer", - "navigationId", - "price", - "properties", - "rating", - "shipping-free" - ] + "id": { + "description": "Unique identity of cart item." }, - "availableSortings": { - "type": "array", - "description": "Contains the available sorting. These can be used to show a sorting select-box in the product listing.", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "translated": { - "type": "object", - "properties": { - "label": { - "type": "string" - } - }, - "required": [ - "label" - ] - }, - "key": { - "type": "string" - }, - "priority": { - "type": "number" - }, - "apiAlias": { - "type": "string", - "enum": [ - "product_sorting" - ] - } - }, - "required": [ - "label", - "translated", - "key", - "priority", - "apiAlias" - ] - } - }, - "sorting": { - "type": "string" - }, - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Product" - } - }, - "entity": { - "type": "string", - "enum": [ - "product" - ] - }, - "apiAlias": { - "type": "string", - "enum": [ - "product_listing" - ] + "modified": { + "description": "When boolean value is `true`, the cart is said to be modified." } - }, - "required": [ - "elements", - "availableSortings", - "currentFilters", - "apiAlias" - ] + } } - ] - }, - "LineItemType": { - "type": "string", - "deprecated": true, - "enum": [ - "product", - "credit", - "custom", - "promotion", - "discount", - "container", - "quantity" - ] + } }, - "LineItem": { + "EntitySearchResult": { "type": "object", "properties": { - "children": { + "entity": { + "type": "string" + }, + "total": { + "type": "integer", + "description": "The total number of found entities" + }, + "aggregations": { "type": "array", + "description": "Contains aggregated data. A simple example is the determination of the average price from a product search query.", "items": { - "$ref": "#/components/schemas/LineItem" + "type": "object" } }, - "cover": { - "$ref": "#/components/schemas/Media" + "page": { + "type": "integer", + "description": "The actual page. This can be used for pagination." }, - "dataContextHash": { - "type": "string" + "limit": { + "type": "integer", + "description": "The actual limit. This is used for pagination and goes together with the page." + } + } + }, + "Criteria": { + "type": "object", + "description": "Criteria to query entities.", + "properties": { + "page": { + "description": "Search result page", + "type": "integer" }, - "dataTimestamp": { + "term": { + "description": "Search term", "type": "string" }, - "deliveryInformation": { - "$ref": "#/components/schemas/CartDeliveryInformation" - }, - "description": { - "type": "string", - "description": "Description of line items in an order." + "limit": { + "description": "Number of items per result page", + "type": "integer" }, - "good": { - "type": "boolean", - "description": "When set to true, it indicates the line item is physical else it is virtual." + "filter": { + "type": "array", + "description": "List of filters to restrict the search result. For more information, see [Search Queries > Filter](https://shopware.stoplight.io/docs/store-api/docs/concepts/search-queries.md#filter)", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/SimpleFilter" + }, + { + "$ref": "#/components/schemas/EqualsFilter" + }, + { + "$ref": "#/components/schemas/MultiNotFilter" + }, + { + "$ref": "#/components/schemas/RangeFilter" + } + ] + }, + "properties": { + "type": { + "description": "To filter the results and aggregations with filter types like ==, >=, etc." + }, + "field": { + "description": "To filter the results and aggregations by field like an property identifier." + }, + "value": { + "description": "To filter the results and aggregations by value." + } + } }, - "id": { - "type": "string", - "description": "Unique identity of line item." + "ids": { + "type": "array", + "description": "List of ids to search for", + "items": { + "type": "string" + } }, - "label": { + "query": { "type": "string", - "description": "It is a typical product name given to the line item." - }, - "modified": { - "type": "boolean", - "description": "When boolean value is `true`, line items are said to be modified." - }, - "modifiedByApp": { - "type": "boolean" + "description": "The query string to search for" }, - "payload": { - "$ref": "#/components/schemas/ProductJsonApi" + "associations": { + "$ref": "#/components/schemas/Associations" }, - "price": { - "type": "object", - "properties": { - "apiAlias": { - "type": "string", - "enum": [ - "calculated_price" - ] - }, - "calculatedTaxes": { - "type": "array", - "items": { - "type": "object", - "properties": { - "apiAlias": { - "type": "string", - "enum": [ - "cart_tax_calculated" - ] - }, - "tax": { - "type": "number" - }, - "taxRate": { - "type": "number" - }, - "price": { - "type": "number" - } - }, - "required": [ - "apiAlias", - "tax", - "taxRate", - "price" - ] + "post-filter": { + "type": "array", + "description": "Filters that applied without affecting aggregations. For more information, see [Search Queries > Post Filter](https://shopware.stoplight.io/docs/store-api/docs/concepts/search-queries.md#post-filter)", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/SimpleFilter" + }, + { + "$ref": "#/components/schemas/EqualsFilter" + }, + { + "$ref": "#/components/schemas/MultiNotFilter" + }, + { + "$ref": "#/components/schemas/RangeFilter" } + ] + }, + "properties": { + "type": { + "description": "To filter only the results but not the aggregations with filter types like ==, >=, etc." }, - "listPrice": { - "oneOf": [ - { - "$ref": "#/components/schemas/CartListPrice" - }, - { - "type": "null" - } - ] + "field": { + "description": "To filter only the results but not the aggregations by field like an property identifier." }, - "quantity": { - "type": "number" + "value": { + "description": "To filter only the results but not the aggregations by value." + } + } + }, + "sort": { + "type": "array", + "description": "Sorting in the search result.", + "items": { + "$ref": "#/components/schemas/Sort" + }, + "properties": { + "field": { + "description": "Sort the search results by field like an property identifier." }, - "referencePrice": { - "oneOf": [ - { - "$ref": "#/components/schemas/CartPriceReference" - }, - { - "type": "null" - } - ] + "order": { + "description": "Sort the search results of orders by ascending or descending." }, - "regulationPrice": { - "oneOf": [ - { - "type": "object", - "properties": { - "price": { - "type": "number" - }, - "apiAlias": { - "type": "string", - "enum": [ - "cart_regulation_price" - ] - } - } - }, - { - "type": "null" - } - ] - }, - "totalPrice": { - "type": "number" - }, - "unitPrice": { - "type": "number" - }, - "taxRules": { - "type": "array", - "description": "Currently active tax rules and/or rates", - "items": { - "type": "object", - "properties": { - "taxRate": { - "type": "number", - "format": "float" - }, - "name": { - "type": "string" - } - } - } - } - }, - "required": [ - "apiAlias", - "totalPrice", - "quantity", - "unitPrice" - ] - }, - "priceDefinition": { - "$ref": "#/components/schemas/CartPriceQuantity" - }, - "quantity": { - "type": "number", - "description": "Number of items of product." - }, - "quantityInformation": { - "type": "object", - "properties": { - "maxPurchase": { - "type": "number" - }, - "minPurchase": { - "type": "number" - }, - "purchaseSteps": { - "type": "number" + "naturalSorting": { + "description": "Sorting for special cases such as German letters with umlauts and similar characters etc." } } }, - "referencedId": { - "type": "string", - "description": "Unique identity of type of entity." - }, - "removable": { - "type": "boolean", - "description": "Allows the line item to be removable from the cart when set to true." + "aggregations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Aggregation" + } }, - "stackable": { - "type": "boolean", - "description": "Allows to change the quantity of the line item when set to true." + "fields": { + "type": "array", + "description": "Fields which should be returned in the search result.", + "items": { + "type": "string", + "description": "Name of a field" + } }, - "states": { - "deprecated": true, + "grouping": { "type": "array", + "description": "Perform groupings over certain fields", "items": { "type": "string", - "enum": [ - "is-physical", - "is-download" - ] + "description": "Name of a field" } }, - "type": { - "$ref": "#/components/schemas/OrderLineItem/properties/type", - "description": "Type refers to the entity type of an item whether it is product or promotion for instance." + "total-count-mode": { + "$ref": "#/components/schemas/TotalCountMode" }, - "uniqueIdentifier": { - "type": "string" + "includes": { + "$ref": "#/components/schemas/Includes" + }, + "excludes": { + "$ref": "#/components/schemas/Excludes" } - }, - "required": [ - "id", - "type", - "deliveryInformation", - "payload", - "quantity", - "states" - ] + } }, - "SalesChannelContext": { + "NoneFieldsCriteria": { "type": "object", + "description": "Search parameters. For more information, see our documentation on [Search Queries](https://shopware.stoplight.io/docs/store-api/docs/concepts/search-queries.md#structure)", "properties": { - "token": { - "description": "Context the user session", + "page": { + "description": "Search result page", + "type": "integer" + }, + "term": { + "description": "Search term", "type": "string" }, - "currentCustomerGroup": { - "type": "object", - "description": "Customer group of the current user", - "properties": { - "name": { - "type": "string", - "description": "Name of customer group to which the customer belongs within the specific sales channel they are currently interacting with." - }, - "displayGross": { - "type": "boolean", - "description": "When `true`, product's gross price is displayed for that customer group who belongs to the specific sales channel they are currently interacting with." - } + "limit": { + "description": "Number of items per result page", + "type": "integer" + }, + "filter": { + "type": "array", + "description": "List of filters to restrict the search result. For more information, see [Search Queries > Filter](https://shopware.stoplight.io/docs/store-api/docs/concepts/search-queries.md#filter)", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/SimpleFilter" + }, + { + "$ref": "#/components/schemas/EqualsFilter" + }, + { + "$ref": "#/components/schemas/MultiNotFilter" + }, + { + "$ref": "#/components/schemas/RangeFilter" + } + ] } }, - "fallbackCustomerGroup": { - "description": "Fallback group if the default customer group is not applicable", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "displayGross": { - "type": "boolean" - } + "ids": { + "type": "array", + "description": "List of ids to search for", + "items": { + "type": "string" } }, - "currency": { - "$ref": "#/components/schemas/Currency", - "properties": { - "isoCode": { - "description": "Standard international three digit code to represent currency in a given sales channel. For example, USD." - }, - "factor": { - "description": "Currency exchange rate in a specific sales channel the customer is currently interacting with." - }, - "symbol": { - "description": "A currency symbol is a graphical representation used as shorthand for a currency's name, for example US Dollar - $ in a given sales channel." - }, - "shortName": { - "description": "Acronym for international currencies, for example, USD in a given sales channel." - }, - "name": { - "description": "Full name of the currency in a given sales channel. For example, US-Dollar." - }, - "position": { - "description": "The order of the tabs for multiple currencies defined in a given sales channel." - }, - "decimalPrecision": { - "description": "It defines the round off value for currency to the nearest decimal point in a given sales channel. If set to 2, it rounds off to two significant decimal points." - }, - "isSystemDefault": { - "description": "Runtime field, cannot be used as part of the criteria." - } + "query": { + "type": "string", + "description": "The query string to search for" + }, + "associations": { + "$ref": "#/components/schemas/Associations" + }, + "post-filter": { + "type": "array", + "description": "Filters that applied without affecting aggregations. For more information, see [Search Queries > Post Filter](https://shopware.stoplight.io/docs/store-api/docs/concepts/search-queries.md#post-filter)", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/SimpleFilter" + }, + { + "$ref": "#/components/schemas/EqualsFilter" + }, + { + "$ref": "#/components/schemas/MultiNotFilter" + }, + { + "$ref": "#/components/schemas/RangeFilter" + } + ] } }, - "salesChannel": { - "$ref": "#/components/schemas/SalesChannel", - "properties": { - "typeId": { - "description": "Unique identity of a sales channel's type within a specific sales channel." - }, - "languageId": { - "description": "Unique identity of a sales channel's language within a specific sales channel." - }, - "currencyId": { - "description": "Unique identity of a sales channel's currency within a specific sales channel." - }, - "paymentMethodId": { - "description": "Unique identity of a sales channel's payment method within a specific sales channel." - }, - "shippingMethodId": { - "description": "Unique identity of a sales channel's shipping method within a specific sales channel." - }, - "countryId": { - "description": "Unique identity of a sales channel's country within a specific sales channel." - }, - "navigationCategoryId": { - "description": "Unique identity of a sales channel's navigation category within a specific sales channel." - }, - "navigationCategoryDepth": { - "description": "It determines the number of levels of subcategories in the storefront category menu within a specific sales channel." - }, - "footerCategoryId": { - "description": "Unique identity of a sales channel's footer category within a specific sales channel." - }, - "serviceCategoryId": { - "description": "Unique identity of a sales channel's service category within a specific sales channel." - }, - "name": { - "description": "Name of the sales channel." - }, - "shortName": { - "description": "A short name for sales channel." - }, - "accessKey": { - "description": "Access key to store api." - }, - "active": { - "description": "When `true`, the sales channel is enabled." - }, - "maintenance": { - "description": "When `true`, it indicates that the sales channel is undergoing maintenance, and shopping is temporarily unavailable during this period." - }, - "maintenanceIpWhitelist": { - "description": "Array of IP address allowed to access the sales channel." - }, - "mailHeaderFooterId": { - "description": "Unique identity of a sales channel's mail header and footer within a specific sales channel." - }, - "customerGroupId": { - "description": "Unique identity of a sales channel's customer group within a specific sales channel." - }, - "hreflangActive": { - "description": "When `true`, the sales channel pages are available in different languages within a specific sales channel." - }, - "hreflangDefaultDomainId": { - "description": "Unique identity of a sales channel's hreflangDefaultDomain within a specific sales channel." - }, - "analyticsId": { - "description": "Unique identity of a sales channel's analytics within a specific sales channel." - } + "sort": { + "type": "array", + "description": "Sorting in the search result.", + "items": { + "$ref": "#/components/schemas/Sort" } }, - "measurementSystem": { - "$ref": "#/components/schemas/ContextMeasurementSystemInfo" + "aggregations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Aggregation" + } }, - "taxRules": { + "grouping": { "type": "array", - "description": "Currently active tax rules and/or rates", + "description": "Perform groupings over certain fields", "items": { - "type": "object", - "properties": { - "taxRate": { - "type": "number", - "format": "float" - }, - "name": { - "type": "string" - } - } - }, - "properties": { - "taxRate": { - "description": "Rate of tax within a specific sales channel." - }, - "name": { - "description": "Name defined for a Tax within a specific sales channel." - } + "type": "string", + "description": "Name of a field" } }, - "customer": { - "oneOf": [ + "total-count-mode": { + "$ref": "#/components/schemas/TotalCountMode" + }, + "includes": { + "$ref": "#/components/schemas/Includes" + }, + "excludes": { + "$ref": "#/components/schemas/Excludes" + } + } + }, + "Associations": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Criteria" + } + }, + "Includes": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Excludes": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Aggregation": { + "anyOf": [ + { + "$ref": "#/components/schemas/AggregationMetrics" + }, + { + "title": "AggregationEntity", + "allOf": [ { - "type": "null" + "$ref": "#/components/schemas/AggregationEntity" }, { - "$ref": "#/components/schemas/Customer" + "$ref": "#/components/schemas/SubAggregations" } - ], - "properties": { - "groupId": { - "description": "Unique identity of a customer's group within a specific sales channel." - }, - "defaultPaymentMethodId": { - "description": "Unique identity of a customer's default payment method within a specific sales channel." - }, - "salesChannelId": { - "description": "Unique identity of sales channel the customer is currently interacting with." - }, - "languageId": { - "description": "Unique identity of language within a specific sales channel the customer is interacting." - }, - "lastPaymentMethodId": { - "description": "Unique identity of customer's last payment method within a specific sales channel." + ] + }, + { + "title": "AggregationFilter", + "allOf": [ + { + "$ref": "#/components/schemas/AggregationFilter" }, - "defaultBillingAddressId": { - "description": "Unique identity of customer's default billing address within a specific sales channel." + { + "$ref": "#/components/schemas/SubAggregations" + } + ] + }, + { + "title": "AggregationTerms", + "allOf": [ + { + "$ref": "#/components/schemas/AggregationTerms" }, - "defaultShippingAddressId": { - "description": "Unique identity of customer's default shipping address within a specific sales channel." + { + "$ref": "#/components/schemas/SubAggregations" + } + ] + }, + { + "title": "AggregationHistogram", + "allOf": [ + { + "$ref": "#/components/schemas/AggregationHistogram" }, - "customerNumber": { - "description": "Name of the customer within a specific sales channel the customer is interacting." + { + "$ref": "#/components/schemas/SubAggregations" + } + ] + }, + { + "title": "AggregationRange", + "allOf": [ + { + "$ref": "#/components/schemas/AggregationRange" }, - "salutationId": { - "description": "Unique identity of customer's default shipping address within a specific sales channel." + { + "$ref": "#/components/schemas/SubAggregations" + } + ] + } + ] + }, + "SubAggregations": { + "type": "object", + "properties": { + "aggregation": { + "anyOf": [ + { + "$ref": "#/components/schemas/AggregationMetrics" }, - "firstName": { - "description": "First name of the customer within a specific sales channel." + { + "$ref": "#/components/schemas/AggregationEntity" }, - "lastName": { - "description": "Last name of the customer within a specific sales channel." + { + "$ref": "#/components/schemas/AggregationFilter" }, - "company": { - "description": "Company name of the customer within a specific sales channel." + { + "$ref": "#/components/schemas/AggregationTerms" }, - "password": { - "description": "Password of the customer within a specific sales channel." + { + "$ref": "#/components/schemas/AggregationHistogram" }, - "email": { - "description": "Email of the customer within a specific sales channel." + { + "$ref": "#/components/schemas/AggregationRange" + } + ] + } + } + }, + "TotalCountMode": { + "description": "Whether the total for the total number of hits should be determined for the search query. none = disabled total count, exact = calculate exact total amount (slow), next-pages = calculate only for next page (fast)", + "type": "string", + "default": "none", + "enum": [ + "none", + "exact", + "next-pages" + ] + }, + "Query": { + "type": "object", + "properties": { + "score": { + "type": "number" + }, + "query": { + "oneOf": [ + { + "$ref": "#/components/schemas/SimpleFilter" }, - "title": { - "description": "Customer's title or honorifics like Mr, Mrs, etc within a specific sales channel." + { + "$ref": "#/components/schemas/EqualsFilter" }, - "affiliateCode": { - "description": "An affiliate code is an identification option with which website operators can mark outgoing links within a specific sales channel." + { + "$ref": "#/components/schemas/MultiNotFilter" }, - "campaignCode": { - "description": "A unique identifier for a campaign within a specific sales channel." - }, - "active": { - "description": "When `true`, the status of the customer is set active within a specific sales channel." - }, - "doubleOptInRegistration": { - "description": "When `true`, user subscriptions to an email marketing list is allowed within a specific sales channel." - }, - "doubleOptInEmailSentDate": { - "description": "Date and time when the double opt-in email was sent within a specific sales channel." - }, - "doubleOptInConfirmDate": { - "description": "Date and time when the double opt-in email was confirmed within a specific sales channel." - }, - "hash": { - "description": "Password hash for account recovery within a specific sales channel." - }, - "guest": { - "description": "Boolean value is `true` for a guest account within a specific sales channel." - }, - "firstLogin": { - "description": "Captures date and time of customer's first login within a specific sales channel." - }, - "lastLogin": { - "description": "Captures date and time of customer's last login within a specific sales channel." - }, - "newsletter": { - "description": "When `true`, then the customer gets subscribe to the newsletter" - }, - "birthday": { - "description": "Captures customer's birthday details within a specific sales channel." - }, - "lastOrderDate": { - "description": "Captures customer's last order date within a specific sales channel." - }, - "orderCount": { - "description": "Captures the number of orders placed by a customer within a specific sales channel." - }, - "legacyEncoder": { - "description": "encapsulates shop credentials when needed to migrate shop system from old instance to new instance" - }, - "legacyPassword": { - "description": "Hashed password of the old shop system" - }, - "autoIncrement": { - "description": "Internal field. " - }, - "remoteAddress": { - "description": "Anonymous IP address of the customer for last session." + { + "$ref": "#/components/schemas/RangeFilter" } + ] + } + }, + "additionalProperties": true + }, + "Sort": { + "type": "object", + "properties": { + "field": { + "type": "string" + }, + "order": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + }, + "naturalSorting": { + "type": "boolean" + }, + "type": { + "type": "string" + } + }, + "required": [ + "field", + "order" + ] + }, + "Filters": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/SimpleFilter" + }, + { + "$ref": "#/components/schemas/EqualsFilter" + }, + { + "$ref": "#/components/schemas/MultiNotFilter" + }, + { + "$ref": "#/components/schemas/RangeFilter" } + ] + } + }, + "SimpleFilter": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "contains", + "equalsAny", + "prefix", + "suffix" + ] }, - "paymentMethod": { - "$ref": "#/components/schemas/PaymentMethod", - "properties": { - "pluginId": { - "description": "Unique identity of payment plugin within a specific sales channel." - }, - "handlerIdentifier": { - "description": "Internal field that contains system identifier details for payment methods like Paypal." - }, - "name": { - "description": "Name of the payment method within a specific sales channel." - }, - "description": { - "description": "A short description about the payment method within a specific sales channel." - }, - "position": { - "description": "The order of the tabs of your defined payment methods in the storefront by entering numerical values like 1,2,3, etc within a specific sales channel." - }, - "active": { - "description": "When `true`, the payment method is available for usage within a specific sales channel." + "field": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "type", + "field", + "value" + ] + }, + "EqualsFilter": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "equals" + ] + }, + "field": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" }, - "availabilityRuleId": { - "description": "Unique identity of the rule for the payment method." + { + "type": "number" }, - "mediaId": { - "description": "Unique identity of media used in payment method within a specific sales channel." + { + "type": "boolean" }, - "formattedHandlerIdentifier": { - "description": "Internal field that contains system identifier details for payment methods like Paypal." + { + "type": "null" } - } + ] + } + }, + "required": [ + "type", + "field", + "value" + ] + }, + "MultiNotFilter": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "multi", + "not" + ] }, - "shippingLocation": { + "operator": { + "type": "string", + "enum": [ + "and", + "or", + "nor", + "nand" + ] + }, + "queries": { + "$ref": "#/components/schemas/Filters" + } + }, + "required": [ + "type", + "operator", + "queries" + ] + }, + "RangeFilter": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "range" + ] + }, + "field": { + "type": "string" + }, + "parameters": { "type": "object", "properties": { - "apiAlias": { - "type": "string", - "enum": [ - "cart_delivery_shipping_location" - ] + "gte": { + "type": "number" }, - "country": { - "$ref": "#/components/schemas/Country" + "gt": { + "type": "number" }, - "address": { - "$ref": "#/components/schemas/CustomerAddress" + "lte": { + "type": "number" + }, + "lt": { + "type": "number" } } + } + }, + "required": [ + "type", + "field", + "parameters" + ] + }, + "CartError": { + "type": "object", + "description": "A list of all cart errors, such as insufficient stocks, invalid addresses or vouchers.", + "properties": { + "key": { + "type": "string" }, - "shippingMethod": { - "$ref": "#/components/schemas/ShippingMethod", - "properties": { - "name": { - "description": "Name of the shipping method within a specific sales channel." - }, - "active": { - "description": "When `true`, the shipping method is available for usage within a specific sales channel." - }, - "description": { - "description": "A short description about the shipping method within a specific sales channel." - }, - "trackingUrl": { - "description": "URL that allows to track packages for a specific sales channel." - }, - "deliveryTimeId": { - "description": "Unique identity of deliveryTime within a specific sales channel." - }, - "availabilityRuleId": { - "description": "Unique identity of the rule for the payment method." - }, - "mediaId": { - "description": "Unique identity of media used in shipping method within a specific sales channel." - } - } + "level": { + "type": "number", + "enum": [ + 0, + 10, + 20 + ], + "description": "* `0` - notice,\n* `10` - warning,\n* `20` - error" }, - "context": { - "description": "Core context with general configuration values and state", + "message": { + "type": "string" + }, + "messageKey": { + "type": "string" + } + }, + "required": [ + "key", + "level", + "message", + "messageKey" + ] + }, + "WishlistLoadRouteResponse": { + "type": "object", + "required": [ + "products" + ], + "properties": { + "wishlist": { "type": "object", "properties": { - "versionId": { - "type": "string", - "description": "Unique identity of context's version in a specific sales channel." - }, - "currencyId": { + "customerId": { "type": "string", - "description": "Unique identity of currency context in a specific sales channel." - }, - "currencyFactor": { - "type": "integer", - "description": "Unique identity of currency factor context in a specific sales channel." - }, - "currencyPrecision": { - "type": "integer", - "format": "int32", - "description": "It defines the round off value of currency to the nearest decimal point. If set to 2, it rounds off to two significant decimal points." - }, - "languageIdChain": { - "type": "array", - "items": { - "type": "string" - } + "description": "Unique identity of the customer." }, - "scope": { + "salesChannelId": { "type": "string", - "description": "Scope defines if its related to system or user context." + "description": "Unique identity of the sales channel." + } + } + }, + "products": { + "$ref": "#/components/schemas/ProductListingResult" + } + } + }, + "ReferencePrice": { + "type": "object", + "properties": { + "purchaseUnit": { + "type": "number" + }, + "referenceUnit": { + "type": "number" + }, + "unitName": { + "type": "string" + }, + "price": { + "type": "number" + }, + "apiAlias": { + "type": "string", + "enum": [ + "cart_price_reference" + ] + }, + "listPrice": { + "oneOf": [ + { + "$ref": "#/components/schemas/ListPrice" }, - "source": { + { + "type": "null" + } + ] + }, + "regulationPrice": { + "oneOf": [ + { "type": "object", - "required": [ - "salesChannelId", - "type" - ], "properties": { - "type": { + "price": { + "type": "number" + }, + "apiAlias": { "type": "string", "enum": [ - "sales-channel", - "shop-api" + "cart_regulation_price" ] - }, - "salesChannelId": { - "type": "string" } - }, - "description": "When context is related to user in the source, then there is userId." - }, - "taxState": { - "type": "string", - "description": "Tax state can either be `gross` or `net`." + } }, - "useCache": { - "type": "boolean", - "description": "When boolean value is `true`, caching is used." + { + "type": "null" } - } + ] }, - "itemRounding": { - "type": "object", - "required": [ - "decimals", - "interval", - "roundForNet", - "apiAlias" - ], - "properties": { - "apiAlias": { - "type": "string", - "enum": [ - "shopware_core_framework_data_abstraction_layer_pricing_cash_rounding_config" - ] - }, - "decimals": { - "type": "integer", - "format": "int32" - }, - "interval": { - "type": "number", - "format": "float" - }, - "roundForNet": { - "type": "boolean" - } - } + "hasRange": { + "type": "boolean" }, - "totalRounding": { - "type": "object", - "required": [ - "decimals", - "interval", - "roundForNet", - "apiAlias" - ], - "properties": { - "apiAlias": { + "variantId": { + "oneOf": [ + { "type": "string", - "enum": [ - "shopware_core_framework_data_abstraction_layer_pricing_cash_rounding_config" - ] - }, - "decimals": { - "type": "integer", - "format": "int32" - }, - "interval": { - "type": "number", - "format": "float" - }, - "roundForNet": { - "type": "boolean" - } - } - }, - "languageInfo": { - "type": "object", - "required": [ - "localeCode", - "name" - ], - "properties": { - "name": { - "type": "string" + "format": "^[0-9a-f]{32}$" }, - "localeCode": { - "type": "string" + { + "type": "null" } - } - }, - "apiAlias": { - "type": "string", - "enum": [ - "sales_channel_context" ] } }, "required": [ - "salesChannel", - "apiAlias", - "itemRounding", - "totalRounding", - "languageInfo" + "hasRange", + "regulationPrice", + "listPrice", + "calculatedTaxes", + "totalPrice", + "quantity", + "unitName" ] }, - "CookieGroupCollection": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CookieGroup" - } - }, - "AccountNewsletterRecipient": { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "undefined", - "notSet", - "direct", - "optIn", - "optOut" - ] - }, - "apiAlias": { - "type": "string", - "enum": [ - "account_newsletter_recipient" - ] - } - }, - "required": [ - "status", - "apiAlias" - ] - }, - "FindProductVariantRouteResponse": { + "FindProductVariantRouteResponse": { "type": "object", "properties": { "foundCombination": { @@ -14232,675 +13991,547 @@ } } }, - "CrossSellingElementCollection": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CrossSellingElement" - }, - "properties": { - "total": { - "description": "Number of cross selling elements found." - } - } - }, - "CartDeliveryInformation": { + "CookieEntry": { "type": "object", "properties": { + "cookie": { + "type": "string" + }, + "value": { + "type": "string" + }, + "expiration": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "hidden": { + "type": "boolean" + }, "apiAlias": { "type": "string", "enum": [ - "cart_delivery_information" + "cookie_entry" ] - }, - "freeDelivery": { + } + }, + "required": [ + "cookie", + "hidden", + "apiAlias" + ] + }, + "CookieGroup": { + "type": "object", + "properties": { + "isRequired": { "type": "boolean" }, - "deliveryTime": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "min": { - "type": "integer" - }, - "max": { - "type": "integer" - }, - "unit": { - "type": "string" - }, - "apiAlias": { - "type": "string", - "enum": [ - "cart_delivery_time" - ] - } - } + "name": { + "type": "string" }, - "height": { - "type": "integer" + "description": { + "type": "string" }, - "length": { - "type": "integer" + "cookie": { + "type": "string" }, - "restockTime": { - "type": "integer" + "value": { + "type": "string" }, - "stock": { + "expiration": { "type": "integer" }, - "weight": { - "type": "integer" + "entries": { + "$ref": "#/components/schemas/CookieEntryCollection" }, - "width": { - "type": "integer" + "apiAlias": { + "type": "string", + "enum": [ + "cookie_group" + ] } }, + "not": { + "allOf": [ + { + "required": [ + "cookie" + ] + }, + { + "required": [ + "entries" + ] + } + ] + }, "required": [ + "name", + "isRequired", "apiAlias" ] }, - "SuccessResponse": { + "AccountNewsletterRecipient": { "type": "object", "properties": { - "success": { - "type": "boolean" + "status": { + "type": "string", + "enum": [ + "undefined", + "notSet", + "direct", + "optIn", + "optOut" + ] + }, + "apiAlias": { + "type": "string", + "enum": [ + "account_newsletter_recipient" + ] } - } + }, + "required": [ + "status", + "apiAlias" + ] }, - "Criteria": { + "CartPriceQuantity": { "type": "object", - "description": "Criteria to query entities.", "properties": { - "page": { - "description": "Search result page", - "type": "integer" + "apiAlias": { + "type": "string", + "enum": [ + "cart_price_quantity" + ] }, - "term": { - "description": "Search term", - "type": "string" + "isCalculated": { + "type": "boolean" }, - "limit": { - "description": "Number of items per result page", - "type": "integer" + "listPrice": { + "$ref": "#/components/schemas/CartListPrice" }, - "filter": { + "price": { + "type": "number" + }, + "quantity": { + "type": "number" + }, + "regulationPrice": { + "properties": { + "price": { + "type": "number", + "format": "float" + } + }, + "type": "object" + }, + "taxRules": { "type": "array", - "description": "List of filters to restrict the search result. For more information, see [Search Queries > Filter](https://shopware.stoplight.io/docs/store-api/docs/concepts/search-queries.md#filter)", "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SimpleFilter" - }, - { - "$ref": "#/components/schemas/EqualsFilter" - }, - { - "$ref": "#/components/schemas/MultiNotFilter" + "type": "object", + "properties": { + "taxRate": { + "type": "number", + "format": "float" }, - { - "$ref": "#/components/schemas/RangeFilter" + "name": { + "type": "string" } - ] - }, + } + } + }, + "type": { + "type": "string" + } + }, + "required": [ + "apiAlias" + ] + }, + "ProductMeasurements": { + "type": "object", + "description": "Runtime field, cannot be used as part of the criteria. Measurements of a product, including dimensions and weight.", + "properties": { + "width": { + "type": "object", "properties": { - "type": { - "description": "To filter the results and aggregations with filter types like ==, >=, etc." - }, - "field": { - "description": "To filter the results and aggregations by field like an property identifier." + "unit": { + "type": "string", + "enum": [ + "mm", + "cm", + "m", + "in", + "ft" + ], + "default": "mm" }, "value": { - "description": "To filter the results and aggregations by value." + "type": "number" } } }, - "ids": { - "type": "array", - "description": "List of ids to search for", - "items": { - "type": "string" + "height": { + "type": "object", + "properties": { + "unit": { + "type": "string", + "enum": [ + "mm", + "cm", + "m", + "in", + "ft" + ], + "default": "mm" + }, + "value": { + "type": "number" + } } }, - "query": { - "type": "string", - "description": "The query string to search for" - }, - "associations": { - "$ref": "#/components/schemas/Associations" - }, - "post-filter": { - "type": "array", - "description": "Filters that applied without affecting aggregations. For more information, see [Search Queries > Post Filter](https://shopware.stoplight.io/docs/store-api/docs/concepts/search-queries.md#post-filter)", - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SimpleFilter" - }, - { - "$ref": "#/components/schemas/EqualsFilter" - }, - { - "$ref": "#/components/schemas/MultiNotFilter" - }, - { - "$ref": "#/components/schemas/RangeFilter" - } - ] - }, + "length": { + "type": "object", "properties": { - "type": { - "description": "To filter only the results but not the aggregations with filter types like ==, >=, etc." - }, - "field": { - "description": "To filter only the results but not the aggregations by field like an property identifier." + "unit": { + "type": "string", + "enum": [ + "mm", + "cm", + "m", + "in", + "ft" + ], + "default": "mm" }, "value": { - "description": "To filter only the results but not the aggregations by value." + "type": "number" } } }, - "sort": { - "type": "array", - "description": "Sorting in the search result.", - "items": { - "$ref": "#/components/schemas/Sort" - }, + "weight": { + "type": "object", "properties": { - "field": { - "description": "Sort the search results by field like an property identifier." - }, - "order": { - "description": "Sort the search results of orders by ascending or descending." + "unit": { + "type": "string", + "enum": [ + "g", + "kg", + "oz", + "lb" + ], + "default": "kg" }, - "naturalSorting": { - "description": "Sorting for special cases such as German letters with umlauts and similar characters etc." + "value": { + "type": "number" } } - }, - "aggregations": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Aggregation" + } + } + }, + "CartDelivery": { + "type": "object", + "description": "A list of all cart errors, such as insufficient stocks, invalid addresses or vouchers.", + "properties": { + "deliveryDate": { + "type": "object", + "properties": { + "earliest": { + "type": "string", + "format": "date-time" + }, + "latest": { + "type": "string", + "format": "date-time" + } } }, - "fields": { - "type": "array", - "description": "Fields which should be returned in the search result.", - "items": { - "type": "string", - "description": "Name of a field" + "location": { + "type": "object", + "properties": { + "apiAlias": { + "type": "string", + "enum": [ + "cart_delivery_shipping_location" + ] + }, + "country": { + "$ref": "#/components/schemas/Country" + }, + "address": { + "$ref": "#/components/schemas/CustomerAddress" + }, + "state": { + "$ref": "#/components/schemas/CountryState" + } } }, - "grouping": { + "positions": { "type": "array", - "description": "Perform groupings over certain fields", "items": { - "type": "string", - "description": "Name of a field" + "$ref": "#/components/schemas/CartDeliveryPosition" } }, - "total-count-mode": { - "$ref": "#/components/schemas/TotalCountMode" + "shippingCosts": { + "$ref": "#/components/schemas/CalculatedPrice" }, - "includes": { - "$ref": "#/components/schemas/Includes" + "shippingMethod": { + "$ref": "#/components/schemas/ShippingMethod" + } + } + }, + "ProductListingFlags": { + "type": "object", + "description": "Additional flags for product listings", + "properties": { + "no-aggregations": { + "description": "Resets all aggregations in the criteria. This parameter is a flag, the value has no effect.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - "excludes": { - "$ref": "#/components/schemas/Excludes" + "only-aggregations": { + "description": "If this flag is set, no products are fetched. Sorting and associations are also ignored. This parameter is a flag, the value has no effect.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } } }, - "NoneFieldsCriteria": { + "AggregationEntity": { + "title": "AggregationEntity", "type": "object", - "description": "Search parameters. For more information, see our documentation on [Search Queries](https://shopware.stoplight.io/docs/store-api/docs/concepts/search-queries.md#structure)", "properties": { - "page": { - "description": "Search result page", - "type": "integer" + "name": { + "description": "Give your aggregation an identifier, so you can find it easier", + "type": "string" }, - "term": { - "description": "Search term", + "type": { + "description": "The type of aggregation", + "type": "string", + "enum": [ + "entity" + ] + }, + "field": { + "description": "The field you want to aggregate over.", "type": "string" }, - "limit": { - "description": "Number of items per result page", - "type": "integer" + "definition": { + "description": "The entity definition e.g \"product_manufacturer\".", + "type": "string" + } + }, + "required": [ + "name", + "type", + "field", + "definition" + ] + }, + "AggregationFilter": { + "title": "AggregationFilter", + "type": "object", + "properties": { + "name": { + "description": "Give your aggregation an identifier, so you can find it easier", + "type": "string" }, - "filter": { - "type": "array", - "description": "List of filters to restrict the search result. For more information, see [Search Queries > Filter](https://shopware.stoplight.io/docs/store-api/docs/concepts/search-queries.md#filter)", - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SimpleFilter" - }, - { - "$ref": "#/components/schemas/EqualsFilter" - }, - { - "$ref": "#/components/schemas/MultiNotFilter" - }, - { - "$ref": "#/components/schemas/RangeFilter" - } - ] - } + "type": { + "description": "The type of aggregation", + "type": "string", + "enum": [ + "filter" + ] }, - "ids": { + "filter": { "type": "array", - "description": "List of ids to search for", "items": { - "type": "string" + "$ref": "#/components/schemas/Filters" } - }, - "query": { - "type": "string", - "description": "The query string to search for" - }, - "associations": { - "$ref": "#/components/schemas/Associations" - }, - "post-filter": { - "type": "array", - "description": "Filters that applied without affecting aggregations. For more information, see [Search Queries > Post Filter](https://shopware.stoplight.io/docs/store-api/docs/concepts/search-queries.md#post-filter)", - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SimpleFilter" - }, - { - "$ref": "#/components/schemas/EqualsFilter" - }, - { - "$ref": "#/components/schemas/MultiNotFilter" - }, - { - "$ref": "#/components/schemas/RangeFilter" - } - ] - } - }, - "sort": { - "type": "array", - "description": "Sorting in the search result.", - "items": { - "$ref": "#/components/schemas/Sort" - } - }, - "aggregations": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Aggregation" - } - }, - "grouping": { - "type": "array", - "description": "Perform groupings over certain fields", - "items": { - "type": "string", - "description": "Name of a field" - } - }, - "total-count-mode": { - "$ref": "#/components/schemas/TotalCountMode" - }, - "includes": { - "$ref": "#/components/schemas/Includes" - }, - "excludes": { - "$ref": "#/components/schemas/Excludes" - } - } - }, - "Associations": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/Criteria" - } - }, - "Includes": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" } - } + }, + "required": [ + "name", + "type", + "filter" + ] }, - "Excludes": { + "AggregationTerms": { + "title": "AggregationTerms", "type": "object", - "additionalProperties": { - "type": "array", - "items": { + "properties": { + "name": { + "description": "Give your aggregation an identifier, so you can find it easier", "type": "string" - } - } - }, - "Aggregation": { - "anyOf": [ - { - "$ref": "#/components/schemas/AggregationMetrics" - }, - { - "title": "AggregationEntity", - "allOf": [ - { - "$ref": "#/components/schemas/AggregationEntity" - }, - { - "$ref": "#/components/schemas/SubAggregations" - } - ] - }, - { - "title": "AggregationFilter", - "allOf": [ - { - "$ref": "#/components/schemas/AggregationFilter" - }, - { - "$ref": "#/components/schemas/SubAggregations" - } - ] }, - { - "title": "AggregationTerms", - "allOf": [ - { - "$ref": "#/components/schemas/AggregationTerms" - }, - { - "$ref": "#/components/schemas/SubAggregations" - } + "type": { + "description": "The type of aggregation", + "type": "string", + "enum": [ + "terms" ] }, - { - "title": "AggregationHistogram", - "allOf": [ - { - "$ref": "#/components/schemas/AggregationHistogram" - }, - { - "$ref": "#/components/schemas/SubAggregations" - } - ] + "field": { + "description": "The field you want to aggregate over.", + "type": "string" }, - { - "title": "AggregationRange", - "allOf": [ - { - "$ref": "#/components/schemas/AggregationRange" - }, - { - "$ref": "#/components/schemas/SubAggregations" - } - ] - } - ] - }, - "SubAggregations": { - "type": "object", - "properties": { - "aggregation": { - "anyOf": [ - { - "$ref": "#/components/schemas/AggregationMetrics" - }, - { - "$ref": "#/components/schemas/AggregationEntity" - }, - { - "$ref": "#/components/schemas/AggregationFilter" - }, - { - "$ref": "#/components/schemas/AggregationTerms" - }, - { - "$ref": "#/components/schemas/AggregationHistogram" - }, - { - "$ref": "#/components/schemas/AggregationRange" - } - ] - } - } - }, - "TotalCountMode": { - "description": "Whether the total for the total number of hits should be determined for the search query. none = disabled total count, exact = calculate exact total amount (slow), next-pages = calculate only for next page (fast)", - "type": "string", - "default": "none", - "enum": [ - "none", - "exact", - "next-pages" - ] - }, - "Query": { - "type": "object", - "properties": { - "score": { + "limit": { + "description": "The number of terms to return", "type": "number" }, - "query": { - "oneOf": [ - { - "$ref": "#/components/schemas/SimpleFilter" - }, - { - "$ref": "#/components/schemas/EqualsFilter" - }, - { - "$ref": "#/components/schemas/MultiNotFilter" - }, - { - "$ref": "#/components/schemas/RangeFilter" - } - ] + "sort": { + "type": "array", + "description": "Sorting the aggregation result.", + "items": { + "$ref": "#/components/schemas/Sort" + } } }, - "additionalProperties": true + "required": [ + "name", + "type", + "field" + ] }, - "Sort": { + "AggregationHistogram": { + "title": "AggregationHistogram", "type": "object", "properties": { - "field": { + "name": { + "description": "Give your aggregation an identifier, so you can find it easier", "type": "string" }, - "order": { + "type": { + "description": "The type of aggregation", "type": "string", "enum": [ - "ASC", - "DESC" + "histogram" ] }, - "naturalSorting": { - "type": "boolean" + "field": { + "description": "The field you want to aggregate over.", + "type": "string" }, - "type": { + "interval": { + "description": "The interval of the histogram", + "type": "number" + }, + "format": { + "description": "The format of the histogram", + "type": "string" + }, + "timeZone": { + "description": "The timezone of the histogram", "type": "string" } }, "required": [ - "field", - "order" + "name", + "type", + "field" ] }, - "Filters": { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SimpleFilter" - }, - { - "$ref": "#/components/schemas/EqualsFilter" - }, - { - "$ref": "#/components/schemas/MultiNotFilter" - }, - { - "$ref": "#/components/schemas/RangeFilter" - } - ] - } - }, - "SimpleFilter": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "contains", - "equalsAny", - "prefix", - "suffix" - ] - }, - "field": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": [ - "type", - "field", - "value" - ] - }, - "EqualsFilter": { + "AggregationRange": { + "title": "AggregationRange", + "description": "For more information, see [Aggregations Reference > Range Aggregation](https://developer.shopware.com/docs/resources/references/core-reference/dal-reference/aggregations-reference.html#range-aggregations)", "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "equals" - ] - }, - "field": { + "name": { + "description": "Give your aggregation an identifier, so you can find it easier", "type": "string" }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "type", - "field", - "value" - ] - }, - "MultiNotFilter": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "multi", - "not" - ] - }, - "operator": { - "type": "string", - "enum": [ - "and", - "or", - "nor", - "nand" - ] - }, - "queries": { - "$ref": "#/components/schemas/Filters" - } - }, - "required": [ - "type", - "operator", - "queries" - ] - }, - "RangeFilter": { - "type": "object", - "properties": { "type": { + "description": "The type of aggregation", "type": "string", "enum": [ "range" ] }, "field": { + "description": "The field you want to aggregate over.", "type": "string" }, - "parameters": { - "type": "object", - "properties": { - "gte": { - "type": "number" - }, - "gt": { - "type": "number" - }, - "lte": { - "type": "number" - }, - "lt": { - "type": "number" - } + "ranges": { + "description": "The ranges of the aggregation", + "type": "array", + "items": { + "type": "object", + "anyOf": [ + { + "type": "object", + "title": "From and to", + "properties": { + "from": { + "type": "number", + "description": "The lower bound of the range" + }, + "to": { + "type": "number", + "description": "The upper bound of the range" + } + }, + "required": [ + "from", + "to" + ] + }, + { + "type": "object", + "title": "From only", + "properties": { + "from": { + "type": "string", + "description": "The lower bound of the range" + } + }, + "required": [ + "from" + ] + }, + { + "type": "object", + "title": "To only", + "properties": { + "to": { + "type": "string", + "description": "The upper bound of the range" + } + }, + "required": [ + "to" + ] + } + ] } } }, - "required": [ - "type", - "field", - "parameters" - ] - }, - "AggregationMetrics": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "avg", - "count", - "max", - "min", - "stats", - "sum" - ] - }, - "field": { - "type": "string" - } - }, "required": [ "name", "type", - "field" + "field", + "ranges" ] }, - "MeasurementUnits": { + "ContextMeasurementSystemInfo": { "type": "object", - "description": "Configuration of the measurement system", + "description": "Configuration of the measurement system used in the store, by default including units for length and weight.", "properties": { "system": { "type": "string", @@ -14942,1056 +14573,1425 @@ } } }, - "CookieEntry": { + "CrossSellingElement": { "type": "object", "properties": { - "cookie": { - "type": "string" - }, - "value": { - "type": "string" - }, - "expiration": { - "type": "integer" + "crossSelling": { + "$ref": "#/components/schemas/ProductCrossSelling" }, - "name": { - "type": "string" + "products": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Product" + } }, - "description": { - "type": "string" + "total": { + "type": "integer", + "format": "int32" }, - "hidden": { - "type": "boolean" + "streamId": { + "type": "string", + "format": "uuid" }, "apiAlias": { "type": "string", "enum": [ - "cookie_entry" + "cross_selling_element" ] } }, "required": [ - "cookie", - "hidden", + "crossSelling", + "products", + "total", "apiAlias" ] }, - "ContextMeasurementSystemInfo": { - "type": "object", - "description": "Configuration of the measurement system used in the store, by default including units for length and weight.", - "properties": { - "system": { - "type": "string", - "enum": [ - "metric", - "imperial" - ], - "default": "metric", - "description": "The measurement system used in the store. 'metric' for metric system, 'imperial' for imperial system." - }, - "units": { + "NavigationRouteResponse": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Category" + }, + "properties": { + "id": { + "description": "Unique identity of navigation route response." + } + } + }, + "CartDeliveryPosition": { + "type": "object", + "description": "A list of all cart errors, such as insufficient stocks, invalid addresses or vouchers.", + "properties": { + "deliveryDate": { "type": "object", - "description": "Units used in the measurement system.", "properties": { - "length": { + "earliest": { "type": "string", - "enum": [ - "mm", - "cm", - "m", - "in", - "ft" - ], - "default": "mm", - "description": "Unit of length." + "format": "date-time" }, - "weight": { + "latest": { "type": "string", - "enum": [ - "g", - "kg", - "oz", - "lb" - ], - "default": "kg", - "description": "Unit of weight." + "format": "date-time" } } + }, + "identifier": { + "type": "string" + }, + "lineItem": { + "$ref": "#/components/schemas/LineItem" + }, + "price": { + "$ref": "#/components/schemas/CalculatedPrice" } } }, - "ListPrice": { + "CrossSellingElementCollection": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CrossSellingElement" + }, + "properties": { + "total": { + "description": "Number of cross selling elements found." + } + } + }, + "CalculatedPrice": { "type": "object", - "description": "", + "description": "Represents a product along with detailed information required to display a variant selection.", "properties": { - "discount": { + "unitPrice": { "type": "number" }, - "percentage": { + "quantity": { "type": "number" }, - "price": { + "rawTotal": { "type": "number" }, - "apiAlias": { + "totalPrice": { + "type": "number" + }, + "taxStatus": { "type": "string", "enum": [ - "cart_list_price" + "net", + "tax-free" ] - } - }, - "required": [ - "apiAlias" - ] - }, - "ProductListingFlags": { - "type": "object", - "description": "Additional flags for product listings", - "properties": { - "no-aggregations": { - "description": "Resets all aggregations in the criteria. This parameter is a flag, the value has no effect.", + }, + "calculatedTaxes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "apiAlias": { + "type": "string", + "enum": [ + "cart_tax_calculated" + ] + }, + "tax": { + "type": "number" + }, + "taxRate": { + "type": "number" + }, + "price": { + "type": "number" + } + }, + "required": [ + "apiAlias", + "tax", + "taxRate", + "price" + ] + } + }, + "referencePrice": { "oneOf": [ { - "type": "string" + "$ref": "#/components/schemas/CartPriceReference" }, { "type": "null" } ] }, - "only-aggregations": { - "description": "If this flag is set, no products are fetched. Sorting and associations are also ignored. This parameter is a flag, the value has no effect.", + "listPrice": { "oneOf": [ { - "type": "string" + "$ref": "#/components/schemas/CartListPrice" }, { "type": "null" } ] - } - } - }, - "CartListPrice": { - "type": "object", - "description": "", - "properties": { - "discount": { - "type": "number" }, - "percentage": { + "positionPrice": { "type": "number" }, - "price": { + "netPrice": { "type": "number" }, + "regulationPrice": { + "oneOf": [ + { + "type": "object", + "properties": { + "price": { + "type": "number" + }, + "apiAlias": { + "type": "string", + "enum": [ + "cart_regulation_price" + ] + } + } + }, + { + "type": "null" + } + ] + }, + "hasRange": { + "type": "boolean" + }, + "variantId": { + "oneOf": [ + { + "type": "string", + "format": "^[0-9a-f]{32}$" + }, + { + "type": "null" + } + ] + }, "apiAlias": { "type": "string", "enum": [ - "cart_list_price" + "calculated_price" ] + }, + "taxRules": { + "type": "array", + "description": "Currently active tax rules and/or rates", + "items": { + "type": "object", + "properties": { + "taxRate": { + "type": "number", + "format": "float" + }, + "name": { + "type": "string" + } + } + } } }, "required": [ - "apiAlias" + "apiAlias", + "hasRange", + "regulationPrice", + "listPrice", + "referencePrice", + "calculatedTaxes", + "totalPrice", + "quantity", + "unitPrice", + "positionPrice", + "netPrice", + "taxRules", + "rawTotal", + "taxStatus" ] }, - "CustomerAddressBody": { - "description": "Added since version: 6.0.0.0", - "required": [ - "countryId", - "firstName", - "lastName", - "city", - "street" - ], + "CustomerAddressRead": { + "type": "object", "properties": { - "countryId": { + "id": { "type": "string", - "pattern": "^[0-9a-f]{32}$" + "pattern": "^[0-9a-f]{32}$", + "readOnly": true }, - "countryStateId": { + "customerId": { "type": "string", - "pattern": "^[0-9a-f]{32}$" + "pattern": "^[0-9a-f]{32}$", + "readOnly": true }, - "salutationId": { + "createdAt": { "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "firstName": { - "type": "string" + "format": "date-time" }, - "lastName": { - "type": "string" + "updatedAt": { + "oneOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ] }, - "zipcode": { - "type": "string" - }, - "city": { - "type": "string" - }, - "company": { - "type": "string" + "country": { + "$ref": "#/components/schemas/Country" }, - "street": { - "type": "string" + "countryState": { + "oneOf": [ + { + "$ref": "#/components/schemas/CountryState" + }, + { + "type": "null" + } + ] }, - "department": { - "type": "string" + "salutation": { + "$ref": "#/components/schemas/Salutation" + } + }, + "required": [ + "customerId", + "createdAt", + "updatedAt", + "country", + "salutation" + ] + }, + "ProductDetailResponse": { + "type": "object", + "description": "Represents a product along with detailed information required to display a variant selection.", + "properties": { + "product": { + "$ref": "#/components/schemas/Product" }, - "title": { - "type": "string" + "configurator": { + "type": "array", + "description": "List of property groups with their corresponding options and information on how to display them.", + "items": { + "$ref": "#/components/schemas/PropertyGroup" + } }, - "phoneNumber": { - "type": "string" + "id": { + "description": "Unique identity of product detail response." }, - "additionalAddressLine1": { - "type": "string" + "available": { + "description": "When boolean value is true, the product is available for purchase." }, - "additionalAddressLine2": { - "type": "string" + "isCloseout": { + "description": "Boolean value to check if the product is still buyable when stock value is 0." }, - "customFields": { - "type": "object" + "displayGroup": { + "description": "Internal field." }, - "country": { - "$ref": "#/components/schemas/Country" + "manufacturerNumber": { + "description": "Unique number of the product manufacturer." }, - "countryState": { - "$ref": "#/components/schemas/CountryState" + "stock": { + "description": "Quantity of product available." }, - "salutation": { - "$ref": "#/components/schemas/Salutation" + "sortedProperties": { + "description": "Properties of the product that are sorted" } }, - "type": "object" + "required": [ + "product" + ] }, - "OrderRouteResponse": { + "LineItemType": { + "type": "string", + "deprecated": true, + "enum": [ + "product", + "credit", + "custom", + "promotion", + "discount", + "container", + "quantity" + ] + }, + "LineItem": { "type": "object", "properties": { - "orders": { + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LineItem" + } + }, + "cover": { + "$ref": "#/components/schemas/Media" + }, + "dataContextHash": { + "type": "string" + }, + "dataTimestamp": { + "type": "string" + }, + "deliveryInformation": { + "$ref": "#/components/schemas/CartDeliveryInformation" + }, + "description": { + "type": "string", + "description": "Description of line items in an order." + }, + "good": { + "type": "boolean", + "description": "When set to true, it indicates the line item is physical else it is virtual." + }, + "id": { + "type": "string", + "description": "Unique identity of line item." + }, + "label": { + "type": "string", + "description": "It is a typical product name given to the line item." + }, + "modified": { + "type": "boolean", + "description": "When boolean value is `true`, line items are said to be modified." + }, + "modifiedByApp": { + "type": "boolean" + }, + "payload": { + "$ref": "#/components/schemas/ProductJsonApi" + }, + "price": { "type": "object", - "allOf": [ - { - "type": "object", - "required": [ - "elements" - ], - "properties": { - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Order" + "properties": { + "apiAlias": { + "type": "string", + "enum": [ + "calculated_price" + ] + }, + "calculatedTaxes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "apiAlias": { + "type": "string", + "enum": [ + "cart_tax_calculated" + ] + }, + "tax": { + "type": "number" + }, + "taxRate": { + "type": "number" + }, + "price": { + "type": "number" + } + }, + "required": [ + "apiAlias", + "tax", + "taxRate", + "price" + ] + } + }, + "listPrice": { + "oneOf": [ + { + "$ref": "#/components/schemas/CartListPrice" + }, + { + "type": "null" + } + ] + }, + "quantity": { + "type": "number" + }, + "referencePrice": { + "oneOf": [ + { + "$ref": "#/components/schemas/CartPriceReference" + }, + { + "type": "null" + } + ] + }, + "regulationPrice": { + "oneOf": [ + { + "type": "object", + "properties": { + "price": { + "type": "number" + }, + "apiAlias": { + "type": "string", + "enum": [ + "cart_regulation_price" + ] + } + } + }, + { + "type": "null" + } + ] + }, + "totalPrice": { + "type": "number" + }, + "unitPrice": { + "type": "number" + }, + "taxRules": { + "type": "array", + "description": "Currently active tax rules and/or rates", + "items": { + "type": "object", + "properties": { + "taxRate": { + "type": "number", + "format": "float" + }, + "name": { + "type": "string" } } } - }, - { - "$ref": "#/components/schemas/EntitySearchResult" - } - ] - }, - "paymentChangeable": { - "type": "object", - "description": "The key-value pairs contain the uuid of the order as key and a boolean as value, indicating that the payment method can still be changed.", - "additionalProperties": { - "type": "boolean" - } - } - }, - "required": [ - "orders" - ] - }, - "WishlistLoadRouteResponse": { - "type": "object", - "required": [ - "products" - ], - "properties": { - "wishlist": { - "type": "object", - "properties": { - "customerId": { - "type": "string", - "description": "Unique identity of the customer." - }, - "salesChannelId": { - "type": "string", - "description": "Unique identity of the sales channel." } - } - }, - "products": { - "$ref": "#/components/schemas/ProductListingResult" - } - } - }, - "CookieRouteResponse": { - "type": "object", - "description": "Response containing cookie groups and their configuration hash.", - "properties": { - "apiAlias": { - "type": "string", - "enum": [ - "cookie_groups_hash" - ] - }, - "elements": { - "type": "array", - "description": "Collection of cookie groups", - "items": { - "$ref": "#/components/schemas/CookieGroup" - } - }, - "hash": { - "type": "string", - "description": "Hash of the current cookie configuration. Can be used to detect changes in cookie configuration.", - "example": "f86b6a872cb83dbd22d838ceda1aa3d4" - }, - "languageId": { - "type": "string", - "format": "uuid", - "description": "The language ID for which the cookie configuration was generated. Used to store hashes per language.", - "example": "2fbb5fe2e29a4d70aa5854ce7ce3e20b" - } - }, - "required": [ - "elements", - "hash", - "languageId", - "apiAlias" - ], - "example": { - "apiAlias": "cookie_groups_hash", - "elements": [ - { - "isRequired": true, - "description": "Cookies required for this shop to function:", - "name": "Technically required", - "entries": [ - { - "name": "Session", - "hidden": false, - "cookie": "session-", - "apiAlias": "cookie_entry" + }, + "required": [ + "apiAlias", + "totalPrice", + "quantity", + "unitPrice" + ] + }, + "priceDefinition": { + "$ref": "#/components/schemas/CartPriceQuantity" + }, + "quantity": { + "type": "number", + "description": "Number of items of product." + }, + "quantityInformation": { + "type": "object", + "properties": { + "maxPurchase": { + "type": "number" + }, + "minPurchase": { + "type": "number" + }, + "purchaseSteps": { + "type": "number" + } + } + }, + "referencedId": { + "type": "string", + "description": "Unique identity of type of entity." + }, + "removable": { + "type": "boolean", + "description": "Allows the line item to be removable from the cart when set to true." + }, + "stackable": { + "type": "boolean", + "description": "Allows to change the quantity of the line item when set to true." + }, + "states": { + "deprecated": true, + "type": "array", + "items": { + "type": "string", + "enum": [ + "is-physical", + "is-download" + ] + } + }, + "type": { + "$ref": "#/components/schemas/OrderLineItem/properties/type", + "description": "Type refers to the entity type of an item whether it is product or promotion for instance." + }, + "uniqueIdentifier": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "deliveryInformation", + "payload", + "quantity", + "states" + ] + }, + "Price": { + "type": "object", + "description": "Price object", + "properties": { + "currencyId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "gross": { + "description": "", + "type": "number" + }, + "net": { + "description": "", + "type": "number" + }, + "linked": { + "description": "", + "type": "boolean" + }, + "listPrice": { + "description": "", + "type": "object", + "properties": { + "currencyId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "gross": { + "description": "", + "type": "number" + }, + "net": { + "description": "", + "type": "number" + }, + "linked": { + "description": "", + "type": "boolean" + } + }, + "required": [ + "gross", + "net" + ] + }, + "regulationPrice": { + "description": "", + "type": "object", + "properties": { + "currencyId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "gross": { + "description": "", + "type": "number" + }, + "net": { + "description": "", + "type": "number" + }, + "linked": { + "description": "", + "type": "boolean" + } + }, + "required": [ + "gross", + "net" + ] + } + }, + "required": [ + "currencyId", + "gross", + "net" + ] + }, + "CookieRouteResponse": { + "type": "object", + "description": "Response containing cookie groups and their configuration hash.", + "properties": { + "apiAlias": { + "type": "string", + "enum": [ + "cookie_groups_hash" + ] + }, + "elements": { + "type": "array", + "description": "Collection of cookie groups", + "items": { + "$ref": "#/components/schemas/CookieGroup" + } + }, + "hash": { + "type": "string", + "description": "Hash of the current cookie configuration. Can be used to detect changes in cookie configuration.", + "example": "f86b6a872cb83dbd22d838ceda1aa3d4" + }, + "languageId": { + "type": "string", + "format": "uuid", + "description": "The language ID for which the cookie configuration was generated. Used to store hashes per language.", + "example": "2fbb5fe2e29a4d70aa5854ce7ce3e20b" + } + }, + "required": [ + "elements", + "hash", + "languageId", + "apiAlias" + ], + "example": { + "apiAlias": "cookie_groups_hash", + "elements": [ + { + "isRequired": true, + "description": "Cookies required for this shop to function:", + "name": "Technically required", + "entries": [ + { + "name": "Session", + "hidden": false, + "cookie": "session-", + "apiAlias": "cookie_entry" + }, + { + "name": "Timezone", + "hidden": false, + "cookie": "timezone", + "apiAlias": "cookie_entry" + }, + { + "value": "1", + "expiration": 30, + "name": "Cookie preferences", + "hidden": true, + "cookie": "cookie-preference", + "apiAlias": "cookie_entry" + } + ], + "apiAlias": "cookie_group" + }, + { + "isRequired": false, + "description": "Cookies used for statistics and shop performance metrics.", + "name": "Statistics", + "entries": [ + { + "value": "1", + "expiration": 30, + "name": "Google Analytics", + "hidden": false, + "cookie": "google-analytics-enabled", + "apiAlias": "cookie_entry" + } + ], + "apiAlias": "cookie_group" + }, + { + "isRequired": false, + "description": "Allows Google to collect personal data for online advertising and marketing.", + "name": "Marketing", + "entries": [ + { + "value": "1", + "expiration": 30, + "name": "Google Advertising", + "hidden": false, + "cookie": "google-ads-enabled", + "apiAlias": "cookie_entry" + } + ], + "apiAlias": "cookie_group" + }, + { + "isRequired": false, + "name": "Comfort features", + "entries": [ + { + "value": "1", + "expiration": 30, + "name": "YouTube video", + "hidden": false, + "cookie": "youtube-video", + "apiAlias": "cookie_entry" + } + ], + "apiAlias": "cookie_group" + } + ], + "hash": "f86b6a872cb83dbd22d838ceda1aa3d4", + "languageId": "2fbb5fe2e29a4d70aa5854ce7ce3e20b" + } + }, + "SuccessResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + } + } + }, + "ShippingMethodPageRouteResponse": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "deliveryTimeId": { + "type": "string" + }, + "deliveryTime": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "min": { + "type": "integer", + "format": "int32" + }, + "max": { + "type": "integer", + "format": "int32" + }, + "unit": { + "type": "string" + } + } + }, + "translations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "shippingMethodId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + } + }, + "orderDeliveries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "orderId": { + "type": "string" + }, + "shippingOrderAddressId": { + "type": "string" + }, + "shippingMethodId": { + "type": "string" + }, + "shippingDateEarliest": { + "type": "string", + "format": "date-time" + }, + "shippingDateLatest": { + "type": "string", + "format": "date-time" + }, + "stateId": { + "type": "string" + } + } + } + }, + "salesChannelDefaultAssignments": { + "type": "array", + "items": { + "type": "object", + "properties": { + "typeId": { + "type": "string" + }, + "languageId": { + "type": "string" + }, + "currencyId": { + "type": "string" + }, + "paymentMethodId": { + "type": "string" + }, + "shippingMethodId": { + "type": "string" + }, + "countryId": { + "type": "string" + }, + "navigationCategoryId": { + "type": "string" + }, + "navigationCategoryDepth": { + "type": "integer", + "format": "int32" + }, + "footerCategoryId": { + "type": "string" + }, + "serviceCategoryId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "shortName": { + "type": "string" + }, + "accessKey": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "maintenance": { + "type": "boolean" + }, + "maintenanceIpWhitelist": { + "type": "string" + }, + "mailHeaderFooterId": { + "type": "string" + }, + "customerGroupId": { + "type": "string" + }, + "hreflangActive": { + "type": "boolean" + }, + "hreflangDefaultDomainId": { + "type": "string" + } + } + } + }, + "salesChannels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "typeId": { + "type": "string" + }, + "languageId": { + "type": "string" + }, + "currencyId": { + "type": "string" + }, + "paymentMethodId": { + "type": "string" + }, + "shippingMethodId": { + "type": "string" + }, + "countryId": { + "type": "string" + }, + "navigationCategoryId": { + "type": "string" + }, + "navigationCategoryDepth": { + "type": "integer", + "format": "int32" + }, + "footerCategoryId": { + "type": "string" + }, + "serviceCategoryId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "shortName": { + "type": "string" + }, + "accessKey": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "maintenance": { + "type": "boolean" + }, + "maintenanceIpWhitelist": { + "type": "string" + }, + "mailHeaderFooterId": { + "type": "string" + }, + "customerGroupId": { + "type": "string" + }, + "hreflangActive": { + "type": "boolean" + }, + "hreflangDefaultDomainId": { + "type": "string" + } + } + } + }, + "availabilityRule": { + "type": "object", + "properties": { + "name": { + "type": "string" }, - { - "name": "Timezone", - "hidden": false, - "cookie": "timezone", - "apiAlias": "cookie_entry" + "description": { + "type": "string" }, - { - "value": "1", - "expiration": 30, - "name": "Cookie preferences", - "hidden": true, - "cookie": "cookie-preference", - "apiAlias": "cookie_entry" + "priority": { + "type": "integer", + "format": "int32" + }, + "invalid": { + "type": "boolean" } - ], - "apiAlias": "cookie_group" + } }, - { - "isRequired": false, - "description": "Cookies used for statistics and shop performance metrics.", - "name": "Statistics", - "entries": [ - { - "value": "1", - "expiration": 30, - "name": "Google Analytics", - "hidden": false, - "cookie": "google-analytics-enabled", - "apiAlias": "cookie_entry" - } - ], - "apiAlias": "cookie_group" + "availabilityRuleId": { + "type": "string" }, - { - "isRequired": false, - "description": "Allows Google to collect personal data for online advertising and marketing.", - "name": "Marketing", - "entries": [ - { - "value": "1", - "expiration": 30, - "name": "Google Advertising", - "hidden": false, - "cookie": "google-ads-enabled", - "apiAlias": "cookie_entry" + "prices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "shippingMethodId": { + "type": "string" + }, + "currencyId": { + "type": "string" + }, + "ruleId": { + "type": "string" + }, + "calculation": { + "type": "integer", + "format": "int32" + }, + "quantityStart": { + "type": "number", + "format": "float" + }, + "quantityEnd": { + "type": "number", + "format": "float" + }, + "price": { + "type": "number", + "format": "float" + }, + "calculationRuleId": { + "type": "string" + } } - ], - "apiAlias": "cookie_group" + } }, - { - "isRequired": false, - "name": "Comfort features", - "entries": [ - { - "value": "1", - "expiration": 30, - "name": "YouTube video", - "hidden": false, - "cookie": "youtube-video", - "apiAlias": "cookie_entry" + "mediaId": { + "type": "string" + }, + "media": { + "type": "object", + "properties": { + "userId": { + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "fileExtension": { + "type": "string" + }, + "fileSize": { + "type": "integer", + "format": "int32" + }, + "title": { + "type": "string" + }, + "metaDataRaw": { + "type": "string" + }, + "mediaTypeRaw": { + "type": "string" + }, + "uploadedAt": { + "type": "string", + "format": "date-time" + }, + "alt": { + "type": "string" + }, + "url": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "mediaFolderId": { + "type": "string" + }, + "private": { + "type": "boolean" + }, + "thumbnailsRo": { + "type": "string" } - ], - "apiAlias": "cookie_group" - } - ], - "hash": "f86b6a872cb83dbd22d838ceda1aa3d4", - "languageId": "2fbb5fe2e29a4d70aa5854ce7ce3e20b" - } - }, - "NavigationRouteResponse": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Category" - }, - "properties": { - "id": { - "description": "Unique identity of navigation route response." - } - } - }, - "EntitySearchResult": { - "type": "object", - "properties": { - "entity": { - "type": "string" - }, - "total": { - "type": "integer", - "description": "The total number of found entities" - }, - "aggregations": { - "type": "array", - "description": "Contains aggregated data. A simple example is the determination of the average price from a product search query.", - "items": { - "type": "object" + } + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } } - }, - "page": { - "type": "integer", - "description": "The actual page. This can be used for pagination." - }, - "limit": { - "type": "integer", - "description": "The actual limit. This is used for pagination and goes together with the page." - } - } - }, - "CartError": { - "type": "object", - "description": "A list of all cart errors, such as insufficient stocks, invalid addresses or vouchers.", - "properties": { - "key": { - "type": "string" - }, - "level": { - "type": "number", - "enum": [ - 0, - 10, - 20 - ], - "description": "* `0` - notice,\n* `10` - warning,\n* `20` - error" - }, - "message": { - "type": "string" - }, - "messageKey": { - "type": "string" } }, - "required": [ - "key", - "level", - "message", - "messageKey" - ] - }, - "CustomerAddressRead": { - "type": "object", "properties": { - "id": { - "type": "string", - "pattern": "^[0-9a-f]{32}$", - "readOnly": true + "name": { + "description": "Name of the shipping method." }, - "customerId": { - "type": "string", - "pattern": "^[0-9a-f]{32}$", - "readOnly": true + "active": { + "description": "When boolean value is `true`, the shipping methods are available for selection in the storefront." }, - "createdAt": { - "type": "string", - "format": "date-time" + "description": { + "description": "The order of the tabs of your defined shipping methods in the storefront by entering numerical values like 1,2,3, etc." }, - "updatedAt": { - "oneOf": [ - { - "type": "string", - "format": "date-time" + "deliveryTimeId": { + "description": "Unique identity of the delivery time." + }, + "deliveryTime": { + "properties": { + "name": { + "description": "Name given to delivery time." }, - { - "type": "null" + "min": { + "description": "Minimum delivery time taken." + }, + "max": { + "description": "Maximum delivery time taken." + }, + "unit": { + "description": "Unit in which the delivery time is defined. For example, days or hours." } - ] - }, - "country": { - "$ref": "#/components/schemas/Country" + } }, - "countryState": { - "oneOf": [ - { - "$ref": "#/components/schemas/CountryState" + "translations": { + "properties": { + "shippingMethodId": { + "description": "Unique identity of shipping method." }, - { - "type": "null" + "name": { + "description": "Name of the shipping method." + }, + "description": { + "description": "A short description of the shipping method." } - ] + } }, - "salutation": { - "$ref": "#/components/schemas/Salutation" - } - }, - "required": [ - "customerId", - "createdAt", - "updatedAt", - "country", - "salutation" - ] - }, - "ProductListingCriteria": { - "allOf": [ - { - "$ref": "#/components/schemas/Criteria" + "orderDeliveries": { + "properties": { + "orderId": { + "description": "Unique identity of order." + }, + "shippingOrderAddressId": { + "description": "Unique identity of shipping order address." + }, + "shippingMethodId": { + "description": "Unique identity of shipping method." + }, + "shippingDateEarliest": { + "description": "Date and time of earliest delivery of products." + }, + "shippingDateLatest": { + "description": "Date and time of latest delivery of products." + }, + "stateId": { + "description": "Unique identity of state." + } + } }, - { - "type": "object", - "description": "Additional search parameters for product listings", + "salesChannelDefaultAssignments": { "properties": { - "order": { - "description": "Specifies the sorting of the products by `availableSortings`. If not set, the default sorting will be set according to the shop settings. The available sorting options are sent within the response under the `availableSortings` key. In order to sort by a field, consider using the `sort` parameter from the listing criteria. Do not use both parameters together, as it might lead to unexpected results.", - "type": "string" + "stateId": { + "description": "Unique identity of state." }, - "limit": { - "description": "Number of items per result page. If not set, the limit will be set according to the default products per page, defined in the system settings.", - "type": "integer", - "minimum": 0 + "languageId": { + "description": "Unique identity of language." }, - "p": { - "description": "Search result page", - "type": "integer", - "default": 1 + "currencyId": { + "description": "Unique identity of currency." }, - "manufacturer": { - "description": "Filter by manufacturers. List of manufacturer identifiers separated by a `|`.", - "type": "string" + "paymentMethodId": { + "description": "Unique identity of payment method." }, - "min-price": { - "description": "Filters by a minimum product price. Has to be lower than the `max-price` filter.", - "type": "integer", - "minimum": 0, - "default": 0 + "shippingMethodId": { + "description": "Unique identity of shipping method." }, - "max-price": { - "description": "Filters by a maximum product price. Has to be higher than the `min-price` filter.", - "type": "integer", - "minimum": 0, - "default": 0 + "countryId": { + "description": "Unique identity of country." }, - "rating": { - "description": "Filter products with a minimum average rating.", - "type": "integer" + "navigationCategoryId": { + "description": "Unique identity of navigation category." }, - "shipping-free": { - "description": "Filters products that are marked as shipping-free.", - "type": "boolean", - "default": false + "navigationCategoryDepth": { + "description": "It determines the number of levels of subcategories in the storefront category menu." }, - "properties": { - "description": "Filters products by their properties. List of property identifiers separated by a `|`.", - "type": "string" + "footerCategoryId": { + "description": "Unique identity of footer category." }, - "manufacturer-filter": { - "description": "Enables/disabled filtering by manufacturer. If set to false, the `manufacturer` filter will be ignored. Also the `aggregations[manufacturer]` key will be removed from the response.", - "type": "boolean", - "default": true + "serviceCategoryId": { + "description": "Unique identity of service category." }, - "price-filter": { - "description": "Enables/disabled filtering by price. If set to false, the `min-price` and `max-price` filter will be ignored. Also the `aggregations[price]` key will be removed from the response.", - "type": "boolean", - "default": true + "name": { + "description": "Name of the sales channel." + }, + "shortName": { + "description": "A short name for sales channel." }, - "rating-filter": { - "description": "Enables/disabled filtering by rating. If set to false, the `rating` filter will be ignored. Also the `aggregations[rating]` key will be removed from the response.", - "type": "boolean", - "default": true + "accessKey": { + "description": "Access key to store api." }, - "shipping-free-filter": { - "description": "Enables/disabled filtering by shipping-free products. If set to false, the `shipping-free` filter will be ignored. Also the `aggregations[shipping-free]` key will be removed from the response.", - "type": "boolean", - "default": true + "active": { + "description": "When boolean value is `true`, the shipping methods are available for selection in the sales channel's storefront." }, - "property-filter": { - "description": "Enables/disabled filtering by properties products. If set to false, the `properties` filter will be ignored. Also the `aggregations[properties]` key will be removed from the response.", - "type": "boolean", - "default": true + "maintenance": { + "description": "When `true`, it indicates that the sales channel is undergoing maintenance, and shopping is temporarily unavailable during this period." }, - "property-whitelist": { - "description": "A whitelist of property identifiers which can be used for filtering. List of property identifiers separated by a `|`. The `property-filter` must be `true`, otherwise the whitelist has no effect.", - "type": "string" + "maintenanceIpWhitelist": { + "description": "Array of IP address allowed to access the sales channel." }, - "reduce-aggregations": { - "description": "By sending the parameter `reduce-aggregations` , the post-filters that were applied by the customer, are also applied to the aggregations. This has the consequence that only values are returned in the aggregations that would lead to further filter results. This parameter is a flag, the value has no effect.", - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - } - } - ], - "properties": { - "filter": { - "properties": { - "type": { - "description": "To filter the results and aggregations with filter types like ==, >=, etc." + "mailHeaderFooterId": { + "description": "Unique identity of mail header and footer." }, - "field": { - "description": "To filter the results and aggregations by field like an property identifier." + "customerGroupId": { + "description": "Unique identity of customer group." }, - "value": { - "description": "To filter the results and aggregations by value." + "hreflangActive": { + "description": "When boolean value is `true`, the sales channel pages are available in different languages." + }, + "hreflangDefaultDomainId": { + "description": "Unique identity of hreflangDefaultDomain." } } }, - "sort": { + "salesChannels": { "properties": { - "field": { - "description": "Sort the search results by field like an property identifier." + "stateId": { + "description": "Unique identity of state." }, - "order": { - "description": "Sort the search results of orders by ascending or descending." + "languageId": { + "description": "Unique identity of language." }, - "naturalSorting": { - "description": "Sorting for special cases such as German letters with umlauts and similar characters etc." - } - } - }, - "post-filter": { - "properties": { - "type": { - "description": "To filter only the results but not the aggregations with filter types like ==, >=, etc." + "currencyId": { + "description": "Unique identity of currency." }, - "field": { - "description": "To filter only the results but not the aggregations by field like an property identifier." + "paymentMethodId": { + "description": "Unique identity of payment method." }, - "value": { - "description": "To filter only the results but not the aggregations by value." - } - } - } - } - }, - "Cart": { - "type": "object", - "properties": { - "name": { - "description": "Name of the cart - for example `guest-cart`", - "type": "string" - }, - "token": { - "description": "Context token identifying the cart and the user session", - "type": "string" - }, - "price": { - "$ref": "#/components/schemas/CalculatedPrice" - }, - "lineItems": { - "description": "All items within the cart", - "type": "array", - "items": { - "$ref": "#/components/schemas/LineItem" - } - }, - "errors": { - "type": "object", - "description": "A list of all cart errors, such as insufficient stocks, invalid addresses or vouchers.", - "anyOf": [ - { - "type": "array", - "items": { - "$ref": "#/components/schemas/CartError" - } + "shippingMethodId": { + "description": "Unique identity of shipping method." }, - { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "code": { - "type": "number" - }, - "key": { - "type": "string" - }, - "level": { - "type": "number" - }, - "message": { - "type": "string" - }, - "messageKey": { - "type": "string" - } - }, - "required": [ - "code", - "key", - "level", - "message", - "messageKey" - ] - } - } - ], - "properties": { - "key": { - "description": "Unique key for every message." + "countryId": { + "description": "Unique identity of country." }, - "level": { - "description": "Types of level - Notice, warning and error. " + "navigationCategoryId": { + "description": "Unique identity of navigation category." }, - "message": { - "description": "A persistent error passed from the shopping cart calculation processes to the user end." - } - } - }, - "deliveries": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CartDelivery" - } - }, - "transactions": { - "description": "A list of all payment transactions associated with the current cart.", - "type": "array", - "items": { - "type": "object", - "properties": { - "paymentMethodId": { - "type": "string" - }, - "amount": { - "$ref": "#/components/schemas/CalculatedPrice" - } - } - }, - "properties": { - "paymentMethodId": { - "description": "Unique identity of payment method." - } - } - }, - "modified": { - "type": "boolean", - "description": "It signifies any changes to cart." - }, - "customerComment": { - "description": "A comment that can be added to the cart.", - "oneOf": [ - { - "type": "string" + "navigationCategoryDepth": { + "description": "It determines the number of levels of subcategories in the storefront category menu." }, - { - "type": "null" - } - ] - }, - "affiliateCode": { - "description": "An affiliate tracking code", - "oneOf": [ - { - "type": "string" + "footerCategoryId": { + "description": "Unique identity of footer category." }, - { - "type": "null" - } - ] - }, - "campaignCode": { - "description": "A campaign tracking code", - "oneOf": [ - { - "type": "string" + "serviceCategoryId": { + "description": "Unique identity of service category." }, - { - "type": "null" + "name": { + "description": "Name of the sales channel." + }, + "shortName": { + "description": "A short name for sales channel." + }, + "accessKey": { + "description": "Access key to store api." + }, + "active": { + "description": "When boolean value is `true`, the shipping methods are available for selection in the storefront." + }, + "maintenance": { + "description": "When `true`, it indicates that the sales channel is undergoing maintenance, and shopping is temporarily unavailable during this period." + }, + "maintenanceIpWhitelist": { + "description": "Array of IP address allowed to access the sales channel." + }, + "mailHeaderFooterId": { + "description": "Unique identity of mail header and footer." + }, + "customerGroupId": { + "description": "Unique identity of customer group." + }, + "hreflangActive": { + "description": "When boolean value is `true``, the sales channel pages are available in different languages." + }, + "hreflangDefaultDomainId": { + "description": "Unique identity of hreflangDefaultDomain." } - ] - }, - "apiAlias": { - "type": "string", - "enum": [ - "cart" - ] + } }, - "id": { - "description": "Unique identity of cart." - } - }, - "required": [ - "price", - "apiAlias" - ] - }, - "Association": { - "additionalProperties": { - "$ref": "#/components/schemas/Association" - } - }, - "ProductMeasurements": { - "type": "object", - "description": "Runtime field, cannot be used as part of the criteria. Measurements of a product, including dimensions and weight.", - "properties": { - "width": { - "type": "object", + "availabilityRule": { "properties": { - "unit": { - "type": "string", - "enum": [ - "mm", - "cm", - "m", - "in", - "ft" - ], - "default": "mm" + "name": { + "description": "Unique name for the rule." }, - "value": { - "type": "number" + "description": { + "description": "A short description about the rule." + }, + "priority": { + "description": "A numerical value to prioritize one of the rules from the list." + }, + "invalid": { + "description": "When the boolean value is `true`, the rule is no more available for usage." } } }, - "height": { - "type": "object", + "availabilityRuleId": { + "description": "Unique identity of availability rule." + }, + "prices": { "properties": { - "unit": { - "type": "string", - "enum": [ - "mm", - "cm", - "m", - "in", - "ft" - ], - "default": "mm" + "shippingMethodId": { + "description": "Unique identity of shipping method." }, - "value": { - "type": "number" + "currencyId": { + "description": "Unique identity of currency." + }, + "ruleId": { + "description": "Unique identity of rule." + }, + "calculation": { + "description": "Shipping price calculated based on quantity, price, weight or volume of items." + }, + "quantityStart": { + "description": "Starting range of quantity of an item." + }, + "quantityEnd": { + "description": "Ending range of quantity of an item." + }, + "price": { + "description": "Shipping method price after applied rules." + }, + "calculationRuleId": { + "description": "Unique identity of calculation rule." } } }, - "length": { - "type": "object", + "mediaId": { + "description": "Unique identity of media." + }, + "media": { "properties": { - "unit": { - "type": "string", - "enum": [ - "mm", - "cm", - "m", - "in", - "ft" - ], - "default": "mm" + "userId": { + "description": "Unique identity of user." }, - "value": { - "type": "number" + "mimeType": { + "description": "A string sent along with a file indicating the type of the file. For example: image/jpeg." + }, + "fileExtension": { + "description": "Type of file indication. For example: jpeg, png." + }, + "fileSize": { + "description": "Size of the file media file uploaded." + }, + "title": { + "description": "Title name give to the media." + }, + "metaDataRaw": { + "description": "Details of the media file uploaded." + }, + "alt": { + "description": "Alternate text for media." + }, + "url": { + "description": "Runtime field, cannot be used as part of the criteria." + }, + "fileName": { + "description": "Name of the media file uploaded." + }, + "mediaFolderId": { + "description": "Unique identity of media folder." + }, + "private": { + "description": "Boolean value is `true` to keep the media display private." } } }, - "weight": { - "type": "object", + "tags": { "properties": { - "unit": { - "type": "string", - "enum": [ - "g", - "kg", - "oz", - "lb" - ], - "default": "kg" - }, - "value": { - "type": "number" + "name": { + "description": "Name of the tag." } } } } }, - "CalculatedPrice": { + "ListPrice": { "type": "object", - "description": "Represents a product along with detailed information required to display a variant selection.", - "properties": { - "unitPrice": { - "type": "number" - }, - "quantity": { - "type": "number" - }, - "rawTotal": { - "type": "number" - }, - "totalPrice": { - "type": "number" - }, - "taxStatus": { - "type": "string", - "enum": [ - "net", - "tax-free" - ] - }, - "calculatedTaxes": { - "type": "array", - "items": { - "type": "object", - "properties": { - "apiAlias": { - "type": "string", - "enum": [ - "cart_tax_calculated" - ] - }, - "tax": { - "type": "number" - }, - "taxRate": { - "type": "number" - }, - "price": { - "type": "number" - } - }, - "required": [ - "apiAlias", - "tax", - "taxRate", - "price" - ] - } - }, - "referencePrice": { - "oneOf": [ - { - "$ref": "#/components/schemas/CartPriceReference" - }, - { - "type": "null" - } - ] - }, - "listPrice": { - "oneOf": [ - { - "$ref": "#/components/schemas/CartListPrice" - }, - { - "type": "null" - } - ] - }, - "positionPrice": { - "type": "number" - }, - "netPrice": { - "type": "number" - }, - "regulationPrice": { - "oneOf": [ - { - "type": "object", - "properties": { - "price": { - "type": "number" - }, - "apiAlias": { - "type": "string", - "enum": [ - "cart_regulation_price" - ] - } - } - }, - { - "type": "null" - } - ] + "description": "", + "properties": { + "discount": { + "type": "number" }, - "hasRange": { - "type": "boolean" + "percentage": { + "type": "number" }, - "variantId": { - "oneOf": [ - { - "type": "string", - "format": "^[0-9a-f]{32}$" - }, - { - "type": "null" - } - ] + "price": { + "type": "number" }, "apiAlias": { "type": "string", "enum": [ - "calculated_price" + "cart_list_price" ] - }, - "taxRules": { - "type": "array", - "description": "Currently active tax rules and/or rates", - "items": { - "type": "object", - "properties": { - "taxRate": { - "type": "number", - "format": "float" - }, - "name": { - "type": "string" - } - } - } } }, "required": [ - "apiAlias", - "hasRange", - "regulationPrice", - "listPrice", - "referencePrice", - "calculatedTaxes", - "totalPrice", - "quantity", - "unitPrice", - "positionPrice", - "netPrice", - "taxRules", - "rawTotal", - "taxStatus" + "apiAlias" ] }, "BreadcrumbCollection": { @@ -16632,34 +16632,232 @@ "example": { "errors": [ { - "status": "400", - "title": "Bad Request", - "description": "Bad parameters for this endpoint. See documentation for the correct ones." + "status": "400", + "title": "Bad Request", + "description": "Bad parameters for this endpoint. See documentation for the correct ones." + } + ] + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/failure" + }, + "example": { + "errors": [ + { + "status": "400", + "title": "Bad Request", + "description": "Bad parameters for this endpoint. See documentation for the correct ones." + } + ] + } + } + } + }, + "204": { + "description": "No Content" + }, + "CountryListResponse": { + "description": "Entity search result containing countries.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "properties": { + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Country" + } + } + }, + "type": "object" + }, + { + "$ref": "#/components/schemas/EntitySearchResult" + } + ] + } + } + } + }, + "SalutationListResponse": { + "description": "Entity search result containing salutations.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "properties": { + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Salutation" + } + } + }, + "type": "object" + }, + { + "$ref": "#/components/schemas/EntitySearchResult" + } + ] + } + } + } + }, + "PaymentMethodListResponse": { + "description": "", + "content": { + "application/json": { + "schema": { + "properties": { + "total": { + "description": "Total amount", + "type": "integer" + }, + "aggregations": { + "description": "aggregation result", + "type": "object" + }, + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PaymentMethod" + } + } + }, + "type": "object" + } + } + } + }, + "ProductListResponse": { + "description": "Entity search result containing products", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "required": [ + "elements" + ], + "properties": { + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Product" + } + } + }, + "type": "object" + }, + { + "$ref": "#/components/schemas/EntitySearchResult" + } + ] + } + } + } + }, + "LanguageListResponse": { + "description": "Entity search result containing languages.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "properties": { + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "required": [ + "elements" + ], + "type": "object" + }, + { + "$ref": "#/components/schemas/EntitySearchResult" + } + ] + } + } + } + }, + "CategoryListResponse": { + "description": "Entity search result containing categories.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Category" + } + } + } + }, + { + "$ref": "#/components/schemas/EntitySearchResult" + } + ] + } + } + } + }, + "SeoUrlListResponse": { + "description": "Entity search result containing seo urls.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "properties": { + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SeoUrl" + } + } + }, + "type": "object", + "required": [ + "elements" + ] + }, + { + "$ref": "#/components/schemas/EntitySearchResult" } ] } - }, + } + } + }, + "CurrencyListResponse": { + "description": "Entity search result containing currencies.", + "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/failure" - }, - "example": { - "errors": [ - { - "status": "400", - "title": "Bad Request", - "description": "Bad parameters for this endpoint. See documentation for the correct ones." - } - ] + "type": "array", + "items": { + "$ref": "#/components/schemas/Currency" + } } } } }, - "204": { - "description": "No Content" - }, - "LanguageListResponse": { - "description": "Entity search result containing languages.", + "CountryStateListResponse": { + "description": "Entity search result containing countries.", "content": { "application/json": { "schema": { @@ -16669,13 +16867,10 @@ "elements": { "type": "array", "items": { - "$ref": "#/components/schemas/Language" + "$ref": "#/components/schemas/CountryState" } } }, - "required": [ - "elements" - ], "type": "object" }, { @@ -16875,56 +17070,6 @@ } } }, - "CountryListResponse": { - "description": "Entity search result containing countries.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "properties": { - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Country" - } - } - }, - "type": "object" - }, - { - "$ref": "#/components/schemas/EntitySearchResult" - } - ] - } - } - } - }, - "CategoryListResponse": { - "description": "Entity search result containing categories.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Category" - } - } - } - }, - { - "$ref": "#/components/schemas/EntitySearchResult" - } - ] - } - } - } - }, "ContextTokenResponse": { "description": "Returns the context token. Use that as your `sw-context-token` header for subsequent requests. Redirect if getRedirectUrl is set.", "headers": { @@ -16984,151 +17129,6 @@ } } } - }, - "PaymentMethodListResponse": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "total": { - "description": "Total amount", - "type": "integer" - }, - "aggregations": { - "description": "aggregation result", - "type": "object" - }, - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PaymentMethod" - } - } - }, - "type": "object" - } - } - } - }, - "CurrencyListResponse": { - "description": "Entity search result containing currencies.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Currency" - } - } - } - } - }, - "SeoUrlListResponse": { - "description": "Entity search result containing seo urls.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "properties": { - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SeoUrl" - } - } - }, - "type": "object", - "required": [ - "elements" - ] - }, - { - "$ref": "#/components/schemas/EntitySearchResult" - } - ] - } - } - } - }, - "SalutationListResponse": { - "description": "Entity search result containing salutations.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "properties": { - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Salutation" - } - } - }, - "type": "object" - }, - { - "$ref": "#/components/schemas/EntitySearchResult" - } - ] - } - } - } - }, - "ProductListResponse": { - "description": "Entity search result containing products", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "required": [ - "elements" - ], - "properties": { - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Product" - } - } - }, - "type": "object" - }, - { - "$ref": "#/components/schemas/EntitySearchResult" - } - ] - } - } - } - }, - "CountryStateListResponse": { - "description": "Entity search result containing countries.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "properties": { - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CountryState" - } - } - }, - "type": "object" - }, - { - "$ref": "#/components/schemas/EntitySearchResult" - } - ] - } - } - } } }, "parameters": { @@ -17142,14 +17142,46 @@ "default": "application/json" } }, - "accept": { - "name": "Accept", - "in": "header", - "description": "Accepted response content types", - "required": true, + "accept": { + "name": "Accept", + "in": "header", + "description": "Accepted response content types", + "required": true, + "schema": { + "type": "string", + "default": "application/json" + } + }, + "noAggregations": { + "name": "no-aggregations", + "in": "query", + "description": "Resets all aggregations in the criteria. This parameter is a flag, the value has no effect.", + "required": false, + "schema": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "onlyAggregations": { + "name": "only-aggregations", + "in": "query", + "description": "If this flag is set, no products are fetched. Sorting and associations are also ignored. This parameter is a flag, the value has no effect.", + "required": false, "schema": { - "type": "string", - "default": "application/json" + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } }, "criteriaPage": { @@ -17348,38 +17380,6 @@ "format": "base64url", "example": "H4sIAAAAAAAAA6tWykpNzFGyqlbKz8lPTSxRslJKSi0pzSsFAGcQr7sHAAAA" } - }, - "noAggregations": { - "name": "no-aggregations", - "in": "query", - "description": "Resets all aggregations in the criteria. This parameter is a flag, the value has no effect.", - "required": false, - "schema": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "onlyAggregations": { - "name": "only-aggregations", - "in": "query", - "description": "If this flag is set, no products are fetched. Sorting and associations are also ignored. This parameter is a flag, the value has no effect.", - "required": false, - "schema": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } } }, "securitySchemes": { @@ -17403,43 +17403,19 @@ } ], "paths": { - "/breadcrumb/{id}": { + "/checkout/cart": { "get": { "tags": [ - "Experimental", - "Breadcrumb" + "Cart" ], - "summary": "Fetch a breadcrumb", - "description": "Perform search to get category or product breadcrumb. \n\nExperimental API, not part of our backwards compatibility promise, thus this API can introduce breaking changes at any time.", - "operationId": "readBreadcrumb", + "summary": "Fetch or create a cart", + "description": "Used to fetch the current cart or for creating a new one.", + "operationId": "readCart", "parameters": [ { - "name": "id", - "in": "path", - "description": "UUID for product or category", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "type", - "in": "query", - "description": "Type: category or product (optional - default: product)", - "required": false, - "schema": { - "type": "string", - "enum": [ - "product", - "category" - ] - } - }, - { - "name": "referrerCategoryId", - "in": "query", - "description": "UUID for referrer category only used for product breadcrumb", + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", "required": false, "schema": { "type": "string", @@ -17449,17 +17425,39 @@ ], "responses": { "200": { - "description": "Search result containing SeoUrl\\'s to be used as breadcrumb.", + "description": "Cart", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BreadcrumbCollection" + "$ref": "#/components/schemas/Cart" + } + } + } + } + }, + "security": [ + { + "ApiKey": [] + } + ] + }, + "delete": { + "tags": [ + "Cart" + ], + "summary": "Delete a cart", + "description": "This route deletes the cart of the customer.", + "operationId": "deleteCart", + "responses": { + "204": { + "description": "Successfully deleted the cart", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" } } } - }, - "400": { - "$ref": "#/components/responses/400" } }, "security": [ @@ -17469,14 +17467,14 @@ ] } }, - "/contact-form": { + "/checkout/cart/line-item": { "post": { "tags": [ - "Content" + "Cart" ], - "summary": "Submit a contact form message", - "description": "Used for submitting contact forms. Be aware that there can be more required fields, depending on the system settings.", - "operationId": "sendContactMail", + "summary": "Add items to the cart", + "description": "This route adds items to the cart. An item can be a product or promotion for example. They are referenced by the `referencedId`-parameter.\n\nExample: [Working with the cart - Guide](https://developer.shopware.com/docs/guides/integrations-api/store-api-guide/work-with-the-cart#adding-new-items-to-the-cart)", + "operationId": "addLineItem", "parameters": [ { "name": "sw-language-id", @@ -17490,111 +17488,27 @@ } ], "requestBody": { - "required": true, "content": { "application/json": { "schema": { - "required": [ - "email", - "subject", - "comment" - ], - "properties": { - "salutationId": { - "description": "Identifier of the salutation. Use `/api/salutation` endpoint to fetch possible values.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "firstName": { - "description": "Firstname. This field may be required depending on the system settings.", - "type": "string" - }, - "lastName": { - "description": "Lastname. This field may be required depending on the system settings.", - "type": "string" - }, - "email": { - "description": "Email address", - "type": "string" - }, - "phone": { - "description": "Phone. This field may be required depending on the system settings.", - "type": "string" - }, - "subject": { - "description": "The subject of the contact form.", - "type": "string" - }, - "comment": { - "description": "The message of the contact form", - "type": "string" - }, - "navigationId": { - "description": "Identifier of the navigation page. Can be used to override the configuration.\nTake a look at the settings of a category containing a concat form in the administration.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "slotId": { - "description": "Identifier of the cms element", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "cmsPageType": { - "description": "Type of the content management page", - "type": "string" - }, - "entityName": { - "description": "Entity name for slot config", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/CartItems" } } } }, "responses": { "200": { - "description": "Message sent successful." - } - }, - "security": [ - { - "ApiKey": [] - } - ] - } - }, - "/product-export/{accessKey}/{fileName}": { - "get": { - "tags": [ - "Product" - ], - "summary": "Export product export", - "operationId": "readProductExport", - "parameters": [ - { - "name": "accessKey", - "in": "path", - "description": "Access Key", - "required": true, - "schema": { - "type": "string" + "description": "The updated cart.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Cart" + } + } } }, - { - "name": "fileName", - "in": "path", - "description": "File Name", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "" + "400": { + "$ref": "#/components/responses/400" } }, "security": [ @@ -17602,63 +17516,50 @@ "ApiKey": [] } ] - } - }, - "/seo-url": { - "post": { + }, + "delete": { "tags": [ - "Sitemap & Routes", - "Endpoints supporting Criteria " + "Cart" ], - "summary": "Fetch SEO routes", - "description": "Perform a filtered search for seo urls.", - "operationId": "readSeoUrl", + "summary": "Remove items from the cart", + "description": "DEPRECATED: use removeLineItem instead. This route removes items from the cart and recalculates it.\n\nExample: [Working with the cart - Guide](https://developer.shopware.com/docs/guides/integrations-api/store-api-guide/work-with-the-cart#deleting-items-in-the-cart)", + "operationId": "removeLineItemDeprecated", + "deprecated": true, "parameters": [ { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, + "name": "ids", + "in": "query", + "description": "A list of product identifiers.", + "required": true, "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } } }, { - "name": "sw-include-search-info", + "name": "sw-language-id", "in": "header", - "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", + "description": "Instructs Shopware to return the response in the given language.", "required": false, "schema": { "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" + "pattern": "^[0-9a-f]{32}$" } } ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Criteria" - } - ] - } - } - } - }, "responses": { "200": { - "$ref": "#/components/responses/SeoUrlListResponse" - }, - "404": { - "$ref": "#/components/responses/404" + "description": "The updated cart.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Cart" + } + } + } } }, "security": [ @@ -17667,14 +17568,13 @@ } ] }, - "get": { + "patch": { "tags": [ - "Sitemap & Routes", - "Endpoints supporting Criteria " + "Cart" ], - "summary": "Fetch SEO routes", - "description": "Perform a filtered search for seo urls.", - "operationId": "readSeoUrlGet", + "summary": "Update items in the cart", + "description": "This route updates items in the cart. A typical example is updating the quantity of an item.\n\nExample: [Working with the cart - Guide](https://developer.shopware.com/docs/guides/integrations-api/store-api-guide/work-with-the-cart#updating-items-in-the-cart)", + "operationId": "updateLineItem", "parameters": [ { "name": "sw-language-id", @@ -17685,62 +17585,27 @@ "type": "string", "pattern": "^[0-9a-f]{32}$" } - }, - { - "$ref": "#/components/parameters/criteriaPage" - }, - { - "$ref": "#/components/parameters/criteriaLimit" - }, - { - "$ref": "#/components/parameters/criteriaTerm" - }, - { - "$ref": "#/components/parameters/criteriaFilter" - }, - { - "$ref": "#/components/parameters/criteriaIds" - }, - { - "$ref": "#/components/parameters/criteriaQuery" - }, - { - "$ref": "#/components/parameters/criteriaAssociations" - }, - { - "$ref": "#/components/parameters/criteriaPostFilter" - }, - { - "$ref": "#/components/parameters/criteriaSort" - }, - { - "$ref": "#/components/parameters/criteriaAggregations" - }, - { - "$ref": "#/components/parameters/criteriaFields" - }, - { - "$ref": "#/components/parameters/criteriaGrouping" - }, - { - "$ref": "#/components/parameters/criteriaTotalCountMode" - }, - { - "$ref": "#/components/parameters/criteriaIncludes" - }, - { - "$ref": "#/components/parameters/criteriaExcludes" - }, - { - "$ref": "#/components/parameters/CompressedCriteria" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CartItems" + } + } + } + }, "responses": { "200": { - "$ref": "#/components/responses/SeoUrlListResponse" - }, - "404": { - "$ref": "#/components/responses/404" + "description": "The updated cart.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Cart" + } + } + } } }, "security": [ @@ -17750,14 +17615,14 @@ ] } }, - "/order/state/cancel": { + "/checkout/cart/line-item/delete": { "post": { "tags": [ - "Order" + "Cart" ], - "summary": "Cancel an order", - "description": "Cancels an order. The order state will be set to 'cancelled'.", - "operationId": "cancelOrder", + "summary": "Remove items from the cart", + "description": "This route removes items from the cart and recalculates it.\n\nExample: [Working with the cart - Guide](https://developer.shopware.com/docs/guides/integrations-api/store-api-guide/work-with-the-cart#deleting-items-in-the-cart)", + "operationId": "removeLineItem", "parameters": [ { "name": "sw-language-id", @@ -17775,28 +17640,32 @@ "content": { "application/json": { "schema": { + "required": [ + "ids" + ], "properties": { - "orderId": { - "description": "The identifier of the order to be canceled.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "ids": { + "description": "A list of product identifiers.", + "type": "array", + "minItems": 1, + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } } }, - "type": "object", - "required": [ - "orderId" - ] + "type": "object" } } } }, "responses": { "200": { - "description": "Returns the state of the state machine\n\n example: More information about the state machine can be found in the corresponding guide: [Using the state machine](https://developer.shopware.com/docs/guides/plugins/plugins/checkout/order/using-the-state-machine)", + "description": "The updated cart.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StateMachineState" + "$ref": "#/components/schemas/Cart" } } } @@ -17804,21 +17673,19 @@ }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] } }, - "/order": { + "/checkout/order": { "post": { "tags": [ - "Order", - "Endpoints supporting Criteria " + "Order" ], - "summary": "Fetch a list of orders", - "description": "List orders of a customer.\n\n**Available Associations:**\n- `stateMachineState` - Current order state (e.g., open, in_progress, completed, cancelled)\n- `primaryOrderDelivery` - Primary delivery information for the order\n- `primaryOrderTransaction` - Primary payment transaction for the order\n- `orderCustomer` - Customer information associated with the order\n- `currency` - Currency used for the order\n- `language` - Language used when placing the order\n- `addresses` - All addresses associated with the order (billing and shipping)\n- `billingAddress` - Billing address for the order\n- `deliveries` - Delivery information including shipping address and tracking\n- `lineItems` - Order line items (products, discounts, fees)\n- `transactions` - Payment transactions for the order\n- `documents` - Generated documents (invoices, delivery notes, credit notes)\n- `tags` - Tags assigned to the order for organization and filtering", - "operationId": "readOrder", + "summary": "Create an order from a cart", + "description": "Creates a new order from the current cart and deletes the cart.\n\nIf you are using the [prepared payment flow](https://developer.shopware.com/docs/concepts/commerce/checkout-concept/payments#2.1-prepare-payment-optional), this endpoint also receives additional transaction details. The exact name of the parameters depends on the implementation of the corresponding *payment handler*.", + "operationId": "createOrder", "parameters": [ { "name": "sw-language-id", @@ -17829,106 +17696,39 @@ "type": "string", "pattern": "^[0-9a-f]{32}$" } - }, - { - "name": "sw-include-search-info", - "in": "header", - "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" - } } ], "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/NoneFieldsCriteria" - }, - { - "properties": { - "checkPromotion": { - "description": "Check if the payment method of the order is still changeable.", - "type": "boolean" - }, - "filter": { - "type": "array", - "description": "Pass the deepLinkCode criteria filter to allow for guest user authentification. Not required, if a user (guest or not) is already logged in.", - "items": { - "allOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "equals" - ] - }, - "field": { - "type": "string", - "enum": [ - "deepLinkCode" - ] - }, - "value": { - "type": "string" - } - }, - "required": [ - "type", - "field", - "value" - ] - } - ] - } - }, - "email": { - "description": "The email address of the customer. Pass this value to allow for guest user authentification. Not required, if a user (guest or not) is already logged in.", - "type": "string", - "format": "email" - }, - "zipcode": { - "description": "The zip/postal code of the billing address of the customer. Pass this value to allow for guest user authentification. Not required, if a user (guest or not) is already logged in.", - "type": "string" - }, - "login": { - "description": "If set and when handling a guest order, a context token will be returned in the response header with a logged-in session.", - "type": "boolean" - } - }, - "type": "object" + "description": "Contains additional metadata which is stored together with the order. It can also contain payment transaction details.", + "content": { + "application/json": { + "schema": { + "properties": { + "customerComment": { + "description": "Adds a comment from the customer to the order.", + "type": "string" + }, + "affiliateCode": { + "description": "The affiliate code can be used to track which referrer the customer came through. An example could be `Price-comparison-company-XY`.", + "type": "string" + }, + "campaignCode": { + "description": "The campaign code is used to track which action the customer came from. An example could be `Summer-Deals`", + "type": "string" } - ] + }, + "type": "object" } } } }, "responses": { "200": { - "description": "An array of orders and an indicator if the payment of the order can be changed.", - "headers": { - "sw-context-token": { - "description": "Contains sw-context-token value, if login parameter is set to true and a guest order was found and the correct credentials were provided.", - "schema": { - "type": "string" - } - } - }, + "description": "Order", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OrderRouteResponse" + "$ref": "#/components/schemas/Order" } } } @@ -17942,45 +17742,120 @@ ] } }, - "/order/payment": { - "post": { + "/checkout/gateway": { + "get": { "tags": [ - "Order" + "Gateway" ], - "summary": "Update the payment method of an order", - "description": "Changes the payment method of a specific order. You can use the /order route to find out if the payment method of an order can be changed - take a look at the `paymentChangeable`- array in the response.", - "operationId": "orderSetPayment", - "parameters": [ - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "summary": "Call the checkout gateway", + "description": "Call the checkout gateway, which is used to manipulate certain aspects of the checkout process (e.g. available payment methods).", + "operationId": "checkoutGateway", + "responses": { + "200": { + "description": "Checkout gateway response", + "content": { + "application/json": { + "schema": { + "properties": { + "paymentMethods": { + "properties": { + "total": { + "description": "Total amount", + "type": "integer" + }, + "aggregations": { + "description": "aggregation result", + "type": "object" + }, + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PaymentMethod" + } + } + }, + "type": "object" + }, + "shippingMethods": { + "properties": { + "total": { + "description": "Total amount", + "type": "integer" + }, + "aggregations": { + "description": "aggregation result", + "type": "object" + }, + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ShippingMethod" + } + } + }, + "type": "object" + }, + "errors": { + "type": "array", + "items": { + "properties": { + "code": { + "description": "Error code", + "type": "string" + }, + "detail": { + "description": "Error detail", + "type": "string" + }, + "blocking": { + "description": "If the error is blocking", + "type": "boolean" + } + } + } + } + } + } + } } } + }, + "security": [ + { + "ApiKey": [] + } + ] + } + }, + "/handle-payment": { + "post": { + "tags": [ + "Payment & Shipping" ], + "summary": "Initiate a payment for an order", + "description": "This generic endpoint is should be called to initiate a payment flow after an order has been created. The details of the payment flow can differ depending on the payment integration and might require calling additional operations or the setup of webhooks.\n\nThe endpoint internally calls the payment handler of the payment method currently set for the order.", + "operationId": "handlePaymentMethod", "requestBody": { "required": true, "content": { "application/json": { "schema": { "required": [ - "paymentMethodId", "orderId" ], "properties": { - "paymentMethodId": { - "description": "The identifier of the paymentMethod to be set", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, "orderId": { - "description": "The identifier of the order.", + "description": "Identifier of an order", "type": "string", "pattern": "^[0-9a-f]{32}$" + }, + "finishUrl": { + "description": "URL to which the client should be redirected after successful payment", + "type": "string" + }, + "errorUrl": { + "description": "URL to which the client should be redirected after erroneous payment", + "type": "string" } }, "type": "object" @@ -17990,11 +17865,19 @@ }, "responses": { "200": { - "description": "Successfully updated the payment method of the order.", + "description": "Redirect to external payment provider", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SuccessResponse" + "type": "object", + "properties": { + "redirectUrl": { + "type": "string" + } + }, + "required": [ + "redirectUrl" + ] } } } @@ -18002,135 +17885,88 @@ }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] - } - }, - "/order/download/{orderId}/{downloadId}": { + }, "get": { "tags": [ - "Order" + "Payment & Shipping" ], - "summary": "Download a purchased file", - "description": "Download a file included in the given order and with the given id. Access must be granted.", - "operationId": "orderDownloadFile", + "summary": "Initiate a payment for an order", + "description": "This generic endpoint is should be called to initiate a payment flow after an order has been created. The details of the payment flow can differ depending on the payment integration and might require calling additional operations or the setup of webhooks.\n\nThe endpoint internally calls the payment handler of the payment method currently set for the order. Please prefer the POST version of this endpoint.", + "operationId": "handlePaymentMethodGet", "parameters": [ { "name": "orderId", - "in": "path", + "in": "query", "required": true, + "description": "Identifier of an order", "schema": { "type": "string", "pattern": "^[0-9a-f]{32}$" } }, { - "name": "downloadId", - "in": "path", - "required": true, + "name": "finishUrl", + "in": "query", + "description": "URL to which the client should be redirected after successful payment", "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "type": "string" } }, { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, + "name": "errorUrl", + "in": "query", + "description": "URL to which the client should be redirected after erroneous payment", "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } - ], - "responses": { - "200": { - "description": "An arbitrary binary file.", - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } + "type": "string" } } - }, - "security": [ - { - "ApiKey": [], - "ContextToken": [] - } - ] - } - }, - "/_info/routes": { - "get": { - "summary": "Get API routes", - "operationId": "getRoutes", - "tags": [ - "System Info & Health Check" ], "responses": { "200": { - "description": "Successful operation", - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "endpoints" - ], - "properties": { - "endpoints": { - "type": "array", - "items": { - "type": "object", - "required": [ - "methods", - "path" - ], - "properties": { - "methods": { - "type": "array", - "items": { - "type": "string" - } - }, - "path": { - "type": "string" - } - } - } + "description": "Redirect to external payment provider", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "redirectUrl": { + "type": "string" } - } + }, + "required": [ + "redirectUrl" + ] } } } } - } + }, + "security": [ + { + "ApiKey": [] + } + ] } }, - "/landing-page/{landingPageId}": { + "/search-suggest": { "post": { "tags": [ - "Content", - "Endpoints supporting Criteria " + "Product" ], - "summary": "Fetch a landing page with the resolved CMS page", - "description": "Loads a landing page by its identifier and resolves the CMS page.\n\n**Important notice**\n\nThe criteria passed with this route also affects the listing, if there is one within the cms page.\n\n**Available Associations:**\n- `cmsPage` - CMS page layout for the landing page\n- `seoUrls` - SEO-friendly URLs for the landing page across different sales channels", - "operationId": "readLandingPage", + "summary": "Search for products (suggest)", + "description": "Can be used to implement search previews or suggestion listings, that don’t require any interaction.", + "operationId": "searchSuggest", "parameters": [ { - "name": "landingPageId", - "in": "path", - "description": "Identifier of the landing page.", - "required": true, + "name": "p", + "in": "query", + "description": "The page number to fetch.", + "required": false, "schema": { - "type": "string" + "type": "integer" } }, { @@ -18159,28 +17995,28 @@ } ], "requestBody": { + "required": true, "content": { "application/json": { "schema": { "allOf": [ { - "$ref": "#/components/schemas/Criteria" + "required": [ + "search" + ], + "properties": { + "search": { + "description": "Using the search parameter, the server performs a text search on all records based on their data model and weighting as defined in the entity definition using the SearchRanking flag.", + "type": "string" + } + }, + "type": "object" }, { - "allOf": [ - { - "properties": { - "slots": { - "description": "Resolves only the given slot identifiers. The identifiers have to be seperated by a `|` character.", - "type": "string" - } - }, - "type": "object" - }, - { - "$ref": "#/components/schemas/ProductListingCriteria" - } - ] + "$ref": "#/components/schemas/ProductListingCriteria" + }, + { + "$ref": "#/components/schemas/ProductListingFlags" } ] } @@ -18189,17 +18025,14 @@ }, "responses": { "200": { - "description": "The loaded landing page with cms page", + "description": "Returns a product listing containing all products and additional fields.\n\nNote: Aggregations, currentFilters and availableSortings are empty in this response. If you need them to display a listing, use the /search route instead.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LandingPage" + "$ref": "#/components/schemas/ProductListingResult" } } } - }, - "404": { - "$ref": "#/components/responses/404" } }, "security": [ @@ -18210,22 +18043,12 @@ }, "get": { "tags": [ - "Content", - "Endpoints supporting Criteria " + "Product" ], - "summary": "Fetch a landing page with the resolved CMS page", - "description": "Loads a landing page by its identifier and resolves the CMS page.\n\n**Important notice**\n\nThe criteria passed with this route also affects the listing, if there is one within the cms page.\n\n**Available Associations:**\n- `cmsPage` - CMS page layout for the landing page\n- `seoUrls` - SEO-friendly URLs for the landing page across different sales channels", - "operationId": "readLandingPageGet", + "summary": "Search for products (suggest)", + "description": "Can be used to implement search previews or suggestion listings, that don’t require any interaction.", + "operationId": "searchSuggestGet", "parameters": [ - { - "name": "landingPageId", - "in": "path", - "description": "Identifier of the landing page.", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "sw-language-id", "in": "header", @@ -18237,17 +18060,12 @@ } }, { - "name": "sw-include-search-info", - "in": "header", - "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", - "required": false, + "name": "search", + "in": "query", + "description": "Using the search parameter, the server performs a text search on all records based on their data model and weighting as defined in the entity definition using the SearchRanking flag.", + "required": true, "schema": { - "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" + "type": "string" } }, { @@ -18385,21 +18203,164 @@ } ] } + }, + { + "$ref": "#/components/parameters/noAggregations" + }, + { + "$ref": "#/components/parameters/onlyAggregations" } ], "responses": { "200": { - "description": "The loaded landing page with cms page", + "description": "Returns a product listing containing all products and additional fields.\n\nNote: Aggregations, currentFilters and availableSortings are empty in this response. If you need them to display a listing, use the /search route instead.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LandingPage" + "$ref": "#/components/schemas/ProductListingResult" } } } + } + }, + "security": [ + { + "ApiKey": [] + } + ] + } + }, + "/category": { + "post": { + "tags": [ + "Category", + "Endpoints supporting Criteria " + ], + "summary": "Fetch a list of categories", + "description": "Perform a filtered search for categories.\n\n**Available Associations:**\n- `children` - Child categories within this category for hierarchical navigation\n- `media` - Category image or banner\n- `tags` - Tags for organizing and filtering categories\n- `cmsPage` - CMS page layout for the category\n- `seoUrls` - SEO-friendly URLs for the category across different sales channels", + "operationId": "readCategoryList", + "parameters": [ + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "sw-include-search-info", + "in": "header", + "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "0", + "1" + ], + "default": "1" + } + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Criteria" + } + ] + } + } + } + }, + "responses": { + "200": { + "$ref": "#/components/responses/CategoryListResponse" + } + }, + "security": [ + { + "ApiKey": [] + } + ] + }, + "get": { + "tags": [ + "Category", + "Endpoints supporting Criteria " + ], + "summary": "Fetch a list of categories", + "description": "Perform a filtered search for categories.\n\n**Available Associations:**\n- `children` - Child categories within this category for hierarchical navigation\n- `media` - Category image or banner\n- `tags` - Tags for organizing and filtering categories\n- `cmsPage` - CMS page layout for the category\n- `seoUrls` - SEO-friendly URLs for the category across different sales channels", + "operationId": "readCategoryListGet", + "parameters": [ + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } }, - "404": { - "$ref": "#/components/responses/404" + { + "$ref": "#/components/parameters/criteriaPage" + }, + { + "$ref": "#/components/parameters/criteriaLimit" + }, + { + "$ref": "#/components/parameters/criteriaTerm" + }, + { + "$ref": "#/components/parameters/criteriaFilter" + }, + { + "$ref": "#/components/parameters/criteriaIds" + }, + { + "$ref": "#/components/parameters/criteriaQuery" + }, + { + "$ref": "#/components/parameters/criteriaAssociations" + }, + { + "$ref": "#/components/parameters/criteriaPostFilter" + }, + { + "$ref": "#/components/parameters/criteriaSort" + }, + { + "$ref": "#/components/parameters/criteriaAggregations" + }, + { + "$ref": "#/components/parameters/criteriaFields" + }, + { + "$ref": "#/components/parameters/criteriaGrouping" + }, + { + "$ref": "#/components/parameters/criteriaTotalCountMode" + }, + { + "$ref": "#/components/parameters/criteriaIncludes" + }, + { + "$ref": "#/components/parameters/criteriaExcludes" + }, + { + "$ref": "#/components/parameters/CompressedCriteria" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/CategoryListResponse" } }, "security": [ @@ -18409,37 +18370,20 @@ ] } }, - "/product-listing/{categoryId}": { + "/category/{navigationId}": { "post": { "tags": [ - "Product" + "Category", + "Endpoints supporting Criteria " ], - "summary": "Fetch a product listing by category", - "description": "Fetches a product listing for a specific category. It also provides filters, sortings and property aggregations, analogous to the /search endpoint.\n\n**Available Associations:**\n- `downloads` - Downloadable files associated with the product (e.g., manuals, digital content)\n- `children` - Product variants that inherit from this parent product\n- `deliveryTime` - Estimated delivery time for the product\n- `tax` - Tax configuration (rate and calculation rules)\n- `manufacturer` - Product manufacturer or brand information\n- `unit` - Product unit of measure (e.g., piece, liter, kg)\n- `cover` - Main product image displayed in listings and detail pages\n- `cmsPage` - Custom CMS page layout for the product detail page\n- `canonicalProduct` - Canonical product reference for variant consolidation and SEO purposes\n- `media` - Product images and media gallery\n- `crossSellings` - Cross-selling configurations (related products, accessories, similar items)\n- `configuratorSettings` - Variant configurator settings defining available options for product variants\n- `productReviews` - Customer reviews and ratings for the product\n- `mainCategories` - Primary category assignments per sales channel for SEO and navigation\n- `seoUrls` - SEO-friendly URLs for the product across different sales channels\n- `options` - Product variant options (e.g., size, color) that define different variants\n- `properties` - Product properties and characteristics for filtering\n- `categories` - Categories this product is assigned to\n- `streams` - Dynamic product streams this product belongs to based on defined filters\n- `categoriesRo` - Read-only category tree including all parent categories for optimized queries\n- `tags` - Tags for organizing and filtering products\n- `seoCategory` - Main category used for SEO URL generation in the current sales channel", - "operationId": "readProductListing", + "summary": "Fetch a single category", + "description": "This endpoint returns information about the category, as well as a fully resolved (hydrated with mapping values) CMS page, if one is assigned to the category. You can pass slots which should be resolved exclusively.\n\n**Available Associations:**\n- `children` - Child categories within this category for hierarchical navigation\n- `media` - Category image or banner\n- `tags` - Tags for organizing and filtering categories\n- `cmsPage` - CMS page layout for the category\n- `seoUrls` - SEO-friendly URLs for the category across different sales channels", + "operationId": "readCategory", "parameters": [ - { - "name": "categoryId", - "in": "path", - "description": "Identifier of a category.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "p", - "in": "query", - "description": "The page number to fetch.", - "required": false, - "schema": { - "type": "integer" - } - }, { "name": "sw-include-seo-urls", "in": "header", - "description": "Determines if the response must contain a SeoUrl entity for a product entity", + "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", "required": false, "schema": { "type": "boolean" @@ -18468,6 +18412,24 @@ ], "default": "1" } + }, + { + "name": "navigationId", + "in": "path", + "description": "Identifier of the category to be fetched", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "slots", + "in": "query", + "description": "Resolves only the given slot identifiers. The identifiers have to be seperated by a '|' character", + "schema": { + "type": "string" + } } ], "requestBody": { @@ -18477,9 +18439,6 @@ "allOf": [ { "$ref": "#/components/schemas/ProductListingCriteria" - }, - { - "$ref": "#/components/schemas/ProductListingFlags" } ] } @@ -18488,11 +18447,11 @@ }, "responses": { "200": { - "description": "Returns a product listing containing all products and additional fields to display a listing.", + "description": "The loaded category with cms page", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProductListingResult" + "$ref": "#/components/schemas/Category" } } } @@ -18506,25 +18465,17 @@ }, "get": { "tags": [ - "Product" + "Category", + "Endpoints supporting Criteria " ], - "summary": "Fetch a product listing by category", - "description": "Fetches a product listing for a specific category. It also provides filters, sortings and property aggregations, analogous to the /search endpoint.\n\n**Available Associations:**\n- `downloads` - Downloadable files associated with the product (e.g., manuals, digital content)\n- `children` - Product variants that inherit from this parent product\n- `deliveryTime` - Estimated delivery time for the product\n- `tax` - Tax configuration (rate and calculation rules)\n- `manufacturer` - Product manufacturer or brand information\n- `unit` - Product unit of measure (e.g., piece, liter, kg)\n- `cover` - Main product image displayed in listings and detail pages\n- `cmsPage` - Custom CMS page layout for the product detail page\n- `canonicalProduct` - Canonical product reference for variant consolidation and SEO purposes\n- `media` - Product images and media gallery\n- `crossSellings` - Cross-selling configurations (related products, accessories, similar items)\n- `configuratorSettings` - Variant configurator settings defining available options for product variants\n- `productReviews` - Customer reviews and ratings for the product\n- `mainCategories` - Primary category assignments per sales channel for SEO and navigation\n- `seoUrls` - SEO-friendly URLs for the product across different sales channels\n- `options` - Product variant options (e.g., size, color) that define different variants\n- `properties` - Product properties and characteristics for filtering\n- `categories` - Categories this product is assigned to\n- `streams` - Dynamic product streams this product belongs to based on defined filters\n- `categoriesRo` - Read-only category tree including all parent categories for optimized queries\n- `tags` - Tags for organizing and filtering products\n- `seoCategory` - Main category used for SEO URL generation in the current sales channel", - "operationId": "readProductListingGet", + "summary": "Fetch a single category", + "description": "This endpoint returns information about the category, as well as a fully resolved (hydrated with mapping values) CMS page, if one is assigned to the category. You can pass slots which should be resolved exclusively.\n\n**Available Associations:**\n- `children` - Child categories within this category for hierarchical navigation\n- `media` - Category image or banner\n- `tags` - Tags for organizing and filtering categories\n- `cmsPage` - CMS page layout for the category\n- `seoUrls` - SEO-friendly URLs for the category across different sales channels", + "operationId": "readCategoryGet", "parameters": [ - { - "name": "categoryId", - "in": "path", - "description": "Identifier of a category.", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "sw-include-seo-urls", "in": "header", - "description": "Determines if the response must contain a SeoUrl entity for a product entity", + "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", "required": false, "schema": { "type": "boolean" @@ -18540,6 +18491,24 @@ "pattern": "^[0-9a-f]{32}$" } }, + { + "name": "navigationId", + "in": "path", + "description": "Identifier of the category to be fetched", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "slots", + "in": "query", + "description": "Resolves only the given slot identifiers. The identifiers have to be seperated by a '|' character", + "schema": { + "type": "string" + } + }, { "$ref": "#/components/parameters/criteriaPage" }, @@ -18675,21 +18644,15 @@ } ] } - }, - { - "$ref": "#/components/parameters/noAggregations" - }, - { - "$ref": "#/components/parameters/onlyAggregations" } ], "responses": { "200": { - "description": "Returns a product listing containing all products and additional fields to display a listing.", + "description": "The loaded category with cms page", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProductListingResult" + "$ref": "#/components/schemas/Category" } } } @@ -18702,148 +18665,76 @@ ] } }, - "/script/{hook}": { - "get": { + "/order/state/cancel": { + "post": { "tags": [ - "API", - "Script", - "App" + "Order" ], - "summary": "Access point for different api logics which are provided by apps over script hooks", - "operationId": "getScriptStoreApiRoute", + "summary": "Cancel an order", + "description": "Cancels an order. The order state will be set to 'cancelled'.", + "operationId": "cancelOrder", "parameters": [ { - "name": "hook", - "in": "path", - "description": "Dynamic hook which used to build the hook name", - "required": true, + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, "schema": { - "type": "string" + "type": "string", + "pattern": "^[0-9a-f]{32}$" } } ], - "responses": { - "200": { - "description": "Returns different structures of results based on the called script.", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "type": "object", - "additionalProperties": true - }, - { - "type": "null" - } - ] - } - }, - "application/vnd.api+json": { - "schema": { - "oneOf": [ - { - "type": "object", - "additionalProperties": true - }, - { - "type": "null" - } - ] - } + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "orderId": { + "description": "The identifier of the order to be canceled.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + "type": "object", + "required": [ + "orderId" + ] } } - }, - "204": { - "description": "No data by default" } }, - "security": [ - { - "ApiKey": [] - } - ] - }, - "post": { - "tags": [ - "API", - "Script", - "App" - ], - "summary": "Access point for different api logics which are provided by apps over script hooks", - "operationId": "postScriptStoreApiRoute", - "parameters": [ - { - "name": "hook", - "in": "path", - "description": "Dynamic hook which used to build the hook name", - "required": true, - "schema": { - "type": "string" - } - } - ], "responses": { "200": { - "description": "Returns different structures of results based on the called script.", + "description": "Returns the state of the state machine\n\n example: More information about the state machine can be found in the corresponding guide: [Using the state machine](https://developer.shopware.com/docs/guides/plugins/plugins/checkout/order/using-the-state-machine)", "content": { "application/json": { "schema": { - "oneOf": [ - { - "type": "object", - "additionalProperties": true - }, - { - "type": "null" - } - ] - } - }, - "application/vnd.api+json": { - "schema": { - "oneOf": [ - { - "type": "object", - "additionalProperties": true - }, - { - "type": "null" - } - ] + "$ref": "#/components/schemas/StateMachineState" } } } - }, - "204": { - "description": "No data by default" } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] } }, - "/search-suggest": { + "/order": { "post": { "tags": [ - "Product" - ], - "summary": "Search for products (suggest)", - "description": "Can be used to implement search previews or suggestion listings, that don’t require any interaction.", - "operationId": "searchSuggest", - "parameters": [ - { - "name": "p", - "in": "query", - "description": "The page number to fetch.", - "required": false, - "schema": { - "type": "integer" - } - }, + "Order", + "Endpoints supporting Criteria " + ], + "summary": "Fetch a list of orders", + "description": "List orders of a customer.\n\n**Available Associations:**\n- `stateMachineState` - Current order state (e.g., open, in_progress, completed, cancelled)\n- `primaryOrderDelivery` - Primary delivery information for the order\n- `primaryOrderTransaction` - Primary payment transaction for the order\n- `orderCustomer` - Customer information associated with the order\n- `currency` - Currency used for the order\n- `language` - Language used when placing the order\n- `addresses` - All addresses associated with the order (billing and shipping)\n- `billingAddress` - Billing address for the order\n- `deliveries` - Delivery information including shipping address and tracking\n- `lineItems` - Order line items (products, discounts, fees)\n- `transactions` - Payment transactions for the order\n- `documents` - Generated documents (invoices, delivery notes, credit notes)\n- `tags` - Tags assigned to the order for organization and filtering", + "operationId": "readOrder", + "parameters": [ { "name": "sw-language-id", "in": "header", @@ -18876,22 +18767,62 @@ "schema": { "allOf": [ { - "required": [ - "search" - ], + "$ref": "#/components/schemas/NoneFieldsCriteria" + }, + { "properties": { - "search": { - "description": "Using the search parameter, the server performs a text search on all records based on their data model and weighting as defined in the entity definition using the SearchRanking flag.", + "checkPromotion": { + "description": "Check if the payment method of the order is still changeable.", + "type": "boolean" + }, + "filter": { + "type": "array", + "description": "Pass the deepLinkCode criteria filter to allow for guest user authentification. Not required, if a user (guest or not) is already logged in.", + "items": { + "allOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "equals" + ] + }, + "field": { + "type": "string", + "enum": [ + "deepLinkCode" + ] + }, + "value": { + "type": "string" + } + }, + "required": [ + "type", + "field", + "value" + ] + } + ] + } + }, + "email": { + "description": "The email address of the customer. Pass this value to allow for guest user authentification. Not required, if a user (guest or not) is already logged in.", + "type": "string", + "format": "email" + }, + "zipcode": { + "description": "The zip/postal code of the billing address of the customer. Pass this value to allow for guest user authentification. Not required, if a user (guest or not) is already logged in.", "type": "string" + }, + "login": { + "description": "If set and when handling a guest order, a context token will be returned in the response header with a logged-in session.", + "type": "boolean" } }, "type": "object" - }, - { - "$ref": "#/components/schemas/ProductListingCriteria" - }, - { - "$ref": "#/components/schemas/ProductListingFlags" } ] } @@ -18900,11 +18831,19 @@ }, "responses": { "200": { - "description": "Returns a product listing containing all products and additional fields.\n\nNote: Aggregations, currentFilters and availableSortings are empty in this response. If you need them to display a listing, use the /search route instead.", + "description": "An array of orders and an indicator if the payment of the order can be changed.", + "headers": { + "sw-context-token": { + "description": "Contains sw-context-token value, if login parameter is set to true and a guest order was found and the correct credentials were provided.", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProductListingResult" + "$ref": "#/components/schemas/OrderRouteResponse" } } } @@ -18912,17 +18851,20 @@ }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] - }, - "get": { + } + }, + "/order/payment": { + "post": { "tags": [ - "Product" + "Order" ], - "summary": "Search for products (suggest)", - "description": "Can be used to implement search previews or suggestion listings, that don’t require any interaction.", - "operationId": "searchSuggestGet", + "summary": "Update the payment method of an order", + "description": "Changes the payment method of a specific order. You can use the /order route to find out if the payment method of an order can be changed - take a look at the `paymentChangeable`- array in the response.", + "operationId": "orderSetPayment", "parameters": [ { "name": "sw-language-id", @@ -18933,166 +18875,41 @@ "type": "string", "pattern": "^[0-9a-f]{32}$" } - }, - { - "name": "search", - "in": "query", - "description": "Using the search parameter, the server performs a text search on all records based on their data model and weighting as defined in the entity definition using the SearchRanking flag.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/criteriaPage" - }, - { - "name": "limit", - "in": "query", - "description": "Number of items per result page. If not set, the limit will be set according to the default products per page, defined in the system settings.", - "schema": { - "type": "integer", - "minimum": 0 - } - }, - { - "$ref": "#/components/parameters/criteriaTerm" - }, - { - "$ref": "#/components/parameters/criteriaFilter" - }, - { - "$ref": "#/components/parameters/criteriaIds" - }, - { - "$ref": "#/components/parameters/criteriaQuery" - }, - { - "$ref": "#/components/parameters/criteriaAssociations" - }, - { - "$ref": "#/components/parameters/criteriaPostFilter" - }, - { - "$ref": "#/components/parameters/criteriaSort" - }, - { - "$ref": "#/components/parameters/criteriaAggregations" - }, - { - "$ref": "#/components/parameters/criteriaFields" - }, - { - "$ref": "#/components/parameters/criteriaGrouping" - }, - { - "$ref": "#/components/parameters/criteriaTotalCountMode" - }, - { - "$ref": "#/components/parameters/criteriaIncludes" - }, - { - "$ref": "#/components/parameters/criteriaExcludes" - }, - { - "name": "order", - "in": "query", - "description": "Specifies the sorting of the products by `availableSortings`. If not set, the default sorting will be set according to the shop settings. The available sorting options are sent within the response under the `availableSortings` key. In order to sort by a field, consider using the `sort` parameter from the listing criteria. Do not use both parameters together, as it might lead to unexpected results.", - "schema": { - "type": "string" - } - }, - { - "name": "p", - "in": "query", - "description": "Search result page", - "schema": { - "type": "integer", - "default": 1 - } - }, - { - "name": "manufacturer", - "in": "query", - "description": "Filter by manufacturers. List of manufacturer identifiers separated by a `|`.", - "schema": { - "type": "string" - } - }, - { - "name": "min-price", - "in": "query", - "description": "Filters by a minimum product price. Has to be lower than the `max-price` filter.", - "schema": { - "type": "integer", - "minimum": 0, - "default": 0 - } - }, - { - "name": "max-price", - "in": "query", - "description": "Filters by a maximum product price. Has to be higher than the `min-price` filter.", - "schema": { - "type": "integer", - "minimum": 0, - "default": 0 - } - }, - { - "name": "rating", - "in": "query", - "description": "Filter products with a minimum average rating.", - "schema": { - "type": "integer" - } - }, - { - "name": "shipping-free", - "in": "query", - "description": "Filters products that are marked as shipping-free.", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "name": "properties", - "in": "query", - "description": "Filters products by their properties. List of property identifiers separated by a `|`.", - "schema": { - "type": "string" - } - }, - { - "name": "reduce-aggregations", - "in": "query", - "description": "By sending the parameter `reduce-aggregations` , the post-filters that were applied by the customer, are also applied to the aggregations. This has the consequence that only values are returned in the aggregations that would lead to further filter results. This parameter is a flag, the value has no effect.", - "schema": { - "oneOf": [ - { - "type": "string" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "required": [ + "paymentMethodId", + "orderId" + ], + "properties": { + "paymentMethodId": { + "description": "The identifier of the paymentMethod to be set", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "orderId": { + "description": "The identifier of the order.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } }, - { - "type": "null" - } - ] + "type": "object" + } } - }, - { - "$ref": "#/components/parameters/noAggregations" - }, - { - "$ref": "#/components/parameters/onlyAggregations" } - ], + }, "responses": { "200": { - "description": "Returns a product listing containing all products and additional fields.\n\nNote: Aggregations, currentFilters and availableSortings are empty in this response. If you need them to display a listing, use the /search route instead.", + "description": "Successfully updated the payment method of the order.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProductListingResult" + "$ref": "#/components/schemas/SuccessResponse" } } } @@ -19100,23 +18917,33 @@ }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] } }, - "/customer-group-registration/config/{customerGroupId}": { + "/order/download/{orderId}/{downloadId}": { "get": { "tags": [ - "Login & Registration" + "Order" ], - "summary": "Fetch registration settings for customer group", - "operationId": "getCustomerGroupRegistrationInfo", + "summary": "Download a purchased file", + "description": "Download a file included in the given order and with the given id. Access must be granted.", + "operationId": "orderDownloadFile", "parameters": [ { - "name": "customerGroupId", + "name": "orderId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "downloadId", "in": "path", - "description": "Customer group id", "required": true, "schema": { "type": "string", @@ -19136,11 +18963,12 @@ ], "responses": { "200": { - "description": "Returns the customer group including registration settings.", + "description": "An arbitrary binary file.", "content": { - "application/json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/CustomerGroup" + "type": "string", + "format": "binary" } } } @@ -19148,59 +18976,22 @@ }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] } }, - "/_info/openapi3.json": { - "get": { - "tags": [ - "System Info & Health Check" - ], - "summary": "Get OpenAPI Specification", - "description": "Get information about the store API in OpenAPI format.", - "operationId": "api-info", - "parameters": [ - { - "name": "type", - "in": "query", - "description": "Type of the api", - "schema": { - "type": "string", - "enum": [ - "jsonapi", - "json" - ] - } - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/OpenApi3" - } - } - } - }, - "/country-state/{countryId}": { + "/language": { "post": { "tags": [ "System & Context", "Endpoints supporting Criteria " ], - "summary": "Fetch the states of a country", - "description": "Perform a filtered search the states for a country", - "operationId": "readCountryState", + "summary": "Fetch languages", + "description": "Perform a filtered search for languages.\n\n**Available Associations:**\n- `locale` - Locale defining regional settings (date, time, number formats)\n- `translationCode` - Locale used for translating content\n- `children` - Child languages inheriting from this parent language", + "operationId": "readLanguages", "parameters": [ - { - "name": "countryId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, { "name": "sw-language-id", "in": "header", @@ -19242,7 +19033,7 @@ }, "responses": { "200": { - "$ref": "#/components/responses/CountryStateListResponse" + "$ref": "#/components/responses/LanguageListResponse" } }, "security": [ @@ -19256,19 +19047,10 @@ "System & Context", "Endpoints supporting Criteria " ], - "summary": "Fetch the states of a country", - "description": "Perform a filtered search the states for a country", - "operationId": "readCountryStateGet", + "summary": "Fetch languages", + "description": "Perform a filtered search for languages.\n\n**Available Associations:**\n- `locale` - Locale defining regional settings (date, time, number formats)\n- `translationCode` - Locale used for translating content\n- `children` - Child languages inheriting from this parent language", + "operationId": "readLanguagesGet", "parameters": [ - { - "name": "countryId", - "in": "path", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, { "name": "sw-language-id", "in": "header", @@ -19330,7 +19112,7 @@ ], "responses": { "200": { - "$ref": "#/components/responses/CountryStateListResponse" + "$ref": "#/components/responses/LanguageListResponse" } }, "security": [ @@ -19340,129 +19122,249 @@ ] } }, - "/cookie-groups": { - "get": { + "/document/download/{documentId}/{deepLinkCode}": { + "post": { "tags": [ - "Experimental", - "Cookies" + "Document" ], - "summary": "Fetch all cookie groups", - "description": "Fetch all cookie groups available in the system with configuration hash. Experimental API, not part of our backwards compatibility promise, thus this API can introduce breaking changes at any time.", - "operationId": "readCookieGroups", + "summary": "Download generated document", + "description": "Returns generated document to download.", + "operationId": "download", + "parameters": [ + { + "name": "documentId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "deepLinkCode", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "sw-language-id", + "in": "header", + "description": "If a document is rendered on the fly the provided language id is added to fallback languages while the order language has priority. It does not change already generated documents.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "zipcode": { + "type": "string" + } + }, + "description": "Required for guest orders to verify the user; ignored for orders with logged-in user." + } + } + } + }, "responses": { "200": { - "description": "Successful response with a collection of cookie groups and their configuration hash.", + "description": "Success", "content": { - "application/json": { + "application/pdf": { "schema": { - "$ref": "#/components/schemas/CookieRouteResponse" + "type": "string", + "format": "binary" + } + }, + "text/html": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" } } } }, - "400": { - "$ref": "#/components/responses/400" + "204": { + "description": "DEPRECATED: Returns a no content response when no document is found. Will be changed in v6.8.0.0 and returns a 404 response instead." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Document not found." + }, + "406": { + "description": "The requested mime type is not supported." } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] - } - }, - "/media": { - "post": { + }, + "get": { "tags": [ - "Content" + "Document" ], - "summary": "Fetch and resolve Media Entities", - "description": "Fetch one or multiple Media Entities with the corresponding Identifier.", - "operationId": "readMedia", - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "ids": { - "description": "Identifier (UUID) of the media entity to be fetched.", - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } - }, - "type": "object", - "required": [ - "ids" - ] - } + "summary": "Download generated document", + "description": "Returns generated document to download.", + "operationId": "downloadGet", + "parameters": [ + { + "name": "documentId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "deepLinkCode", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "email", + "required": false, + "in": "query", + "schema": { + "type": "string" + }, + "description": "Required for guest orders to verify the user; ignored for orders with logged-in user." + }, + { + "name": "zipcode", + "required": false, + "in": "query", + "schema": { + "type": "string" + }, + "description": "Required for guest orders to verify the user; ignored for orders with logged-in user." + }, + { + "name": "sw-language-id", + "in": "header", + "description": "If a document is rendered on the fly the provided language id is added to fallback languages while the order language has priority. It does not change already generated documents.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" } } - }, + ], "responses": { "200": { - "description": "The loaded MediaCollection containing the requested Media Entities.", + "description": "Success", "content": { - "application/json": { + "application/pdf": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Media" - } + "type": "string", + "format": "binary" + } + }, + "text/html": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" } } } }, + "204": { + "description": "DEPRECATED: Returns a no content response when no document is found. Will be changed in v6.8.0.0 and returns a 404 response instead." + }, + "403": { + "description": "Forbidden." + }, "404": { - "$ref": "#/components/responses/404" + "description": "Document not found." + }, + "406": { + "description": "The requested mime type is not supported." } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] - }, - "get": { + } + }, + "/product/{productId}/cross-selling": { + "post": { "tags": [ - "Content" + "Product" ], - "summary": "Fetch and resolve Media Entities", - "description": "Fetch one or multiple Media Entities with the corresponding Identifier.", - "operationId": "readMediaGet", + "summary": "Fetch cross-selling groups of a product", + "description": "This route is used to load the cross sellings for a product. A product has several cross selling definitions in which several products are linked. The route returns the cross sellings together with the linked products", + "operationId": "readProductCrossSellings", "parameters": [ { - "name": "ids[]", - "in": "query", - "description": "Identifier (UUID) of the media entity to be fetched.", + "name": "productId", + "in": "path", + "description": "Product ID", "required": true, "schema": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } + "type": "string" + } + }, + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "sw-include-seo-urls", + "in": "header", + "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", + "required": false, + "schema": { + "type": "boolean" } } ], "responses": { "200": { - "description": "The loaded MediaCollection containing the requested Media Entities.", + "description": "Found cross sellings", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Media" - } + "$ref": "#/components/schemas/CrossSellingElementCollection" } } } - }, - "404": { - "$ref": "#/components/responses/404" } }, "security": [ @@ -19470,17 +19372,24 @@ "ApiKey": [] } ] - } - }, - "/revocation-request-form": { - "post": { + }, + "get": { "tags": [ - "Content" + "Product" ], - "summary": "Submit a revocation request form message", - "description": "Used for submitting revocation request forms. Be aware that there can be more required fields, depending on the system settings.", - "operationId": "sendRevocationRequestMail", + "summary": "Fetch cross-selling groups of a product", + "description": "This route is used to load the cross sellings for a product. A product has several cross selling definitions in which several products are linked. The route returns the cross sellings together with the linked products", + "operationId": "readProductCrossSellingsGet", "parameters": [ + { + "name": "productId", + "in": "path", + "description": "Product ID", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "sw-language-id", "in": "header", @@ -19490,65 +19399,27 @@ "type": "string", "pattern": "^[0-9a-f]{32}$" } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "required": [ - "email", - "contractNumber" - ], - "properties": { - "firstName": { - "description": "First name. This field may be required depending on the system settings.", - "type": "string" - }, - "lastName": { - "description": "Last name. This field may be required depending on the system settings.", - "type": "string" - }, - "email": { - "description": "Email address.", - "type": "string" - }, - "contractNumber": { - "description": "The number of the contract.", - "type": "string" - }, - "comment": { - "description": "The message of the revocation request form.", - "type": "string" - }, - "navigationId": { - "description": "Identifier of the navigation page. Can be used to override the configuration.\nTake a look at the settings of a category containing a revocation form in the administration.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "slotId": { - "description": "Identifier of the cms element.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "cmsPageType": { - "description": "Type of the content management page.", - "type": "string" - }, - "entityName": { - "description": "Entity name for slot config.", - "type": "string" - } - }, - "type": "object" - } + }, + { + "name": "sw-include-seo-urls", + "in": "header", + "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", + "required": false, + "schema": { + "type": "boolean" } } - }, + ], "responses": { "200": { - "description": "Message sent successfully." + "description": "Found cross sellings", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CrossSellingElementCollection" + } + } + } } }, "security": [ @@ -19558,22 +19429,23 @@ ] } }, - "/search": { + "/product/{productId}": { "post": { "tags": [ "Product" ], - "summary": "Search for products", - "description": "Performs a search for products which can be used to display a product listing.", - "operationId": "searchPage", + "summary": "Fetch a single product", + "description": "This route is used to load a single product with the corresponding details. In addition to loading the data, the best variant of the product is determined when a parent id is passed.\n\n**Available Associations:**\n- `downloads` - Downloadable files associated with the product (e.g., manuals, digital content)\n- `children` - Product variants that inherit from this parent product\n- `deliveryTime` - Estimated delivery time for the product\n- `tax` - Tax configuration (rate and calculation rules)\n- `manufacturer` - Product manufacturer or brand information\n- `unit` - Product unit of measure (e.g., piece, liter, kg)\n- `cover` - Main product image displayed in listings and detail pages\n- `cmsPage` - Custom CMS page layout for the product detail page\n- `canonicalProduct` - Canonical product reference for variant consolidation and SEO purposes\n- `media` - Product images and media gallery\n- `crossSellings` - Cross-selling configurations (related products, accessories, similar items)\n- `configuratorSettings` - Variant configurator settings defining available options for product variants\n- `productReviews` - Customer reviews and ratings for the product\n- `mainCategories` - Primary category assignments per sales channel for SEO and navigation\n- `seoUrls` - SEO-friendly URLs for the product across different sales channels\n- `options` - Product variant options (e.g., size, color) that define different variants\n- `properties` - Product properties and characteristics for filtering\n- `categories` - Categories this product is assigned to\n- `streams` - Dynamic product streams this product belongs to based on defined filters\n- `categoriesRo` - Read-only category tree including all parent categories for optimized queries\n- `tags` - Tags for organizing and filtering products\n- `seoCategory` - Main category used for SEO URL generation in the current sales channel", + "operationId": "readProductDetail", "parameters": [ { - "name": "p", - "in": "query", - "description": "The page number to fetch.", - "required": false, + "name": "productId", + "in": "path", + "description": "Product ID", + "required": true, "schema": { - "type": "integer" + "type": "string", + "pattern": "^[0-9a-f]{32}$'" } }, { @@ -19601,34 +19473,41 @@ "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", "required": false, "schema": { - "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" + "type": "string", + "enum": [ + "0", + "1" + ], + "default": "1" + } + }, + { + "description": "Instructs Shopware to skip loading the configurator data", + "in": "query", + "name": "skipConfigurator", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "description": "Instructs Shopware to skip loading the CMS page data", + "in": "query", + "name": "skipCmsPage", + "required": false, + "schema": { + "type": "boolean" } } ], "requestBody": { + "required": false, "content": { "application/json": { "schema": { "allOf": [ { - "properties": { - "search": { - "description": "Using the search parameter, the server performs a text search on all records based on their data model and weighting as defined in the entity definition using the SearchRanking flag.", - "type": "string" - } - }, - "type": "object" - }, - { - "$ref": "#/components/schemas/ProductListingCriteria" - }, - { - "$ref": "#/components/schemas/ProductListingFlags" + "$ref": "#/components/schemas/NoneFieldsCriteria" } ] } @@ -19637,11 +19516,11 @@ }, "responses": { "200": { - "description": "Returns a product listing containing all products and additional fields to display a listing.", + "description": "Product information along with variant groups and options", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProductListingResult" + "$ref": "#/components/schemas/ProductDetailResponse" } } } @@ -19657,10 +19536,20 @@ "tags": [ "Product" ], - "summary": "Search for products", - "description": "Performs a search for products which can be used to display a product listing.", - "operationId": "searchPageGet", + "summary": "Fetch a single product", + "description": "This route is used to load a single product with the corresponding details. In addition to loading the data, the best variant of the product is determined when a parent id is passed.\n\n**Available Associations:**\n- `downloads` - Downloadable files associated with the product (e.g., manuals, digital content)\n- `children` - Product variants that inherit from this parent product\n- `deliveryTime` - Estimated delivery time for the product\n- `tax` - Tax configuration (rate and calculation rules)\n- `manufacturer` - Product manufacturer or brand information\n- `unit` - Product unit of measure (e.g., piece, liter, kg)\n- `cover` - Main product image displayed in listings and detail pages\n- `cmsPage` - Custom CMS page layout for the product detail page\n- `canonicalProduct` - Canonical product reference for variant consolidation and SEO purposes\n- `media` - Product images and media gallery\n- `crossSellings` - Cross-selling configurations (related products, accessories, similar items)\n- `configuratorSettings` - Variant configurator settings defining available options for product variants\n- `productReviews` - Customer reviews and ratings for the product\n- `mainCategories` - Primary category assignments per sales channel for SEO and navigation\n- `seoUrls` - SEO-friendly URLs for the product across different sales channels\n- `options` - Product variant options (e.g., size, color) that define different variants\n- `properties` - Product properties and characteristics for filtering\n- `categories` - Categories this product is assigned to\n- `streams` - Dynamic product streams this product belongs to based on defined filters\n- `categoriesRo` - Read-only category tree including all parent categories for optimized queries\n- `tags` - Tags for organizing and filtering products\n- `seoCategory` - Main category used for SEO URL generation in the current sales channel", + "operationId": "readProductDetailGet", "parameters": [ + { + "name": "productId", + "in": "path", + "description": "Product ID", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$'" + } + }, { "name": "sw-language-id", "in": "header", @@ -19681,26 +19570,29 @@ } }, { - "name": "search", + "description": "Instructs Shopware to skip loading the configurator data", "in": "query", - "description": "Using the search parameter, the server performs a text search on all records based on their data model and weighting as defined in the entity definition using the SearchRanking flag.", + "name": "skipConfigurator", "required": false, "schema": { - "type": "string" + "type": "boolean" } }, { - "$ref": "#/components/parameters/criteriaPage" - }, - { - "name": "limit", + "description": "Instructs Shopware to skip loading the CMS page data", "in": "query", - "description": "Number of items per result page. If not set, the limit will be set according to the default products per page, defined in the system settings.", + "name": "skipCmsPage", + "required": false, "schema": { - "type": "integer", - "minimum": 0 + "type": "boolean" } }, + { + "$ref": "#/components/parameters/criteriaPage" + }, + { + "$ref": "#/components/parameters/criteriaLimit" + }, { "$ref": "#/components/parameters/criteriaTerm" }, @@ -19725,9 +19617,6 @@ { "$ref": "#/components/parameters/criteriaAggregations" }, - { - "$ref": "#/components/parameters/criteriaFields" - }, { "$ref": "#/components/parameters/criteriaGrouping" }, @@ -19741,107 +19630,159 @@ "$ref": "#/components/parameters/criteriaExcludes" }, { - "name": "order", - "in": "query", - "description": "Specifies the sorting of the products by `availableSortings`. If not set, the default sorting will be set according to the shop settings. The available sorting options are sent within the response under the `availableSortings` key. In order to sort by a field, consider using the `sort` parameter from the listing criteria. Do not use both parameters together, as it might lead to unexpected results.", - "schema": { - "type": "string" + "$ref": "#/components/parameters/CompressedNoneFieldsCriteria" + } + ], + "responses": { + "200": { + "description": "Product information along with variant groups and options", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductDetailResponse" + } + } } - }, + } + }, + "security": [ { - "name": "p", - "in": "query", - "description": "Search result page", + "ApiKey": [] + } + ] + } + }, + "/product": { + "post": { + "tags": [ + "Product", + "Endpoints supporting Criteria " + ], + "summary": "Fetch a list of products", + "description": "List products that match the given criteria. For performance reasons a limit should always be set.\n\n**Available Associations:**\n- `downloads` - Downloadable files associated with the product (e.g., manuals, digital content)\n- `children` - Product variants that inherit from this parent product\n- `deliveryTime` - Estimated delivery time for the product\n- `tax` - Tax configuration (rate and calculation rules)\n- `manufacturer` - Product manufacturer or brand information\n- `unit` - Product unit of measure (e.g., piece, liter, kg)\n- `cover` - Main product image displayed in listings and detail pages\n- `cmsPage` - Custom CMS page layout for the product detail page\n- `canonicalProduct` - Canonical product reference for variant consolidation and SEO purposes\n- `media` - Product images and media gallery\n- `crossSellings` - Cross-selling configurations (related products, accessories, similar items)\n- `configuratorSettings` - Variant configurator settings defining available options for product variants\n- `productReviews` - Customer reviews and ratings for the product\n- `mainCategories` - Primary category assignments per sales channel for SEO and navigation\n- `seoUrls` - SEO-friendly URLs for the product across different sales channels\n- `options` - Product variant options (e.g., size, color) that define different variants\n- `properties` - Product properties and characteristics for filtering\n- `categories` - Categories this product is assigned to\n- `streams` - Dynamic product streams this product belongs to based on defined filters\n- `categoriesRo` - Read-only category tree including all parent categories for optimized queries\n- `tags` - Tags for organizing and filtering products\n- `seoCategory` - Main category used for SEO URL generation in the current sales channel", + "operationId": "readProduct", + "parameters": [ + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, "schema": { - "type": "integer", - "default": 1 + "type": "string", + "pattern": "^[0-9a-f]{32}$" } }, { - "name": "manufacturer", - "in": "query", - "description": "Filter by manufacturers. List of manufacturer identifiers separated by a `|`.", + "name": "sw-include-search-info", + "in": "header", + "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", + "required": false, "schema": { - "type": "string" + "type": "string", + "enum": [ + "0", + "1" + ], + "default": "1" } - }, + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Criteria" + } + ] + } + } + } + }, + "responses": { + "200": { + "$ref": "#/components/responses/ProductListResponse" + } + }, + "security": [ { - "name": "min-price", - "in": "query", - "description": "Filters by a minimum product price. Has to be lower than the `max-price` filter.", + "ApiKey": [] + } + ] + }, + "get": { + "tags": [ + "Product", + "Endpoints supporting Criteria " + ], + "summary": "Fetch a list of products", + "description": "List products that match the given criteria. For performance reasons a limit should always be set.\n\n**Available Associations:**\n- `downloads` - Downloadable files associated with the product (e.g., manuals, digital content)\n- `children` - Product variants that inherit from this parent product\n- `deliveryTime` - Estimated delivery time for the product\n- `tax` - Tax configuration (rate and calculation rules)\n- `manufacturer` - Product manufacturer or brand information\n- `unit` - Product unit of measure (e.g., piece, liter, kg)\n- `cover` - Main product image displayed in listings and detail pages\n- `cmsPage` - Custom CMS page layout for the product detail page\n- `canonicalProduct` - Canonical product reference for variant consolidation and SEO purposes\n- `media` - Product images and media gallery\n- `crossSellings` - Cross-selling configurations (related products, accessories, similar items)\n- `configuratorSettings` - Variant configurator settings defining available options for product variants\n- `productReviews` - Customer reviews and ratings for the product\n- `mainCategories` - Primary category assignments per sales channel for SEO and navigation\n- `seoUrls` - SEO-friendly URLs for the product across different sales channels\n- `options` - Product variant options (e.g., size, color) that define different variants\n- `properties` - Product properties and characteristics for filtering\n- `categories` - Categories this product is assigned to\n- `streams` - Dynamic product streams this product belongs to based on defined filters\n- `categoriesRo` - Read-only category tree including all parent categories for optimized queries\n- `tags` - Tags for organizing and filtering products\n- `seoCategory` - Main category used for SEO URL generation in the current sales channel", + "operationId": "readProductGet", + "parameters": [ + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, "schema": { - "type": "integer", - "minimum": 0, - "default": 0 + "type": "string", + "pattern": "^[0-9a-f]{32}$" } }, { - "name": "max-price", - "in": "query", - "description": "Filters by a maximum product price. Has to be higher than the `min-price` filter.", - "schema": { - "type": "integer", - "minimum": 0, - "default": 0 - } + "$ref": "#/components/parameters/criteriaPage" }, { - "name": "rating", - "in": "query", - "description": "Filter products with a minimum average rating.", - "schema": { - "type": "integer" - } + "$ref": "#/components/parameters/criteriaLimit" }, { - "name": "shipping-free", - "in": "query", - "description": "Filters products that are marked as shipping-free.", - "schema": { - "type": "boolean", - "default": false - } + "$ref": "#/components/parameters/criteriaTerm" }, { - "name": "properties", - "in": "query", - "description": "Filters products by their properties. List of property identifiers separated by a `|`.", - "schema": { - "type": "string" - } + "$ref": "#/components/parameters/criteriaFilter" }, { - "name": "reduce-aggregations", - "in": "query", - "description": "By sending the parameter `reduce-aggregations` , the post-filters that were applied by the customer, are also applied to the aggregations. This has the consequence that only values are returned in the aggregations that would lead to further filter results. This parameter is a flag, the value has no effect.", - "schema": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } + "$ref": "#/components/parameters/criteriaIds" + }, + { + "$ref": "#/components/parameters/criteriaQuery" + }, + { + "$ref": "#/components/parameters/criteriaAssociations" + }, + { + "$ref": "#/components/parameters/criteriaPostFilter" + }, + { + "$ref": "#/components/parameters/criteriaSort" + }, + { + "$ref": "#/components/parameters/criteriaAggregations" + }, + { + "$ref": "#/components/parameters/criteriaFields" + }, + { + "$ref": "#/components/parameters/criteriaGrouping" + }, + { + "$ref": "#/components/parameters/criteriaTotalCountMode" + }, + { + "$ref": "#/components/parameters/criteriaIncludes" }, { - "$ref": "#/components/parameters/noAggregations" + "$ref": "#/components/parameters/criteriaExcludes" }, { - "$ref": "#/components/parameters/onlyAggregations" + "$ref": "#/components/parameters/CompressedCriteria" } ], "responses": { "200": { - "description": "Returns a product listing containing all products and additional fields to display a listing.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProductListingResult" - } - } - } + "$ref": "#/components/responses/ProductListResponse" } }, "security": [ @@ -19851,23 +19792,23 @@ ] } }, - "/navigation/{activeId}/{rootId}": { + "/product/{productId}/reviews": { "post": { "tags": [ - "Category", + "Product", "Endpoints supporting Criteria " ], - "summary": "Fetch a navigation menu", - "description": "This endpoint returns categories that can be used as a page navigation. You can either return them as a tree or as a flat list. You can also control the depth of the tree.\n\n Instead of passing uuids, you can also use one of the following aliases for the activeId and rootId parameters to get the respective navigations of your sales channel.\n\n * main-navigation\n * service-navigation\n * footer-navigation", - "operationId": "readNavigation", + "summary": "Fetch product reviews", + "description": "Perform a filtered search for product reviews.", + "operationId": "readProductReviews", "parameters": [ { - "name": "sw-include-seo-urls", - "in": "header", - "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", - "required": false, + "name": "productId", + "in": "path", + "description": "Identifier of the product.", + "required": true, "schema": { - "type": "boolean" + "type": "string" } }, { @@ -19893,67 +19834,16 @@ ], "default": "1" } - }, - { - "name": "activeId", - "in": "path", - "description": "Identifier of the active category in the navigation tree (if not used, just set to the same as rootId).", - "required": true, - "schema": { - "oneOf": [ - { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - { - "$ref": "#/components/schemas/NavigationType" - } - ] - } - }, - { - "name": "rootId", - "in": "path", - "description": "Identifier of the root category for your desired navigation tree. You can use it to fetch sub-trees of your navigation tree.", - "required": true, - "schema": { - "oneOf": [ - { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - { - "$ref": "#/components/schemas/NavigationType" - } - ] - } } ], "requestBody": { - "required": true, + "required": false, "content": { "application/json": { "schema": { "allOf": [ { - "$ref": "#/components/schemas/NoneFieldsCriteria" - }, - { - "properties": { - "depth": { - "description": "Determines the depth of fetched navigation levels.", - "type": "integer", - "format": "int32" - }, - "buildTree": { - "description": "Return the categories as a tree or as a flat list.", - "type": "array", - "items": { - "type": "object" - } - } - }, - "type": "object" + "$ref": "#/components/schemas/Criteria" } ] } @@ -19962,11 +19852,26 @@ }, "responses": { "200": { - "description": "All available navigations", + "description": "Entity search result containing product reviews", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NavigationRouteResponse" + "allOf": [ + { + "properties": { + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductReview" + } + } + }, + "type": "object" + }, + { + "$ref": "#/components/schemas/EntitySearchResult" + } + ] } } } @@ -19980,20 +19885,20 @@ }, "get": { "tags": [ - "Category", + "Product", "Endpoints supporting Criteria " ], - "summary": "Fetch a navigation menu", - "description": "This endpoint returns categories that can be used as a page navigation. You can either return them as a tree or as a flat list. You can also control the depth of the tree.\n\n Instead of passing uuids, you can also use one of the following aliases for the activeId and rootId parameters to get the respective navigations of your sales channel.\n\n * main-navigation\n * service-navigation\n * footer-navigation", - "operationId": "readNavigationGet", + "summary": "Fetch product reviews", + "description": "Perform a filtered search for product reviews.", + "operationId": "readProductReviewsGet", "parameters": [ { - "name": "sw-include-seo-urls", - "in": "header", - "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", - "required": false, + "name": "productId", + "in": "path", + "description": "Identifier of the product.", + "required": true, "schema": { - "type": "boolean" + "type": "string" } }, { @@ -20006,64 +19911,6 @@ "pattern": "^[0-9a-f]{32}$" } }, - { - "name": "activeId", - "in": "path", - "description": "Identifier of the active category in the navigation tree (if not used, just set to the same as rootId).", - "required": true, - "schema": { - "oneOf": [ - { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - { - "$ref": "#/components/schemas/NavigationType" - } - ] - } - }, - { - "name": "rootId", - "in": "path", - "description": "Identifier of the root category for your desired navigation tree. You can use it to fetch sub-trees of your navigation tree.", - "required": true, - "schema": { - "oneOf": [ - { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - { - "$ref": "#/components/schemas/NavigationType" - } - ] - } - }, - { - "name": "depth", - "in": "query", - "description": "Determines the depth of fetched navigation levels.", - "required": false, - "schema": { - "type": "integer", - "format": "int32" - } - }, - { - "name": "buildTree", - "in": "query", - "description": "Return the categories as a tree or as a flat list.", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "object" - } - }, - "style": "deepObject", - "explode": true - }, { "$ref": "#/components/parameters/criteriaPage" }, @@ -20094,6 +19941,9 @@ { "$ref": "#/components/parameters/criteriaAggregations" }, + { + "$ref": "#/components/parameters/criteriaFields" + }, { "$ref": "#/components/parameters/criteriaGrouping" }, @@ -20107,50 +19957,137 @@ "$ref": "#/components/parameters/criteriaExcludes" }, { - "$ref": "#/components/parameters/CompressedNoneFieldsCriteria" + "$ref": "#/components/parameters/CompressedCriteria" + } + ], + "responses": { + "200": { + "description": "Entity search result containing product reviews", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "properties": { + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductReview" + } + } + }, + "type": "object" + }, + { + "$ref": "#/components/schemas/EntitySearchResult" + } + ] + } + } + } + } + }, + "security": [ + { + "ApiKey": [] + } + ] + } + }, + "/product/{productId}/review": { + "post": { + "tags": [ + "Product" + ], + "summary": "Save a product review", + "description": "Saves a review for a product. Reviews have to be activated in the settings.", + "operationId": "saveProductReview", + "parameters": [ + { + "name": "productId", + "in": "path", + "description": "Identifier of the product which is reviewed.", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "required": [ + "title", + "content", + "points" + ], + "properties": { + "name": { + "description": "The name of the review author. If not set, the first name of the customer is chosen.", + "type": "string" + }, + "email": { + "description": "The email address of the review author. If not set, the email of the customer is chosen.", + "type": "string" + }, + "title": { + "description": "The title of the review.", + "type": "string" + }, + "content": { + "description": "The content of review.", + "type": "string" + }, + "points": { + "description": "The review rating for the product.", + "type": "number", + "format": "double" + } + }, + "type": "object" + } + } } - ], + }, "responses": { "200": { - "description": "All available navigations", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NavigationRouteResponse" - } - } - } + "description": "Success response indicating the review was saved successfully." } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] } }, - "/document/download/{documentId}/{deepLinkCode}": { + "/product/{productId}/find-variant": { "post": { "tags": [ - "Document" + "Product" ], - "summary": "Download generated document", - "description": "Returns generated document to download.", - "operationId": "download", + "summary": "Search for a matching variant by product options.", + "description": "Performs a search for product variants and returns the best matching variant.", + "operationId": "searchProductVariantIds", "parameters": [ { - "name": "documentId", + "name": "productId", "in": "path", + "description": "Product ID", "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "deepLinkCode", - "required": true, - "in": "path", "schema": { "type": "string" } @@ -20158,7 +20095,7 @@ { "name": "sw-language-id", "in": "header", - "description": "If a document is rendered on the fly the provided language id is added to fallback languages while the order language has priority. It does not change already generated documents.", + "description": "Instructs Shopware to return the response in the given language.", "required": false, "schema": { "type": "string", @@ -20167,113 +20104,206 @@ } ], "requestBody": { - "required": false, "content": { "application/json": { "schema": { - "type": "object", + "required": [ + "options" + ], "properties": { - "email": { - "type": "string" + "options": { + "oneOf": [ + { + "description": "The options parameter for the variant to find.", + "type": "array", + "items": { + "type": "string" + } + }, + { + "description": "The options parameter as a map of groupId => optionId.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + ] }, - "zipcode": { + "switchedGroup": { + "description": "The id of the option group that has been switched.", "type": "string" } }, - "description": "Required for guest orders to verify the user; ignored for orders with logged-in user." + "type": "object" } } } }, "responses": { "200": { - "description": "Success", + "description": "Returns an FoundCombination struct containing the ids matching the search.", "content": { - "application/pdf": { - "schema": { - "type": "string", - "format": "binary" - } - }, - "text/html": { - "schema": { - "type": "string" - } - }, - "application/xml": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/FindProductVariantRouteResponse" } } } - }, - "204": { - "description": "DEPRECATED: Returns a no content response when no document is found. Will be changed in v6.8.0.0 and returns a 404 response instead." - }, - "403": { - "description": "Forbidden." - }, - "404": { - "description": "Document not found." - }, - "406": { - "description": "The requested mime type is not supported." } }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] }, "get": { "tags": [ - "Document" + "Product" ], - "summary": "Download generated document", - "description": "Returns generated document to download.", - "operationId": "downloadGet", + "summary": "Search for a matching variant by product options.", + "description": "Performs a search for product variants and returns the best matching variant.", + "operationId": "searchProductVariantIdsGet", "parameters": [ { - "name": "documentId", + "name": "productId", "in": "path", + "description": "Product ID", "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, "schema": { "type": "string", "pattern": "^[0-9a-f]{32}$" } }, { - "name": "deepLinkCode", + "name": "options[]", + "in": "query", + "description": "The options parameter for the variant to find. Array of option IDs.", "required": true, - "in": "path", "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } }, { - "name": "email", - "required": false, + "name": "switchedGroup", "in": "query", + "description": "The id of the option group that has been switched.", + "required": false, "schema": { "type": "string" - }, - "description": "Required for guest orders to verify the user; ignored for orders with logged-in user." + } + } + ], + "responses": { + "200": { + "description": "Returns an FoundCombination struct containing the ids matching the search.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FindProductVariantRouteResponse" + } + } + } + } + }, + "security": [ + { + "ApiKey": [] + } + ] + } + }, + "/breadcrumb/{id}": { + "get": { + "tags": [ + "Experimental", + "Breadcrumb" + ], + "summary": "Fetch a breadcrumb", + "description": "Perform search to get category or product breadcrumb. \n\nExperimental API, not part of our backwards compatibility promise, thus this API can introduce breaking changes at any time.", + "operationId": "readBreadcrumb", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "UUID for product or category", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } }, { - "name": "zipcode", + "name": "type", + "in": "query", + "description": "Type: category or product (optional - default: product)", "required": false, + "schema": { + "type": "string", + "enum": [ + "product", + "category" + ] + } + }, + { + "name": "referrerCategoryId", "in": "query", + "description": "UUID for referrer category only used for product breadcrumb", + "required": false, "schema": { - "type": "string" - }, - "description": "Required for guest orders to verify the user; ignored for orders with logged-in user." + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + ], + "responses": { + "200": { + "description": "Search result containing SeoUrl\\'s to be used as breadcrumb.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BreadcrumbCollection" + } + } + } }, + "400": { + "$ref": "#/components/responses/400" + } + }, + "security": [ + { + "ApiKey": [] + } + ] + } + }, + "/contact-form": { + "post": { + "tags": [ + "Content" + ], + "summary": "Submit a contact form message", + "description": "Used for submitting contact forms. Be aware that there can be more required fields, depending on the system settings.", + "operationId": "sendContactMail", + "parameters": [ { "name": "sw-language-id", "in": "header", - "description": "If a document is rendered on the fly the provided language id is added to fallback languages while the order language has priority. It does not change already generated documents.", + "description": "Instructs Shopware to return the response in the given language.", "required": false, "schema": { "type": "string", @@ -20281,57 +20311,91 @@ } } ], - "responses": { - "200": { - "description": "Success", - "content": { - "application/pdf": { - "schema": { - "type": "string", - "format": "binary" - } - }, - "text/html": { - "schema": { - "type": "string" - } - }, - "application/xml": { - "schema": { - "type": "string" - } + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "required": [ + "email", + "subject", + "comment" + ], + "properties": { + "salutationId": { + "description": "Identifier of the salutation. Use `/api/salutation` endpoint to fetch possible values.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "firstName": { + "description": "Firstname. This field may be required depending on the system settings.", + "type": "string" + }, + "lastName": { + "description": "Lastname. This field may be required depending on the system settings.", + "type": "string" + }, + "email": { + "description": "Email address", + "type": "string" + }, + "phone": { + "description": "Phone. This field may be required depending on the system settings.", + "type": "string" + }, + "subject": { + "description": "The subject of the contact form.", + "type": "string" + }, + "comment": { + "description": "The message of the contact form", + "type": "string" + }, + "navigationId": { + "description": "Identifier of the navigation page. Can be used to override the configuration.\nTake a look at the settings of a category containing a concat form in the administration.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "slotId": { + "description": "Identifier of the cms element", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "cmsPageType": { + "description": "Type of the content management page", + "type": "string" + }, + "entityName": { + "description": "Entity name for slot config", + "type": "string" + } + }, + "type": "object" } } - }, - "204": { - "description": "DEPRECATED: Returns a no content response when no document is found. Will be changed in v6.8.0.0 and returns a 404 response instead." - }, - "403": { - "description": "Forbidden." - }, - "404": { - "description": "Document not found." - }, - "406": { - "description": "The requested mime type is not supported." + } + }, + "responses": { + "200": { + "description": "Message sent successful." } }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] } }, - "/payment-method": { + "/shipping-method": { "post": { "tags": [ - "Payment Method", + "Payment & Shipping", "Endpoints supporting Criteria " ], - "summary": "Loads all available payment methods", - "operationId": "readPaymentMethod", + "summary": "Fetch shipping methods", + "description": "Perform a filtered search for shipping methods.\n\n**Available Associations:**\n- `prices` - Shipping method price configurations (based on current cart and context)\n- `deliveryTime` - Delivery time information (min/max days, unit)\n- `media` - Media/images associated with the shipping method (loaded by default)\n- `availabilityRule` - Availability rule determining when this method is available\n- `tax` - Tax configuration for the shipping method\n\n**Example with associations:**\n```json\n{\n \"associations\": {\n \"prices\": {},\n \"deliveryTime\": {}\n }\n}\n```\n\nNote: The `prices` association is essential for accessing shipping cost configurations.", + "operationId": "readShippingMethod", "parameters": [ { "name": "sw-language-id", @@ -20356,25 +20420,24 @@ ], "default": "1" } + }, + { + "name": "onlyAvailable", + "in": "query", + "description": "List only available shipping methods. This filters shipping methods methods which can not be used in the actual context because of their availability rule.", + "schema": { + "type": "boolean" + } } ], "requestBody": { - "required": true, + "required": false, "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/Criteria" - }, - { - "properties": { - "onlyAvailable": { - "description": "List only available", - "type": "boolean" - } - }, - "type": "object" } ] } @@ -20383,7 +20446,40 @@ }, "responses": { "200": { - "$ref": "#/components/responses/PaymentMethodListResponse" + "description": "", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "required": [ + "elements" + ], + "properties": { + "total": { + "description": "Total amount", + "type": "integer" + }, + "aggregations": { + "description": "aggregation result", + "type": "object" + }, + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ShippingMethod" + } + } + }, + "type": "object" + }, + { + "$ref": "#/components/schemas/EntitySearchResult" + } + ] + } + } + } } }, "security": [ @@ -20394,11 +20490,12 @@ }, "get": { "tags": [ - "Payment Method", + "Payment & Shipping", "Endpoints supporting Criteria " ], - "summary": "Loads all available payment methods", - "operationId": "readPaymentMethodGet", + "summary": "Fetch shipping methods", + "description": "Perform a filtered search for shipping methods.\n\n**Available Associations:**\n- `prices` - Shipping method price configurations (graduated prices, quantity-based pricing)\n- `deliveryTime` - Delivery time information (min/max days, unit)\n- `media` - Media/images associated with the shipping method (loaded by default)\n- `availabilityRule` - Availability rule determining when this method is available\n- `tax` - Tax configuration for the shipping method\n\nNote: The `prices` association is essential for accessing shipping cost configurations.", + "operationId": "readShippingMethodGet", "parameters": [ { "name": "sw-language-id", @@ -20458,10 +20555,104 @@ { "$ref": "#/components/parameters/CompressedCriteria" } - ], + ], + "responses": { + "200": { + "$ref": "#/components/responses/ShippingMethodListResponse" + } + }, + "security": [ + { + "ApiKey": [] + } + ] + } + }, + "/product-export/{accessKey}/{fileName}": { + "get": { + "tags": [ + "Product" + ], + "summary": "Export product export", + "operationId": "readProductExport", + "parameters": [ + { + "name": "accessKey", + "in": "path", + "description": "Access Key", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fileName", + "in": "path", + "description": "File Name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "" + } + }, + "security": [ + { + "ApiKey": [] + } + ] + } + }, + "/media": { + "post": { + "tags": [ + "Content" + ], + "summary": "Fetch and resolve Media Entities", + "description": "Fetch one or multiple Media Entities with the corresponding Identifier.", + "operationId": "readMedia", + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "ids": { + "description": "Identifier (UUID) of the media entity to be fetched.", + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + }, + "type": "object", + "required": [ + "ids" + ] + } + } + } + }, "responses": { "200": { - "$ref": "#/components/responses/PaymentMethodListResponse" + "description": "The loaded MediaCollection containing the requested Media Entities.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Media" + } + } + } + } + }, + "404": { + "$ref": "#/components/responses/404" } }, "security": [ @@ -20469,56 +20660,45 @@ "ApiKey": [] } ] - } - }, - "/product/{productId}/cross-selling": { - "post": { + }, + "get": { "tags": [ - "Product" + "Content" ], - "summary": "Fetch cross-selling groups of a product", - "description": "This route is used to load the cross sellings for a product. A product has several cross selling definitions in which several products are linked. The route returns the cross sellings together with the linked products", - "operationId": "readProductCrossSellings", + "summary": "Fetch and resolve Media Entities", + "description": "Fetch one or multiple Media Entities with the corresponding Identifier.", + "operationId": "readMediaGet", "parameters": [ { - "name": "productId", - "in": "path", - "description": "Product ID", + "name": "ids[]", + "in": "query", + "description": "Identifier (UUID) of the media entity to be fetched.", "required": true, "schema": { - "type": "string" - } - }, - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "sw-include-seo-urls", - "in": "header", - "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", - "required": false, - "schema": { - "type": "boolean" + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } } } ], "responses": { "200": { - "description": "Found cross sellings", + "description": "The loaded MediaCollection containing the requested Media Entities.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CrossSellingElementCollection" + "type": "array", + "items": { + "$ref": "#/components/schemas/Media" + } } } } + }, + "404": { + "$ref": "#/components/responses/404" } }, "security": [ @@ -20526,51 +20706,23 @@ "ApiKey": [] } ] - }, + } + }, + "/context": { "get": { "tags": [ - "Product" - ], - "summary": "Fetch cross-selling groups of a product", - "description": "This route is used to load the cross sellings for a product. A product has several cross selling definitions in which several products are linked. The route returns the cross sellings together with the linked products", - "operationId": "readProductCrossSellingsGet", - "parameters": [ - { - "name": "productId", - "in": "path", - "description": "Product ID", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "sw-include-seo-urls", - "in": "header", - "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", - "required": false, - "schema": { - "type": "boolean" - } - } + "System & Context" ], + "summary": "Fetch the current context", + "description": "Fetches the current context. This includes for example the `customerGroup`, `currency`, `taxRules` and many more.", + "operationId": "readContext", "responses": { "200": { - "description": "Found cross sellings", + "description": "Returns the current context.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CrossSellingElementCollection" + "$ref": "#/components/schemas/SalesChannelContext" } } } @@ -20581,103 +20733,116 @@ "ApiKey": [] } ] - } - }, - "/product/{productId}": { - "post": { + }, + "patch": { "tags": [ - "Product" + "System & Context" ], - "summary": "Fetch a single product", - "description": "This route is used to load a single product with the corresponding details. In addition to loading the data, the best variant of the product is determined when a parent id is passed.\n\n**Available Associations:**\n- `downloads` - Downloadable files associated with the product (e.g., manuals, digital content)\n- `children` - Product variants that inherit from this parent product\n- `deliveryTime` - Estimated delivery time for the product\n- `tax` - Tax configuration (rate and calculation rules)\n- `manufacturer` - Product manufacturer or brand information\n- `unit` - Product unit of measure (e.g., piece, liter, kg)\n- `cover` - Main product image displayed in listings and detail pages\n- `cmsPage` - Custom CMS page layout for the product detail page\n- `canonicalProduct` - Canonical product reference for variant consolidation and SEO purposes\n- `media` - Product images and media gallery\n- `crossSellings` - Cross-selling configurations (related products, accessories, similar items)\n- `configuratorSettings` - Variant configurator settings defining available options for product variants\n- `productReviews` - Customer reviews and ratings for the product\n- `mainCategories` - Primary category assignments per sales channel for SEO and navigation\n- `seoUrls` - SEO-friendly URLs for the product across different sales channels\n- `options` - Product variant options (e.g., size, color) that define different variants\n- `properties` - Product properties and characteristics for filtering\n- `categories` - Categories this product is assigned to\n- `streams` - Dynamic product streams this product belongs to based on defined filters\n- `categoriesRo` - Read-only category tree including all parent categories for optimized queries\n- `tags` - Tags for organizing and filtering products\n- `seoCategory` - Main category used for SEO URL generation in the current sales channel", - "operationId": "readProductDetail", - "parameters": [ - { - "name": "productId", - "in": "path", - "description": "Product ID", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$'" - } - }, - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", - "in": "header", - "name": "sw-include-seo-urls", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "sw-include-search-info", - "in": "header", - "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" - } - }, - { - "description": "Instructs Shopware to skip loading the configurator data", - "in": "query", - "name": "skipConfigurator", - "required": false, - "schema": { - "type": "boolean" + "summary": "Modify the current context", + "description": "Used for switching the context. A typical example would be changing the language or changing the currency.", + "operationId": "updateContext", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "currencyId": { + "description": "Currency", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "languageId": { + "description": "Language", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "billingAddressId": { + "description": "Billing Address", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "shippingAddressId": { + "description": "Shipping Address", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "paymentMethodId": { + "description": "Payment Method", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "shippingMethodId": { + "description": "Shipping Method", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "countryId": { + "description": "Country", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "countryStateId": { + "description": "Country State", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + "type": "object" + } } - }, + } + }, + "responses": { + "200": { + "$ref": "#/components/responses/ContextTokenResponse" + } + }, + "security": [ { - "description": "Instructs Shopware to skip loading the CMS page data", - "in": "query", - "name": "skipCmsPage", - "required": false, - "schema": { - "type": "boolean" - } + "ApiKey": [] } - ], + ] + } + }, + "/context/gateway": { + "post": { "requestBody": { - "required": false, + "required": true, "content": { "application/json": { "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/NoneFieldsCriteria" + "required": [ + "appName" + ], + "properties": { + "appName": { + "type": "string" + }, + "data": { + "type": "object" } - ] + }, + "type": "object" } } } }, + "tags": [ + "Gateway" + ], + "summary": "Call the context gateway", + "description": "Call the context gateway, which is used to manipulate certain aspects of context (e.g. selected payment methods, register customer, etc.).", + "operationId": "contextGateway", "responses": { "200": { - "description": "Product information along with variant groups and options", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProductDetailResponse" - } - } - } + "$ref": "#/components/responses/ContextTokenResponse" + }, + "400": { + "description": "App server communication error" + }, + "422": { + "description": "Error provided by App Server with message to show customer" } }, "security": [ @@ -20688,112 +20853,95 @@ }, "get": { "tags": [ - "Product" + "Gateway" ], - "summary": "Fetch a single product", - "description": "This route is used to load a single product with the corresponding details. In addition to loading the data, the best variant of the product is determined when a parent id is passed.\n\n**Available Associations:**\n- `downloads` - Downloadable files associated with the product (e.g., manuals, digital content)\n- `children` - Product variants that inherit from this parent product\n- `deliveryTime` - Estimated delivery time for the product\n- `tax` - Tax configuration (rate and calculation rules)\n- `manufacturer` - Product manufacturer or brand information\n- `unit` - Product unit of measure (e.g., piece, liter, kg)\n- `cover` - Main product image displayed in listings and detail pages\n- `cmsPage` - Custom CMS page layout for the product detail page\n- `canonicalProduct` - Canonical product reference for variant consolidation and SEO purposes\n- `media` - Product images and media gallery\n- `crossSellings` - Cross-selling configurations (related products, accessories, similar items)\n- `configuratorSettings` - Variant configurator settings defining available options for product variants\n- `productReviews` - Customer reviews and ratings for the product\n- `mainCategories` - Primary category assignments per sales channel for SEO and navigation\n- `seoUrls` - SEO-friendly URLs for the product across different sales channels\n- `options` - Product variant options (e.g., size, color) that define different variants\n- `properties` - Product properties and characteristics for filtering\n- `categories` - Categories this product is assigned to\n- `streams` - Dynamic product streams this product belongs to based on defined filters\n- `categoriesRo` - Read-only category tree including all parent categories for optimized queries\n- `tags` - Tags for organizing and filtering products\n- `seoCategory` - Main category used for SEO URL generation in the current sales channel", - "operationId": "readProductDetailGet", + "summary": "Call the context gateway", + "description": "Call the context gateway, which is used to manipulate certain aspects of context (e.g. selected payment methods, register customer, etc.). Please prefer using the POST version of this endpoint.", + "operationId": "contextGatewayGet", "parameters": [ { - "name": "productId", - "in": "path", - "description": "Product ID", + "name": "appName", + "in": "query", "required": true, "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$'" + "type": "string" } }, { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, + "name": "data", + "in": "query", "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } + "type": "object" + }, + "style": "deepObject" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/ContextTokenResponse" }, - { - "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", - "in": "header", - "name": "sw-include-seo-urls", - "required": false, - "schema": { - "type": "boolean" - } + "400": { + "description": "App server communication error" }, + "422": { + "description": "Error provided by App Server with message to show customer" + } + }, + "security": [ { - "description": "Instructs Shopware to skip loading the configurator data", - "in": "query", - "name": "skipConfigurator", - "required": false, - "schema": { - "type": "boolean" - } - }, + "ApiKey": [] + } + ] + } + }, + "/app-system/{name}/generate-token": { + "post": { + "tags": [ + "App system" + ], + "summary": "Generate JWT token for app system backend", + "description": "Generate JWT token for authenticated communication with the app server", + "operationId": "generateJWTAppSystemAppServer", + "parameters": [ { - "description": "Instructs Shopware to skip loading the CMS page data", - "in": "query", - "name": "skipCmsPage", - "required": false, + "in": "path", + "name": "name", + "required": true, + "description": "Name of the app", "schema": { - "type": "boolean" + "type": "string" } - }, - { - "$ref": "#/components/parameters/criteriaPage" - }, - { - "$ref": "#/components/parameters/criteriaLimit" - }, - { - "$ref": "#/components/parameters/criteriaTerm" - }, - { - "$ref": "#/components/parameters/criteriaFilter" - }, - { - "$ref": "#/components/parameters/criteriaIds" - }, - { - "$ref": "#/components/parameters/criteriaQuery" - }, - { - "$ref": "#/components/parameters/criteriaAssociations" - }, - { - "$ref": "#/components/parameters/criteriaPostFilter" - }, - { - "$ref": "#/components/parameters/criteriaSort" - }, - { - "$ref": "#/components/parameters/criteriaAggregations" - }, - { - "$ref": "#/components/parameters/criteriaGrouping" - }, - { - "$ref": "#/components/parameters/criteriaTotalCountMode" - }, - { - "$ref": "#/components/parameters/criteriaIncludes" - }, - { - "$ref": "#/components/parameters/criteriaExcludes" - }, - { - "$ref": "#/components/parameters/CompressedNoneFieldsCriteria" } ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, "responses": { "200": { - "description": "Product information along with variant groups and options", + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProductDetailResponse" + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "expires": { + "type": "string", + "format": "date-time" + }, + "shopId": { + "type": "string" + } + } } } } @@ -20806,15 +20954,15 @@ ] } }, - "/product": { + "/salutation": { "post": { "tags": [ - "Product", + "System & Context", "Endpoints supporting Criteria " ], - "summary": "Fetch a list of products", - "description": "List products that match the given criteria. For performance reasons a limit should always be set.\n\n**Available Associations:**\n- `downloads` - Downloadable files associated with the product (e.g., manuals, digital content)\n- `children` - Product variants that inherit from this parent product\n- `deliveryTime` - Estimated delivery time for the product\n- `tax` - Tax configuration (rate and calculation rules)\n- `manufacturer` - Product manufacturer or brand information\n- `unit` - Product unit of measure (e.g., piece, liter, kg)\n- `cover` - Main product image displayed in listings and detail pages\n- `cmsPage` - Custom CMS page layout for the product detail page\n- `canonicalProduct` - Canonical product reference for variant consolidation and SEO purposes\n- `media` - Product images and media gallery\n- `crossSellings` - Cross-selling configurations (related products, accessories, similar items)\n- `configuratorSettings` - Variant configurator settings defining available options for product variants\n- `productReviews` - Customer reviews and ratings for the product\n- `mainCategories` - Primary category assignments per sales channel for SEO and navigation\n- `seoUrls` - SEO-friendly URLs for the product across different sales channels\n- `options` - Product variant options (e.g., size, color) that define different variants\n- `properties` - Product properties and characteristics for filtering\n- `categories` - Categories this product is assigned to\n- `streams` - Dynamic product streams this product belongs to based on defined filters\n- `categoriesRo` - Read-only category tree including all parent categories for optimized queries\n- `tags` - Tags for organizing and filtering products\n- `seoCategory` - Main category used for SEO URL generation in the current sales channel", - "operationId": "readProduct", + "summary": "Fetch salutations", + "description": "Fetches salutations with a criteria obj.", + "operationId": "readSalutation", "parameters": [ { "name": "sw-language-id", @@ -20857,7 +21005,7 @@ }, "responses": { "200": { - "$ref": "#/components/responses/ProductListResponse" + "$ref": "#/components/responses/SalutationListResponse" } }, "security": [ @@ -20868,12 +21016,12 @@ }, "get": { "tags": [ - "Product", + "System & Context", "Endpoints supporting Criteria " ], - "summary": "Fetch a list of products", - "description": "List products that match the given criteria. For performance reasons a limit should always be set.\n\n**Available Associations:**\n- `downloads` - Downloadable files associated with the product (e.g., manuals, digital content)\n- `children` - Product variants that inherit from this parent product\n- `deliveryTime` - Estimated delivery time for the product\n- `tax` - Tax configuration (rate and calculation rules)\n- `manufacturer` - Product manufacturer or brand information\n- `unit` - Product unit of measure (e.g., piece, liter, kg)\n- `cover` - Main product image displayed in listings and detail pages\n- `cmsPage` - Custom CMS page layout for the product detail page\n- `canonicalProduct` - Canonical product reference for variant consolidation and SEO purposes\n- `media` - Product images and media gallery\n- `crossSellings` - Cross-selling configurations (related products, accessories, similar items)\n- `configuratorSettings` - Variant configurator settings defining available options for product variants\n- `productReviews` - Customer reviews and ratings for the product\n- `mainCategories` - Primary category assignments per sales channel for SEO and navigation\n- `seoUrls` - SEO-friendly URLs for the product across different sales channels\n- `options` - Product variant options (e.g., size, color) that define different variants\n- `properties` - Product properties and characteristics for filtering\n- `categories` - Categories this product is assigned to\n- `streams` - Dynamic product streams this product belongs to based on defined filters\n- `categoriesRo` - Read-only category tree including all parent categories for optimized queries\n- `tags` - Tags for organizing and filtering products\n- `seoCategory` - Main category used for SEO URL generation in the current sales channel", - "operationId": "readProductGet", + "summary": "Fetch salutations", + "description": "Perform a filtered search for salutations.", + "operationId": "readSalutationGet", "parameters": [ { "name": "sw-language-id", @@ -20936,7 +21084,49 @@ ], "responses": { "200": { - "$ref": "#/components/responses/ProductListResponse" + "$ref": "#/components/responses/SalutationListResponse" + } + }, + "security": [ + { + "ApiKey": [] + } + ] + } + }, + "/sitemap": { + "get": { + "tags": [ + "Sitemap & Routes" + ], + "summary": "Fetch sitemaps", + "description": "Fetches a list of compressed sitemap files, which are often used by search engines.", + "operationId": "readSitemap", + "parameters": [ + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + ], + "responses": { + "200": { + "description": "Returns a list of available sitemaps.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Sitemap" + } + } + } + } } }, "security": [ @@ -20946,23 +21136,23 @@ ] } }, - "/product/{productId}/reviews": { - "post": { + "/sitemap/{filePath}": { + "get": { "tags": [ - "Product", - "Endpoints supporting Criteria " + "Sitemap & Routes" ], - "summary": "Fetch product reviews", - "description": "Perform a filtered search for product reviews.", - "operationId": "readProductReviews", + "summary": "Download sitemap file", + "description": "Downloads the sitemap file from the configured sitemap storage.", + "operationId": "getSitemapFile", "parameters": [ { - "name": "productId", + "name": "filePath", "in": "path", - "description": "Identifier of the product.", + "description": "The path to the sitemap file", "required": true, "schema": { - "type": "string" + "type": "string", + "pattern": ".*\\.(xml|gz)$" } }, { @@ -20974,61 +21164,79 @@ "type": "string", "pattern": "^[0-9a-f]{32}$" } - }, - { - "name": "sw-include-search-info", - "in": "header", - "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" + } + ], + "responses": { + "200": { + "description": "Returns the blob to download.", + "content": { + "application/xml": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "application/gzip": { + "schema": { + "type": "string", + "format": "binary" + } + } } } + }, + "security": [ + { + "ApiKey": [] + } + ] + } + }, + "/newsletter/confirm": { + "post": { + "tags": [ + "Newsletter" ], + "summary": "Confirm a newsletter registration", + "description": "You have to use the hash from the link sent out via email to confirm the user registration.", + "operationId": "confirmNewsletter", "requestBody": { - "required": false, + "required": true, "content": { "application/json": { "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Criteria" + "required": [ + "hash", + "em" + ], + "properties": { + "hash": { + "description": "Hash parameter from link the in the confirmation mail", + "type": "string" + }, + "em": { + "description": "Email hash parameter from the link in the confirmation mail", + "type": "string" } - ] + }, + "type": "object" } } } }, "responses": { "200": { - "description": "Entity search result containing product reviews", + "description": "The newsletter confirmation was successful.", "content": { "application/json": { "schema": { - "allOf": [ - { - "properties": { - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProductReview" - } - } - }, - "type": "object" - }, - { - "$ref": "#/components/schemas/EntitySearchResult" - } - ] + "$ref": "#/components/schemas/SuccessResponse" } } } + }, + "400": { + "$ref": "#/components/responses/400" } }, "security": [ @@ -21036,109 +21244,161 @@ "ApiKey": [] } ] - }, - "get": { + } + }, + "/newsletter/subscribe": { + "post": { "tags": [ - "Product", - "Endpoints supporting Criteria " + "Newsletter" ], - "summary": "Fetch product reviews", - "description": "Perform a filtered search for product reviews.", - "operationId": "readProductReviewsGet", - "parameters": [ - { - "name": "productId", - "in": "path", - "description": "Identifier of the product.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "summary": "Create or remove a newsletter subscription", + "description": "This route is used to create/remove/confirm a newsletter subscription.\n\nThe `option` property controls what should happen:\n* `direct`: The subscription is directly active and does not need a confirmation.\n* `subscribe`: An email will be send to the provided email address containing a link to the /newsletter/confirm route.\nThe subscription is only successful, if the /newsletter/confirm route is called with the generated hashes.\n* `unsubscribe`: The email address will be removed from the newsletter subscriptions.\n* `confirmSubscribe`: Confirms the newsletter subscription for the provided email address.", + "operationId": "subscribeToNewsletter", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "required": [ + "email", + "option", + "storefrontUrl" + ], + "properties": { + "email": { + "description": "Email address that will receive the confirmation and the newsletter.", + "type": "string" + }, + "option": { + "description": "Defines what should be done.", + "type": "string" + }, + "storefrontUrl": { + "description": "Url of the storefront of the shop. This will be used for generating the link to the /newsletter/confirm inside the confirm email.", + "type": "string" + }, + "salutationId": { + "description": "Identifier of the salutation.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "firstName": { + "description": "First name", + "type": "string" + }, + "lastName": { + "description": "Last name", + "type": "string" + }, + "street": { + "description": "Street", + "type": "string" + }, + "city": { + "description": "City", + "type": "string" + }, + "zipCode": { + "description": "Zip code", + "type": "string" + }, + "languageId": { + "description": "Identifier of the language.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "customFields": { + "description": "Custom field data that should be added to the subscription.", + "type": "string" + } + }, + "type": "object" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "required": [ + "success", + "status" + ], + "properties": { + "success": { + "description": "Indicates whether the subscribe request was successful.", + "type": "boolean" + }, + "status": { + "description": "The subscription status.", + "type": "string", + "enum": [ + "notSet", + "optIn", + "optOut", + "direct" + ] + } + }, + "type": "object" + } + } } }, + "400": { + "$ref": "#/components/responses/400" + } + }, + "security": [ { - "$ref": "#/components/parameters/criteriaPage" - }, - { - "$ref": "#/components/parameters/criteriaLimit" - }, - { - "$ref": "#/components/parameters/criteriaTerm" - }, - { - "$ref": "#/components/parameters/criteriaFilter" - }, - { - "$ref": "#/components/parameters/criteriaIds" - }, - { - "$ref": "#/components/parameters/criteriaQuery" - }, - { - "$ref": "#/components/parameters/criteriaAssociations" - }, - { - "$ref": "#/components/parameters/criteriaPostFilter" - }, - { - "$ref": "#/components/parameters/criteriaSort" - }, - { - "$ref": "#/components/parameters/criteriaAggregations" - }, - { - "$ref": "#/components/parameters/criteriaFields" - }, - { - "$ref": "#/components/parameters/criteriaGrouping" - }, - { - "$ref": "#/components/parameters/criteriaTotalCountMode" - }, - { - "$ref": "#/components/parameters/criteriaIncludes" - }, - { - "$ref": "#/components/parameters/criteriaExcludes" - }, - { - "$ref": "#/components/parameters/CompressedCriteria" + "ApiKey": [] } + ] + } + }, + "/newsletter/unsubscribe": { + "post": { + "tags": [ + "Newsletter" ], + "summary": "Remove a newsletter subscription", + "description": "Removes a newsletter recipient from the mailing lists.", + "operationId": "unsubscribeToNewsletter", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "required": [ + "email" + ], + "properties": { + "email": { + "description": "Email address that should be removed from the mailing lists.", + "type": "string" + } + }, + "type": "object" + } + } + } + }, "responses": { "200": { - "description": "Entity search result containing product reviews", + "description": "Unsubscribing was successful.", "content": { "application/json": { "schema": { - "allOf": [ - { - "properties": { - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProductReview" - } - } - }, - "type": "object" - }, - { - "$ref": "#/components/schemas/EntitySearchResult" - } - ] + "$ref": "#/components/schemas/SuccessResponse" } } } + }, + "400": { + "$ref": "#/components/responses/400" } }, "security": [ @@ -21148,25 +21408,15 @@ ] } }, - "/product/{productId}/review": { + "/revocation-request-form": { "post": { "tags": [ - "Product" + "Content" ], - "summary": "Save a product review", - "description": "Saves a review for a product. Reviews have to be activated in the settings.", - "operationId": "saveProductReview", + "summary": "Submit a revocation request form message", + "description": "Used for submitting revocation request forms. Be aware that there can be more required fields, depending on the system settings.", + "operationId": "sendRevocationRequestMail", "parameters": [ - { - "name": "productId", - "in": "path", - "description": "Identifier of the product which is reviewed.", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, { "name": "sw-language-id", "in": "header", @@ -21179,35 +21429,52 @@ } ], "requestBody": { + "required": true, "content": { "application/json": { "schema": { "required": [ - "title", - "content", - "points" + "email", + "contractNumber" ], "properties": { - "name": { - "description": "The name of the review author. If not set, the first name of the customer is chosen.", + "firstName": { + "description": "First name. This field may be required depending on the system settings.", + "type": "string" + }, + "lastName": { + "description": "Last name. This field may be required depending on the system settings.", "type": "string" }, "email": { - "description": "The email address of the review author. If not set, the email of the customer is chosen.", + "description": "Email address.", "type": "string" }, - "title": { - "description": "The title of the review.", + "contractNumber": { + "description": "The number of the contract.", "type": "string" }, - "content": { - "description": "The content of review.", + "comment": { + "description": "The message of the revocation request form.", "type": "string" }, - "points": { - "description": "The review rating for the product.", - "type": "number", - "format": "double" + "navigationId": { + "description": "Identifier of the navigation page. Can be used to override the configuration.\nTake a look at the settings of a category containing a revocation form in the administration.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "slotId": { + "description": "Identifier of the cms element.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "cmsPageType": { + "description": "Type of the content management page.", + "type": "string" + }, + "entityName": { + "description": "Entity name for slot config.", + "type": "string" } }, "type": "object" @@ -21217,30 +21484,77 @@ }, "responses": { "200": { - "description": "Success response indicating the review was saved successfully." + "description": "Message sent successfully." } }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] } }, - "/product/{productId}/find-variant": { + "/_info/routes": { + "get": { + "summary": "Get API routes", + "operationId": "getRoutes", + "tags": [ + "System Info & Health Check" + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "endpoints" + ], + "properties": { + "endpoints": { + "type": "array", + "items": { + "type": "object", + "required": [ + "methods", + "path" + ], + "properties": { + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "path": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "/landing-page/{landingPageId}": { "post": { "tags": [ - "Product" + "Content", + "Endpoints supporting Criteria " ], - "summary": "Search for a matching variant by product options.", - "description": "Performs a search for product variants and returns the best matching variant.", - "operationId": "searchProductVariantIds", + "summary": "Fetch a landing page with the resolved CMS page", + "description": "Loads a landing page by its identifier and resolves the CMS page.\n\n**Important notice**\n\nThe criteria passed with this route also affects the listing, if there is one within the cms page.\n\n**Available Associations:**\n- `cmsPage` - CMS page layout for the landing page\n- `seoUrls` - SEO-friendly URLs for the landing page across different sales channels", + "operationId": "readLandingPage", "parameters": [ { - "name": "productId", + "name": "landingPageId", "in": "path", - "description": "Product ID", + "description": "Identifier of the landing page.", "required": true, "schema": { "type": "string" @@ -21255,54 +21569,64 @@ "type": "string", "pattern": "^[0-9a-f]{32}$" } + }, + { + "name": "sw-include-search-info", + "in": "header", + "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "0", + "1" + ], + "default": "1" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "required": [ - "options" - ], - "properties": { - "options": { - "oneOf": [ + "allOf": [ + { + "$ref": "#/components/schemas/Criteria" + }, + { + "allOf": [ { - "description": "The options parameter for the variant to find.", - "type": "array", - "items": { - "type": "string" - } + "properties": { + "slots": { + "description": "Resolves only the given slot identifiers. The identifiers have to be seperated by a `|` character.", + "type": "string" + } + }, + "type": "object" }, - { - "description": "The options parameter as a map of groupId => optionId.", - "type": "object", - "additionalProperties": { - "type": "string" - } + { + "$ref": "#/components/schemas/ProductListingCriteria" } ] - }, - "switchedGroup": { - "description": "The id of the option group that has been switched.", - "type": "string" } - }, - "type": "object" + ] } } } }, "responses": { "200": { - "description": "Returns an FoundCombination struct containing the ids matching the search.", + "description": "The loaded landing page with cms page", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FindProductVariantRouteResponse" + "$ref": "#/components/schemas/LandingPage" } } } + }, + "404": { + "$ref": "#/components/responses/404" } }, "security": [ @@ -21313,16 +21637,17 @@ }, "get": { "tags": [ - "Product" + "Content", + "Endpoints supporting Criteria " ], - "summary": "Search for a matching variant by product options.", - "description": "Performs a search for product variants and returns the best matching variant.", - "operationId": "searchProductVariantIdsGet", + "summary": "Fetch a landing page with the resolved CMS page", + "description": "Loads a landing page by its identifier and resolves the CMS page.\n\n**Important notice**\n\nThe criteria passed with this route also affects the listing, if there is one within the cms page.\n\n**Available Associations:**\n- `cmsPage` - CMS page layout for the landing page\n- `seoUrls` - SEO-friendly URLs for the landing page across different sales channels", + "operationId": "readLandingPageGet", "parameters": [ { - "name": "productId", + "name": "landingPageId", "in": "path", - "description": "Product ID", + "description": "Identifier of the landing page.", "required": true, "schema": { "type": "string" @@ -21339,134 +21664,169 @@ } }, { - "name": "options[]", + "name": "sw-include-search-info", + "in": "header", + "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "0", + "1" + ], + "default": "1" + } + }, + { + "$ref": "#/components/parameters/criteriaPage" + }, + { + "name": "limit", "in": "query", - "description": "The options parameter for the variant to find. Array of option IDs.", - "required": true, + "description": "Number of items per result page. If not set, the limit will be set according to the default products per page, defined in the system settings.", "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "integer", + "minimum": 0 } }, { - "name": "switchedGroup", + "$ref": "#/components/parameters/criteriaTerm" + }, + { + "$ref": "#/components/parameters/criteriaFilter" + }, + { + "$ref": "#/components/parameters/criteriaIds" + }, + { + "$ref": "#/components/parameters/criteriaQuery" + }, + { + "$ref": "#/components/parameters/criteriaAssociations" + }, + { + "$ref": "#/components/parameters/criteriaPostFilter" + }, + { + "$ref": "#/components/parameters/criteriaSort" + }, + { + "$ref": "#/components/parameters/criteriaAggregations" + }, + { + "$ref": "#/components/parameters/criteriaFields" + }, + { + "$ref": "#/components/parameters/criteriaGrouping" + }, + { + "$ref": "#/components/parameters/criteriaTotalCountMode" + }, + { + "$ref": "#/components/parameters/criteriaIncludes" + }, + { + "$ref": "#/components/parameters/criteriaExcludes" + }, + { + "name": "order", "in": "query", - "description": "The id of the option group that has been switched.", - "required": false, + "description": "Specifies the sorting of the products by `availableSortings`. If not set, the default sorting will be set according to the shop settings. The available sorting options are sent within the response under the `availableSortings` key. In order to sort by a field, consider using the `sort` parameter from the listing criteria. Do not use both parameters together, as it might lead to unexpected results.", "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "Returns an FoundCombination struct containing the ids matching the search.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FindProductVariantRouteResponse" - } - } + }, + { + "name": "p", + "in": "query", + "description": "Search result page", + "schema": { + "type": "integer", + "default": 1 } - } - }, - "security": [ + }, { - "ApiKey": [] - } - ] - } - }, - "/context": { - "get": { - "tags": [ - "System & Context" - ], - "summary": "Fetch the current context", - "description": "Fetches the current context. This includes for example the `customerGroup`, `currency`, `taxRules` and many more.", - "operationId": "readContext", - "responses": { - "200": { - "description": "Returns the current context.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SalesChannelContext" - } - } + "name": "manufacturer", + "in": "query", + "description": "Filter by manufacturers. List of manufacturer identifiers separated by a `|`.", + "schema": { + "type": "string" } - } - }, - "security": [ + }, { - "ApiKey": [] - } - ] - }, - "patch": { - "tags": [ - "System & Context" - ], - "summary": "Modify the current context", - "description": "Used for switching the context. A typical example would be changing the language or changing the currency.", - "operationId": "updateContext", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "currencyId": { - "description": "Currency", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "languageId": { - "description": "Language", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "billingAddressId": { - "description": "Billing Address", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "shippingAddressId": { - "description": "Shipping Address", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "paymentMethodId": { - "description": "Payment Method", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "shippingMethodId": { - "description": "Shipping Method", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "countryId": { - "description": "Country", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "countryStateId": { - "description": "Country State", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } + "name": "min-price", + "in": "query", + "description": "Filters by a minimum product price. Has to be lower than the `max-price` filter.", + "schema": { + "type": "integer", + "minimum": 0, + "default": 0 + } + }, + { + "name": "max-price", + "in": "query", + "description": "Filters by a maximum product price. Has to be higher than the `min-price` filter.", + "schema": { + "type": "integer", + "minimum": 0, + "default": 0 + } + }, + { + "name": "rating", + "in": "query", + "description": "Filter products with a minimum average rating.", + "schema": { + "type": "integer" + } + }, + { + "name": "shipping-free", + "in": "query", + "description": "Filters products that are marked as shipping-free.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "properties", + "in": "query", + "description": "Filters products by their properties. List of property identifiers separated by a `|`.", + "schema": { + "type": "string" + } + }, + { + "name": "reduce-aggregations", + "in": "query", + "description": "By sending the parameter `reduce-aggregations` , the post-filters that were applied by the customer, are also applied to the aggregations. This has the consequence that only values are returned in the aggregations that would lead to further filter results. This parameter is a flag, the value has no effect.", + "schema": { + "oneOf": [ + { + "type": "string" }, - "type": "object" - } + { + "type": "null" + } + ] } } - }, + ], "responses": { "200": { - "$ref": "#/components/responses/ContextTokenResponse" + "description": "The loaded landing page with cms page", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LandingPage" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404" } }, "security": [ @@ -21476,44 +21836,66 @@ ] } }, - "/context/gateway": { + "/payment-method": { "post": { + "tags": [ + "Payment Method", + "Endpoints supporting Criteria " + ], + "summary": "Loads all available payment methods", + "operationId": "readPaymentMethod", + "parameters": [ + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "sw-include-search-info", + "in": "header", + "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "0", + "1" + ], + "default": "1" + } + } + ], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "required": [ - "appName" - ], - "properties": { - "appName": { - "type": "string" + "allOf": [ + { + "$ref": "#/components/schemas/Criteria" }, - "data": { + { + "properties": { + "onlyAvailable": { + "description": "List only available", + "type": "boolean" + } + }, "type": "object" } - }, - "type": "object" + ] } } } }, - "tags": [ - "Gateway" - ], - "summary": "Call the context gateway", - "description": "Call the context gateway, which is used to manipulate certain aspects of context (e.g. selected payment methods, register customer, etc.).", - "operationId": "contextGateway", "responses": { "200": { - "$ref": "#/components/responses/ContextTokenResponse" - }, - "400": { - "description": "App server communication error" - }, - "422": { - "description": "Error provided by App Server with message to show customer" + "$ref": "#/components/responses/PaymentMethodListResponse" } }, "security": [ @@ -21524,38 +21906,74 @@ }, "get": { "tags": [ - "Gateway" + "Payment Method", + "Endpoints supporting Criteria " ], - "summary": "Call the context gateway", - "description": "Call the context gateway, which is used to manipulate certain aspects of context (e.g. selected payment methods, register customer, etc.). Please prefer using the POST version of this endpoint.", - "operationId": "contextGatewayGet", + "summary": "Loads all available payment methods", + "operationId": "readPaymentMethodGet", "parameters": [ { - "name": "appName", - "in": "query", - "required": true, + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, "schema": { - "type": "string" + "type": "string", + "pattern": "^[0-9a-f]{32}$" } }, { - "name": "data", - "in": "query", - "schema": { - "type": "object" - }, - "style": "deepObject" + "$ref": "#/components/parameters/criteriaPage" + }, + { + "$ref": "#/components/parameters/criteriaLimit" + }, + { + "$ref": "#/components/parameters/criteriaTerm" + }, + { + "$ref": "#/components/parameters/criteriaFilter" + }, + { + "$ref": "#/components/parameters/criteriaIds" + }, + { + "$ref": "#/components/parameters/criteriaQuery" + }, + { + "$ref": "#/components/parameters/criteriaAssociations" + }, + { + "$ref": "#/components/parameters/criteriaPostFilter" + }, + { + "$ref": "#/components/parameters/criteriaSort" + }, + { + "$ref": "#/components/parameters/criteriaAggregations" + }, + { + "$ref": "#/components/parameters/criteriaFields" + }, + { + "$ref": "#/components/parameters/criteriaGrouping" + }, + { + "$ref": "#/components/parameters/criteriaTotalCountMode" + }, + { + "$ref": "#/components/parameters/criteriaIncludes" + }, + { + "$ref": "#/components/parameters/criteriaExcludes" + }, + { + "$ref": "#/components/parameters/CompressedCriteria" } ], "responses": { "200": { - "$ref": "#/components/responses/ContextTokenResponse" - }, - "400": { - "description": "App server communication error" - }, - "422": { - "description": "Error provided by App Server with message to show customer" + "$ref": "#/components/responses/PaymentMethodListResponse" } }, "security": [ @@ -21565,15 +21983,15 @@ ] } }, - "/currency": { + "/seo-url": { "post": { "tags": [ - "System & Context", + "Sitemap & Routes", "Endpoints supporting Criteria " ], - "summary": "Fetch currencies", - "description": "Perform a filtered search for currencies.", - "operationId": "readCurrency", + "summary": "Fetch SEO routes", + "description": "Perform a filtered search for seo urls.", + "operationId": "readSeoUrl", "parameters": [ { "name": "sw-language-id", @@ -21607,7 +22025,7 @@ "schema": { "allOf": [ { - "$ref": "#/components/schemas/NoneFieldsCriteria" + "$ref": "#/components/schemas/Criteria" } ] } @@ -21616,7 +22034,10 @@ }, "responses": { "200": { - "$ref": "#/components/responses/CurrencyListResponse" + "$ref": "#/components/responses/SeoUrlListResponse" + }, + "404": { + "$ref": "#/components/responses/404" } }, "security": [ @@ -21627,12 +22048,12 @@ }, "get": { "tags": [ - "System & Context", + "Sitemap & Routes", "Endpoints supporting Criteria " ], - "summary": "Fetch currencies", - "description": "Perform a filtered search for currencies.", - "operationId": "readCurrencyGet", + "summary": "Fetch SEO routes", + "description": "Perform a filtered search for seo urls.", + "operationId": "readSeoUrlGet", "parameters": [ { "name": "sw-language-id", @@ -21674,6 +22095,9 @@ { "$ref": "#/components/parameters/criteriaAggregations" }, + { + "$ref": "#/components/parameters/criteriaFields" + }, { "$ref": "#/components/parameters/criteriaGrouping" }, @@ -21687,12 +22111,15 @@ "$ref": "#/components/parameters/criteriaExcludes" }, { - "$ref": "#/components/parameters/CompressedNoneFieldsCriteria" + "$ref": "#/components/parameters/CompressedCriteria" } ], "responses": { "200": { - "$ref": "#/components/responses/CurrencyListResponse" + "$ref": "#/components/responses/SeoUrlListResponse" + }, + "404": { + "$ref": "#/components/responses/404" } }, "security": [ @@ -21702,16 +22129,42 @@ ] } }, - "/shipping-method": { + "/product-listing/{categoryId}": { "post": { "tags": [ - "Payment & Shipping", - "Endpoints supporting Criteria " + "Product" ], - "summary": "Fetch shipping methods", - "description": "Perform a filtered search for shipping methods.\n\n**Available Associations:**\n- `prices` - Shipping method price configurations (based on current cart and context)\n- `deliveryTime` - Delivery time information (min/max days, unit)\n- `media` - Media/images associated with the shipping method (loaded by default)\n- `availabilityRule` - Availability rule determining when this method is available\n- `tax` - Tax configuration for the shipping method\n\n**Example with associations:**\n```json\n{\n \"associations\": {\n \"prices\": {},\n \"deliveryTime\": {}\n }\n}\n```\n\nNote: The `prices` association is essential for accessing shipping cost configurations.", - "operationId": "readShippingMethod", + "summary": "Fetch a product listing by category", + "description": "Fetches a product listing for a specific category. It also provides filters, sortings and property aggregations, analogous to the /search endpoint.\n\n**Available Associations:**\n- `downloads` - Downloadable files associated with the product (e.g., manuals, digital content)\n- `children` - Product variants that inherit from this parent product\n- `deliveryTime` - Estimated delivery time for the product\n- `tax` - Tax configuration (rate and calculation rules)\n- `manufacturer` - Product manufacturer or brand information\n- `unit` - Product unit of measure (e.g., piece, liter, kg)\n- `cover` - Main product image displayed in listings and detail pages\n- `cmsPage` - Custom CMS page layout for the product detail page\n- `canonicalProduct` - Canonical product reference for variant consolidation and SEO purposes\n- `media` - Product images and media gallery\n- `crossSellings` - Cross-selling configurations (related products, accessories, similar items)\n- `configuratorSettings` - Variant configurator settings defining available options for product variants\n- `productReviews` - Customer reviews and ratings for the product\n- `mainCategories` - Primary category assignments per sales channel for SEO and navigation\n- `seoUrls` - SEO-friendly URLs for the product across different sales channels\n- `options` - Product variant options (e.g., size, color) that define different variants\n- `properties` - Product properties and characteristics for filtering\n- `categories` - Categories this product is assigned to\n- `streams` - Dynamic product streams this product belongs to based on defined filters\n- `categoriesRo` - Read-only category tree including all parent categories for optimized queries\n- `tags` - Tags for organizing and filtering products\n- `seoCategory` - Main category used for SEO URL generation in the current sales channel", + "operationId": "readProductListing", "parameters": [ + { + "name": "categoryId", + "in": "path", + "description": "Identifier of a category.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "p", + "in": "query", + "description": "The page number to fetch.", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "sw-include-seo-urls", + "in": "header", + "description": "Determines if the response must contain a SeoUrl entity for a product entity", + "required": false, + "schema": { + "type": "boolean" + } + }, { "name": "sw-language-id", "in": "header", @@ -21733,26 +22186,20 @@ "0", "1" ], - "default": "1" - } - }, - { - "name": "onlyAvailable", - "in": "query", - "description": "List only available shipping methods. This filters shipping methods methods which can not be used in the actual context because of their availability rule.", - "schema": { - "type": "boolean" + "default": "1" } } ], "requestBody": { - "required": false, "content": { "application/json": { "schema": { "allOf": [ { - "$ref": "#/components/schemas/Criteria" + "$ref": "#/components/schemas/ProductListingCriteria" + }, + { + "$ref": "#/components/schemas/ProductListingFlags" } ] } @@ -21761,37 +22208,11 @@ }, "responses": { "200": { - "description": "", + "description": "Returns a product listing containing all products and additional fields to display a listing.", "content": { "application/json": { "schema": { - "allOf": [ - { - "required": [ - "elements" - ], - "properties": { - "total": { - "description": "Total amount", - "type": "integer" - }, - "aggregations": { - "description": "aggregation result", - "type": "object" - }, - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ShippingMethod" - } - } - }, - "type": "object" - }, - { - "$ref": "#/components/schemas/EntitySearchResult" - } - ] + "$ref": "#/components/schemas/ProductListingResult" } } } @@ -21805,13 +22226,30 @@ }, "get": { "tags": [ - "Payment & Shipping", - "Endpoints supporting Criteria " + "Product" ], - "summary": "Fetch shipping methods", - "description": "Perform a filtered search for shipping methods.\n\n**Available Associations:**\n- `prices` - Shipping method price configurations (graduated prices, quantity-based pricing)\n- `deliveryTime` - Delivery time information (min/max days, unit)\n- `media` - Media/images associated with the shipping method (loaded by default)\n- `availabilityRule` - Availability rule determining when this method is available\n- `tax` - Tax configuration for the shipping method\n\nNote: The `prices` association is essential for accessing shipping cost configurations.", - "operationId": "readShippingMethodGet", + "summary": "Fetch a product listing by category", + "description": "Fetches a product listing for a specific category. It also provides filters, sortings and property aggregations, analogous to the /search endpoint.\n\n**Available Associations:**\n- `downloads` - Downloadable files associated with the product (e.g., manuals, digital content)\n- `children` - Product variants that inherit from this parent product\n- `deliveryTime` - Estimated delivery time for the product\n- `tax` - Tax configuration (rate and calculation rules)\n- `manufacturer` - Product manufacturer or brand information\n- `unit` - Product unit of measure (e.g., piece, liter, kg)\n- `cover` - Main product image displayed in listings and detail pages\n- `cmsPage` - Custom CMS page layout for the product detail page\n- `canonicalProduct` - Canonical product reference for variant consolidation and SEO purposes\n- `media` - Product images and media gallery\n- `crossSellings` - Cross-selling configurations (related products, accessories, similar items)\n- `configuratorSettings` - Variant configurator settings defining available options for product variants\n- `productReviews` - Customer reviews and ratings for the product\n- `mainCategories` - Primary category assignments per sales channel for SEO and navigation\n- `seoUrls` - SEO-friendly URLs for the product across different sales channels\n- `options` - Product variant options (e.g., size, color) that define different variants\n- `properties` - Product properties and characteristics for filtering\n- `categories` - Categories this product is assigned to\n- `streams` - Dynamic product streams this product belongs to based on defined filters\n- `categoriesRo` - Read-only category tree including all parent categories for optimized queries\n- `tags` - Tags for organizing and filtering products\n- `seoCategory` - Main category used for SEO URL generation in the current sales channel", + "operationId": "readProductListingGet", "parameters": [ + { + "name": "categoryId", + "in": "path", + "description": "Identifier of a category.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "sw-include-seo-urls", + "in": "header", + "description": "Determines if the response must contain a SeoUrl entity for a product entity", + "required": false, + "schema": { + "type": "boolean" + } + }, { "name": "sw-language-id", "in": "header", @@ -21826,7 +22264,13 @@ "$ref": "#/components/parameters/criteriaPage" }, { - "$ref": "#/components/parameters/criteriaLimit" + "name": "limit", + "in": "query", + "description": "Number of items per result page. If not set, the limit will be set according to the default products per page, defined in the system settings.", + "schema": { + "type": "integer", + "minimum": 0 + } }, { "$ref": "#/components/parameters/criteriaTerm" @@ -21856,304 +22300,116 @@ "$ref": "#/components/parameters/criteriaFields" }, { - "$ref": "#/components/parameters/criteriaGrouping" - }, - { - "$ref": "#/components/parameters/criteriaTotalCountMode" - }, - { - "$ref": "#/components/parameters/criteriaIncludes" - }, - { - "$ref": "#/components/parameters/criteriaExcludes" - }, - { - "$ref": "#/components/parameters/CompressedCriteria" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/ShippingMethodListResponse" - } - }, - "security": [ - { - "ApiKey": [] - } - ] - } - }, - "/account/newsletter-recipient": { - "post": { - "tags": [ - "Profile", - "Newsletter", - "Endpoints supporting Criteria" - ], - "summary": "Fetch newsletter recipients", - "description": "Perform a filtered search for newsletter recipients.", - "operationId": "readNewsletterRecipient", - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Criteria" - } - ] - } - } - } - }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountNewsletterRecipient" - } - } - } - } - }, - "security": [ - { - "ApiKey": [], - "ContextToken": [] - } - ], - "parameters": [ - { - "name": "sw-include-search-info", - "in": "header", - "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" - } - } - ] - } - }, - "/account/change-profile": { - "post": { - "tags": [ - "Profile" - ], - "summary": "Change the customer's information", - "description": "Make changes to a customer's account, like changing their name, salutation or title.", - "operationId": "changeProfile", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "firstName", - "lastName" - ], - "properties": { - "salutationId": { - "description": "Id of the salutation for the customer account. Fetch options using `salutation` endpoint.", - "type": "string" - }, - "title": { - "description": "(Academic) title of the customer", - "type": "string" - }, - "firstName": { - "description": "Customer first name. Value will be reused for shipping and billing address if not provided explicitly.", - "type": "string" - }, - "lastName": { - "description": "Customer last name. Value will be reused for shipping and billing address if not provided explicitly.", - "type": "string" - }, - "birthdayDay": { - "description": "Birthday day", - "type": "integer" - }, - "birthdayMonth": { - "description": "Birthday month", - "type": "integer" - }, - "birthdayYear": { - "description": "Birthday year", - "type": "integer" - } - }, - "oneOf": [ - { - "properties": { - "accountType": { - "description": "Type of the customer account. Default value is 'private'.", - "type": "string", - "enum": [ - "private" - ], - "default": "private" - }, - "company": { - "type": "null" - }, - "vatIds": { - "type": "null" - } - } - }, - { - "required": [ - "accountType", - "company", - "vatIds" - ], - "properties": { - "accountType": { - "description": "Type of the customer account. Can be `private` or `business`.", - "type": "string", - "enum": [ - "business" - ] - }, - "company": { - "description": "Company of the customer. Only required when `accountType` is `business`.", - "type": "string" - }, - "vatIds": { - "description": "VAT IDs of the customer's company. Only valid when `accountType` is `business`.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1 - } - } - } - ] - } + "$ref": "#/components/parameters/criteriaGrouping" + }, + { + "$ref": "#/components/parameters/criteriaTotalCountMode" + }, + { + "$ref": "#/components/parameters/criteriaIncludes" + }, + { + "$ref": "#/components/parameters/criteriaExcludes" + }, + { + "name": "order", + "in": "query", + "description": "Specifies the sorting of the products by `availableSortings`. If not set, the default sorting will be set according to the shop settings. The available sorting options are sent within the response under the `availableSortings` key. In order to sort by a field, consider using the `sort` parameter from the listing criteria. Do not use both parameters together, as it might lead to unexpected results.", + "schema": { + "type": "string" } - } - }, - "responses": { - "200": { - "description": "Returns a success response indicating a successful update", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SuccessResponse" - } - } + }, + { + "name": "p", + "in": "query", + "description": "Search result page", + "schema": { + "type": "integer", + "default": 1 } - } - }, - "security": [ + }, { - "ApiKey": [], - "ContextToken": [] - } - ] - } - }, - "/account/change-email": { - "post": { - "tags": [ - "Profile" - ], - "summary": "Change the customer's email address", - "description": "Changes a customer's email address to a new email address, using their current password as a validation.", - "operationId": "changeEmail", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "required": [ - "email", - "emailConfirmation", - "password" - ], - "properties": { - "email": { - "description": "New email address. Has to be unique amongst all customers", - "type": "string" - }, - "emailConfirmation": { - "description": "Confirmation of the new email address.", - "type": "string" - }, - "password": { - "description": "Customer's current password", - "type": "string" - } - }, - "type": "object" - } + "name": "manufacturer", + "in": "query", + "description": "Filter by manufacturers. List of manufacturer identifiers separated by a `|`.", + "schema": { + "type": "string" } - } - }, - "responses": { - "200": { - "description": "Returns a success response indicating a successful update", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SuccessResponse" - } - } + }, + { + "name": "min-price", + "in": "query", + "description": "Filters by a minimum product price. Has to be lower than the `max-price` filter.", + "schema": { + "type": "integer", + "minimum": 0, + "default": 0 } - } - }, - "security": [ + }, { - "ApiKey": [], - "ContextToken": [] - } - ] - } - }, - "/account/change-language": { - "post": { - "tags": [ - "Profile" - ], - "summary": "Change the customer's language.", - "description": "Changes the language of the logged in customer", - "operationId": "changeLanguage", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "required": [ - "languageId" - ], - "properties": { - "language": { - "description": "New languageId", - "type": "string" - } + "name": "max-price", + "in": "query", + "description": "Filters by a maximum product price. Has to be higher than the `min-price` filter.", + "schema": { + "type": "integer", + "minimum": 0, + "default": 0 + } + }, + { + "name": "rating", + "in": "query", + "description": "Filter products with a minimum average rating.", + "schema": { + "type": "integer" + } + }, + { + "name": "shipping-free", + "in": "query", + "description": "Filters products that are marked as shipping-free.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "properties", + "in": "query", + "description": "Filters products by their properties. List of property identifiers separated by a `|`.", + "schema": { + "type": "string" + } + }, + { + "name": "reduce-aggregations", + "in": "query", + "description": "By sending the parameter `reduce-aggregations` , the post-filters that were applied by the customer, are also applied to the aggregations. This has the consequence that only values are returned in the aggregations that would lead to further filter results. This parameter is a flag, the value has no effect.", + "schema": { + "oneOf": [ + { + "type": "string" }, - "type": "object" - } + { + "type": "null" + } + ] } + }, + { + "$ref": "#/components/parameters/noAggregations" + }, + { + "$ref": "#/components/parameters/onlyAggregations" } - }, + ], "responses": { "200": { - "description": "Returns a success response indicating a successful update", + "description": "Returns a product listing containing all products and additional fields to display a listing.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SuccessResponse" + "$ref": "#/components/schemas/ProductListingResult" } } } @@ -22161,201 +22417,272 @@ }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] } }, - "/account/change-password": { + "/country-state/{countryId}": { "post": { "tags": [ - "Profile" + "System & Context", + "Endpoints supporting Criteria " ], - "summary": "Change the customer's password", - "description": "Changes a customer's password using their current password as a validation.", - "operationId": "changePassword", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "required": [ - "password", - "newPassword", - "newPasswordConfirm" - ], - "properties": { - "password": { - "description": "Current password of the customer", - "type": "string" - }, - "newPassword": { - "description": "New Password for the customer", - "type": "string" - }, - "newPasswordConfirm": { - "description": "Confirmation of the new password", - "type": "string" + "summary": "Fetch the states of a country", + "description": "Perform a filtered search the states for a country", + "operationId": "readCountryState", + "parameters": [ + { + "name": "countryId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "sw-include-search-info", + "in": "header", + "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "0", + "1" + ], + "default": "1" + } + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Criteria" } - }, - "type": "object" + ] } } } }, "responses": { "200": { - "description": "Returns a success response indicating a successful update.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SuccessResponse" - } - } - } + "$ref": "#/components/responses/CountryStateListResponse" } }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] - } - }, - "/account/convert-guest": { - "post": { + }, + "get": { "tags": [ - "Profile" + "System & Context", + "Endpoints supporting Criteria " ], - "summary": "Convert a guest customer to a registered customer", - "description": "Takes a password to convert a guest customer to a registered customer. The customer can then log in with the provided password in the future.", - "operationId": "convertGuest", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "required": [ - "password" - ], - "properties": { - "password": { - "description": "New Password for the customer", - "type": "string" - } - }, - "type": "object" - } + "summary": "Fetch the states of a country", + "description": "Perform a filtered search the states for a country", + "operationId": "readCountryStateGet", + "parameters": [ + { + "name": "countryId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" } + }, + { + "$ref": "#/components/parameters/criteriaPage" + }, + { + "$ref": "#/components/parameters/criteriaLimit" + }, + { + "$ref": "#/components/parameters/criteriaTerm" + }, + { + "$ref": "#/components/parameters/criteriaFilter" + }, + { + "$ref": "#/components/parameters/criteriaIds" + }, + { + "$ref": "#/components/parameters/criteriaQuery" + }, + { + "$ref": "#/components/parameters/criteriaAssociations" + }, + { + "$ref": "#/components/parameters/criteriaPostFilter" + }, + { + "$ref": "#/components/parameters/criteriaSort" + }, + { + "$ref": "#/components/parameters/criteriaAggregations" + }, + { + "$ref": "#/components/parameters/criteriaFields" + }, + { + "$ref": "#/components/parameters/criteriaGrouping" + }, + { + "$ref": "#/components/parameters/criteriaTotalCountMode" + }, + { + "$ref": "#/components/parameters/criteriaIncludes" + }, + { + "$ref": "#/components/parameters/criteriaExcludes" + }, + { + "$ref": "#/components/parameters/CompressedCriteria" } - }, + ], "responses": { "200": { - "description": "Returns a success response indicating a successful update.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SuccessResponse" - } - } - } + "$ref": "#/components/responses/CountryStateListResponse" } }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] } }, - "/account/customer-recovery-is-expired": { + "/navigation/{activeId}/{rootId}": { "post": { "tags": [ - "Profile" + "Category", + "Endpoints supporting Criteria " ], - "summary": "Checks if the customer recovery entry for a given hash is expired.", - "description": "This can be used to validate a provided hash has a valid and not expired customer recovery hash.", - "operationId": "getCustomerRecoveryIsExpired", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "required": [ - "hash" - ], - "properties": { - "hash": { - "description": "Parameter from the link in the confirmation mail sent in Step 1", - "type": "string" - } + "summary": "Fetch a navigation menu", + "description": "This endpoint returns categories that can be used as a page navigation. You can either return them as a tree or as a flat list. You can also control the depth of the tree.\n\n Instead of passing uuids, you can also use one of the following aliases for the activeId and rootId parameters to get the respective navigations of your sales channel.\n\n * main-navigation\n * service-navigation\n * footer-navigation", + "operationId": "readNavigation", + "parameters": [ + { + "name": "sw-include-seo-urls", + "in": "header", + "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "sw-include-search-info", + "in": "header", + "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "0", + "1" + ], + "default": "1" + } + }, + { + "name": "activeId", + "in": "path", + "description": "Identifier of the active category in the navigation tree (if not used, just set to the same as rootId).", + "required": true, + "schema": { + "oneOf": [ + { + "type": "string", + "pattern": "^[0-9a-f]{32}$" }, - "type": "object" - } + { + "$ref": "#/components/schemas/NavigationType" + } + ] } - } - }, - "responses": { - "200": { - "description": "Returns a CustomerRecoveryIsExpiredResponse that indicates if the hash is expired or not.", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "isExpired": { - "type": "boolean" - } - }, - "required": [ - "isExpired" - ] - } - }, - "apiAlias": { - "enum": [ - "array_struct" - ], - "type": "string" - } - } + }, + { + "name": "rootId", + "in": "path", + "description": "Identifier of the root category for your desired navigation tree. You can use it to fetch sub-trees of your navigation tree.", + "required": true, + "schema": { + "oneOf": [ + { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + { + "$ref": "#/components/schemas/NavigationType" } - } + ] } } - }, - "security": [ - { - "ApiKey": [] - } - ] - } - }, - "/account/customer": { - "post": { - "tags": [ - "Profile", - "Endpoints supporting Criteria " ], - "summary": "Get information about current customer", - "description": "Returns information about the current customer.\n\n**Available Associations:**\n- `group` - Customer group determining pricing and permissions\n- `language` - Preferred language for customer communication\n- `lastPaymentMethod` - Last used payment method by the customer\n- `defaultBillingAddress` - Default billing address for the customer\n- `activeBillingAddress` - Currently active billing address in the session\n- `defaultShippingAddress` - Default shipping address for the customer\n- `activeShippingAddress` - Currently active shipping address in the session\n- `salutation` - Customer salutation (e.g., Mr., Mrs., Ms.)\n- `addresses` - All addresses saved for the customer\n- `tags` - Tags assigned to the customer for organization and segmentation", - "operationId": "readCustomer", "requestBody": { - "required": false, + "required": true, "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/NoneFieldsCriteria" + }, + { + "properties": { + "depth": { + "description": "Determines the depth of fetched navigation levels.", + "type": "integer", + "format": "int32" + }, + "buildTree": { + "description": "Return the categories as a tree or as a flat list.", + "type": "array", + "items": { + "type": "object" + } + } + }, + "type": "object" } ] } @@ -22364,11 +22691,11 @@ }, "responses": { "200": { - "description": "Returns the logged in customer, also for guest sessions. Check for the value of `guest` field to see whether the customer is a guest.", + "description": "All available navigations", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Customer" + "$ref": "#/components/schemas/NavigationRouteResponse" } } } @@ -22376,122 +22703,149 @@ }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } + ] + }, + "get": { + "tags": [ + "Category", + "Endpoints supporting Criteria " ], + "summary": "Fetch a navigation menu", + "description": "This endpoint returns categories that can be used as a page navigation. You can either return them as a tree or as a flat list. You can also control the depth of the tree.\n\n Instead of passing uuids, you can also use one of the following aliases for the activeId and rootId parameters to get the respective navigations of your sales channel.\n\n * main-navigation\n * service-navigation\n * footer-navigation", + "operationId": "readNavigationGet", "parameters": [ { - "name": "sw-include-search-info", + "name": "sw-include-seo-urls", "in": "header", - "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", + "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", "required": false, "schema": { - "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" + "type": "boolean" } - } - ] - }, - "delete": { - "tags": [ - "Profile" - ], - "summary": "Delete the customer's profile", - "description": "Deletes a customer profile along with their addresses, wishlists and associated data. Created orders and their payment/shipping information (addresses) and reviews are not deleted.", - "operationId": "deleteCustomer", - "responses": { - "204": { - "description": "Returns a no content response indicating a successful removal of the customer profile" - } - }, - "security": [ + }, { - "ApiKey": [], - "ContextToken": [] - } - ] - } - }, - "/account/address/{addressId}": { - "delete": { - "tags": [ - "Address" - ], - "summary": "Delete an address of a customer", - "description": "Delete an address of customer.\n\n Only addresses which are not set as default addresses for shipping or billing can be deleted. You can check the current default addresses of your customer using the profile information endpoint and change them using the default address endpoint.\n\n **A customer must have at least one address (which can be used for shipping and billing).**\n\n An automatic fallback is not applied.", - "operationId": "deleteCustomerAddress", - "parameters": [ + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, { - "name": "addressId", + "name": "activeId", "in": "path", - "description": "ID of the address to be deleted.", + "description": "Identifier of the active category in the navigation tree (if not used, just set to the same as rootId).", "required": true, "schema": { - "type": "string" + "oneOf": [ + { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + { + "$ref": "#/components/schemas/NavigationType" + } + ] } - } - ], - "responses": { - "204": { - "description": "No Content response, when the address has been deleted" }, - "400": { - "description": "Response containing a list of errors, most likely due to the address being in use" - } - }, - "security": [ - { - "ApiKey": [], - "ContextToken": [] - } - ] - }, - "patch": { - "tags": [ - "Address" - ], - "summary": "Modify an address of a customer", - "description": "Modifies an existing address of a customer.", - "operationId": "updateCustomerAddress", - "parameters": [ { - "name": "addressId", + "name": "rootId", "in": "path", - "description": "Address ID", + "description": "Identifier of the root category for your desired navigation tree. You can use it to fetch sub-trees of your navigation tree.", "required": true, "schema": { - "type": "string" + "oneOf": [ + { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + { + "$ref": "#/components/schemas/NavigationType" + } + ] } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomerAddressBody" - } + }, + { + "name": "depth", + "in": "query", + "description": "Determines the depth of fetched navigation levels.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" } + }, + { + "name": "buildTree", + "in": "query", + "description": "Return the categories as a tree or as a flat list.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "object" + } + }, + "style": "deepObject", + "explode": true + }, + { + "$ref": "#/components/parameters/criteriaPage" + }, + { + "$ref": "#/components/parameters/criteriaLimit" + }, + { + "$ref": "#/components/parameters/criteriaTerm" + }, + { + "$ref": "#/components/parameters/criteriaFilter" + }, + { + "$ref": "#/components/parameters/criteriaIds" + }, + { + "$ref": "#/components/parameters/criteriaQuery" + }, + { + "$ref": "#/components/parameters/criteriaAssociations" + }, + { + "$ref": "#/components/parameters/criteriaPostFilter" + }, + { + "$ref": "#/components/parameters/criteriaSort" + }, + { + "$ref": "#/components/parameters/criteriaAggregations" + }, + { + "$ref": "#/components/parameters/criteriaGrouping" + }, + { + "$ref": "#/components/parameters/criteriaTotalCountMode" + }, + { + "$ref": "#/components/parameters/criteriaIncludes" + }, + { + "$ref": "#/components/parameters/criteriaExcludes" + }, + { + "$ref": "#/components/parameters/CompressedNoneFieldsCriteria" } - }, + ], "responses": { "200": { - "description": "", + "description": "All available navigations", "content": { "application/json": { "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/CustomerAddress" - }, - { - "$ref": "#/components/schemas/CustomerAddressRead" - } - ] + "$ref": "#/components/schemas/NavigationRouteResponse" } } } @@ -22499,21 +22853,21 @@ }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] } }, - "/account/list-address": { + "/account/newsletter-recipient": { "post": { "tags": [ - "Address", - "Endpoints supporting Criteria " + "Profile", + "Newsletter", + "Endpoints supporting Criteria" ], - "summary": "Fetch addresses of a customer", - "description": "Lists all addresses of the current customer and allows filtering them based on a criteria.", - "operationId": "listAddress", + "summary": "Fetch newsletter recipients", + "description": "Perform a filtered search for newsletter recipients.", + "operationId": "readNewsletterRecipient", "requestBody": { "required": false, "content": { @@ -22534,25 +22888,7 @@ "content": { "application/json": { "schema": { - "allOf": [ - { - "type": "object", - "required": [ - "elements" - ], - "properties": { - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomerAddress" - } - } - } - }, - { - "$ref": "#/components/schemas/EntitySearchResult" - } - ] + "$ref": "#/components/schemas/AccountNewsletterRecipient" } } } @@ -22582,245 +22918,40 @@ ] } }, - "/account/login": { - "post": { - "tags": [ - "Login & Registration" - ], - "summary": "Log in a customer", - "description": "Logs in customers given their credentials.", - "operationId": "loginCustomer", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "required": [ - "username", - "password" - ], - "properties": { - "username": { - "description": "Email", - "type": "string" - }, - "password": { - "description": "Password", - "type": "string" - } - }, - "type": "object" - } - } - } - }, - "responses": { - "200": { - "$ref": "#/components/responses/ContextTokenResponse" - }, - "401": { - "description": "If credentials are incorrect an error is returned", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/failure" - } - } - } - } - }, - "security": [ - { - "ApiKey": [] - } - ] - } - }, - "/account/login/imitate-customer": { - "post": { - "tags": [ - "Login & Registration" - ], - "summary": "Imitate the log in as a customer", - "description": "Imitate the log in as a customer given a generated token.", - "operationId": "imitateCustomerLogin", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "required": [ - "token", - "customerId", - "userId" - ], - "properties": { - "token": { - "description": "Generated customer impersonation token", - "type": "string" - }, - "customerId": { - "description": "ID of the customer", - "type": "string" - }, - "userId": { - "description": "ID of the user who generated the token", - "type": "string" - } - }, - "type": "object" - } - } - } - }, - "responses": { - "200": { - "$ref": "#/components/responses/ContextTokenResponse" - }, - "400": { - "description": "If the token is incorrect an error is returned", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/failure" - } - } - } - } - }, - "security": [ - { - "ApiKey": [] - } - ] - } - }, - "/account/logout": { - "post": { - "tags": [ - "Login & Registration" - ], - "summary": "Log out a customer", - "description": "Logs out a customer.", - "operationId": "logoutCustomer", - "responses": { - "200": { - "$ref": "#/components/responses/ContextTokenResponse" - }, - "403": { - "$ref": "#/components/responses/403" - } - }, - "security": [ - { - "ApiKey": [], - "ContextToken": [] - } - ] - } - }, - "/account/register-confirm": { + "/account/change-profile": { "post": { "tags": [ - "Login & Registration" + "Profile" ], - "summary": "Confirm a customer registration", - "description": "Confirms a customer registration when double opt-in is activated.\n\nLearn more about double opt-in registration in our guide \"Register a customer\".", - "operationId": "registerConfirm", + "summary": "Change the customer's information", + "description": "Make changes to a customer's account, like changing their name, salutation or title.", + "operationId": "changeProfile", "requestBody": { "required": true, "content": { "application/json": { "schema": { + "type": "object", "required": [ - "hash", - "em" + "firstName", + "lastName" ], "properties": { - "hash": { - "description": "Hash from the email received", - "type": "string" - }, - "em": { - "description": "Email hash from the email received", - "type": "string" - } - }, - "type": "object" - } - } - } - }, - "responses": { - "200": { - "description": "Returns the logged in customer. The customer is automatically logged in with the `sw-context-token` header provided, which can be reused for subsequent requests." - }, - "404": { - "description": "No hash provided" - }, - "412": { - "description": "The customer has already been confirmed" - } - }, - "security": [ - { - "ApiKey": [] - } - ] - } - }, - "/account/register": { - "post": { - "tags": [ - "Login & Registration" - ], - "summary": "Register a customer", - "description": "Registers a customer. Used both for normal customers and guest customers.See the Guide \"Register a customer\" for more information on customer registration.", - "operationId": "register", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "email": { - "description": "Email of the customer. Has to be unique, unless `guest` is `true`", - "type": "string" - }, - "password": { - "description": "Password for the customer. Required, unless `guest` is `true`", - "type": "string" - }, "salutationId": { "description": "Id of the salutation for the customer account. Fetch options using `salutation` endpoint.", "type": "string" }, - "firstName": { - "description": "Customer first name. Value will be reused for shipping and billing address if not provided explicitly.", - "type": "string" - }, - "lastName": { - "description": "Customer last name. Value will be reused for shipping and billing address if not provided explicitly.", - "type": "string" - }, - "acceptedDataProtection": { - "description": "Flag indicating accepted data protection", - "type": "boolean" - }, - "storefrontUrl": { - "description": "URL of the storefront for that registration. Used in confirmation emails. Has to be one of the configured domains of the sales channel.", + "title": { + "description": "(Academic) title of the customer", "type": "string" }, - "billingAddress": { - "$ref": "#/components/schemas/CustomerAddress" - }, - "shippingAddress": { - "$ref": "#/components/schemas/CustomerAddress" + "firstName": { + "description": "Customer first name. Value will be reused for shipping and billing address if not provided explicitly.", + "type": "string" }, - "guest": { - "description": "If set, will create a guest customer. Guest customers can re-use an email address and don't need a password.", - "type": "boolean", - "default": false + "lastName": { + "description": "Customer last name. Value will be reused for shipping and billing address if not provided explicitly.", + "type": "string" }, "birthdayDay": { "description": "Birthday day", @@ -22833,29 +22964,8 @@ "birthdayYear": { "description": "Birthday year", "type": "integer" - }, - "title": { - "description": "(Academic) title of the customer", - "type": "string" - }, - "affiliateCode": { - "description": "Field can be used to store an affiliate tracking code", - "type": "string" - }, - "campaignCode": { - "description": "Field can be used to store a campaign tracking code", - "type": "string" } }, - "required": [ - "email", - "password", - "firstName", - "lastName", - "acceptedDataProtection", - "storefrontUrl", - "billingAddress" - ], "oneOf": [ { "properties": { @@ -22903,19 +23013,18 @@ } } } - ], - "type": "object" + ] } } } }, "responses": { "200": { - "description": "Success", + "description": "Returns a success response indicating a successful update", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Customer" + "$ref": "#/components/schemas/SuccessResponse" } } } @@ -22923,40 +23032,41 @@ }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] } }, - "/account/recovery-password-confirm": { + "/account/change-email": { "post": { "tags": [ "Profile" ], - "summary": "Reset a password with recovery credentials", - "description": "This operation is Step 2 of the password reset flow. It is required to conduct Step 1 \"Send a password recovery mail\" in order to obtain the required credentials for this step.Resets a customer's password using credentials from a password recovery mail as a validation.", - "operationId": "recoveryPassword", + "summary": "Change the customer's email address", + "description": "Changes a customer's email address to a new email address, using their current password as a validation.", + "operationId": "changeEmail", "requestBody": { "required": true, "content": { "application/json": { "schema": { "required": [ - "hash", - "newPassword", - "newPasswordConfirm" + "email", + "emailConfirmation", + "password" ], "properties": { - "hash": { - "description": "Parameter from the link in the confirmation mail sent in Step 1", + "email": { + "description": "New email address. Has to be unique amongst all customers", "type": "string" }, - "newPassword": { - "description": "New password for the customer", + "emailConfirmation": { + "description": "Confirmation of the new email address.", "type": "string" }, - "newPasswordConfirm": { - "description": "Confirmation of the new password", + "password": { + "description": "Customer's current password", "type": "string" } }, @@ -22967,7 +23077,7 @@ }, "responses": { "200": { - "description": "Returns a success response indicating a successful update.", + "description": "Returns a success response indicating a successful update", "content": { "application/json": { "schema": { @@ -22979,35 +23089,31 @@ }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] } }, - "/account/recovery-password": { + "/account/change-language": { "post": { "tags": [ "Profile" ], - "summary": "Send a password recovery mail", - "description": "This operation is Step 1 of the password reset flow. Make sure to implement Step 2 \"Reset password with recovery credentials\" in order to allow for the complete flow in your application. Sends a recovery mail containing a link with credentials that allows a customer to reset their password.", - "operationId": "sendRecoveryMail", + "summary": "Change the customer's language.", + "description": "Changes the language of the logged in customer", + "operationId": "changeLanguage", "requestBody": { "required": true, "content": { "application/json": { "schema": { "required": [ - "email", - "storefrontUrl" + "languageId" ], "properties": { - "email": { - "description": "E-Mail address to identify the customer", - "type": "string" - }, - "storefrontUrl": { - "description": "URL of the storefront to use for the generated reset link. It has to be a domain that is configured in the sales channel domain settings.", + "language": { + "description": "New languageId", "type": "string" } }, @@ -23018,7 +23124,7 @@ }, "responses": { "200": { - "description": "If email corresponds to an existing customer, a mail will be sent out to that customer containing a link assembled using the following schema:\n\nReturns a success indicating a successful initialisation of the reset flow.", + "description": "Returns a success response indicating a successful update", "content": { "application/json": { "schema": { @@ -23028,113 +23134,6 @@ } } }, - "security": [ - { - "ApiKey": [] - } - ] - } - }, - "/account/address/default-shipping/{addressId}": { - "patch": { - "tags": [ - "Address" - ], - "summary": "Change a customer's default shipping address", - "description": "Updates the default (preselected) shipping addresses of a customer.", - "operationId": "defaultShippingAddress", - "parameters": [ - { - "name": "addressId", - "in": "path", - "description": "Address ID", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "" - } - }, - "security": [ - { - "ApiKey": [], - "ContextToken": [] - } - ] - } - }, - "/account/address/default-billing/{addressId}": { - "patch": { - "tags": [ - "Address" - ], - "summary": "Change a customer's default billing address", - "description": "Updates the default (preselected) billing addresses of a customer.", - "operationId": "defaultBillingAddress", - "parameters": [ - { - "name": "addressId", - "in": "path", - "description": "Address ID", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "" - } - }, - "security": [ - { - "ApiKey": [], - "ContextToken": [] - } - ] - } - }, - "/account/address": { - "post": { - "tags": [ - "Address" - ], - "summary": "Create a new address for a customer", - "description": "Creates a new address for a customer.", - "operationId": "createCustomerAddress", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomerAddressBody" - } - } - } - }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/CustomerAddress" - }, - { - "$ref": "#/components/schemas/CustomerAddressRead" - } - ] - } - } - } - } - }, "security": [ { "ApiKey": [], @@ -23143,174 +23142,129 @@ ] } }, - "/salutation": { + "/account/change-password": { "post": { "tags": [ - "System & Context", - "Endpoints supporting Criteria " - ], - "summary": "Fetch salutations", - "description": "Fetches salutations with a criteria obj.", - "operationId": "readSalutation", - "parameters": [ - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "sw-include-search-info", - "in": "header", - "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" - } - } + "Profile" ], + "summary": "Change the customer's password", + "description": "Changes a customer's password using their current password as a validation.", + "operationId": "changePassword", "requestBody": { - "required": false, + "required": true, "content": { "application/json": { "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Criteria" + "required": [ + "password", + "newPassword", + "newPasswordConfirm" + ], + "properties": { + "password": { + "description": "Current password of the customer", + "type": "string" + }, + "newPassword": { + "description": "New Password for the customer", + "type": "string" + }, + "newPasswordConfirm": { + "description": "Confirmation of the new password", + "type": "string" } - ] + }, + "type": "object" } } } }, "responses": { "200": { - "$ref": "#/components/responses/SalutationListResponse" + "description": "Returns a success response indicating a successful update.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + } + } + } } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] - }, - "get": { + } + }, + "/account/convert-guest": { + "post": { "tags": [ - "System & Context", - "Endpoints supporting Criteria " + "Profile" ], - "summary": "Fetch salutations", - "description": "Perform a filtered search for salutations.", - "operationId": "readSalutationGet", - "parameters": [ - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "summary": "Convert a guest customer to a registered customer", + "description": "Takes a password to convert a guest customer to a registered customer. The customer can then log in with the provided password in the future.", + "operationId": "convertGuest", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "required": [ + "password" + ], + "properties": { + "password": { + "description": "New Password for the customer", + "type": "string" + } + }, + "type": "object" + } } - }, - { - "$ref": "#/components/parameters/criteriaPage" - }, - { - "$ref": "#/components/parameters/criteriaLimit" - }, - { - "$ref": "#/components/parameters/criteriaTerm" - }, - { - "$ref": "#/components/parameters/criteriaFilter" - }, - { - "$ref": "#/components/parameters/criteriaIds" - }, - { - "$ref": "#/components/parameters/criteriaQuery" - }, - { - "$ref": "#/components/parameters/criteriaAssociations" - }, - { - "$ref": "#/components/parameters/criteriaPostFilter" - }, - { - "$ref": "#/components/parameters/criteriaSort" - }, - { - "$ref": "#/components/parameters/criteriaAggregations" - }, - { - "$ref": "#/components/parameters/criteriaFields" - }, - { - "$ref": "#/components/parameters/criteriaGrouping" - }, - { - "$ref": "#/components/parameters/criteriaTotalCountMode" - }, - { - "$ref": "#/components/parameters/criteriaIncludes" - }, - { - "$ref": "#/components/parameters/criteriaExcludes" - }, - { - "$ref": "#/components/parameters/CompressedCriteria" } - ], + }, "responses": { "200": { - "$ref": "#/components/responses/SalutationListResponse" + "description": "Returns a success response indicating a successful update.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + } + } + } } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] } }, - "/handle-payment": { + "/account/customer-recovery-is-expired": { "post": { "tags": [ - "Payment & Shipping" + "Profile" ], - "summary": "Initiate a payment for an order", - "description": "This generic endpoint is should be called to initiate a payment flow after an order has been created. The details of the payment flow can differ depending on the payment integration and might require calling additional operations or the setup of webhooks.\n\nThe endpoint internally calls the payment handler of the payment method currently set for the order.", - "operationId": "handlePaymentMethod", + "summary": "Checks if the customer recovery entry for a given hash is expired.", + "description": "This can be used to validate a provided hash has a valid and not expired customer recovery hash.", + "operationId": "getCustomerRecoveryIsExpired", "requestBody": { "required": true, "content": { "application/json": { "schema": { "required": [ - "orderId" + "hash" ], "properties": { - "orderId": { - "description": "Identifier of an order", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "finishUrl": { - "description": "URL to which the client should be redirected after successful payment", - "type": "string" - }, - "errorUrl": { - "description": "URL to which the client should be redirected after erroneous payment", + "hash": { + "description": "Parameter from the link in the confirmation mail sent in Step 1", "type": "string" } }, @@ -23321,19 +23275,33 @@ }, "responses": { "200": { - "description": "Redirect to external payment provider", + "description": "Returns a CustomerRecoveryIsExpiredResponse that indicates if the hash is expired or not.", "content": { "application/json": { "schema": { "type": "object", "properties": { - "redirectUrl": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "isExpired": { + "type": "boolean" + } + }, + "required": [ + "isExpired" + ] + } + }, + "apiAlias": { + "enum": [ + "array_struct" + ], "type": "string" } - }, - "required": [ - "redirectUrl" - ] + } } } } @@ -23344,57 +23312,38 @@ "ApiKey": [] } ] - }, - "get": { + } + }, + "/account/customer": { + "post": { "tags": [ - "Payment & Shipping" + "Profile", + "Endpoints supporting Criteria " ], - "summary": "Initiate a payment for an order", - "description": "This generic endpoint is should be called to initiate a payment flow after an order has been created. The details of the payment flow can differ depending on the payment integration and might require calling additional operations or the setup of webhooks.\n\nThe endpoint internally calls the payment handler of the payment method currently set for the order. Please prefer the POST version of this endpoint.", - "operationId": "handlePaymentMethodGet", - "parameters": [ - { - "name": "orderId", - "in": "query", - "required": true, - "description": "Identifier of an order", - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "finishUrl", - "in": "query", - "description": "URL to which the client should be redirected after successful payment", - "schema": { - "type": "string" - } - }, - { - "name": "errorUrl", - "in": "query", - "description": "URL to which the client should be redirected after erroneous payment", - "schema": { - "type": "string" + "summary": "Get information about current customer", + "description": "Returns information about the current customer.\n\n**Available Associations:**\n- `group` - Customer group determining pricing and permissions\n- `language` - Preferred language for customer communication\n- `lastPaymentMethod` - Last used payment method by the customer\n- `defaultBillingAddress` - Default billing address for the customer\n- `activeBillingAddress` - Currently active billing address in the session\n- `defaultShippingAddress` - Default shipping address for the customer\n- `activeShippingAddress` - Currently active shipping address in the session\n- `salutation` - Customer salutation (e.g., Mr., Mrs., Ms.)\n- `addresses` - All addresses saved for the customer\n- `tags` - Tags assigned to the customer for organization and segmentation", + "operationId": "readCustomer", + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/NoneFieldsCriteria" + } + ] + } } } - ], + }, "responses": { "200": { - "description": "Redirect to external payment provider", + "description": "Returns the logged in customer, also for guest sessions. Check for the value of `guest` field to see whether the customer is a guest.", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "redirectUrl": { - "type": "string" - } - }, - "required": [ - "redirectUrl" - ] + "$ref": "#/components/schemas/Customer" } } } @@ -23402,92 +23351,96 @@ }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } - ] - } - }, - "/checkout/cart": { - "get": { - "tags": [ - "Cart" ], - "summary": "Fetch or create a cart", - "description": "Used to fetch the current cart or for creating a new one.", - "operationId": "readCart", "parameters": [ { - "name": "sw-language-id", + "name": "sw-include-search-info", "in": "header", - "description": "Instructs Shopware to return the response in the given language.", + "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", "required": false, "schema": { "type": "string", - "pattern": "^[0-9a-f]{32}$" + "enum": [ + "0", + "1" + ], + "default": "1" } } + ] + }, + "delete": { + "tags": [ + "Profile" ], + "summary": "Delete the customer's profile", + "description": "Deletes a customer profile along with their addresses, wishlists and associated data. Created orders and their payment/shipping information (addresses) and reviews are not deleted.", + "operationId": "deleteCustomer", "responses": { - "200": { - "description": "Cart", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Cart" - } - } - } + "204": { + "description": "Returns a no content response indicating a successful removal of the customer profile" } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] - }, + } + }, + "/account/address/{addressId}": { "delete": { "tags": [ - "Cart" + "Address" + ], + "summary": "Delete an address of a customer", + "description": "Delete an address of customer.\n\n Only addresses which are not set as default addresses for shipping or billing can be deleted. You can check the current default addresses of your customer using the profile information endpoint and change them using the default address endpoint.\n\n **A customer must have at least one address (which can be used for shipping and billing).**\n\n An automatic fallback is not applied.", + "operationId": "deleteCustomerAddress", + "parameters": [ + { + "name": "addressId", + "in": "path", + "description": "ID of the address to be deleted.", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Delete a cart", - "description": "This route deletes the cart of the customer.", - "operationId": "deleteCart", "responses": { "204": { - "description": "Successfully deleted the cart", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SuccessResponse" - } - } - } + "description": "No Content response, when the address has been deleted" + }, + "400": { + "description": "Response containing a list of errors, most likely due to the address being in use" } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] - } - }, - "/checkout/cart/line-item": { - "post": { + }, + "patch": { "tags": [ - "Cart" + "Address" ], - "summary": "Add items to the cart", - "description": "This route adds items to the cart. An item can be a product or promotion for example. They are referenced by the `referencedId`-parameter.\n\nExample: [Working with the cart - Guide](https://developer.shopware.com/docs/guides/integrations-api/store-api-guide/work-with-the-cart#adding-new-items-to-the-cart)", - "operationId": "addLineItem", + "summary": "Modify an address of a customer", + "description": "Modifies an existing address of a customer.", + "operationId": "updateCustomerAddress", "parameters": [ { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, + "name": "addressId", + "in": "path", + "description": "Address ID", + "required": true, "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "type": "string" } } ], @@ -23495,72 +23448,86 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CartItems" + "$ref": "#/components/schemas/CustomerAddressBody" } } } }, "responses": { "200": { - "description": "The updated cart.", + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Cart" + "allOf": [ + { + "$ref": "#/components/schemas/CustomerAddress" + }, + { + "$ref": "#/components/schemas/CustomerAddressRead" + } + ] } } } - }, - "400": { - "$ref": "#/components/responses/400" } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] - }, - "delete": { + } + }, + "/account/list-address": { + "post": { "tags": [ - "Cart" + "Address", + "Endpoints supporting Criteria " ], - "summary": "Remove items from the cart", - "description": "DEPRECATED: use removeLineItem instead. This route removes items from the cart and recalculates it.\n\nExample: [Working with the cart - Guide](https://developer.shopware.com/docs/guides/integrations-api/store-api-guide/work-with-the-cart#deleting-items-in-the-cart)", - "operationId": "removeLineItemDeprecated", - "deprecated": true, - "parameters": [ - { - "name": "ids", - "in": "query", - "description": "A list of product identifiers.", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "summary": "Fetch addresses of a customer", + "description": "Lists all addresses of the current customer and allows filtering them based on a criteria.", + "operationId": "listAddress", + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Criteria" + } + ] } } - }, - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } } - ], + }, "responses": { "200": { - "description": "The updated cart.", + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Cart" + "allOf": [ + { + "type": "object", + "required": [ + "elements" + ], + "properties": { + "elements": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAddress" + } + } + } + }, + { + "$ref": "#/components/schemas/EntitySearchResult" + } + ] } } } @@ -23568,45 +23535,70 @@ }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } - ] - }, - "patch": { - "tags": [ - "Cart" ], - "summary": "Update items in the cart", - "description": "This route updates items in the cart. A typical example is updating the quantity of an item.\n\nExample: [Working with the cart - Guide](https://developer.shopware.com/docs/guides/integrations-api/store-api-guide/work-with-the-cart#updating-items-in-the-cart)", - "operationId": "updateLineItem", "parameters": [ { - "name": "sw-language-id", + "name": "sw-include-search-info", "in": "header", - "description": "Instructs Shopware to return the response in the given language.", + "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", "required": false, "schema": { "type": "string", - "pattern": "^[0-9a-f]{32}$" + "enum": [ + "0", + "1" + ], + "default": "1" } } + ] + } + }, + "/account/login": { + "post": { + "tags": [ + "Login & Registration" ], + "summary": "Log in a customer", + "description": "Logs in customers given their credentials.", + "operationId": "loginCustomer", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CartItems" + "required": [ + "username", + "password" + ], + "properties": { + "username": { + "description": "Email", + "type": "string" + }, + "password": { + "description": "Password", + "type": "string" + } + }, + "type": "object" } } } }, "responses": { "200": { - "description": "The updated cart.", + "$ref": "#/components/responses/ContextTokenResponse" + }, + "401": { + "description": "If credentials are incorrect an error is returned", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Cart" + "$ref": "#/components/schemas/failure" } } } @@ -23619,43 +23611,36 @@ ] } }, - "/checkout/cart/line-item/delete": { + "/account/login/imitate-customer": { "post": { "tags": [ - "Cart" - ], - "summary": "Remove items from the cart", - "description": "This route removes items from the cart and recalculates it.\n\nExample: [Working with the cart - Guide](https://developer.shopware.com/docs/guides/integrations-api/store-api-guide/work-with-the-cart#deleting-items-in-the-cart)", - "operationId": "removeLineItem", - "parameters": [ - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } + "Login & Registration" ], + "summary": "Imitate the log in as a customer", + "description": "Imitate the log in as a customer given a generated token.", + "operationId": "imitateCustomerLogin", "requestBody": { "required": true, "content": { "application/json": { "schema": { "required": [ - "ids" + "token", + "customerId", + "userId" ], "properties": { - "ids": { - "description": "A list of product identifiers.", - "type": "array", - "minItems": 1, - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } + "token": { + "description": "Generated customer impersonation token", + "type": "string" + }, + "customerId": { + "description": "ID of the customer", + "type": "string" + }, + "userId": { + "description": "ID of the user who generated the token", + "type": "string" } }, "type": "object" @@ -23665,11 +23650,14 @@ }, "responses": { "200": { - "description": "The updated cart.", + "$ref": "#/components/responses/ContextTokenResponse" + }, + "400": { + "description": "If the token is incorrect an error is returned", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Cart" + "$ref": "#/components/schemas/failure" } } } @@ -23682,42 +23670,54 @@ ] } }, - "/checkout/order": { + "/account/logout": { "post": { "tags": [ - "Order" + "Login & Registration" ], - "summary": "Create an order from a cart", - "description": "Creates a new order from the current cart and deletes the cart.\n\nIf you are using the [prepared payment flow](https://developer.shopware.com/docs/concepts/commerce/checkout-concept/payments#2.1-prepare-payment-optional), this endpoint also receives additional transaction details. The exact name of the parameters depends on the implementation of the corresponding *payment handler*.", - "operationId": "createOrder", - "parameters": [ + "summary": "Log out a customer", + "description": "Logs out a customer.", + "operationId": "logoutCustomer", + "responses": { + "200": { + "$ref": "#/components/responses/ContextTokenResponse" + }, + "403": { + "$ref": "#/components/responses/403" + } + }, + "security": [ { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } + "ApiKey": [], + "ContextToken": [] } + ] + } + }, + "/account/register-confirm": { + "post": { + "tags": [ + "Login & Registration" ], + "summary": "Confirm a customer registration", + "description": "Confirms a customer registration when double opt-in is activated.\n\nLearn more about double opt-in registration in our guide \"Register a customer\".", + "operationId": "registerConfirm", "requestBody": { - "description": "Contains additional metadata which is stored together with the order. It can also contain payment transaction details.", + "required": true, "content": { "application/json": { "schema": { + "required": [ + "hash", + "em" + ], "properties": { - "customerComment": { - "description": "Adds a comment from the customer to the order.", - "type": "string" - }, - "affiliateCode": { - "description": "The affiliate code can be used to track which referrer the customer came through. An example could be `Price-comparison-company-XY`.", + "hash": { + "description": "Hash from the email received", "type": "string" }, - "campaignCode": { - "description": "The campaign code is used to track which action the customer came from. An example could be `Summer-Deals`", + "em": { + "description": "Email hash from the email received", "type": "string" } }, @@ -23728,97 +23728,169 @@ }, "responses": { "200": { - "description": "Order", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Order" - } - } - } + "description": "Returns the logged in customer. The customer is automatically logged in with the `sw-context-token` header provided, which can be reused for subsequent requests." + }, + "404": { + "description": "No hash provided" + }, + "412": { + "description": "The customer has already been confirmed" } }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] } }, - "/checkout/gateway": { - "get": { + "/account/register": { + "post": { "tags": [ - "Gateway" + "Login & Registration" ], - "summary": "Call the checkout gateway", - "description": "Call the checkout gateway, which is used to manipulate certain aspects of the checkout process (e.g. available payment methods).", - "operationId": "checkoutGateway", - "responses": { - "200": { - "description": "Checkout gateway response", - "content": { - "application/json": { - "schema": { - "properties": { - "paymentMethods": { - "properties": { - "total": { - "description": "Total amount", - "type": "integer" - }, - "aggregations": { - "description": "aggregation result", - "type": "object" - }, - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PaymentMethod" - } - } + "summary": "Register a customer", + "description": "Registers a customer. Used both for normal customers and guest customers.See the Guide \"Register a customer\" for more information on customer registration.", + "operationId": "register", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "email": { + "description": "Email of the customer. Has to be unique, unless `guest` is `true`", + "type": "string" + }, + "password": { + "description": "Password for the customer. Required, unless `guest` is `true`", + "type": "string" + }, + "salutationId": { + "description": "Id of the salutation for the customer account. Fetch options using `salutation` endpoint.", + "type": "string" + }, + "firstName": { + "description": "Customer first name. Value will be reused for shipping and billing address if not provided explicitly.", + "type": "string" + }, + "lastName": { + "description": "Customer last name. Value will be reused for shipping and billing address if not provided explicitly.", + "type": "string" + }, + "acceptedDataProtection": { + "description": "Flag indicating accepted data protection", + "type": "boolean" + }, + "storefrontUrl": { + "description": "URL of the storefront for that registration. Used in confirmation emails. Has to be one of the configured domains of the sales channel.", + "type": "string" + }, + "billingAddress": { + "$ref": "#/components/schemas/CustomerAddress" + }, + "shippingAddress": { + "$ref": "#/components/schemas/CustomerAddress" + }, + "guest": { + "description": "If set, will create a guest customer. Guest customers can re-use an email address and don't need a password.", + "type": "boolean", + "default": false + }, + "birthdayDay": { + "description": "Birthday day", + "type": "integer" + }, + "birthdayMonth": { + "description": "Birthday month", + "type": "integer" + }, + "birthdayYear": { + "description": "Birthday year", + "type": "integer" + }, + "title": { + "description": "(Academic) title of the customer", + "type": "string" + }, + "affiliateCode": { + "description": "Field can be used to store an affiliate tracking code", + "type": "string" + }, + "campaignCode": { + "description": "Field can be used to store a campaign tracking code", + "type": "string" + } + }, + "required": [ + "email", + "password", + "firstName", + "lastName", + "acceptedDataProtection", + "storefrontUrl", + "billingAddress" + ], + "oneOf": [ + { + "properties": { + "accountType": { + "description": "Type of the customer account. Default value is 'private'.", + "type": "string", + "enum": [ + "private" + ], + "default": "private" + }, + "company": { + "type": "null" + }, + "vatIds": { + "type": "null" + } + } + }, + { + "required": [ + "accountType", + "company", + "vatIds" + ], + "properties": { + "accountType": { + "description": "Type of the customer account. Can be `private` or `business`.", + "type": "string", + "enum": [ + "business" + ] }, - "type": "object" - }, - "shippingMethods": { - "properties": { - "total": { - "description": "Total amount", - "type": "integer" - }, - "aggregations": { - "description": "aggregation result", - "type": "object" - }, - "elements": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ShippingMethod" - } - } + "company": { + "description": "Company of the customer. Only required when `accountType` is `business`.", + "type": "string" }, - "type": "object" - }, - "errors": { - "type": "array", - "items": { - "properties": { - "code": { - "description": "Error code", - "type": "string" - }, - "detail": { - "description": "Error detail", - "type": "string" - }, - "blocking": { - "description": "If the error is blocking", - "type": "boolean" - } - } + "vatIds": { + "description": "VAT IDs of the customer's company. Only valid when `accountType` is `business`.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 } } } + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Customer" } } } @@ -23831,225 +23903,104 @@ ] } }, - "/language": { + "/account/recovery-password-confirm": { "post": { "tags": [ - "System & Context", - "Endpoints supporting Criteria " - ], - "summary": "Fetch languages", - "description": "Perform a filtered search for languages.\n\n**Available Associations:**\n- `locale` - Locale defining regional settings (date, time, number formats)\n- `translationCode` - Locale used for translating content\n- `children` - Child languages inheriting from this parent language", - "operationId": "readLanguages", - "parameters": [ - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "sw-include-search-info", - "in": "header", - "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" - } - } + "Profile" ], + "summary": "Reset a password with recovery credentials", + "description": "This operation is Step 2 of the password reset flow. It is required to conduct Step 1 \"Send a password recovery mail\" in order to obtain the required credentials for this step.Resets a customer's password using credentials from a password recovery mail as a validation.", + "operationId": "recoveryPassword", "requestBody": { - "required": false, + "required": true, "content": { "application/json": { "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Criteria" + "required": [ + "hash", + "newPassword", + "newPasswordConfirm" + ], + "properties": { + "hash": { + "description": "Parameter from the link in the confirmation mail sent in Step 1", + "type": "string" + }, + "newPassword": { + "description": "New password for the customer", + "type": "string" + }, + "newPasswordConfirm": { + "description": "Confirmation of the new password", + "type": "string" } - ] + }, + "type": "object" } } } }, "responses": { "200": { - "$ref": "#/components/responses/LanguageListResponse" - } - }, - "security": [ - { - "ApiKey": [] - } - ] - }, - "get": { - "tags": [ - "System & Context", - "Endpoints supporting Criteria " - ], - "summary": "Fetch languages", - "description": "Perform a filtered search for languages.\n\n**Available Associations:**\n- `locale` - Locale defining regional settings (date, time, number formats)\n- `translationCode` - Locale used for translating content\n- `children` - Child languages inheriting from this parent language", - "operationId": "readLanguagesGet", - "parameters": [ - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "description": "Returns a success response indicating a successful update.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + } + } } - }, - { - "$ref": "#/components/parameters/criteriaPage" - }, - { - "$ref": "#/components/parameters/criteriaLimit" - }, - { - "$ref": "#/components/parameters/criteriaTerm" - }, - { - "$ref": "#/components/parameters/criteriaFilter" - }, - { - "$ref": "#/components/parameters/criteriaIds" - }, - { - "$ref": "#/components/parameters/criteriaQuery" - }, - { - "$ref": "#/components/parameters/criteriaAssociations" - }, - { - "$ref": "#/components/parameters/criteriaPostFilter" - }, - { - "$ref": "#/components/parameters/criteriaSort" - }, - { - "$ref": "#/components/parameters/criteriaAggregations" - }, - { - "$ref": "#/components/parameters/criteriaFields" - }, - { - "$ref": "#/components/parameters/criteriaGrouping" - }, - { - "$ref": "#/components/parameters/criteriaTotalCountMode" - }, - { - "$ref": "#/components/parameters/criteriaIncludes" - }, - { - "$ref": "#/components/parameters/criteriaExcludes" - }, - { - "$ref": "#/components/parameters/CompressedCriteria" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/LanguageListResponse" } }, "security": [ - { - "ApiKey": [] - } - ] - } - }, - "/cms/{id}": { - "post": { - "tags": [ - "Content" - ], - "summary": "Fetch and resolve a CMS page", - "description": "Loads a content management page by its identifier and resolve the slot data. This could be media files, product listing and so on.\n\n**Important notice**\n\nThe criteria passed with this route also affects the listing, if there is one within the cms page.\n\n**Available Associations:**\n- `sections` - Content sections within the CMS page (layout blocks containing slots)\n- `previewMedia` - Preview image for the CMS page in admin panel and page selection\n- `landingPages` - Landing pages using this CMS layout", - "operationId": "readCms", - "parameters": [ - { - "name": "id", - "in": "path", - "description": "Identifier of the CMS page to be resolved", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "sw-include-search-info", - "in": "header", - "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" - } + { + "ApiKey": [] } + ] + } + }, + "/account/recovery-password": { + "post": { + "tags": [ + "Profile" ], + "summary": "Send a password recovery mail", + "description": "This operation is Step 1 of the password reset flow. Make sure to implement Step 2 \"Reset password with recovery credentials\" in order to allow for the complete flow in your application. Sends a recovery mail containing a link with credentials that allows a customer to reset their password.", + "operationId": "sendRecoveryMail", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "allOf": [ - { - "properties": { - "slots": { - "description": "Resolves only the given slot identifiers. The identifiers have to be seperated by a `|` character.", - "type": "string" - } - }, - "type": "object" + "required": [ + "email", + "storefrontUrl" + ], + "properties": { + "email": { + "description": "E-Mail address to identify the customer", + "type": "string" }, - { - "$ref": "#/components/schemas/ProductListingCriteria" + "storefrontUrl": { + "description": "URL of the storefront to use for the generated reset link. It has to be a domain that is configured in the sales channel domain settings.", + "type": "string" } - ] + }, + "type": "object" } } } }, "responses": { "200": { - "description": "The loaded cms page", + "description": "If email corresponds to an existing customer, a mail will be sent out to that customer containing a link assembled using the following schema:\n\nReturns a success indicating a successful initialisation of the reset flow.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CmsPage" + "$ref": "#/components/schemas/SuccessResponse" } } } - }, - "404": { - "$ref": "#/components/responses/404" } }, "security": [ @@ -24057,211 +24008,125 @@ "ApiKey": [] } ] - }, - "get": { + } + }, + "/account/address/default-shipping/{addressId}": { + "patch": { "tags": [ - "Content" + "Address" ], - "summary": "Fetch and resolve a CMS page", - "description": "Loads a content management page by its identifier and resolve the slot data. This could be media files, product listing and so on.\n\n**Important notice**\n\nThe criteria passed with this route also affects the listing, if there is one within the cms page.\n\n**Available Associations:**\n- `sections` - Content sections within the CMS page (layout blocks containing slots)\n- `previewMedia` - Preview image for the CMS page in admin panel and page selection\n- `landingPages` - Landing pages using this CMS layout", - "operationId": "readCmsGet", + "summary": "Change a customer's default shipping address", + "description": "Updates the default (preselected) shipping addresses of a customer.", + "operationId": "defaultShippingAddress", "parameters": [ { - "name": "id", + "name": "addressId", "in": "path", - "description": "Identifier of the CMS page to be resolved", + "description": "Address ID", "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "slots", - "in": "query", - "description": "Resolves only the given slot identifiers. The identifiers have to be seperated by a `|` character.", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/criteriaPage" - }, - { - "name": "limit", - "in": "query", - "description": "Number of items per result page. If not set, the limit will be set according to the default products per page, defined in the system settings.", - "schema": { - "type": "integer", - "minimum": 0 - } - }, - { - "$ref": "#/components/parameters/criteriaTerm" - }, - { - "$ref": "#/components/parameters/criteriaFilter" - }, - { - "$ref": "#/components/parameters/criteriaIds" - }, - { - "$ref": "#/components/parameters/criteriaQuery" - }, - { - "$ref": "#/components/parameters/criteriaAssociations" - }, - { - "$ref": "#/components/parameters/criteriaPostFilter" - }, - { - "$ref": "#/components/parameters/criteriaSort" - }, - { - "$ref": "#/components/parameters/criteriaAggregations" - }, - { - "$ref": "#/components/parameters/criteriaFields" - }, - { - "$ref": "#/components/parameters/criteriaGrouping" - }, - { - "$ref": "#/components/parameters/criteriaTotalCountMode" - }, - { - "$ref": "#/components/parameters/criteriaIncludes" - }, - { - "$ref": "#/components/parameters/criteriaExcludes" - }, - { - "name": "order", - "in": "query", - "description": "Specifies the sorting of the products by `availableSortings`. If not set, the default sorting will be set according to the shop settings. The available sorting options are sent within the response under the `availableSortings` key. In order to sort by a field, consider using the `sort` parameter from the listing criteria. Do not use both parameters together, as it might lead to unexpected results.", - "schema": { - "type": "string" - } - }, - { - "name": "p", - "in": "query", - "description": "Search result page", - "schema": { - "type": "integer", - "default": 1 - } - }, - { - "name": "manufacturer", - "in": "query", - "description": "Filter by manufacturers. List of manufacturer identifiers separated by a `|`.", "schema": { "type": "string" } - }, - { - "name": "min-price", - "in": "query", - "description": "Filters by a minimum product price. Has to be lower than the `max-price` filter.", - "schema": { - "type": "integer", - "minimum": 0, - "default": 0 - } - }, - { - "name": "max-price", - "in": "query", - "description": "Filters by a maximum product price. Has to be higher than the `min-price` filter.", - "schema": { - "type": "integer", - "minimum": 0, - "default": 0 - } - }, - { - "name": "rating", - "in": "query", - "description": "Filter products with a minimum average rating.", - "schema": { - "type": "integer" - } - }, + } + ], + "responses": { + "200": { + "description": "" + } + }, + "security": [ { - "name": "shipping-free", - "in": "query", - "description": "Filters products that are marked as shipping-free.", - "schema": { - "type": "boolean", - "default": false - } - }, + "ApiKey": [], + "ContextToken": [] + } + ] + } + }, + "/account/address/default-billing/{addressId}": { + "patch": { + "tags": [ + "Address" + ], + "summary": "Change a customer's default billing address", + "description": "Updates the default (preselected) billing addresses of a customer.", + "operationId": "defaultBillingAddress", + "parameters": [ { - "name": "properties", - "in": "query", - "description": "Filters products by their properties. List of property identifiers separated by a `|`.", + "name": "addressId", + "in": "path", + "description": "Address ID", + "required": true, "schema": { "type": "string" } - }, + } + ], + "responses": { + "200": { + "description": "" + } + }, + "security": [ { - "name": "reduce-aggregations", - "in": "query", - "description": "By sending the parameter `reduce-aggregations` , the post-filters that were applied by the customer, are also applied to the aggregations. This has the consequence that only values are returned in the aggregations that would lead to further filter results. This parameter is a flag, the value has no effect.", - "schema": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + "ApiKey": [], + "ContextToken": [] + } + ] + } + }, + "/account/address": { + "post": { + "tags": [ + "Address" + ], + "summary": "Create a new address for a customer", + "description": "Creates a new address for a customer.", + "operationId": "createCustomerAddress", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomerAddressBody" + } } } - ], + }, "responses": { "200": { - "description": "The loaded cms page", + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CmsPage" + "allOf": [ + { + "$ref": "#/components/schemas/CustomerAddress" + }, + { + "$ref": "#/components/schemas/CustomerAddressRead" + } + ] } } } - }, - "404": { - "$ref": "#/components/responses/404" } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] } }, - "/category": { + "/country": { "post": { "tags": [ - "Category", + "System & Context", "Endpoints supporting Criteria " ], - "summary": "Fetch a list of categories", - "description": "Perform a filtered search for categories.\n\n**Available Associations:**\n- `children` - Child categories within this category for hierarchical navigation\n- `media` - Category image or banner\n- `tags` - Tags for organizing and filtering categories\n- `cmsPage` - CMS page layout for the category\n- `seoUrls` - SEO-friendly URLs for the category across different sales channels", - "operationId": "readCategoryList", + "summary": "Fetch countries", + "description": "Perform a filtered search for countries\n\n**Available Associations:**\n- `states` - States/provinces/regions within the country", + "operationId": "readCountry", "parameters": [ { "name": "sw-language-id", @@ -24304,7 +24169,7 @@ }, "responses": { "200": { - "$ref": "#/components/responses/CategoryListResponse" + "$ref": "#/components/responses/CountryListResponse" } }, "security": [ @@ -24315,12 +24180,12 @@ }, "get": { "tags": [ - "Category", + "System & Context", "Endpoints supporting Criteria " ], - "summary": "Fetch a list of categories", - "description": "Perform a filtered search for categories.\n\n**Available Associations:**\n- `children` - Child categories within this category for hierarchical navigation\n- `media` - Category image or banner\n- `tags` - Tags for organizing and filtering categories\n- `cmsPage` - CMS page layout for the category\n- `seoUrls` - SEO-friendly URLs for the category across different sales channels", - "operationId": "readCategoryListGet", + "summary": "Fetch countries", + "description": "Perform a filtered search for countries\n\n**Available Associations:**\n- `states` - States/provinces/regions within the country", + "operationId": "readCountryGet", "parameters": [ { "name": "sw-language-id", @@ -24383,7 +24248,7 @@ ], "responses": { "200": { - "$ref": "#/components/responses/CategoryListResponse" + "$ref": "#/components/responses/CountryListResponse" } }, "security": [ @@ -24393,23 +24258,23 @@ ] } }, - "/category/{navigationId}": { + "/cms/{id}": { "post": { "tags": [ - "Category", - "Endpoints supporting Criteria " + "Content" ], - "summary": "Fetch a single category", - "description": "This endpoint returns information about the category, as well as a fully resolved (hydrated with mapping values) CMS page, if one is assigned to the category. You can pass slots which should be resolved exclusively.\n\n**Available Associations:**\n- `children` - Child categories within this category for hierarchical navigation\n- `media` - Category image or banner\n- `tags` - Tags for organizing and filtering categories\n- `cmsPage` - CMS page layout for the category\n- `seoUrls` - SEO-friendly URLs for the category across different sales channels", - "operationId": "readCategory", + "summary": "Fetch and resolve a CMS page", + "description": "Loads a content management page by its identifier and resolve the slot data. This could be media files, product listing and so on.\n\n**Important notice**\n\nThe criteria passed with this route also affects the listing, if there is one within the cms page.\n\n**Available Associations:**\n- `sections` - Content sections within the CMS page (layout blocks containing slots)\n- `previewMedia` - Preview image for the CMS page in admin panel and page selection\n- `landingPages` - Landing pages using this CMS layout", + "operationId": "readCms", "parameters": [ { - "name": "sw-include-seo-urls", - "in": "header", - "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", - "required": false, + "name": "id", + "in": "path", + "description": "Identifier of the CMS page to be resolved", + "required": true, "schema": { - "type": "boolean" + "type": "string", + "pattern": "^[0-9a-f]{32}$" } }, { @@ -24435,24 +24300,6 @@ ], "default": "1" } - }, - { - "name": "navigationId", - "in": "path", - "description": "Identifier of the category to be fetched", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "slots", - "in": "query", - "description": "Resolves only the given slot identifiers. The identifiers have to be seperated by a '|' character", - "schema": { - "type": "string" - } } ], "requestBody": { @@ -24460,6 +24307,15 @@ "application/json": { "schema": { "allOf": [ + { + "properties": { + "slots": { + "description": "Resolves only the given slot identifiers. The identifiers have to be seperated by a `|` character.", + "type": "string" + } + }, + "type": "object" + }, { "$ref": "#/components/schemas/ProductListingCriteria" } @@ -24470,14 +24326,17 @@ }, "responses": { "200": { - "description": "The loaded category with cms page", + "description": "The loaded cms page", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Category" + "$ref": "#/components/schemas/CmsPage" } } } + }, + "404": { + "$ref": "#/components/responses/404" } }, "security": [ @@ -24488,20 +24347,20 @@ }, "get": { "tags": [ - "Category", - "Endpoints supporting Criteria " + "Content" ], - "summary": "Fetch a single category", - "description": "This endpoint returns information about the category, as well as a fully resolved (hydrated with mapping values) CMS page, if one is assigned to the category. You can pass slots which should be resolved exclusively.\n\n**Available Associations:**\n- `children` - Child categories within this category for hierarchical navigation\n- `media` - Category image or banner\n- `tags` - Tags for organizing and filtering categories\n- `cmsPage` - CMS page layout for the category\n- `seoUrls` - SEO-friendly URLs for the category across different sales channels", - "operationId": "readCategoryGet", + "summary": "Fetch and resolve a CMS page", + "description": "Loads a content management page by its identifier and resolve the slot data. This could be media files, product listing and so on.\n\n**Important notice**\n\nThe criteria passed with this route also affects the listing, if there is one within the cms page.\n\n**Available Associations:**\n- `sections` - Content sections within the CMS page (layout blocks containing slots)\n- `previewMedia` - Preview image for the CMS page in admin panel and page selection\n- `landingPages` - Landing pages using this CMS layout", + "operationId": "readCmsGet", "parameters": [ { - "name": "sw-include-seo-urls", - "in": "header", - "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", - "required": false, + "name": "id", + "in": "path", + "description": "Identifier of the CMS page to be resolved", + "required": true, "schema": { - "type": "boolean" + "type": "string", + "pattern": "^[0-9a-f]{32}$" } }, { @@ -24514,20 +24373,10 @@ "pattern": "^[0-9a-f]{32}$" } }, - { - "name": "navigationId", - "in": "path", - "description": "Identifier of the category to be fetched", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, { "name": "slots", "in": "query", - "description": "Resolves only the given slot identifiers. The identifiers have to be seperated by a '|' character", + "description": "Resolves only the given slot identifiers. The identifiers have to be seperated by a `|` character.", "schema": { "type": "string" } @@ -24671,14 +24520,17 @@ ], "responses": { "200": { - "description": "The loaded category with cms page", + "description": "The loaded cms page", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Category" + "$ref": "#/components/schemas/CmsPage" } } } + }, + "404": { + "$ref": "#/components/responses/404" } }, "security": [ @@ -24688,55 +24540,74 @@ ] } }, - "/customer/wishlist/add/{productId}": { + "/currency": { "post": { "tags": [ - "Wishlist" + "System & Context", + "Endpoints supporting Criteria " ], - "summary": "Add a product to a wishlist", - "description": "Adds a product to a customers wishlist.\n\n **Important constraints**\n\n * Anonymous (not logged-in) customers can not have wishlists.\n * The wishlist feature has to be activated.", - "operationId": "addProductOnWishlist", + "summary": "Fetch currencies", + "description": "Perform a filtered search for currencies.", + "operationId": "readCurrency", "parameters": [ { - "name": "productId", - "in": "path", - "description": "Identifier of the product to be added.", - "required": true, + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, "schema": { "type": "string", "pattern": "^[0-9a-f]{32}$" } + }, + { + "name": "sw-include-search-info", + "in": "header", + "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "0", + "1" + ], + "default": "1" + } } ], - "responses": { - "200": { - "description": "Returns a success response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SuccessResponse" - } + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/NoneFieldsCriteria" + } + ] } } } }, + "responses": { + "200": { + "$ref": "#/components/responses/CurrencyListResponse" + } + }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] - } - }, - "/customer/wishlist": { - "post": { + }, + "get": { "tags": [ - "Wishlist", + "System & Context", "Endpoints supporting Criteria " ], - "summary": "Fetch a wishlist", - "description": "Fetch a customer's wishlist. Products on the wishlist can be filtered using a criteria object.\n\n **Important constraints**\n\n * Anonymous (not logged-in) customers can not have wishlists.\n * The wishlist feature has to be activated.", - "operationId": "readCustomerWishlist", + "summary": "Fetch currencies", + "description": "Perform a filtered search for currencies.", + "operationId": "readCurrencyGet", "parameters": [ { "name": "sw-language-id", @@ -24749,201 +24620,223 @@ } }, { - "name": "sw-include-search-info", - "in": "header", - "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", - "required": false, - "schema": { - "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" - } + "$ref": "#/components/parameters/criteriaPage" + }, + { + "$ref": "#/components/parameters/criteriaLimit" + }, + { + "$ref": "#/components/parameters/criteriaTerm" + }, + { + "$ref": "#/components/parameters/criteriaFilter" + }, + { + "$ref": "#/components/parameters/criteriaIds" + }, + { + "$ref": "#/components/parameters/criteriaQuery" + }, + { + "$ref": "#/components/parameters/criteriaAssociations" + }, + { + "$ref": "#/components/parameters/criteriaPostFilter" + }, + { + "$ref": "#/components/parameters/criteriaSort" + }, + { + "$ref": "#/components/parameters/criteriaAggregations" + }, + { + "$ref": "#/components/parameters/criteriaGrouping" + }, + { + "$ref": "#/components/parameters/criteriaTotalCountMode" + }, + { + "$ref": "#/components/parameters/criteriaIncludes" + }, + { + "$ref": "#/components/parameters/criteriaExcludes" + }, + { + "$ref": "#/components/parameters/CompressedNoneFieldsCriteria" } ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Criteria" - } - ] - } - } - } - }, "responses": { "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WishlistLoadRouteResponse" - } - } - } + "$ref": "#/components/responses/CurrencyListResponse" } }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] } }, - "/customer/wishlist/merge": { - "post": { + "/script/{hook}": { + "get": { "tags": [ - "Wishlist" + "API", + "Script", + "App" ], - "summary": "Create a wishlist for a customer", - "description": "Create a new wishlist for a logged in customer or extend the existing wishlist given a set of products.\n\n **Important constraints**\n\n * Anonymous (not logged-in) customers can not have wishlists.\n * A customer can only have a single wishlist.\n * The wishlist feature has to be activated.", - "operationId": "mergeProductOnWishlist", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "productIds": { - "description": "List product id", - "type": "array", - "items": { - "description": "product id", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } - }, - "type": "object" - } + "summary": "Access point for different api logics which are provided by apps over script hooks", + "operationId": "getScriptStoreApiRoute", + "parameters": [ + { + "name": "hook", + "in": "path", + "description": "Dynamic hook which used to build the hook name", + "required": true, + "schema": { + "type": "string" } } - }, + ], "responses": { "200": { - "description": "Returns a success response.", + "description": "Returns different structures of results based on the called script.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SuccessResponse" + "oneOf": [ + { + "type": "object", + "additionalProperties": true + }, + { + "type": "null" + } + ] + } + }, + "application/vnd.api+json": { + "schema": { + "oneOf": [ + { + "type": "object", + "additionalProperties": true + }, + { + "type": "null" + } + ] } } } + }, + "204": { + "description": "No data by default" } }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] - } - }, - "/customer/wishlist/delete/{productId}": { - "delete": { + }, + "post": { "tags": [ - "Wishlist" + "API", + "Script", + "App" ], - "summary": "Remove a product from a wishlist", - "description": "Removes a product from a customer's wishlist.\n\n **Important constraints**\n\n * Anonymous (not logged-in) customers can not have wishlists.\n * The wishlist feature has to be activated.", - "operationId": "deleteProductOnWishlist", + "summary": "Access point for different api logics which are provided by apps over script hooks", + "operationId": "postScriptStoreApiRoute", "parameters": [ { - "name": "productId", + "name": "hook", "in": "path", - "description": "The identifier of the product to be removed from the wishlist.", + "description": "Dynamic hook which used to build the hook name", "required": true, "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "type": "string" } } ], "responses": { "200": { - "description": "Returns a success response indicating a successful removal.", + "description": "Returns different structures of results based on the called script.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SuccessResponse" + "oneOf": [ + { + "type": "object", + "additionalProperties": true + }, + { + "type": "null" + } + ] } - } - } - }, - "404": { - "description": "The removal of the product failed. Probably because the product could not be found on the wishlist.", - "content": { - "application/json": { + }, + "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/failure" + "oneOf": [ + { + "type": "object", + "additionalProperties": true + }, + { + "type": "null" + } + ] } } } + }, + "204": { + "description": "No data by default" } }, "security": [ { - "ApiKey": [], - "ContextToken": [] + "ApiKey": [] } ] } }, - "/app-system/{name}/generate-token": { - "post": { + "/customer-group-registration/config/{customerGroupId}": { + "get": { "tags": [ - "App system" + "Login & Registration" ], - "summary": "Generate JWT token for app system backend", - "description": "Generate JWT token for authenticated communication with the app server", - "operationId": "generateJWTAppSystemAppServer", + "summary": "Fetch registration settings for customer group", + "operationId": "getCustomerGroupRegistrationInfo", "parameters": [ { + "name": "customerGroupId", "in": "path", - "name": "name", + "description": "Customer group id", "required": true, - "description": "Name of the app", "schema": { - "type": "string" + "type": "string", + "pattern": "^[0-9a-f]{32}$" } - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object" - } + }, + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" } } - }, + ], "responses": { "200": { - "description": "", + "description": "Returns the customer group including registration settings.", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "token": { - "type": "string" - }, - "expires": { - "type": "string", - "format": "date-time" - }, - "shopId": { - "type": "string" - } - } + "$ref": "#/components/schemas/CustomerGroup" } } } @@ -24956,16 +24849,24 @@ ] } }, - "/country": { + "/search": { "post": { "tags": [ - "System & Context", - "Endpoints supporting Criteria " + "Product" ], - "summary": "Fetch countries", - "description": "Perform a filtered search for countries\n\n**Available Associations:**\n- `states` - States/provinces/regions within the country", - "operationId": "readCountry", + "summary": "Search for products", + "description": "Performs a search for products which can be used to display a product listing.", + "operationId": "searchPage", "parameters": [ + { + "name": "p", + "in": "query", + "description": "The page number to fetch.", + "required": false, + "schema": { + "type": "integer" + } + }, { "name": "sw-language-id", "in": "header", @@ -24976,6 +24877,15 @@ "pattern": "^[0-9a-f]{32}$" } }, + { + "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", + "in": "header", + "name": "sw-include-seo-urls", + "required": false, + "schema": { + "type": "boolean" + } + }, { "name": "sw-include-search-info", "in": "header", @@ -24992,13 +24902,24 @@ } ], "requestBody": { - "required": false, "content": { "application/json": { "schema": { "allOf": [ { - "$ref": "#/components/schemas/Criteria" + "properties": { + "search": { + "description": "Using the search parameter, the server performs a text search on all records based on their data model and weighting as defined in the entity definition using the SearchRanking flag.", + "type": "string" + } + }, + "type": "object" + }, + { + "$ref": "#/components/schemas/ProductListingCriteria" + }, + { + "$ref": "#/components/schemas/ProductListingFlags" } ] } @@ -25007,7 +24928,14 @@ }, "responses": { "200": { - "$ref": "#/components/responses/CountryListResponse" + "description": "Returns a product listing containing all products and additional fields to display a listing.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductListingResult" + } + } + } } }, "security": [ @@ -25018,12 +24946,11 @@ }, "get": { "tags": [ - "System & Context", - "Endpoints supporting Criteria " + "Product" ], - "summary": "Fetch countries", - "description": "Perform a filtered search for countries\n\n**Available Associations:**\n- `states` - States/provinces/regions within the country", - "operationId": "readCountryGet", + "summary": "Search for products", + "description": "Performs a search for products which can be used to display a product listing.", + "operationId": "searchPageGet", "parameters": [ { "name": "sw-language-id", @@ -25035,11 +24962,35 @@ "pattern": "^[0-9a-f]{32}$" } }, + { + "description": "Instructs Shopware to try and resolve SEO URLs for the given navigation item", + "in": "header", + "name": "sw-include-seo-urls", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "search", + "in": "query", + "description": "Using the search parameter, the server performs a text search on all records based on their data model and weighting as defined in the entity definition using the SearchRanking flag.", + "required": false, + "schema": { + "type": "string" + } + }, { "$ref": "#/components/parameters/criteriaPage" }, { - "$ref": "#/components/parameters/criteriaLimit" + "name": "limit", + "in": "query", + "description": "Number of items per result page. If not set, the limit will be set according to the default products per page, defined in the system settings.", + "schema": { + "type": "integer", + "minimum": 0 + } }, { "$ref": "#/components/parameters/criteriaTerm" @@ -25081,12 +25032,107 @@ "$ref": "#/components/parameters/criteriaExcludes" }, { - "$ref": "#/components/parameters/CompressedCriteria" + "name": "order", + "in": "query", + "description": "Specifies the sorting of the products by `availableSortings`. If not set, the default sorting will be set according to the shop settings. The available sorting options are sent within the response under the `availableSortings` key. In order to sort by a field, consider using the `sort` parameter from the listing criteria. Do not use both parameters together, as it might lead to unexpected results.", + "schema": { + "type": "string" + } + }, + { + "name": "p", + "in": "query", + "description": "Search result page", + "schema": { + "type": "integer", + "default": 1 + } + }, + { + "name": "manufacturer", + "in": "query", + "description": "Filter by manufacturers. List of manufacturer identifiers separated by a `|`.", + "schema": { + "type": "string" + } + }, + { + "name": "min-price", + "in": "query", + "description": "Filters by a minimum product price. Has to be lower than the `max-price` filter.", + "schema": { + "type": "integer", + "minimum": 0, + "default": 0 + } + }, + { + "name": "max-price", + "in": "query", + "description": "Filters by a maximum product price. Has to be higher than the `min-price` filter.", + "schema": { + "type": "integer", + "minimum": 0, + "default": 0 + } + }, + { + "name": "rating", + "in": "query", + "description": "Filter products with a minimum average rating.", + "schema": { + "type": "integer" + } + }, + { + "name": "shipping-free", + "in": "query", + "description": "Filters products that are marked as shipping-free.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "properties", + "in": "query", + "description": "Filters products by their properties. List of property identifiers separated by a `|`.", + "schema": { + "type": "string" + } + }, + { + "name": "reduce-aggregations", + "in": "query", + "description": "By sending the parameter `reduce-aggregations` , the post-filters that were applied by the customer, are also applied to the aggregations. This has the consequence that only values are returned in the aggregations that would lead to further filter results. This parameter is a flag, the value has no effect.", + "schema": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + { + "$ref": "#/components/parameters/noAggregations" + }, + { + "$ref": "#/components/parameters/onlyAggregations" } ], "responses": { "200": { - "$ref": "#/components/responses/CountryListResponse" + "description": "Returns a product listing containing all products and additional fields to display a listing.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProductListingResult" + } + } + } } }, "security": [ @@ -25096,128 +25142,137 @@ ] } }, - "/newsletter/confirm": { + "/customer/wishlist/add/{productId}": { "post": { "tags": [ - "Newsletter" + "Wishlist" + ], + "summary": "Add a product to a wishlist", + "description": "Adds a product to a customers wishlist.\n\n **Important constraints**\n\n * Anonymous (not logged-in) customers can not have wishlists.\n * The wishlist feature has to be activated.", + "operationId": "addProductOnWishlist", + "parameters": [ + { + "name": "productId", + "in": "path", + "description": "Identifier of the product to be added.", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + ], + "responses": { + "200": { + "description": "Returns a success response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + } + } + } + } + }, + "security": [ + { + "ApiKey": [], + "ContextToken": [] + } + ] + } + }, + "/customer/wishlist": { + "post": { + "tags": [ + "Wishlist", + "Endpoints supporting Criteria " + ], + "summary": "Fetch a wishlist", + "description": "Fetch a customer's wishlist. Products on the wishlist can be filtered using a criteria object.\n\n **Important constraints**\n\n * Anonymous (not logged-in) customers can not have wishlists.\n * The wishlist feature has to be activated.", + "operationId": "readCustomerWishlist", + "parameters": [ + { + "name": "sw-language-id", + "in": "header", + "description": "Instructs Shopware to return the response in the given language.", + "required": false, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "sw-include-search-info", + "in": "header", + "description": "Controls whether API search information is included in the response. Default is 1 (enabled), will be 0 (disabled) in the next major version.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "0", + "1" + ], + "default": "1" + } + } ], - "summary": "Confirm a newsletter registration", - "description": "You have to use the hash from the link sent out via email to confirm the user registration.", - "operationId": "confirmNewsletter", "requestBody": { - "required": true, + "required": false, "content": { "application/json": { "schema": { - "required": [ - "hash", - "em" - ], - "properties": { - "hash": { - "description": "Hash parameter from link the in the confirmation mail", - "type": "string" - }, - "em": { - "description": "Email hash parameter from the link in the confirmation mail", - "type": "string" + "allOf": [ + { + "$ref": "#/components/schemas/Criteria" } - }, - "type": "object" + ] } } } }, "responses": { "200": { - "description": "The newsletter confirmation was successful.", + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SuccessResponse" + "$ref": "#/components/schemas/WishlistLoadRouteResponse" } } } - }, - "400": { - "$ref": "#/components/responses/400" } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] } }, - "/newsletter/subscribe": { + "/customer/wishlist/merge": { "post": { "tags": [ - "Newsletter" + "Wishlist" ], - "summary": "Create or remove a newsletter subscription", - "description": "This route is used to create/remove/confirm a newsletter subscription.\n\nThe `option` property controls what should happen:\n* `direct`: The subscription is directly active and does not need a confirmation.\n* `subscribe`: An email will be send to the provided email address containing a link to the /newsletter/confirm route.\nThe subscription is only successful, if the /newsletter/confirm route is called with the generated hashes.\n* `unsubscribe`: The email address will be removed from the newsletter subscriptions.\n* `confirmSubscribe`: Confirms the newsletter subscription for the provided email address.", - "operationId": "subscribeToNewsletter", + "summary": "Create a wishlist for a customer", + "description": "Create a new wishlist for a logged in customer or extend the existing wishlist given a set of products.\n\n **Important constraints**\n\n * Anonymous (not logged-in) customers can not have wishlists.\n * A customer can only have a single wishlist.\n * The wishlist feature has to be activated.", + "operationId": "mergeProductOnWishlist", "requestBody": { "required": true, "content": { "application/json": { "schema": { - "required": [ - "email", - "option", - "storefrontUrl" - ], "properties": { - "email": { - "description": "Email address that will receive the confirmation and the newsletter.", - "type": "string" - }, - "option": { - "description": "Defines what should be done.", - "type": "string" - }, - "storefrontUrl": { - "description": "Url of the storefront of the shop. This will be used for generating the link to the /newsletter/confirm inside the confirm email.", - "type": "string" - }, - "salutationId": { - "description": "Identifier of the salutation.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "firstName": { - "description": "First name", - "type": "string" - }, - "lastName": { - "description": "Last name", - "type": "string" - }, - "street": { - "description": "Street", - "type": "string" - }, - "city": { - "description": "City", - "type": "string" - }, - "zipCode": { - "description": "Zip code", - "type": "string" - }, - "tags": { - "description": "Zip code", - "type": "string" - }, - "languageId": { - "description": "Identifier of the language.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "customFields": { - "description": "Custom field data that should be added to the subscription.", - "type": "string" + "productIds": { + "description": "List product id", + "type": "array", + "items": { + "description": "product id", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } } }, "type": "object" @@ -25227,76 +25282,47 @@ }, "responses": { "200": { - "description": "Success", + "description": "Returns a success response.", "content": { "application/json": { "schema": { - "required": [ - "success", - "status" - ], - "properties": { - "success": { - "description": "Indicates whether the subscribe request was successful.", - "type": "boolean" - }, - "status": { - "description": "The subscription status.", - "type": "string", - "enum": [ - "notSet", - "optIn", - "optOut", - "direct" - ] - } - }, - "type": "object" + "$ref": "#/components/schemas/SuccessResponse" } } } - }, - "400": { - "$ref": "#/components/responses/400" } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] } }, - "/newsletter/unsubscribe": { - "post": { + "/customer/wishlist/delete/{productId}": { + "delete": { "tags": [ - "Newsletter" + "Wishlist" ], - "summary": "Remove a newsletter subscription", - "description": "Removes a newsletter recipient from the mailing lists.", - "operationId": "unsubscribeToNewsletter", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "required": [ - "email" - ], - "properties": { - "email": { - "description": "Email address that should be removed from the mailing lists.", - "type": "string" - } - }, - "type": "object" - } + "summary": "Remove a product from a wishlist", + "description": "Removes a product from a customer's wishlist.\n\n **Important constraints**\n\n * Anonymous (not logged-in) customers can not have wishlists.\n * The wishlist feature has to be activated.", + "operationId": "deleteProductOnWishlist", + "parameters": [ + { + "name": "productId", + "in": "path", + "description": "The identifier of the product to be removed from the wishlist.", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" } } - }, + ], "responses": { "200": { - "description": "Unsubscribing was successful.", + "description": "Returns a success response indicating a successful removal.", "content": { "application/json": { "schema": { @@ -25305,50 +25331,47 @@ } } }, - "400": { - "$ref": "#/components/responses/400" + "404": { + "description": "The removal of the product failed. Probably because the product could not be found on the wishlist.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/failure" + } + } + } } }, "security": [ { - "ApiKey": [] + "ApiKey": [], + "ContextToken": [] } ] } }, - "/sitemap": { + "/cookie-groups": { "get": { "tags": [ - "Sitemap & Routes" - ], - "summary": "Fetch sitemaps", - "description": "Fetches a list of compressed sitemap files, which are often used by search engines.", - "operationId": "readSitemap", - "parameters": [ - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } + "Experimental", + "Cookies" ], + "summary": "Fetch all cookie groups", + "description": "Fetch all cookie groups available in the system with configuration hash. Experimental API, not part of our backwards compatibility promise, thus this API can introduce breaking changes at any time.", + "operationId": "readCookieGroups", "responses": { "200": { - "description": "Returns a list of available sitemaps.", + "description": "Successful response with a collection of cookie groups and their configuration hash.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Sitemap" - } + "$ref": "#/components/schemas/CookieRouteResponse" } } } + }, + "400": { + "$ref": "#/components/responses/400" } }, "security": [ @@ -25358,60 +25381,33 @@ ] } }, - "/sitemap/{filePath}": { + "/_info/openapi3.json": { "get": { "tags": [ - "Sitemap & Routes" + "System Info & Health Check" ], - "summary": "Download sitemap file", - "description": "Downloads the sitemap file from the configured sitemap storage.", - "operationId": "getSitemapFile", + "summary": "Get OpenAPI Specification", + "description": "Get information about the store API in OpenAPI format.", + "operationId": "api-info", "parameters": [ { - "name": "filePath", - "in": "path", - "description": "The path to the sitemap file", - "required": true, - "schema": { - "type": "string", - "pattern": ".*\\.(xml|gz)$" - } - }, - { - "name": "sw-language-id", - "in": "header", - "description": "Instructs Shopware to return the response in the given language.", - "required": false, + "name": "type", + "in": "query", + "description": "Type of the api", "schema": { "type": "string", - "pattern": "^[0-9a-f]{32}$" + "enum": [ + "jsonapi", + "json" + ] } } ], "responses": { "200": { - "description": "Returns the blob to download.", - "content": { - "application/xml": { - "schema": { - "type": "string", - "format": "binary" - } - }, - "application/gzip": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - } - }, - "security": [ - { - "ApiKey": [] + "$ref": "#/components/responses/OpenApi3" } - ] + } } } },