diff --git a/SwagCommercial-adminapi.json b/SwagCommercial-adminapi.json index 66e39d6..e4a7618 100644 --- a/SwagCommercial-adminapi.json +++ b/SwagCommercial-adminapi.json @@ -39592,81 +39592,100 @@ } } }, - "/api/_admin/licensing/features/{type}": { - "get": { + "/_action/invite-employee": { + "post": { "tags": [ - "Admin API", - "Licensing" - ], - "summary": "Get all the available commercial plugin features", - "description": "Get all the available commercial plugin features according to the installed license", - "operationId": "licensingFeatures", - "parameters": [ - { - "name": "type", - "in": "path", - "description": "Commercial feature type", - "required": true, - "schema": { - "type": "string" - } - } + "B2B Employee Management" ], - "responses": { - "200": { - "description": "The available feature data.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SwagCommercialFeature" + "summary": "Sends an invite email to employee", + "description": "This route is used to send an invite email to an employee", + "operationId": "inviteEmployee", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "description": "Id of the employee to invite", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "salesChannelId": { + "description": "Id of the sales channel through which the registration will be fulfilled.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" } - } + }, + "required": [ + "id" + ], + "type": "object" } } - }, - "401": { - "$ref": "#/components/responses/401" + } + }, + "responses": { + "204": { + "description": "No content response" } } } }, - "/_action/custom-price": { + "/_action/create-employee": { "post": { "tags": [ - "Bulk Operations" + "B2B Employee Management" ], - "summary": "Bulk edit custom prices", - "description": "An emulation of Sync API implementation", - "operationId": "customPriceImport", + "summary": "Creates an employee", + "description": "This route is used to create an employee", + "operationId": "createEmployee", + "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CustomPricingUpsertOperation" - }, - { - "$ref": "#/components/schemas/CustomPricingDeleteOperation" - } - ] - } + "properties": { + "firstName": { + "description": "First name of the new employee", + "type": "string" + }, + "lastName": { + "description": "Last name of the new employee", + "type": "string" + }, + "email": { + "description": "Email of the new employee", + "type": "string" + }, + "roleId": { + "description": "Id of the role of the new employee", + "type": "string" + } + }, + "type": "object" } } } }, "responses": { "200": { - "description": "Returns a JSON result containing information about the updated entities", + "description": "IDs of the created employees", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomPricingResponse" + "type": "object", + "properties": { + "data": { + "description": "Array of the created employee ids", + "type": "array", + "items": { + "type": "string" + } + } + } } } } @@ -39674,44 +39693,39 @@ } } }, - "/api/_admin/rule-builder-preview/{orderId}": { - "post": { + "/_action/update-employee": { + "patch": { "tags": [ - "Rule Preview" - ], - "summary": "Preview results of a rule evaluating an order", - "description": "Evaluate the conditions of a rule based on a pre-selected order.", - "operationId": "rulePreview", - "parameters": [ - { - "name": "orderId", - "in": "path", - "description": "Identifier of the order the preview should be generated for", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } + "B2B Employee Management" ], + "summary": "Updates an employee", + "description": "This route is used to update an employee", + "operationId": "updateEmployee", + "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "required": [ - "conditions" - ], "properties": { - "conditions": { - "description": "Array of nested rule condition payloads.", - "items": { - "type": "object" - }, - "type": "array" + "id": { + "description": "Id of the employee", + "type": "string" }, - "dateTime": { - "description": "A date and time to be mocked in the preview evaluation.", + "firstName": { + "description": "First name of the employee", + "type": "string" + }, + "lastName": { + "description": "Last name of the employee", + "type": "string" + }, + "email": { + "description": "Email of the employee", + "type": "string" + }, + "roleId": { + "description": "Id of the role of the employee", "type": "string" } }, @@ -39721,45 +39735,20 @@ } }, "responses": { - "200": { - "description": "Returns the results of the evaluated rule conditions as an object.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "properties": { - "match": { - "description": "Evaluation of the condition", - "type": "boolean" - }, - "name": { - "description": "The technical name of the condition", - "type": "string" - }, - "ruleReferenceId": { - "description": "The id of the corresponding rule_condition entity", - "type": "string" - } - }, - "type": "object" - } - } - } - } + "204": { + "description": "No content response" } } } }, - "/api/_admin/flow-builder/delayed/execute": { + "/_action/organization-unit/assign-employees": { "post": { "tags": [ - "Admin API", - "Delayed Flow Action" + "B2B Organization Units" ], - "summary": "Execute the delayed tasks.", - "description": "Execute the delayed tasks.", - "operationId": "delayedActions", + "summary": "Assign or unassign employees for an organization unit", + "description": "Applies a membership delta for a single organization unit: the given employees are added as members and the others are removed. Requires the ORGANIZATION_UNITS feature and license.", + "operationId": "assignOrganizationUnitEmployees", "requestBody": { "required": true, "content": { @@ -39767,14 +39756,28 @@ "schema": { "type": "object", "required": [ - "ids" + "organizationId" ], "properties": { - "ids": { - "description": "The identifiers for delayed tasks", + "organizationId": { + "description": "Identifier (UUID) of the organization unit whose members are changed.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "addedEmployeeIds": { + "description": "Identifiers (UUID) of the employees to add as members.", "type": "array", "items": { - "type": "string" + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + "removedEmployeeIds": { + "description": "Identifiers (UUID) of the employees to remove.", + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" } } } @@ -39783,95 +39786,71 @@ } }, "responses": { - "200": { - "description": "Execute the delayed tasks success.", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": false - } - } - } - }, - "401": { - "$ref": "#/components/responses/401", - "description": "Authorization information is missing or invalid." - }, - "500": { - "description": "The identifiers are missing or invalid, or the commercial license check failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/failure" - } - } - } + "204": { + "description": "The membership delta was applied" } } } }, - "/api/_admin/flow-sharing/download/{flowId}": { - "get": { + "/_action/organization-unit/assign-company-employees": { + "post": { "tags": [ - "Admin API", - "Flow Sharing" - ], - "summary": "Get flow data including reference data", - "description": "Generate flow data and its reference data to json", - "operationId": "flowSharingDownload", - "parameters": [ - { - "name": "flowId", - "in": "path", - "description": "Identifier of the flow to be exported.", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } + "B2B Organization Units" ], - "responses": { - "200": { - "description": "The flow data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FlowSharingResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/400", - "description": "The flow is invalid or could not be found." - }, - "401": { - "$ref": "#/components/responses/401" - }, - "500": { - "description": "The commercial license check failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/failure" + "summary": "Assign or unassign company-wide employees", + "description": "Applies a company-wide membership delta: the given accounts are added as company-wide employees of the customer and the others are removed. Requires the ORGANIZATION_UNITS feature and license.", + "operationId": "assignOrganizationUnitCompanyEmployees", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "customerId" + ], + "properties": { + "customerId": { + "description": "Identifier (UUID) of the business partner customer (company).", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "addedAccountIds": { + "description": "Identifiers (UUID) of the employee accounts to add company-wide.", + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + "removedAccountIds": { + "description": "Identifiers (UUID) of the employee accounts to remove.", + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } } } } } + }, + "responses": { + "204": { + "description": "The company-wide membership delta was applied" + } } } }, - "/api/_admin/flow-sharing/check-requirements": { + "/_action/organization-unit/assign-organization-units": { "post": { "tags": [ - "Admin API", - "Flow Sharing" + "B2B Organization Units" ], - "summary": "Check an environment requirements", - "description": "Check an environment requirements. For example, shopware version, apps and plugins installed", - "operationId": "flowSharingCheckRequirements", + "summary": "Assign or unassign organization units for an employee", + "description": "Applies an organization-unit delta for a single employee: the employee is added to the given organization units and removed from the others. Requires the ORGANIZATION_UNITS feature and license.", + "operationId": "assignEmployeeOrganizationUnits", "requestBody": { "required": true, "content": { @@ -39879,37 +39858,69 @@ "schema": { "type": "object", "required": [ - "requirements" + "employeeId" ], "properties": { - "requirements": { - "$ref": "#/components/schemas/FlowSharingRequirements" + "employeeId": { + "description": "Identifier (UUID) of the employee whose organization-unit memberships are changed.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "addedOrganizationIds": { + "description": "Identifiers (UUID) of the organization units to add the employee to.", + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + "removedOrganizationIds": { + "description": "Identifiers (UUID) of the organization units to remove the employee from.", + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } } } } } } }, + "responses": { + "204": { + "description": "The organization-unit delta was applied" + } + } + } + }, + "/_action/organization-unit/enabled-companies": { + "get": { + "tags": [ + "B2B Organization Units" + ], + "summary": "List companies that have organization units enabled", + "description": "Returns the identifiers of the business partner customers (companies) that currently have the OrganizationUnit feature enabled. Requires the ORGANIZATION_UNITS feature and license.", + "operationId": "getOrganizationUnitEnabledCompanies", "responses": { "200": { - "description": "Missing requirements.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FlowSharingCheckRequirementsResponse" - } - } - } - }, - "401": { - "$ref": "#/components/responses/401" - }, - "500": { - "description": "The commercial license check failed.", + "description": "Identifiers of the companies with organization units enabled", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/failure" + "type": "object", + "required": [ + "ids" + ], + "properties": { + "ids": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + } } } } @@ -39917,30 +39928,19 @@ } } }, - "/api/_action/order/{orderId}/order-return/{orderReturnId}/add-items": { + "/_proxy-quote/{salesChannelId}": { "post": { "tags": [ - "Admin API", - "Order Return Management" + "B2B Quote Management" ], - "summary": "Add items to order return", - "description": "The merchant is able to add items to an existing return.", - "operationId": "addItemsToReturn", + "summary": "Create a new quote", + "description": "This route is used to create a new quote from admin", + "operationId": "createQuoteFromAdmin", "parameters": [ { - "name": "orderId", - "in": "path", - "description": "Identifier of the order", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "orderReturnId", + "name": "salesChannelId", "in": "path", - "description": "Identifier of the order return", + "description": "Identifier of the sales channel to be fetched", "required": true, "schema": { "type": "string", @@ -39949,59 +39949,28 @@ } ], "requestBody": { - "required": true, + "required": false, "content": { "application/json": { "schema": { - "type": "object", - "required": [ - "orderLineItems" - ], "properties": { - "orderLineItems": { - "description": "A list of the order line items, which need to be added to return", - "type": "array", - "items": { - "type": "object", - "required": [ - "orderLineItemId", - "quantity" - ], - "properties": { - "orderLineItemId": { - "type": "string" - }, - "quantity": { - "type": "integer" - }, - "internalComment": { - "type": "string" - } - } - } + "customerId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" } - } + }, + "type": "object" } } } }, "responses": { - "204": { - "$ref": "#/components/responses/204", - "description": "The list of items added to return successful." - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "500": { - "description": "The commercial license check failed.", + "200": { + "description": "Quote entity", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/failure" + "$ref": "#/components/schemas/Quote" } } } @@ -40009,105 +39978,76 @@ } } }, - "/api/_proxy/order/{orderId}/return": { + "/_action/quote/{quoteId}/product/{productId}": { "post": { "tags": [ - "Admin API", - "Order Return Management" + "B2B Quote Management" ], - "summary": "Proxy Store-API to create an return", - "description": "Create a return", - "operationId": "createAReturn", + "summary": "Add product to quote", + "description": "This route is used to add a product to a quote from admin", + "operationId": "addProductToQuote", "parameters": [ { - "name": "orderId", + "name": "quoteId", "in": "path", - "description": "The order id of these order return line items", + "description": "Identifier of the quote to be fetched", "required": true, "schema": { "type": "string", "pattern": "^[0-9a-f]{32}$" } - } - ], + }, + { + "name": "productId", + "in": "path", + "description": "Identifier of the product to be fetched", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + ], "requestBody": { - "required": true, + "required": false, "content": { "application/json": { "schema": { - "type": "object", "properties": { - "lineItems": { - "description": "A list of the order line items payload", - "type": "array", - "items": { - "type": "object", - "properties": { - "orderLineItemId": { - "type": "string" - }, - "quantity": { - "type": "number" - }, - "internalComment": { - "type": "string" - } - } - } + "quantity": { + "type": "integer", + "pattern": "int32" } - } + }, + "type": "object" } } } }, "responses": { - "200": { - "description": "The return has created successfully.", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": true - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "500": { - "description": "The commercial license check failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/failure" - } - } - } + "204": { + "description": "No content response" } } } }, - "/api/_action/order-line-item/state/{toState}": { + "/_action/quote/{quoteId}/products": { "post": { "tags": [ - "Admin API", - "Order Return Management" + "B2B Quote Management" ], - "summary": "Transition a list of line-item of an order to a new state", - "description": "Changes the order's line-items state", - "operationId": "orderLineItemsTransition", + "summary": "Add products to quote", + "description": "This route is used to add multiple products to a quote from admin", + "operationId": "addProductsToQuote", "parameters": [ { - "name": "toState", + "name": "quoteId", "in": "path", - "description": "The technical name of the state machine state.", + "description": "Identifier of the quote to be fetched", "required": true, "schema": { - "type": "string" + "type": "string", + "pattern": "^[0-9a-f]{32}$" } } ], @@ -40116,149 +40056,162 @@ "content": { "application/json": { "schema": { - "type": "object", - "required": [ - "ids" - ], "properties": { - "ids": { - "description": "A list ID of the order line items, which need to be updated", + "products": { "type": "array", "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "properties": { + "productId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "quantity": { + "type": "integer", + "pattern": "int32", + "default": 1 + } + }, + "required": [ + "productId" + ], + "type": "object" } } - } + }, + "required": [ + "products" + ], + "type": "object" } } } }, "responses": { - "200": { - "description": "The updated products return state.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "500": { - "description": "The commercial license check failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/failure" - } - } - } + "204": { + "description": "No content response" } } } }, - "/api/_action/order-return-line-item/state/{toState}": { + "/_action/quote/{quoteId}/lineItem": { "post": { "tags": [ - "Admin API", - "Order Return Management" + "B2B Quote Management" ], - "summary": "Transition a list of the return's line-item to a new state", - "description": "Changes the state of the return's line-items", - "operationId": "orderReturnLineItemsTransition", + "summary": "Add custom line item to quote", + "description": "This route is used to add a custom line item to a quote from admin", + "operationId": "addCustomLineItemToQuote", "parameters": [ { - "name": "toState", + "name": "quoteId", "in": "path", - "description": "The technical name of the state machine state.", + "description": "Identifier of the quote to be fetched", "required": true, "schema": { - "type": "string" + "type": "string", + "pattern": "^[0-9a-f]{32}$" } } ], "requestBody": { - "required": true, + "required": false, "content": { "application/json": { "schema": { - "type": "object", - "required": [ - "ids" - ], "properties": { - "ids": { - "description": "A list ID of the order return line items, which need to be updated", + "identifier": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "type": { + "type": "string", + "default": "custom" + }, + "quantity": { + "type": "integer", + "pattern": "int32" + }, + "label": { + "type": "string", + "default": "null" + }, + "description": { + "type": "string", + "default": "null" + }, + "removable": { + "type": "boolean", + "default": true + }, + "stackable": { + "type": "boolean", + "default": true + }, + "payload": { "type": "array", "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "type": "object" + } + }, + "priceDefinition": { + "type": "array", + "items": { + "type": "object" } } - } + }, + "type": "object" } } } }, "responses": { - "200": { - "description": "The updated products return state.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "500": { - "description": "The commercial license check failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/failure" - } - } + "204": { + "description": "No content response" + } + } + } + }, + "/_action/quote/{quoteId}/recalculate": { + "post": { + "tags": [ + "B2B Quote Management" + ], + "summary": "Recalculate a quote", + "description": "This route is used to recalculate a quote", + "operationId": "recalculateQuote", + "parameters": [ + { + "name": "quoteId", + "in": "path", + "description": "Identifier of the quote to be fetched", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" } } + ], + "responses": { + "204": { + "description": "No content response" + } } } }, - "/api/_action/order/return/{orderReturnId}/calculate": { + "/_action/quote/{quoteId}/withdraw": { "post": { "tags": [ - "Admin API", - "Order Return Management" + "B2B Quote Management" ], - "summary": "Calculate Amount", - "description": "Calculate Amount", - "operationId": "calculateAmount", + "summary": "Withdraw a quote", + "description": "This route reverts pending customer changes and withdraws the quote from admin", + "operationId": "withdrawQuote", "parameters": [ { - "name": "orderReturnId", + "name": "quoteId", "in": "path", - "description": "The return id of order", + "description": "Identifier of the quote to withdraw", "required": true, "schema": { "type": "string", @@ -40268,42 +40221,86 @@ ], "responses": { "204": { - "$ref": "#/components/responses/204", - "description": "The return has calculate amount successfully." - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "500": { - "description": "The commercial license check failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/failure" - } + "description": "No content response" + } + } + } + }, + "/_action/quote/{quoteId}/comment": { + "post": { + "tags": [ + "B2B Quote Management" + ], + "summary": "Create a new comment", + "description": "This route is used to create a new comment from admin", + "operationId": "createComment", + "parameters": [ + { + "name": "quoteId", + "in": "path", + "description": "Identifier of the quote to be fetched", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "comment": { + "description": "Message content", + "type": "string" + }, + "state": { + "description": "Current quote state", + "type": "string" + } + }, + "type": "object" } } } + }, + "responses": { + "204": { + "description": "No content response" + } } } }, - "/api/_action/customer/{customerId}/turnover": { + "/_action/share-config/download/{entity}/{id}": { "get": { "tags": [ "Admin API", - "Order Return Management" + "Sharing", + "Download" ], - "summary": "Get turn over value of an customer", - "description": "Get turn over value of an customer", - "operationId": "customerTurnOver", + "summary": "Download a shared config", + "description": "This route is used to download a shared config", + "operationId": "downloadSharedConfig", "parameters": [ { - "name": "customerId", + "name": "entity", "in": "path", - "description": "The customer id you want to get the turnover", + "description": "Entity name of the shared config", + "required": true, + "schema": { + "type": "string", + "enum": [ + "flow", + "rule" + ] + } + }, + { + "name": "id", + "in": "path", + "description": "Id of the shared config", "required": true, "schema": { "type": "string", @@ -40313,264 +40310,290 @@ ], "responses": { "200": { - "description": "The updated status amount of return line items.", - "content": { - "application/json": { - "schema": { - "type": "number", - "format": "float" - } - } - } + "description": "Download the shared config" }, "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" + "description": "Entity is not supported. Use flow, rule" }, - "500": { - "description": "The commercial license check failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/failure" - } - } - } + "404": { + "description": "Entity with id is invalid or could not be found" } } } }, - "/api/_admin/property-extractor/extract": { + "/_action/share-config/upload/{entity}": { "post": { "tags": [ "Admin API", - "Property Extractor" + "Sharing", + "Upload" + ], + "summary": "Upload a shared config", + "description": "This route is used to upload a shared config", + "operationId": "uploadSharedConfig", + "parameters": [ + { + "name": "entity", + "in": "path", + "description": "Entity name of the shared config", + "required": true, + "schema": { + "type": "string", + "enum": [ + "flow", + "rule" + ] + } + } ], - "summary": "Extracts properties out of a product description.", - "description": "Extracts properties out of a product description.", - "operationId": "propertyExtractorExtract", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", - "required": [ - "description" - ], "properties": { - "description": { - "description": "Product description", - "type": "string" + "data": { + "description": "Data of the shared config (Entities related that have to be included)", + "type": "object" + }, + "references": { + "description": "References of the shared config (ID's of entities that are referenced)", + "type": "object" + }, + "requirements": { + "description": "Requirements of the shared config (ID's of entities that are required)", + "type": "object" + }, + "flow": { + "description": "Flow of the shared config", + "type": "object" + }, + "rule": { + "description": "Rule of the shared config", + "type": "object" } - } + }, + "required": [ + "data", + "references", + "requirements" + ] } } } }, "responses": { "200": { - "description": "The extracted properties.", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "properties": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "additionalProperties": true - } - } - } + "description": "Upload the shared config" }, "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "500": { - "description": "The commercial license check failed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/failure" - } - } - } + "description": "Entity is not supported. Use flow, rule" } } } }, - "/api/_action/generate-review-summary": { + "/_action/custom-price": { "post": { - "summary": "Generate review summaries for products", - "description": "Generate review summaries using the ReviewSummary service. Request body accepts mood, productId, salesChannelId and languageIds.", - "operationId": "generateReviewSummary", "tags": [ - "ReviewSummary" + "Bulk Operations" ], + "summary": "Bulk edit custom prices", + "description": "An emulation of Sync API implementation", + "operationId": "customPriceImport", "requestBody": { - "description": "Options for review summary generation.", "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Options" - }, - "example": { - "mood": "positive", - "productId": "019970d61cf071b481145788abdb2271", - "salesChannelId": "01988451220e7308bdda1b32e87db12f", - "languageIds": [ - "2fbb5fe2e29a4d70aa5854ce7ce3e20b" - ] - } - } - } - }, - "responses": { - "200": { - "description": "Array of generated summaries", - "content": { - "application/json": { - "schema": { + "type": "array", + "items": { "oneOf": [ { - "type": "array", - "items": { - "$ref": "#/components/schemas/ReviewSummaryItem" - } + "$ref": "#/components/schemas/CustomPricingUpsertOperation" }, { - "$ref": "#/components/schemas/ReviewSummaryByLanguage" + "$ref": "#/components/schemas/CustomPricingDeleteOperation" } ] - }, - "example": { - "2fbb5fe2e29a4d70aa5854ce7ce3e20b": "Review Summary of the product in the specified language." } } } - }, - "400": { - "description": "Bad request — validation or generation error (message returned as plain JSON string)", + } + }, + "responses": { + "200": { + "description": "Returns a JSON result containing information about the updated entities", "content": { "application/json": { "schema": { - "type": "string" - }, - "example": "License missing or generation failed:
" + "$ref": "#/components/schemas/CustomPricingResponse" + } } } } } } }, - "/_action/invite-employee": { + "/api/_admin/flow-builder/delayed/execute": { "post": { "tags": [ - "B2B Employee Management" + "Admin API", + "Delayed Flow Action" ], - "summary": "Sends an invite email to employee", - "description": "This route is used to send an invite email to an employee", - "operationId": "inviteEmployee", - "parameters": [], + "summary": "Execute the delayed tasks.", + "description": "Execute the delayed tasks.", + "operationId": "delayedActions", "requestBody": { "required": true, "content": { "application/json": { "schema": { - "properties": { - "id": { - "description": "Id of the employee to invite", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "salesChannelId": { - "description": "Id of the sales channel through which the registration will be fulfilled.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, + "type": "object", "required": [ - "id" + "ids" ], - "type": "object" + "properties": { + "ids": { + "description": "The identifiers for delayed tasks", + "type": "array", + "items": { + "type": "string" + } + } + } } } } }, "responses": { - "204": { - "description": "No content response" + "200": { + "description": "Execute the delayed tasks success.", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + }, + "401": { + "$ref": "#/components/responses/401", + "description": "Authorization information is missing or invalid." + }, + "500": { + "description": "The identifiers are missing or invalid, or the commercial license check failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/failure" + } + } + } } } } }, - "/_action/create-employee": { + "/api/_admin/flow-sharing/download/{flowId}": { + "get": { + "tags": [ + "Admin API", + "Flow Sharing" + ], + "summary": "Get flow data including reference data", + "description": "Generate flow data and its reference data to json", + "operationId": "flowSharingDownload", + "parameters": [ + { + "name": "flowId", + "in": "path", + "description": "Identifier of the flow to be exported.", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + ], + "responses": { + "200": { + "description": "The flow data.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FlowSharingResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400", + "description": "The flow is invalid or could not be found." + }, + "401": { + "$ref": "#/components/responses/401" + }, + "500": { + "description": "The commercial license check failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/failure" + } + } + } + } + } + } + }, + "/api/_admin/flow-sharing/check-requirements": { "post": { "tags": [ - "B2B Employee Management" + "Admin API", + "Flow Sharing" ], - "summary": "Creates an employee", - "description": "This route is used to create an employee", - "operationId": "createEmployee", - "parameters": [], + "summary": "Check an environment requirements", + "description": "Check an environment requirements. For example, shopware version, apps and plugins installed", + "operationId": "flowSharingCheckRequirements", "requestBody": { "required": true, "content": { "application/json": { "schema": { + "type": "object", + "required": [ + "requirements" + ], "properties": { - "firstName": { - "description": "First name of the new employee", - "type": "string" - }, - "lastName": { - "description": "Last name of the new employee", - "type": "string" - }, - "email": { - "description": "Email of the new employee", - "type": "string" - }, - "roleId": { - "description": "Id of the role of the new employee", - "type": "string" + "requirements": { + "$ref": "#/components/schemas/FlowSharingRequirements" } - }, - "type": "object" + } } } } }, "responses": { "200": { - "description": "IDs of the created employees", + "description": "Missing requirements.", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "data": { - "description": "Array of the created employee ids", - "type": "array", - "items": { - "type": "string" - } - } - } + "$ref": "#/components/schemas/FlowSharingCheckRequirementsResponse" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + }, + "500": { + "description": "The commercial license check failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/failure" } } } @@ -40578,418 +40601,559 @@ } } }, - "/_action/update-employee": { - "patch": { + "/_action/text-to-image/generate": { + "post": { "tags": [ - "B2B Employee Management" + "Text to Image" ], - "summary": "Updates an employee", - "description": "This route is used to update an employee", - "operationId": "updateEmployee", - "parameters": [], + "summary": "Generate images based on a textual prompt", + "description": "Generate images based on a textual prompt", + "operationId": "textToImageGenerate", "requestBody": { "required": true, "content": { "application/json": { "schema": { + "type": "object", "properties": { - "id": { - "description": "Id of the employee", - "type": "string" - }, - "firstName": { - "description": "First name of the employee", - "type": "string" - }, - "lastName": { - "description": "Last name of the employee", - "type": "string" - }, - "email": { - "description": "Email of the employee", - "type": "string" - }, - "roleId": { - "description": "Id of the role of the employee", - "type": "string" + "description": { + "description": "The textual prompt to describe what image to generate", + "type": "string", + "example": "Generate a warm and inviting ambience with soft lightning and neutral tones" } - }, - "type": "object" + } } } } }, "responses": { - "204": { - "description": "No content response" + "200": { + "description": "The base64 string representation of the generated image", + "content": { + "application/json": { + "schema": { + "type": "string", + "format": "byte", + "example": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAJZlWElmTU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgExAAIAAAARAAAAWodpAAQAAAABAAAAbAAAAAAAAABgAAAAAQAAAGAAAAABd3d3Lmlua3NjYXBlLm9yZwAAAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABCgAwAEAAAAAQAAABAAAAAAKwl1NwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAi1pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+d3d3Lmlua3NjYXBlLm9yZzwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj45NjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+OTY8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgryNKKqAAAC8klEQVQ4EV1Tz0tUURg99943zpvGcWaqaRTJ7CdGvzBtkVQYFLjxD3AlZFREUZv21q4f1CLBCLR2bdoVBVmbchGUiUQU0i8oNUEsG9/MOG/uvZ07Y2B9vPu473HP+c53vvsJuOi3Ev3CuO26IbtHAH1K4EBSIlvDf0rY2aQSo63JcOh6d82EO9dvrewXwoiV4Pphe1N7OJP2gaAETBV40tE6lihXCLQAAx96xVl+wZKEyaqRHbYjtg5HUjlrJkOhoSCvrC+J1voQ62q1jXnGWAvl16WkV5p/2phdc9QhKwT1Q3bQJnEquYjiZBH+mazGufYcGpMhhLDQFGqXEymJYqw24y/8nBtMrc6cFg13bZtVeB0rQ38JoXrTGtcO/0I8alAMqwKjXhVOBZAkJKsWyleLwVI7heGEiAG+ZrUUfmpnHgl+BEsSzFYBjH/38XIqypqBbNygZW1o9m2LKVMunPCorEPRnG8GcmfMojEVolQWTELvmHliyseBZ4mqkU6IM9X68uo00LPd63AEG1GGe2SEICfagf9GZcvXhghbrGwFryHkhffAj1zdRookmMxN3I0XBOYCj32vwpfowY6GIh51BGiKWLzKC4zxzG+q2LwKmAwULxDwRZCdYZzVI599KnBaq+E60Lk1j/td83hxKIeLTSE+069PLLtk8VWw/7dkHCdNgDAhEPm4BDzZH6BzS4BCSUKTy5kXUW7RZyswsxAJn/9IRd5O69ti7bDd63kYs2yjgmWVPED2e7sLOMLMriNlLVDickTOH7ZVR/2o+pkvtcu5Y+INwQMyCVWGKPJu2mZe3Z7xGI6PpPHwXS1mc16lI7GIca0trkpk1O/FcDCTyowt21UZoscqhS69AENjdFpCvicjOBOSV+BSY2i6NhVU29Y6ufBr7mkqnVm+yismMXvH3oDEeclhMizDp9u1TDHPNeN85b8He/ID3W3x/4bpX5Jd7EYfMQcJqad3iEvMNteY0daEHrq8PM6VSeQ4/wGOAT89rW8MpwAAAABJRU5ErkJggg==" + } + } + } } } } }, - "/_proxy-quote/{salesChannelId}": { + "/product-bundle/search": { "post": { "tags": [ - "B2B Quote Management" + "Product Bundles" ], - "summary": "Create a new quote", - "description": "This route is used to create a new quote from admin", - "operationId": "createQuoteFromAdmin", + "summary": "Product bundles search", + "operationId": "searchProductBundles", "parameters": [ { - "name": "salesChannelId", - "in": "path", - "description": "Identifier of the sales channel to be fetched", - "required": true, + "name": "sw-include-search-info", + "in": "header", "schema": { "type": "string", - "pattern": "^[0-9a-f]{32}$" - } + "enum": [ + "0", + "1" + ], + "default": "1" + }, + "description": "Set to 0 to suppress aggregations and search metadata." } ], "requestBody": { - "required": false, + "required": true, "content": { "application/json": { "schema": { - "properties": { - "customerId": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - "type": "object" + "$ref": "#/components/schemas/Criteria" } } } }, "responses": { "200": { - "description": "Quote entity", + "description": "Search response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Quote" + "type": "object", + "properties": { + "total": { + "type": "integer" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BundleProduct" + } + }, + "aggregations": { + "type": "object" + }, + "page": { + "type": "integer" + }, + "limit": { + "type": "integer" + } + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" } } } }, - "/_action/quote/{quoteId}/product/{productId}": { + "/product-bundle/search-ids": { "post": { "tags": [ - "B2B Quote Management" - ], - "summary": "Add product to quote", - "description": "This route is used to add a product to a quote from admin", - "operationId": "addProductToQuote", - "parameters": [ - { - "name": "quoteId", - "in": "path", - "description": "Identifier of the quote to be fetched", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "name": "productId", - "in": "path", - "description": "Identifier of the product to be fetched", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } + "Product Bundles" ], + "summary": "Search bundle identifiers", + "operationId": "searchProductBundleIds", "requestBody": { - "required": false, + "required": true, "content": { "application/json": { "schema": { - "properties": { - "quantity": { - "type": "integer", - "pattern": "int32" - } - }, - "type": "object" + "$ref": "#/components/schemas/Criteria" } } } }, "responses": { - "204": { - "description": "No content response" + "200": { + "description": "ID search response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "total": { + "type": "integer" + }, + "data": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + "states": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" } } } }, - "/_action/quote/{quoteId}/products": { - "post": { + "/product-bundle": { + "get": { "tags": [ - "B2B Quote Management" + "Product Bundles" ], - "summary": "Add products to quote", - "description": "This route is used to add multiple products to a quote from admin", - "operationId": "addProductsToQuote", + "summary": "List bundles", + "operationId": "getProductBundles", "parameters": [ { - "name": "quoteId", - "in": "path", - "description": "Identifier of the quote to be fetched", - "required": true, + "name": "limit", + "in": "query", "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "type": "integer" + } + }, + { + "name": "page", + "in": "query", + "schema": { + "type": "integer" } + }, + { + "name": "query", + "in": "query", + "schema": { + "type": "string" + }, + "description": "SwagQL query" } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "products": { - "type": "array", - "items": { - "properties": { - "productId": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "quantity": { - "type": "integer", - "pattern": "int32", - "default": 1 - } - }, - "required": [ - "productId" - ], - "type": "object" + "responses": { + "200": { + "description": "Bundle list", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "total": { + "type": "integer" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BundleProduct" + } + }, + "page": { + "type": "integer" + }, + "limit": { + "type": "integer" } } - }, - "required": [ - "products" - ], - "type": "object" + } } } - } - }, - "responses": { - "204": { - "description": "No content response" + }, + "401": { + "$ref": "#/components/responses/401" } } - } - }, - "/_action/quote/{quoteId}/lineItem": { + }, "post": { "tags": [ - "B2B Quote Management" + "Product Bundles" ], - "summary": "Add custom line item to quote", - "description": "This route is used to add a custom line item to a quote from admin", - "operationId": "addCustomLineItemToQuote", + "summary": "Create bundle(s)", + "operationId": "createProductBundles", "parameters": [ { - "name": "quoteId", - "in": "path", - "description": "Identifier of the quote to be fetched", - "required": true, + "name": "_response", + "in": "query", "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } + "type": "string" + }, + "description": "Set any value to return the created bundle payload(s) instead of 204.", + "allowEmptyValue": true } ], "requestBody": { - "required": false, + "required": true, "content": { "application/json": { "schema": { - "properties": { - "identifier": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "type": { - "type": "string", - "default": "custom" - }, - "quantity": { - "type": "integer", - "pattern": "int32" - }, - "label": { - "type": "string", - "default": "null" - }, - "description": { - "type": "string", - "default": "null" - }, - "removable": { - "type": "boolean", - "default": true - }, - "stackable": { - "type": "boolean", - "default": true + "oneOf": [ + { + "$ref": "#/components/schemas/BundleProductWrite" }, - "payload": { + { "type": "array", "items": { - "type": "object" + "$ref": "#/components/schemas/BundleProductWrite" } + } + ] + }, + "example": { + "name": "Starter kit", + "bundleItems": [ + { + "productId": "0190311a99bd4be3a456e9a72b4d1234", + "quantity": 1, + "min": 1, + "required": true }, - "priceDefinition": { - "type": "array", - "items": { - "type": "object" - } + { + "productId": "0190311cef8a4c5d880b20a2bfe96543", + "quantity": 1, + "min": 1, + "required": true } - }, - "type": "object" + ], + "visibilities": [ + { + "salesChannelId": "01902f89c8a94a629e102fa97d3a5678", + "visibility": 3 + } + ] } } } }, "responses": { "204": { - "description": "No content response" + "description": "Bundles created" + }, + "200": { + "description": "Created bundle payload(s) when _response is provided", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BundleProduct" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" } } - } - }, - "/_action/quote/{quoteId}/recalculate": { - "post": { + }, + "patch": { "tags": [ - "B2B Quote Management" + "Product Bundles" ], - "summary": "Recalculate a quote", - "description": "This route is used to recalculate a quote", - "operationId": "recalculateQuote", + "summary": "Update bundle(s)", + "operationId": "updateProductBundles", "parameters": [ { - "name": "quoteId", - "in": "path", - "description": "Identifier of the quote to be fetched", - "required": true, + "name": "_response", + "in": "query", "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } + "type": "string" + }, + "description": "Set any value to return the updated bundle payload(s).", + "allowEmptyValue": true } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/BundleProductWrite" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/BundleProductWrite" + } + } + ] + } + } + } + }, "responses": { "204": { - "description": "No content response" + "description": "Bundles updated" + }, + "200": { + "description": "Updated bundle payload(s) when _response is provided", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BundleProduct" + } + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" } } } }, - "/_action/quote/{quoteId}/withdraw": { - "post": { + "/product-bundle/{id}": { + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + ], + "get": { "tags": [ - "B2B Quote Management" + "Product Bundles" ], - "summary": "Withdraw a quote", - "description": "This route reverts pending customer changes and withdraws the quote from admin", - "operationId": "withdrawQuote", - "parameters": [ - { - "name": "quoteId", - "in": "path", - "description": "Identifier of the quote to withdraw", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "summary": "Bundle detail", + "operationId": "getProductBundle", + "responses": { + "200": { + "description": "Bundle detail", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/BundleProduct" + } + } + } + } } + }, + "404": { + "$ref": "#/components/responses/404" } + } + }, + "delete": { + "tags": [ + "Product Bundles" ], + "summary": "Delete bundle", + "operationId": "deleteProductBundle", "responses": { "204": { - "description": "No content response" + "description": "Bundle deleted" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" } } } }, - "/_action/quote/{quoteId}/comment": { + "/product-bundle/{id}/clone": { + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + ], "post": { "tags": [ - "B2B Quote Management" + "Product Bundles" ], - "summary": "Create a new comment", - "description": "This route is used to create a new comment from admin", - "operationId": "createComment", + "summary": "Clone bundle", + "operationId": "cloneProductBundle", "parameters": [ { - "name": "quoteId", - "in": "path", - "description": "Identifier of the quote to be fetched", - "required": true, + "name": "_response", + "in": "query", "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } + "type": "string" + }, + "description": "Set any value to return the cloned bundle payload instead of just the identifier.", + "allowEmptyValue": true } ], "requestBody": { - "required": true, + "required": false, "content": { "application/json": { "schema": { - "properties": { - "comment": { - "description": "Message content", - "type": "string" - }, - "state": { - "description": "Current quote state", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/BundleProductWrite" } } } }, "responses": { - "204": { - "description": "No content response" + "200": { + "description": "Clone response", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/BundleProduct" + } + } + } + ] + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" } } } }, - "/_action/text-to-image/generate": { + "/api/_admin/property-extractor/extract": { "post": { "tags": [ - "Text to Image" + "Admin API", + "Property Extractor" ], - "summary": "Generate images based on a textual prompt", - "description": "Generate images based on a textual prompt", - "operationId": "textToImageGenerate", + "summary": "Extracts properties out of a product description.", + "description": "Extracts properties out of a product description.", + "operationId": "propertyExtractorExtract", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", + "required": [ + "description" + ], "properties": { "description": { - "description": "The textual prompt to describe what image to generate", - "type": "string", - "example": "Generate a warm and inviting ambience with soft lightning and neutral tones" + "description": "Product description", + "type": "string" } } } @@ -40998,13 +41162,39 @@ }, "responses": { "200": { - "description": "The base64 string representation of the generated image", + "description": "The extracted properties.", "content": { "application/json": { "schema": { - "type": "string", - "format": "byte", - "example": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAJZlWElmTU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgExAAIAAAARAAAAWodpAAQAAAABAAAAbAAAAAAAAABgAAAAAQAAAGAAAAABd3d3Lmlua3NjYXBlLm9yZwAAAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABCgAwAEAAAAAQAAABAAAAAAKwl1NwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAi1pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+d3d3Lmlua3NjYXBlLm9yZzwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj45NjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+OTY8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgryNKKqAAAC8klEQVQ4EV1Tz0tUURg99943zpvGcWaqaRTJ7CdGvzBtkVQYFLjxD3AlZFREUZv21q4f1CLBCLR2bdoVBVmbchGUiUQU0i8oNUEsG9/MOG/uvZ07Y2B9vPu473HP+c53vvsJuOi3Ev3CuO26IbtHAH1K4EBSIlvDf0rY2aQSo63JcOh6d82EO9dvrewXwoiV4Pphe1N7OJP2gaAETBV40tE6lihXCLQAAx96xVl+wZKEyaqRHbYjtg5HUjlrJkOhoSCvrC+J1voQ62q1jXnGWAvl16WkV5p/2phdc9QhKwT1Q3bQJnEquYjiZBH+mazGufYcGpMhhLDQFGqXEymJYqw24y/8nBtMrc6cFg13bZtVeB0rQ38JoXrTGtcO/0I8alAMqwKjXhVOBZAkJKsWyleLwVI7heGEiAG+ZrUUfmpnHgl+BEsSzFYBjH/38XIqypqBbNygZW1o9m2LKVMunPCorEPRnG8GcmfMojEVolQWTELvmHliyseBZ4mqkU6IM9X68uo00LPd63AEG1GGe2SEICfagf9GZcvXhghbrGwFryHkhffAj1zdRookmMxN3I0XBOYCj32vwpfowY6GIh51BGiKWLzKC4zxzG+q2LwKmAwULxDwRZCdYZzVI599KnBaq+E60Lk1j/td83hxKIeLTSE+069PLLtk8VWw/7dkHCdNgDAhEPm4BDzZH6BzS4BCSUKTy5kXUW7RZyswsxAJn/9IRd5O69ti7bDd63kYs2yjgmWVPED2e7sLOMLMriNlLVDickTOH7ZVR/2o+pkvtcu5Y+INwQMyCVWGKPJu2mZe3Z7xGI6PpPHwXS1mc16lI7GIca0trkpk1O/FcDCTyowt21UZoscqhS69AENjdFpCvicjOBOSV+BSY2i6NhVU29Y6ufBr7mkqnVm+yismMXvH3oDEeclhMizDp9u1TDHPNeN85b8He/ID3W3x/4bpX5Jd7EYfMQcJqad3iEvMNteY0daEHrq8PM6VSeQ4/wGOAT89rW8MpwAAAABJRU5ErkJggg==" + "type": "object", + "properties": { + "properties": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "additionalProperties": true + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "500": { + "description": "The commercial license check failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/failure" } } } @@ -41012,14 +41202,77 @@ } } }, - "/_action/organization-unit/assign-employees": { + "/api/_admin/licensing/features/{type}": { + "get": { + "tags": [ + "Admin API", + "Licensing" + ], + "summary": "Get all the available commercial plugin features", + "description": "Get all the available commercial plugin features according to the installed license", + "operationId": "licensingFeatures", + "parameters": [ + { + "name": "type", + "in": "path", + "description": "Commercial feature type", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The available feature data.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SwagCommercialFeature" + } + } + } + } + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, + "/api/_action/order/{orderId}/order-return/{orderReturnId}/add-items": { "post": { "tags": [ - "B2B Organization Units" + "Admin API", + "Order Return Management" + ], + "summary": "Add items to order return", + "description": "The merchant is able to add items to an existing return.", + "operationId": "addItemsToReturn", + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "Identifier of the order", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "name": "orderReturnId", + "in": "path", + "description": "Identifier of the order return", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } ], - "summary": "Assign or unassign employees for an organization unit", - "description": "Applies a membership delta for a single organization unit: the given employees are added as members and the others are removed. Requires the ORGANIZATION_UNITS feature and license.", - "operationId": "assignOrganizationUnitEmployees", "requestBody": { "required": true, "content": { @@ -41027,28 +41280,29 @@ "schema": { "type": "object", "required": [ - "organizationId" + "orderLineItems" ], "properties": { - "organizationId": { - "description": "Identifier (UUID) of the organization unit whose members are changed.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "addedEmployeeIds": { - "description": "Identifiers (UUID) of the employees to add as members.", - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - "removedEmployeeIds": { - "description": "Identifiers (UUID) of the employees to remove.", + "orderLineItems": { + "description": "A list of the order line items, which need to be added to return", "type": "array", "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "type": "object", + "required": [ + "orderLineItemId", + "quantity" + ], + "properties": { + "orderLineItemId": { + "type": "string" + }, + "quantity": { + "type": "integer" + }, + "internalComment": { + "type": "string" + } + } } } } @@ -41058,48 +41312,72 @@ }, "responses": { "204": { - "description": "The membership delta was applied" + "$ref": "#/components/responses/204", + "description": "The list of items added to return successful." + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "500": { + "description": "The commercial license check failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/failure" + } + } + } } } } }, - "/_action/organization-unit/assign-company-employees": { + "/api/_proxy/order/{orderId}/return": { "post": { "tags": [ - "B2B Organization Units" + "Admin API", + "Order Return Management" + ], + "summary": "Proxy Store-API to create an return", + "description": "Create a return", + "operationId": "createAReturn", + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "The order id of these order return line items", + "required": true, + "schema": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } ], - "summary": "Assign or unassign company-wide employees", - "description": "Applies a company-wide membership delta: the given accounts are added as company-wide employees of the customer and the others are removed. Requires the ORGANIZATION_UNITS feature and license.", - "operationId": "assignOrganizationUnitCompanyEmployees", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", - "required": [ - "customerId" - ], "properties": { - "customerId": { - "description": "Identifier (UUID) of the business partner customer (company).", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "addedAccountIds": { - "description": "Identifiers (UUID) of the employee accounts to add company-wide.", - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - "removedAccountIds": { - "description": "Identifiers (UUID) of the employee accounts to remove.", + "lineItems": { + "description": "A list of the order line items payload", "type": "array", "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "type": "object", + "properties": { + "orderLineItemId": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "internalComment": { + "type": "string" + } + } } } } @@ -41108,20 +41386,56 @@ } }, "responses": { - "204": { - "description": "The company-wide membership delta was applied" + "200": { + "description": "The return has created successfully.", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "500": { + "description": "The commercial license check failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/failure" + } + } + } } } } }, - "/_action/organization-unit/assign-organization-units": { + "/api/_action/order-line-item/state/{toState}": { "post": { "tags": [ - "B2B Organization Units" + "Admin API", + "Order Return Management" + ], + "summary": "Transition a list of line-item of an order to a new state", + "description": "Changes the order's line-items state", + "operationId": "orderLineItemsTransition", + "parameters": [ + { + "name": "toState", + "in": "path", + "description": "The technical name of the state machine state.", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Assign or unassign organization units for an employee", - "description": "Applies an organization-unit delta for a single employee: the employee is added to the given organization units and removed from the others. Requires the ORGANIZATION_UNITS feature and license.", - "operationId": "assignEmployeeOrganizationUnits", "requestBody": { "required": true, "content": { @@ -41129,24 +41443,11 @@ "schema": { "type": "object", "required": [ - "employeeId" + "ids" ], "properties": { - "employeeId": { - "description": "Identifier (UUID) of the employee whose organization-unit memberships are changed.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "addedOrganizationIds": { - "description": "Identifiers (UUID) of the organization units to add the employee to.", - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - "removedOrganizationIds": { - "description": "Identifiers (UUID) of the organization units to remove the employee from.", + "ids": { + "description": "A list ID of the order line items, which need to be updated", "type": "array", "items": { "type": "string", @@ -41158,226 +41459,191 @@ } } }, - "responses": { - "204": { - "description": "The organization-unit delta was applied" - } - } - } - }, - "/_action/organization-unit/enabled-companies": { - "get": { - "tags": [ - "B2B Organization Units" - ], - "summary": "List companies that have organization units enabled", - "description": "Returns the identifiers of the business partner customers (companies) that currently have the OrganizationUnit feature enabled. Requires the ORGANIZATION_UNITS feature and license.", - "operationId": "getOrganizationUnitEnabledCompanies", "responses": { "200": { - "description": "Identifiers of the companies with organization units enabled", + "description": "The updated products return state.", "content": { "application/json": { "schema": { - "type": "object", - "required": [ - "ids" - ], - "properties": { - "ids": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "500": { + "description": "The commercial license check failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/failure" + } + } + } } } } }, - "/_action/share-config/download/{entity}/{id}": { - "get": { + "/api/_action/order-return-line-item/state/{toState}": { + "post": { "tags": [ "Admin API", - "Sharing", - "Download" + "Order Return Management" ], - "summary": "Download a shared config", - "description": "This route is used to download a shared config", - "operationId": "downloadSharedConfig", + "summary": "Transition a list of the return's line-item to a new state", + "description": "Changes the state of the return's line-items", + "operationId": "orderReturnLineItemsTransition", "parameters": [ { - "name": "entity", - "in": "path", - "description": "Entity name of the shared config", - "required": true, - "schema": { - "type": "string", - "enum": [ - "flow", - "rule" - ] - } - }, - { - "name": "id", + "name": "toState", "in": "path", - "description": "Id of the shared config", + "description": "The technical name of the state machine state.", "required": true, "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "type": "string" } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ids" + ], + "properties": { + "ids": { + "description": "A list ID of the order return line items, which need to be updated", + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + } + } + } + } + }, "responses": { "200": { - "description": "Download the shared config" + "description": "The updated products return state.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + } + } }, "400": { - "description": "Entity is not supported. Use flow, rule" + "$ref": "#/components/responses/400" }, - "404": { - "description": "Entity with id is invalid or could not be found" + "401": { + "$ref": "#/components/responses/401" + }, + "500": { + "description": "The commercial license check failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/failure" + } + } + } } } } }, - "/_action/share-config/upload/{entity}": { + "/api/_action/order/return/{orderReturnId}/calculate": { "post": { "tags": [ "Admin API", - "Sharing", - "Upload" + "Order Return Management" ], - "summary": "Upload a shared config", - "description": "This route is used to upload a shared config", - "operationId": "uploadSharedConfig", + "summary": "Calculate Amount", + "description": "Calculate Amount", + "operationId": "calculateAmount", "parameters": [ { - "name": "entity", + "name": "orderReturnId", "in": "path", - "description": "Entity name of the shared config", + "description": "The return id of order", "required": true, "schema": { "type": "string", - "enum": [ - "flow", - "rule" - ] + "pattern": "^[0-9a-f]{32}$" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "description": "Data of the shared config (Entities related that have to be included)", - "type": "object" - }, - "references": { - "description": "References of the shared config (ID's of entities that are referenced)", - "type": "object" - }, - "requirements": { - "description": "Requirements of the shared config (ID's of entities that are required)", - "type": "object" - }, - "flow": { - "description": "Flow of the shared config", - "type": "object" - }, - "rule": { - "description": "Rule of the shared config", - "type": "object" - } - }, - "required": [ - "data", - "references", - "requirements" - ] - } - } - } - }, "responses": { - "200": { - "description": "Upload the shared config" + "204": { + "$ref": "#/components/responses/204", + "description": "The return has calculate amount successfully." }, "400": { - "description": "Entity is not supported. Use flow, rule" + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "500": { + "description": "The commercial license check failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/failure" + } + } + } } } } }, - "/product-bundle/search": { - "post": { + "/api/_action/customer/{customerId}/turnover": { + "get": { "tags": [ - "Product Bundles" + "Admin API", + "Order Return Management" ], - "summary": "Product bundles search", - "operationId": "searchProductBundles", + "summary": "Get turn over value of an customer", + "description": "Get turn over value of an customer", + "operationId": "customerTurnOver", "parameters": [ { - "name": "sw-include-search-info", - "in": "header", + "name": "customerId", + "in": "path", + "description": "The customer id you want to get the turnover", + "required": true, "schema": { "type": "string", - "enum": [ - "0", - "1" - ], - "default": "1" - }, - "description": "Set to 0 to suppress aggregations and search metadata." - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Criteria" - } + "pattern": "^[0-9a-f]{32}$" } } - }, + ], "responses": { "200": { - "description": "Search response", + "description": "The updated status amount of return line items.", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "total": { - "type": "integer" - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BundleProduct" - } - }, - "aggregations": { - "type": "object" - }, - "page": { - "type": "integer" - }, - "limit": { - "type": "integer" - } - } + "type": "number", + "format": "float" } } } @@ -41387,144 +41653,103 @@ }, "401": { "$ref": "#/components/responses/401" + }, + "500": { + "description": "The commercial license check failed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/failure" + } + } + } } } } }, - "/product-bundle/search-ids": { + "/api/_action/generate-review-summary": { "post": { + "summary": "Generate review summaries for products", + "description": "Generate review summaries using the ReviewSummary service. Request body accepts mood, productId, salesChannelId and languageIds.", + "operationId": "generateReviewSummary", "tags": [ - "Product Bundles" + "ReviewSummary" ], - "summary": "Search bundle identifiers", - "operationId": "searchProductBundleIds", "requestBody": { + "description": "Options for review summary generation.", "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Criteria" + "$ref": "#/components/schemas/Options" + }, + "example": { + "mood": "positive", + "productId": "019970d61cf071b481145788abdb2271", + "salesChannelId": "01988451220e7308bdda1b32e87db12f", + "languageIds": [ + "2fbb5fe2e29a4d70aa5854ce7ce3e20b" + ] } } } }, "responses": { "200": { - "description": "ID search response", + "description": "Array of generated summaries", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "total": { - "type": "integer" - }, - "data": { + "oneOf": [ + { "type": "array", "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" + "$ref": "#/components/schemas/ReviewSummaryItem" } }, - "states": { - "type": "array", - "items": { - "type": "string" - } + { + "$ref": "#/components/schemas/ReviewSummaryByLanguage" } - } + ] + }, + "example": { + "2fbb5fe2e29a4d70aa5854ce7ce3e20b": "Review Summary of the product in the specified language." } } } }, "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" + "description": "Bad request — validation or generation error (message returned as plain JSON string)", + "content": { + "application/json": { + "schema": { + "type": "string" + }, + "example": "License missing or generation failed:
" + } + } } } } }, - "/product-bundle": { - "get": { + "/api/_admin/rule-builder-preview/{orderId}": { + "post": { "tags": [ - "Product Bundles" + "Rule Preview" ], - "summary": "List bundles", - "operationId": "getProductBundles", + "summary": "Preview results of a rule evaluating an order", + "description": "Evaluate the conditions of a rule based on a pre-selected order.", + "operationId": "rulePreview", "parameters": [ { - "name": "limit", - "in": "query", - "schema": { - "type": "integer" - } - }, - { - "name": "page", - "in": "query", + "name": "orderId", + "in": "path", + "description": "Identifier of the order the preview should be generated for", + "required": true, "schema": { - "type": "integer" + "type": "string", + "pattern": "^[0-9a-f]{32}$" } - }, - { - "name": "query", - "in": "query", - "schema": { - "type": "string" - }, - "description": "SwagQL query" - } - ], - "responses": { - "200": { - "description": "Bundle list", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "total": { - "type": "integer" - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BundleProduct" - } - }, - "page": { - "type": "integer" - }, - "limit": { - "type": "integer" - } - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/401" - } - } - }, - "post": { - "tags": [ - "Product Bundles" - ], - "summary": "Create bundle(s)", - "operationId": "createProductBundles", - "parameters": [ - { - "name": "_response", - "in": "query", - "schema": { - "type": "string" - }, - "description": "Set any value to return the created bundle payload(s) instead of 204.", - "allowEmptyValue": true } ], "requestBody": { @@ -41532,279 +41757,98 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/BundleProductWrite" - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/BundleProductWrite" - } - } - ] - }, - "example": { - "name": "Starter kit", - "bundleItems": [ - { - "productId": "0190311a99bd4be3a456e9a72b4d1234", - "quantity": 1, - "min": 1, - "required": true - }, - { - "productId": "0190311cef8a4c5d880b20a2bfe96543", - "quantity": 1, - "min": 1, - "required": true - } + "required": [ + "conditions" ], - "visibilities": [ - { - "salesChannelId": "01902f89c8a94a629e102fa97d3a5678", - "visibility": 3 - } - ] - } - } - } - }, - "responses": { - "204": { - "description": "Bundles created" - }, - "200": { - "description": "Created bundle payload(s) when _response is provided", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BundleProduct" - } - } - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - } - } - }, - "patch": { - "tags": [ - "Product Bundles" - ], - "summary": "Update bundle(s)", - "operationId": "updateProductBundles", - "parameters": [ - { - "name": "_response", - "in": "query", - "schema": { - "type": "string" - }, - "description": "Set any value to return the updated bundle payload(s).", - "allowEmptyValue": true - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/BundleProductWrite" - }, - { - "type": "array", + "properties": { + "conditions": { + "description": "Array of nested rule condition payloads.", "items": { - "$ref": "#/components/schemas/BundleProductWrite" - } + "type": "object" + }, + "type": "array" + }, + "dateTime": { + "description": "A date and time to be mocked in the preview evaluation.", + "type": "string" } - ] + }, + "type": "object" } } } }, "responses": { - "204": { - "description": "Bundles updated" - }, "200": { - "description": "Updated bundle payload(s) when _response is provided", + "description": "Returns the results of the evaluated rule conditions as an object.", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BundleProduct" + "type": "array", + "items": { + "properties": { + "match": { + "description": "Evaluation of the condition", + "type": "boolean" + }, + "name": { + "description": "The technical name of the condition", + "type": "string" + }, + "ruleReferenceId": { + "description": "The id of the corresponding rule_condition entity", + "type": "string" } - } + }, + "type": "object" } } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" } } } }, - "/product-bundle/{id}": { - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } - ], + "/_action/translation/meta": { "get": { "tags": [ - "Product Bundles" + "Translation Management" ], - "summary": "Bundle detail", - "operationId": "getProductBundle", + "summary": "Get translation meta information", + "description": "Returns translation meta information that is independent of the configured locales: the built-in locales, the community translation and documentation URLs and the completeness threshold.", + "operationId": "translationMeta", "responses": { "200": { - "description": "Bundle detail", + "description": "The translation meta information.", "content": { "application/json": { "schema": { "type": "object", "properties": { - "data": { - "$ref": "#/components/schemas/BundleProduct" - } - } - } - } - } - }, - "404": { - "$ref": "#/components/responses/404" - } - } - }, - "delete": { - "tags": [ - "Product Bundles" - ], - "summary": "Delete bundle", - "operationId": "deleteProductBundle", - "responses": { - "204": { - "description": "Bundle deleted" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - } - } - } - }, - "/product-bundle/{id}/clone": { - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } - ], - "post": { - "tags": [ - "Product Bundles" - ], - "summary": "Clone bundle", - "operationId": "cloneProductBundle", - "parameters": [ - { - "name": "_response", - "in": "query", - "schema": { - "type": "string" - }, - "description": "Set any value to return the cloned bundle payload instead of just the identifier.", - "allowEmptyValue": true - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BundleProductWrite" - } - } - } - }, - "responses": { - "200": { - "description": "Clone response", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "type": "object", - "required": [ - "id" - ], - "properties": { - "id": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } + "builtInLocales": { + "description": "Locale codes shipped with the platform and excluded from the community translation download.", + "type": "array", + "items": { + "type": "string" } }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/BundleProduct" - } - } + "communityTranslationsUrl": { + "description": "URL of the community translation platform, or null if not configured.", + "type": "string", + "format": "uri" + }, + "documentationUrlSnippetKey": { + "description": "Admin snippet key that resolves to the localized translation documentation URL, or null if not configured.", + "type": "string" + }, + "completenessThreshold": { + "description": "Minimum translation completeness in percent considered sufficient.", + "type": "integer" } - ] + } } } } - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" } } } @@ -71634,6 +71678,10 @@ "active": { "type": "boolean" }, + "translationAutoUpdate": { + "description": "Whether the scheduled task keeps the community translations of this language up to date. Enabled by default and only applied to linked languages.", + "type": "boolean" + }, "customFields": { "type": "object" }, @@ -72435,6 +72483,10 @@ "active": { "type": "boolean" }, + "translationAutoUpdate": { + "description": "Whether the scheduled task keeps the community translations of this language up to date. Enabled by default and only applied to linked languages.", + "type": "boolean" + }, "customFields": { "type": "object" }, @@ -101679,325 +101731,333 @@ "description": "This is used to toggle the language configurations, say between DE and DE-DE for instance.", "type": "boolean" }, - "customFields": { - "type": "object" - }, - "createdAt": { - "type": "string", - "format": "date-time", - "readOnly": true - }, - "updatedAt": { - "type": "string", - "format": "date-time", - "readOnly": true - }, - "relationships": { - "properties": { - "salesChannel": { - "properties": { - "links": { - "type": "object", - "properties": { - "related": { - "type": "string", - "format": "uri-reference", - "example": "/sales-channel-domain/e8e8de5eb87653b51534931bb0714095/salesChannel" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "sales_channel" - }, - "id": { - "type": "string", - "pattern": "^[0-9a-f]{32}$", - "example": "ec3712a84143b57e0db620eaac6e55b8" - } - } - } - }, - "type": "object" - }, - "language": { - "properties": { - "links": { - "type": "object", - "properties": { - "related": { - "type": "string", - "format": "uri-reference", - "example": "/sales-channel-domain/e8e8de5eb87653b51534931bb0714095/language" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "language" - }, - "id": { - "type": "string", - "pattern": "^[0-9a-f]{32}$", - "example": "8512ae7d57b1396273f76fe6ed341a23" - } - } - } - }, - "type": "object" - }, - "currency": { - "properties": { - "links": { - "type": "object", - "properties": { - "related": { - "type": "string", - "format": "uri-reference", - "example": "/sales-channel-domain/e8e8de5eb87653b51534931bb0714095/currency" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "currency" - }, - "id": { - "type": "string", - "pattern": "^[0-9a-f]{32}$", - "example": "1af0389838508d7016a9841eb6273962" - } - } - } - }, - "type": "object" - }, - "snippetSet": { - "properties": { - "links": { - "type": "object", - "properties": { - "related": { - "type": "string", - "format": "uri-reference", - "example": "/sales-channel-domain/e8e8de5eb87653b51534931bb0714095/snippetSet" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "snippet_set" - }, - "id": { - "type": "string", - "pattern": "^[0-9a-f]{32}$", - "example": "543af5fd1912efc00742534f621046d3" - } - } - } - }, - "type": "object" - }, - "salesChannelDefaultHreflang": { - "properties": { - "links": { - "type": "object", - "properties": { - "related": { - "type": "string", - "format": "uri-reference", - "example": "/sales-channel-domain/e8e8de5eb87653b51534931bb0714095/salesChannelDefaultHreflang" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "sales_channel" - }, - "id": { - "type": "string", - "pattern": "^[0-9a-f]{32}$", - "example": "8d7b798a77667d73c422fb222603234c" - } - } - } - }, - "type": "object" - }, - "productExports": { - "properties": { - "links": { - "type": "object", - "properties": { - "related": { - "type": "string", - "format": "uri-reference", - "example": "/sales-channel-domain/e8e8de5eb87653b51534931bb0714095/productExports" - } - } - }, - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "product_export" - }, - "id": { - "type": "string", - "example": "2cd8793787cda582174c0fc329fbc377" - } - } - } - } - }, - "type": "object" - } - }, - "type": "object" - } - }, - "type": "object" - } - ] - }, - "SalesChannelDomain": { - "description": "Added since version: 6.0.0.0", - "required": [ - "id", - "url", - "salesChannelId", - "languageId", - "currencyId", - "snippetSetId" - ], - "properties": { - "id": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "url": { - "description": "URL of the sales channel domain.", - "type": "string" - }, - "salesChannelId": { - "description": "Unique identity of sales channel.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "languageId": { - "description": "Unique identity of language used.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "currencyId": { - "description": "Unique identity of currency.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "snippetSetId": { - "description": "Unique identity of snippet set.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "measurementUnits": { - "$ref": "#/components/schemas/MeasurementUnits" - }, - "hreflangUseOnlyLocale": { - "description": "This is used to toggle the language configurations, say between DE and DE-DE for instance.", - "type": "boolean" - }, - "customFields": { - "type": "object" - }, - "createdAt": { - "type": "string", - "format": "date-time", - "readOnly": true - }, - "updatedAt": { - "type": "string", - "format": "date-time", - "readOnly": true - }, - "salesChannel": { - "$ref": "#/components/schemas/SalesChannel" - }, - "language": { - "$ref": "#/components/schemas/Language" - }, - "currency": { - "$ref": "#/components/schemas/Currency" - }, - "snippetSet": { - "$ref": "#/components/schemas/SnippetSet" - }, - "salesChannelDefaultHreflang": { - "$ref": "#/components/schemas/SalesChannel" - }, - "productExports": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProductExport" - } - } - }, - "type": "object" - }, - "SalesChannelFileJsonApi": { - "description": "Added since version: 6.7.12.0", - "allOf": [ - { - "$ref": "#/components/schemas/resource" - }, - { - "required": [ - "id", - "salesChannelId", - "fileFamily", - "fileName", - "enabled" - ], - "properties": { - "id": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "salesChannelId": { - "description": "Unique identity of the configured sales channel.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "fileFamily": { - "description": "File family below Resources/views/files.", - "type": "string" - }, - "fileName": { - "description": "Normalized public file path without a leading slash.", - "type": "string" - }, - "enabled": { - "description": "Controls whether the file is served for this sales channel.", + "isExternalStorefront": { + "description": "Whether the domain points to an external (headless) storefront.", "type": "boolean" }, - "templateOverrides": { + "customFields": { + "type": "object" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "relationships": { + "properties": { + "salesChannel": { + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "type": "string", + "format": "uri-reference", + "example": "/sales-channel-domain/e8e8de5eb87653b51534931bb0714095/salesChannel" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "sales_channel" + }, + "id": { + "type": "string", + "pattern": "^[0-9a-f]{32}$", + "example": "ec3712a84143b57e0db620eaac6e55b8" + } + } + } + }, + "type": "object" + }, + "language": { + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "type": "string", + "format": "uri-reference", + "example": "/sales-channel-domain/e8e8de5eb87653b51534931bb0714095/language" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "language" + }, + "id": { + "type": "string", + "pattern": "^[0-9a-f]{32}$", + "example": "8512ae7d57b1396273f76fe6ed341a23" + } + } + } + }, + "type": "object" + }, + "currency": { + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "type": "string", + "format": "uri-reference", + "example": "/sales-channel-domain/e8e8de5eb87653b51534931bb0714095/currency" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "currency" + }, + "id": { + "type": "string", + "pattern": "^[0-9a-f]{32}$", + "example": "1af0389838508d7016a9841eb6273962" + } + } + } + }, + "type": "object" + }, + "snippetSet": { + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "type": "string", + "format": "uri-reference", + "example": "/sales-channel-domain/e8e8de5eb87653b51534931bb0714095/snippetSet" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "snippet_set" + }, + "id": { + "type": "string", + "pattern": "^[0-9a-f]{32}$", + "example": "543af5fd1912efc00742534f621046d3" + } + } + } + }, + "type": "object" + }, + "salesChannelDefaultHreflang": { + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "type": "string", + "format": "uri-reference", + "example": "/sales-channel-domain/e8e8de5eb87653b51534931bb0714095/salesChannelDefaultHreflang" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "sales_channel" + }, + "id": { + "type": "string", + "pattern": "^[0-9a-f]{32}$", + "example": "8d7b798a77667d73c422fb222603234c" + } + } + } + }, + "type": "object" + }, + "productExports": { + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "type": "string", + "format": "uri-reference", + "example": "/sales-channel-domain/e8e8de5eb87653b51534931bb0714095/productExports" + } + } + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "product_export" + }, + "id": { + "type": "string", + "example": "2cd8793787cda582174c0fc329fbc377" + } + } + } + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" + } + ] + }, + "SalesChannelDomain": { + "description": "Added since version: 6.0.0.0", + "required": [ + "id", + "url", + "salesChannelId", + "languageId", + "currencyId", + "snippetSetId" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "url": { + "description": "URL of the sales channel domain.", + "type": "string" + }, + "salesChannelId": { + "description": "Unique identity of sales channel.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "languageId": { + "description": "Unique identity of language used.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "currencyId": { + "description": "Unique identity of currency.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "snippetSetId": { + "description": "Unique identity of snippet set.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "measurementUnits": { + "$ref": "#/components/schemas/MeasurementUnits" + }, + "hreflangUseOnlyLocale": { + "description": "This is used to toggle the language configurations, say between DE and DE-DE for instance.", + "type": "boolean" + }, + "isExternalStorefront": { + "description": "Whether the domain points to an external (headless) storefront.", + "type": "boolean" + }, + "customFields": { + "type": "object" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "salesChannel": { + "$ref": "#/components/schemas/SalesChannel" + }, + "language": { + "$ref": "#/components/schemas/Language" + }, + "currency": { + "$ref": "#/components/schemas/Currency" + }, + "snippetSet": { + "$ref": "#/components/schemas/SnippetSet" + }, + "salesChannelDefaultHreflang": { + "$ref": "#/components/schemas/SalesChannel" + }, + "productExports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProductExport" + } + } + }, + "type": "object" + }, + "SalesChannelFileJsonApi": { + "description": "Added since version: 6.7.12.0", + "allOf": [ + { + "$ref": "#/components/schemas/resource" + }, + { + "required": [ + "id", + "salesChannelId", + "fileFamily", + "fileName", + "enabled" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "salesChannelId": { + "description": "Unique identity of the configured sales channel.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "fileFamily": { + "description": "File family below Resources/views/files.", + "type": "string" + }, + "fileName": { + "description": "Normalized public file path without a leading slash.", + "type": "string" + }, + "enabled": { + "description": "Controls whether the file is served for this sales channel.", + "type": "boolean" + }, + "templateOverrides": { "type": "object" }, "createdAt": { @@ -103670,6 +103730,10 @@ "description": "Created SEO URL template can be made usable by setting `isValid` to true.", "type": "boolean" }, + "isHeadless": { + "description": "Whether the template applies to headless (API type) sales channels. Derived from the route family.", + "type": "boolean" + }, "customFields": { "type": "object" }, @@ -103755,6 +103819,10 @@ "description": "Created SEO URL template can be made usable by setting `isValid` to true.", "type": "boolean" }, + "isHeadless": { + "description": "Whether the template applies to headless (API type) sales channels. Derived from the route family.", + "type": "boolean" + }, "customFields": { "type": "object" }, @@ -116222,1450 +116290,1490 @@ }, "type": "object" }, - "ConsentState": { + "CustomPricingDeleteOperation": { "type": "object", "required": [ - "name", - "scopeName", - "identifier", - "status", - "actor", - "updatedAt", - "acceptedUntil" + "action", + "payload" ], "properties": { - "name": { - "type": "string", - "description": "The name of the consent" - }, - "scopeName": { - "type": "string", - "description": "The scope of the consent that defines how the identifier is resolved" - }, - "identifier": { - "type": "string", - "description": "The resolved identifier of the consent" - }, - "status": { + "action": { + "description": "A specific verb defining what operation should be actioned for a specific data record", "type": "string", "enum": [ - "unset", - "accepted", - "revoked" - ], - "description": "The current status of the consent (requested, accepted, revoked)" - }, - "actor": { - "type": [ - "string", - "null" - ], - "description": "The user name of the user who made the consent decision. null if never updated" - }, - "updatedAt": { - "type": [ - "string", - "null" - ], - "format": "date-time", - "description": "The timestamp of when the consent status was last updated. null if never updated" - }, - "acceptedUntil": { - "type": [ - "string", - "null" - ], - "format": "date-time", - "description": "The timestamp until when the consent is accepted. null if never accepted" - }, - "acceptedRevision": { - "type": [ - "string", - "null" - ], - "description": "The accepted consent revision. null unless the consent is currently accepted for a revision-aware consent." - }, - "latestRevision": { - "type": [ - "string", - "null" - ], - "description": "The current latest revision defined for the consent. null when the consent does not use revisions." - } - } - }, - "SalesChannelFileConfiguration": { - "type": "object", - "required": [ - "id", - "enabled", - "templateOverrides" - ], - "properties": { - "id": { - "description": "Identifier of the sales_channel_file row.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "enabled": { - "description": "Whether this file is served publicly for the sales channel.", - "type": "boolean" - }, - "templateOverrides": { - "description": "Merchant-provided Twig overrides keyed by Twig namespace. The reserved `user_provided_content` key stores plain text for the dedicated append block when supported by the template chain.", - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "SalesChannelFileDescriptor": { - "type": "object", - "required": [ - "fileFamily", - "fileName", - "contentType", - "configuration" - ], - "properties": { - "fileFamily": { - "description": "File family below `Resources/views/files`.", - "type": "string", - "maxLength": 64 - }, - "fileName": { - "description": "Public file path without a leading slash.", - "type": "string", - "examples": [ - "llms.txt", - ".well-known/ucp.json" - ] - }, - "contentType": { - "description": "Detected response content type for the public file.", - "type": "string", - "examples": [ - "text/plain; charset=utf-8" + "delete" ] }, - "configuration": { - "description": "Stored sales-channel configuration for this file, or null when it has not been configured yet.", - "oneOf": [ - { - "$ref": "#/components/schemas/SalesChannelFileConfiguration" - }, - { - "type": "null" - } - ] + "payload": { + "description": "Contains a list of changesets for an entity. If the action type is `delete`,\n a list of identifiers can be provided.", + "type": "array", + "items": { + "anyOf": [ + { + "title": "productIds", + "type": "array", + "description": "An array of product entity UUIDs", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "title": "customerIds", + "type": "array", + "description": "An array of customer entity UUIDs", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + { + "title": "customerGroupIds", + "type": "array", + "description": "An array of customerGroup entity UUIDs", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + } + ] + } } } }, - "SalesChannelFileDetail": { + "CustomPricingPrice": { "type": "object", + "description": "An extended schema for the Custom Price 'price' column (as opposed to ProductPrice 'price' column)", "required": [ - "fileFamily", - "fileName", - "templatePath", - "contentType", - "templates", - "supportsUserProvidedContent", - "configuration" + "quantityStart", + "price" ], "properties": { - "fileFamily": { - "description": "File family below `Resources/views/files`.", - "type": "string", - "maxLength": 64 - }, - "fileName": { - "description": "Public file path without a leading slash.", - "type": "string", - "examples": [ - "llms.txt", - ".well-known/ucp.json" - ] - }, - "templatePath": { - "description": "Relative Twig template path used for rendering.", - "type": "string", - "examples": [ - "files/agentic/llms.txt.twig" - ] + "quantityStart": { + "type": "integer", + "format": "int64" }, - "contentType": { - "description": "Detected response content type for the public file.", - "type": "string", - "examples": [ - "text/plain; charset=utf-8" - ] + "quantityEnd": { + "type": "integer", + "format": "int64", + "minimum": 1 }, - "templates": { - "description": "Contributing Twig templates in resolved inheritance order.", + "price": { "type": "array", "items": { - "$ref": "#/components/schemas/SalesChannelFileTemplate" - } - }, - "supportsUserProvidedContent": { - "description": "Whether the template chain exposes the `user_provided_content` block for simple appended merchant notes.", - "type": "boolean" - }, - "configuration": { - "description": "Stored sales-channel configuration for this file, or null when it has not been configured yet.", - "oneOf": [ - { - "$ref": "#/components/schemas/SalesChannelFileConfiguration" - }, - { - "type": "null" + "type": "object", + "description": "This field should house all the normal facets of the `product_price`.`price` column", + "required": [ + "currencyId", + "gross", + "net", + "linked" + ], + "properties": { + "currencyId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "gross": { + "type": "number", + "minimum": 0 + }, + "net": { + "type": "number", + "minimum": 0 + }, + "linked": { + "type": "boolean" + }, + "listPrice": { + "type": "object", + "properties": { + "gross": { + "type": "number", + "minimum": 0 + }, + "net": { + "type": "number", + "minimum": 0 + }, + "linked": { + "type": "boolean" + } + } + }, + "regulationPrice": { + "type": "object", + "properties": { + "gross": { + "type": "number", + "minimum": 0 + }, + "net": { + "type": "number", + "minimum": 0 + }, + "linked": { + "type": "boolean" + } + } + } } - ] - } - } - }, - "SalesChannelFileDetailResponse": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "$ref": "#/components/schemas/SalesChannelFileDetail" + } } } }, - "SalesChannelFileListResponse": { + "CustomPricingResponse": { "type": "object", "required": [ + "success", "data" ], "properties": { + "success": { + "type": "boolean" + }, "data": { "type": "array", "items": { - "$ref": "#/components/schemas/SalesChannelFileDescriptor" - } - } - } - }, - "SalesChannelFilePreviewRequest": { - "type": "object", - "required": [ - "fileName" - ], - "properties": { - "fileName": { - "description": "Public file path without a leading slash.", - "type": "string", - "examples": [ - "llms.txt", - ".well-known/ucp.json" - ] - }, - "templateOverrides": { - "description": "Unsaved Twig overrides keyed by Twig namespace. The reserved `user_provided_content` key stores plain text for the dedicated append block when supported by the template chain.", - "type": "object", - "additionalProperties": { - "type": "string" + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "type": "object", + "required": [ + "entities", + "errors" + ], + "properties": { + "entities": { + "type": "array", + "maxItems": 1, + "items": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + } + }, + "errors": { + "type": "array", + "description": "A detailed error list addressing specific points in which sync payload does not meet system expectations (data types, structure etc.)", + "items": { + "type": "string" + } + } + } + } + }, + "extensions": { + "type": "array", + "items": { + "type": "object" + } + } + } } } } }, - "SalesChannelFilePreviewResponse": { - "type": "object", - "required": [ - "fileName", - "contentType", - "content" - ], - "properties": { - "fileName": { - "description": "Public file path without a leading slash.", - "type": "string" - }, - "contentType": { - "description": "Detected content type of the rendered file.", - "type": "string" - }, - "content": { - "description": "Rendered file content.", - "type": "string" - } - } - }, - "SalesChannelFileTemplate": { + "CustomPricingUpsertOperation": { "type": "object", "required": [ - "twigNamespace", - "templateName", - "templateContent", - "role" + "action", + "payload" ], "properties": { - "twigNamespace": { - "description": "Twig namespace that contributed the template, for example `Framework` or a plugin name.", - "type": "string" - }, - "templateName": { - "description": "Resolved Twig template name.", - "type": "string", - "examples": [ - "@Framework/files/agentic/llms.txt.twig" - ] - }, - "templateContent": { - "description": "Original source template content. Administration clients can use this as the default text when editing a template override.", - "type": "string" - }, - "role": { - "description": "Whether this source provides the base template or extends another source in the resolved template chain.", + "action": { + "description": "A specific verb defining what operation should be actioned for a specific data record", "type": "string", "enum": [ - "base", - "extension" + "upsert" ] - } - } - }, - "Criteria": { - "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" - }, - "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" - } - ] - } }, - "sort": { + "payload": { + "description": "Contains a list of changesets for an entity. If the action type is `delete`,\n a list of identifiers can be provided.", "type": "array", - "description": "Sorting in the search result.", "items": { "type": "object", + "required": [ + "productId", + "prices" + ], + "description": "A definition almost symmetric with Sync API payload", "properties": { - "field": { - "type": "string" + "id": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" }, - "order": { - "type": "string" + "productVersionId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" }, - "naturalSorting": { - "type": "boolean" - } - }, - "required": [ - "field" - ] - } - }, - "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" + "productId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" }, - { - "$ref": "#/components/schemas/EqualsFilter" + "customerId": { + "type": "string", + "description": "This parameter should be specified, or 'customerGroupId', not both", + "pattern": "^[0-9a-f]{32}$" }, - { - "$ref": "#/components/schemas/MultiNotFilter" + "customerGroupId": { + "type": "string", + "description": "This parameter should be specified, or 'customerId', not both", + "pattern": "^[0-9a-f]{32}$" }, - { - "$ref": "#/components/schemas/RangeFilter" - } - ] - } - }, - "associations": { - "$ref": "#/components/schemas/Associations" - }, - "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" + "price": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomPricingPrice" + } + } + } } + } + } + }, + "FlowSharingResponse": { + "type": "object", + "required": [ + "flow" + ], + "properties": { + "flow": { + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "name": { + "type": "string" + }, + "eventName": { + "type": "string" + }, + "priority": { + "type": "integer" + }, + "invalid": { + "type": "boolean" + }, + "active": { + "type": "boolean" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "customFields": { + "type": [ + "object", + "null" + ], + "additionalProperties": true + }, + "sequences": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true, + "properties": { + "id": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "parentId": { + "type": [ + "string", + "null" + ], + "pattern": "^[0-9a-f]{32}$" + }, + "ruleId": { + "type": [ + "string", + "null" + ], + "pattern": "^[0-9a-f]{32}$" + }, + "appFlowActionId": { + "type": [ + "string", + "null" + ], + "pattern": "^[0-9a-f]{32}$" + }, + "displayGroup": { + "type": [ + "integer", + "null" + ] + }, + "position": { + "type": "integer" + }, + "actionName": { + "type": [ + "string", + "null" + ] + }, + "config": { + "type": [ + "object", + "array", + "null" + ] + }, + "trueCase": { + "type": "boolean" + }, + "customFields": { + "type": [ + "object", + "null" + ], + "additionalProperties": true + } + } + } + } + }, + "additionalProperties": true }, - "fields": { - "type": "array", - "description": "Fields which should be returned in the search result.", - "items": { - "type": "string", - "description": "Name of a field" + "dataIncluded": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": true } }, - "total-count-mode": { - "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" - ] - }, - "ids": { - "type": "array", - "description": "List of ids to search for", - "items": { - "type": "string" + "referenceIncluded": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": true } }, - "includes": { - "$ref": "#/components/schemas/Includes" - }, - "excludes": { - "$ref": "#/components/schemas/Excludes" - } - } - }, - "Includes": { - "description": "Specify the fields that should be returned for the given entities. Object key needs to be the entity name, and the list of fields needs to be the value. Fields will not be included, if they are also specified in the excludes. Note that the include fields will only be stripped on the API-Level, consider using the `fields` parameter for performance reasons. To return a DAL extension, list the extension by its name (for example `myExtension`); the `extensions` wrapper is then kept automatically. Listing the keyword `extensions` returns all extensions.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" + "requirements": { + "$ref": "#/components/schemas/FlowSharingRequirements" } } }, - "Excludes": { - "description": "Specify the fields that should be excluded from the response for the given entities. Object key needs to be the entity name, and the list of fields needs to be the value. Note that the exclude fields will only be stripped on the API-Level, consider using the `fields` parameter for performance reasons. Use an extension name to remove a single extension, or the keyword `extensions` to remove all of them.", + "FlowSharingRequirements": { "type": "object", "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Filters": { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/SimpleFilter" - }, - { - "$ref": "#/components/schemas/EqualsFilter" - }, + "oneOf": [ { - "$ref": "#/components/schemas/MultiNotFilter" + "type": "string" }, { - "$ref": "#/components/schemas/RangeFilter" + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } } ] } }, - "SimpleFilter": { - "anyOf": [ + "FlowSharingCheckRequirementsResponse": { + "oneOf": [ { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "contains", - "equalsAny", - "prefix", - "suffix" - ] - }, - "field": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": [ - "type", - "field", - "value" - ] + "type": "array", + "maxItems": 0 }, { "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "equalsAny", - "equalsAll" - ] - }, - "field": { - "type": "string" - }, - "value": { - "type": "array", - "items": { + "additionalProperties": { + "oneOf": [ + { "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } } - } - }, - "required": [ - "type", - "field", - "value" - ] + ] + } } ] }, - "EqualsFilter": { + "BundleItemProduct": { "type": "object", + "required": [ + "id", + "productNumber" + ], "properties": { - "type": { + "id": { "type": "string", - "enum": [ - "equals" - ] + "pattern": "^[0-9a-f]{32}$" }, - "field": { + "name": { "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" - ] + "productNumber": { + "type": "string" }, - "operator": { - "type": "string", - "enum": [ - "and", - "or", - "nor", - "nand" - ] + "active": { + "type": "boolean" }, - "queries": { - "$ref": "#/components/schemas/Filters" + "available": { + "type": "boolean" + }, + "apiAlias": { + "type": "string", + "readOnly": true } - }, - "required": [ - "type", - "queries" - ] + } }, - "RangeFilter": { + "BundleProductWrite": { "type": "object", + "required": [ + "name", + "bundleItems" + ], "properties": { - "type": { + "productNumber": { "type": "string", - "enum": [ - "range" - ] + "description": "Optional. Omit to let the server reserve a number." }, - "field": { + "name": { "type": "string" }, - "parameters": { - "type": "object", - "properties": { - "gte": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "gt": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "lte": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "lt": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - } - } - } - }, - "required": [ - "type", - "field", - "parameters" - ] - }, - "Sort": { - "type": "object", - "properties": { - "field": { + "description": { "type": "string" }, - "order": { + "coverId": { "type": "string", - "enum": [ - "ASC", - "DESC" - ] + "pattern": "^[0-9a-f]{32}$" }, - "naturalSorting": { - "type": "boolean" + "bundleItems": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BundleItem" + }, + "minItems": 2 }, - "type": { - "type": "string" + "bundleDiscounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BundleDiscount" + } + }, + "visibilities": { + "type": "array", + "items": { + "type": "object", + "required": [ + "salesChannelId" + ], + "properties": { + "salesChannelId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "visibility": { + "type": "integer", + "enum": [ + 1, + 2, + 3 + ] + } + } + } + }, + "customFields": { + "type": "object" } - }, - "required": [ - "field", - "order" - ] - }, - "Associations": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/Criteria" } }, - "Aggregation": { - "anyOf": [ + "BundleProduct": { + "allOf": [ { - "$ref": "#/components/schemas/AggregationMetrics" + "$ref": "#/components/schemas/BundleProductWrite" }, { - "title": "AggregationEntity", - "allOf": [ - { - "$ref": "#/components/schemas/AggregationEntity" + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" }, - { - "$ref": "#/components/schemas/SubAggregations" - } - ] - }, - { - "title": "AggregationFilter", - "allOf": [ - { - "$ref": "#/components/schemas/AggregationFilter" + "active": { + "type": "boolean" }, - { - "$ref": "#/components/schemas/SubAggregations" - } - ] - }, - { - "title": "AggregationTerms", - "allOf": [ - { - "$ref": "#/components/schemas/AggregationTerms" + "available": { + "type": "boolean" }, - { - "$ref": "#/components/schemas/SubAggregations" - } - ] - }, - { - "title": "AggregationHistogram", - "allOf": [ - { - "$ref": "#/components/schemas/AggregationHistogram" + "description": { + "type": "string" }, - { - "$ref": "#/components/schemas/SubAggregations" - } - ] - }, - { - "title": "AggregationRange", - "allOf": [ - { - "$ref": "#/components/schemas/AggregationRange" + "price": { + "type": "array", + "items": { + "type": "object", + "properties": { + "currencyId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "net": { + "type": "number" + }, + "gross": { + "type": "number" + }, + "linked": { + "type": "boolean" + } + } + } }, - { - "$ref": "#/components/schemas/SubAggregations" - } - ] - } - ] - }, - "SubAggregations": { - "type": "object", - "properties": { - "aggregation": { - "anyOf": [ - { - "$ref": "#/components/schemas/AggregationMetrics" + "stock": { + "type": "integer" }, - { - "$ref": "#/components/schemas/AggregationEntity" + "sales": { + "type": "integer" }, - { - "$ref": "#/components/schemas/AggregationFilter" + "customSearchKeywords": { + "type": "array", + "items": { + "type": "string" + } }, - { - "$ref": "#/components/schemas/AggregationTerms" + "cover": { + "type": "object" }, - { - "$ref": "#/components/schemas/AggregationHistogram" + "media": { + "type": "array", + "items": { + "type": "object" + } }, - { - "$ref": "#/components/schemas/AggregationRange" + "apiAlias": { + "type": "string", + "readOnly": true } - ] + } } - } + ] }, - "AggregationEntity": { - "title": "AggregationEntity", + "SwagCommercialFeature": { "type": "object", + "required": [ + "code", + "name", + "description", + "enabled", + "dependencies" + ], "properties": { - "name": { - "description": "Give your aggregation an identifier, so you can find it easier", + "code": { "type": "string" }, - "type": { - "description": "The type of aggregation", - "type": "string", - "enum": [ - "entity" - ] - }, - "field": { - "description": "The field you want to aggregate over.", + "name": { "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", + "description": { "type": "string" }, + "enabled": { + "type": "boolean" + }, "type": { - "description": "The type of aggregation", - "type": "string", - "enum": [ - "filter" + "type": [ + "string", + "null" ] }, - "filter": { + "dependencies": { "type": "array", "items": { - "$ref": "#/components/schemas/Filters" + "type": "string" } } - }, - "required": [ - "name", - "type", - "filter" - ] + } }, - "AggregationTerms": { - "title": "AggregationTerms", + "Options": { "type": "object", "properties": { - "name": { - "description": "Give your aggregation an identifier, so you can find it easier", - "type": "string" - }, - "type": { - "description": "The type of aggregation", + "mood": { "type": "string", "enum": [ - "terms" - ] + "positive", + "neutral" + ], + "description": "Tone/mood to guide summary generation (optional)." }, - "field": { - "description": "The field you want to aggregate over.", - "type": "string" + "productId": { + "type": "string", + "description": "Product UUID (hex) identifying the product to generate summaries for. This field is required." }, - "limit": { - "description": "The number of terms to return", - "type": "number" + "salesChannelId": { + "type": "string", + "description": "Sales channel UUID (hex) used to scope generation and locale/context resolution. This field is required." }, - "sort": { + "languageIds": { "type": "array", - "description": "Sorting the aggregation result.", "items": { - "$ref": "#/components/schemas/Sort" + "type": "string" + }, + "description": "Array of language UUIDs (hex). Provided language IDs will be mapped to locale codes server-side; supply this OR `locales`." + }, + "locales": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of locale codes (e.g. `de-DE`, `en-GB`). Supply this OR `languageIds`. At least one of `languageIds` or `locales` must be present." + }, + "length": { + "type": "integer", + "description": "Desired length of the generated summary in number of characters (optional, default: 300)." + }, + "reviews": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "content": { + "type": "string" + }, + "points": { + "type": "string" + } + }, + "required": [ + "title", + "content", + "points" + ], + "description": "Array of review objects containing title, content, and points (optional, if not provided, reviews will be fetched from product)." } } }, "required": [ - "name", - "type", - "field" - ] + "productId", + "salesChannelId" + ], + "anyOf": [ + { + "required": [ + "languageIds" + ] + }, + { + "required": [ + "locales" + ] + } + ], + "additionalProperties": true, + "description": "Options object passed to Review Summary generation." }, - "AggregationHistogram": { - "title": "AggregationHistogram", + "ReviewSummaryItem": { "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": [ - "histogram" - ] - }, - "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", + "languageId": { "type": "string" }, - "timeZone": { - "description": "The timezone of the histogram", + "summary": { "type": "string" } }, - "required": [ - "name", - "type", - "field" - ] + "additionalProperties": true }, - "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)", + "ReviewSummaryByLanguage": { + "type": "object", + "additionalProperties": { + "type": "string", + "description": "Generated summary for the language id" + }, + "description": "Map of languageId to generated summary string." + }, + "Criteria": { "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": { - "name": { - "description": "Give your aggregation an identifier, so you can find it easier", - "type": "string" + "page": { + "description": "Search result page", + "type": "integer" }, - "type": { - "description": "The type of aggregation", - "type": "string", - "enum": [ - "range" - ] + "limit": { + "description": "Number of items per result page", + "type": "integer" }, - "field": { - "description": "The field you want to aggregate over.", - "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" + } + ] + } }, - "ranges": { - "description": "The ranges of the aggregation", + "sort": { "type": "array", + "description": "Sorting in the search result.", "items": { "type": "object", + "properties": { + "field": { + "type": "string" + }, + "order": { + "type": "string" + }, + "naturalSorting": { + "type": "boolean" + } + }, + "required": [ + "field" + ] + } + }, + "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": [ { - "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" - ] + "$ref": "#/components/schemas/SimpleFilter" }, { - "type": "object", - "title": "From only", - "properties": { - "from": { - "type": "string", - "description": "The lower bound of the range" - } - }, - "required": [ - "from" - ] + "$ref": "#/components/schemas/EqualsFilter" }, { - "type": "object", - "title": "To only", - "properties": { - "to": { - "type": "string", - "description": "The upper bound of the range" - } - }, - "required": [ - "to" - ] + "$ref": "#/components/schemas/MultiNotFilter" + }, + { + "$ref": "#/components/schemas/RangeFilter" } ] } - } - }, - "required": [ - "name", - "type", - "field", - "ranges" - ] - }, - "AggregationMetrics": { - "type": "object", - "properties": { - "name": { - "type": "string" }, - "type": { + "associations": { + "$ref": "#/components/schemas/Associations" + }, + "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" + } + }, + "fields": { + "type": "array", + "description": "Fields which should be returned in the search result.", + "items": { + "type": "string", + "description": "Name of a field" + } + }, + "total-count-mode": { + "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": [ - "avg", - "count", - "max", - "min", - "stats", - "sum" + "none", + "exact", + "next-pages" ] }, - "field": { + "ids": { + "type": "array", + "description": "List of ids to search for", + "items": { + "type": "string" + } + }, + "includes": { + "$ref": "#/components/schemas/Includes" + }, + "excludes": { + "$ref": "#/components/schemas/Excludes" + } + } + }, + "Includes": { + "description": "Specify the fields that should be returned for the given entities. Object key needs to be the entity name, and the list of fields needs to be the value. Fields will not be included, if they are also specified in the excludes. Note that the include fields will only be stripped on the API-Level, consider using the `fields` parameter for performance reasons. To return a DAL extension, list the extension by its name (for example `myExtension`); the `extensions` wrapper is then kept automatically. Listing the keyword `extensions` returns all extensions.", + "type": "object", + "additionalProperties": { + "type": "array", + "items": { "type": "string" } - }, - "required": [ - "name", - "type", - "field" - ] + } }, - "infoConfigResponse": { + "Excludes": { + "description": "Specify the fields that should be excluded from the response for the given entities. Object key needs to be the entity name, and the list of fields needs to be the value. Note that the exclude fields will only be stripped on the API-Level, consider using the `fields` parameter for performance reasons. Use an extension name to remove a single extension, or the keyword `extensions` to remove all of them.", "type": "object", - "properties": { - "version": { - "type": "string", - "description": "Shopware version." - }, - "shopId": { - "type": "string", - "description": "Unique shop identifier." - }, - "versionRevision": { - "type": "string", - "description": "Shopware version revision (build hash/revision)." - }, - "adminWorker": { - "type": "object", - "description": "Admin worker feature flags and transport configuration.", - "properties": { - "enableAdminWorker": { - "type": "boolean", - "description": "Whether the admin background worker is enabled." - }, - "enableQueueStatsWorker": { - "type": "boolean", - "description": "Whether the queue statistics worker is enabled. Deprecated: This property will be removed in v6.8.0. The increment-based message queue statistics are deprecated.", - "deprecated": true - }, - "enableNotificationWorker": { - "type": "boolean", - "description": "Whether the notification worker is enabled." - }, - "transports": { - "type": "array", - "description": "Configured Symfony Messenger transports used by the admin workers.", - "items": { - "type": "string" - } - } + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Filters": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/SimpleFilter" }, - "additionalProperties": false - }, - "bundles": { - "type": "object", - "description": "Active extension assets (plugins & apps) keyed by technical name.", - "additionalProperties": { - "oneOf": [ - { - "type": "object", - "description": "Plugin bundle asset descriptor.", - "properties": { - "type": { - "type": "string", - "enum": [ - "plugin" - ] - }, - "css": { - "type": "array", - "items": { - "type": "string", - "description": "URL to a CSS asset." - } - }, - "js": { - "type": "array", - "items": { - "type": "string", - "description": "URL to a JS asset." - } - }, - "baseUrl": { - "type": [ - "string", - "null" - ], - "description": "Base URL to a (micro frontend) admin entry point, if provided." - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "description": "App bundle descriptor.", - "properties": { - "type": { - "type": "string", - "enum": [ - "app" - ] - }, - "name": { - "type": "string" - }, - "active": { - "type": "boolean" - }, - "integrationId": { - "type": "string", - "description": "Lowercase hex integration id." - }, - "baseUrl": { - "type": "string" - }, - "version": { - "type": "string" - }, - "permissions": { - "type": "object", - "description": "Grouped privileges: key = privilege scope, value = list of entities.", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "css": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Optional CSS assets if provided." - }, - "js": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Optional JS assets if provided." - } - }, - "required": [ - "type", - "name", - "active", - "integrationId", - "baseUrl", - "version", - "permissions" - ], - "additionalProperties": false - } - ] + { + "$ref": "#/components/schemas/EqualsFilter" + }, + { + "$ref": "#/components/schemas/MultiNotFilter" + }, + { + "$ref": "#/components/schemas/RangeFilter" } - }, - "settings": { + ] + } + }, + "SimpleFilter": { + "anyOf": [ + { "type": "object", - "description": "Selected environment and feature settings consumed by the administration.", "properties": { - "enableUrlFeature": { - "type": "boolean", - "description": "State of the URL upload feature." + "type": { + "type": "string", + "enum": [ + "contains", + "equalsAny", + "prefix", + "suffix" + ] }, - "appUrlReachable": { - "type": "boolean", - "description": "Whether configured APP_URL is externally reachable." + "field": { + "type": "string" }, - "appsRequireAppUrl": { - "type": "boolean", - "description": "True if at least one installed app requires a reachable APP_URL." + "value": { + "type": "string" + } + }, + "required": [ + "type", + "field", + "value" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "equalsAny", + "equalsAll" + ] }, - "firstMigrationDate": { - "type": [ - "string", - "null" - ], - "description": "Timestamp of the first executed migration in ISO-8601 UTC format, used for Product Analytics consent eligibility." + "field": { + "type": "string" }, - "private_allowed_extensions": { + "value": { "type": "array", - "description": "Allowed file extensions for private filesystem uploads.", "items": { "type": "string" } - }, - "private_allowed_mime_types_by_extension": { - "type": "object", - "description": "Known MIME types for each allowed private filesystem upload extension.", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "enableHtmlSanitizer": { - "type": "boolean", - "description": "Whether HTML sanitizer is enabled." - }, - "enableStagingMode": { - "type": "boolean", - "description": "Whether staging mode banner is enabled." - }, - "disableExtensionManagement": { - "type": "boolean", - "description": "True if runtime extension management is disabled." - }, - "presignedUploadSupported": { - "type": "boolean", - "description": "Whether presigned S3 upload is available. True when presigned upload is enabled and an S3 filesystem is configured." } }, "required": [ - "firstMigrationDate" - ], - "additionalProperties": false - }, - "inAppPurchases": { - "type": "array", - "description": "In-app purchase meta data (structure may vary).", - "items": { - "type": "object", - "description": "Purchase entry.", - "additionalProperties": true - } + "type", + "field", + "value" + ] } - }, - "required": [ - "version", - "shopId", - "versionRevision", - "adminWorker", - "bundles", - "settings", - "inAppPurchases" - ], - "additionalProperties": false + ] }, - "Price": { + "EqualsFilter": { "type": "object", - "description": "Price object", "properties": { - "currencyId": { - "description": "Unique identity of the associated currency.", + "type": { "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "gross": { - "description": "Gross price for the associated currency.", - "type": "number" - }, - "net": { - "description": "Net price for the associated currency.", - "type": "number" - }, - "linked": { - "description": "Whether gross and net prices are linked through the tax configuration.", - "type": "boolean" - }, - "percentage": { - "description": "Discount percentage relative to the list price for the gross and net amounts. `null` when no list price is set.", - "type": [ - "object", - "null" - ], - "properties": { - "gross": { - "description": "Discount percentage relative to the gross list price.", - "type": "number" - }, - "net": { - "description": "Discount percentage relative to the net list price.", - "type": "number" - } - }, - "required": [ - "gross", - "net" + "enum": [ + "equals" ] }, - "listPrice": { - "description": "Reference list price for displaying discounts.", - "type": "object", - "properties": { - "currencyId": { - "description": "Unique identity of the associated currency.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "gross": { - "description": "Gross list price for the associated currency.", - "type": "number" - }, - "net": { - "description": "Net list price for the associated currency.", - "type": "number" - }, - "linked": { - "description": "Whether gross and net list prices are linked through the tax configuration.", - "type": "boolean" - } - }, - "required": [ - "gross", - "net", - "linked" - ] + "field": { + "type": "string" }, - "regulationPrice": { - "description": "Reference price used for legal price disclosures.", - "type": "object", - "properties": { - "currencyId": { - "description": "Unique identity of the associated currency.", - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "gross": { - "description": "Gross regulation price for the associated currency.", - "type": "number" + "value": { + "oneOf": [ + { + "type": "string" }, - "net": { - "description": "Net regulation price for the associated currency.", + { "type": "number" }, - "linked": { - "description": "Whether gross and net regulation prices are linked through the tax configuration.", + { "type": "boolean" + }, + { + "type": "null" } - }, - "required": [ - "gross", - "net", - "linked" ] } }, "required": [ - "currencyId", - "gross", - "net", - "linked" + "type", + "field", + "value" ] }, - "businessEventsResponse": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of the event" - }, - "class": { - "type": "string", - "description": "Class name of the event" - }, - "data": { - "type": "object", - "description": "Available data of event" - }, - "aware": { - "type": "array", - "description": "Flow builder will base on awareness to show actions", - "items": { - "type": "string" - } - }, - "extensions": { - "type": "array", - "description": "Extensions data of event", - "items": { - "type": "string" - } - } + "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", + "queries" + ] }, - "MeasurementUnits": { + "RangeFilter": { "type": "object", - "description": "Configuration of the measurement system", "properties": { - "system": { + "type": { "type": "string", "enum": [ - "metric", - "imperial" - ], - "default": "metric", - "description": "The measurement system used in the store. 'metric' for metric system, 'imperial' for imperial system." + "range" + ] }, - "units": { + "field": { + "type": "string" + }, + "parameters": { "type": "object", - "description": "Units used in the measurement system.", "properties": { - "length": { - "type": "string", - "enum": [ - "mm", - "cm", - "m", - "in", - "ft" - ], - "default": "mm", - "description": "Unit of length." + "gte": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] }, - "weight": { - "type": "string", - "enum": [ - "g", - "kg", - "oz", - "lb" - ], - "default": "kg", - "description": "Unit of weight." + "gt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "lte": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "lt": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] } } } - } - }, - "MediaId": { - "type": "string", - "pattern": "^[0-9a-f]{32}$", - "description": "Media entity ID" + }, + "required": [ + "type", + "field", + "parameters" + ] }, - "ExternalThumbnail": { + "Sort": { "type": "object", - "description": "An external thumbnail URL with its dimensions. Used when a CDN provides pre-generated thumbnails alongside the main media file.", - "required": [ - "url", - "width", - "height" - ], "properties": { - "url": { + "field": { + "type": "string" + }, + "order": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + }, + "naturalSorting": { + "type": "boolean" + }, + "type": { + "type": "string" + } + }, + "required": [ + "field", + "order" + ] + }, + "Associations": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Criteria" + } + }, + "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" + } + ] + }, + { + "title": "AggregationHistogram", + "allOf": [ + { + "$ref": "#/components/schemas/AggregationHistogram" + }, + { + "$ref": "#/components/schemas/SubAggregations" + } + ] + }, + { + "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" + } + ] + } + } + }, + "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" + } + } + }, + "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" + }, + "limit": { + "description": "The number of terms to return", + "type": "number" + }, + "sort": { + "type": "array", + "description": "Sorting the aggregation result.", + "items": { + "$ref": "#/components/schemas/Sort" + } + } + }, + "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", + "type": "string", + "enum": [ + "histogram" + ] + }, + "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" + ] + }, + "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" + }, + "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" + ] + }, + "AggregationMetrics": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "avg", + "count", + "max", + "min", + "stats", + "sum" + ] + }, + "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." + }, + "units": { + "type": "object", + "description": "Units used in the measurement system.", + "properties": { + "length": { + "type": "string", + "enum": [ + "mm", + "cm", + "m", + "in", + "ft" + ], + "default": "mm", + "description": "Unit of length." + }, + "weight": { + "type": "string", + "enum": [ + "g", + "kg", + "oz", + "lb" + ], + "default": "kg", + "description": "Unit of weight." + } + } + } + } + }, + "MediaId": { + "type": "string", + "pattern": "^[0-9a-f]{32}$", + "description": "Media entity ID" + }, + "ExternalThumbnail": { + "type": "object", + "description": "An external thumbnail URL with its dimensions. Used when a CDN provides pre-generated thumbnails alongside the main media file.", + "required": [ + "url", + "width", + "height" + ], + "properties": { + "url": { "type": "string", "description": "Absolute HTTP/HTTPS URL of the thumbnail", "example": "https://cdn.example.com/image-200x200.jpg" @@ -117684,32 +117792,6 @@ } } }, - "flowBuilderActionsResponse": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of the flow action" - }, - "requirements": { - "type": "array", - "description": "When requirement fit with aware from `events.json` actions will be shown", - "items": { - "type": "string" - } - }, - "extensions": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Extensions data of event" - } - } - } - }, "OAuthScopes": { "description": "OAuth scopes that should be requested.", "type": "string", @@ -117834,724 +117916,710 @@ } ] }, - "SwagCommercialFeature": { + "Price": { "type": "object", - "required": [ - "code", - "name", - "description", - "enabled", - "dependencies" - ], + "description": "Price object", "properties": { - "code": { - "type": "string" + "currencyId": { + "description": "Unique identity of the associated currency.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" }, - "name": { - "type": "string" + "gross": { + "description": "Gross price for the associated currency.", + "type": "number" }, - "description": { - "type": "string" + "net": { + "description": "Net price for the associated currency.", + "type": "number" }, - "enabled": { + "linked": { + "description": "Whether gross and net prices are linked through the tax configuration.", "type": "boolean" }, - "type": { + "percentage": { + "description": "Discount percentage relative to the list price for the gross and net amounts. `null` when no list price is set.", "type": [ - "string", + "object", "null" + ], + "properties": { + "gross": { + "description": "Discount percentage relative to the gross list price.", + "type": "number" + }, + "net": { + "description": "Discount percentage relative to the net list price.", + "type": "number" + } + }, + "required": [ + "gross", + "net" ] }, - "dependencies": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "CustomPricingDeleteOperation": { - "type": "object", - "required": [ - "action", - "payload" - ], - "properties": { - "action": { - "description": "A specific verb defining what operation should be actioned for a specific data record", - "type": "string", - "enum": [ - "delete" + "listPrice": { + "description": "Reference list price for displaying discounts.", + "type": "object", + "properties": { + "currencyId": { + "description": "Unique identity of the associated currency.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "gross": { + "description": "Gross list price for the associated currency.", + "type": "number" + }, + "net": { + "description": "Net list price for the associated currency.", + "type": "number" + }, + "linked": { + "description": "Whether gross and net list prices are linked through the tax configuration.", + "type": "boolean" + } + }, + "required": [ + "gross", + "net", + "linked" ] }, - "payload": { - "description": "Contains a list of changesets for an entity. If the action type is `delete`,\n a list of identifiers can be provided.", - "type": "array", - "items": { - "anyOf": [ - { - "title": "productIds", - "type": "array", - "description": "An array of product entity UUIDs", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "title": "customerIds", - "type": "array", - "description": "An array of customer entity UUIDs", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - { - "title": "customerGroupIds", - "type": "array", - "description": "An array of customerGroup entity UUIDs", - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - } - ] - } + "regulationPrice": { + "description": "Reference price used for legal price disclosures.", + "type": "object", + "properties": { + "currencyId": { + "description": "Unique identity of the associated currency.", + "type": "string", + "pattern": "^[0-9a-f]{32}$" + }, + "gross": { + "description": "Gross regulation price for the associated currency.", + "type": "number" + }, + "net": { + "description": "Net regulation price for the associated currency.", + "type": "number" + }, + "linked": { + "description": "Whether gross and net regulation prices are linked through the tax configuration.", + "type": "boolean" + } + }, + "required": [ + "gross", + "net", + "linked" + ] } - } - }, - "CustomPricingUpsertOperation": { - "type": "object", + }, "required": [ - "action", - "payload" - ], - "properties": { - "action": { - "description": "A specific verb defining what operation should be actioned for a specific data record", - "type": "string", - "enum": [ - "upsert" - ] - }, - "payload": { - "description": "Contains a list of changesets for an entity. If the action type is `delete`,\n a list of identifiers can be provided.", - "type": "array", - "items": { + "currencyId", + "gross", + "net", + "linked" + ] + }, + "businessEventsResponse": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the event" + }, + "class": { + "type": "string", + "description": "Class name of the event" + }, + "data": { "type": "object", - "required": [ - "productId", - "prices" - ], - "description": "A definition almost symmetric with Sync API payload", - "properties": { - "id": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "productVersionId": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "productId": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "customerId": { - "type": "string", - "description": "This parameter should be specified, or 'customerGroupId', not both", - "pattern": "^[0-9a-f]{32}$" - }, - "customerGroupId": { - "type": "string", - "description": "This parameter should be specified, or 'customerId', not both", - "pattern": "^[0-9a-f]{32}$" - }, - "price": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomPricingPrice" - } - } + "description": "Available data of event" + }, + "aware": { + "type": "array", + "description": "Flow builder will base on awareness to show actions", + "items": { + "type": "string" + } + }, + "extensions": { + "type": "array", + "description": "Extensions data of event", + "items": { + "type": "string" } } } } }, - "CustomPricingResponse": { - "type": "object", - "required": [ - "success", - "data" - ], - "properties": { - "success": { - "type": "boolean" - }, - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "result": { - "type": "array", - "items": { - "type": "object", - "required": [ - "entities", - "errors" - ], - "properties": { - "entities": { - "type": "array", - "maxItems": 1, - "items": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - } - }, - "errors": { - "type": "array", - "description": "A detailed error list addressing specific points in which sync payload does not meet system expectations (data types, structure etc.)", - "items": { - "type": "string" - } - } - } - } - }, - "extensions": { - "type": "array", - "items": { - "type": "object" - } - } + "flowBuilderActionsResponse": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the flow action" + }, + "requirements": { + "type": "array", + "description": "When requirement fit with aware from `events.json` actions will be shown", + "items": { + "type": "string" } + }, + "extensions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Extensions data of event" } } } }, - "CustomPricingPrice": { + "infoConfigResponse": { "type": "object", - "description": "An extended schema for the Custom Price 'price' column (as opposed to ProductPrice 'price' column)", - "required": [ - "quantityStart", - "price" - ], "properties": { - "quantityStart": { - "type": "integer", - "format": "int64" + "version": { + "type": "string", + "description": "Shopware version." }, - "quantityEnd": { - "type": "integer", - "format": "int64", - "minimum": 1 + "shopId": { + "type": "string", + "description": "Unique shop identifier." }, - "price": { - "type": "array", - "items": { - "type": "object", - "description": "This field should house all the normal facets of the `product_price`.`price` column", - "required": [ - "currencyId", - "gross", - "net", - "linked" - ], - "properties": { - "currencyId": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "gross": { - "type": "number", - "minimum": 0 - }, - "net": { - "type": "number", - "minimum": 0 - }, - "linked": { - "type": "boolean" - }, - "listPrice": { - "type": "object", - "properties": { - "gross": { - "type": "number", - "minimum": 0 - }, - "net": { - "type": "number", - "minimum": 0 - }, - "linked": { - "type": "boolean" - } - } - }, - "regulationPrice": { - "type": "object", - "properties": { - "gross": { - "type": "number", - "minimum": 0 - }, - "net": { - "type": "number", - "minimum": 0 - }, - "linked": { - "type": "boolean" - } - } - } - } - } - } - } - }, - "FlowSharingResponse": { - "type": "object", - "required": [ - "flow" - ], - "properties": { - "flow": { + "versionRevision": { + "type": "string", + "description": "Shopware version revision (build hash/revision)." + }, + "adminWorker": { "type": "object", - "required": [ - "id" - ], + "description": "Admin worker feature flags and transport configuration.", "properties": { - "id": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "name": { - "type": "string" - }, - "eventName": { - "type": "string" - }, - "priority": { - "type": "integer" - }, - "invalid": { - "type": "boolean" - }, - "active": { - "type": "boolean" + "enableAdminWorker": { + "type": "boolean", + "description": "Whether the admin background worker is enabled." }, - "description": { - "type": [ - "string", - "null" - ] + "enableQueueStatsWorker": { + "type": "boolean", + "description": "Whether the queue statistics worker is enabled. Deprecated: This property will be removed in v6.8.0. The increment-based message queue statistics are deprecated.", + "deprecated": true }, - "customFields": { - "type": [ - "object", - "null" - ], - "additionalProperties": true + "enableNotificationWorker": { + "type": "boolean", + "description": "Whether the notification worker is enabled." }, - "sequences": { + "transports": { "type": "array", + "description": "Configured Symfony Messenger transports used by the admin workers.", "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "bundles": { + "type": "object", + "description": "Active extension assets (plugins & apps) keyed by technical name.", + "additionalProperties": { + "oneOf": [ + { "type": "object", - "additionalProperties": true, + "description": "Plugin bundle asset descriptor.", "properties": { - "id": { + "type": { "type": "string", - "pattern": "^[0-9a-f]{32}$" + "enum": [ + "plugin" + ] }, - "parentId": { - "type": [ - "string", - "null" - ], - "pattern": "^[0-9a-f]{32}$" + "css": { + "type": "array", + "items": { + "type": "string", + "description": "URL to a CSS asset." + } }, - "ruleId": { - "type": [ - "string", - "null" - ], - "pattern": "^[0-9a-f]{32}$" + "js": { + "type": "array", + "items": { + "type": "string", + "description": "URL to a JS asset." + } }, - "appFlowActionId": { + "baseUrl": { "type": [ "string", "null" ], - "pattern": "^[0-9a-f]{32}$" - }, - "displayGroup": { - "type": [ - "integer", - "null" + "description": "Base URL to a (micro frontend) admin entry point, if provided." + } + }, + "required": [ + "type" + ], + "additionalProperties": false + }, + { + "type": "object", + "description": "App bundle descriptor.", + "properties": { + "type": { + "type": "string", + "enum": [ + "app" ] }, - "position": { - "type": "integer" + "name": { + "type": "string" }, - "actionName": { - "type": [ - "string", - "null" - ] + "active": { + "type": "boolean" }, - "config": { - "type": [ - "object", - "array", - "null" - ] + "integrationId": { + "type": "string", + "description": "Lowercase hex integration id." }, - "trueCase": { - "type": "boolean" + "baseUrl": { + "type": "string" }, - "customFields": { - "type": [ - "object", - "null" - ], - "additionalProperties": true + "version": { + "type": "string" + }, + "permissions": { + "type": "object", + "description": "Grouped privileges: key = privilege scope, value = list of entities.", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "css": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Optional CSS assets if provided." + }, + "js": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Optional JS assets if provided." } - } - } - } - }, - "additionalProperties": true - }, - "dataIncluded": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": true - } - }, - "referenceIncluded": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": true - } - }, - "requirements": { - "$ref": "#/components/schemas/FlowSharingRequirements" - } - } - }, - "FlowSharingRequirements": { - "type": "object", - "additionalProperties": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "object", - "additionalProperties": { - "type": "string" + }, + "required": [ + "type", + "name", + "active", + "integrationId", + "baseUrl", + "version", + "permissions" + ], + "additionalProperties": false } - } + ] } - ] - } - }, - "FlowSharingCheckRequirementsResponse": { - "oneOf": [ - { - "type": "array", - "maxItems": 0 }, - { + "settings": { "type": "object", - "additionalProperties": { - "oneOf": [ - { + "description": "Selected environment and feature settings consumed by the administration.", + "properties": { + "enableUrlFeature": { + "type": "boolean", + "description": "State of the URL upload feature." + }, + "appUrlReachable": { + "type": "boolean", + "description": "Whether configured APP_URL is externally reachable." + }, + "appsRequireAppUrl": { + "type": "boolean", + "description": "True if at least one installed app requires a reachable APP_URL." + }, + "firstMigrationDate": { + "type": [ + "string", + "null" + ], + "description": "Timestamp of the first executed migration in ISO-8601 UTC format, used for Product Analytics consent eligibility." + }, + "private_allowed_extensions": { + "type": "array", + "description": "Allowed file extensions for private filesystem uploads.", + "items": { "type": "string" - }, - { + } + }, + "private_allowed_mime_types_by_extension": { + "type": "object", + "description": "Known MIME types for each allowed private filesystem upload extension.", + "additionalProperties": { "type": "array", "items": { "type": "string" } } - ] + }, + "enableHtmlSanitizer": { + "type": "boolean", + "description": "Whether HTML sanitizer is enabled." + }, + "enableStagingMode": { + "type": "boolean", + "description": "Whether staging mode banner is enabled." + }, + "disableExtensionManagement": { + "type": "boolean", + "description": "True if runtime extension management is disabled." + }, + "presignedUploadSupported": { + "type": "boolean", + "description": "Whether presigned S3 upload is available. True when presigned upload is enabled and an S3 filesystem is configured." + } + }, + "required": [ + "firstMigrationDate" + ], + "additionalProperties": false + }, + "inAppPurchases": { + "type": "array", + "description": "In-app purchase meta data (structure may vary).", + "items": { + "type": "object", + "description": "Purchase entry.", + "additionalProperties": true } } - ] + }, + "required": [ + "version", + "shopId", + "versionRevision", + "adminWorker", + "bundles", + "settings", + "inAppPurchases" + ], + "additionalProperties": false }, - "Options": { + "ConsentState": { "type": "object", + "required": [ + "name", + "scopeName", + "identifier", + "status", + "actor", + "updatedAt", + "acceptedUntil" + ], "properties": { - "mood": { + "name": { "type": "string", - "enum": [ - "positive", - "neutral" - ], - "description": "Tone/mood to guide summary generation (optional)." + "description": "The name of the consent" }, - "productId": { + "scopeName": { "type": "string", - "description": "Product UUID (hex) identifying the product to generate summaries for. This field is required." + "description": "The scope of the consent that defines how the identifier is resolved" }, - "salesChannelId": { + "identifier": { "type": "string", - "description": "Sales channel UUID (hex) used to scope generation and locale/context resolution. This field is required." + "description": "The resolved identifier of the consent" }, - "languageIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Array of language UUIDs (hex). Provided language IDs will be mapped to locale codes server-side; supply this OR `locales`." + "status": { + "type": "string", + "enum": [ + "unset", + "accepted", + "revoked" + ], + "description": "The current status of the consent (requested, accepted, revoked)" }, - "locales": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Array of locale codes (e.g. `de-DE`, `en-GB`). Supply this OR `languageIds`. At least one of `languageIds` or `locales` must be present." + "actor": { + "type": [ + "string", + "null" + ], + "description": "The user name of the user who made the consent decision. null if never updated" }, - "length": { - "type": "integer", - "description": "Desired length of the generated summary in number of characters (optional, default: 300)." + "updatedAt": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "description": "The timestamp of when the consent status was last updated. null if never updated" }, - "reviews": { - "type": "array", - "items": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "content": { - "type": "string" - }, - "points": { - "type": "string" - } - }, - "required": [ - "title", - "content", - "points" - ], - "description": "Array of review objects containing title, content, and points (optional, if not provided, reviews will be fetched from product)." - } - } - }, - "required": [ - "productId", - "salesChannelId" - ], - "anyOf": [ - { - "required": [ - "languageIds" - ] + "acceptedUntil": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "description": "The timestamp until when the consent is accepted. null if never accepted" }, - { - "required": [ - "locales" - ] - } - ], - "additionalProperties": true, - "description": "Options object passed to Review Summary generation." - }, - "ReviewSummaryItem": { - "type": "object", - "properties": { - "languageId": { - "type": "string" + "acceptedRevision": { + "type": [ + "string", + "null" + ], + "description": "The accepted consent revision. null unless the consent is currently accepted for a revision-aware consent." }, - "summary": { - "type": "string" + "latestRevision": { + "type": [ + "string", + "null" + ], + "description": "The current latest revision defined for the consent. null when the consent does not use revisions." } - }, - "additionalProperties": true - }, - "ReviewSummaryByLanguage": { - "type": "object", - "additionalProperties": { - "type": "string", - "description": "Generated summary for the language id" - }, - "description": "Map of languageId to generated summary string." + } }, - "BundleItemProduct": { + "SalesChannelFileConfiguration": { "type": "object", "required": [ "id", - "productNumber" + "enabled", + "templateOverrides" ], "properties": { "id": { + "description": "Identifier of the sales_channel_file row.", "type": "string", "pattern": "^[0-9a-f]{32}$" }, - "name": { - "type": "string" - }, - "productNumber": { - "type": "string" - }, - "active": { + "enabled": { + "description": "Whether this file is served publicly for the sales channel.", "type": "boolean" }, - "available": { - "type": "boolean" + "templateOverrides": { + "description": "Merchant-provided Twig overrides keyed by Twig namespace. The reserved `user_provided_content` key stores plain text for the dedicated append block when supported by the template chain.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "SalesChannelFileDescriptor": { + "type": "object", + "required": [ + "fileFamily", + "fileName", + "contentType", + "configuration" + ], + "properties": { + "fileFamily": { + "description": "File family below `Resources/views/files`.", + "type": "string", + "maxLength": 64 }, - "apiAlias": { + "fileName": { + "description": "Public file path without a leading slash.", "type": "string", - "readOnly": true + "examples": [ + "llms.txt", + ".well-known/ucp.json" + ] + }, + "contentType": { + "description": "Detected response content type for the public file.", + "type": "string", + "examples": [ + "text/plain; charset=utf-8" + ] + }, + "configuration": { + "description": "Stored sales-channel configuration for this file, or null when it has not been configured yet.", + "oneOf": [ + { + "$ref": "#/components/schemas/SalesChannelFileConfiguration" + }, + { + "type": "null" + } + ] } } }, - "BundleProductWrite": { + "SalesChannelFileDetail": { "type": "object", "required": [ - "name", - "bundleItems" + "fileFamily", + "fileName", + "templatePath", + "contentType", + "templates", + "supportsUserProvidedContent", + "configuration" ], "properties": { - "productNumber": { + "fileFamily": { + "description": "File family below `Resources/views/files`.", "type": "string", - "description": "Optional. Omit to let the server reserve a number." - }, - "name": { - "type": "string" + "maxLength": 64 }, - "description": { - "type": "string" + "fileName": { + "description": "Public file path without a leading slash.", + "type": "string", + "examples": [ + "llms.txt", + ".well-known/ucp.json" + ] }, - "coverId": { + "templatePath": { + "description": "Relative Twig template path used for rendering.", "type": "string", - "pattern": "^[0-9a-f]{32}$" + "examples": [ + "files/agentic/llms.txt.twig" + ] }, - "bundleItems": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BundleItem" - }, - "minItems": 2 + "contentType": { + "description": "Detected response content type for the public file.", + "type": "string", + "examples": [ + "text/plain; charset=utf-8" + ] }, - "bundleDiscounts": { + "templates": { + "description": "Contributing Twig templates in resolved inheritance order.", "type": "array", "items": { - "$ref": "#/components/schemas/BundleDiscount" + "$ref": "#/components/schemas/SalesChannelFileTemplate" } }, - "visibilities": { + "supportsUserProvidedContent": { + "description": "Whether the template chain exposes the `user_provided_content` block for simple appended merchant notes.", + "type": "boolean" + }, + "configuration": { + "description": "Stored sales-channel configuration for this file, or null when it has not been configured yet.", + "oneOf": [ + { + "$ref": "#/components/schemas/SalesChannelFileConfiguration" + }, + { + "type": "null" + } + ] + } + } + }, + "SalesChannelFileDetailResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/SalesChannelFileDetail" + } + } + }, + "SalesChannelFileListResponse": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { "type": "array", "items": { - "type": "object", - "required": [ - "salesChannelId" - ], - "properties": { - "salesChannelId": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "visibility": { - "type": "integer", - "enum": [ - 1, - 2, - 3 - ] - } - } + "$ref": "#/components/schemas/SalesChannelFileDescriptor" } - }, - "customFields": { - "type": "object" } } }, - "BundleProduct": { - "allOf": [ - { - "$ref": "#/components/schemas/BundleProductWrite" + "SalesChannelFilePreviewRequest": { + "type": "object", + "required": [ + "fileName" + ], + "properties": { + "fileName": { + "description": "Public file path without a leading slash.", + "type": "string", + "examples": [ + "llms.txt", + ".well-known/ucp.json" + ] }, - { + "templateOverrides": { + "description": "Unsaved Twig overrides keyed by Twig namespace. The reserved `user_provided_content` key stores plain text for the dedicated append block when supported by the template chain.", "type": "object", - "required": [ - "id" - ], - "properties": { - "id": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "active": { - "type": "boolean" - }, - "available": { - "type": "boolean" - }, - "description": { - "type": "string" - }, - "price": { - "type": "array", - "items": { - "type": "object", - "properties": { - "currencyId": { - "type": "string", - "pattern": "^[0-9a-f]{32}$" - }, - "net": { - "type": "number" - }, - "gross": { - "type": "number" - }, - "linked": { - "type": "boolean" - } - } - } - }, - "stock": { - "type": "integer" - }, - "sales": { - "type": "integer" - }, - "customSearchKeywords": { - "type": "array", - "items": { - "type": "string" - } - }, - "cover": { - "type": "object" - }, - "media": { - "type": "array", - "items": { - "type": "object" - } - }, - "apiAlias": { - "type": "string", - "readOnly": true - } + "additionalProperties": { + "type": "string" } } - ] + } + }, + "SalesChannelFilePreviewResponse": { + "type": "object", + "required": [ + "fileName", + "contentType", + "content" + ], + "properties": { + "fileName": { + "description": "Public file path without a leading slash.", + "type": "string" + }, + "contentType": { + "description": "Detected content type of the rendered file.", + "type": "string" + }, + "content": { + "description": "Rendered file content.", + "type": "string" + } + } + }, + "SalesChannelFileTemplate": { + "type": "object", + "required": [ + "twigNamespace", + "templateName", + "templateContent", + "role" + ], + "properties": { + "twigNamespace": { + "description": "Twig namespace that contributed the template, for example `Framework` or a plugin name.", + "type": "string" + }, + "templateName": { + "description": "Resolved Twig template name.", + "type": "string", + "examples": [ + "@Framework/files/agentic/llms.txt.twig" + ] + }, + "templateContent": { + "description": "Original source template content. Administration clients can use this as the default text when editing a template override.", + "type": "string" + }, + "role": { + "description": "Whether this source provides the base template or extends another source in the resolved template chain.", + "type": "string", + "enum": [ + "base", + "extension" + ] + } + } } }, "responses": { diff --git a/SwagCommercial-adminapi.summary.json b/SwagCommercial-adminapi.summary.json index 72ca015..e38f4ce 100644 --- a/SwagCommercial-adminapi.summary.json +++ b/SwagCommercial-adminapi.summary.json @@ -16,6 +16,7 @@ "/_action/share-config/download/{entity}/{id}", "/_action/share-config/upload/{entity}", "/_action/text-to-image/generate", + "/_action/translation/meta", "/_action/update-employee", "/_proxy-quote/{salesChannelId}", "/advanced-search-action",