{
  "openapi": "3.1.0",
  "info": {
    "title": "Viskan API",
    "description": "Lets you connect Viskan to your other systems — like your ERP, WMS, POS, CRM, or PIM. Ideal if you are building your own integrations or working with a developer.",
    "version": "v1"
  },
  "servers": [
    {
      "description": "Production",
      "url": "https://api.viskan.com"
    },
    {
      "description": "Staging",
      "url": "https://api.staging.viskan.com"
    }
  ],
  "paths": {
    "/accountancy/journal/journals": {
      "get": {
        "description": "Returns accounting journal data grouped by accounting period.\nOnly Invoice and Payment journals are included.\nRows with a net zero amount are excluded.\nThe response is limited to a maximum of 24 months of data — if the effective\ndate range exceeds this, a date-range-too-large error is returned.\n",
        "operationId": "getJournals",
        "parameters": [
          {
            "name": "journalDate",
            "in": "query",
            "description": "Only include journals created after this date.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "periodDateFrom",
            "in": "query",
            "description": "Only include periods whose start date is on or after this date.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "periodDateTo",
            "in": "query",
            "description": "Only include periods whose end date is on or before this date.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the accounting journals.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PeriodItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Get accounting journals",
        "tags": [
          "Finance"
        ],
        "x-viskan-api-name": "Accounting journal API",
        "x-viskan-error-code-date-range-too-large": "The effective date range of the response exceeds 24 months. Reduce the date range.",
        "x-viskan-scope": "viskan:accountancyjournal:read"
      }
    },
    "/admin/user-group/reports": {
      "get": {
        "description": "Gets all reports available.",
        "operationId": "getAllReports",
        "responses": {
          "200": {
            "description": "The response contains all reports.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReportData"
                  }
                }
              }
            }
          }
        },
        "summary": "Get all reports",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User group API",
        "x-viskan-scope": "viskan:usergroup:read"
      }
    },
    "/admin/user-group/user-groups": {
      "get": {
        "description": "Searches for user groups.",
        "operationId": "findUserGroups",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "keywords",
            "in": "query",
            "description": "Optional keywords (whitespace separated) to search for.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "Filter by the active status.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ACTIVE",
              "enum": [
                "ALL",
                "ACTIVE",
                "INACTIVE"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains a set of search hits.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserGroupListItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Find user groups",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User group API",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-scope": "viskan:usergroup:read"
      },
      "post": {
        "description": "Creates a new user group.",
        "operationId": "createUserGroup",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewUserGroup"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The response contains the identifier of the new user.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedUserGroup"
                }
              }
            }
          }
        },
        "summary": "Create new user group",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User group API",
        "x-viskan-error-code-group-name-is-unavailable": "The user group you are trying to use is already used by another user group.",
        "x-viskan-scope": "viskan:usergroup:create"
      }
    },
    "/admin/user-group/user-groups/{groupId}": {
      "delete": {
        "description": "Deletes a user group.",
        "operationId": "deleteUserGroup",
        "parameters": [
          {
            "name": "groupId",
            "in": "path",
            "description": "The ID of the group to delete.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The user group was successfully deleted."
          }
        },
        "summary": "Delete a user group",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User group API",
        "x-viskan-error-code-cannot-delete-referenced-entity": "The user group is being referenced by other objects and cannot be removed.",
        "x-viskan-error-code-user-group-not-found": "No user group was found with the given ID.",
        "x-viskan-scope": "viskan:usergroup:delete"
      },
      "get": {
        "description": "Gets information for a specific user group in the system.",
        "operationId": "getUserGroup",
        "parameters": [
          {
            "name": "groupId",
            "in": "path",
            "description": "The ID of the group to get.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The information about the user group.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/UserGroupData"
                }
              }
            }
          }
        },
        "summary": "Get a user group",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User group API",
        "x-viskan-error-code-user-group-not-found": "No user group was found with the given ID.",
        "x-viskan-scope": "viskan:usergroup:read"
      },
      "patch": {
        "description": "Updates a user group.",
        "operationId": "updateUserGroup",
        "parameters": [
          {
            "name": "groupId",
            "in": "path",
            "description": "The ID of the group to update.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateUserGroup"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The user group was successfully updated."
          }
        },
        "summary": "Update a user group",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User group API",
        "x-viskan-error-code-group-already-have-access-to-report": "The user group already have access to the one of the given reports.",
        "x-viskan-error-code-group-already-have-access-to-role": "The user group already have access to the one of the given roles.",
        "x-viskan-error-code-group-name-is-unavailable": "The user group you are trying to use is already used by another user group.",
        "x-viskan-error-code-user-group-not-found": "No user group was found with the given ID.",
        "x-viskan-scope": "viskan:usergroup:update"
      }
    },
    "/admin/user-group/user-groups/{groupId}/members": {
      "get": {
        "description": "Gets all the users that are members of the given user group.",
        "operationId": "getMembersOfGroup",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "groupId",
            "in": "path",
            "description": "The ID of the group to get members of.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains all members of the user group.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Member"
                  }
                }
              }
            }
          }
        },
        "summary": "Get members of group",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User group API",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-scope": "viskan:usergroup:read"
      }
    },
    "/admin/user/_availability": {
      "post": {
        "description": "Checks the availability of an email address in the system.",
        "operationId": "checkAvailability",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AvailabilityRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The user already exists. It may still be used to add to the tenant, depending on \u003ccode\u003eaccessToTenant\u003c/code\u003e.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/AvailabilityResult"
                }
              }
            }
          },
          "204": {
            "description": "The email address is not found and is available to use."
          }
        },
        "summary": "Check availability",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-email-address-required": "Email address is required.",
        "x-viskan-error-code-invalid-email-address": "The email address is not valid.",
        "x-viskan-scope": "viskan:user:create"
      }
    },
    "/admin/user/connected-tenants": {
      "get": {
        "description": "Gets all the connected tenants in this tenant. This returns an empty list for regular setups.",
        "operationId": "getConnectedTenants",
        "responses": {
          "200": {
            "description": "Contains all the connected tenants of this tenant, including itself, but only if the setup uses connected tenants.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ConnectedTenant"
                  }
                }
              }
            }
          }
        },
        "summary": "Get connected tenants",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-scope": "viskan:user:read"
      }
    },
    "/admin/user/users": {
      "get": {
        "description": "Searches for users.",
        "operationId": "findUsers",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "keywords",
            "in": "query",
            "description": "Optional keywords (whitespace separated) to search for.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "Filter by the active status.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ACTIVE",
              "enum": [
                "ALL",
                "ACTIVE",
                "INACTIVE"
              ]
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "description": "Optional filter to only include users that are members of the given physical store.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains a set of search hits.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserListItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Find users",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-error-code-invalid-store-id": "The given store ID is not a UUID.",
        "x-viskan-scope": "viskan:user:read"
      },
      "post": {
        "description": "Creates a user within this tenant.",
        "operationId": "createUser",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateUserRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The user already existed but was added to the tenant.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreateUserResult"
                }
              }
            }
          },
          "201": {
            "description": "The user was successfully created and added to the tenant.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreateUserResult"
                }
              }
            }
          }
        },
        "summary": "Create user",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-administrators-cannot-be-assigned-connected-tenants": "Administrators cannot be assigned to tenants, they automatically get access to all connected tenants.",
        "x-viskan-error-code-email-address-required": "Email address is required.",
        "x-viskan-error-code-group-not-found": "One or more of the given group IDs do not exist.",
        "x-viskan-error-code-invalid-email-address": "The email address is not valid.",
        "x-viskan-error-code-invalid-name": "First name and/or last name is not valid. This does not happen if you add a user to a tenant when the user already exists in a different tenant.",
        "x-viskan-error-code-name-required": "First name and last name are required. This does not happen if you add a user to a tenant when the user already exists in a different tenant.",
        "x-viskan-error-code-only-normal-users-can-be-assigned-user-groups": "Only normal users can be assigned to user groups.",
        "x-viskan-error-code-tenant-not-found": "One or more of the given tenant IDs do not exist or is not connected to the current tenant.",
        "x-viskan-error-code-user-already-in-tenant": "The user is already a member of this tenant.",
        "x-viskan-scope": "viskan:user:create"
      }
    },
    "/admin/user/users/{userId}": {
      "delete": {
        "description": "Deletes a user from the system. In setups with connected tenants, the user will be removed from all of the connected tenants.",
        "operationId": "deleteUser",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "The identifier of the user to delete.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The user was successfully removed."
          }
        },
        "summary": "Delete user",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-user-not-found": "No user was found with the given ID.",
        "x-viskan-scope": "viskan:user:delete"
      },
      "get": {
        "description": "Gets a specific user in the system.",
        "operationId": "getUser_1",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "The identifier of the user to get.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the found user.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/UserData"
                }
              }
            }
          }
        },
        "summary": "Get user",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-user-not-found": "No user was found with the given ID.",
        "x-viskan-scope": "viskan:user:read"
      },
      "patch": {
        "description": "Updates a user.",
        "operationId": "updateUser_1",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "The identifier of the user to update.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateUserRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The user was successfully updated."
          }
        },
        "summary": "Update user",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-administrators-cannot-be-assigned-connected-tenants": "Administrators cannot be assigned to tenants, they automatically get access to all connected tenants.",
        "x-viskan-error-code-only-normal-users-can-be-assigned-user-groups": "Only normal users can be assigned to user groups.",
        "x-viskan-error-code-tenant-not-found": "One or more of the given tenant IDs do not exist or is not connected to the current tenant.",
        "x-viskan-error-code-user-already-has-group": "The user is already a member of one of the user groups you are trying to add them to.",
        "x-viskan-error-code-user-not-found": "No user was found with the given ID.",
        "x-viskan-scope": "viskan:user:update"
      }
    },
    "/admin/user/users/{userId}/_send-invitation-email": {
      "post": {
        "description": "\u003cp\u003eSends an invitation email to the given user.\u003c/p\u003e\n\u003cp\u003eThis is the Visma Connect invitation. A new user account is invited to password sign-in instead, through the sign-in service.\u003c/p\u003e\n\u003cp\u003eAlso note that this API method can only be called from an interactive user access token, and not regular API client access tokens.\u003c/p\u003e\n",
        "operationId": "sendInvitationEmail",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "The identifier of the user to send the email to.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "204": {
            "description": "The invitation email was sent."
          }
        },
        "summary": "Send invitation email",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-api-client-must-be-a-user": "The access token used to call this method must be an interactive user access token, and not a regular API client.",
        "x-viskan-error-code-user-not-found": "No user was found with the given ID.",
        "x-viskan-scope": "viskan:user:create"
      }
    },
    "/campaign-property/campaigns/{campaignId}/properties": {
      "get": {
        "description": "Returns all properties assigned to a campaign.",
        "operationId": "getCampaignProperties",
        "parameters": [
          {
            "name": "campaignId",
            "in": "path",
            "description": "The unique identifier of the campaign.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the campaign properties.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EntityPropertyItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Get property values for campaign",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Campaign property API",
        "x-viskan-scope": "viskan:campaign:read"
      }
    },
    "/campaign-property/campaigns/{campaignId}/properties/{propertyKeyId}": {
      "delete": {
        "description": "Removes a property from a campaign.",
        "operationId": "deleteProperty_5",
        "parameters": [
          {
            "name": "campaignId",
            "in": "path",
            "description": "The unique identifier of the campaign.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The property was removed successfully."
          }
        },
        "summary": "Remove property value from campaign",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Campaign property API",
        "x-viskan-scope": "viskan:campaign:update"
      },
      "put": {
        "description": "Sets or updates the value of a single property key on a campaign. PUT is full replacement — any existing values not in the request are removed. For raw types (\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eINTEGER\u003c/code\u003e, \u003ccode\u003eFLOAT\u003c/code\u003e, \u003ccode\u003eBOOLEAN\u003c/code\u003e, \u003ccode\u003eHTML\u003c/code\u003e): use \u003ccode\u003evalue\u003c/code\u003e for a single value or \u003ccode\u003evalues\u003c/code\u003e for multiple. Each value is an object: \u003ccode\u003e{\"value\": \"Gold\", \"translations\": [{\"languageCode\": \"sv\", \"name\": \"Guld\"}]}\u003c/code\u003e. Prefer a single \u003ccode\u003evalue\u003c/code\u003e; for multiple reusable values, consider \u003ccode\u003eMULTI_SELECT\u003c/code\u003e. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e: use \u003ccode\u003epropertyValueId\u003c/code\u003e. For \u003ccode\u003eMULTI_SELECT\u003c/code\u003e: use \u003ccode\u003epropertyValueIds\u003c/code\u003e.",
        "operationId": "setPropertyValue_5",
        "parameters": [
          {
            "name": "campaignId",
            "in": "path",
            "description": "The unique identifier of the campaign.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetPropertyValueRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property value was set successfully."
          }
        },
        "summary": "Set property value on campaign",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Campaign property API",
        "x-viskan-error-code-campaign-not-found": "The campaign was not found.",
        "x-viskan-error-code-invalid-presentation-type": "The property key has an unknown presentation type.",
        "x-viskan-error-code-invalid-request-fields": "The wrong request fields were populated for the presentation type.",
        "x-viskan-error-code-invalid-value-format": "The provided value does not match the expected format.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-map-count-violation": "The number of values violates the min/max map count constraint.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-error-code-property-value-not-found": "The property value was not found or not linked to the key.",
        "x-viskan-scope": "viskan:campaign:update"
      }
    },
    "/campaign-property/property-keys": {
      "get": {
        "description": "Returns all campaign property keys with their presentation types, translations, and values. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e and \u003ccode\u003eMULTI_SELECT\u003c/code\u003e keys, the predefined values are included.",
        "operationId": "findPropertyKeys_5",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The response contains the property keys.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PropertyKeyDetailItem"
                  }
                }
              }
            }
          }
        },
        "summary": "List campaign property keys",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Campaign property API",
        "x-viskan-scope": "viskan:campaignproperty:read"
      },
      "post": {
        "description": "Creates a new campaign property key with optional translations and predefined values.",
        "operationId": "createPropertyKey_5",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePropertyKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property key was created successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Create campaign property key",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Campaign property API",
        "x-viskan-error-code-duplicate-property-value": "Two or more values have the same name.",
        "x-viskan-error-code-invalid-property-key-name": "The property key name must not be empty.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-property-key-name-already-exists": "A property key with this name already exists.",
        "x-viskan-scope": "viskan:campaignproperty:create"
      }
    },
    "/campaign-property/property-keys/{propertyKeyId}": {
      "delete": {
        "description": "Deletes a campaign property key and its translations.",
        "operationId": "deletePropertyKey_5",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The property key was deleted successfully."
          }
        },
        "summary": "Delete campaign property key",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Campaign property API",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:campaignproperty:delete"
      },
      "get": {
        "description": "Returns a single campaign property key with its presentation type, translations, and values. Same shape as the list endpoint.",
        "operationId": "findPropertyKey_5",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the property key.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Get campaign property key",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Campaign property API",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:campaignproperty:read"
      },
      "put": {
        "description": "Updates a campaign property key including its translations and predefined values.",
        "operationId": "updatePropertyKey_5",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePropertyKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property key was updated successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Update campaign property key",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Campaign property API",
        "x-viskan-error-code-duplicate-property-value": "Two or more values have the same name.",
        "x-viskan-error-code-invalid-property-key-name": "The property key name must not be empty.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-property-key-name-already-exists": "A property key with this name already exists.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:campaignproperty:update"
      }
    },
    "/common/profile/me": {
      "get": {
        "description": "Gets the user profile of the current authorization token.",
        "operationId": "getOwnProfile",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Information about the user profile.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProfileDetails"
                }
              }
            }
          }
        },
        "summary": "Get own profile",
        "tags": [
          "Common"
        ],
        "x-viskan-api-name": "Profile API",
        "x-viskan-error-code-profile-is-not-available": "There is no profile information available in this authentication token.",
        "x-viskan-scope": ""
      }
    },
    "/common/profile/profiles/{userId}": {
      "get": {
        "description": "Gets a user profile.",
        "operationId": "getProfile",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "The ID of the user of the profile to get.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "Information about the user profile.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProfileInfo"
                }
              }
            }
          }
        },
        "summary": "Get profile",
        "tags": [
          "Common"
        ],
        "x-viskan-api-name": "Profile API",
        "x-viskan-error-code-user-does-not-exist": "No user with the given ID exists.",
        "x-viskan-scope": ""
      }
    },
    "/config/multi-brand/multi-brands": {
      "get": {
        "description": "Searches for multi brands with optional filters, sorting, and pagination.",
        "operationId": "findMultiBrands",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "keywords",
            "in": "query",
            "description": "Optional keywords (whitespace separated) to search for.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "Filter by the active status.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ACTIVE",
              "enum": [
                "ALL",
                "ACTIVE",
                "INACTIVE"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the found multi brands.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MultiBrandItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Find multi brands",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Multi brand API",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-scope": "viskan:multibrand:read"
      },
      "post": {
        "description": "Creates a new multi brand.",
        "operationId": "createMultiBrand",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMultiBrandRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The multi brand was created successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreateMultiBrandResponse"
                }
              }
            }
          }
        },
        "summary": "Create a multi brand",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Multi brand API",
        "x-viskan-error-code-invalid-icon": "The icon is not a valid PNG or SVG image within the allowed size and dimensions.",
        "x-viskan-error-code-multi-brand-name-cannot-be-blank": "Multi brand name cannot be a blank string.",
        "x-viskan-scope": "viskan:multibrand:create"
      }
    },
    "/config/multi-brand/multi-brands/{multiBrandId}": {
      "delete": {
        "description": "Deletes a multi brand by its unique identifier.",
        "operationId": "deleteMultiBrand",
        "parameters": [
          {
            "name": "multiBrandId",
            "in": "path",
            "description": "The unique identifier of the multi brand to delete.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The multi brand was deleted successfully."
          }
        },
        "summary": "Delete a multi brand",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Multi brand API",
        "x-viskan-error-code-cannot-delete-default-multi-brand": "The default multi brand cannot be deleted.",
        "x-viskan-error-code-cannot-delete-referenced-entity": "The multi brand cannot be deleted because it is referenced by other entities.",
        "x-viskan-error-code-multi-brand-not-found": "The multi brand with the given ID was not found.",
        "x-viskan-scope": "viskan:multibrand:delete"
      },
      "get": {
        "description": "Get a multi brand by its unique identifier.",
        "operationId": "getMultiBrand",
        "parameters": [
          {
            "name": "multiBrandId",
            "in": "path",
            "description": "The unique identifier of the multi brand to get.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the multi brand.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/MultiBrandItem"
                }
              }
            }
          }
        },
        "summary": "Get a multi brand",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Multi brand API",
        "x-viskan-error-code-multi-brand-not-found": "The multi brand with the given ID was not found.",
        "x-viskan-scope": "viskan:multibrand:read"
      },
      "patch": {
        "description": "Update the details of a multi brand.",
        "operationId": "updateMultiBrand",
        "parameters": [
          {
            "name": "multiBrandId",
            "in": "path",
            "description": "The unique identifier of the multi brand to update.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMultiBrandRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The multi brand was updated successfully."
          }
        },
        "summary": "Update a multi brand",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Multi brand API",
        "x-viskan-error-code-invalid-icon": "The icon is not a valid PNG or SVG image within the allowed size and dimensions.",
        "x-viskan-error-code-multi-brand-name-cannot-be-blank": "Multi brand name cannot be a blank string.",
        "x-viskan-error-code-multi-brand-not-found": "The multi brand with the given ID was not found.",
        "x-viskan-scope": "viskan:multibrand:update"
      }
    },
    "/config/physical-store/physical-stores": {
      "get": {
        "description": "Returns all physical stores for the current company, including their IP whitelists.",
        "operationId": "findPhysicalStores",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The response contains the found physical stores.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PhysicalStoreItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Find physical stores",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Physical store API",
        "x-viskan-scope": "viskan:physicalstore:read"
      }
    },
    "/config/physical-store/physical-stores/{storeId}": {
      "get": {
        "description": "Get a physical store by its unique identifier.",
        "operationId": "getPhysicalStore",
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "description": "The unique identifier of the physical store to get.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the physical store.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PhysicalStoreItem"
                }
              }
            }
          }
        },
        "summary": "Get a physical store",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Physical store API",
        "x-viskan-error-code-physical-store-not-found": "The physical store with the given ID was not found.",
        "x-viskan-scope": "viskan:physicalstore:read"
      },
      "patch": {
        "description": "Updates the given fields; a field left out keeps its value. Only the IP whitelist can be changed for now, and a given whitelist fully replaces the existing one.",
        "operationId": "updatePhysicalStore",
        "parameters": [
          {
            "name": "storeId",
            "in": "path",
            "description": "The unique identifier of the physical store to update.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePhysicalStoreRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The physical store was updated successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PhysicalStoreItem"
                }
              }
            }
          }
        },
        "summary": "Update a physical store",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Physical store API",
        "x-viskan-error-code-physical-store-cidr-too-wide": "One of the given IP whitelist entries is wider than /16 (IPv4) or /48 (IPv6).",
        "x-viskan-error-code-physical-store-invalid-cidr": "One of the given IP whitelist entries is not a valid CIDR range.",
        "x-viskan-error-code-physical-store-not-found": "The physical store with the given ID was not found.",
        "x-viskan-error-code-physical-store-whitelist-too-large": "The IP whitelist holds too many entries.",
        "x-viskan-scope": "viskan:physicalstore:update"
      }
    },
    "/config/price-list/price-lists": {
      "get": {
        "description": "Searches for price lists with optional filters, sorting, and pagination.",
        "operationId": "findPriceLists",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "keywords",
            "in": "query",
            "description": "Optional keywords (whitespace separated) to search for.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "Filter by the active status.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ACTIVE",
              "enum": [
                "ALL",
                "ACTIVE",
                "INACTIVE"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the found price lists.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PriceListItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Find price lists",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Price list API",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-scope": "viskan:pricelist:read"
      },
      "post": {
        "description": "Creates a new price list.",
        "operationId": "createPriceList",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePriceListRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The price list was created successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreatePriceListResponse"
                }
              }
            }
          }
        },
        "summary": "Create a price list",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Price list API",
        "x-viskan-error-code-price-list-name-cannot-be-blank": "Price list name cannot be a blank string.",
        "x-viskan-scope": "viskan:pricelist:create"
      }
    },
    "/config/price-list/price-lists/{priceListId}": {
      "delete": {
        "description": "Deletes a price list by its unique identifier.",
        "operationId": "deletePriceList",
        "parameters": [
          {
            "name": "priceListId",
            "in": "path",
            "description": "The unique identifier of the price list to delete.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The price list was deleted successfully."
          }
        },
        "summary": "Delete a price list",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Price list API",
        "x-viskan-error-code-cannot-delete-referenced-entity": "The price list cannot be deleted because it is referenced by other entities.",
        "x-viskan-error-code-price-list-not-found": "The price list with the given ID was not found.",
        "x-viskan-scope": "viskan:pricelist:delete"
      },
      "get": {
        "description": "Get a price list by its unique identifier.",
        "operationId": "getPriceList",
        "parameters": [
          {
            "name": "priceListId",
            "in": "path",
            "description": "The unique identifier of the price list to get.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the price list.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PriceListItem"
                }
              }
            }
          }
        },
        "summary": "Get a price list",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Price list API",
        "x-viskan-error-code-price-list-not-found": "The price list with the given ID was not found.",
        "x-viskan-scope": "viskan:pricelist:read"
      },
      "patch": {
        "description": "Update the details of a price list.",
        "operationId": "updatePriceList",
        "parameters": [
          {
            "name": "priceListId",
            "in": "path",
            "description": "The unique identifier of the price list to update.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePriceListRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The price list was updated successfully."
          }
        },
        "summary": "Update a price list",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Price list API",
        "x-viskan-error-code-price-list-name-cannot-be-blank": "Price list name cannot be a blank string.",
        "x-viskan-error-code-price-list-not-found": "The price list with the given ID was not found.",
        "x-viskan-scope": "viskan:pricelist:update"
      }
    },
    "/config/return-reason/return-reasons": {
      "get": {
        "description": "Searches for return reasons with optional filters and pagination. Results are sorted by code (case-insensitive).",
        "operationId": "findReturnReasons",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "keywords",
            "in": "query",
            "description": "Whitespace-separated keywords. Each token must match the reason code or description (case-insensitive AND across tokens).",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "Filter by the active status.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ACTIVE",
              "enum": [
                "ALL",
                "ACTIVE",
                "INACTIVE"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the found return reasons.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReturnReasonItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Find return reasons",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Return reason API",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-scope": "viskan:returnreason:read"
      },
      "post": {
        "description": "Creates a new return reason.",
        "operationId": "createReturnReason",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateReturnReasonRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The return reason was created successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreateReturnReasonResponse"
                }
              }
            }
          }
        },
        "summary": "Create a return reason",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Return reason API",
        "x-viskan-error-code-cancellation-reason-required": "A cancellation reason is required when subscription action is set to deactivate.",
        "x-viskan-error-code-return-reason-code-cannot-be-blank": "Return reason code cannot be a blank string.",
        "x-viskan-error-code-return-reason-default-duplicate": "A default already exists for this country and way of delivery.",
        "x-viskan-error-code-return-reason-description-cannot-be-blank": "Return reason description cannot be a blank string.",
        "x-viskan-error-code-return-reason-duplicate": "A return reason with this code already exists.",
        "x-viskan-error-code-return-reason-type-required": "Return reason type is required.",
        "x-viskan-scope": "viskan:returnreason:create"
      }
    },
    "/config/return-reason/return-reasons/{returnReasonId}": {
      "delete": {
        "description": "Deletes a return reason by its unique identifier.",
        "operationId": "deleteReturnReason",
        "parameters": [
          {
            "name": "returnReasonId",
            "in": "path",
            "description": "The unique identifier of the return reason to delete.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The return reason was deleted successfully."
          }
        },
        "summary": "Delete a return reason",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Return reason API",
        "x-viskan-error-code-cannot-delete-referenced-entity": "The return reason cannot be deleted because it is referenced by other entities.",
        "x-viskan-error-code-return-reason-not-found": "The return reason with the given ID was not found.",
        "x-viskan-scope": "viskan:returnreason:delete"
      },
      "get": {
        "description": "Get a return reason by its unique identifier.",
        "operationId": "getReturnReason",
        "parameters": [
          {
            "name": "returnReasonId",
            "in": "path",
            "description": "The unique identifier of the return reason to get.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the return reason.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ReturnReasonDetail"
                }
              }
            }
          }
        },
        "summary": "Get a return reason",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Return reason API",
        "x-viskan-error-code-return-reason-not-found": "The return reason with the given ID was not found.",
        "x-viskan-scope": "viskan:returnreason:read"
      },
      "patch": {
        "description": "Update the details of a return reason.",
        "operationId": "updateReturnReason",
        "parameters": [
          {
            "name": "returnReasonId",
            "in": "path",
            "description": "The unique identifier of the return reason to update.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReturnReasonRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The return reason was updated successfully."
          }
        },
        "summary": "Update a return reason",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Return reason API",
        "x-viskan-error-code-cancellation-reason-required": "A cancellation reason is required when subscription action is set to deactivate.",
        "x-viskan-error-code-return-reason-code-cannot-be-blank": "Return reason code cannot be a blank string.",
        "x-viskan-error-code-return-reason-default-duplicate": "A default already exists for this country and way of delivery.",
        "x-viskan-error-code-return-reason-default-not-found": "A default row to be modified was not found.",
        "x-viskan-error-code-return-reason-description-cannot-be-blank": "Return reason description cannot be a blank string.",
        "x-viskan-error-code-return-reason-duplicate": "A return reason with this code already exists.",
        "x-viskan-error-code-return-reason-not-found": "The return reason with the given ID was not found.",
        "x-viskan-scope": "viskan:returnreason:update"
      }
    },
    "/config/service-provider-config/service-provider-configs": {
      "get": {
        "description": "Returns all service provider configurations for the current company.",
        "operationId": "findServiceProviderConfigurations",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The response contains the found service provider configurations.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceProviderConfigurationSearchResult"
                }
              }
            }
          }
        },
        "summary": "Find service provider configurations",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Service provider configuration API",
        "x-viskan-scope": "viskan:serviceprovider:read"
      }
    },
    "/customer-property/customers/{customerId}/properties": {
      "get": {
        "description": "Returns all properties assigned to a customer.",
        "operationId": "getCustomerProperties",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "description": "The unique identifier of the customer.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the customer properties.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EntityPropertyItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Get property values for customer",
        "tags": [
          "Customer"
        ],
        "x-viskan-api-name": "Customer property API",
        "x-viskan-scope": "viskan:customer:read"
      }
    },
    "/customer-property/customers/{customerId}/properties/{propertyKeyId}": {
      "delete": {
        "description": "Removes a property from a customer.",
        "operationId": "deleteProperty_4",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "description": "The unique identifier of the customer.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The property was removed successfully."
          }
        },
        "summary": "Remove property value from customer",
        "tags": [
          "Customer"
        ],
        "x-viskan-api-name": "Customer property API",
        "x-viskan-scope": "viskan:customer:update"
      },
      "put": {
        "description": "Sets or updates the value of a single property key on a customer. PUT is full replacement — any existing values not in the request are removed. For raw types (\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eINTEGER\u003c/code\u003e, \u003ccode\u003eFLOAT\u003c/code\u003e, \u003ccode\u003eBOOLEAN\u003c/code\u003e, \u003ccode\u003eHTML\u003c/code\u003e): use \u003ccode\u003evalue\u003c/code\u003e for a single value or \u003ccode\u003evalues\u003c/code\u003e for multiple. Each value is an object: \u003ccode\u003e{\"value\": \"Gold\", \"translations\": [{\"languageCode\": \"sv\", \"name\": \"Guld\"}]}\u003c/code\u003e. Prefer a single \u003ccode\u003evalue\u003c/code\u003e; for multiple reusable values, consider \u003ccode\u003eMULTI_SELECT\u003c/code\u003e. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e: use \u003ccode\u003epropertyValueId\u003c/code\u003e. For \u003ccode\u003eMULTI_SELECT\u003c/code\u003e: use \u003ccode\u003epropertyValueIds\u003c/code\u003e.",
        "operationId": "setPropertyValue_4",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "description": "The unique identifier of the customer.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetPropertyValueRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property value was set successfully."
          }
        },
        "summary": "Set property value on customer",
        "tags": [
          "Customer"
        ],
        "x-viskan-api-name": "Customer property API",
        "x-viskan-error-code-customer-not-found": "The customer was not found.",
        "x-viskan-error-code-invalid-presentation-type": "The property key has an unknown presentation type.",
        "x-viskan-error-code-invalid-request-fields": "The wrong request fields were populated for the presentation type.",
        "x-viskan-error-code-invalid-value-format": "The provided value does not match the expected format.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-map-count-violation": "The number of values violates the min/max map count constraint.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-error-code-property-value-not-found": "The property value was not found or not linked to the key.",
        "x-viskan-scope": "viskan:customer:update"
      }
    },
    "/customer-property/property-keys": {
      "get": {
        "description": "Returns all customer property keys with their presentation types, translations, and values. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e and \u003ccode\u003eMULTI_SELECT\u003c/code\u003e keys, the predefined values are included.",
        "operationId": "findPropertyKeys_4",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The response contains the property keys.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PropertyKeyDetailItem"
                  }
                }
              }
            }
          }
        },
        "summary": "List customer property keys",
        "tags": [
          "Customer"
        ],
        "x-viskan-api-name": "Customer property API",
        "x-viskan-scope": "viskan:customerproperty:read"
      },
      "post": {
        "description": "Creates a new customer property key with optional translations and predefined values.",
        "operationId": "createPropertyKey_4",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePropertyKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property key was created successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Create customer property key",
        "tags": [
          "Customer"
        ],
        "x-viskan-api-name": "Customer property API",
        "x-viskan-error-code-duplicate-property-value": "Two or more values have the same name.",
        "x-viskan-error-code-invalid-property-key-name": "The property key name must not be empty.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-property-key-name-already-exists": "A property key with this name already exists.",
        "x-viskan-scope": "viskan:customerproperty:create"
      }
    },
    "/customer-property/property-keys/{propertyKeyId}": {
      "delete": {
        "description": "Deletes a customer property key and its translations.",
        "operationId": "deletePropertyKey_4",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The property key was deleted successfully."
          }
        },
        "summary": "Delete customer property key",
        "tags": [
          "Customer"
        ],
        "x-viskan-api-name": "Customer property API",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:customerproperty:delete"
      },
      "get": {
        "description": "Returns a single customer property key with its presentation type, translations, and values. Same shape as the list endpoint.",
        "operationId": "findPropertyKey_4",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the property key.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Get customer property key",
        "tags": [
          "Customer"
        ],
        "x-viskan-api-name": "Customer property API",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:customerproperty:read"
      },
      "put": {
        "description": "Updates a customer property key including its translations and predefined values.",
        "operationId": "updatePropertyKey_4",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePropertyKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property key was updated successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Update customer property key",
        "tags": [
          "Customer"
        ],
        "x-viskan-api-name": "Customer property API",
        "x-viskan-error-code-duplicate-property-value": "Two or more values have the same name.",
        "x-viskan-error-code-invalid-property-key-name": "The property key name must not be empty.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-property-key-name-already-exists": "A property key with this name already exists.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:customerproperty:update"
      }
    },
    "/customer-relationships/customer/customers": {
      "get": {
        "description": "Searches for customers in the system.",
        "operationId": "search",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "Filter on customers countries (ISO2), for example countryCode\u003dSE\u0026countryCode\u003dNO.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "description": "An optional filter on customer id. Mutually exclusive with customer number.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "-1"
            }
          },
          {
            "name": "customerNumber",
            "in": "query",
            "description": "An optional filter on customer number. Mutually exclusive with customer id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "emailAddress",
            "in": "query",
            "description": "Filter on customer email address.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeCompanies",
            "in": "query",
            "description": "Whether or not to include a list of companies for a customer if the customer is a company user.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includePickupPoints",
            "in": "query",
            "description": "Whether or not to include a list of pickup points stored for the customer.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeRemovedCustomers",
            "in": "query",
            "description": "Whether or not to include removed customers.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeUsers",
            "in": "query",
            "description": "Whether or not to include a list of users for a customer if the customer is a company.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. Useful for getting delta-changes. More\n\u003ca href\u003d\"../general-information/index.html#modifiedAfter\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "multiBrandId",
            "in": "query",
            "description": "An optional filter on the multibrand (concept) the customer belongs to.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "-1"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "100"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters. More\n\u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "zipcode",
            "in": "query",
            "description": "Filter on customers zipcodes / postalcodes (requires a country and/or email as well).",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:customer:read"
      },
      "post": {
        "description": "Adds or updates a list of customers.",
        "operationId": "addOrUpdate",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomersToAddOrUpdate"
              }
            }
          },
          "description": "The customers to add or update."
        },
        "responses": {
          "200": {
            "description": "The customers were updated successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerToAddOrUpdateResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:customer:create"
      }
    },
    "/customer-relationships/customer/customers/{customerId}": {
      "patch": {
        "description": "Updates a specific customer.",
        "operationId": "update",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "description": "The identifier of the customer to update.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerChanges"
              }
            }
          },
          "description": "The changes to apply."
        },
        "responses": {
          "204": {
            "description": "The customer was updated successfully."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:customer:update"
      }
    },
    "/customer-relationships/customer/customers/{customerId}/customer-activities": {
      "post": {
        "description": "Adds a list of customer activity(s) for a customer.",
        "operationId": "addCustomerActivity",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "description": "The identifier of the customer to whom the activity(s) will be added.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerActivitiesToAdd"
              }
            }
          },
          "description": "The list of customer activity(s) to add."
        },
        "responses": {
          "204": {
            "description": "The customer activity(s) added successfully"
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:customeractivity:create"
      }
    },
    "/customer-relationships/customer/customers/{customerId}/subscriptions": {
      "get": {
        "deprecated": true,
        "operationId": "listSubscriptions",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "description": "Filter on customer Id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "customFieldValue",
            "in": "query",
            "description": "An optional filter on one/many custom field values. For example\ncustomFieldValue\u003d22468-15267-80\u0026customFieldValue\u003d22468-15267-81",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "excludeSubscriptions",
            "in": "query",
            "description": "Filter for excluding subscriptions.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "default": ""
            }
          },
          {
            "name": "includeUpcomingDeliveries",
            "in": "query",
            "description": "whether to include upcoming deliveries or not. If not specified the upcoming deliveries are not included.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. Useful for getting delta-changes. More\n\u003ca href\u003d\"../general-information/index.html#modifiedAfter\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "100"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters. More\n\u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:subscription:read"
      }
    },
    "/customer-relationships/note/notes": {
      "get": {
        "description": "Searches for notes in the system.",
        "operationId": "search2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "description": "Filter on customer id. Mutually exclusive with customer number.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "customerNumber",
            "in": "query",
            "description": "Filter on customer name. Mutually exclusive with customer id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. Useful for getting delta-changes. More\n\u003ca href\u003d\"../general-information/index.html#modifiedAfter\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "100"
            }
          },
          {
            "name": "searchAfterId",
            "in": "query",
            "description": "The identifier of the search to continue from. Used to fetch more pages.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "0"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoteResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:customer:read"
      }
    },
    "/customer-relationships/offer/offers": {
      "get": {
        "description": "Searches for offers in the system.",
        "operationId": "search3",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "activeOnly",
            "in": "query",
            "description": "Only include active offers.",
            "schema": {
              "type": "boolean",
              "default": "false"
            }
          },
          {
            "name": "includeStockKeepingUnits",
            "in": "query",
            "description": "Include the connected stock keeping units in the result. This can be a lot of data, so try to keep \u003ccode\u003eresultsPerPage\u003c/code\u003e quite low when using this.",
            "schema": {
              "type": "boolean",
              "default": "false"
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. Useful for getting delta-changes. More \u003ca href\u003d\"../general-information/index.html#modifiedAfter\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "offerName",
            "in": "query",
            "description": "Filter on offer name.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "100"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters. More \u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfferResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:offer:read"
      }
    },
    "/customer-relationships/offer/offers/{offerId}/offer-codes": {
      "post": {
        "description": "Adds offer-codes to a specific offer.",
        "operationId": "update2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "offerId",
            "in": "path",
            "required": true,
            "description": "The identifier of the offer to update.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "description": "The offer code(s) to add.",
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/OfferCodes"
                }
              }
            }
          },
          "description": "The offer code(s) to add."
        },
        "responses": {
          "204": {
            "description": "The offer code(s) were added successfully."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:offer:update"
      }
    },
    "/customer-relationships/property/properties": {
      "delete": {
        "description": "Deletes the properties for the customers.",
        "operationId": "delete",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PropertiesToDelete"
              }
            }
          },
          "description": "The properties to delete."
        },
        "responses": {
          "200": {
            "description": "The properties were updated successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The properties were updated successfully.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:customer:forget"
      },
      "get": {
        "description": "Gets customer properties for the given customers.",
        "operationId": "get",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerIds",
            "in": "query",
            "description": "Filter on the customer id(s) connected to property, comma separated values (CSV). Mutually exclusive with customerNumbers.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerNumbers",
            "in": "query",
            "description": "Filter on the customer number(s) connected to property, comma separated values (CSV). Mutually exclusive with customerIds.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:customer:read"
      },
      "post": {
        "description": "Connects a list of properties.",
        "operationId": "addOrUpdate2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PropertiesToConnect"
              }
            }
          },
          "description": "The properties to connect for the given customer."
        },
        "responses": {
          "204": {
            "description": "The properties were updated successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The properties were updated successfully.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:customer:update"
      }
    },
    "/customer-relationships/subscription/subscriptions": {
      "get": {
        "description": "Searches for subscriptions in the system.",
        "operationId": "listSubscriptions2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customFieldValue",
            "in": "query",
            "description": "An optional filter on one/many custom field values. For example\ncustomFieldValue\u003d22468-15267-80\u0026customFieldValue\u003d22468-15267-81",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "description": "Filter on customer Id.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "-1"
            }
          },
          {
            "name": "customerNumber",
            "in": "query",
            "description": "Filter on customer number.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "excludeSubscriptions",
            "in": "query",
            "description": "Filter for excluding subscriptions.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "default": ""
            }
          },
          {
            "name": "includeSubscriptionRows",
            "in": "query",
            "description": "whether to include subscription rows or not. If not specified the subscription rows are not included.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeUpcomingDeliveries",
            "in": "query",
            "description": "whether to include upcoming deliveries or not. If not specified the upcoming deliveries are not included.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. Useful for getting delta-changes. More\n\u003ca href\u003d\"../general-information/index.html#modifiedAfter\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "multiBrandId",
            "in": "query",
            "description": "An optional filter on the multibrand (concept) the customer belongs to.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "-1"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "purchaseNumber",
            "in": "query",
            "description": "An optional filter on a one/many purchase numbers. For example \u003ccode\u003e34D5JZJ, 19JXCDA\u003c/code\u003e",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "100"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters. More\n\u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subscriptionId",
            "in": "query",
            "description": "Filter on subscription Id.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionResult_SubscriptionAPI"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:subscription:read"
      }
    },
    "/customer-relationships/subscription/subscriptions/{subscriptionId}": {
      "patch": {
        "description": "Inserts or updates row to an existing subscription.",
        "operationId": "updateSubscriptions",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "description": "The id of the subscription that is to have its rows updated",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubscriptionRowsToAddOrUpdate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The subscription was successfully updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionRowsToAddOrUpdateResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:subscription:update"
      }
    },
    "/developer/api-request/request-logs": {
      "get": {
        "description": "Finds API request logs for the current tenant with optional filters and cursor-based pagination. Logs are limited to the last 14 days; \u003ccode\u003efromDate\u003c/code\u003e values older than that are clamped.",
        "operationId": "findRequestLogs",
        "parameters": [
          {
            "name": "searchAfter",
            "in": "query",
            "description": "Cursor returned by a previous response to fetch the next page.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fromDate",
            "in": "query",
            "description": "Inclusive lower bound for the log timestamp (ISO-8601). Defaults to one hour before \u003ccode\u003etoDate\u003c/code\u003e.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "query",
            "description": "Inclusive upper bound for the log timestamp (ISO-8601). Defaults to now.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "path",
            "in": "query",
            "description": "Substring to match against the request URL path.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "correlationId",
            "in": "query",
            "description": "Filter by exact correlation (trace) identifier.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "clientId",
            "in": "query",
            "description": "Filter by one or more client identifiers.",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "method",
            "in": "query",
            "description": "Filter by one or more HTTP methods (e.g. \u003ccode\u003eGET\u003c/code\u003e, \u003ccode\u003ePOST\u003c/code\u003e).",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "pathPattern",
            "in": "query",
            "description": "Filter by one or more API path patterns (e.g. \u003ccode\u003e/orders/{orderId}\u003c/code\u003e).",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "statusCode",
            "in": "query",
            "description": "Filter by one or more HTTP response status codes.",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the matching request logs and aggregations.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/RequestLogResult"
                }
              }
            }
          }
        },
        "summary": "Find request logs",
        "tags": [
          "Developer"
        ],
        "x-viskan-api-name": "API request log API",
        "x-viskan-scope": "viskan:apilog:read"
      }
    },
    "/estore/article-category/article-detail": {
      "post": {
        "description": "Loads article detail",
        "operationId": "articleDetail",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IArticleDetailRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Article detail was fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Article detail was fetched successfully",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "204": {
            "description": "No article was found with provided parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "No article was found with provided parameters.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:product:read"
      }
    },
    "/estore/article-category/article-list": {
      "post": {
        "description": "List articles",
        "operationId": "articleList",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IArticleListRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Article list was fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Article list was fetched successfully",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:product:read"
      }
    },
    "/estore/article-category/article-sitemap": {
      "post": {
        "description": "Article sitemap",
        "operationId": "articleSitemap",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IArticleSitemapRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Sitemap was fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Sitemap was fetched successfully",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:product:read"
      }
    },
    "/estore/article-category/breadcrumbs/{categoryId}": {
      "post": {
        "description": "Breadcrumbs",
        "operationId": "breadcrumbs",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "categoryId",
            "in": "path",
            "required": true,
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ArticleCategoryRequest"
        },
        "responses": {
          "200": {
            "description": "Breadcrumbs was fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Breadcrumbs was fetched successfully",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:productcategory:read"
      }
    },
    "/estore/article-category/categories": {
      "get": {
        "description": "Category query - external",
        "operationId": "categoryQuery",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "query",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Query was executed successfully",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Query was executed successfully",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:productcategory:read"
      }
    },
    "/estore/article-category/category-sitemap": {
      "post": {
        "description": "Category sitemap",
        "operationId": "categorySitemap",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ICategorySitemapRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Sitemap was fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Sitemap was fetched successfully",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:productcategory:read"
      }
    },
    "/estore/article-category/filter-property-keys": {
      "get": {
        "description": "Filter property keys",
        "operationId": "filterPropertyKeys",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ArticleCategoryRequest"
        },
        "responses": {
          "200": {
            "description": "Filter property keys was fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Filter property keys was fetched successfully",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:product:read"
      }
    },
    "/estore/category-v3/categories": {
      "get": {
        "description": "Fetches the contents of a category.",
        "operationId": "getCategory",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cat_id",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "-1"
            }
          },
          {
            "name": "linkFriendlyName",
            "in": "query",
            "description": "The link friendly name of the category to get. Mutually exclusive with \u003ccode\u003etag\u003c/code\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tag",
            "in": "query",
            "description": "The tag of the category to get. Mutually exclusive with \u003ccode\u003elinkFriendlyName\u003c/code\u003e.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The category was fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentCategory"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationErrors"
                }
              }
            }
          },
          "404": {
            "description": "No category was found using the given filter",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:webpage:read"
      }
    },
    "/estore/category-v3/trees": {
      "get": {
        "description": "Fetches the hierarchical category tree from a specific category that will be seen as the root of the tree.",
        "operationId": "getCategoryTree",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "linkFriendlyName",
            "in": "query",
            "description": "The link friendly name of the category to use as the root. Mutually exclusive with \u003ccode\u003etag\u003c/code\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tag",
            "in": "query",
            "description": "The tag of the category to use as the root. Mutually exclusive with \u003ccode\u003elinkFriendlyName\u003c/code\u003e.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The category tree was fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentTree"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationErrors"
                }
              }
            }
          },
          "404": {
            "description": "No category was found using the given filter",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:productcategory:read"
      }
    },
    "/estore/checkout/details": {
      "post": {
        "description": "Gets checkout details, potentially including HTML snippets generated by third party payment service providers.",
        "operationId": "getDetails",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckoutDetailsRequest"
              }
            }
          },
          "description": "The request to get details."
        },
        "responses": {
          "201": {
            "description": "Returns the checkout details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckoutDetails"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:cart:checkout"
      }
    },
    "/estore/checkout/stock/validate": {
      "post": {
        "description": "Validates that the given shopcart can be fulfilled by a third party stock source, such as the customers business system, before the purchase is\ncompleted.\n\u003cp\u003e\nThe stock source is resolved from the service provider configuration in the request. When it reports a row it cannot fulfill, the request fails\nwith an error per affected product rather than letting the purchase continue.\n\u003cp\u003e\nWhether a stock source that cannot be reached stops the purchase is up to the stock source implementation. Several of them let the rows pass\nunchecked, on the grounds that not being able to ask is not the same as the item being out of stock, so a successful response does not by itself\nguarantee that every row was actually verified.",
        "operationId": "validate",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckoutStockValidationRequest"
              }
            }
          },
          "description": "The request describing what to validate and which stock source to validate against."
        },
        "responses": {
          "204": {
            "description": "The shopcart is valid and the purchase may be completed"
          },
          "400": {
            "description": "The shopcart cannot be fulfilled, or the given input parameters are incorrect. A more descriptive error message is provided in the response body, one per affected product when rows cannot be fulfilled.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationErrors"
                }
              }
            }
          },
          "500": {
            "description": "No stock source is configured for the given service provider configuration",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationErrors"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:cart:checkout"
      }
    },
    "/estore/common/messages": {
      "post": {
        "description": "Creates a new message from a customer.",
        "operationId": "messages",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerMessage"
              }
            }
          },
          "description": "The data of the message such as if it should be displayed directly in Helpdesk or sent as an email etc."
        },
        "responses": {
          "200": {
            "description": "The message was successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The message was successfully created.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:contactformemail:send"
      }
    },
    "/estore/common/referrals": {
      "post": {
        "description": "Initiates a new referral from one customer to another.",
        "operationId": "referrals",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Referral"
              }
            }
          },
          "description": "The data of the referral."
        },
        "responses": {
          "200": {
            "description": "The referral was successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The referral was successfully created.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "none"
      }
    },
    "/estore/country/cities": {
      "get": {
        "description": "Searches city by zip code. Response contains cities connected to the specified zip code or empty array if specified zip code is invalid or there is no\ncities connected to it.",
        "operationId": "getCities",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "zipcode",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The city search result was successfully loaded and is included in the response body.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The city search result was successfully loaded and is included in the response body.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/City"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:city:read"
      }
    },
    "/estore/country/countries": {
      "get": {
        "description": "Gets the available countries.",
        "operationId": "getCountries",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The available countries.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The available countries.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Country"
                  }
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:country:read"
      }
    },
    "/estore/delivery-method/delivery-methods": {
      "get": {
        "description": "Gets a list of all available delivery methods.",
        "operationId": "getDeliveryMethods",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "The country to filter for.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "weight",
            "in": "query",
            "description": "The weight to filter for.",
            "schema": {
              "type": "string",
              "default": "0.00"
            }
          },
          {
            "name": "zipcode",
            "in": "query",
            "description": "An optional zipcode, that will be used for any potential zipcode filtering.",
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The available delivery methods.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The available delivery methods.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DeliveryMethod"
                  }
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:shippingmethod:read"
      }
    },
    "/estore/delivery-point/delivery-points": {
      "get": {
        "description": "Gets all available delivery points with the provided filter.",
        "operationId": "getDeliveryPoints",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "The country to use.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryMethodId",
            "in": "query",
            "required": true,
            "description": "The delivery method to filter for. Mutually exclusive with \u003ccode\u003eprovider\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "provider",
            "in": "query",
            "description": "The provider to filter for. Mutually exclusive with \u003ccode\u003edeliveryPointId\u003c/code\u003e.",
            "schema": {
              "type": "string",
              "enum": [
                "BEST",
                "BRING_CITYMAIL",
                "BRING_PARCELS",
                "COURIER",
                "CZECH_POST",
                "DHL",
                "DSV",
                "EDI_SOFT",
                "GENERAL",
                "GLS",
                "GORDON_DELIVERY",
                "HUNGARIAN_POST",
                "INGRID",
                "INTERNAL_LOGISTICS",
                "IN_STORE_PICKUP",
                "LBC",
                "LITHUANIAN_POST",
                "MATKAHUOLTO",
                "NORWEGIAN_POST",
                "PNL",
                "POLISH_POST",
                "POSTEN",
                "POSTI",
                "RIKSDISTRIBUTION",
                "SCHENKER",
                "SLOVAKIAN_POST",
                "SLOVENIAN_POST",
                "UNKNOWN",
                "UPS"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The available delivery points.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The available delivery points.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DeliveryPoint"
                  }
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:pickuplocation:read"
      }
    },
    "/estore/delivery-point/delivery-points-by-search-string": {
      "get": {
        "description": "Gets all available delivery points which match the search string. Note! The whole string is matched!\nNote! Search is case sensitive so you probably need to convert character cases.",
        "operationId": "getDeliveryPointsBySearchString",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "The country to search delivery points in.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "searchString",
            "in": "query",
            "description": "The search string, for example customer\u0027s zip code or city where the customer want to pickup the package etc.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "searchTerm",
            "in": "query",
            "description": "The search term to match: zipcodes, city, deliverypoint_name etc",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Delivery points which match the search",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Delivery points which match the search",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DeliveryPoint"
                  }
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:pickuplocation:read"
      }
    },
    "/estore/delivery-time-slot/delivery-time-slots": {
      "get": {
        "description": "Gets all available delivery time slots with the provided filter.",
        "operationId": "getDeliveryTimeSlots",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "The country to use.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryMethodId",
            "in": "query",
            "required": true,
            "description": "The delivery method to filter for.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "zipcode",
            "in": "query",
            "description": "The zipcode to filter for.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The available time slots.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The available time slots.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TimeSlot"
                  }
                }
              }
            }
          }
        },
        "x-viskan-scope": "none"
      }
    },
    "/estore/express/purchases": {
      "post": {
        "description": "Creates a new purchase using a Streamline Express page and given customer information.",
        "operationId": "purchases",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StreamlineExpressRequest"
              }
            }
          },
          "description": "The request to create a purchase."
        },
        "responses": {
          "201": {
            "description": "The response generated by Streamline Express.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StreamlineExpressResponse"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:cart:checkout"
      }
    },
    "/estore/navigation/path-info": {
      "get": {
        "description": "Gets path information for a given path.",
        "operationId": "getPathInfo",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ignoreLanguage",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "path",
            "in": "query",
            "description": "The path to get the information for. Mutually exclusive with productNumber.",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "prefix",
            "in": "query",
            "description": "An optional prefix to include when searching for redirects.",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "preview",
            "in": "query",
            "required": true,
            "description": "",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "productNumber",
            "in": "query",
            "description": "The product number to get the information for. Mutually exclusive with path.",
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A target was found for the path.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PathInfo"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationErrors"
                }
              }
            }
          },
          "404": {
            "description": "No target was found for the path.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationErrors"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:webpage:read"
      }
    },
    "/estore/payment-method/payment-methods": {
      "get": {
        "description": "Gets a list of all available payment methods.",
        "operationId": "getPaymentMethods",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "The country to filter for.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The available payment methods.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The available payment methods.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PaymentMethod"
                  }
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:paymentmethod:read"
      }
    },
    "/estore/product/feed": {
      "post": {
        "description": "Product feed",
        "operationId": "productFeed",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductFeedRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Product feed was fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductFeedResponse"
                }
              }
            }
          }
        },
        "summary": "Get product feed",
        "tags": [
          "Web store"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-scope": "viskan:product:read"
      }
    },
    "/estore/product/product": {
      "post": {
        "description": "Loads a product detail",
        "operationId": "productDetail",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductDetailRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Product detail was fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductDetailResponse"
                }
              }
            }
          },
          "404": {
            "description": "No products were found with provided parameters.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Get product details",
        "tags": [
          "Web store"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-scope": "viskan:product:read"
      }
    },
    "/estore/product/products": {
      "post": {
        "description": "List products",
        "operationId": "productList",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductListRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Product list was fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Sort DEFAULT was requested without a categoryId or categoryUUID.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Get product list",
        "tags": [
          "Web store"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-scope": "viskan:product:read"
      }
    },
    "/estore/product/products/_search": {
      "post": {
        "description": "Search products",
        "operationId": "productSearch",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductSearchRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Product list was fetched successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Sort DEFAULT was requested, which is not supported when searching.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Search for products",
        "tags": [
          "Web store"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-scope": "viskan:product:read"
      }
    },
    "/estore/purchase-v2/cancellations": {
      "post": {
        "description": "Cancels an \u003cb\u003eongoing\u003c/b\u003e purchase with the given information.",
        "operationId": "cancel",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelPurchaseParams"
              }
            }
          },
          "description": "The parameters to use when canceling the purchase."
        },
        "responses": {
          "201": {
            "description": "The result of canceling the pending purchase. Most importantly it contains a shopcartId that can be used to show the shopping\ncart again.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelPurchaseResult"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:cart:checkout"
      }
    },
    "/estore/purchase-v2/purchases": {
      "post": {
        "description": "Creates a new purchase with the given information.",
        "operationId": "create",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePurchaseParams"
              }
            }
          },
          "description": "The parameters to use when creating the purchase."
        },
        "responses": {
          "201": {
            "description": "The result of creating the purchase. This has information about what the API client need to do to fulfill the payment (if necessary).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatePurchaseResult"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:cart:checkout"
      }
    },
    "/estore/query/queries": {
      "post": {
        "deprecated": true,
        "description": "Performs a query to extract dynamic data from ETM.",
        "operationId": "query",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueryServiceRequest"
              }
            }
          },
          "description": "The query request, containing details about the query to perform."
        },
        "responses": {
          "200": {
            "description": "The query was successful and is included in the response body.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryServiceResultPayload"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "none"
      }
    },
    "/estore/raw-purchase/_calculate-tax-rate": {
      "post": {
        "description": "Calculates tax rate for the given products.\n\u003cp\u003e\n\u003cb\u003eNOTE:\u003c/b\u003e For US only: If there is no nexus in the state of the receiver, the tax rate will be zero,\nand \u003ci\u003eamountExcludingTax\u003c/i\u003e will be equal to \u003ci\u003eamountIncludingTax\u003c/i\u003e on all prices.\n\u003cp\u003e\n\u003cb\u003eNOTE:\u003c/b\u003e When calculating amounts from quantities there might be some natural inconsistency between \u003ci\u003eamountExcludingTax\u003c/i\u003e and \u003ci\u003eamountIncludingTax\u003c/i\u003e\ndue to the way we calculate tax per quantity (as opposed to the whole sum) and round half up for each quantity.\nThis is true for both internal and external calculations, but only the \"calculated\" amount could potentially be different.\nFor external calculations, only \u003ci\u003eamountIncludingTax\u003c/i\u003e could differ.\n\u003cp\u003e\n\u003cb\u003eExample:\u003c/b\u003e\u003cbr\u003e\n\u003ci\u003eExternal (US)\u003c/i\u003e\u003cbr\u003e\n\u003cp\u003e\n\u003cb\u003eRequest\u003c/b\u003e\u003cbr\u003e\n\u003ci\u003eunitPriceExcludingTax: 176.25\u003c/i\u003e\u003cbr\u003e\n\u003ci\u003ediscountExcludingTax: 13.37\u003c/i\u003e\u003cbr\u003e\n\u003ci\u003equantity: 2\u003c/i\u003e\u003cbr\u003e\n\u003ci\u003e(VAT: 30%)\u003c/i\u003e\n\u003cp\u003e\n\u003cb\u003eResponse\u003c/b\u003e\u003cbr\u003e\n\u003ci\u003eunitPriceIncludingTax: 229.13\u003c/i\u003e\u003cbr\u003e\n\u003ci\u003eunitPriceExcludingTax: 176.25\u003c/i\u003e\u003cbr\u003e\n\u003ci\u003ediscountIncludingTax: 17.38\u003c/i\u003e\u003cbr\u003e\n\u003ci\u003ediscountExcludingTax: 13.37\u003c/i\u003e\u003cbr\u003e\n\u003ci\u003eamountIncludingTax: 260.88\u003c/i\u003e\u003cbr\u003e\n\u003ci\u003eamountExcludingTax: 339.13\u003c/i\u003e\n\u003cp\u003e\nAs a result, all calculations add up independently, but when you actually try to derive\nexcluding vat from the amountIncludingTax, it does not add up.\n\u003cp\u003e\n\u003ci\u003e176.25 * 2 - 13.36 \u003d 339.14\u003c/i\u003e\u003cbr\u003e\n\u003ci\u003e229.13 * 2 - 17.38 \u003d 440.88\u003c/i\u003e\u003cbr\u003e\nbut\u003cbr\u003e\n\u003ci\u003e339.13 * 1.3 \u003d 440.8692307692308 ~\u003d 440.87 !\u003d 440.88\u003c/i\u003e\n\u003cp\u003e\nThis is correct, though, since what the customer sees and pays for is the price calculated for each qty (176.25 and 229.13).",
        "operationId": "calculateTaxRate",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateRequest"
              }
            }
          },
          "description": "The lines to calculate the tax rate for."
        },
        "responses": {
          "200": {
            "description": "The tax rates were calculated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxRateResponse"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Calculate tax rates",
        "tags": [
          "Shopping"
        ],
        "x-viskan-api-name": "Raw purchase API",
        "x-viskan-scope": "viskan:order:create, viskan:subscription:create"
      }
    },
    "/estore/raw-purchase/purchases": {
      "post": {
        "description": "Creates a new raw purchase with the given information.",
        "operationId": "createRawPurchase",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RawPurchaseRequest"
              }
            }
          },
          "description": "The purchase to create."
        },
        "responses": {
          "201": {
            "description": "The purchase was created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RawPurchaseResponse"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Create purchase",
        "tags": [
          "Shopping"
        ],
        "x-viskan-api-name": "Raw purchase API",
        "x-viskan-scope": "viskan:order:create, viskan:subscription:create"
      }
    },
    "/estore/receipt/receipts": {
      "get": {
        "deprecated": true,
        "description": "Gets a receipt by its unique identifier. The identifier can be of different types, such as:\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ecollectorBankPublicToken\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eklarnaId\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003epurchaseNumber\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\nThese parameters are defined as regular query parameters.",
        "operationId": "getReceipt",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "The country to filter for.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "metaMapping",
            "in": "query",
            "description": "The data-mapping used to load meta-data about the receipt rows.",
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The receipt was successfully loaded and is included in the response body.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Receipt"
                }
              }
            }
          },
          "204": {
            "description": "The receipt exists but is not ready to be shown.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Receipt"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          },
          "404": {
            "description": "No receipt exists with the given identifier.",
            "content": {
              "application/json": {}
            }
          },
          "500": {
            "description": "Something is incorrectly set up, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:cart:checkout"
      }
    },
    "/estore/receipt/receipts/{purchaseNumber}": {
      "get": {
        "description": "Gets a receipt by its purchase number.",
        "operationId": "getReceiptByPurchaseNumber",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "purchaseNumber",
            "in": "path",
            "description": "The purchase number to get receipt for.",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "maskData",
            "in": "query",
            "description": "Specifies whether or not we should mask data for customers.",
            "schema": {
              "type": "boolean",
              "default": "false"
            }
          },
          {
            "name": "metaMapping",
            "in": "query",
            "description": "The data-mapping used to load meta-data about the receipt rows.",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "metaMappingForSubscriptions",
            "in": "query",
            "description": "The data-mapping used to load meta-data about the subscriptions.",
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "headers": {
              "X-Service-Provider-Code": {
                "description": "The code of the service provider, if a service provider is used.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "The receipt was successfully loaded and is included in the response body.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Receipt"
                }
              }
            }
          },
          "204": {
            "headers": {
              "X-Service-Provider-Code": {
                "description": "The code of the service provider, if a service provider is used.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "The receipt exists but is not ready to be shown.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Receipt"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          },
          "404": {
            "description": "No receipt exists with the given identifier.",
            "content": {
              "application/json": {}
            }
          },
          "500": {
            "description": "Something is incorrectly set up, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:cart:checkout"
      }
    },
    "/estore/seller/sellers": {
      "get": {
        "description": "Gets a collection of all active sellers that are connected to the currently used store.",
        "operationId": "getSellers",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The sellers was successfully loaded and is included in the response body.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The sellers was successfully loaded and is included in the response body.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Seller"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Something is incorrectly set up, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:seller:read"
      }
    },
    "/estore/service-provider/configuration/{serviceProviderConfigurationId}": {
      "get": {
        "description": "Gets a single service provider configuration by its id.",
        "operationId": "getServiceProviderConfiguration",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serviceProviderConfigurationId",
            "in": "path",
            "required": true,
            "description": "The service provider configuration Id to use.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The service provider configuration.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceProviderConfiguration"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:serviceprovider:read"
      }
    },
    "/estore/service-provider/configurations": {
      "get": {
        "description": "Gets all available service provider configurations with the provided filter.",
        "operationId": "getServiceProviderConfigurations",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serviceProviderCode",
            "in": "query",
            "description": "The service provider code to use.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The available service provider configurations.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The available service provider configurations.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ServiceProviderConfiguration"
                  }
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:serviceprovider:read"
      }
    },
    "/estore/store/articles/id/{articleId}/stock-balances": {
      "get": {
        "description": "Gets a collection of store information and stock balances.",
        "operationId": "getStoreBalances",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "articleId",
            "in": "path",
            "required": true,
            "description": "Identifier for an article to find in stores",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "attribute1Id",
            "in": "query",
            "description": "Identifier for article attribute 1 to find in stores",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "attribute2Id",
            "in": "query",
            "description": "Identifier for article attribute 2 to find in stores",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "attribute3Id",
            "in": "query",
            "description": "Identifier for article attribute 3 to find in stores",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "city",
            "in": "query",
            "description": "The city in which to find stores",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "A two-letter representation of the country (ISO 3166-1 alpha-2) in which to find stores",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "includeStoresWithZeroBalance",
            "in": "query",
            "description": "Set to true to include stores that does not have the desired article in stock",
            "schema": {
              "type": "boolean",
              "default": "false"
            }
          },
          {
            "name": "respectQuantityThreshold",
            "in": "query",
            "description": "Set to true to include only SKU that satisfies the quantity threshold for the provided article/store\ncombination",
            "schema": {
              "type": "boolean",
              "default": "false"
            }
          },
          {
            "name": "storeId",
            "in": "query",
            "description": "Identifier for which specific store to list balances for - uses respectQuantityThreshold",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "-1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "description": "",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PhysicalStoreStockBalance"
                  }
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:stockbalance:read"
      }
    },
    "/estore/store/settings": {
      "get": {
        "description": "Gets store settings for the current webstore.",
        "operationId": "getStoreSettings",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "groupTag",
            "in": "query",
            "description": "The optional group tag to filter settings by.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeSecrets",
            "in": "query",
            "description": "Whether to return secret settings. Secrets must be handled in a secure way and never be exposed to the public.",
            "schema": {
              "type": "boolean",
              "default": "false"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The settings was successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The settings was successfully retrieved.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/StoreSetting"
                  }
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:webstore:read"
      }
    },
    "/estore/store/settings/{settingKey}": {
      "get": {
        "description": "Gets a single store setting by its key, for the current webstore.",
        "operationId": "getSetting",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "settingKey",
            "in": "path",
            "description": "The key of the setting to get.",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "includeSecrets",
            "in": "query",
            "description": "Whether to return secret settings. Secrets must be handled in a secure way and never be exposed to the public.",
            "schema": {
              "type": "boolean",
              "default": "false"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The setting was successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoreSetting"
                }
              }
            }
          },
          "404": {
            "description": "No setting was found with the given key.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:webstore:read"
      }
    },
    "/estore/store/stores": {
      "get": {
        "description": "Gets a collection of active physical stores. All parameters are optional; when no filter is given, all physical stores are returned.",
        "operationId": "getStores",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "city",
            "in": "query",
            "description": "Optional. The city in which to find stores.",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "Optional. A two-letter representation of the country (ISO 3166-1 alpha-2) in which to find stores.",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "size",
            "in": "query",
            "description": "Optional. The maximum number of stores to return, defaults to 500.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "500"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "description": "",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PhysicalStore"
                  }
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:physicalstore:read"
      }
    },
    "/estore/voucher/_lookup": {
      "post": {
        "description": "Looks up a voucher at the third party service provider without reserving anything on it and without adding it to a shopcart.\n\u003cp\u003e\nWhen the voucher cannot be used the response is a \u003ccode\u003e400\u003c/code\u003e carrying one of the following error codes:\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003evoucher.lookup.no-voucher-found\u003c/code\u003e: no voucher exists with the given number\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evoucher.lookup.expired\u003c/code\u003e: the voucher has passed its valid to date\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evoucher.lookup.no-funds-left\u003c/code\u003e: the voucher has no amount left on it\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evoucher.lookup.not-started\u003c/code\u003e: the period of the voucher has not yet started\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evoucher.lookup.verification-code-required\u003c/code\u003e: the provider requires a verification code, but none was given\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evoucher.lookup.verification-code-incorrect\u003c/code\u003e: the given verification code was incorrect\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evoucher.lookup.verification-code-not-required\u003c/code\u003e: a verification code was given, but the provider does not use one\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evoucher.lookup.no-payment-method-found\u003c/code\u003e: no payment method exists with the given id for the store and country\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evoucher.lookup.payment-method-does-not-handle-vouchers\u003c/code\u003e: the payment method is not connected to a voucher provider\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evoucher.lookup.unknown-error\u003c/code\u003e: the provider rejected the voucher for a reason it did not specify\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/p\u003e",
        "operationId": "lookup",
        "parameters": [
          {
            "name": "V-Language-Code",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. This header is used when authenticating with OAuth, and defaults to \u003ccode\u003een\u003c/code\u003e when not present. Calls using the legacy authentication use \u003ccode\u003eX-Language\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VoucherLookupRequest"
              }
            }
          },
          "description": "The voucher to look up."
        },
        "responses": {
          "200": {
            "description": "The voucher was found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VoucherLookupResponse"
                }
              }
            }
          },
          "400": {
            "description": "No voucher was found, or it cannot be used.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationErrors"
                }
              }
            }
          }
        },
        "summary": "Look up a voucher",
        "tags": [
          "Web store"
        ],
        "x-viskan-api-name": "Voucher API",
        "x-viskan-scope": "viskan:voucher:read"
      }
    },
    "/global/tenant/tenants": {
      "get": {
        "description": "Searches for tenants in the platform.",
        "operationId": "getAllTenants",
        "responses": {
          "200": {
            "description": "The response contains a set of search hits.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TenantInfo"
                  }
                }
              }
            }
          }
        },
        "summary": "Find tenants",
        "tags": [
          "Global"
        ],
        "x-viskan-api-name": "Tenant API",
        "x-viskan-scope": "viskan-global:tenant:read"
      },
      "post": {
        "description": "Creates a new tenant in the Viskan platform.",
        "operationId": "createTenant",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTenantRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The response contains the identifier of the newly created tenant.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedTenant"
                }
              }
            }
          }
        },
        "summary": "Create new tenant",
        "tags": [
          "Global"
        ],
        "x-viskan-api-name": "Tenant API",
        "x-viskan-error-code-country-code-is-invalid": "The given country code is not valid.",
        "x-viskan-error-code-database-host-is-required": "A database host must be provided to create a tenant.",
        "x-viskan-error-code-database-name-is-unavailable": "The database name generated by the given database name key is already used by another tenant.",
        "x-viskan-error-code-database-name-key-is-required": "A database name key must be provided to create a tenant.",
        "x-viskan-error-code-organization-number-is-required": "An organization number must be provided to create a tenant.",
        "x-viskan-error-code-tenant-name-is-required": "A tenant name must be provided to create a tenant.",
        "x-viskan-error-code-tenant-name-is-unavailable": "The given tenant name is already used by another tenant.",
        "x-viskan-scope": "viskan-global:tenant:create"
      }
    },
    "/global/tenant/tenants/{tenantId}": {
      "delete": {
        "description": "Deletes a tenant.",
        "operationId": "deleteTenant",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The ID of the tenant to delete.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "tenantName",
            "in": "query",
            "description": "The name of the tenant to delete. Used to verify the deletion.",
            "required": false,
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The tenant was successfully deleted."
          }
        },
        "summary": "Delete tenant",
        "tags": [
          "Global"
        ],
        "x-viskan-api-name": "Tenant API",
        "x-viskan-error-code-cannot-delete-active-tenant": "Tenants must be deactivated before they can be deleted.",
        "x-viskan-error-code-incorrect-tenant-name": "The tenant name provided does not match the tenant name of the tenant being deleted.",
        "x-viskan-error-code-not-implemented": "Deletion of tenants is not yet implemented.",
        "x-viskan-error-code-tenant-not-found": "No tenant was found with the given ID.",
        "x-viskan-scope": "viskan-global:tenant:delete"
      },
      "get": {
        "description": "Gets a specific tenant.",
        "operationId": "getTenant",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The ID of the tenant to get.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The information about the tenant.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TenantInfo"
                }
              }
            }
          }
        },
        "summary": "Get tenant",
        "tags": [
          "Global"
        ],
        "x-viskan-api-name": "Tenant API",
        "x-viskan-error-code-tenant-not-found": "No tenant was found with the given ID.",
        "x-viskan-scope": "viskan-global:tenant:read"
      },
      "patch": {
        "description": "Updates a tenant. Any field not specified will be left unchanged.",
        "operationId": "updateTenant",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "The ID of the tenant to update.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTenantRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The tenant was successfully updated."
          }
        },
        "summary": "Update tenant",
        "tags": [
          "Global"
        ],
        "x-viskan-api-name": "Tenant API",
        "x-viskan-error-code-browser-key-is-required": "The browser key cannot be blank.",
        "x-viskan-error-code-country-code-is-invalid": "The country code must be a two-letter ISO country code.",
        "x-viskan-error-code-database-host-is-required": "The database hostname cannot be blank.",
        "x-viskan-error-code-database-name-is-required": "The database name cannot be blank.",
        "x-viskan-error-code-invalid-database-name": "The provided database name is invalid.",
        "x-viskan-error-code-organization-number-is-required": "The organization number cannot be blank.",
        "x-viskan-error-code-tenant-name-is-required": "The tenant name cannot be blank.",
        "x-viskan-error-code-tenant-not-found": "No tenant was found with the given ID.",
        "x-viskan-scope": "viskan-global:tenant:update"
      }
    },
    "/global/user/_replay-events": {
      "post": {
        "description": "Re-emits user events for every user of every tenant, narrowed by an optional tenant and/or user. The events are snapshots, so replaying is idempotent. Returns as soon as the work is queued.",
        "operationId": "replayUserEvents",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplayUserEventsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The replay was queued."
          }
        },
        "summary": "Replays user events",
        "tags": [
          "Global"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-tenant-not-active": "The given tenant is not active, so its users cannot be replayed.",
        "x-viskan-error-code-tenant-not-found": "No tenant with the given identifier was found.",
        "x-viskan-error-code-user-not-found": "No user with the given identifier was found.",
        "x-viskan-scope": "viskan-global:user:synchronize"
      }
    },
    "/global/user/_synchronize-users": {
      "post": {
        "description": "Synchronizes users to the Visma Connect system for a given tenant. This should not be needed in normal situations, but comes in handy in the testing environment.",
        "operationId": "synchronizeUsersToVismaConnect",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SynchronizeUsersRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The users were successfully synchronized."
          }
        },
        "summary": "Synchronizes users",
        "tags": [
          "Global"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-tenant-not-found": "No tenant with the given identifier was found.",
        "x-viskan-scope": "viskan-global:user:synchronize"
      }
    },
    "/global/user/users": {
      "get": {
        "description": "Searches for users globally.",
        "operationId": "findUsers_1",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "keywords",
            "in": "query",
            "description": "Optional keywords (whitespace separated) to search for.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "viskanEmployeesOnly",
            "in": "query",
            "description": "Indicates that only Viskan employees should be returned.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "blocked",
            "in": "query",
            "description": "Filter by the blocked status.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "UNBLOCKED",
              "enum": [
                "ALL",
                "BLOCKED",
                "UNBLOCKED"
              ]
            }
          },
          {
            "name": "tenantId",
            "in": "query",
            "description": "Optional tenant identifier; returns only users with active access to that tenant.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "userIds",
            "in": "query",
            "description": "Optional user identifiers (repeat the parameter); returns only these users, all in one page whatever the page and page size. At most 100.",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains a set of search hits.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GlobalUser"
                  }
                }
              }
            }
          }
        },
        "summary": "Find users",
        "tags": [
          "Global"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-error-code-too-many-user-ids": "More user identifiers were given than fit in one page.",
        "x-viskan-scope": "viskan-global:user:read"
      }
    },
    "/global/user/users/{userId}": {
      "get": {
        "description": "Gets a specific user.",
        "operationId": "getUser",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "The identifier of the user to get.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The user information.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GlobalUser"
                }
              }
            }
          }
        },
        "summary": "Get user",
        "tags": [
          "Global"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-user-not-found": "No user with the given identifier was found.",
        "x-viskan-scope": "viskan-global:user:read"
      },
      "patch": {
        "description": "Updates a user in the system.",
        "operationId": "updateUser",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "The identifier of the user to update.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGlobalUserRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The user was successfully updated."
          }
        },
        "summary": "Update user",
        "tags": [
          "Global"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-user-not-found": "No user with the given identifier was found.",
        "x-viskan-scope": "viskan-global:user:update"
      }
    },
    "/global/user/users/{userId}/_add-to-tenant": {
      "post": {
        "description": "Adds a user to a tenant. This can only be done for existing Viskan employee users. If the user has previously been added to the tenant but is inactive, the user is activated again.",
        "operationId": "addUserToTenant",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "The identifier of the user to add to the given tenant. Note that this user must be a Viskan employee user.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddUserToTenantRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The user was successfully added to the tenant."
          }
        },
        "summary": "Add user to tenant",
        "tags": [
          "Global"
        ],
        "x-viskan-api-name": "User API",
        "x-viskan-error-code-tenant-not-active": "The given tenant is not active.",
        "x-viskan-error-code-tenant-not-found": "The given tenant was not found.",
        "x-viskan-error-code-user-already-added-to-tenant": "The given user is already added to the given tenant and is active.",
        "x-viskan-error-code-user-is-blocked": "The given user is blocked.",
        "x-viskan-error-code-user-is-not-a-viskan-employee": "The given user is not a Viskan employee.",
        "x-viskan-error-code-user-not-found": "No user with the given identifier was found.",
        "x-viskan-scope": "viskan-global:user:update"
      }
    },
    "/helpdesk/ticket/aggregations": {
      "get": {
        "description": "Gets aggregated counts of open tickets for the current user.",
        "operationId": "aggregateTickets",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Returns ticket aggregation counts.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Aggregations_3"
                }
              }
            }
          }
        },
        "summary": "Get ticket aggregations",
        "tags": [
          "Helpdesk"
        ],
        "x-viskan-api-name": "Ticket API",
        "x-viskan-scope": "viskan:ticket:read"
      }
    },
    "/helpdesk/ticket/labels": {
      "get": {
        "description": "Returns all labels that can be set on helpdesk tickets, sorted by name.",
        "operationId": "findLabels",
        "responses": {
          "200": {
            "description": "The response contains all labels.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/HelpdeskLabelItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Find labels",
        "tags": [
          "Helpdesk"
        ],
        "x-viskan-api-name": "Helpdesk label API",
        "x-viskan-scope": "viskan:ticket:read"
      }
    },
    "/helpdesk/ticket/labels/{labelId}": {
      "get": {
        "description": "Get a label by its unique identifier.",
        "operationId": "getLabel",
        "parameters": [
          {
            "name": "labelId",
            "in": "path",
            "description": "The unique identifier of the label to get.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the label.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/HelpdeskLabelItem"
                }
              }
            }
          }
        },
        "summary": "Get a label",
        "tags": [
          "Helpdesk"
        ],
        "x-viskan-api-name": "Helpdesk label API",
        "x-viskan-error-code-label-not-found": "The label with the given ID was not found.",
        "x-viskan-scope": "viskan:ticket:read"
      }
    },
    "/helpdesk/ticket/tickets": {
      "get": {
        "description": "Searches for tickets.",
        "operationId": "search",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Page number to fetch. Defaults to \u003ccode\u003e1\u003c/code\u003e, which is the first page.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "size",
            "in": "query",
            "description": "Number of items per page. Defaults to \u003ccode\u003e50\u003c/code\u003e.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "keyword",
            "in": "query",
            "description": "Optionally filter by free text keyword within messages.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "helpdeskAccountIds",
            "in": "query",
            "description": "Optionally filter by the ID of one or many helpdesk accounts.",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              },
              "uniqueItems": true
            }
          },
          {
            "name": "resolutions",
            "in": "query",
            "description": "Optionally filter by ticket resolutions.",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "UNRESOLVED",
                  "RESOLVED",
                  "NO_ACTION_REQUIRED",
                  "SPAM",
                  "TRASH"
                ]
              }
            }
          },
          {
            "name": "assignees",
            "in": "query",
            "description": "Optionally filter by the IDs of the assigned users. The value \u003ccode\u003e-1\u003c/code\u003e can be used to find unassigned tickets.",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "description": "Optionally filter by the ID of a customer.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "labels",
            "in": "query",
            "description": "Optionally filter by the IDs of labels.",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              },
              "uniqueItems": true
            }
          },
          {
            "name": "dateFrom",
            "in": "query",
            "description": "Earliest message date (inclusive).",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dateTo",
            "in": "query",
            "description": "Latest message date (inclusive).",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "sortingStrategy",
            "in": "query",
            "description": "Defines the sorting of the search results.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "RECENTLY_MODIFIED_FIRST",
              "enum": [
                "OLDEST_FIRST",
                "RECENTLY_MODIFIED_FIRST"
              ]
            }
          },
          {
            "name": "multiBrandIds",
            "in": "query",
            "description": "Optionally filter by the ID of one or many multibrands.",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              },
              "uniqueItems": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Contains the search results.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TicketSearchResult"
                }
              }
            }
          }
        },
        "summary": "Find tickets",
        "tags": [
          "Helpdesk"
        ],
        "x-viskan-api-name": "Ticket API",
        "x-viskan-error-code-page-must-be-larger-than-zero": "Page must be larger than 0",
        "x-viskan-error-code-size-cannot-be-larger-than-100": "Size cannot be larger than 100",
        "x-viskan-error-code-size-must-be-a-positive-integer": "Size must be a positive integer.",
        "x-viskan-scope": "viskan:ticket:read"
      },
      "post": {
        "description": "Creates a new ticket from an incoming message.",
        "operationId": "createTicket",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTicketRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The ticket was created. Contains the identifier of the ticket.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreateTicketResponse"
                }
              }
            }
          }
        },
        "summary": "Create ticket",
        "tags": [
          "Helpdesk"
        ],
        "x-viskan-api-name": "Ticket API",
        "x-viskan-error-code-body-required": "body must be specified.",
        "x-viskan-error-code-content-type-required": "contentType must be specified.",
        "x-viskan-error-code-customer-id-must-be-positive": "customerId must be positive.",
        "x-viskan-error-code-received-at-required": "receivedAt must be specified.",
        "x-viskan-error-code-sender-address-required": "senderAddress must be specified.",
        "x-viskan-error-code-sender-name-required": "senderName must be specified.",
        "x-viskan-error-code-subject-required": "subject must be specified.",
        "x-viskan-scope": "viskan:ticket:create"
      }
    },
    "/helpdesk/ticket/tickets/{ticketId}": {
      "get": {
        "description": "Fetch a ticket by its ID.",
        "operationId": "getTicket",
        "parameters": [
          {
            "name": "ticketId",
            "in": "path",
            "description": "The identifier of the ticket to get.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "Returns information about the ticket.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TicketResponse"
                }
              }
            }
          }
        },
        "summary": "Get ticket ",
        "tags": [
          "Helpdesk"
        ],
        "x-viskan-api-name": "Ticket API",
        "x-viskan-error-code-conversation-not-found": "The ticket could not be found.",
        "x-viskan-scope": "viskan:ticket:read"
      },
      "patch": {
        "description": "Updates a ticket with the provided patch data.",
        "operationId": "updateConversation",
        "parameters": [
          {
            "name": "ticketId",
            "in": "path",
            "description": "The identifier of the ticket to update.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchTicketRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Returns the updated ticket.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TicketResponse"
                }
              }
            }
          }
        },
        "summary": "Update ticket",
        "tags": [
          "Helpdesk"
        ],
        "x-viskan-api-name": "Ticket API",
        "x-viskan-error-code-conversation-not-found": "The ticket could not be found.",
        "x-viskan-error-code-customer-belongs-to-another-multibrand": "Customer belongs to another multibrand.",
        "x-viskan-error-code-customer-id-must-be-positive": "customerId must be positive.",
        "x-viskan-error-code-ticket-already-connected-to-customer": "Ticket is already connected to customer.",
        "x-viskan-scope": "viskan:ticket:update"
      }
    },
    "/helpdesk/ticket/tickets/{ticketId}/_disconnect-customer": {
      "post": {
        "description": "Disconnects the customer from a ticket.",
        "operationId": "disconnectCustomer",
        "parameters": [
          {
            "name": "ticketId",
            "in": "path",
            "description": "The identifier of the ticket to disconnect customer from.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DisconnectCustomer"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Returns the updated conversation.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TicketResponse"
                }
              }
            }
          }
        },
        "summary": "Disconnect customer",
        "tags": [
          "Helpdesk"
        ],
        "x-viskan-api-name": "Ticket API",
        "x-viskan-error-code-conversation-not-found": "The ticket could not be found.",
        "x-viskan-error-code-ticket-not-connected-to-customer": "Ticket is not connected to a customer.",
        "x-viskan-scope": "viskan:ticket:update"
      }
    },
    "/helpdesk/ticket/tickets/{ticketId}/_unassign": {
      "post": {
        "description": "Removes the current assignee from a ticket.",
        "operationId": "unassign",
        "parameters": [
          {
            "name": "ticketId",
            "in": "path",
            "description": "The identifier of the ticket to unassign.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Unassign"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Returns the updated conversation.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/TicketResponse"
                }
              }
            }
          }
        },
        "summary": "Unassign ticket",
        "tags": [
          "Helpdesk"
        ],
        "x-viskan-api-name": "Ticket API",
        "x-viskan-error-code-conversation-not-found": "The ticket could not be found.",
        "x-viskan-error-code-ticket-is-not-assigned": "Ticket is not assigned.",
        "x-viskan-scope": "viskan:ticket:update"
      }
    },
    "/helpdesk/ticket/tickets/{ticketId}/attachments/{attachmentId}": {
      "get": {
        "description": "Downloads a specific attachment from a ticket.",
        "operationId": "downloadAttachment",
        "parameters": [
          {
            "name": "ticketId",
            "in": "path",
            "description": "The identifier of the ticket that the attachment belongs to.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "attachmentId",
            "in": "path",
            "description": "The identifier of the attachment to download.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the attachment file as a stream.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/StreamingResponseBody"
                }
              }
            }
          }
        },
        "summary": "Download attachment",
        "tags": [
          "Helpdesk"
        ],
        "x-viskan-api-name": "Ticket API",
        "x-viskan-error-code-attachment-not-found": "Could not find the specified attachment.",
        "x-viskan-error-code-conversation-not-found": "The ticket could not be found.",
        "x-viskan-error-code-not-found": "Could not find the specified ticket.",
        "x-viskan-scope": "viskan:ticket:read"
      }
    },
    "/helpdesk/ticket/tickets/{ticketId}/messages/{messageId}": {
      "get": {
        "description": "Fetch a specific message from a ticket by its ID.",
        "operationId": "getMessage",
        "parameters": [
          {
            "name": "ticketId",
            "in": "path",
            "description": "The identifier of the ticket.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "messageId",
            "in": "path",
            "description": "The unique identifier of the message. This value should be double URL encoded if it has special characters.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns the message.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/Message"
                }
              }
            }
          }
        },
        "summary": "Get message",
        "tags": [
          "Helpdesk"
        ],
        "x-viskan-api-name": "Ticket API",
        "x-viskan-error-code-conversation-not-found": "The ticket could not be found.",
        "x-viskan-error-code-message-not-found": "The message could not be found.",
        "x-viskan-scope": "viskan:ticket:read"
      }
    },
    "/in-store-pickup/parcel/parcels": {
      "get": {
        "description": "Fetches parcels.",
        "operationId": "get2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "changesFrom",
            "in": "query",
            "description": "Get parcels that have been changed since this date.",
            "schema": {
              "type": "string",
              "default": "1900-01-01T00:00:00.000Z"
            }
          },
          {
            "name": "changesTo",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": "9999-12-31T23:59:59.997Z"
            }
          },
          {
            "name": "parcelNumber",
            "in": "query",
            "description": "The parcel numbers to fetch.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "description": "",
                  "type": "string"
                }
              }
            }
          }
        },
        "summary": "Find parcels",
        "tags": [
          "In-store pickup"
        ],
        "x-viskan-api-name": "Parcel API",
        "x-viskan-scope": "viskan:parcel:read"
      },
      "patch": {
        "description": "Updates parcels.",
        "operationId": "update3",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ParcelUpdates"
              }
            }
          },
          "description": "The data to update."
        },
        "responses": {
          "200": {
            "description": "The parcel was successfully updated",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The parcel was successfully updated",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Some error occurred, an errorcode is returned in the body and an explanation can be found in separate documentation"
          }
        },
        "summary": "Update parcels",
        "tags": [
          "In-store pickup"
        ],
        "x-viskan-api-name": "Parcel API",
        "x-viskan-scope": "viskan:parcel:update"
      },
      "post": {
        "description": "Creates parcels.",
        "operationId": "create2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "allowMissingCustomerData",
            "in": "query",
            "description": "Whether or not to allow missing customer data, such as address info",
            "schema": {
              "type": "boolean",
              "default": "false"
            }
          },
          {
            "name": "creationRule",
            "in": "query",
            "description": "The rules for creating data.",
            "schema": {
              "type": "string",
              "enum": [
                "CUSTOMER",
                "DEFAULT",
                "DELIVERY",
                "ORDER"
              ],
              "default": "DEFAULT"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ParcelCreateRequest"
              }
            }
          },
          "description": "The data that contains information about parcels to create."
        },
        "responses": {
          "200": {
            "description": "The parcel was successfully created",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The parcel was successfully created",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Some error occurred, an error code is returned in the body and an explanation can be found in separate documentation"
          }
        },
        "summary": "Create parcels",
        "tags": [
          "In-store pickup"
        ],
        "x-viskan-api-name": "Parcel API",
        "x-viskan-scope": "viskan:parcel:create"
      }
    },
    "/job/job-configuration/configurations": {
      "get": {
        "description": "Lists job configurations for the current tenant with optional keyword filter and pagination.",
        "operationId": "findConfigs",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "keywords",
            "in": "query",
            "description": "Optional keywords (whitespace separated) to search for in the configuration name.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "Filter by active status.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ACTIVE",
              "enum": [
                "ALL",
                "ACTIVE",
                "INACTIVE"
              ]
            }
          },
          {
            "name": "userAllowedToExecute",
            "in": "query",
            "description": "Filter by execute permission.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ALL",
              "enum": [
                "ALL",
                "ALLOWED",
                "NOT_ALLOWED"
              ]
            }
          },
          {
            "name": "userAllowedToActivate",
            "in": "query",
            "description": "Filter by activate permission.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ALL",
              "enum": [
                "ALL",
                "ALLOWED",
                "NOT_ALLOWED"
              ]
            }
          },
          {
            "name": "onlyUserManageable",
            "in": "query",
            "description": "Only include configurations where the user has at least one permission (activate or execute).",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the found job configurations.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JobConfigItem"
                  }
                }
              }
            }
          }
        },
        "summary": "List job configurations",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job configuration API",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-scope": "viskan:jobconfig:read"
      },
      "patch": {
        "description": "Updates the active status and/or job execution exclusion of multiple job configurations in a single transaction.",
        "operationId": "updateConfigs",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateJobConfigRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The configurations were updated successfully."
          }
        },
        "summary": "Update multiple job configurations",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job configuration API",
        "x-viskan-error-code-activation-not-allowed": "The user is not allowed to activate/deactivate one of the configurations.",
        "x-viskan-error-code-config-not-found": "One or more of the given configurations were not found.",
        "x-viskan-error-code-exclusion-not-found": "The job execution exclusion to assign was not found.",
        "x-viskan-scope": "viskan:jobconfig:update"
      }
    },
    "/job/job-configuration/configurations/{id}": {
      "get": {
        "description": "Get a job configuration by its unique identifier.",
        "operationId": "getConfig",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the job configuration.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the configuration.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/JobConfigItem"
                }
              }
            }
          }
        },
        "summary": "Get a job configuration",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job configuration API",
        "x-viskan-error-code-config-not-found": "The configuration with the given ID was not found.",
        "x-viskan-scope": "viskan:jobconfig:read"
      },
      "patch": {
        "description": "Updates the active status and/or job execution exclusion of a job configuration.",
        "operationId": "updateConfig",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the job configuration to update.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateJobConfigRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The configuration was updated successfully."
          }
        },
        "summary": "Update a job configuration",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job configuration API",
        "x-viskan-error-code-activation-not-allowed": "The user is not allowed to activate/deactivate this configuration.",
        "x-viskan-error-code-config-not-found": "The configuration with the given ID was not found.",
        "x-viskan-scope": "viskan:jobconfig:update"
      }
    },
    "/job/job-configuration/configurations/{id}/execute": {
      "post": {
        "description": "Triggers manual execution of a job configuration.",
        "operationId": "executeConfig",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the job configuration to execute.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The job was executed.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ExecuteJobConfigResponse"
                }
              }
            }
          }
        },
        "summary": "Execute a job configuration",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job configuration API",
        "x-viskan-error-code-config-not-found": "The configuration with the given ID was not found.",
        "x-viskan-error-code-execution-not-allowed": "The user is not allowed to execute this configuration.",
        "x-viskan-scope": "viskan:jobconfig:update"
      }
    },
    "/job/job-execution-exclusion/exclusions": {
      "get": {
        "description": "Searches for job execution exclusions with optional keyword filter and pagination.",
        "operationId": "findExclusions",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "keywords",
            "in": "query",
            "description": "Optional keywords (whitespace separated) to search for in the exclusion name.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the found exclusions.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JobExecutionExclusionItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Find job execution exclusions",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job execution exclusion API",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-scope": "viskan:jobexecutionexclusion:read"
      },
      "post": {
        "description": "Creates a new job execution exclusion with optional intervals.",
        "operationId": "createExclusion",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateJobExecutionExclusionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The exclusion was created successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreateJobExecutionExclusionResponse"
                }
              }
            }
          }
        },
        "summary": "Create a job execution exclusion",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job execution exclusion API",
        "x-viskan-error-code-exclusion-name-cannot-be-blank": "The exclusion name cannot be blank.",
        "x-viskan-error-code-interval-end-before-start": "The end date of an interval cannot be before its start date.",
        "x-viskan-scope": "viskan:jobexecutionexclusion:create"
      }
    },
    "/job/job-execution-exclusion/exclusions/{id}": {
      "delete": {
        "description": "Deletes a job execution exclusion by its unique identifier. Intervals are deleted via cascade.",
        "operationId": "deleteExclusion",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the exclusion to delete.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The exclusion was deleted successfully."
          }
        },
        "summary": "Delete a job execution exclusion",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job execution exclusion API",
        "x-viskan-error-code-exclusion-not-found": "The exclusion with the given ID was not found.",
        "x-viskan-scope": "viskan:jobexecutionexclusion:delete"
      },
      "get": {
        "description": "Get a job execution exclusion by its unique identifier, including its intervals.",
        "operationId": "getExclusion",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the exclusion.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the exclusion.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/JobExecutionExclusionDetail"
                }
              }
            }
          }
        },
        "summary": "Get a job execution exclusion",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job execution exclusion API",
        "x-viskan-error-code-exclusion-not-found": "The exclusion with the given ID was not found.",
        "x-viskan-scope": "viskan:jobexecutionexclusion:read"
      },
      "patch": {
        "description": "Update the details of a job execution exclusion and its intervals.",
        "operationId": "updateExclusion",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the exclusion to update.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateJobExecutionExclusionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The exclusion was updated successfully."
          }
        },
        "summary": "Update a job execution exclusion",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job execution exclusion API",
        "x-viskan-error-code-exclusion-name-cannot-be-blank": "The exclusion name cannot be blank.",
        "x-viskan-error-code-exclusion-not-found": "The exclusion with the given ID was not found.",
        "x-viskan-error-code-interval-end-before-start": "The end date of an interval cannot be before its start date.",
        "x-viskan-error-code-interval-not-found": "An interval with the given ID was not found.",
        "x-viskan-scope": "viskan:jobexecutionexclusion:update"
      }
    },
    "/job/job-history/entries": {
      "get": {
        "description": "Searches job execution history for the current tenant with optional filters.",
        "operationId": "findEntries",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "keywords",
            "in": "query",
            "description": "Optional keywords to search for in the job config name.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "statuses",
            "in": "query",
            "description": "Comma-separated list of status names to filter by (e.g. \u0027ERROR,WARNING\u0027).",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Start of date range (ISO date). Defaults to 30 days ago.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "description": "End of date range (ISO date). Defaults to today.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "acknowledged",
            "in": "query",
            "description": "Filter by acknowledged status.",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ALL",
              "enum": [
                "ALL",
                "ACKNOWLEDGED",
                "UNACKNOWLEDGED"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the found history entries.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JobHistoryItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Search job history",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job history API",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-scope": "viskan:jobconfig:read"
      }
    },
    "/job/job-history/entries/{id}": {
      "get": {
        "description": "Gets a job history entry by its identifier, including translated messages.",
        "operationId": "getEntry",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the history entry.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the history entry.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/JobHistoryDetail"
                }
              }
            }
          }
        },
        "summary": "Get a job history entry",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job history API",
        "x-viskan-error-code-history-not-found": "The history entry was not found.",
        "x-viskan-scope": "viskan:jobconfig:read"
      }
    },
    "/job/job-history/entries/{id}/acknowledge": {
      "post": {
        "description": "Marks a failed job execution as acknowledged.",
        "operationId": "acknowledgeEntry",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the history entry to acknowledge.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The failure was acknowledged."
          }
        },
        "summary": "Acknowledge a failure",
        "tags": [
          "Admin"
        ],
        "x-viskan-api-name": "Job history API",
        "x-viskan-error-code-history-not-found": "The history entry was not found.",
        "x-viskan-error-code-not-a-failure": "Only failed jobs can be acknowledged.",
        "x-viskan-scope": "viskan:jobconfig:read"
      }
    },
    "/my-pages-v2/authentication/authentications": {
      "post": {
        "description": "Authenticates a customer into the \"My pages\" API by supplying an identifier and a password.\n\u003cp\u003e\nThe \"My pages\" API can also be connected to external third party providers for managing customer information. To do this, you can supply the\n\u003ccode\u003eserviceProviderConfigId\u003c/code\u003e parameter.",
        "operationId": "authenticate",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthenticationRequest"
              }
            }
          },
          "description": "The authentication request."
        },
        "responses": {
          "200": {
            "headers": {
              "X-Shopcart-Id": {
                "description": "The id of the customer latest modified shopcart, if the corresponding setting is on.",
                "schema": {
                  "type": "string"
                }
              },
              "X-My-Pages-Token": {
                "description": "The token that should be used for consecutive API calls.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "The authentication was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyPagesCustomer"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials was supplied.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/authentication/invalidate": {
      "post": {
        "description": "Invalidates the provided token. This endpoint should not be mistaken for the /logout endpoint which is used for login a user out of the current\nsession",
        "operationId": "invalidate",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "token",
            "in": "query",
            "description": "the token to invalidate.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The token was invalidated.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The token was invalidated.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/authentication/logout": {
      "post": {
        "description": "Logs customer out of \"My pages\" API and changes \u003ccode\u003ecustomerType\u003c/code\u003e if the default is different. Updates payment method and way of\ndelivery to defaults if they are no longer valid. Keeps shopcart and removes the authentication token afterwards.",
        "operationId": "logout",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LogoutRequest"
              }
            }
          },
          "description": "the logout request."
        },
        "responses": {
          "200": {
            "description": "The logout was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The logout was successful.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/authentication/lookup": {
      "post": {
        "description": "Looks up customer data by one or more identifiers, e.g. for prefilling fields when creating a new account. When a service provider config id is\ngiven the lookup is done at that third party only, otherwise the lookup is done internally only.",
        "operationId": "lookup2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerLookupRequest"
              }
            }
          },
          "description": "The lookup request."
        },
        "responses": {
          "200": {
            "description": "A customer was found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerLookupResponse"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationErrors"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/authentication/matches": {
      "post": {
        "description": "Attempts to match customer information to an existing customer and create a \"My pages\" authentication token based on that.",
        "operationId": "matches",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "generateCustomerId",
            "in": "query",
            "description": "Whether or not we shall generate the internal identifier when creating a new customer. Only used when\ncreateIfNotMatched is true.",
            "schema": {
              "type": "boolean",
              "default": "true"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MatchRequest"
              }
            }
          },
          "description": "The match request."
        },
        "responses": {
          "200": {
            "headers": {
              "X-My-Pages-Token": {
                "description": "The token that should be used for consecutive API calls.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "The match successfully found a customer.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyPagesCustomer"
                }
              }
            }
          },
          "201": {
            "headers": {
              "X-My-Pages-Token": {
                "description": "The token that should be used for consecutive API calls.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "The match did not find an existing customer, but one was created instead.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyPagesCustomer"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationErrors"
                }
              }
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/company-user/connected-users": {
      "get": {
        "description": "Gets all connected customer users of the provided company",
        "operationId": "getConnectedUsers",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "companyCustomerId",
            "in": "query",
            "required": true,
            "description": "The internal id of the company to fetch users of.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The connected users were retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The connected users were retrieved successfully.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerCompanyInformation"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/company-user/connected-users/{companyCustomerId}": {
      "post": {
        "description": "Updates and adds new users to the provided company.",
        "operationId": "update4",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "companyCustomerId",
            "in": "path",
            "required": true,
            "description": "The company to update users for.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompanyUsersToAddOrUpdate"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "The connected users were updated successfully."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          },
          "401": {
            "description": "Invalid authentication token was given."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/customer/customers": {
      "post": {
        "description": "Registers a new customer. The customer information will be validated to avoid duplicates. If successful, the customer will \u003cb\u003enot\u003c/b\u003e be logged\nin. The customer will be created, and a set-password email will be sent out to confirm the validity of the email.",
        "operationId": "register",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "generateCustomerId",
            "in": "query",
            "description": "Whether or not we shall immediately generate the internal identifier when creating the new customer, if not it will\nbe handled later in the flow.",
            "schema": {
              "type": "boolean",
              "default": "true"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterCustomerRequest"
              }
            }
          },
          "description": "The customer information"
        },
        "responses": {
          "204": {
            "description": "The customer was successfully registered."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/customer/me": {
      "get": {
        "description": "Gets the authenticated customer.",
        "operationId": "get3",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The customer was retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyPagesCustomer"
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      },
      "patch": {
        "description": "Updates parts of the authenticated customer.",
        "operationId": "patch",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lowLevelUpdateEnabled",
            "in": "query",
            "required": true,
            "description": "If true, then customer can update their information even if they are authenticated with a low level of\nauthentication.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCustomerRequest"
              }
            }
          },
          "description": "The changes to apply to the customer. To not update certain fields, simply do not send then."
        },
        "responses": {
          "200": {
            "description": "The customer was updated successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyPagesCustomer"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/customer/newsletter-customers": {
      "post": {
        "description": "Registers or updates existing customers to use and opt-in for newsletters.",
        "operationId": "customerNewsLetter",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "generateCustomerId",
            "in": "query",
            "description": "Whether or not we shall immediately generate the internal identifier when creating the new customer, if not it will\nbe handled later in the flow.",
            "schema": {
              "type": "boolean",
              "default": "true"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewsLetterRequest"
              }
            }
          },
          "description": "The request holding the necessary information to register or update an existing customer to opt-in for newsletters"
        },
        "responses": {
          "204": {
            "description": "The customer was successfully created or updated."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/customer/register-interest": {
      "post": {
        "description": "Registers a customer interest in a product. The customer information will be validated to avoid duplicates. If successful, the customer will\n\u003cb\u003enot\u003c/b\u003e be logged in. If the customer is not found based on the given customer information, a new customer will be created.",
        "operationId": "registerInterest",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "generateCustomerId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": "true"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterInterest"
              }
            }
          },
          "description": "The request holding the necessary information to register or update an existing customer for product interest"
        },
        "responses": {
          "204": {
            "description": "The customer was successfully found or registered, and the product interest was successfully added."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/delivery/deliveries": {
      "get": {
        "description": "Gets deliveries for the authenticated customer.",
        "operationId": "getDeliveries",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderType",
            "in": "query",
            "description": "Filter on orderType.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "BONUS",
                  "BUNDLE_ORDER",
                  "EXTRA_CLUB_POSTING",
                  "GIVER_RECRUITER",
                  "LAGUN",
                  "MEMBERSHIP_INTRO",
                  "MEMBERSHIP_NO_THANKS",
                  "MEMBERSHIP_POSTING",
                  "RECEIPT",
                  "SPECIAL",
                  "STANDARD",
                  "STOCK_REDISTRIBUTION",
                  "SUBSCRIPTION",
                  "UNCOLLECTED_FEE"
                ]
              }
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to get.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "paymentStatus",
            "in": "query",
            "description": "Filter on payment status.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "NOT_INVOICED",
                  "NO_CLAIM",
                  "OVERPAID",
                  "PARTLY_PAID",
                  "UNPAID"
                ]
              }
            }
          },
          {
            "name": "size",
            "in": "query",
            "description": "The number of deliveries to get.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "10"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter on shipment(delivery) status.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "CANCELED",
                  "CREATED",
                  "PARTIALLY_REPORTED",
                  "REPORTED"
                ]
              }
            }
          }
        ],
        "responses": {
          "200": {
            "headers": {
              "X-Delivery-Count": {
                "description": "The total number of deliveries.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "The deliveries were retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The deliveries were retrieved successfully.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MyPagesDelivery"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/delivery/deliveries/{deliveryId}": {
      "get": {
        "description": "Gets delivery details for the authenticated customer.",
        "operationId": "getDelivery",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryId",
            "in": "path",
            "required": true,
            "description": "The delivery ID of the delivery details to get.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The delivery details were retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyPagesDeliveryDetails"
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          },
          "404": {
            "description": "No delivery was found.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/offer/coupons": {
      "get": {
        "description": "Gets the customer\u0027s coupons from the configured customer-club provider.\n\n\u003cp\u003eReturns an empty list when the provider has no coupon support - the storefront can call this\nendpoint safely regardless of provider configuration.",
        "operationId": "getCoupons",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The coupons were retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The coupons were retrieved successfully.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MyPagesCoupon"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/offer/offers": {
      "get": {
        "description": "Gets member offers for the authenticated customer.",
        "operationId": "getOffers",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The offers was retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The offers was retrieved successfully.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MyPagesOffer"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/order/orders": {
      "get": {
        "description": "Gets orders for the authenticated customer.",
        "operationId": "getOrders",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "description": "The internal id of a customer to fetch orders for. For example used when you have access to another customer / company in a\nb2b setup.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "fromDate",
            "in": "query",
            "description": "The date to retrieve orders from",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to get.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "size",
            "in": "query",
            "description": "The number of orders to get.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "10"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "The status(es) of the orders to retrieve.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "CANCELLED",
                  "DELIVERED",
                  "DELIVERY_CREATED",
                  "PARTLY_DELIVERED",
                  "PLACED"
                ]
              }
            }
          },
          {
            "name": "toDate",
            "in": "query",
            "description": "The date to retrieve orders to",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "types",
            "in": "query",
            "description": "The type(s) of the orders to retrieve.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "BONUS",
                  "BUNDLE_ORDER",
                  "EXTRA_CLUB_POSTING",
                  "GIVER_RECRUITER",
                  "LAGUN",
                  "MEMBERSHIP_INTRO",
                  "MEMBERSHIP_NO_THANKS",
                  "MEMBERSHIP_POSTING",
                  "RECEIPT",
                  "SPECIAL",
                  "STANDARD",
                  "STOCK_REDISTRIBUTION",
                  "SUBSCRIPTION",
                  "UNCOLLECTED_FEE"
                ]
              }
            }
          }
        ],
        "responses": {
          "200": {
            "headers": {
              "X-Order-Count": {
                "description": "The total amount of orders.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "The orders was retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The orders was retrieved successfully.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MyPagesOrderDetails"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/order/orders/{orderNumber}": {
      "get": {
        "description": "Get detailed order for the authenticated customer and provided order number.",
        "operationId": "getOrder",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderNumber",
            "in": "path",
            "description": "The number of order to get.",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "source",
            "in": "query",
            "description": "Source of order.",
            "schema": {
              "type": "string",
              "enum": [
                "EXTERNAL",
                "INTERNAL"
              ],
              "default": "INTERNAL"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The order was retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyPagesOrderDetails"
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/order/orders/{orderNumber}/invoices": {
      "post": {
        "description": "Generates the invoices for the given order. When a service provider config id is given the invoices are generated at that third party, which\ntypically sends them to the customer by email. Without it the request is recorded within Viskan only.",
        "operationId": "generateInvoices",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderNumber",
            "in": "path",
            "description": "The unique number of the order to generate invoices for.",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateInvoicesRequest"
              }
            }
          },
          "description": "The invoice generation request."
        },
        "responses": {
          "200": {
            "description": "The invoice generation was initiated properly."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationErrors"
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/order/orders/{orderNumber}/return-slips": {
      "post": {
        "description": "Initiates the generation of a return slip for the given order.",
        "operationId": "generateReturnSlip",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderNumber",
            "in": "path",
            "description": "The unique number of the order to generate slip for.",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "The return slip generation was initiated properly."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          },
          "401": {
            "description": "Invalid authentication token was given."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/rental/rentals": {
      "get": {
        "description": "Gets rentals for the authenticated customer.",
        "operationId": "getRentals",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "description": "Filter to include inactive rentals.",
            "schema": {
              "type": "boolean",
              "default": "false"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to get.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results to display.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "10"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The rentals were retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RentalHead"
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/rental/rentals/{rentalId}/renew-payment-info": {
      "post": {
        "description": "Initiates the renewal of payment information for the given rental.",
        "operationId": "renewPaymentInfo",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rentalId",
            "in": "path",
            "required": true,
            "description": "The identifier of the rental to renew payment information for.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/RenewalRequest"
        },
        "responses": {
          "200": {
            "description": "The renewal has been initiated properly and information required for the client has been returned in the response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RenewalResult"
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/reset-password/tokens": {
      "post": {
        "description": "Requests a new reset-password token. In order to avoid bots performing bogus calls to this endpoint, it is recommended to perform some kind of\n\u003ca href\u003d\"https://en.wikipedia.org/wiki/CAPTCHA\"\u003eCAPTCHA\u003c/a\u003e on the client side (for example\n\u003ca href\u003d\"https://www.google.com/recaptcha\"\u003ereCAPTCHA\u003c/a\u003e).",
        "operationId": "requestResetToken",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "generateCustomerId",
            "in": "query",
            "description": "Whether or not we shall immediately generate the internal identifier when creating the new customer, if not it will\nbe handled later in the flow.",
            "schema": {
              "type": "boolean",
              "default": "true"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResetPasswordRequest"
              }
            }
          },
          "description": "The request to reset a password."
        },
        "responses": {
          "204": {
            "description": "The token was successfully requested. Note that if no customer was found with the given identifier, this status will still be returned. This is to avoid potentially leaking information about consumers."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/reset-password/tokens/{token}": {
      "get": {
        "description": "Checks that a given reset password token is valid.",
        "operationId": "checkToken",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "token",
            "in": "path",
            "description": "The token to check validity for.",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "tokenType",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "enum": [
                "ACTIVATE_PASSWORD_TOKEN",
                "RESET_PASSWORD_TOKEN"
              ],
              "default": "RESET_PASSWORD_TOKEN"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "The token exists and is valid."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/reset-password/tokens/{token}/resets": {
      "post": {
        "description": "Resets the password using a specified token.\n\u003cp\u003e\nA check will be performed that validates that the given password is at least 6 characters long. No other checks will be performed. All\ncharacters (including whitespace) are considered valid. In order to provide more strict password rules, it is recommended to perform them\nbefore calling this API.\n\u003c/p\u003e",
        "operationId": "resetPassword",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "token",
            "in": "path",
            "description": "The token of the reset request.",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetPasswordRequest"
              }
            }
          },
          "description": "Information about the new password."
        },
        "responses": {
          "204": {
            "description": "The password was successfully set."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/subscription/subscriptions": {
      "get": {
        "description": "Gets subscriptions for the authenticated customer.",
        "operationId": "getSubscriptions",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "description": "Whether or not to include inactive subscriptions. Defaults to true.",
            "schema": {
              "type": "boolean",
              "default": "true"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to get.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "size",
            "in": "query",
            "description": "The number of subscriptions to get.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "10"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The subscriptions were retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The subscriptions were retrieved successfully.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MyPagesSubscription"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/subscription/subscriptions/{subscriptionId}": {
      "get": {
        "description": "Gets subscription details for the authenticated customer.",
        "operationId": "getSubscription",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "description": "The subscription id of the subscription details to get.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "description": "Whether or not to include inactive subscription rows. Defaults to true",
            "schema": {
              "type": "boolean",
              "default": "true"
            }
          },
          {
            "name": "includeOnlyOrdinaryShipmentRows",
            "in": "query",
            "description": "Include ordinary shipment rows only to minimize data if set to true. Defaults to false.\nAn \"OrdinaryShipmentRow\" means the row is active, unlimited, and repeats every time.\nIf a row is fully delivered, restricted to a specific date, or only ships occasionally, it is not considered as \"OrdinaryShipmentRow\".",
            "schema": {
              "type": "boolean",
              "default": "false"
            }
          },
          {
            "name": "includePassedDeliveries",
            "in": "query",
            "description": "Whether or not to include already delivered subscription rows. Defaults to true",
            "schema": {
              "type": "boolean",
              "default": "true"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The subscription details were retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyPagesSubscriptionDetails"
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          },
          "404": {
            "description": "No subscription was found.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      },
      "patch": {
        "description": "Updates a given subscription.",
        "operationId": "update5",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "description": "The identifier for the subscription.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubscriptionToUpdate"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "The subscription was updated successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionRowsAddedOrUpdatedResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/subscription/subscriptions/{subscriptionId}/cancel": {
      "post": {
        "description": "Cancels a given subscription.",
        "operationId": "cancel2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "description": "The identifier for the subscription.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancellationDetails"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "The subscription was cancelled successfully."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          },
          "401": {
            "description": "Invalid authentication token was given."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/subscription/subscriptions/{subscriptionId}/change-type": {
      "post": {
        "description": "Changes the subscription type of the the given subscription.",
        "operationId": "changeType",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "description": "The identifier for the subscription.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeDetails"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "The subscription was changed successfully."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          },
          "401": {
            "description": "Invalid authentication token was given."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/subscription/subscriptions/{subscriptionId}/renew-payment-info": {
      "post": {
        "description": "Initiates the renewal of payment information for the given subscription.",
        "operationId": "renewPaymentInfo2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "description": "The identifier of the subscription to renew payment information for.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/RenewalRequest"
        },
        "responses": {
          "200": {
            "description": "The renewal has been initiated properly and information required for the client has been returned in the response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RenewalResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/subscription/subscriptions/{subscriptionId}/resume": {
      "post": {
        "description": "Resumes a given subscription.",
        "operationId": "resume",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subscriptionId",
            "in": "path",
            "required": true,
            "description": "The identifier for the subscription.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "The subscription was resumed successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyPagesSubscriptionDetails"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/wishlist/wishlists": {
      "get": {
        "description": "Retrieves all wishlists for the authenticated customer.",
        "operationId": "getWishlists",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The wishlists were retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The wishlists were retrieved successfully.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MyPagesWishlistResponse"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          },
          "404": {
            "description": "No wishlists were found for the customer.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      },
      "post": {
        "description": "Saves a wishlist for the authenticated customer.",
        "operationId": "saveWishlist",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MyPagesWishlistRequest"
              }
            }
          },
          "description": "The wishlist to save."
        },
        "responses": {
          "200": {
            "description": "The wishlist was created successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyPagesWishlistIdResponse"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/wishlist/wishlists/{wishlistId}": {
      "delete": {
        "description": "Deletes a wishlist by its ID.",
        "operationId": "deleteWishlist",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wishlistId",
            "in": "path",
            "description": "The \u003ccode\u003euuid\u003c/code\u003e of the wishlist to delete.",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "The wishlist was deleted successfully."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          },
          "401": {
            "description": "Invalid authentication token was given."
          },
          "404": {
            "description": "No wishlist found for the provided wishlist ID."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      },
      "get": {
        "description": "Retrieves a wishlist by its ID.",
        "operationId": "getWishlist",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wishlistId",
            "in": "path",
            "description": "The \u003ccode\u003euuid\u003c/code\u003e of the wishlist to retrieve.",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "The wishlist was retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MyPagesWishlistResponse"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          },
          "401": {
            "description": "Invalid authentication token was given.",
            "content": {
              "application/json": {}
            }
          },
          "404": {
            "description": "No wishlist found for the provided wishlist ID.",
            "content": {
              "application/json": {}
            }
          }
        },
        "x-viskan-scope": "viskan:mypages"
      },
      "patch": {
        "description": "Updates the name of a wishlist.",
        "operationId": "updateWishlistName",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wishlistId",
            "in": "path",
            "description": "The \u003ccode\u003euuid\u003c/code\u003e of the wishlist to update the name of.",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MyPagesWishlistNameRequest"
              }
            }
          },
          "description": "The new name of the wishlist."
        },
        "responses": {
          "204": {
            "description": "The name of the wishlist was successfully updated."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          },
          "401": {
            "description": "Invalid authentication token was given."
          },
          "404": {
            "description": "No wishlist found for the provided wishlist ID."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/wishlist/wishlists/{wishlistId}/products": {
      "post": {
        "description": "Saves products to a wishlist.",
        "operationId": "saveProducts",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wishlistId",
            "in": "path",
            "description": "The \u003ccode\u003euuid\u003c/code\u003e of the wishlist to save the products to.",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "description": "The products to save.",
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/MyPagesWishlistProductRequest"
                }
              }
            }
          },
          "description": "The products to save."
        },
        "responses": {
          "204": {
            "description": "The products were successfully added to the wishlist."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          },
          "401": {
            "description": "Invalid authentication token was given."
          },
          "404": {
            "description": "No wishlist found for the provided wishlist ID."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/my-pages-v2/wishlist/wishlists/{wishlistId}/products/_delete": {
      "post": {
        "description": "Deletes products from a wishlist.",
        "operationId": "deleteProducts",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-My-Pages-Token",
            "in": "header",
            "description": "The token received from the authentication API.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "wishlistId",
            "in": "path",
            "description": "The \u003ccode\u003euuid\u003c/code\u003e of the wishlist to delete the products from.",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "description": "The products to delete.",
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/MyPagesWishlistProductRequest"
                }
              }
            }
          },
          "description": "The products to delete."
        },
        "responses": {
          "204": {
            "description": "The products were successfully deleted from the wishlist."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          },
          "401": {
            "description": "Invalid authentication token was given."
          },
          "404": {
            "description": "No wishlist found for the provided wishlist ID."
          }
        },
        "x-viskan-scope": "viskan:mypages"
      }
    },
    "/order-management/delivery/deliveries": {
      "get": {
        "description": "Searches for deliveries in the system.",
        "operationId": "search4",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "checkForParcelModifications",
            "in": "query",
            "description": "An optional filter on whether to check modifiedAfter on parcels as well.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "Filter on delivery countryCode (ISO 3166-1 alpha-2 standard format). For example countryCode\u003dSE\u0026countryCode\u003dNO.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "customFieldValue",
            "in": "query",
            "description": "An optional filter on one/many custom field values. For example\ncustomFieldValue\u003d22468-15267-80\u0026customFieldValue\u003d22468-15267-81",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "description": "An optional filter on customer id. Mutually exclusive with customer number. For example customerId\u003d1234",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "-1"
            }
          },
          {
            "name": "customerNumber",
            "in": "query",
            "description": "An optional filter on customer number. Mutually exclusive with customer id. For example customerNumber\u003d8564",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryId",
            "in": "query",
            "description": "An optional filter on one/many deliveryId. For example deliveryId\u003d123\u0026deliveryId\u003d789",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "deliveryMethodId",
            "in": "query",
            "description": "An optional filter on one/many delivery method id(s), matched against \u003ccode\u003edeliveryMethod.deliveryMethodId\u003c/code\u003e.\nFor example deliveryMethodId\u003d19\u0026deliveryMethodId\u003d20",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "deliveryMethodName",
            "in": "query",
            "description": "An optional filter on one/many delivery method name(s), matched against\n\u003ccode\u003edeliveryMethod.deliveryMethodName\u003c/code\u003e. For example deliveryMethodName\u003dMyPack\u0026deliveryMethodName\u003dInStore",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "deliveryNumber",
            "in": "query",
            "description": "An optional filter on one/many deliveryNumber. For example deliveryNumber\u003dabc\u0026deliveryNumber\u003dxyz",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "externalDeliveryMethodCode",
            "in": "query",
            "description": "An optional filter on one/many external delivery method code(s), matched against\n\u003ccode\u003edeliveryMethod.externalDeliveryMethodCode\u003c/code\u003e. This is \u003cb\u003enot\u003c/b\u003e the delivery method name. For example\nexternalDeliveryMethodCode\u003dHOME-01\u0026externalDeliveryMethodCode\u003dSTORE-01\n\u003cp\u003e\u003cb\u003eNOTE!\u003c/b\u003e The payment method filters (id, name and external code) and the delivery method filters (id, name and external code)\nare separate filters. Values within one filter are combined with OR, and different filters are combined with AND, like all other filters.\u003c/p\u003e",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "externalPaymentMethodCode",
            "in": "query",
            "description": "An optional filter on one/many external payment method code(s), matched against\n\u003ccode\u003epaymentMethod.externalPaymentMethodCode\u003c/code\u003e. This is \u003cb\u003enot\u003c/b\u003e the payment method name. For example\nexternalPaymentMethodCode\u003dINVOICE-30\u0026externalPaymentMethodCode\u003dCARD",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "includeCanceledRows",
            "in": "query",
            "description": "An optional filter on whether to include canceled delivery rows. \u003cbr\u003e\nThe canceled rows will have the original price/discounts, but partly delivered rows will have the discount and totals reflecting the\ndelivered quantities.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "internalCustomers",
            "in": "query",
            "description": "An optional filter on whether the customers of the deliveries are internal.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "methodOfArrival",
            "in": "query",
            "description": "An optional filter on one/many method of arrivals. For example methodOfArrivals\u003dA09",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. Useful for getting delta-changes. More\n\u003ca href\u003d\"../general-information/index.html#modifiedAfter\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "multiBrandId",
            "in": "query",
            "description": "An optional filter on the multibrand (concept) the customer belongs to.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "-1"
            }
          },
          {
            "name": "orderNumber",
            "in": "query",
            "description": "An optional filter on one/many order numbers. For example orderNumber\u003d1234\u0026orderNumber\u003d5678",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "parcelNumber",
            "in": "query",
            "description": "An optional filter on one/many \u003cb\u003e\u0027In Store\u0027\u003c/b\u003e parcel numbers. For example parcelNumber\u003d1234\u0026parcelNumber\u003d5678",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "parcelStatus",
            "in": "query",
            "description": "An optional filter on one/many statuses of \u003cb\u003e\u0027In Store\u0027\u003c/b\u003e parcels. Only deliveries with at least one \u0027In Store\u0027\nparcel in any of the given statuses are returned; parcels of other carriers are never matched. For example\nparcelStatus\u003dARRIVED\u0026parcelStatus\u003dUNCOLLECTED",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "ARRIVED",
                  "CANCELLED",
                  "COLLECTED",
                  "CREATED",
                  "LOST",
                  "MISDELIVERED",
                  "MISSING",
                  "PACKED",
                  "PRESUMED_ARRIVED",
                  "REROUTED",
                  "ROUTED",
                  "UNCOLLECTED",
                  "UNPACKED"
                ]
              }
            }
          },
          {
            "name": "paymentMethodId",
            "in": "query",
            "description": "An optional filter on one/many payment method id(s), matched against \u003ccode\u003epaymentMethod.paymentMethodId\u003c/code\u003e.\nFor example paymentMethodId\u003d1\u0026paymentMethodId\u003d4",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "paymentMethodName",
            "in": "query",
            "description": "An optional filter on one/many payment method name(s), matched against \u003ccode\u003epaymentMethod.paymentMethodName\u003c/code\u003e.\nFor example paymentMethodName\u003dKlarna\u0026paymentMethodName\u003dSwish",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "processChain",
            "in": "query",
            "description": "Filter on current delivery processChain. For example processChain\u003dREPORT_QUEUE. \u003cb\u003eThe use of this filter is contingent\nupon the approval of Viskan.\u003c/b\u003e",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "processStatus",
            "in": "query",
            "description": "Filter on current delivery processStatus. For example processStatus\u003dPROCESSED\u0026processStatus\u003dEXPORTED. \u003cb\u003eThe use of this\nfilter is contingent upon the approval of Viskan.\u003c/b\u003e",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "purchaseNumber",
            "in": "query",
            "description": "An optional filter on a one/many purchase numbers. For example purchaseNumber\u003d1234\u0026purchaseNumber\u003d5678",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters. More\n\u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter on current delivery status. For example status\u003dCREATED\u0026status\u003dDELIVERED. \u003cp\u003e\u003cb\u003eNOTE!\u003c/b\u003e When fetching deliveries to handle in a \u003cb\u003epick \u0026 pack\u003c/b\u003e process,\nyou should \u003cb\u003ealways filter on CREATED\u003c/b\u003e.\nOnly deliveries in this state are ready to be processed for packing and shipment.\u003c/p\u003e",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "CANCELED",
                  "CREATED",
                  "DELIVERED"
                ]
              }
            }
          },
          {
            "name": "warehouseId",
            "in": "query",
            "description": "The id of the warehouse we want deliveries for. Mutually exclusive with warehouseNumber.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "warehouseNumber",
            "in": "query",
            "description": "The number of the warehouse we want deliveries for. Mutually exclusive with warehouseId.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "webStoreNumber",
            "in": "query",
            "description": "An optional filter on one/many web store(s) where the order was placed. Only applicable for web orders,\nsubscription based orders and physical store orders are not supported by this filter. For example webStoreNumber\u003d888",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Find shipments",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Shipment API",
        "x-viskan-scope": "viskan:shipment:read"
      }
    },
    "/order-management/delivery/deliveries/{deliveryId}": {
      "patch": {
        "description": "Updates a specific delivery.",
        "operationId": "update6",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryId",
            "in": "path",
            "required": true,
            "description": "The identifier of the delivery to update.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeliveryChanges"
              }
            }
          },
          "description": "The changes to apply."
        },
        "responses": {
          "204": {
            "description": "The delivery was updated successfully."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "Update a shipment",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Shipment API",
        "x-viskan-scope": "viskan:shipment:update"
      }
    },
    "/order-management/delivery/deliveries/{deliveryId}/_cancel": {
      "post": {
        "description": "(InStore functionality) Cancels the delivery that is set to be processed/picked by store personnel. The cancellation can only occur if the\ndelivery has not been already reported or cancelled.",
        "operationId": "cancelDeliveryInStore",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryId",
            "in": "path",
            "required": true,
            "description": "The identifier of the delivery to cancel",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "The delivery was cancelled successfully"
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "Cancel in-store shipment",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Shipment API",
        "x-viskan-scope": "viskan:shipment:cancel"
      }
    },
    "/order-management/delivery/deliveries/{deliveryId}/_mark-as-being-picked-in-store": {
      "post": {
        "description": "(InStore functionality) Updates the delivery to be processed/picked by store personnel. This will make sure no other system processes updates\nthe delivery.",
        "operationId": "pickDeliveryInStore",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryId",
            "in": "path",
            "required": true,
            "description": "The identifier of the delivery to use for the update",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "The delivery was updated successfully."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "Mark as being picked in store",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Shipment API",
        "x-viskan-scope": "viskan:shipment:update"
      }
    },
    "/order-management/order/orders": {
      "get": {
        "description": "Searches for orders in the system.",
        "operationId": "search5",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "Filter on delivery country of order (ISO 3166-1 alpha-2 standard format). For example countryCode\u003dSE\u0026countryCode\u003dNO.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "customFieldValue",
            "in": "query",
            "description": "An optional filter on one/many custom field values. For example\ncustomFieldValue\u003d22468-15267-80\u0026customFieldValue\u003d22468-15267-81",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "description": "An optional filter on customer id. Mutually exclusive with customer number. For example customerId\u003d1234",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "-1"
            }
          },
          {
            "name": "customerNumber",
            "in": "query",
            "description": "An optional filter on customer number. Mutually exclusive with customer id. For example customerNumber\u003d8564",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryMethodId",
            "in": "query",
            "description": "An optional filter on one/many delivery method id(s), matched against \u003ccode\u003edeliveryMethod.deliveryMethodId\u003c/code\u003e.\nFor example deliveryMethodId\u003d19\u0026deliveryMethodId\u003d20",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "deliveryMethodName",
            "in": "query",
            "description": "An optional filter on one/many delivery method name(s), matched against\n\u003ccode\u003edeliveryMethod.deliveryMethodName\u003c/code\u003e. For example deliveryMethodName\u003dMyPack\u0026deliveryMethodName\u003dInStore",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "externalDeliveryMethodCode",
            "in": "query",
            "description": "An optional filter on one/many external delivery method code(s), matched against\n\u003ccode\u003edeliveryMethod.externalDeliveryMethodCode\u003c/code\u003e. This is \u003cb\u003enot\u003c/b\u003e the delivery method name. For example\nexternalDeliveryMethodCode\u003dHOME-01\u0026externalDeliveryMethodCode\u003dSTORE-01\n\u003cp\u003e\u003cb\u003eNOTE!\u003c/b\u003e The payment method filters (id, name and external code) and the delivery method filters (id, name and external code)\nare separate filters. Values within one filter are combined with OR, and different filters are combined with AND, like all other filters.\u003c/p\u003e",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "externalPaymentMethodCode",
            "in": "query",
            "description": "An optional filter on one/many external payment method code(s), matched against\n\u003ccode\u003epaymentMethod.externalPaymentMethodCode\u003c/code\u003e. This is \u003cb\u003enot\u003c/b\u003e the payment method name. For example\nexternalPaymentMethodCode\u003dINVOICE-30\u0026externalPaymentMethodCode\u003dCARD",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "includeCanceledRows",
            "in": "query",
            "description": "An optional filter on whether or not to include canceled order rows.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "methodOfArrival",
            "in": "query",
            "description": "An optional filter on one/many method of arrivals. For example methodOfArrivals\u003dA09",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. Useful for getting delta-changes.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "multiBrandId",
            "in": "query",
            "description": "An optional filter on the multibrand (concept) the customer belongs to.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "-1"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "description": "An optional filter on one/many orderId. For example orderId\u003d123\u0026orderId\u003d789",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "orderNumber",
            "in": "query",
            "description": "An optional filter on one/many orderNumber For example orderNumber\u003dabc\u0026orderNumber\u003dxyz",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "paymentMethodId",
            "in": "query",
            "description": "An optional filter on one/many payment method id(s), matched against \u003ccode\u003epaymentMethod.paymentMethodId\u003c/code\u003e.\nFor example paymentMethodId\u003d1\u0026paymentMethodId\u003d4",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "paymentMethodName",
            "in": "query",
            "description": "An optional filter on one/many payment method name(s), matched against \u003ccode\u003epaymentMethod.paymentMethodName\u003c/code\u003e.\nFor example paymentMethodName\u003dKlarna\u0026paymentMethodName\u003dSwish",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "processChain",
            "in": "query",
            "description": "Filter on current order processChain. For example processChain\u003dOUTORDER_CANCEL. \u003cb\u003eThe use of this filter is contingent\nupon the approval of Viskan.\u003c/b\u003e",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "processStatus",
            "in": "query",
            "description": "Filter on current order processStatus. For example processStatus\u003dSTARTED\u0026processStatus\u003dDONE. \u003cb\u003eThe use of this filter\nis contingent upon the approval of Viskan.\u003c/b\u003e",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "purchaseNumber",
            "in": "query",
            "description": "An optional filter on a single purchasenumber. For example purchaseNumber\u003d1234",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters. More\n\u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter on current order status. For example status\u003dCREATED\u0026status\u003dDELIVERED.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "CANCELED",
                  "DELIVERY_CREATED",
                  "FULLY_DELIVERED",
                  "PART_DELIVERED",
                  "PLACED"
                ]
              }
            }
          },
          {
            "name": "webStoreNumber",
            "in": "query",
            "description": "An optional filter on one/many web store(s) where the order was placed. Only applicable for web orders,\nsubscription based orders and physical store orders are not supported by this filter. For example webStoreNumber\u003d888",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Find orders",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Order API",
        "x-viskan-scope": "viskan:order:read"
      }
    },
    "/order-management/return/reasons": {
      "get": {
        "description": "Searches for return reasons in the system.",
        "operationId": "getReasons",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReturnReasonSearch"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Find return reasons",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Return API",
        "x-viskan-scope": "viskan:returnreason:read"
      }
    },
    "/order-management/return/returns": {
      "get": {
        "description": "Searches for returns in the system.",
        "operationId": "search6",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "methodOfArrival",
            "in": "query",
            "description": "An optional filter on one/many method of arrivals. For example methodOfArrivals\u003dA09",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. Useful for getting delta-changes. More\n\u003ca href\u003d\"../general-information/index.html#modifiedAfter\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "multiBrandId",
            "in": "query",
            "description": "An optional filter on the multibrand (concept) the customer belongs to.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "-1"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "purchaseNumber",
            "in": "query",
            "description": "An optional filter on a single purchasenumber. For example purchaseNumber\u003d1234",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "returnId",
            "in": "query",
            "description": "An optional filter on one/many returnId. For example returnId\u003d123\u0026returnId\u003d789",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "returnNumber",
            "in": "query",
            "description": "An optional filter on one/many returnNumber. For example returnNumber\u003dabc\u0026returnNumber\u003dxyz",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters. More\n\u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter on current return status. For example status\u003dCREATED\u0026status\u003dRECEIVED.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "CANCELED",
                  "CREATED",
                  "RECEIVED",
                  "REPORTED"
                ]
              }
            }
          },
          {
            "name": "warehouseId",
            "in": "query",
            "description": "The ids of the warehouse . Mutually exclusive with warehouseNumber",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "warehouseNumber",
            "in": "query",
            "description": "The number of the warehouse we want returns for. Mutually exclusive with warehouseId",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "webStoreNumber",
            "in": "query",
            "description": "An optional filter on one/many web store(s) where the order was placed. Only applicable for web orders,\nsubscription based orders and physical store orders are not supported by this filter. For example webStoreNumber\u003d888",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReturnResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Find returns",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Return API",
        "x-viskan-scope": "viskan:return:read"
      }
    },
    "/order-management/return/returns/return": {
      "post": {
        "description": "Registers a return.",
        "operationId": "register2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReturnToCreate"
              }
            }
          },
          "description": "The return to create."
        },
        "responses": {
          "201": {
            "description": "The return was created successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedReturn"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Create a return",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Return API",
        "x-viskan-scope": "viskan:return:create"
      }
    },
    "/order-management/return/returns/{returnId}": {
      "patch": {
        "description": "Updates a specific return.",
        "operationId": "update7",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "returnId",
            "in": "path",
            "required": true,
            "description": "The identifier of the return to update.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReturnChanges"
              }
            }
          },
          "description": "The changes to apply."
        },
        "responses": {
          "204": {
            "description": "The return was updated successfully."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "Update a return",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Return API",
        "x-viskan-scope": "viskan:return:update"
      }
    },
    "/order-property/orders/{orderId}/properties": {
      "get": {
        "description": "Returns all properties assigned to an order.",
        "operationId": "getOrderProperties",
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "description": "The unique identifier of the order.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the order properties.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EntityPropertyItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Get property values for order",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Order property API",
        "x-viskan-scope": "viskan:order:read"
      }
    },
    "/order-property/orders/{orderId}/properties/{propertyKeyId}": {
      "delete": {
        "description": "Removes a property from an order.",
        "operationId": "deleteProperty_3",
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "description": "The unique identifier of the order.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The property was removed successfully."
          }
        },
        "summary": "Remove property value from order",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Order property API",
        "x-viskan-scope": "viskan:order:update"
      },
      "put": {
        "description": "Sets or updates the value of a single property key on an order. PUT is full replacement — any existing values not in the request are removed. For raw types (\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eINTEGER\u003c/code\u003e, \u003ccode\u003eFLOAT\u003c/code\u003e, \u003ccode\u003eBOOLEAN\u003c/code\u003e, \u003ccode\u003eHTML\u003c/code\u003e): use \u003ccode\u003evalue\u003c/code\u003e for a single value or \u003ccode\u003evalues\u003c/code\u003e for multiple. Each value is an object: \u003ccode\u003e{\"value\": \"Gold\", \"translations\": [{\"languageCode\": \"sv\", \"name\": \"Guld\"}]}\u003c/code\u003e. Prefer a single \u003ccode\u003evalue\u003c/code\u003e; for multiple reusable values, consider \u003ccode\u003eMULTI_SELECT\u003c/code\u003e. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e: use \u003ccode\u003epropertyValueId\u003c/code\u003e. For \u003ccode\u003eMULTI_SELECT\u003c/code\u003e: use \u003ccode\u003epropertyValueIds\u003c/code\u003e.",
        "operationId": "setPropertyValue_3",
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "description": "The unique identifier of the order.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetPropertyValueRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property value was set successfully."
          }
        },
        "summary": "Set property value on order",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Order property API",
        "x-viskan-error-code-invalid-presentation-type": "The property key has an unknown presentation type.",
        "x-viskan-error-code-invalid-request-fields": "The wrong request fields were populated for the presentation type.",
        "x-viskan-error-code-invalid-value-format": "The provided value does not match the expected format.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-map-count-violation": "The number of values violates the min/max map count constraint.",
        "x-viskan-error-code-order-not-found": "The order was not found.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-error-code-property-value-not-found": "The property value was not found or not linked to the key.",
        "x-viskan-scope": "viskan:order:update"
      }
    },
    "/order-property/property-keys": {
      "get": {
        "description": "Returns all order property keys with their presentation types, translations, and values. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e and \u003ccode\u003eMULTI_SELECT\u003c/code\u003e keys, the predefined values are included.",
        "operationId": "findPropertyKeys_3",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The response contains the property keys.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PropertyKeyDetailItem"
                  }
                }
              }
            }
          }
        },
        "summary": "List order property keys",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Order property API",
        "x-viskan-scope": "viskan:orderproperty:read"
      },
      "post": {
        "description": "Creates a new order property key with optional translations and predefined values.",
        "operationId": "createPropertyKey_3",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePropertyKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property key was created successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Create order property key",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Order property API",
        "x-viskan-error-code-duplicate-property-value": "Two or more values have the same name.",
        "x-viskan-error-code-invalid-property-key-name": "The property key name must not be empty.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-property-key-name-already-exists": "A property key with this name already exists.",
        "x-viskan-scope": "viskan:orderproperty:create"
      }
    },
    "/order-property/property-keys/{propertyKeyId}": {
      "delete": {
        "description": "Deletes an order property key and its translations.",
        "operationId": "deletePropertyKey_3",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The property key was deleted successfully."
          }
        },
        "summary": "Delete order property key",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Order property API",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:orderproperty:delete"
      },
      "get": {
        "description": "Returns a single order property key with its presentation type, translations, and values. Same shape as the list endpoint.",
        "operationId": "findPropertyKey_3",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the property key.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Get order property key",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Order property API",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:orderproperty:read"
      },
      "put": {
        "description": "Updates an order property key including its translations and predefined values.",
        "operationId": "updatePropertyKey_3",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePropertyKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property key was updated successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Update order property key",
        "tags": [
          "Order management"
        ],
        "x-viskan-api-name": "Order property API",
        "x-viskan-error-code-duplicate-property-value": "Two or more values have the same name.",
        "x-viskan-error-code-invalid-property-key-name": "The property key name must not be empty.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-property-key-name-already-exists": "A property key with this name already exists.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:orderproperty:update"
      }
    },
    "/product-category-property/product-categories/{categoryId}/properties": {
      "get": {
        "description": "Returns all properties assigned to a product category.",
        "operationId": "getProductCategoryProperties",
        "parameters": [
          {
            "name": "categoryId",
            "in": "path",
            "description": "The unique identifier of the product category.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the product category properties.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EntityPropertyItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Get property values for product category",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Product category property API",
        "x-viskan-scope": "viskan:productcategory:read"
      }
    },
    "/product-category-property/product-categories/{categoryId}/properties/{propertyKeyId}": {
      "delete": {
        "description": "Removes a property from a product category.",
        "operationId": "deleteProperty_2",
        "parameters": [
          {
            "name": "categoryId",
            "in": "path",
            "description": "The unique identifier of the product category.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The property was removed successfully."
          }
        },
        "summary": "Remove property value from product category",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Product category property API",
        "x-viskan-scope": "viskan:productcategory:update"
      },
      "put": {
        "description": "Sets or updates the value of a single property key on a product category. PUT is full replacement — any existing values not in the request are removed. For raw types (\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eINTEGER\u003c/code\u003e, \u003ccode\u003eFLOAT\u003c/code\u003e, \u003ccode\u003eBOOLEAN\u003c/code\u003e, \u003ccode\u003eHTML\u003c/code\u003e): use \u003ccode\u003evalue\u003c/code\u003e for a single value or \u003ccode\u003evalues\u003c/code\u003e for multiple. Each value is an object: \u003ccode\u003e{\"value\": \"Gold\", \"translations\": [{\"languageCode\": \"sv\", \"name\": \"Guld\"}]}\u003c/code\u003e. Prefer a single \u003ccode\u003evalue\u003c/code\u003e; for multiple reusable values, consider \u003ccode\u003eMULTI_SELECT\u003c/code\u003e. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e: use \u003ccode\u003epropertyValueId\u003c/code\u003e. For \u003ccode\u003eMULTI_SELECT\u003c/code\u003e: use \u003ccode\u003epropertyValueIds\u003c/code\u003e.",
        "operationId": "setPropertyValue_2",
        "parameters": [
          {
            "name": "categoryId",
            "in": "path",
            "description": "The unique identifier of the product category.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetPropertyValueRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property value was set successfully."
          }
        },
        "summary": "Set property value on product category",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Product category property API",
        "x-viskan-error-code-invalid-presentation-type": "The property key has an unknown presentation type.",
        "x-viskan-error-code-invalid-request-fields": "The wrong request fields were populated for the presentation type.",
        "x-viskan-error-code-invalid-value-format": "The provided value does not match the expected format.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-map-count-violation": "The number of values violates the min/max map count constraint.",
        "x-viskan-error-code-product-category-not-found": "The product category was not found.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-error-code-property-value-not-found": "The property value was not found or not linked to the key.",
        "x-viskan-scope": "viskan:productcategory:update"
      }
    },
    "/product-category-property/property-keys": {
      "get": {
        "description": "Returns all product category property keys with their presentation types, translations, and values. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e and \u003ccode\u003eMULTI_SELECT\u003c/code\u003e keys, the predefined values are included.",
        "operationId": "findPropertyKeys_2",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The response contains the property keys.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PropertyKeyDetailItem"
                  }
                }
              }
            }
          }
        },
        "summary": "List product category property keys",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Product category property API",
        "x-viskan-scope": "viskan:productcategoryproperty:read"
      },
      "post": {
        "description": "Creates a new product category property key with optional translations and predefined values.",
        "operationId": "createPropertyKey_2",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePropertyKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property key was created successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Create product category property key",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Product category property API",
        "x-viskan-error-code-duplicate-property-value": "Two or more values have the same name.",
        "x-viskan-error-code-invalid-property-key-name": "The property key name must not be empty.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-property-key-name-already-exists": "A property key with this name already exists.",
        "x-viskan-scope": "viskan:productcategoryproperty:create"
      }
    },
    "/product-category-property/property-keys/{propertyKeyId}": {
      "delete": {
        "description": "Deletes a product category property key and its translations.",
        "operationId": "deletePropertyKey_2",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The property key was deleted successfully."
          }
        },
        "summary": "Delete product category property key",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Product category property API",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:productcategoryproperty:delete"
      },
      "get": {
        "description": "Returns a single product category property key with its presentation type, translations, and values. Same shape as the list endpoint.",
        "operationId": "findPropertyKey_2",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the property key.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Get product category property key",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Product category property API",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:productcategoryproperty:read"
      },
      "put": {
        "description": "Updates a product category property key including its translations and predefined values.",
        "operationId": "updatePropertyKey_2",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePropertyKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property key was updated successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Update product category property key",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Product category property API",
        "x-viskan-error-code-duplicate-property-value": "Two or more values have the same name.",
        "x-viskan-error-code-invalid-property-key-name": "The property key name must not be empty.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-property-key-name-already-exists": "A property key with this name already exists.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:productcategoryproperty:update"
      }
    },
    "/product-category-property/property-keys/{propertyKeyId}/product-categories": {
      "get": {
        "description": "Returns the product categories that have a value for the given property key, together with their value(s), ordered by category identifier. Paging is per category. The response does not contain a total count; use \u003ccode\u003epage.hasMore\u003c/code\u003e to determine whether another page exists. Translations and media URLs are not included.",
        "operationId": "findProductCategoriesByPropertyKey",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains a page of product categories and their values.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResultProductCategoryPropertyAssignmentItem"
                }
              }
            }
          }
        },
        "summary": "Find product categories by property key",
        "tags": [
          "Config"
        ],
        "x-viskan-api-name": "Product category property API",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:productcategory:read"
      }
    },
    "/product-information/attribute/attribute1-groups": {
      "get": {
        "description": "Search for attribute1 groups.",
        "operationId": "searchAttributeGroups",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. Useful for getting delta-changes. More\n\u003ca href\u003d\"../general-information/index.html#modifiedAfter\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters. More\n\u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Attribute1GroupResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "1. Find attribute1 groups",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Attribute API",
        "x-viskan-scope": "viskan:attribute1group:read"
      },
      "post": {
        "description": "Create or update an attribute1 group.",
        "operationId": "createOrUpdateAttributeGroup",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Attribute1GroupChanges"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Success",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "2. Create or update an attribute1 group",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Attribute API",
        "x-viskan-scope": "viskan:attribute1group:update"
      }
    },
    "/product-information/category/tree": {
      "get": {
        "description": "Returns a tree of categories",
        "operationId": "search7",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "categoryType",
            "in": "query",
            "description": "The type of category the tree will contain.",
            "schema": {
              "type": "string",
              "enum": [
                "CUSTOMER",
                "PRODUCT"
              ],
              "default": "PRODUCT"
            }
          },
          {
            "name": "rootCategoryId",
            "in": "query",
            "description": "The root of the tree.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Category"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Get a category tree",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Category API",
        "x-viskan-scope": "viskan:productcategory:read"
      }
    },
    "/product-information/media/medias": {
      "get": {
        "description": "Searches for media of stock keeping units in the system.",
        "operationId": "search8",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. Useful for getting delta-changes. More\n\u003ca href\u003d\"../general-information/index.html#modifiedAfter\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "priceLookUpNumber",
            "in": "query",
            "description": "Filter on the price look-up number of stock keeping units.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "priceLookupUnitNumber",
            "in": "query",
            "description": "Filter on the price lookup unit number of stock keeping units. \u003cb\u003eDeprecated\u003c/b\u003e in favor of\n\u003ccode\u003epriceLookUpNumbers\u003c/code\u003e due to a typo.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "productNumber",
            "in": "query",
            "description": "Filter on the product number of stock keeping units.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "scale",
            "in": "query",
            "description": "The scales to fetch media in.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "LARGE",
                  "LIST",
                  "NORMAL",
                  "ORIGINAL",
                  "THUMBNAIL"
                ]
              }
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters. More\n\u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Find product media",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Media API",
        "x-viskan-scope": "viskan:media:read"
      },
      "post": {
        "description": "Saves media to media directory \u0026 database. Max batch size is 100.",
        "operationId": "saveMedia",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "description": "The changes to apply.",
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/MediaChanges"
                }
              }
            }
          },
          "description": "The changes to apply."
        },
        "responses": {
          "201": {
            "description": "The medias were successfully created/overwritten.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The medias were successfully created/overwritten.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "Create product media",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Media API",
        "x-viskan-scope": "viskan:media:create"
      }
    },
    "/product-information/media/medias/disconnect": {
      "post": {
        "description": "Disconnects media from products, colors and variants. Max batch size is 100.\n\u003cp\u003e\nThe match is exact. A media with only productNumber is disconnected from the product level only. With attribute1Code or\nattribute1Number (and attribute2 and attribute3 the same way) it is disconnected from that attribute combination only, for example\nthe color. stockKeepingUnitId or priceLookUpNumber means that variant. Without mediaType every media type of the media at that\nlevel is disconnected, with mediaType only that one. The media is found by \u0027filename\u0027, or its filename is built from \u0027mediaURL\u0027\n(with \u0027prefix\u0027 and the attribute codes or numbers) the same way as when it was connected. With stockKeepingUnitId or\npriceLookUpNumber the attribute codes and numbers are only used to build the filename, the same way POST /medias names the file.\n\u003c/p\u003e\n\u003cp\u003e\nEvery media that can be disconnected is, a media that fails does not stop the others. The response has the result of each media,\nin the order they were sent. A media that is not connected where it was asked to be removed fails with the error code\n\u0027media-not-connected\u0027. The media itself is never deleted, it stays in the media library.\n\u003c/p\u003e",
        "operationId": "disconnectMedia",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "description": "The media to disconnect.",
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/MediaToDisconnect"
                }
              }
            }
          },
          "description": "The media to disconnect."
        },
        "responses": {
          "200": {
            "description": "The media were handled, see the result of each media.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaDisconnectResponse"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Disconnect product media",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Media API",
        "x-viskan-scope": "viskan:media:update"
      }
    },
    "/product-information/price/prices": {
      "patch": {
        "description": "\u003cp\u003eUpdates existing prices or adds new prices in the product information management system.\u003c/p\u003e\n\n\u003cp\u003eA product price consists of two amounts:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003cb\u003eselling price\u003c/b\u003e, which is the price the customer pays.\u003c/li\u003e\n\u003cli\u003eThe \u003cb\u003eoriginal price\u003c/b\u003e, which is the price before a sale and is shown alongside the selling price\nwhen the product is on sale. A product that is not on sale has no original price (zero).\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003cp\u003eunitPrice, salePrice and clearSalePrice do \u003cb\u003enot\u003c/b\u003e map one-to-one to these\namounts. When updating an existing price, the combination of fields sent decides the result:\u003c/p\u003e\n\u003ctable\u003e\n\u003ccaption\u003eUpdating an existing price\u003c/caption\u003e\n\u003ctr\u003e\u003cth\u003eFields sent\u003c/th\u003e\u003cth\u003eSelling price\u003c/th\u003e\u003cth\u003eOriginal price\u003c/th\u003e\u003cth\u003eUse it to\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eunitPrice + clearSalePrice: true\u003c/td\u003e\u003ctd\u003eunitPrice\u003c/td\u003e\u003ctd\u003eZero\u003c/td\u003e\n\u003ctd\u003eSet the regular price of a product that is not on sale.\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eunitPrice + salePrice\u003c/td\u003e\u003ctd\u003esalePrice\u003c/td\u003e\u003ctd\u003eunitPrice\u003c/td\u003e\n\u003ctd\u003ePut a product on sale.\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003esalePrice\u003c/td\u003e\u003ctd\u003esalePrice\u003c/td\u003e\u003ctd\u003eUnchanged\u003c/td\u003e\n\u003ctd\u003eChange the price of a product that is already on sale.\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eclearSalePrice: true\u003c/td\u003e\u003ctd\u003eThe previous original price\u003c/td\u003e\u003ctd\u003eZero\u003c/td\u003e\n\u003ctd\u003eEnd a sale.\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eunitPrice\u003c/td\u003e\u003ctd\u003eUnchanged\u003c/td\u003e\u003ctd\u003eunitPrice\u003c/td\u003e\n\u003ctd\u003eChange the original price of a product that is on sale.\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e Sending only unitPrice does \u003cb\u003enot\u003c/b\u003e change the price the customer pays. To change\nthe regular price of a product that is not on sale, also send clearSalePrice: true.\u003c/p\u003e\n\n\u003cp\u003eWhen adding a new price, clearSalePrice is ignored. The selling price is set to salePrice,\nor to unitPrice when no salePrice is sent, and the original price is set to\nunitPrice.\u003c/p\u003e\n\n\u003cp\u003esalePrice and clearSalePrice: true cannot be combined in the same row.\u003c/p\u003e",
        "operationId": "update8",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "description": "The product prices to update or add.",
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PriceChanges"
                }
              }
            }
          },
          "description": "The product prices to update or add."
        },
        "responses": {
          "204": {
            "description": "The article-prices were successfully updated.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The article-prices were successfully updated.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "Update prices",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Price API",
        "x-viskan-scope": "viskan:product:update"
      }
    },
    "/product-information/product/deactivate/{productId}": {
      "post": {
        "description": "Deactivates a product.",
        "operationId": "delete2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "productId",
            "in": "path",
            "description": "The product to deactivate.",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "The deactivation was successful."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "3. Deactivate a product",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-scope": "viskan:product:update"
      }
    },
    "/product-information/product/packages": {
      "post": {
        "description": "Creates new flexible package products given that the related articles already exist",
        "operationId": "createPackages",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PackagesToAddOrUpdate"
              }
            }
          },
          "description": "The packages to add or update"
        },
        "responses": {
          "204": {
            "description": "Package products were successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Package products were successfully created.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "6. Create a flexible package product",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-scope": "viskan:product:update"
      }
    },
    "/product-information/product/products": {
      "get": {
        "description": "Searches for products in the system.",
        "operationId": "search9",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "europeanArticleNumber",
            "in": "query",
            "description": "Filter on a list of EAN-codes. This is mutually exclusive with \u003ccode\u003eproductNumber\u003c/code\u003e, \u003ccode\u003epriceLookUpNumber\u003c/code\u003e and \u003ccode\u003eeuropeanArticleNumber\u003c/code\u003e.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "includeProperties",
            "in": "query",
            "description": "Whether or not to include properties.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. Useful for getting delta-changes. More\n\u003ca href\u003d\"../general-information/index.html#modifiedAfter\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "onlyModifiedStockKeepingUnits",
            "in": "query",
            "description": "Filter modified stock keeping units on last modification date.\nModifiedAfter is required when OnlyModifiedStockKeepingUnits is specified.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "onlyProductsWithReducedPrice",
            "in": "query",
            "description": "Filter on products that do not have any reduced prices. Only filters by checking current sales price\nagainst the original price of a product.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "priceLookUpNumber",
            "in": "query",
            "description": "Filter on a list of PLU-nos. This is mutually exclusive with \u003ccode\u003eproductNumber\u003c/code\u003e, \u003ccode\u003epriceLookUpNumber\u003c/code\u003e and \u003ccode\u003eeuropeanArticleNumber\u003c/code\u003e.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "productNumber",
            "in": "query",
            "description": "Filter on a list of product numbers. This is mutually exclusive with \u003ccode\u003eproductNumber\u003c/code\u003e, \u003ccode\u003epriceLookUpNumber\u003c/code\u003e and \u003ccode\u003eeuropeanArticleNumber\u003c/code\u003e.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters. More\n\u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "1. Find products",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-scope": "viskan:product:read"
      },
      "post": {
        "description": "Creates new or updates existing products.",
        "operationId": "update9",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductChanges"
              }
            }
          },
          "description": "The changes to apply."
        },
        "responses": {
          "204": {
            "description": "The products were successfully created or updated.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The products were successfully created or updated.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "2. Create or update products",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-scope": "viskan:product:update"
      }
    },
    "/product-information/product/related-products": {
      "post": {
        "description": "Creates or updates related products.",
        "operationId": "createOrUpdate",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "partialSave",
            "in": "query",
            "required": true,
            "description": "If true then related products that pass validation will be saved even when an error occors.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RelatedProductChanges"
              }
            }
          },
          "description": "New or changed related products to apply"
        },
        "responses": {
          "204": {
            "description": "Related products were successfully created or updated.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Related products were successfully created or updated.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "4. Create or update related products",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-scope": "viskan:product:update"
      }
    },
    "/product-information/product/related-products/delete": {
      "post": {
        "description": "Deletes related products.",
        "operationId": "deleteRelatedArticles",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RelatedProductDeletes"
              }
            }
          },
          "description": "related products and (or) corresponding relation translations to delete"
        },
        "responses": {
          "204": {
            "description": "Related products were successfully deleted.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Related products were successfully deleted.",
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "5. Delete related products",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-scope": "viskan:product:update"
      }
    },
    "/product-property/products/{productId}/properties": {
      "get": {
        "description": "Returns all properties assigned to a product.",
        "operationId": "getProductProperties",
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "description": "The unique identifier of the product.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the product properties.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EntityPropertyItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Get property values for product",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product property API",
        "x-viskan-scope": "viskan:product:read"
      }
    },
    "/product-property/products/{productId}/properties/{propertyKeyId}": {
      "delete": {
        "description": "Removes a property from a product.",
        "operationId": "deleteProperty_1",
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "description": "The unique identifier of the product.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The property was removed successfully."
          }
        },
        "summary": "Remove property value from product",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product property API",
        "x-viskan-scope": "viskan:product:update"
      },
      "put": {
        "description": "Sets or updates the value of a single property key on a product. PUT is full replacement — any existing values not in the request are removed. For raw types (\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eINTEGER\u003c/code\u003e, \u003ccode\u003eFLOAT\u003c/code\u003e, \u003ccode\u003eBOOLEAN\u003c/code\u003e, \u003ccode\u003eHTML\u003c/code\u003e): use \u003ccode\u003evalue\u003c/code\u003e for a single value or \u003ccode\u003evalues\u003c/code\u003e for multiple. Each value is an object: \u003ccode\u003e{\"value\": \"Gold\", \"translations\": [{\"languageCode\": \"sv\", \"name\": \"Guld\"}]}\u003c/code\u003e. Prefer a single \u003ccode\u003evalue\u003c/code\u003e; for multiple reusable values, consider \u003ccode\u003eMULTI_SELECT\u003c/code\u003e. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e: use \u003ccode\u003epropertyValueId\u003c/code\u003e. For \u003ccode\u003eMULTI_SELECT\u003c/code\u003e: use \u003ccode\u003epropertyValueIds\u003c/code\u003e.",
        "operationId": "setPropertyValue_1",
        "parameters": [
          {
            "name": "productId",
            "in": "path",
            "description": "The unique identifier of the product.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetPropertyValueRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property value was set successfully."
          }
        },
        "summary": "Set property value on product",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product property API",
        "x-viskan-error-code-invalid-presentation-type": "The property key has an unknown presentation type.",
        "x-viskan-error-code-invalid-request-fields": "The wrong request fields were populated for the presentation type.",
        "x-viskan-error-code-invalid-value-format": "The provided value does not match the expected format.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-map-count-violation": "The number of values violates the min/max map count constraint.",
        "x-viskan-error-code-product-not-found": "The product was not found.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-error-code-property-value-not-found": "The property value was not found or not linked to the key.",
        "x-viskan-scope": "viskan:product:update"
      }
    },
    "/product-property/property-keys": {
      "get": {
        "description": "Returns all product property keys with their presentation types, translations, and values. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e and \u003ccode\u003eMULTI_SELECT\u003c/code\u003e keys, the predefined values are included.",
        "operationId": "findPropertyKeys_1",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The response contains the property keys.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PropertyKeyDetailItem"
                  }
                }
              }
            }
          }
        },
        "summary": "List product property keys",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product property API",
        "x-viskan-scope": "viskan:productproperty:read"
      },
      "post": {
        "description": "Creates a new product property key with optional translations and predefined values.",
        "operationId": "createPropertyKey_1",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePropertyKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property key was created successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Create product property key",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product property API",
        "x-viskan-error-code-duplicate-property-value": "Two or more values have the same name.",
        "x-viskan-error-code-invalid-property-key-name": "The property key name must not be empty.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-property-key-name-already-exists": "A property key with this name already exists.",
        "x-viskan-scope": "viskan:productproperty:create"
      }
    },
    "/product-property/property-keys/{propertyKeyId}": {
      "delete": {
        "description": "Deletes a product property key and its translations.",
        "operationId": "deletePropertyKey_1",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The property key was deleted successfully."
          }
        },
        "summary": "Delete product property key",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product property API",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:productproperty:delete"
      },
      "get": {
        "description": "Returns a single product property key with its presentation type, translations, and values. Same shape as the list endpoint.",
        "operationId": "findPropertyKey_1",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the property key.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Get product property key",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product property API",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:productproperty:read"
      },
      "put": {
        "description": "Updates a product property key including its translations and predefined values.",
        "operationId": "updatePropertyKey_1",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePropertyKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property key was updated successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Update product property key",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product property API",
        "x-viskan-error-code-duplicate-property-value": "Two or more values have the same name.",
        "x-viskan-error-code-invalid-property-key-name": "The property key name must not be empty.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-property-key-name-already-exists": "A property key with this name already exists.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:productproperty:update"
      }
    },
    "/product-variant-property/property-keys": {
      "get": {
        "description": "Returns all product variant property keys with their presentation types, translations, and values. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e and \u003ccode\u003eMULTI_SELECT\u003c/code\u003e keys, the predefined values are included.",
        "operationId": "findPropertyKeys",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The response contains the property keys.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PropertyKeyDetailItem"
                  }
                }
              }
            }
          }
        },
        "summary": "List variant property keys",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product variant property API",
        "x-viskan-scope": "viskan:productvariantproperty:read"
      },
      "post": {
        "description": "Creates a new product variant property key with optional translations and predefined values.",
        "operationId": "createPropertyKey",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePropertyKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property key was created successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Create variant property key",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product variant property API",
        "x-viskan-error-code-duplicate-property-value": "Two or more values have the same name.",
        "x-viskan-error-code-invalid-property-key-name": "The property key name must not be empty.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-property-key-name-already-exists": "A property key with this name already exists.",
        "x-viskan-scope": "viskan:productvariantproperty:create"
      }
    },
    "/product-variant-property/property-keys/{propertyKeyId}": {
      "delete": {
        "description": "Deletes a product variant property key and its translations.",
        "operationId": "deletePropertyKey",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The property key was deleted successfully."
          }
        },
        "summary": "Delete variant property key",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product variant property API",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:productvariantproperty:delete"
      },
      "get": {
        "description": "Returns a single product variant property key with its presentation type, translations, and values. Same shape as the list endpoint.",
        "operationId": "findPropertyKey",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the property key.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Get variant property key",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product variant property API",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:productvariantproperty:read"
      },
      "put": {
        "description": "Updates a product variant property key including its translations and predefined values.",
        "operationId": "updatePropertyKey",
        "parameters": [
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePropertyKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property key was updated successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyKeyDetailItem"
                }
              }
            }
          }
        },
        "summary": "Update variant property key",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product variant property API",
        "x-viskan-error-code-duplicate-property-value": "Two or more values have the same name.",
        "x-viskan-error-code-invalid-property-key-name": "The property key name must not be empty.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-property-key-name-already-exists": "A property key with this name already exists.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-scope": "viskan:productvariantproperty:update"
      }
    },
    "/product-variant-property/variants/{stockKeepingUnitId}/properties": {
      "get": {
        "description": "Returns all properties assigned to a product variant.",
        "operationId": "getVariantProperties",
        "parameters": [
          {
            "name": "stockKeepingUnitId",
            "in": "path",
            "description": "The unique identifier of the product variant.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the variant properties.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EntityPropertyItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Get property values for variant",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product variant property API",
        "x-viskan-scope": "viskan:product:read"
      }
    },
    "/product-variant-property/variants/{stockKeepingUnitId}/properties/{propertyKeyId}": {
      "delete": {
        "description": "Removes a property from a product variant.",
        "operationId": "deleteProperty",
        "parameters": [
          {
            "name": "stockKeepingUnitId",
            "in": "path",
            "description": "The unique identifier of the product variant.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The property was removed successfully."
          }
        },
        "summary": "Remove property value from variant",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product variant property API",
        "x-viskan-scope": "viskan:product:update"
      },
      "put": {
        "description": "Sets or updates the value of a single property key on a product variant. PUT is full replacement — any existing values not in the request are removed. For raw types (\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eINTEGER\u003c/code\u003e, \u003ccode\u003eFLOAT\u003c/code\u003e, \u003ccode\u003eBOOLEAN\u003c/code\u003e, \u003ccode\u003eHTML\u003c/code\u003e): use \u003ccode\u003evalue\u003c/code\u003e for a single value or \u003ccode\u003evalues\u003c/code\u003e for multiple. Each value is an object: \u003ccode\u003e{\"value\": \"Gold\", \"translations\": [{\"languageCode\": \"sv\", \"name\": \"Guld\"}]}\u003c/code\u003e. Prefer a single \u003ccode\u003evalue\u003c/code\u003e; for multiple reusable values, consider \u003ccode\u003eMULTI_SELECT\u003c/code\u003e. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e: use \u003ccode\u003epropertyValueId\u003c/code\u003e. For \u003ccode\u003eMULTI_SELECT\u003c/code\u003e: use \u003ccode\u003epropertyValueIds\u003c/code\u003e.",
        "operationId": "setPropertyValue",
        "parameters": [
          {
            "name": "stockKeepingUnitId",
            "in": "path",
            "description": "The unique identifier of the product variant.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "propertyKeyId",
            "in": "path",
            "description": "The unique identifier of the property key.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetPropertyValueRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The property value was set successfully."
          }
        },
        "summary": "Set property value on variant",
        "tags": [
          "Product"
        ],
        "x-viskan-api-name": "Product variant property API",
        "x-viskan-error-code-invalid-presentation-type": "The property key has an unknown presentation type.",
        "x-viskan-error-code-invalid-request-fields": "The wrong request fields were populated for the presentation type.",
        "x-viskan-error-code-invalid-value-format": "The provided value does not match the expected format.",
        "x-viskan-error-code-language-not-found": "An unknown language code was provided.",
        "x-viskan-error-code-map-count-violation": "The number of values violates the min/max map count constraint.",
        "x-viskan-error-code-property-key-not-found": "The property key was not found.",
        "x-viskan-error-code-property-value-not-found": "The property value was not found or not linked to the key.",
        "x-viskan-error-code-variant-not-found": "The product variant was not found.",
        "x-viskan-scope": "viskan:product:update"
      }
    },
    "/warehouse-management/delivery-method/delivery-methods": {
      "get": {
        "description": "Gets all available delivery methods in the system.",
        "operationId": "getDeliveryMethods2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. More \u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeliveryMethodResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Find shipping methods",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Shipping method API",
        "x-viskan-scope": "viskan:shippingmethod:read"
      }
    },
    "/warehouse-management/purchase-order/purchase-orders": {
      "get": {
        "description": "Searches for purchase orders in the system.",
        "operationId": "search10",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. More \u003ca href\u003d\"../general-information/index.html#modifiedAfter\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "purchaseOrderId",
            "in": "query",
            "description": "An optional filter on one/many purchaseOrderId. For example purchaseOrderId\u003d123\u0026purchaseOrderId\u003d789",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "purchaseOrderNumber",
            "in": "query",
            "description": "An optional filter on one/many purchaseOrderNumber For example purchaseOrderNumber\u003dabc\u0026purchaseOrderNumber\u003dxyz",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters. More\n\u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter on current return status. For example status\u003dCREATED\u0026status\u003dDELIVERED.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "CANCELED",
                  "CREATED",
                  "DELIVERED",
                  "PART_DELIVERED",
                  "PLANNED"
                ]
              }
            }
          },
          {
            "name": "warehouseId",
            "in": "query",
            "description": "The ids of the warehouse . Mutually exclusive with warehouseNumber",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "warehouseNumber",
            "in": "query",
            "description": "The number of the warehouse we want purchase for. Mutually exclusive with warehouseId",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Find purchase orders",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Purchase order API",
        "x-viskan-scope": "viskan:purchaseorder:read"
      }
    },
    "/warehouse-management/purchase-order/purchase-orders/{purchaseOrderId}": {
      "patch": {
        "description": "Updates a specific purchase order.",
        "operationId": "update10",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "description": "The identifier of the purchase order to update.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderChanges"
              }
            }
          },
          "description": "The changes to apply."
        },
        "responses": {
          "204": {
            "description": "The purchase order was updated successfully."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "Update a purchase order",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Purchase order API",
        "x-viskan-scope": "viskan:purchaseorder:update"
      }
    },
    "/warehouse-management/stock-balance/reservations": {
      "post": {
        "description": "Creates new or updates existing reservations in the warehouse management system.",
        "operationId": "reserve",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "description": "The reservations to create or update.",
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ReservationRequest"
                }
              }
            }
          },
          "description": "The reservations to create or update."
        },
        "responses": {
          "204": {
            "description": "The reservations were successfully created or updated."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "Create/update reservations",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Stock balance API",
        "x-viskan-scope": "viskan:stockreservation:create"
      }
    },
    "/warehouse-management/stock-balance/stock-balances": {
      "get": {
        "description": "Searches for stock balances in the system.",
        "operationId": "search11",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "europeanArticleNumber",
            "in": "query",
            "description": "Filter on the European article number of stock keeping units.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "modifiedAfter",
            "in": "query",
            "description": "Filter on last modification date. Useful for getting delta-changes. More\n\u003ca href\u003d\"../general-information/index.html#modifiedAfter\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "priceLookUpNumber",
            "in": "query",
            "description": "Filter on the price look-up number of stock keeping units.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "priceLookupNumber",
            "in": "query",
            "description": "Filter on the price look-up number of stock keeping units. \u003cb\u003eDeprecated\u003c/b\u003e in favor of\n\u003ccode\u003epriceLookUpNumber\u003c/code\u003e due to a typo.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "priceLookupUnitNumber",
            "in": "query",
            "description": "Filter on the price look-up number of stock keeping units. \u003cb\u003eDeprecated\u003c/b\u003e in favor of\n\u003ccode\u003epriceLookUpNumber\u003c/code\u003e due to a typo.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. Not usable together with any of the filters. More\n\u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stockKeepingUnitId",
            "in": "query",
            "description": "Filter on the internal identifier of stock keeping units.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "warehouseId",
            "in": "query",
            "description": "Filter on warehouse by their internal number.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "warehouseNumber",
            "in": "query",
            "description": "Filter on the external number of warehouses.",
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockBalanceResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Find stock balances",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Stock balance API",
        "x-viskan-scope": "viskan:stockbalance:read"
      },
      "post": {
        "description": "Creates new or updates existing stock balances in the warehouse management system.",
        "operationId": "createOrUpdate2",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "description": "The stock balances to create or update.",
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/StockBalanceUpdate"
                }
              }
            }
          },
          "description": "The stock balances to create or update."
        },
        "responses": {
          "204": {
            "description": "The stock balances were successfully created or updated."
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body."
          }
        },
        "summary": "Create/update balances",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Stock balance API",
        "x-viskan-scope": "viskan:stockbalance:update"
      }
    },
    "/warehouse-management/stock-balance/stock-balances/_reserve": {
      "post": {
        "description": "Runs the order reservation routine for the given stock keeping units or whole products, recomputing reserved/not-reserved\nbalances against open order demand.\n\u003cp\u003e\nEach item identifies either a stockKeepingUnitId or a productId (which targets all of the product\u0027s stock keeping\nunits). An optional warehouseId may be given per item to limit the run to a single warehouse. Package (master) articles are\nnot supported.\n\u003c/p\u003e\n\u003cp\u003e\n\u003cb\u003eNote:\u003c/b\u003e This run does not re-divide order rows across warehouses. On installs with several active outdelivery warehouses per\ncountry, restocking one warehouse will not move order rows already assigned to another warehouse. It also does not trigger\nship-from-store processing.\n\u003c/p\u003e",
        "operationId": "runReservation",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skipWhenNothingToReserve",
            "in": "query",
            "description": "If \u003ccode\u003etrue\u003c/code\u003e, the run is skipped for products that have no reserved, incoming-reserved or\nnot-reserved balances. Useful for automated callers that run reservation frequently. Defaults to \u003ccode\u003efalse\u003c/code\u003e.",
            "schema": {
              "type": "boolean",
              "default": "false"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "description": "The stock keeping units or products to run reservation for.",
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ReservationRunRequest"
                }
              }
            }
          },
          "description": "The stock keeping units or products to run reservation for."
        },
        "responses": {
          "200": {
            "description": "The reservation run completed. The body indicates whether any reservation work was performed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReservationRunResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Run order reservation for stock keeping units",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Stock balance API",
        "x-viskan-scope": "viskan:stockreservation:create"
      }
    },
    "/warehouse-management/stock-location/stock-locations": {
      "get": {
        "description": "Searches for stock locations with optional filters, sorting, and pagination.",
        "operationId": "find_2",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "warehouseId",
            "in": "query",
            "description": "Filter by warehouse identifier.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "keyword",
            "in": "query",
            "description": "Keyword to search by description.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the found stock locations.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/StocklocationListItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Find stock locations",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Stock Location API",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-scope": "viskan:warehouse:read"
      }
    },
    "/warehouse-management/supplier/suppliers": {
      "get": {
        "description": "Gets all available suppliers in the system.",
        "operationId": "getSuppliers",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Find suppliers",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Supplier API",
        "x-viskan-scope": "viskan:supplier:read"
      }
    },
    "/warehouse-management/warehouse-v2/warehouses": {
      "get": {
        "description": "Searches for warehouses with optional filters, sorting, and pagination.",
        "operationId": "find",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The page number to retrieve. The first page is 1. Cannot be less than 1.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "The size of the pages to retrieve. The default is 10. Cannot be less than 1 and larger than 100.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "Filter by active status.",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ALL",
                "ACTIVE",
                "INACTIVE"
              ]
            }
          },
          {
            "name": "keyword",
            "in": "query",
            "description": "Keyword to search by name, number, or city.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the found warehouses.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WarehouseListItem"
                  }
                }
              }
            }
          }
        },
        "summary": "Find warehouses",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Warehouse API V2",
        "x-viskan-error-code-invalid-page": "The given page is invalid.",
        "x-viskan-error-code-invalid-page-size": "The given page size is invalid.",
        "x-viskan-scope": "viskan:warehouse:read"
      },
      "post": {
        "description": "Creates a new warehouse.",
        "operationId": "create",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WarehouseCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The warehouse was created successfully.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/WarehouseCreatedResponse"
                }
              }
            }
          }
        },
        "summary": "Create a warehouse",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Warehouse API V2",
        "x-viskan-error-code-warehouse-name-is-unavailable": "Warehouse name already exists.",
        "x-viskan-error-code-warehouse-number-is-unavailable": "Warehouse number already exists.",
        "x-viskan-scope": "viskan:warehouse:create"
      }
    },
    "/warehouse-management/warehouse-v2/warehouses/{warehouseId}": {
      "delete": {
        "description": "Deletes a warehouse by its unique identifier.",
        "operationId": "delete",
        "parameters": [
          {
            "name": "warehouseId",
            "in": "path",
            "description": "The unique identifier of the warehouse to delete.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The warehouse was deleted successfully."
          }
        },
        "summary": "Delete a warehouse",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Warehouse API V2",
        "x-viskan-error-code-warehouse-not-found": "Warehouse does not exist.",
        "x-viskan-scope": "viskan:warehouse:delete"
      },
      "get": {
        "description": "Get a warehouse by its unique identifier.",
        "operationId": "find_1",
        "parameters": [
          {
            "name": "warehouseId",
            "in": "path",
            "description": "The unique identifier of the warehouse.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the warehouse.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/WarehouseResponse"
                }
              }
            }
          }
        },
        "summary": "Get a warehouse",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Warehouse API V2",
        "x-viskan-error-code-warehouse-not-found": "Warehouse does not exist.",
        "x-viskan-scope": "viskan:warehouse:read"
      },
      "patch": {
        "description": "Update the details of a warehouse.",
        "operationId": "update",
        "parameters": [
          {
            "name": "warehouseId",
            "in": "path",
            "description": "The unique identifier of the warehouse to update.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WarehouseUpdateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The warehouse was updated successfully."
          }
        },
        "summary": "Update a warehouse",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Warehouse API V2",
        "x-viskan-error-code-warehouse-name-is-unavailable": "Warehouse name already exists.",
        "x-viskan-error-code-warehouse-not-found": "Warehouse does not exist.",
        "x-viskan-error-code-warehouse-number-is-unavailable": "Warehouse number already exists.",
        "x-viskan-scope": "viskan:warehouse:update"
      }
    },
    "/warehouse-management/warehouse/warehouses": {
      "get": {
        "description": "Gets all available warehouses in the system.",
        "operationId": "getWarehouses",
        "parameters": [
          {
            "name": "X-Instance-Id",
            "in": "header",
            "description": "Identifies the merchant instance, required for all API calls.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Language",
            "in": "header",
            "description": "Specifies the requested language of a resource, for example \u003ccode\u003esv\u003c/code\u003e. If not present, this will default to a pre-configured language, most commonly \u003ccode\u003een\u003c/code\u003e. This header belongs to the legacy authentication. When authenticating with OAuth, use \u003ccode\u003eV-Language-Code\u003c/code\u003e instead.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The page to search for.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": "1"
            }
          },
          {
            "name": "resultsPerPage",
            "in": "query",
            "description": "The number of results per page. Must be a value between \u003ccode\u003e1\u003c/code\u003e and \u003ccode\u003e200\u003c/code\u003e.",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "searchId",
            "in": "query",
            "description": "The search ID to use for continued pages. More \u003ca href\u003d\"../general-information/index.html#searchId\"\u003edetails\u003c/a\u003e.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The search was successful.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WarehouseResult"
                }
              }
            }
          },
          "400": {
            "description": "Given input parameters are incorrect, a more descriptive error message is provided in the response body.",
            "content": {
              "application/json": {}
            }
          }
        },
        "summary": "Find warehouses",
        "tags": [
          "Warehouse management"
        ],
        "x-viskan-api-name": "Warehouse API",
        "x-viskan-scope": "viskan:warehouse:read"
      }
    },
    "/web-pages/draft/drafts": {
      "get": {
        "description": "Returns a list of drafts. Does not return any information about content of the draft.",
        "operationId": "findDrafts",
        "parameters": [
          {
            "name": "webStoreId",
            "in": "query",
            "description": "Identifier of the web store that the draft belongs to.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "A list of drafts.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DraftListResponse"
                  }
                }
              }
            }
          }
        },
        "summary": "Find drafts",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Draft API",
        "x-viskan-scope": "viskan:draft:read"
      },
      "post": {
        "description": "Creates a draft. Does not create any content.",
        "operationId": "createDraft",
        "parameters": [
          {
            "name": "webStoreId",
            "in": "query",
            "description": "Identifier of the web store that the draft belongs to.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDraftRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The response contains the identifier of the newly created draft.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreateDraftResponse"
                }
              }
            }
          }
        },
        "summary": "Create draft",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Draft API",
        "x-viskan-error-code-web-pages.create-draft.draft-name-required": "Draft name is required.",
        "x-viskan-error-code-web-pages.create-draft.web-store-not-found": "Specified web store was not found.",
        "x-viskan-scope": "viskan:draft:create"
      }
    },
    "/web-pages/draft/drafts/{draftId}": {
      "delete": {
        "description": "Deletes a draft by ID.",
        "operationId": "deleteDraft",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The draft was successfully deleted."
          }
        },
        "summary": "Delete draft",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Draft API",
        "x-viskan-error-code-web-pages.delete-draft.draft-not-found": "The specified draft could not be found.",
        "x-viskan-scope": "viskan:draft:delete"
      },
      "get": {
        "description": "Retrieves a draft by ID alongside any changes that were made in this draft compared to the current publishment. If a variable is changed, then it is reflected as a section change. If a variable value is changed, then it is reflected as a change of page.",
        "operationId": "retrieveDraft",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The draft details and any changes compared to the current publishment.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/DraftItemResponse"
                }
              }
            }
          }
        },
        "summary": "Retrieve draft",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Draft API",
        "x-viskan-error-code-web-pages.category-tree.cyclic-dependency": "Cyclic dependency detected in category tree.",
        "x-viskan-error-code-web-pages.retrieve-draft.draft-not-found": "The specified draft could not be found.",
        "x-viskan-error-code-web-pages.retrieve-draft.layout-not-found": "Layout not found.",
        "x-viskan-error-code-web-pages.retrieve-draft.section-not-found": "Section not found.",
        "x-viskan-error-code-web-pages.retrieve-draft.start-page-category-not-found": "Start page category for the web store was not found.",
        "x-viskan-error-code-web-pages.retrieve-draft.web-store-not-found": "Web store specified on draft was not found.",
        "x-viskan-scope": "viskan:draft:read"
      },
      "patch": {
        "description": "Updates a draft by ID.",
        "operationId": "updateDraft",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDraftRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The draft was updated successfully."
          }
        },
        "summary": "Update draft",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Draft API",
        "x-viskan-error-code-web-pages.update-draft.draft-name-blank": "Draft name cannot be blank.",
        "x-viskan-error-code-web-pages.update-draft.draft-not-found": "The specified draft could not be found.",
        "x-viskan-scope": "viskan:draft:update"
      }
    },
    "/web-pages/draft/drafts/{draftId}/_publish": {
      "post": {
        "description": "Publishes a draft. Overwrites the sent content of a category using draft tables, and deletes the row from the Draft as well as associated Draft tables.",
        "operationId": "publishDraft",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The draft was successfully published and the associated draft entries were removed."
          }
        },
        "summary": "Publish draft",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Draft API",
        "x-viskan-error-code-web-pages.category-tree.cyclic-dependency": "Cyclic dependency detected in category tree.",
        "x-viskan-error-code-web-pages.publish-draft.category-tree-read-json-failed": "Failed to read category tree from JSON.",
        "x-viskan-error-code-web-pages.publish-draft.category-tree-write-json-failed": "Failed to convert category tree to JSON.",
        "x-viskan-error-code-web-pages.publish-draft.draft-json-failed": "Failed to convert draft to JSON.",
        "x-viskan-error-code-web-pages.publish-draft.draft-not-found": "The specified draft could not be found.",
        "x-viskan-error-code-web-pages.publish-draft.hierarchy-too-deep": "Category hierarchy exceeds maximum depth of 9 levels.",
        "x-viskan-error-code-web-pages.publish-draft.start-page-category-not-found": "Start page category for the web store was not found.",
        "x-viskan-error-code-web-pages.publish-draft.web-store-not-found": "Specified web store was not found.",
        "x-viskan-error-code-web-pages.web-store.country-code-invalid": "Country code is blank.",
        "x-viskan-error-code-web-pages.web-store.language-code-invalid": "Language code is invalid.",
        "x-viskan-error-code-web-store.store-setting.country-code-invalid": "Country code is blank.",
        "x-viskan-error-code-web-store.store-setting.language-code-invalid": "Language code is invalid.",
        "x-viskan-scope": "viskan:draft:publish"
      }
    },
    "/web-pages/draft/drafts/{draftId}/categories": {
      "post": {
        "description": "Creates a category.",
        "operationId": "createCategory",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCategoryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Category successfully created.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreateCategoryResponse"
                }
              }
            }
          }
        },
        "summary": "Create category",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Category API",
        "x-viskan-error-code-web-pages.create-category.category-name-required": "Category name is required.",
        "x-viskan-error-code-web-pages.create-category.category-name-too-long": "Category name cannot exceed 30 characters.",
        "x-viskan-error-code-web-pages.create-category.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.create-category.fallback-category-not-found": "Protection fallback category not found in the category tree.",
        "x-viskan-error-code-web-pages.create-category.fallback-category-protection-level-invalid": "Protection fallback category cannot be set if protection level is NONE.",
        "x-viskan-error-code-web-pages.create-category.parent-category-not-found": "Parent category with specified ID was not found in the category tree.",
        "x-viskan-error-code-web-pages.create-category.parent-category-removed": "Parent category has been removed.",
        "x-viskan-error-code-web-pages.create-category.sibling-category-does-not-have-same-parent": "Sibling category with specified ID does not have the same parent category as the new category being created.",
        "x-viskan-error-code-web-pages.create-category.sibling-category-not-found": "Sibling category with specified ID was not found in the category tree.",
        "x-viskan-error-code-web-pages.create-category.sibling-category-removed": "Sibling category has been removed.",
        "x-viskan-scope": "viskan:draft:create"
      }
    },
    "/web-pages/draft/drafts/{draftId}/categories/{categoryId}": {
      "delete": {
        "description": "Deletes a category by ID.",
        "operationId": "deleteCategory",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "categoryId",
            "in": "path",
            "description": "Identifier of the category. Categories form a hierarchical tree structure that organizes pages.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "Category successfully deleted."
          }
        },
        "summary": "Delete category",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Category API",
        "x-viskan-error-code-web-pages.delete-category.category-in-use": "Category that is used by a page cannot be deleted.",
        "x-viskan-error-code-web-pages.delete-category.category-not-found": "Category not found.",
        "x-viskan-error-code-web-pages.delete-category.draft-not-found": "Draft not found.",
        "x-viskan-scope": "viskan:draft:delete"
      },
      "get": {
        "description": "Retrieves a category by ID.",
        "operationId": "retrieveCategory",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "categoryId",
            "in": "path",
            "description": "Identifier of the category. Categories form a hierarchical tree structure that organizes pages.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "Category successfully retrieved.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CategoryResponse"
                }
              }
            }
          }
        },
        "summary": "Retrieve category",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Category API",
        "x-viskan-error-code-web-pages.retrieve-category.category-not-found": "Could not find the category by ID.",
        "x-viskan-error-code-web-pages.retrieve-category.draft-not-found": "Draft not found.",
        "x-viskan-scope": "viskan:draft:read"
      },
      "patch": {
        "description": "Updates a category by ID.",
        "operationId": "updateCategory",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "categoryId",
            "in": "path",
            "description": "Identifier of the category. Categories form a hierarchical tree structure that organizes pages.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCategoryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Category successfully updated."
          }
        },
        "summary": "Update category",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Category API",
        "x-viskan-error-code-web-pages.update-category.cannot-remove-system-category": "A system category cannot be removed.",
        "x-viskan-error-code-web-pages.update-category.category-for-removal-not-found": "Category for removal not found.",
        "x-viskan-error-code-web-pages.update-category.category-in-use": "Category that is used by a page cannot be removed.",
        "x-viskan-error-code-web-pages.update-category.category-name-blank": "Category name cannot be blank.",
        "x-viskan-error-code-web-pages.update-category.category-name-too-long": "Category name cannot exceed 30 characters.",
        "x-viskan-error-code-web-pages.update-category.category-not-found": "Category not found.",
        "x-viskan-error-code-web-pages.update-category.circular-dependency": "Circular dependency detected.",
        "x-viskan-error-code-web-pages.update-category.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.update-category.fallback-category-circular-dependency": "Protection fallback category cannot be the same as the category being updated.",
        "x-viskan-error-code-web-pages.update-category.fallback-category-not-found": "Protection fallback category not found in the category tree.",
        "x-viskan-error-code-web-pages.update-category.fallback-category-without-protection": "Cannot set a protection fallback category when the protection level is NONE.",
        "x-viskan-error-code-web-pages.update-category.invalid-uuid": "The provided string is not a valid UUID.",
        "x-viskan-error-code-web-pages.update-category.own-sibling": "A category cannot be its own sibling.",
        "x-viskan-error-code-web-pages.update-category.parent-category-not-found": "Parent category not found.",
        "x-viskan-error-code-web-pages.update-category.parent-category-removed": "Parent category has been removed.",
        "x-viskan-error-code-web-pages.update-category.protection-none-with-existing-fallback": "Cannot set protection level to NONE when a protection fallback category is assigned.",
        "x-viskan-error-code-web-pages.update-category.sibling-category-does-not-have-same-parent": "Sibling category does not have the same parent.",
        "x-viskan-error-code-web-pages.update-category.sibling-category-not-found": "Sibling category not found.",
        "x-viskan-error-code-web-pages.update-category.sibling-category-removed": "Sibling category has been removed.",
        "x-viskan-scope": "viskan:draft:update"
      }
    },
    "/web-pages/draft/drafts/{draftId}/layouts": {
      "get": {
        "description": "Returns a list of layouts in a draft.",
        "operationId": "findLayouts",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "A list of layouts.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LayoutListResponse"
                  }
                }
              }
            }
          }
        },
        "summary": "Find layouts",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Layout API",
        "x-viskan-error-code-web-pages.list-layouts.draft-not-found": "Draft not found.",
        "x-viskan-scope": "viskan:draft:read"
      },
      "post": {
        "description": "Creates a layout. Optionally, assigns sections to the created layout.",
        "operationId": "createLayout",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLayoutRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The layout was successfully created.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreateLayoutResponse"
                }
              }
            }
          }
        },
        "summary": "Create layout",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Layout API",
        "x-viskan-error-code-web-pages.create-layout.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.create-layout.layout-name-required": "Layout name is required.",
        "x-viskan-error-code-web-pages.create-layout.layout-type-required": "Layout type is required.",
        "x-viskan-error-code-web-pages.create-layout.section-id-required": "Section ID is required.",
        "x-viskan-error-code-web-pages.create-layout.section-not-found": "Could not find the specified section by ID.",
        "x-viskan-scope": "viskan:draft:create"
      }
    },
    "/web-pages/draft/drafts/{draftId}/layouts/{layoutId}": {
      "delete": {
        "description": "Deletes a layout by ID.",
        "operationId": "deleteLayout",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "layoutId",
            "in": "path",
            "description": "Identifier of the layout. A layout defines the structure of a page by specifying which sections are included.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The layout was successfully deleted."
          }
        },
        "summary": "Delete layout",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Layout API",
        "x-viskan-error-code-web-pages.delete-layout.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.delete-layout.layout-in-use": "Layout that is used within a page cannot be deleted.",
        "x-viskan-error-code-web-pages.delete-layout.layout-not-found": "Layout not found.",
        "x-viskan-scope": "viskan:draft:delete"
      },
      "get": {
        "description": "Gets information about layout including sections and variables.",
        "operationId": "retrieveLayout",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "layoutId",
            "in": "path",
            "description": "Identifier of the layout. A layout defines the structure of a page by specifying which sections are included.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The layout information including sections and variables.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/LayoutItemResponse"
                }
              }
            }
          }
        },
        "summary": "Get layout",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Layout API",
        "x-viskan-error-code-web-pages.retrieve-layout.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.retrieve-layout.layout-not-found": "Could not find the layout by ID.",
        "x-viskan-scope": "viskan:draft:read"
      },
      "patch": {
        "description": "Updates a layout by ID.",
        "operationId": "updateLayout",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "layoutId",
            "in": "path",
            "description": "Identifier of the layout. A layout defines the structure of a page by specifying which sections are included.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLayoutRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The layout was updated successfully."
          }
        },
        "summary": "Update layout",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Layout API",
        "x-viskan-error-code-web-pages.update-layout.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.update-layout.duplicate-layout-section-ids": "Duplicate layout section IDs found.",
        "x-viskan-error-code-web-pages.update-layout.layout-for-removal-not-found": "Layout for removal not found.",
        "x-viskan-error-code-web-pages.update-layout.layout-in-use": "Layout that is used within a page cannot be removed.",
        "x-viskan-error-code-web-pages.update-layout.layout-name-blank": "Layout name cannot be blank.",
        "x-viskan-error-code-web-pages.update-layout.layout-not-found": "Layout not found.",
        "x-viskan-error-code-web-pages.update-layout.layout-section-is-for-another-section": "Layout section belongs to a different section.",
        "x-viskan-error-code-web-pages.update-layout.section-id-required": "Section ID is required.",
        "x-viskan-error-code-web-pages.update-layout.section-not-found": "Section not found.",
        "x-viskan-scope": "viskan:draft:update"
      }
    },
    "/web-pages/draft/drafts/{draftId}/locales": {
      "get": {
        "description": "Returns a list of locales in a draft.",
        "operationId": "findLocales",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "A list of locales.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LocaleListResponse"
                  }
                }
              }
            }
          }
        },
        "summary": "Find locales",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Locale API",
        "x-viskan-error-code-web-pages.list-locales.draft-not-found": "Draft not found.",
        "x-viskan-scope": "viskan:draft:read"
      }
    },
    "/web-pages/draft/drafts/{draftId}/locales/{contentLocaleId}": {
      "delete": {
        "description": "Deletes a locale by ID.",
        "operationId": "deleteLocale",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "contentLocaleId",
            "in": "path",
            "description": "Identifier of the content locale. A content locale represents a language and country combination for content translation.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The locale was successfully deleted."
          }
        },
        "summary": "Delete locale",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Locale API",
        "x-viskan-error-code-web-pages.delete-locale.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.delete-locale.locale-not-found": "Locale not found.",
        "x-viskan-scope": "viskan:draft:delete"
      },
      "get": {
        "description": "Gets information about a locale including country settings.",
        "operationId": "retrieveLocale",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "contentLocaleId",
            "in": "path",
            "description": "Identifier of the content locale. A content locale represents a language and country combination for content translation.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The locale information including country settings.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/LocaleItemResponse"
                }
              }
            }
          }
        },
        "summary": "Get locale",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Locale API",
        "x-viskan-error-code-web-pages.retrieve-locale.draft-not-found": "Could not find the draft by ID.",
        "x-viskan-error-code-web-pages.retrieve-locale.locale-not-found": "Could not find the locale by ID.",
        "x-viskan-scope": "viskan:draft:read"
      },
      "patch": {
        "description": "Updates a locale by ID.",
        "operationId": "updateLocale",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "contentLocaleId",
            "in": "path",
            "description": "Identifier of the content locale. A content locale represents a language and country combination for content translation.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateLocaleRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The locale was updated successfully."
          }
        },
        "summary": "Update locale",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Locale API",
        "x-viskan-error-code-web-pages.update-locale.country-code-required": "Country code is required.",
        "x-viskan-error-code-web-pages.update-locale.country-codes-do-not-match": "Country codes do not match the published locale.",
        "x-viskan-error-code-web-pages.update-locale.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.update-locale.enabled-required": "Enabled is required.",
        "x-viskan-error-code-web-pages.update-locale.locale-not-found": "Locale not found.",
        "x-viskan-scope": "viskan:draft:update"
      }
    },
    "/web-pages/draft/drafts/{draftId}/pages": {
      "post": {
        "description": "Creates a page.",
        "operationId": "createPage",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePageRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The page was successfully created.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreatePageResponse"
                }
              }
            }
          }
        },
        "summary": "Create page",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Page API",
        "x-viskan-error-code-web-pages.create-page.category-id-required": "Category ID is required.",
        "x-viskan-error-code-web-pages.create-page.category-not-found": "Could not find the category by ID.",
        "x-viskan-error-code-web-pages.create-page.country-code-required": "Country code is required.",
        "x-viskan-error-code-web-pages.create-page.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.create-page.language-code-invalid": "Language is invalid.",
        "x-viskan-error-code-web-pages.create-page.language-code-required": "Language code is required.",
        "x-viskan-error-code-web-pages.create-page.layout-id-required": "Layout ID is required.",
        "x-viskan-error-code-web-pages.create-page.layout-not-found": "Could not find the layout by ID.",
        "x-viskan-error-code-web-pages.create-page.layout-section-id-required": "Layout section ID is required.",
        "x-viskan-error-code-web-pages.create-page.locale-not-found": "Could not find the locale by ID or by country code and language code combination.",
        "x-viskan-error-code-web-pages.create-page.page-for-category-already-exists": "A page with specified category already exists for selected country code and language code.",
        "x-viskan-error-code-web-pages.create-page.page-for-path-already-exists": "A page with specified path already exists for selected country code and language code.",
        "x-viskan-error-code-web-pages.create-page.path-invalid": "Web-page path must start with a slash (/) and should not end with a slash.",
        "x-viskan-error-code-web-pages.create-page.section-is-not-part-of-the-layout": "The layout section was not found in the current page\u0027s layout.",
        "x-viskan-error-code-web-pages.create-page.title-required": "Title is required.",
        "x-viskan-error-code-web-pages.create-page.variable-id-required": "Variable ID is required.",
        "x-viskan-error-code-web-pages.create-page.variable-is-not-part-of-the-section-variables": "The variable was not found in the requested layout section.",
        "x-viskan-error-code-web-pages.create-page.variable-value-required": "Variable value is required.",
        "x-viskan-error-code-web-pages.create-page.web-store-not-found": "Could not find the web-store by ID.",
        "x-viskan-error-code-web-pages.create-page.wrong-locale": "Provide either contentLocaleId, or both languageCode and countryCode (exclusively).",
        "x-viskan-scope": "viskan:draft:create"
      }
    },
    "/web-pages/draft/drafts/{draftId}/pages/_search": {
      "post": {
        "description": "Gets information about a page including variable values.",
        "operationId": "pageSearch",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "countryCode",
            "in": "query",
            "description": "Country code of the page. This or contentLocaleId must be provided.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "languageCode",
            "in": "query",
            "description": "Language code (in ISO 639-1 format) of the page. This or contentLocaleId must be provided.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contentLocaleId",
            "in": "query",
            "description": "The content locale of the page. This or countryCode and languageCode combination must be provided.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "categoryId",
            "in": "query",
            "description": "ID of a category. This or path must be provided.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "path",
            "in": "query",
            "description": "URL path for this page. This or categoryId must be provided.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page and its variable values.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageSearchResponse"
                }
              }
            }
          }
        },
        "summary": "Search pages",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Page API",
        "x-viskan-error-code-web-pages.search-page.category-id-and-path-are-mutually-exclusive": "Category ID and path are mutually exclusive.",
        "x-viskan-error-code-web-pages.search-page.category-id-or-path-required": "Either category ID or path must be provided.",
        "x-viskan-error-code-web-pages.search-page.category-not-found": "Could not find the category by ID.",
        "x-viskan-error-code-web-pages.search-page.content-locale-id-is-exclusive-with-country-code-and-language-code": "Content locale ID is exclusive with country code and language code.",
        "x-viskan-error-code-web-pages.search-page.content-locale-id-or-country-code-and-language-code-required": "Either content locale ID, or both country code and language code must be provided.",
        "x-viskan-error-code-web-pages.search-page.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.search-page.language-code-invalid": "Specified language code is invalid.",
        "x-viskan-error-code-web-pages.search-page.locale-not-found": "Could not find the locale by ID or by country code and language code combination.",
        "x-viskan-error-code-web-pages.search-page.page-not-found": "Could not find the page.",
        "x-viskan-error-code-web-pages.search-page.web-store-not-found": "Web store not found.",
        "x-viskan-scope": "viskan:draft:read"
      }
    },
    "/web-pages/draft/drafts/{draftId}/pages/{pageId}": {
      "delete": {
        "description": "Deletes a page by ID.",
        "operationId": "deletePage",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "pageId",
            "in": "path",
            "description": "Identifier of the page. A page represents a web page within a category and contains a layout, sections, and content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The page was successfully deleted."
          }
        },
        "summary": "Delete page",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Page API",
        "x-viskan-error-code-web-pages.delete-page.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.delete-page.page-not-found": "Page not found.",
        "x-viskan-scope": "viskan:draft:delete"
      },
      "get": {
        "description": "Retrieves a page by ID.",
        "operationId": "retrievePage",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "pageId",
            "in": "path",
            "description": "Identifier of the page. A page represents a web page within a category and contains a layout, sections, and content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The page details are successfully retrieved.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageResponse"
                }
              }
            }
          }
        },
        "summary": "Get page",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Page API",
        "x-viskan-error-code-web-pages.retrieve-page.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.retrieve-page.layout-not-found": "Could not find the layout by ID.",
        "x-viskan-error-code-web-pages.retrieve-page.page-not-found": "Could not find the page by ID.",
        "x-viskan-scope": "viskan:draft:read"
      },
      "patch": {
        "description": "Updates a page by ID.",
        "operationId": "updatePage",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "pageId",
            "in": "path",
            "description": "Identifier of the page. A page represents a web page within a category and contains a layout, sections, and content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePageRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The page was updated successfully."
          }
        },
        "summary": "Update page",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Page API",
        "x-viskan-error-code-web-pages.update-page.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.update-page.layout-not-found": "Layout not found.",
        "x-viskan-error-code-web-pages.update-page.layout-section-id-required": "Layout section ID is required.",
        "x-viskan-error-code-web-pages.update-page.page-for-path-already-exists": "A page for the given path already exists.",
        "x-viskan-error-code-web-pages.update-page.page-for-removal-not-found": "Page for removal not found.",
        "x-viskan-error-code-web-pages.update-page.page-not-found": "Page not found.",
        "x-viskan-error-code-web-pages.update-page.path-blank": "Path cannot be blank.",
        "x-viskan-error-code-web-pages.update-page.path-invalid": "Path is invalid.",
        "x-viskan-error-code-web-pages.update-page.section-is-not-part-of-the-layout": "Section is not part of the layout.",
        "x-viskan-error-code-web-pages.update-page.title-blank": "Title cannot be blank.",
        "x-viskan-error-code-web-pages.update-page.variable-id-required": "Variable ID is required.",
        "x-viskan-error-code-web-pages.update-page.variable-is-not-part-of-the-section-variables": "Variable is not part of the section variables.",
        "x-viskan-error-code-web-pages.update-page.variable-value-required": "Variable value is required.",
        "x-viskan-scope": "viskan:draft:update"
      }
    },
    "/web-pages/draft/drafts/{draftId}/products": {
      "get": {
        "description": "Lists all product-to-layout connections in the draft.",
        "operationId": "listProducts",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "A list of product-to-layout connections.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProductListResponse_2"
                  }
                }
              }
            }
          }
        },
        "summary": "List products",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-error-code-web-pages.list-products.draft-not-found": "Draft not found.",
        "x-viskan-scope": "viskan:draft:read"
      }
    },
    "/web-pages/draft/drafts/{draftId}/products/{productId}": {
      "delete": {
        "description": "Removes a product-to-layout connection from the draft.",
        "operationId": "deleteProduct",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "productId",
            "in": "path",
            "description": "Identifier of the product to remove.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The product-to-layout connection was successfully removed."
          }
        },
        "summary": "Delete product",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-error-code-web-pages.delete-product.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.delete-product.product-not-found": "Product-to-layout connection not found.",
        "x-viskan-scope": "viskan:draft:delete"
      },
      "get": {
        "description": "Retrieves a product-to-layout connection.",
        "operationId": "retrieveProduct",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "productId",
            "in": "path",
            "description": "Identifier of the product.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The product-to-layout connection details.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProductItemResponse"
                }
              }
            }
          }
        },
        "summary": "Retrieve product",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-error-code-web-pages.retrieve-product.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.retrieve-product.product-not-found": "Product-to-layout connection not found.",
        "x-viskan-scope": "viskan:draft:read"
      },
      "patch": {
        "description": "Updates a product-to-layout connection.",
        "operationId": "updateProduct",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "productId",
            "in": "path",
            "description": "Identifier of the product.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProductRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The product-to-layout connection was successfully updated."
          }
        },
        "summary": "Update product",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-error-code-web-pages.update-product.content-locale-id-required": "Content locale ID is required.",
        "x-viskan-error-code-web-pages.update-product.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.update-product.layout-not-found": "Could not find the layout by ID.",
        "x-viskan-error-code-web-pages.update-product.layout-section-id-required": "Layout section ID is required.",
        "x-viskan-error-code-web-pages.update-product.locale-not-found": "Could not find the content locale in this web-store.",
        "x-viskan-error-code-web-pages.update-product.product-for-removal-not-found": "Cannot remove product that is not published.",
        "x-viskan-error-code-web-pages.update-product.product-not-found": "Product-to-layout connection not found.",
        "x-viskan-error-code-web-pages.update-product.section-is-not-part-of-the-layout": "The layout section was not found in the specified layout.",
        "x-viskan-error-code-web-pages.update-product.variable-id-required": "Variable ID is required.",
        "x-viskan-error-code-web-pages.update-product.variable-is-not-part-of-the-section-variables": "The variable was not found in the requested layout section.",
        "x-viskan-error-code-web-pages.update-product.variable-value-required": "Variable value is required.",
        "x-viskan-scope": "viskan:draft:update"
      },
      "post": {
        "description": "Connects a product to a layout.",
        "operationId": "connectProduct",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "productId",
            "in": "path",
            "description": "Identifier of the product to connect to a layout.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConnectProductRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The product was successfully connected to the layout."
          }
        },
        "summary": "Connect product",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-error-code-web-pages.connect-product.content-locale-id-required": "Content locale ID is required.",
        "x-viskan-error-code-web-pages.connect-product.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.connect-product.layout-id-required": "Layout ID is required.",
        "x-viskan-error-code-web-pages.connect-product.layout-not-found": "Could not find the layout by ID.",
        "x-viskan-error-code-web-pages.connect-product.layout-section-id-required": "Layout section ID is required.",
        "x-viskan-error-code-web-pages.connect-product.locale-not-found": "Could not find the content locale in this web-store.",
        "x-viskan-error-code-web-pages.connect-product.product-already-connected": "Product is already connected to a layout.",
        "x-viskan-error-code-web-pages.connect-product.section-is-not-part-of-the-layout": "The layout section was not found in the specified layout.",
        "x-viskan-error-code-web-pages.connect-product.variable-id-required": "Variable ID is required.",
        "x-viskan-error-code-web-pages.connect-product.variable-is-not-part-of-the-section-variables": "The variable was not found in the requested layout section.",
        "x-viskan-error-code-web-pages.connect-product.variable-value-required": "Variable value is required.",
        "x-viskan-scope": "viskan:draft:create"
      }
    },
    "/web-pages/draft/drafts/{draftId}/sections": {
      "get": {
        "description": "Returns a list of sections in a draft.",
        "operationId": "findSections",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "A list of sections.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SectionListResponse"
                  }
                }
              }
            }
          }
        },
        "summary": "Find sections",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Section API",
        "x-viskan-error-code-web-pages.list-sections.draft-not-found": "Draft not found.",
        "x-viskan-scope": "viskan:draft:read"
      },
      "post": {
        "description": "Creates a section.",
        "operationId": "createSection",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSectionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The section was successfully created.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreateSectionResponse"
                }
              }
            }
          }
        },
        "summary": "Create section",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Section API",
        "x-viskan-error-code-web-pages.create-section.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.create-section.section-name-required": "Section name is required.",
        "x-viskan-error-code-web-pages.create-section.section-type-required": "Section type is required.",
        "x-viskan-error-code-web-pages.create-section.variable-id-required": "Variable ID is required.",
        "x-viskan-error-code-web-pages.create-section.variable-name-required": "Variable name is required.",
        "x-viskan-error-code-web-pages.create-section.variable-type-required": "Variable type is required.",
        "x-viskan-scope": "viskan:draft:create"
      }
    },
    "/web-pages/draft/drafts/{draftId}/sections/{sectionId}": {
      "delete": {
        "description": "Deletes a section by ID.",
        "operationId": "deleteSection",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "sectionId",
            "in": "path",
            "description": "Identifier of the section. A section is a reusable content block that can be included in layouts.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The section was successfully deleted."
          }
        },
        "summary": "Delete section",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Section API",
        "x-viskan-error-code-web-pages.delete-section.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.delete-section.section-in-use": "Section that is used within a layout cannot be deleted.",
        "x-viskan-error-code-web-pages.delete-section.section-not-found": "Section not found.",
        "x-viskan-scope": "viskan:draft:delete"
      },
      "get": {
        "description": "Retrieves a section by ID. Retrieves all variables alongside their values.",
        "operationId": "retrieveSection",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "sectionId",
            "in": "path",
            "description": "Identifier of the section. A section is a reusable content block that can be included in layouts.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The section details and associated variables.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/SectionItemResponse"
                }
              }
            }
          }
        },
        "summary": "Get section",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Section API",
        "x-viskan-error-code-web-pages.retrieve-section.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.retrieve-section.section-not-found": "Could not find the section by ID.",
        "x-viskan-scope": "viskan:draft:read"
      },
      "patch": {
        "description": "Updates a section by ID.",
        "operationId": "updateSection",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "sectionId",
            "in": "path",
            "description": "Identifier of the section. A section is a reusable content block that can be included in layouts.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSectionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The section was updated successfully."
          }
        },
        "summary": "Update section",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Section API",
        "x-viskan-error-code-web-pages.update-section.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.update-section.section-for-removal-not-found": "Section for removal not found.",
        "x-viskan-error-code-web-pages.update-section.section-in-use": "Section that is used within a layout cannot be removed.",
        "x-viskan-error-code-web-pages.update-section.section-name-missing": "Section name is missing.",
        "x-viskan-error-code-web-pages.update-section.section-not-found": "Section not found.",
        "x-viskan-error-code-web-pages.update-section.variable-id-required": "Variable ID is required.",
        "x-viskan-error-code-web-pages.update-section.variable-name-required": "Variable name is required.",
        "x-viskan-error-code-web-pages.update-section.variable-type-required": "Variable type is required.",
        "x-viskan-scope": "viskan:draft:update"
      }
    },
    "/web-pages/draft/drafts/{draftId}/settings": {
      "get": {
        "description": "Returns a list of store settings in a draft.",
        "operationId": "findStoreSettings",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "A list of store settings.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/StoreSettingListResponse"
                  }
                }
              }
            }
          }
        },
        "summary": "Find store settings",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Store Setting API",
        "x-viskan-error-code-web-pages.list-settings.draft-not-found": "Draft not found.",
        "x-viskan-scope": "viskan:draft:read"
      },
      "post": {
        "description": "Creates a store setting.",
        "operationId": "createStoreSetting",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateStoreSettingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Store setting successfully created.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreateStoreSettingResponse"
                }
              }
            }
          }
        },
        "summary": "Create store setting",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Store Setting API",
        "x-viskan-error-code-web-pages.create-setting.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.create-setting.language-code-invalid": "Language code is invalid.",
        "x-viskan-error-code-web-pages.create-setting.setting-already-exists": "Store setting with specified key, country code and language code already exists.",
        "x-viskan-error-code-web-pages.create-setting.setting-key-required": "Store setting key is required.",
        "x-viskan-error-code-web-pages.create-setting.setting-value-required": "Store setting value is required.",
        "x-viskan-scope": "viskan:draft:create"
      }
    },
    "/web-pages/draft/drafts/{draftId}/settings/{storeSettingId}": {
      "delete": {
        "description": "Deletes a store setting by ID.",
        "operationId": "deleteStoreSetting",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "storeSettingId",
            "in": "path",
            "description": "Identifier of the store setting. Store settings are key-value pairs that configure web store behavior.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "Store setting successfully deleted."
          }
        },
        "summary": "Delete store setting",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Store Setting API",
        "x-viskan-error-code-web-pages.delete-setting.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.delete-setting.setting-not-found": "Store setting not found.",
        "x-viskan-scope": "viskan:draft:delete"
      },
      "get": {
        "description": "Retrieves a store setting by ID.",
        "operationId": "retrieveStoreSetting",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "storeSettingId",
            "in": "path",
            "description": "Identifier of the store setting. Store settings are key-value pairs that configure web store behavior.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "Store setting successfully retrieved.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/StoreSettingItemResponse"
                }
              }
            }
          }
        },
        "summary": "Get store setting",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Store Setting API",
        "x-viskan-error-code-web-pages.retrieve-setting.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.retrieve-setting.setting-not-found": "Could not find the setting by ID.",
        "x-viskan-scope": "viskan:draft:read"
      },
      "patch": {
        "description": "Updates a store setting by ID.",
        "operationId": "updateStoreSetting",
        "parameters": [
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "storeSettingId",
            "in": "path",
            "description": "Identifier of the store setting. Store settings are key-value pairs that configure web store behavior.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateStoreSettingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Store setting successfully updated."
          }
        },
        "summary": "Update store setting",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Store Setting API",
        "x-viskan-error-code-web-pages.update-setting.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.update-setting.language-code-invalid": "Language code is invalid.",
        "x-viskan-error-code-web-pages.update-setting.setting-already-exists": "Store setting already exists.",
        "x-viskan-error-code-web-pages.update-setting.setting-for-removal-not-found": "Store setting for removal not found.",
        "x-viskan-error-code-web-pages.update-setting.setting-key-missing": "Store setting key is missing.",
        "x-viskan-error-code-web-pages.update-setting.setting-not-found": "Store setting not found.",
        "x-viskan-scope": "viskan:draft:update"
      }
    },
    "/web-pages/draft/drafts/{draftId}/trees/{categoryNodeId}": {
      "get": {
        "description": "Returns the hierarchical category tree from a specific category that will be seen as the root of the tree.",
        "operationId": "getTree",
        "parameters": [
          {
            "name": "countryCode",
            "in": "query",
            "description": "Country code to retrieve the categories\u0027 paths for. This or contentLocaleId must be provided.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "languageCode",
            "in": "query",
            "description": "Language code (in ISO 639-1 format) to retrieve the categories\u0027 paths for. This or contentLocaleId must be provided.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contentLocaleId",
            "in": "query",
            "description": "The content locale to retrieve the categories\u0027 paths for. This or countryCode and languageCode combination must be provided.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "draftId",
            "in": "path",
            "description": "Identifier of the draft. A draft is a workspace that holds unpublished changes to web store content.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "categoryNodeId",
            "in": "path",
            "description": "ID of a category node. Retrieves the tree starting from this category as root.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The hierarchical category tree is successfully retrieved.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CategoryTreeResponse"
                }
              }
            }
          }
        },
        "summary": "Get category tree",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Tree API",
        "x-viskan-error-code-web-pages.category-tree.cyclic-dependency": "Cyclic dependency detected in category tree.",
        "x-viskan-error-code-web-pages.get-tree.category-not-found": "Could not find the category by ID.",
        "x-viskan-error-code-web-pages.get-tree.content-locale-id-is-exclusive-with-country-code-and-language-code": "Content locale ID is exclusive with country code and language code.",
        "x-viskan-error-code-web-pages.get-tree.content-locale-not-found": "Could not find the locale by ID or by country code and language code combination.",
        "x-viskan-error-code-web-pages.get-tree.country-code-required": "Country code is required.",
        "x-viskan-error-code-web-pages.get-tree.draft-not-found": "Draft not found.",
        "x-viskan-error-code-web-pages.get-tree.language-code-invalid": "Specified language code is invalid.",
        "x-viskan-error-code-web-pages.get-tree.start-page-category-not-found": "Start page category for the web store was not found.",
        "x-viskan-error-code-web-pages.get-tree.web-store-not-found": "Web store specified on the selected draft was not found.",
        "x-viskan-scope": "viskan:draft:read"
      }
    },
    "/web-pages/page/layouts/{layoutId}": {
      "get": {
        "description": "Retrieves a layout by ID.",
        "operationId": "retrieveLayout",
        "parameters": [
          {
            "name": "layoutId",
            "in": "path",
            "description": "Unique identifier of the layout to retrieve.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The layout information including sections.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/LayoutResponse"
                }
              }
            }
          }
        },
        "summary": "Retrieve a layout",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Layout API",
        "x-viskan-error-code-web-pages.retrieve-layout.layout-not-found": "Could not find the layout by ID.",
        "x-viskan-scope": "viskan:webpage:read"
      }
    },
    "/web-pages/page/pages/_search": {
      "post": {
        "description": "Searches for a page and returns information about it including variable values, if the page is found.",
        "operationId": "pageSearch",
        "parameters": [
          {
            "name": "countryCode",
            "in": "query",
            "description": "Country code of the page. This or contentLocaleId must be provided.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "languageCode",
            "in": "query",
            "description": "Language code (in ISO 639-1 format) of the page. This or contentLocaleId must be provided.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contentLocaleId",
            "in": "query",
            "description": "The content locale of the page. This or countryCode and languageCode combination must be provided.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "categoryId",
            "in": "query",
            "description": "ID of a category. This or path must be provided.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "path",
            "in": "query",
            "description": "URL path for this page. This or categoryId must be provided.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page and its variable values.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageSearchResponse_2"
                }
              }
            }
          }
        },
        "summary": "Search for a page",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Page API",
        "x-viskan-error-code-web-pages.search-page.category-id-and-path-are-mutually-exclusive": "Category ID and path are mutually exclusive.",
        "x-viskan-error-code-web-pages.search-page.category-id-or-path-required": "Either category ID or path must be provided.",
        "x-viskan-error-code-web-pages.search-page.category-tree-not-found": "Could not find the category tree for the web store.",
        "x-viskan-error-code-web-pages.search-page.content-locale-id-is-exclusive-with-country-code-and-language-code": "Content locale ID is exclusive with country code and language code.",
        "x-viskan-error-code-web-pages.search-page.content-locale-id-or-country-code-and-language-code-required": "Either content locale ID, or both country code and language code must be provided.",
        "x-viskan-error-code-web-pages.search-page.language-code-invalid": "Specified language code is invalid.",
        "x-viskan-error-code-web-pages.search-page.locale-not-found": "Could not find the locale by ID or by country code and language code combination.",
        "x-viskan-error-code-web-pages.search-page.page-not-found": "Could not find the page by path.",
        "x-viskan-scope": "viskan:webpage:read"
      }
    },
    "/web-pages/page/products": {
      "get": {
        "description": "Lists all products with connections to unique layouts in a web store.",
        "operationId": "listProducts",
        "parameters": [
          {
            "name": "webStoreId",
            "in": "query",
            "description": "The web store to list products for.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The products and their variable values.",
            "content": {
              "*/*": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProductListResponse_3"
                  }
                }
              }
            }
          }
        },
        "summary": "List products with unique layout connections",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Product API",
        "x-viskan-scope": "viskan:webpage:read"
      }
    },
    "/web-pages/page/trees/{categoryNodeId}": {
      "get": {
        "description": "Returns the hierarchical category tree from a specific category that will be seen as the root of the tree.",
        "operationId": "getTree",
        "parameters": [
          {
            "name": "countryCode",
            "in": "query",
            "description": "Country code to retrieve the categories\u0027 paths for. This or contentLocaleId must be provided.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "languageCode",
            "in": "query",
            "description": "Language code (in ISO 639-1 format) to retrieve the categories\u0027 paths for. This or contentLocaleId must be provided.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contentLocaleId",
            "in": "query",
            "description": "The content locale to retrieve the categories\u0027 paths for. This or countryCode and languageCode combination must be provided.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          {
            "name": "categoryNodeId",
            "in": "path",
            "description": "ID of a category. Retrieves the tree starting from this category as root.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "The hierarchical category tree is successfully retrieved.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CategoryTreeResponse_2"
                }
              }
            }
          }
        },
        "summary": "Get a category tree",
        "tags": [
          "Web page"
        ],
        "x-viskan-api-name": "Category Tree API",
        "x-viskan-error-code-web-pages.get-tree.category-not-found": "Could not find the category by ID.",
        "x-viskan-error-code-web-pages.get-tree.category-tree-not-found": "Could not find the category tree for the web store.",
        "x-viskan-error-code-web-pages.get-tree.content-locale-id-is-exclusive-with-country-code-and-language-code": "Content locale ID was provided together with country code or language code, but they are mutually exclusive.",
        "x-viskan-error-code-web-pages.get-tree.content-locale-not-found": "Could not find the locale by ID or by country code and language code combination.",
        "x-viskan-error-code-web-pages.get-tree.country-code-required": "Country code is required.",
        "x-viskan-error-code-web-pages.get-tree.language-code-invalid": "Specified language code is invalid.",
        "x-viskan-scope": "viskan:webpage:read"
      }
    },
    "/web-store/store/stores": {
      "post": {
        "description": "Creates a new web store.",
        "operationId": "createStore",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateWebStoreRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "The response contains the information about the created web store.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CreateWebStoreResponse"
                }
              }
            }
          }
        },
        "summary": "Create web store",
        "tags": [
          "Web store"
        ],
        "x-viskan-api-name": "Web store API",
        "x-viskan-error-code-web-store.country-code-invalid": "Country code is blank.",
        "x-viskan-error-code-web-store.locale.language-code-invalid": "Language code is invalid.",
        "x-viskan-error-code-web-store.store-setting.country-code-invalid": "Country code is blank.",
        "x-viskan-error-code-web-store.store-setting.language-code-invalid": "Language code is invalid.",
        "x-viskan-scope": "viskan:webstore:create"
      }
    },
    "/web-store/store/stores/{webStoreId}": {
      "delete": {
        "description": "Deletes a web store.",
        "operationId": "deleteStore",
        "parameters": [
          {
            "name": "webStoreId",
            "in": "path",
            "description": "The internal identifier of the web store to delete.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The web store was deleted successfully."
          }
        },
        "summary": "Delete web store",
        "tags": [
          "Web store"
        ],
        "x-viskan-api-name": "Web store API",
        "x-viskan-error-code-web-store.delete.web-store-not-found": "Could not find web store with the given ID.",
        "x-viskan-scope": "viskan:webstore:delete"
      },
      "get": {
        "description": "Gets a web store by its internal identifier.",
        "operationId": "getStore",
        "parameters": [
          {
            "name": "webStoreId",
            "in": "path",
            "description": "The internal identifier of the web store to get.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The response contains the information about the web store.",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GetWebStoreResponse"
                }
              }
            }
          }
        },
        "summary": "Get web store",
        "tags": [
          "Web store"
        ],
        "x-viskan-api-name": "Web store API",
        "x-viskan-error-code-web-store.get.web-store-not-found": "Could not find web store with the given ID.",
        "x-viskan-scope": "viskan:webstore:read"
      },
      "patch": {
        "description": "Updates a web store.",
        "operationId": "updateStore",
        "parameters": [
          {
            "name": "webStoreId",
            "in": "path",
            "description": "The internal identifier of the web store to update.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWebStoreRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The web store was updated successfully."
          }
        },
        "summary": "Update web store",
        "tags": [
          "Web store"
        ],
        "x-viskan-api-name": "Web store API",
        "x-viskan-error-code-web-store.country-code-invalid": "Country code is blank.",
        "x-viskan-error-code-web-store.locale.language-code-invalid": "Language code is invalid.",
        "x-viskan-error-code-web-store.store-setting.country-code-invalid": "Country code is blank.",
        "x-viskan-error-code-web-store.store-setting.language-code-invalid": "Language code is invalid.",
        "x-viskan-error-code-web-store.update.web-store-not-found": "Could not find web store with the given ID.",
        "x-viskan-scope": "viskan:webstore:update"
      }
    }
  },
  "components": {
    "requestBodies": {
      "ArticleCategoryRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ArticleCategoryRequest"
            }
          },
          "application/xml": {
            "schema": {
              "$ref": "#/components/schemas/ArticleCategoryRequest"
            }
          }
        }
      },
      "RenewalRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/RenewalRequest"
            }
          },
          "application/xml": {
            "schema": {
              "$ref": "#/components/schemas/RenewalRequest"
            }
          }
        }
      }
    },
    "schemas": {
      "Address": {
        "type": "object",
        "title": "Address",
        "properties": {
          "addressLine1": {
            "example": "Norrmalmsgatan 12",
            "readOnly": false,
            "description": "The first address line, usually street address.",
            "type": "string"
          },
          "careOf": {
            "example": "Some person",
            "readOnly": false,
            "description": "The care of (c/o) extension of the address.",
            "type": "string"
          },
          "city": {
            "example": "Borås",
            "readOnly": false,
            "description": "The city of the address.",
            "type": "string"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the address, in ISO alpha-2 format, for example SE.",
            "type": "string"
          },
          "zipCode": {
            "example": "50437",
            "readOnly": false,
            "description": "The zipcode/postal code of the address.",
            "type": "string"
          }
        },
        "description": "Contains an Address"
      },
      "Address_address": {
        "type": "object",
        "title": "Address",
        "properties": {
          "addressLine1": {
            "example": "Druveforsvägen 8",
            "readOnly": false,
            "description": "The first address line, usually street address.",
            "type": "string"
          },
          "administrativeDivision": {
            "readOnly": false,
            "description": "The administrative division, such as region or state.",
            "type": "string",
            "example": "..."
          },
          "careOf": {
            "readOnly": false,
            "description": "The care of (c/o) extension of the address.",
            "type": "string",
            "example": "..."
          },
          "city": {
            "example": "BORÅS",
            "readOnly": false,
            "description": "The city of the address.",
            "type": "string"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the address, in ISO alpha-2 format, for example \u003ccode\u003eSE\u003c/code\u003e.",
            "type": "string"
          },
          "zipcode": {
            "example": "50454",
            "readOnly": false,
            "description": "The zipcode/postal code of the address.",
            "type": "string"
          }
        },
        "description": "Information about a geographical address."
      },
      "AddressType": {
        "type": "string",
        "title": "AddressType",
        "enum": [
          "INVOICE",
          "DELIVERY",
          "TEMPORARY",
          "VISITING"
        ],
        "description": "The addressType of an address."
      },
      "AddressWithGeolocation": {
        "type": "object",
        "title": "AddressWithGeolocation",
        "properties": {
          "addressLine1": {
            "example": "Druveforsvägen 8",
            "readOnly": false,
            "description": "The first address line, usually street address.",
            "type": "string"
          },
          "administrativeDivision": {
            "readOnly": false,
            "description": "The administrative division, such as region or state.",
            "type": "string",
            "example": "..."
          },
          "careOf": {
            "readOnly": false,
            "description": "The care of (c/o) extension of the address.",
            "type": "string",
            "example": "..."
          },
          "city": {
            "example": "BORÅS",
            "readOnly": false,
            "description": "The city of the address.",
            "type": "string"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the address, in ISO alpha-2 format, for example \u003ccode\u003eSE\u003c/code\u003e.",
            "type": "string"
          },
          "latitude": {
            "example": 57.7154924,
            "readOnly": false,
            "description": "The latitude coordinate.",
            "type": "number"
          },
          "longitude": {
            "example": 12.9363399,
            "readOnly": false,
            "description": "The longitude coordinate.",
            "type": "number"
          },
          "zipcode": {
            "example": "50454",
            "readOnly": false,
            "description": "The zipcode/postal code of the address.",
            "type": "string"
          }
        },
        "description": "Information about a geographical location, including absolute coordinates of the location. This is often used where distance calculations is\nnecessary."
      },
      "AddressWithName": {
        "type": "object",
        "title": "AddressWithName",
        "properties": {
          "addressLine1": {
            "example": "Druveforsvägen 8",
            "readOnly": false,
            "description": "The first address line, usually street address.",
            "type": "string"
          },
          "administrativeDivision": {
            "readOnly": false,
            "description": "The administrative division, such as region or state.",
            "type": "string",
            "example": "..."
          },
          "careOf": {
            "readOnly": false,
            "description": "The care of (c/o) extension of the address.",
            "type": "string",
            "example": "..."
          },
          "city": {
            "example": "BORÅS",
            "readOnly": false,
            "description": "The city of the address.",
            "type": "string"
          },
          "companyName": {
            "example": "Viskan System AB",
            "readOnly": false,
            "description": "The company name of the recipient. Mutually exclusive with \u003ccode\u003efirstName\u003c/code\u003e and \u003ccode\u003elastName\u003c/code\u003e.",
            "type": "string"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the address, in ISO alpha-2 format, for example \u003ccode\u003eSE\u003c/code\u003e.",
            "type": "string"
          },
          "firstName": {
            "readOnly": false,
            "description": "The first name of the recipient. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e.",
            "type": "string",
            "example": "..."
          },
          "lastName": {
            "readOnly": false,
            "description": "The last name of the recipient. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e.",
            "type": "string",
            "example": "..."
          },
          "zipcode": {
            "example": "50454",
            "readOnly": false,
            "description": "The zipcode/postal code of the address.",
            "type": "string"
          }
        },
        "description": "Information about a geographical location, including the name of the resident/tenant. This object is used often as delivery addresses, where you\nalso want to store the name of the delivery recipient."
      },
      "AggregationWithSize": {
        "type": "object",
        "title": "AggregationWithSize",
        "required": [
          "size"
        ],
        "properties": {
          "size": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": ""
      },
      "Aggregations": {
        "type": "object",
        "title": "Aggregations",
        "properties": {
          "attribute1": {
            "$ref": "#/components/schemas/Attribute1"
          },
          "attribute2": {
            "$ref": "#/components/schemas/Attribute2"
          },
          "attribute3": {
            "$ref": "#/components/schemas/Attribute3"
          },
          "brand": {
            "$ref": "#/components/schemas/Brand"
          },
          "category": {
            "$ref": "#/components/schemas/Category_aggregations"
          },
          "lowestPrice": {
            "$ref": "#/components/schemas/LowestPrice"
          },
          "property": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property"
            }
          }
        },
        "description": ""
      },
      "Aggregations_request": {
        "type": "object",
        "title": "Aggregations",
        "properties": {
          "attribute1": {
            "$ref": "#/components/schemas/AggregationWithSize"
          },
          "attribute1Group": {
            "$ref": "#/components/schemas/AggregationWithSize"
          },
          "attribute2": {
            "$ref": "#/components/schemas/AggregationWithSize"
          },
          "attribute2Group": {
            "$ref": "#/components/schemas/AggregationWithSize"
          },
          "attribute3": {
            "$ref": "#/components/schemas/AggregationWithSize"
          },
          "attribute3Group": {
            "$ref": "#/components/schemas/AggregationWithSize"
          },
          "brand": {
            "$ref": "#/components/schemas/AggregationWithSize"
          },
          "category": {
            "$ref": "#/components/schemas/AggregationWithSize"
          },
          "property": {
            "$ref": "#/components/schemas/AggregationWithSize"
          }
        },
        "description": ""
      },
      "ApplicationError": {
        "type": "object",
        "title": "ApplicationError",
        "properties": {
          "data": {
            "readOnly": false,
            "description": "A map with data associated with the error.",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "errorCode": {
            "readOnly": false,
            "description": "The code of the error.",
            "type": "string",
            "example": "..."
          },
          "errorMessage": {
            "readOnly": false,
            "description": "The message associated with the error.",
            "type": "string",
            "example": "..."
          },
          "infoMessages": {
            "readOnly": false,
            "description": "A list of potential informational messages associated with the error.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          }
        },
        "description": "Represents an application error object that contains information about a specific error thrown by the system."
      },
      "ApplicationErrors": {
        "type": "object",
        "title": "ApplicationErrors",
        "properties": {
          "errors": {
            "readOnly": false,
            "description": "The list of errors produced.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationError"
            }
          }
        },
        "description": "Defines a list of errors."
      },
      "AppliedSort": {
        "type": "object",
        "title": "AppliedSort",
        "required": [
          "descending"
        ],
        "properties": {
          "descending": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "resolvedSort": {
            "$ref": "#/components/schemas/Sort"
          },
          "source": {
            "$ref": "#/components/schemas/SortSource"
          }
        },
        "description": ""
      },
      "AppliedToPrices": {
        "type": "string",
        "title": "AppliedToPrices",
        "enum": [
          "ALL",
          "ORDINARY",
          "REDUCED"
        ],
        "description": "Defines how offers are applied to variants based on their price."
      },
      "AppliesTo": {
        "type": "string",
        "title": "AppliesTo",
        "enum": [
          "ALL_ROWS",
          "ALL_ROWS_EXCEPT_ADDONS"
        ],
        "description": "Defines what subscription rows the discount applies to."
      },
      "ArrivalMethod": {
        "type": "object",
        "title": "ArrivalMethod",
        "required": [
          "arrivalMethodId"
        ],
        "properties": {
          "arrivalMethodId": {
            "example": 1,
            "readOnly": false,
            "description": "The id of the arrival method.",
            "type": "integer",
            "format": "int32"
          },
          "arrivalMethodName": {
            "example": "Web",
            "readOnly": false,
            "description": "The arrival method name.",
            "type": "string"
          }
        },
        "description": "Arrival method"
      },
      "ArrivalMethod_CustomerAPI": {
        "type": "object",
        "title": "ArrivalMethod",
        "required": [
          "arrivalMethodId"
        ],
        "properties": {
          "arrivalMethodId": {
            "example": 1,
            "readOnly": false,
            "description": "The id of the arrival method.",
            "type": "integer",
            "format": "int32"
          },
          "arrivalMethodName": {
            "example": "Web",
            "readOnly": false,
            "description": "The arrival method name.",
            "type": "string"
          }
        },
        "description": "Arrival method"
      },
      "IArticleDetailRequest": {
        "type": "object",
        "title": "ArticleDetailRequest",
        "properties": {
          "params": {
            "$ref": "#/components/schemas/ArticleDetailRequestParams"
          }
        },
        "description": "Article detail request"
      },
      "ArticleDetailRequestParams": {
        "type": "object",
        "title": "ArticleDetailRequestParams",
        "required": [
          "art_id",
          "checkBalances",
          "checkMedia",
          "checkRelatedBalances",
          "checkRelatedMedia",
          "country_id",
          "daysAsBrandNew",
          "lang_id"
        ],
        "properties": {
          "art_id": {
            "example": 1001,
            "readOnly": false,
            "description": "Id of article to load. Mutual exclusive with \u003cb\u003elinkFriendlyName\u003c/b\u003e.",
            "type": "integer",
            "format": "int32"
          },
          "checkBalances": {
            "readOnly": false,
            "description": "Set to true to filter response regarding stock balance.",
            "type": "boolean",
            "example": true
          },
          "checkMedia": {
            "readOnly": false,
            "description": "Set to true to filter response regarding media existence.\nFilters both articles and variants.",
            "type": "boolean",
            "example": true
          },
          "checkRelatedBalances": {
            "readOnly": false,
            "description": "Set to true to filter response regarding related articles stock balance.",
            "type": "boolean",
            "example": true
          },
          "checkRelatedMedia": {
            "readOnly": false,
            "description": "Set to true to filter response regarding related articles media existence.\nFilters both articles and variants.",
            "type": "boolean",
            "example": true
          },
          "club_ids": {
            "example": [
              0,
              1
            ],
            "readOnly": false,
            "description": "Price list ids. Used to retrieve/filter/sort correct prices for response. The lowest price among price lists will be used. Is Mandatory.",
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "country_id": {
            "example": 0,
            "readOnly": false,
            "description": "Id of country. Used to retrieve/filter/sort correct stock balances, prices etc. for response. Is Mandatory.",
            "type": "integer",
            "format": "int32"
          },
          "daysAsBrandNew": {
            "example": 30,
            "readOnly": false,
            "description": "Set the number of days that an article is considered new since it\u0027s activation date.\nIs used when calculating response property brandNew. Default 30",
            "type": "integer",
            "format": "int32"
          },
          "lang_id": {
            "example": 1,
            "readOnly": false,
            "description": "Id of language. Used to retrieve/filter correct translations for response. Is Mandatory",
            "type": "integer",
            "format": "int32"
          },
          "linkFriendlyName": {
            "example": "rain-coat",
            "readOnly": false,
            "description": "Link friendly name of article to load. Mutual exclusive with \u003cb\u003eart_id\u003c/b\u003e.",
            "type": "string"
          },
          "mediaRowIds": {
            "example": [
              1010,
              1020
            ],
            "readOnly": false,
            "description": "Used in combination with \u003cb\u003echeckMedia/checkRelatedMedia\u003c/b\u003e to check specific media row ids.",
            "type": "array",
            "items": {
              "type": "integer"
            }
          }
        },
        "description": "Article detail request"
      },
      "IArticleListRequest": {
        "type": "object",
        "title": "ArticleListRequest",
        "properties": {
          "params": {
            "$ref": "#/components/schemas/ArticleListRequestParams"
          }
        },
        "description": ""
      },
      "ArticleListRequestParams": {
        "type": "object",
        "title": "ArticleListRequestParams",
        "required": [
          "categoryId",
          "checkBalances",
          "checkMedia",
          "country_id",
          "daysAsBrandNew",
          "from",
          "lang_id",
          "size"
        ],
        "properties": {
          "art_ids": {
            "example": {},
            "readOnly": false,
            "description": "List of article id\u0027s or a list of objects with article and attribute1 id\u0027s to load.\n\u003cpre\u003e\n  \"art_ids\": [1, 2, 3]\n  or\n  \"art_ids\": [\n    {\n      \"art_id\": 1,\n      \"attr1_id\", 10\n    },\n    {\n      \"art_id\": 2,\n      \"attr1_id\", 20\n    }\n  ]\n \u003c/pre\u003e",
            "type": "object"
          },
          "categoryId": {
            "example": 84,
            "readOnly": false,
            "description": "Category id to list articles for.",
            "type": "integer",
            "format": "int32"
          },
          "checkBalances": {
            "readOnly": false,
            "description": "Set to true to filter response regarding stock balance.",
            "type": "boolean",
            "example": true
          },
          "checkMedia": {
            "readOnly": false,
            "description": "Set to true to filter response regarding media existence.\nFilters both articles and variants.",
            "type": "boolean",
            "example": true
          },
          "club_ids": {
            "example": [
              0,
              1
            ],
            "readOnly": false,
            "description": "Price list ids. Used to retrieve/filter/sort correct prices for response. The lowest price among price lists will be used. Is Mandatory.",
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "country_id": {
            "example": 0,
            "readOnly": false,
            "description": "Id of country. Used to retrieve/filter/sort correct stock balances, prices etc. for response. Is Mandatory.",
            "type": "integer",
            "format": "int32"
          },
          "daysAsBrandNew": {
            "example": 30,
            "readOnly": false,
            "description": "Set the number of days that an article is considered new since it\u0027s activation date.\nIs used when calculating response property brandNew. Default 30",
            "type": "integer",
            "format": "int32"
          },
          "from": {
            "example": 0,
            "readOnly": false,
            "description": "Pagination starting from this number.",
            "type": "integer",
            "format": "int32"
          },
          "lang_id": {
            "example": 1,
            "readOnly": false,
            "description": "Id of language. Used to retrieve/filter correct translations for response. Is Mandatory",
            "type": "integer",
            "format": "int32"
          },
          "mediaRowIds": {
            "example": [
              1010,
              1020
            ],
            "readOnly": false,
            "description": "Used in combination with \u003cb\u003echeckMedia/checkRelatedMedia\u003c/b\u003e to check specific media row ids.",
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "searchQuery": {
            "example": "jacket",
            "readOnly": false,
            "description": "Search query to find matching articles for.",
            "type": "string"
          },
          "size": {
            "example": 20,
            "readOnly": false,
            "description": "Number of articles to return.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Article list request"
      },
      "ArticleSitemapParams": {
        "type": "object",
        "title": "ArticleSitemapParams",
        "required": [
          "checkBalances",
          "checkMedia",
          "country_id",
          "daysAsBrandNew",
          "lang_id"
        ],
        "properties": {
          "checkBalances": {
            "readOnly": false,
            "description": "Set to true to filter response regarding stock balance.",
            "type": "boolean",
            "example": true
          },
          "checkMedia": {
            "readOnly": false,
            "description": "Set to true to filter response regarding media existence.\nFilters both articles and variants.",
            "type": "boolean",
            "example": true
          },
          "club_ids": {
            "example": [
              0,
              1
            ],
            "readOnly": false,
            "description": "Price list ids. Used to retrieve/filter/sort correct prices for response. The lowest price among price lists will be used. Is Mandatory.",
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "country_id": {
            "example": 0,
            "readOnly": false,
            "description": "Id of country. Used to retrieve/filter/sort correct stock balances, prices etc. for response. Is Mandatory.",
            "type": "integer",
            "format": "int32"
          },
          "daysAsBrandNew": {
            "example": 30,
            "readOnly": false,
            "description": "Set the number of days that an article is considered new since it\u0027s activation date.\nIs used when calculating response property brandNew. Default 30",
            "type": "integer",
            "format": "int32"
          },
          "lang_id": {
            "example": 1,
            "readOnly": false,
            "description": "Id of language. Used to retrieve/filter correct translations for response. Is Mandatory",
            "type": "integer",
            "format": "int32"
          },
          "mediaRowIds": {
            "example": [
              1010,
              1020
            ],
            "readOnly": false,
            "description": "Used in combination with \u003cb\u003echeckMedia/checkRelatedMedia\u003c/b\u003e to check specific media row ids.",
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "topCategoryTag": {
            "example": "estore",
            "readOnly": false,
            "description": "Top category tag to use when selecting articles to include in sitemap",
            "type": "string"
          }
        },
        "description": "Article sitemap request"
      },
      "ICategorySitemapRequest": {
        "type": "object",
        "title": "ArticleSitemapRequest",
        "properties": {
          "params": {
            "$ref": "#/components/schemas/CategorySitemapParams"
          }
        },
        "description": ""
      },
      "IArticleSitemapRequest": {
        "type": "object",
        "title": "ArticleSitemapRequest",
        "properties": {
          "params": {
            "$ref": "#/components/schemas/ArticleSitemapParams"
          }
        },
        "description": ""
      },
      "ArticleStatus": {
        "type": "string",
        "title": "ArticleStatus",
        "enum": [
          "PLANNED",
          "PREVIEW",
          "FOR_SALE",
          "DISCONTINUED"
        ],
        "description": ""
      },
      "ArticleStatus_article": {
        "type": "string",
        "title": "ArticleStatus",
        "enum": [
          "NOT_YET_FOR_SALE",
          "PREVIEW",
          "FOR_SALE",
          "DISCONTINUED"
        ],
        "description": ""
      },
      "ArticleType": {
        "type": "string",
        "title": "ArticleType",
        "enum": [
          "NORMAL",
          "PARTIAL_PAYMENT",
          "MIX_MATCH",
          "LOOKBOOK",
          "FLEXIBLE_PACKAGES",
          "SUBSCRIPTION_MAIN_PRODUCT",
          "DUMMY_PRODUCT",
          "VOUCHER",
          "COPY_PRODUCT",
          "STATIC_PACKAGE",
          "MULTI_PACKAGE"
        ],
        "description": ""
      },
      "Attachment": {
        "type": "object",
        "title": "Attachment",
        "properties": {
          "base64": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "fileName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Holds data related to an attachment."
      },
      "Attribute1_AttributeAPI": {
        "type": "object",
        "title": "Attribute1",
        "properties": {
          "attribute1Code": {
            "example": "Burgundy",
            "readOnly": false,
            "description": "The code or name of this attribute1.",
            "type": "string"
          },
          "attribute1Number": {
            "example": "5",
            "readOnly": false,
            "description": "The identifier of this attribute1.",
            "type": "string"
          }
        },
        "description": "The attribute1, containing the details of the attribute1."
      },
      "Attribute1_response": {
        "type": "object",
        "title": "Attribute1",
        "required": [
          "attribute1Id"
        ],
        "properties": {
          "attribute1Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute1Name": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute1Number": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "colorGroup": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "rgbCode": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "Attribute1": {
        "type": "object",
        "title": "Attribute1",
        "properties": {
          "buckets": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attribute1Bucket"
            }
          }
        },
        "description": ""
      },
      "Attribute1Bucket": {
        "type": "object",
        "title": "Attribute1Bucket",
        "required": [
          "count"
        ],
        "properties": {
          "count": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "item": {
            "$ref": "#/components/schemas/Attribute1BucketItem"
          }
        },
        "description": ""
      },
      "Attribute1BucketItem": {
        "type": "object",
        "title": "Attribute1BucketItem",
        "required": [
          "attribute1Id",
          "group"
        ],
        "properties": {
          "attribute1Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute1Name": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute1Number": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute1Tag": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute1TagTranslation": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "group": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "rgbCode": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "Attribute1Change": {
        "type": "object",
        "title": "Attribute1Change",
        "properties": {
          "attribute1Number": {
            "example": "12",
            "readOnly": false,
            "description": "Identifier of the attribute to connect to the group.",
            "type": "string"
          }
        },
        "description": "Contains the changes"
      },
      "Attribute1Changes": {
        "type": "object",
        "title": "Attribute1Changes",
        "properties": {
          "attribute1Code": {
            "example": "Red",
            "readOnly": false,
            "description": "The code (or name) of the attribute.",
            "type": "string"
          },
          "attribute1Number": {
            "readOnly": false,
            "description": "The identifying value of attribute1.",
            "type": "string",
            "example": "..."
          },
          "sort": {
            "example": 10,
            "readOnly": false,
            "description": "The sort order of the attribute. Leave out to keep the existing sort order. The sort order is shared by all products that use the attribute.",
            "type": "integer",
            "format": "int32"
          },
          "translationsToAddOrUpdate": {
            "readOnly": false,
            "description": "Changes to attribute1 translations.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attribute1TranslationChanges"
            }
          }
        },
        "description": "Contains changes that applies to attribute1."
      },
      "Attribute1ForFeed": {
        "type": "object",
        "title": "Attribute1ForFeed",
        "required": [
          "attribute1Id",
          "groupId"
        ],
        "properties": {
          "attribute1Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute1Name": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute1Number": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "colorGroup": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "groupId": {
            "readOnly": false,
            "description": "The id of the attribute for the color group, -1 if it does not belong to a group",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "rgbCode": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "tag": {
            "readOnly": false,
            "description": "The tag of the attribute",
            "type": "string",
            "example": "..."
          },
          "tagTranslation": {
            "readOnly": false,
            "description": "The translated tag of the attribute",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Holds information about Attribute1 usually color"
      },
      "Attribute1Group": {
        "type": "object",
        "title": "Attribute1Group",
        "properties": {
          "attribute1Code": {
            "example": "Red",
            "readOnly": false,
            "description": "The code or name of this attribute1 group",
            "type": "string"
          },
          "attribute1Number": {
            "example": "10",
            "readOnly": false,
            "description": "The identifier / number of this attribute1 group.",
            "type": "string"
          },
          "attributes": {
            "readOnly": false,
            "description": "The attribute1s of this group",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attribute1_AttributeAPI"
            }
          },
          "createdAt": {
            "example": "2023-10-12T14:30:10.000+01:00",
            "readOnly": false,
            "description": "The date the group was created.",
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "example": "2023-10-12T14:36:43.412+01:00",
            "readOnly": false,
            "description": "The date the group was last modified.",
            "type": "string",
            "format": "date-time"
          }
        },
        "description": "The attribute1 group, containing the details of the group and the connected attributes."
      },
      "Attribute1GroupChanges": {
        "type": "object",
        "title": "Attribute1GroupChanges",
        "properties": {
          "attribute1GroupsToAddOrUpdate": {
            "readOnly": false,
            "description": "The groups to add or update",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attribute1GroupsToAddOrUpdate"
            }
          }
        },
        "description": "Contains the changes to be made to attribute1 groups."
      },
      "Attribute1GroupResult": {
        "type": "object",
        "title": "Attribute1GroupResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The groups in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attribute1Group"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a list of attribute1 groups."
      },
      "Attribute1GroupsToAddOrUpdate": {
        "type": "object",
        "title": "Attribute1GroupsToAddOrUpdate",
        "properties": {
          "attribute1Changes": {
            "readOnly": false,
            "description": "The attributes connected to this group. Needs to contain all connected attributes, since not passed in attribute will be removed from the group.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attribute1Change"
            }
          },
          "attribute1GroupNumber": {
            "example": "10",
            "readOnly": false,
            "description": "The identifier / number of the attribute1 group to update",
            "type": "string"
          }
        },
        "description": "Contains the changes to be made to an attribute1 group."
      },
      "Attribute1TranslationChanges": {
        "type": "object",
        "title": "Attribute1TranslationChanges",
        "properties": {
          "attribute1Code": {
            "example": "Röd",
            "readOnly": false,
            "description": "The translated attribute1Code.",
            "type": "string"
          },
          "languageCode": {
            "example": "sv",
            "readOnly": false,
            "description": "The language code of the translation.",
            "type": "string"
          }
        },
        "description": "Contains changes to attribute1 translations."
      },
      "Attribute2_response": {
        "type": "object",
        "title": "Attribute2",
        "required": [
          "attribute2Id"
        ],
        "properties": {
          "attribute2Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute2Name": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute2Number": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "Attribute2": {
        "type": "object",
        "title": "Attribute2",
        "properties": {
          "buckets": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attribute2Bucket"
            }
          }
        },
        "description": ""
      },
      "Attribute2Bucket": {
        "type": "object",
        "title": "Attribute2Bucket",
        "required": [
          "count"
        ],
        "properties": {
          "count": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "item": {
            "$ref": "#/components/schemas/Attribute2BucketItem"
          }
        },
        "description": ""
      },
      "Attribute2BucketItem": {
        "type": "object",
        "title": "Attribute2BucketItem",
        "required": [
          "attribute2Id",
          "group"
        ],
        "properties": {
          "attribute2Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute2Name": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute2Number": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute2Tag": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute2TagTranslation": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "group": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          }
        },
        "description": ""
      },
      "Attribute2Changes": {
        "type": "object",
        "title": "Attribute2Changes",
        "properties": {
          "attribute2Code": {
            "example": "Large",
            "readOnly": false,
            "description": "The code (or name) of the attribute.",
            "type": "string"
          },
          "attribute2Number": {
            "readOnly": false,
            "description": "The identifying value of attribute2.",
            "type": "string",
            "example": "..."
          },
          "sort": {
            "example": 10,
            "readOnly": false,
            "description": "The sort order of the attribute, e.g. to show sizes in the right order. Leave out to keep the existing sort order. The sort order is shared by all products that use the attribute.",
            "type": "integer",
            "format": "int32"
          },
          "translationsToAddOrUpdate": {
            "readOnly": false,
            "description": "Changes to attribute2 translations.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attribute2TranslationChanges"
            }
          }
        },
        "description": "Contains changes that applies to attribute2."
      },
      "Attribute2ForFeed": {
        "type": "object",
        "title": "Attribute2ForFeed",
        "required": [
          "attribute2Id",
          "groupId"
        ],
        "properties": {
          "attribute2Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute2Name": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute2Number": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "groupId": {
            "readOnly": false,
            "description": "The id of the attribute for the attribute 2 group, -1 if it does not belong to a group",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "tag": {
            "readOnly": false,
            "description": "The tag of the attribute",
            "type": "string",
            "example": "..."
          },
          "tagTranslation": {
            "readOnly": false,
            "description": "The translated tag of the attribute",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Holds information about Attribute2 usually size"
      },
      "Attribute2TranslationChanges": {
        "type": "object",
        "title": "Attribute2TranslationChanges",
        "properties": {
          "attribute2Code": {
            "example": "Stor",
            "readOnly": false,
            "description": "The translated attribute2Code.",
            "type": "string"
          },
          "languageCode": {
            "example": "sv",
            "readOnly": false,
            "description": "The language code of the translation.",
            "type": "string"
          }
        },
        "description": "Contains changes to attribute2 translations."
      },
      "Attribute3": {
        "type": "object",
        "title": "Attribute3",
        "properties": {
          "buckets": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attribute3Bucket"
            }
          }
        },
        "description": ""
      },
      "Attribute3_response": {
        "type": "object",
        "title": "Attribute3",
        "required": [
          "attribute3Id"
        ],
        "properties": {
          "attribute3Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute3Name": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute3Number": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "Attribute3Bucket": {
        "type": "object",
        "title": "Attribute3Bucket",
        "required": [
          "count"
        ],
        "properties": {
          "count": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "item": {
            "$ref": "#/components/schemas/Attribute3BucketItem"
          }
        },
        "description": ""
      },
      "Attribute3BucketItem": {
        "type": "object",
        "title": "Attribute3BucketItem",
        "required": [
          "attribute3Id",
          "group"
        ],
        "properties": {
          "attribute3Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute3Name": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute3Number": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute3Tag": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute3TagTranslation": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "group": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          }
        },
        "description": ""
      },
      "Attribute3Changes": {
        "type": "object",
        "title": "Attribute3Changes",
        "properties": {
          "attribute3Code": {
            "example": "Large",
            "readOnly": false,
            "description": "The code (or name) of the attribute.",
            "type": "string"
          },
          "attribute3Number": {
            "readOnly": false,
            "description": "The identifying value of attribute3.",
            "type": "string",
            "example": "..."
          },
          "sort": {
            "example": 10,
            "readOnly": false,
            "description": "The sort order of the attribute. Leave out to keep the existing sort order. The sort order is shared by all products that use the attribute.",
            "type": "integer",
            "format": "int32"
          },
          "translationsToAddOrUpdate": {
            "readOnly": false,
            "description": "Changes to attribute3 translations.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attribute3TranslationChanges"
            }
          }
        },
        "description": "Contains changes that applies to attribute3."
      },
      "Attribute3ForFeed": {
        "type": "object",
        "title": "Attribute3ForFeed",
        "required": [
          "attribute3Id",
          "groupId"
        ],
        "properties": {
          "attribute3Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute3Name": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute3Number": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "groupId": {
            "readOnly": false,
            "description": "The id of the attribute for attribute 3 group, -1 if it does not belong to a group",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "tag": {
            "readOnly": false,
            "description": "The tag of the attribute",
            "type": "string",
            "example": "..."
          },
          "tagTranslation": {
            "readOnly": false,
            "description": "The translated tag of the attribute",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Holds information about Attribute3"
      },
      "Attribute3TranslationChanges": {
        "type": "object",
        "title": "Attribute3TranslationChanges",
        "properties": {
          "attribute3Code": {
            "example": "Stor",
            "readOnly": false,
            "description": "The translated attribute3Code.",
            "type": "string"
          },
          "languageCode": {
            "example": "sv",
            "readOnly": false,
            "description": "The language code of the translation.",
            "type": "string"
          }
        },
        "description": "Contains changes to attribute3 translations."
      },
      "AuthenticationLevel": {
        "type": "string",
        "title": "AuthenticationLevel",
        "enum": [
          "LOW",
          "MEDIUM"
        ],
        "description": "A authentication level defines the authorization level of the user\n\u003cp\u003e\nThis is dependent on the authorization method the customer was retrieved by, if the customer used an identifier and password the clearance will be\nhigher than if matched solely on e.g email.\n\u003c/p\u003e"
      },
      "AuthenticationRequest": {
        "type": "object",
        "title": "AuthenticationRequest",
        "required": [
          "companyUser",
          "fetchLatestShopcart",
          "serviceProviderConfigId",
          "timeToLiveMinutes"
        ],
        "properties": {
          "categoryIds": {
            "readOnly": false,
            "description": "An optional list of category identifiers for customer authentication. If provided, the customer must have at least one associated category\nconnected to this parameter.",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "companyUser": {
            "readOnly": false,
            "description": "The customer is B2B company user or normal user .",
            "type": "boolean",
            "example": true
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2).",
            "type": "string"
          },
          "credentials": {
            "$ref": "#/components/schemas/Credentials"
          },
          "fetchLatestShopcart": {
            "readOnly": false,
            "description": "Whether or not we should fetch the customers latest modified shopcart.",
            "type": "boolean",
            "example": true
          },
          "serviceProviderConfigId": {
            "readOnly": false,
            "description": "The service provider configuration to use. This is needed if you are connecting to a third party customer club provider.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "shopcartId": {
            "readOnly": false,
            "description": "The identifier of the shopping cart to connect to the logged in user if the authentication was successful.",
            "type": "string",
            "example": "..."
          },
          "timeToLiveMinutes": {
            "example": 120,
            "readOnly": false,
            "description": "How long the authentication token should live, in minutes. The default value is \u003ccode\u003e120\u003c/code\u003e.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Defines a request to authenticate a customer to the \"My pages\" API by providing an identifier (for example an email address) and a password, among\nother things."
      },
      "BlockCode": {
        "type": "object",
        "title": "BlockCode",
        "required": [
          "blockCodeId"
        ],
        "properties": {
          "blockCodeDescription": {
            "example": "The customer did not pay the necessary invoices",
            "readOnly": false,
            "description": "The long block code description.",
            "type": "string"
          },
          "blockCodeId": {
            "example": 1,
            "readOnly": false,
            "description": "The block code id of the customer.",
            "type": "integer",
            "format": "int32"
          },
          "blockCodeName": {
            "example": "Did not pay invoices",
            "readOnly": false,
            "description": "The block code name.",
            "type": "string"
          },
          "blockCodeNumber": {
            "example": "01",
            "readOnly": false,
            "description": "The block code number of the customer.",
            "type": "string"
          }
        },
        "description": "Block Code"
      },
      "Brand": {
        "type": "object",
        "title": "Brand",
        "properties": {
          "buckets": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BrandBucket"
            }
          }
        },
        "description": ""
      },
      "Brand_response": {
        "type": "object",
        "title": "Brand",
        "required": [
          "brandId"
        ],
        "properties": {
          "brandId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "brandName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "category": {
            "$ref": "#/components/schemas/BrandCategory"
          },
          "media": {
            "$ref": "#/components/schemas/BrandMedia"
          }
        },
        "description": ""
      },
      "BrandBucket": {
        "type": "object",
        "title": "BrandBucket",
        "required": [
          "count"
        ],
        "properties": {
          "count": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "item": {
            "$ref": "#/components/schemas/BrandBucketItem"
          }
        },
        "description": ""
      },
      "BrandBucketItem": {
        "type": "object",
        "title": "BrandBucketItem",
        "required": [
          "brandId"
        ],
        "properties": {
          "brandId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "brandName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "brandTag": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "brandTagTranslation": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "BrandCategory": {
        "type": "object",
        "title": "BrandCategory",
        "properties": {
          "linkFriendlyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "BrandForFeed": {
        "type": "object",
        "title": "BrandForFeed",
        "required": [
          "brandId"
        ],
        "properties": {
          "brandId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "brandName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "category": {
            "$ref": "#/components/schemas/BrandCategory"
          },
          "media": {
            "$ref": "#/components/schemas/BrandMedia"
          },
          "tag": {
            "readOnly": false,
            "description": "The tag of the brand",
            "type": "string",
            "example": "..."
          },
          "tagTranslation": {
            "readOnly": false,
            "description": "The translated tag of the brand",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Holds information about the brand of a product"
      },
      "BrandMedia": {
        "type": "object",
        "title": "BrandMedia",
        "properties": {
          "dimensions": {
            "$ref": "#/components/schemas/Dimensions"
          },
          "fileName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "Campaign": {
        "type": "object",
        "title": "Campaign",
        "required": [
          "campaignId"
        ],
        "properties": {
          "campaignId": {
            "example": 1,
            "readOnly": false,
            "description": "The id of the campaign.",
            "type": "integer",
            "format": "int32"
          },
          "campaignName": {
            "readOnly": false,
            "description": "The campaign name.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Campaign"
      },
      "Campaign_OrderAPI": {
        "type": "object",
        "title": "Campaign",
        "required": [
          "campaignId"
        ],
        "properties": {
          "campaignCode": {
            "example": "50%DFA",
            "readOnly": false,
            "description": "The short name/code of the campaign.",
            "type": "string"
          },
          "campaignId": {
            "example": 1,
            "readOnly": false,
            "description": "The id of the campaign.",
            "type": "integer",
            "format": "int32"
          },
          "campaignName": {
            "example": "50% Discount for all",
            "readOnly": false,
            "description": "The name of the campaign.",
            "type": "string"
          }
        },
        "description": "Contains information about a campaign."
      },
      "Campaign_DeliveryAPI": {
        "type": "object",
        "title": "Campaign",
        "required": [
          "campaignId"
        ],
        "properties": {
          "campaignCode": {
            "example": "50%DFA",
            "readOnly": false,
            "description": "The short name/code of the campaign.",
            "type": "string"
          },
          "campaignId": {
            "example": 1,
            "readOnly": false,
            "description": "The id of the campaign.",
            "type": "integer",
            "format": "int32"
          },
          "campaignName": {
            "example": "50% Discount for all",
            "readOnly": false,
            "description": "The name of the campaign.",
            "type": "string"
          }
        },
        "description": "Campaign"
      },
      "CancelPurchaseParams": {
        "type": "object",
        "title": "CancelPurchaseParams",
        "properties": {
          "purchaseNumber": {
            "readOnly": false,
            "description": "The unique number of the purchase to cancel.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Contains information required to cancel an ongoing purchase."
      },
      "CancelPurchaseResult": {
        "type": "object",
        "title": "CancelPurchaseResult",
        "properties": {
          "purchaseNumber": {
            "readOnly": false,
            "description": "The identifier of the purchase that was canceled.",
            "type": "string",
            "example": "..."
          },
          "shopcartId": {
            "readOnly": false,
            "description": "The identifier of the shopping cart which now has the goods that the canceled purchase had.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Contains information about a cancelled purchase."
      },
      "CancellationDetails": {
        "type": "object",
        "title": "CancellationDetails",
        "required": [
          "arrivalMethodId",
          "endAfterNextDelivery",
          "reasonId"
        ],
        "properties": {
          "arrivalMethodId": {
            "example": 1,
            "readOnly": false,
            "description": "The method of how the cancellation arrived.",
            "type": "integer",
            "format": "int32"
          },
          "endAfterNextDelivery": {
            "example": true,
            "readOnly": false,
            "description": "Should the subscription be ended now or after the next delivery.",
            "type": "boolean"
          },
          "reasonId": {
            "example": 1,
            "readOnly": false,
            "description": "The id of the cancellation reason.",
            "type": "integer",
            "format": "int32"
          },
          "reasonText": {
            "example": "custom reason",
            "readOnly": false,
            "description": "Optional custom reason-text supplied.",
            "type": "string"
          }
        },
        "description": "Contains the details for a cancellation"
      },
      "CancellationEligibility": {
        "type": "string",
        "title": "CancellationEligibility",
        "enum": [
          "NOT_ALLOWED",
          "ALLOWED",
          "ALLOWED_AFTER_NEXT_SHIPMENT"
        ],
        "description": "Defines the cancellation eligibility of a subscription."
      },
      "CancellationReason": {
        "type": "object",
        "title": "CancellationReason",
        "required": [
          "reasonId"
        ],
        "properties": {
          "reasonCode": {
            "example": "01",
            "readOnly": false,
            "description": "The cancellation reason code.",
            "type": "string"
          },
          "reasonId": {
            "example": 1,
            "readOnly": false,
            "description": "The reason for cancellation id of the subscription.",
            "type": "integer",
            "format": "int32"
          },
          "reasonName": {
            "example": "Was not satisfied with product",
            "readOnly": false,
            "description": "The cancellation reason name.",
            "type": "string"
          }
        },
        "description": "Cancellation Reason"
      },
      "CancellationReason_CustomerAPI": {
        "type": "object",
        "title": "CancellationReason",
        "required": [
          "reasonId"
        ],
        "properties": {
          "reasonCode": {
            "example": "01",
            "readOnly": false,
            "description": "The cancellation reason code.",
            "type": "string"
          },
          "reasonId": {
            "example": 1,
            "readOnly": false,
            "description": "The reason for cancellation id of the subscription.",
            "type": "integer",
            "format": "int32"
          },
          "reasonName": {
            "example": "Was not satisfied with product",
            "readOnly": false,
            "description": "The cancellation reason name.",
            "type": "string"
          }
        },
        "description": "Cancellation Reason"
      },
      "CategoriesToReplaceExisting": {
        "type": "object",
        "title": "CategoriesToReplaceExisting",
        "required": [
          "categoryId"
        ],
        "properties": {
          "categoryId": {
            "example": 123,
            "readOnly": false,
            "description": "The identifier of the category. This value is mandatory.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Contains changes that applies to a product."
      },
      "Category": {
        "type": "object",
        "title": "Category",
        "required": [
          "categoryId"
        ],
        "properties": {
          "categoryId": {
            "example": 1,
            "readOnly": false,
            "description": "The id of the category.",
            "type": "integer",
            "format": "int32"
          },
          "categoryName": {
            "example": "Shirts",
            "readOnly": false,
            "description": "The name of the category.",
            "type": "string"
          },
          "children": {
            "readOnly": false,
            "description": "Contains the underlying children categories.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Category"
            }
          },
          "languages": {
            "readOnly": false,
            "description": "Contains the translations available for the category name.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Language"
            }
          }
        },
        "description": "Defines a category node in the category tree. A category can contain zero or more child categories."
      },
      "Category_aggregations": {
        "type": "object",
        "title": "Category",
        "properties": {
          "buckets": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CategoryBucket"
            }
          }
        },
        "description": ""
      },
      "Category_response": {
        "type": "object",
        "title": "Category",
        "required": [
          "categoryId",
          "default"
        ],
        "properties": {
          "categoryId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "categoryName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "categoryUUID": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "default": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "linkFriendlyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "Category_CustomerResult": {
        "type": "object",
        "title": "Category",
        "required": [
          "categoryId"
        ],
        "properties": {
          "categoryId": {
            "example": 1,
            "readOnly": false,
            "description": "The category id of the customer.",
            "type": "integer",
            "format": "int32"
          },
          "categoryName": {
            "example": "Gold Customer",
            "readOnly": false,
            "description": "The category name.",
            "type": "string"
          }
        },
        "description": "Customer Category"
      },
      "Category_v2": {
        "type": "object",
        "title": "Category",
        "required": [
          "categoryId"
        ],
        "properties": {
          "categoryId": {
            "readOnly": false,
            "description": "The id for this category",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Represents customer category"
      },
      "CategoryBucket": {
        "type": "object",
        "title": "CategoryBucket",
        "required": [
          "count"
        ],
        "properties": {
          "count": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "item": {
            "$ref": "#/components/schemas/CategoryBucketItem"
          }
        },
        "description": ""
      },
      "CategoryBucketItem": {
        "type": "object",
        "title": "CategoryBucketItem",
        "required": [
          "categoryId",
          "hidden"
        ],
        "properties": {
          "categoryId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "categoryName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "hidden": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          }
        },
        "description": ""
      },
      "CategorySitemapParams": {
        "type": "object",
        "title": "CategorySitemapParams",
        "required": [
          "excludeHidden",
          "excludeSymlinks",
          "includeNoIndex",
          "lang_id"
        ],
        "properties": {
          "excludeHidden": {
            "example": true,
            "readOnly": false,
            "description": "Filter on hidden_flg of category. Optional.",
            "type": "boolean"
          },
          "excludeSymlinks": {
            "example": true,
            "readOnly": false,
            "description": "Filter on symlinks of category. Optional.",
            "type": "boolean"
          },
          "includeNoIndex": {
            "example": true,
            "readOnly": false,
            "description": "Filter to include all contents regardless if they should be indexed or not. Optional",
            "type": "boolean"
          },
          "lang_id": {
            "example": 1,
            "readOnly": false,
            "description": "Id of language. Used to retrieve/filter correct translations for response. Is Mandatory",
            "type": "integer",
            "format": "int32"
          },
          "topCategoryTag": {
            "example": "estore",
            "readOnly": false,
            "description": "Top category tag to use when selecting articles to include in sitemap. Is mandatory.",
            "type": "string"
          }
        },
        "description": "Article sitemap request"
      },
      "ChangeDetails": {
        "type": "object",
        "title": "ChangeDetails",
        "required": [
          "subscriptionTypeId"
        ],
        "properties": {
          "subscriptionTypeId": {
            "example": 1,
            "readOnly": false,
            "description": "The id of the subscription type to change the subscription to.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Contains the details for a change of subscription type."
      },
      "CheckoutDeliveryMethod": {
        "type": "object",
        "title": "CheckoutDeliveryMethod",
        "required": [
          "applicable"
        ],
        "properties": {
          "applicable": {
            "readOnly": false,
            "description": "Whether or not this method is currently available with the current shopcart.",
            "type": "boolean",
            "example": true
          },
          "method": {
            "$ref": "#/components/schemas/DeliveryMethod"
          }
        },
        "description": "Defines a delivery method that is available on checkout pages. The method is returned together with a state that says whether or not this method is\ncurrently available for the current shopcart."
      },
      "CheckoutDetails": {
        "type": "object",
        "title": "CheckoutDetails",
        "required": [
          "shopcartAvailable"
        ],
        "properties": {
          "deliveryMethods": {
            "readOnly": false,
            "description": "The available delivery methods.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CheckoutDeliveryMethod"
            }
          },
          "params": {
            "readOnly": false,
            "description": "Parameters from unique hooks, such as Klarna Checkout.",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "property1": "...",
              "property2": "..."
            }
          },
          "paymentMethods": {
            "readOnly": false,
            "description": "The available payment methods.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CheckoutPaymentMethod"
            }
          },
          "shopcartAvailable": {
            "readOnly": false,
            "description": "Whether or not the given shopcart is available. A shopcart is available when it has ShopcartStatus REGULAR/PENDING and has rows.",
            "type": "boolean",
            "example": true
          }
        },
        "description": "Contains details about that is useful on a checkout page."
      },
      "CheckoutDetailsRequest": {
        "type": "object",
        "title": "CheckoutDetailsRequest",
        "required": [
          "customerId"
        ],
        "properties": {
          "additionalOrderText": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "customFields": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomField"
            }
          },
          "customerId": {
            "readOnly": false,
            "description": "The optional internal identifier of a customer to populate the customer information from.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "customerUUID": {
            "readOnly": false,
            "description": "The optional UUID of a customer to populate the customer information from.",
            "type": "string",
            "example": "..."
          },
          "googleAnalyticsId": {
            "readOnly": false,
            "description": "Google Analytics Client Id. This Id is used to track anonymous users and their actions. Purchase data will be pushed to google analytics with\nthis id.",
            "type": "string",
            "example": "..."
          },
          "integrities": {
            "example": "EMAIL_INFO",
            "readOnly": false,
            "description": "The list of integrities that the customer consents or opts in to.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "integritiesMap": {
            "readOnly": false,
            "description": "The map of integrities that the customer opts in or opts out to.",
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            },
            "example": {
              "EMAIL_INFO": true,
              "SMS_INFO": false
            }
          },
          "languageCode": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "params": {
            "readOnly": false,
            "description": "Parameters for unique hooks, such as Klarna Checkout.",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "property1": "...",
              "property2": "..."
            }
          },
          "remoteAddress": {
            "readOnly": false,
            "description": "The remote address of the consumer.",
            "type": "string",
            "example": "..."
          },
          "shopcartId": {
            "readOnly": false,
            "description": "The shopcart to get checkout details for.",
            "type": "string",
            "example": "..."
          },
          "upsellItems": {
            "readOnly": false,
            "description": "The upsell items to offer during checkout, if the payment provider supports it. Mutually exclusive with\nthe deprecated provider specific request parameter carrying the same information as a JSON string.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CheckoutUpsellItem"
            }
          },
          "upsellOptions": {
            "$ref": "#/components/schemas/CheckoutUpsellOptions"
          },
          "zipcode": {
            "readOnly": false,
            "description": "An optional zipcode, that will be used for any potential zipcode filterings.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Defines a request to get details that can be used on a checkout page."
      },
      "CheckoutPaymentMethod": {
        "type": "object",
        "title": "CheckoutPaymentMethod",
        "required": [
          "applicable"
        ],
        "properties": {
          "applicable": {
            "readOnly": false,
            "description": "Whether or not this method is currently available with the current shopcart.",
            "type": "boolean",
            "example": true
          },
          "method": {
            "$ref": "#/components/schemas/PaymentMethod"
          }
        },
        "description": "Defines a payment method that is available on checkout pages. The method is returned together with a state that says whether or not this method is\ncurrently available for the current shopcart."
      },
      "CheckoutStockValidationRequest": {
        "type": "object",
        "title": "CheckoutStockValidationRequest",
        "required": [
          "serviceProviderConfigId"
        ],
        "properties": {
          "serviceProviderConfigId": {
            "readOnly": false,
            "description": "The service provider configuration holding the stock source to validate against.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "shopcartId": {
            "readOnly": false,
            "description": "The shopcart to validate.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Defines a request to validate that a shopcart can be fulfilled by a third party stock source before a purchase is completed."
      },
      "CheckoutUpsellItem": {
        "type": "object",
        "title": "CheckoutUpsellItem",
        "required": [
          "quantity",
          "skuId"
        ],
        "properties": {
          "description": {
            "readOnly": false,
            "description": "The description to show for the item. Truncated if longer than the payment provider allows.",
            "type": "string",
            "example": "..."
          },
          "imageUrl": {
            "readOnly": false,
            "description": "Absolute HTTPS URL to the product image. Required.",
            "type": "string",
            "example": "..."
          },
          "quantity": {
            "readOnly": false,
            "description": "The number of items to offer. Treated as 1 when not greater than zero.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "skuId": {
            "readOnly": false,
            "description": "The stock keeping unit to offer. Must be an active and published sku with a price in the checkout country.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Class that represents an upsell item offered during checkout.\n\n\u003cp\u003eOnly the fields a caller controls are present. The sales price, VAT and article number are resolved\nserver side from the skuId and must not be supplied, since caller-provided values would be\ndiscarded.\u003c/p\u003e"
      },
      "CheckoutUpsellOptions": {
        "type": "object",
        "title": "CheckoutUpsellOptions",
        "properties": {
          "timeLimitInSeconds": {
            "readOnly": false,
            "description": "How long, in seconds, the upsell offer stays open after the purchase completes. Must be between 60 and 300\nseconds. Left out to let the payment provider apply its own maximum, which is 300 seconds for Walley. Every\noffer closes, so the customer always sees a deadline and the order stops changing at a known point in time.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Class that represents how the upsell offer behaves during checkout.\n\n\u003cp\u003eHeld apart from CheckoutUpsellItem because these options describe the offer as a whole rather than\nany single item, and because further options can then be added without touching the items.\u003c/p\u003e"
      },
      "City": {
        "type": "object",
        "title": "City",
        "required": [
          "cityId",
          "countryId"
        ],
        "properties": {
          "cityId": {
            "readOnly": false,
            "description": "City ID.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "cityName": {
            "example": "Stockholm",
            "readOnly": false,
            "description": "The city name.",
            "type": "string"
          },
          "countryId": {
            "example": 0,
            "readOnly": false,
            "description": "Country ID. Use 0 for default country",
            "type": "integer",
            "format": "int32"
          },
          "zipCodes": {
            "example": [
              "89440, 89441, 89493",
              "..."
            ],
            "readOnly": false,
            "description": "Zip codes connected to the city",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "description": "Represents city matched to connected zip codes."
      },
      "Company": {
        "type": "object",
        "title": "Company",
        "required": [
          "administrator",
          "customerId",
          "priceListId",
          "proxy"
        ],
        "properties": {
          "administrator": {
            "readOnly": false,
            "description": "Whether this customer is an administrator for the company. An administrator can manage the company and its users.",
            "type": "boolean",
            "example": true
          },
          "companyName": {
            "readOnly": false,
            "description": "The name of the company.",
            "type": "string",
            "example": "..."
          },
          "customerDeliveryAddresses": {
            "readOnly": false,
            "description": "The list of customer delivery/shipping addresses of the company",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeliveryAddress"
            }
          },
          "customerId": {
            "readOnly": false,
            "description": "The internal unique identifier of the company.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "customerNumber": {
            "readOnly": false,
            "description": "The external unique number of the company.",
            "type": "string",
            "example": "..."
          },
          "customerUUID": {
            "readOnly": false,
            "description": "The unique identifier of the company",
            "type": "string",
            "example": "..."
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "invoiceAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "organizationNumber": {
            "readOnly": false,
            "description": "The organization number of the company.",
            "type": "string",
            "example": "..."
          },
          "priceListId": {
            "readOnly": false,
            "description": "The default price list of the company",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "properties": {
            "readOnly": false,
            "description": "The properties of the company",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property_v2"
            }
          },
          "proxy": {
            "readOnly": false,
            "description": "Whether this customer is a proxy for the company. A proxy can choose whether to place orders on behalf of the company or on behalf of\nthemselves. A non-proxy customer can only place orders on behalf of the company.",
            "type": "boolean",
            "example": true
          }
        },
        "description": "Holds information about a company that a customer can place orders on behalf of."
      },
      "CompanyUserToAddOrUpdate": {
        "type": "object",
        "title": "CompanyUserToAddOrUpdate",
        "required": [
          "customerId"
        ],
        "properties": {
          "active": {
            "example": true,
            "readOnly": false,
            "description": "Whether or not the user has access to the company. It\u0027s not possible to remove the connection, instead you have to deactivate the connection.",
            "type": "boolean"
          },
          "administrator": {
            "example": false,
            "readOnly": false,
            "description": "Whether or not the user is an administrator of the company.",
            "type": "boolean"
          },
          "cellphone": {
            "example": "",
            "readOnly": false,
            "description": "The cell phone of the user.",
            "type": "string"
          },
          "customerId": {
            "readOnly": false,
            "description": "The internal identifier of the user to update. Required when updating.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "emailAddress": {
            "example": "",
            "readOnly": false,
            "description": "The email address of the user. Required when adding a user to the company.",
            "type": "string"
          },
          "firstName": {
            "example": "",
            "readOnly": false,
            "description": "The first name of the user.",
            "type": "string"
          },
          "invoiceAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "lastName": {
            "example": "",
            "readOnly": false,
            "description": "The last name of the user.",
            "type": "string"
          },
          "proxy": {
            "example": false,
            "readOnly": false,
            "description": "Whether or not the user is a proxy for the company.",
            "type": "boolean"
          }
        },
        "description": "Contains changes that applies to a company user."
      },
      "CompanyUsersToAddOrUpdate": {
        "type": "object",
        "title": "CompanyUsersToAddOrUpdate",
        "properties": {
          "companyUsersToAddOrUpdate": {
            "readOnly": false,
            "description": "The company users to add or update.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompanyUserToAddOrUpdate"
            }
          }
        },
        "description": "Contains a list of companyUsers to add or update."
      },
      "Connection": {
        "type": "object",
        "title": "Connection",
        "required": [
          "attribute1Id",
          "attribute2Id",
          "attribute3Id",
          "relatedAttribute1Id",
          "relatedAttribute2Id",
          "relatedAttribute3Id",
          "sort"
        ],
        "properties": {
          "attribute1Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute2Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute3Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "relatedAttribute1Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "relatedAttribute2Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "relatedAttribute3Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "sort": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": ""
      },
      "Consent": {
        "type": "object",
        "title": "Consent",
        "properties": {
          "key": {
            "$ref": "#/components/schemas/ConsentKey"
          },
          "value": {
            "$ref": "#/components/schemas/ConsentValue"
          }
        },
        "description": "Customer\u0027s consent."
      },
      "Consent_CustomerAPI": {
        "type": "object",
        "title": "Consent",
        "properties": {
          "key": {
            "$ref": "#/components/schemas/ConsentKey_CustomerAPI"
          },
          "value": {
            "$ref": "#/components/schemas/ConsentValue_CustomerAPI"
          }
        },
        "description": "Customer\u0027s consent."
      },
      "ConsentKey_CustomerAPI": {
        "type": "string",
        "title": "ConsentKey",
        "enum": [
          "EMAIL_INFO",
          "SMS_INFO",
          "SMS_ADS",
          "TM",
          "DM",
          "ADDRESS",
          "EMAIL_ADS",
          "GDPR_1",
          "GDPR_2",
          "MEMBER"
        ],
        "description": "Consent key (name)."
      },
      "ConsentKey": {
        "type": "string",
        "title": "ConsentKey",
        "enum": [
          "EMAIL_INFO",
          "SMS_INFO",
          "SMS_ADS",
          "TM",
          "DM",
          "ADDRESS",
          "EMAIL_ADS",
          "GDPR_1",
          "GDPR_2",
          "MEMBER"
        ],
        "description": "Consent key (name)."
      },
      "ConsentValue": {
        "type": "string",
        "title": "ConsentValue",
        "enum": [
          "UNKNOWN",
          "DENIED",
          "APPROVED"
        ],
        "description": "Consent value."
      },
      "ConsentValue_CustomerAPI": {
        "type": "string",
        "title": "ConsentValue",
        "enum": [
          "UNKNOWN",
          "DENIED",
          "APPROVED"
        ],
        "description": "Consent value."
      },
      "Content": {
        "type": "object",
        "title": "Content",
        "properties": {
          "addons": {
            "readOnly": false,
            "description": "A list of addons.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubProduct"
            }
          },
          "products": {
            "readOnly": false,
            "description": "A list of sub-products.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubProduct"
            }
          }
        },
        "description": "Contains the sub-products."
      },
      "ContentCategory": {
        "type": "object",
        "title": "ContentCategory",
        "required": [
          "categoryId",
          "estoreSortOverrideDescending",
          "noIndex",
          "sortDescending"
        ],
        "properties": {
          "categoryId": {
            "readOnly": false,
            "description": "Id of category",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "categoryName": {
            "readOnly": false,
            "description": "Name category",
            "type": "string",
            "example": "..."
          },
          "categoryUUID": {
            "readOnly": false,
            "description": "UUID of category, the identifier a storefront knows the category by",
            "type": "string",
            "example": "..."
          },
          "content": {
            "readOnly": false,
            "description": "Content of category",
            "type": "string",
            "example": "..."
          },
          "estoreSortOverride": {
            "readOnly": false,
            "description": "The sort the storefront applies to this category listing, overriding the category sort. Blank when not set,\nwhich is the default and means the listing is ordered by the category sort.\n\n\u003cp\u003e\nOne of PRICE or PUBLISHED, from the category.estoreSortOverride constantdesc codes.\nUnlike #getSortByField(), which says how the category editor ordered the list, this says how the\nproduct API is to order it.\n\u003c/p\u003e\n\n\u003cp\u003e\nReported for callers that resolve the sort themselves. A storefront that simply applies\n#getSortByField() needs nothing from this field, since that one already carries the override\u0027s index\nfield when one is configured.\n\u003c/p\u003e",
            "type": "string",
            "example": "..."
          },
          "estoreSortOverrideDescending": {
            "readOnly": false,
            "description": "The sort direction for #getEstoreSortOverride(). Only meaningful when that is set.",
            "type": "boolean",
            "example": true
          },
          "linkFriendlyName": {
            "readOnly": false,
            "description": "Link friendly of category",
            "type": "string",
            "example": "..."
          },
          "metaDescription": {
            "readOnly": false,
            "description": "Meta description of category",
            "type": "string",
            "example": "..."
          },
          "noIndex": {
            "readOnly": false,
            "description": "If category should not be indexed",
            "type": "boolean",
            "example": true
          },
          "sortByField": {
            "readOnly": false,
            "description": "The sort the storefront should order this category\u0027s products by, as an index field name.\n\n\u003cp\u003e\nThis is the effective sort: normally the setting made in the category editor, but the storefront sort override\nwhen one is configured, see #getEstoreSortOverride(). A storefront can therefore apply this field\ndirectly without knowing whether an override exists.\n\u003c/p\u003e",
            "type": "string",
            "example": "..."
          },
          "sortDescending": {
            "readOnly": false,
            "description": "The direction for #getSortByField(), likewise the override\u0027s own direction when one is configured",
            "type": "boolean",
            "example": true
          },
          "title": {
            "readOnly": false,
            "description": "Title of category",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Domain of a content category. Holding information about a category\u0027s content."
      },
      "ContentGroup": {
        "type": "object",
        "title": "ContentGroup",
        "properties": {
          "groups": {
            "readOnly": false,
            "description": "The packages to update.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Group"
            }
          }
        },
        "description": "Contains grouped content"
      },
      "ContentTree": {
        "type": "object",
        "title": "ContentTree",
        "required": [
          "categoryId",
          "hidden",
          "symlinked"
        ],
        "properties": {
          "categoryId": {
            "readOnly": false,
            "description": "Id of category",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "categoryName": {
            "readOnly": false,
            "description": "Name of category",
            "type": "string",
            "example": "..."
          },
          "children": {
            "readOnly": false,
            "description": "Children of this category",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContentTree"
            }
          },
          "hidden": {
            "readOnly": false,
            "description": "Hidden status of category",
            "type": "boolean",
            "example": true
          },
          "linkFriendlyName": {
            "readOnly": false,
            "description": "Link friendly name of category",
            "type": "string",
            "example": "..."
          },
          "symlinked": {
            "readOnly": false,
            "description": "Whether or not this category is symlinked (pointing towards another category)",
            "type": "boolean",
            "example": true
          }
        },
        "description": "Domain representing a content tree node"
      },
      "Country": {
        "type": "object",
        "title": "Country",
        "required": [
          "selectable",
          "shopable"
        ],
        "properties": {
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2).",
            "type": "string"
          },
          "countryCodeAlpha3": {
            "example": "SWE",
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-3).",
            "type": "string"
          },
          "countryName": {
            "example": "Sweden",
            "readOnly": false,
            "description": "The name of the country.",
            "type": "string"
          },
          "currencyCode": {
            "example": "SEK",
            "readOnly": false,
            "description": "The currency code (ISO 4217).",
            "type": "string"
          },
          "handledAs": {
            "example": "EU",
            "readOnly": false,
            "description": "The country code of the other country that this country should be handled as. This is useful when you want to administer several markets at\nonce.",
            "type": "string"
          },
          "languageCode": {
            "$ref": "#/components/schemas/Language_commons"
          },
          "selectable": {
            "readOnly": false,
            "description": "Whether or not this country should be available in country selectors.",
            "type": "boolean",
            "example": true
          },
          "shippingFeeLimit": {
            "example": 500,
            "readOnly": false,
            "description": "The minimum value that must be reached in order to get free shipping.",
            "type": "number"
          },
          "shopable": {
            "readOnly": false,
            "description": "Whether or not this country is shopable. Useful for hiding buy buttons and similar logic in markets where you only want to show your goods, not\nsell them.",
            "type": "boolean",
            "example": true
          }
        },
        "description": "A country defines a market where products are sold.\n\u003cp\u003e\nA country has a single currency, meaning you can\u0027t use any other currency when placing orders for that country. For example, if you are ordering\ngoods in the Swedish market, you must pay with SEK.\n\u003c/p\u003e\n\u003cp\u003e\nA country has a default language, however any language can in theory be used for any country when browsing goods, as long as there are translations\nfor that specific language. Languages and countries are in other words not really connected in any important way.\n\u003c/p\u003e"
      },
      "MyPagesCoupon": {
        "type": "object",
        "title": "Coupon",
        "properties": {
          "couponCode": {
            "example": "SUMMER10",
            "readOnly": false,
            "description": "Human-readable coupon code; what the customer would type if entering it manually.",
            "type": "string"
          },
          "description": {
            "example": "10% off your next purchase, valid in store and online.",
            "readOnly": false,
            "description": "Longer description shown on the coupon details view.",
            "type": "string"
          },
          "discountValue": {
            "example": 10,
            "readOnly": false,
            "description": "Discount value when meaningful, null otherwise.",
            "type": "number"
          },
          "imageUrl": {
            "example": "https://cdn.diller.example/coupons/welcome10.png",
            "readOnly": false,
            "description": "URL to a banner or graphic for the coupon.",
            "type": "string"
          },
          "maxRedemptions": {
            "example": 3,
            "readOnly": false,
            "description": "Total number of redemptions allowed, null when unknown or unlimited. Capped at\n#getTimesRedeemed() once the provider has withdrawn the coupon, so a spent coupon never\nappears reusable. Compare the two to tell a multi-use coupon from a single-use or exhausted one.",
            "type": "integer",
            "format": "int32"
          },
          "timesRedeemed": {
            "example": 1,
            "readOnly": false,
            "description": "Number of times the coupon has already been redeemed, null when the provider does not report it.\nNot the same as \"unused\" being 0 - a provider that omits the count is distinct from one reporting zero.",
            "type": "integer",
            "format": "int32"
          },
          "title": {
            "example": "200 kr Summer Discount",
            "readOnly": false,
            "description": "Marketing title for the coupon.",
            "type": "string"
          },
          "validFrom": {
            "example": "2026-06-01",
            "readOnly": false,
            "description": "Start of validity period.",
            "type": "string",
            "format": "date"
          },
          "validTo": {
            "example": "2026-06-30",
            "readOnly": false,
            "description": "End of validity period.",
            "type": "string",
            "format": "date"
          }
        },
        "description": "A coupon belonging to a customer, exposed by the My Pages REST API. Mirrors\ncom.viskan.etm.framework.mypages.domain.CustomerCoupon at the REST layer."
      },
      "CreateInfo": {
        "type": "object",
        "title": "CreateInfo",
        "properties": {
          "companyName": {
            "example": "Spotify",
            "readOnly": false,
            "description": "The name of the company.",
            "type": "string"
          },
          "customerNumber": {
            "example": "123456",
            "readOnly": false,
            "description": "The customer number.",
            "type": "string"
          },
          "customerUUID": {
            "readOnly": false,
            "description": "The customer UUID. Only used when matching.",
            "type": "string",
            "example": "..."
          },
          "emailAddress": {
            "example": "anton@viskan.com",
            "readOnly": false,
            "description": "The email address.",
            "type": "string"
          },
          "externalMemberNumber": {
            "readOnly": false,
            "description": "The member number in thirdparty",
            "type": "string",
            "example": "..."
          },
          "firstName": {
            "example": "Anton",
            "readOnly": false,
            "description": "The first name of the customer or company contact person.",
            "type": "string"
          },
          "lastName": {
            "example": "Johansson",
            "readOnly": false,
            "description": "The last name of the customer or company contact person.",
            "type": "string"
          },
          "organizationNumber": {
            "example": "5567037485",
            "readOnly": false,
            "description": "The organization number of the company.",
            "type": "string"
          },
          "phoneNumber": {
            "readOnly": false,
            "description": "The phone number",
            "type": "string",
            "example": "..."
          },
          "socialSecurityNumber": {
            "example": "199004141234",
            "readOnly": false,
            "description": "The social security number of the customer.",
            "type": "string"
          },
          "zipcode": {
            "example": "123 56",
            "readOnly": false,
            "description": "The zipcode.",
            "type": "string"
          }
        },
        "description": "Information about a customer or company being matched and potentially created."
      },
      "CreatePurchaseParams": {
        "type": "object",
        "title": "CreatePurchaseParams",
        "properties": {
          "additionalOrderText": {
            "readOnly": false,
            "description": "The Additional order text on the purchase.",
            "type": "string",
            "example": "..."
          },
          "address": {
            "$ref": "#/components/schemas/Address_address"
          },
          "alternativeEmailAddress": {
            "readOnly": false,
            "description": "The alternative email address of the customer.",
            "type": "string",
            "example": "..."
          },
          "cellphone": {
            "readOnly": false,
            "description": "The cellphone number of the customer.",
            "type": "string",
            "example": "..."
          },
          "companyName": {
            "readOnly": false,
            "description": "The company name of the customer. Mutually exclusive with \u003ccode\u003efirstName\u003c/code\u003e, \u003ccode\u003elastName\u003c/code\u003e and \u003ccode\u003esocialSecurityNumber\u003c/code\u003e.",
            "type": "string",
            "example": "..."
          },
          "contactPerson": {
            "readOnly": false,
            "description": "The contact person to create purchase for.",
            "type": "string",
            "example": "..."
          },
          "customFields": {
            "readOnly": false,
            "description": "Custom fields.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomField"
            }
          },
          "dateOfBirth": {
            "readOnly": false,
            "description": "Date of birth of the customer.",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/AddressWithName"
          },
          "email": {
            "readOnly": false,
            "description": "The email address of the customer.",
            "type": "string",
            "example": "..."
          },
          "firstName": {
            "readOnly": false,
            "description": "The first name of the customer. Mutually exclusive with \u0027companyName\u0027.",
            "type": "string",
            "example": "..."
          },
          "gender": {
            "$ref": "#/components/schemas/Sex"
          },
          "googleAnalyticsId": {
            "readOnly": false,
            "description": "Google Analytics Client Id. This Id is used to track anonymous users and their actions. Purchase data will be pushed to google analytics with this id.",
            "type": "string",
            "example": "..."
          },
          "integrities": {
            "example": "EMAIL_INFO",
            "readOnly": false,
            "description": "The list of integrities that the customer consents or opts in to.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "integritiesMap": {
            "readOnly": false,
            "description": "The map of integrities that the customer opts out or opts in to.",
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            },
            "example": {
              "EMAIL_INFO": true,
              "SMS_INFO": false
            }
          },
          "landline": {
            "readOnly": false,
            "description": "The landline phone number of the customer.",
            "type": "string",
            "example": "..."
          },
          "languageCode": {
            "$ref": "#/components/schemas/Language_commons"
          },
          "lastName": {
            "readOnly": false,
            "description": "The last name of the customer. Mutually exclusive with \u0027companyName\u0027.",
            "type": "string",
            "example": "..."
          },
          "nextDeliveryDate": {
            "readOnly": false,
            "description": "For orders: earliest delivery date. For subscriptions: suggested next delivery date. Defaulted to today\u0027s date.",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "notes": {
            "readOnly": false,
            "description": "A free text that will be stored in the order\u0027s/subscription\u0027s list of notes.",
            "type": "string",
            "example": "..."
          },
          "orderDate": {
            "readOnly": false,
            "description": "For orders: the order date. For subscription: the starting date. Defaulted to nextDeliveryDate if specified, otherwise today\u0027s date",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "organizationNumber": {
            "readOnly": false,
            "description": "The organization number of the customer. Mutually exclusive with \u003ccode\u003efirstName\u003c/code\u003e, \u003ccode\u003elastName\u003c/code\u003e and\n\u003ccode\u003esocialSecurityNumber\u003c/code\u003e.",
            "type": "string",
            "example": "..."
          },
          "remoteAddress": {
            "readOnly": false,
            "description": "The remote client address.",
            "type": "string",
            "example": "..."
          },
          "sellerDepartment": {
            "readOnly": false,
            "description": "For sales handled by third parties, typically TM call centers - the department that the seller belongs to. The order/subscription\u0027s createdBy field will\nbe updated with the department (and sellerPerson)",
            "type": "string",
            "example": "..."
          },
          "sellerPerson": {
            "readOnly": false,
            "description": "For sales handled by third parties, typically TM call centers - the name/identifier of the seller person. The order/subscription\u0027s createdBy field will\nbe updated with the seller (and sellerDepartment)",
            "type": "string",
            "example": "..."
          },
          "settings": {
            "$ref": "#/components/schemas/CreatePurchaseParamsSettings"
          },
          "shopcartId": {
            "readOnly": false,
            "description": "The shopcart to create purchase for.",
            "type": "string",
            "example": "..."
          },
          "socialSecurityNumber": {
            "readOnly": false,
            "description": "The social security number of the customer. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e and \u003ccode\u003eorganizationNumber\u003c/code\u003e.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Defines parameters that are used to create new purchases."
      },
      "CreatePurchaseParamsSettings": {
        "type": "object",
        "title": "CreatePurchaseParamsSettings",
        "properties": {
          "cancelPagePath": {
            "example": "/cancel/{purchaseNumber}",
            "readOnly": false,
            "description": "The path to the cancel page.",
            "type": "string"
          },
          "params": {
            "readOnly": false,
            "description": "Contains additional unique parameters required by third party providers.",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "property1": "...",
              "property2": "..."
            }
          },
          "receiptPagePath": {
            "example": "/receipt/{purchaseNumber}",
            "readOnly": false,
            "description": "The path of the receipt page.",
            "type": "string"
          },
          "storeURL": {
            "example": "https://shop.viskan.com",
            "readOnly": false,
            "description": "The base URL for the store.",
            "type": "string"
          }
        },
        "description": "Contains settings for creating purchases."
      },
      "CreatePurchaseResult": {
        "type": "object",
        "title": "CreatePurchaseResult",
        "properties": {
          "action": {
            "$ref": "#/components/schemas/PurchaseResultAction"
          },
          "additionalInformation": {
            "readOnly": false,
            "description": "Any additional information about the created purchase.",
            "type": "object",
            "example": {}
          },
          "callbackURL": {
            "readOnly": false,
            "description": "If set, this URL should be used for callback, when payment is completed.",
            "type": "string",
            "example": "..."
          },
          "encoding": {
            "readOnly": false,
            "description": "The encoding to use when submitting a form.",
            "type": "string",
            "example": "..."
          },
          "parameters": {
            "readOnly": false,
            "description": "The parameters to submit.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubmitParameter"
            }
          },
          "purchaseNumber": {
            "readOnly": false,
            "description": "The unique number of the created purchase.",
            "type": "string",
            "example": "..."
          },
          "redirectURL": {
            "readOnly": false,
            "description": "If set, the user should be redirected to this URL.",
            "type": "string",
            "example": "..."
          },
          "scriptURL": {
            "readOnly": false,
            "description": "If set, this URL provides the required script for callback calls.",
            "type": "string",
            "example": "..."
          },
          "submitURL": {
            "readOnly": false,
            "description": "If set, the user should have a form submitted to this URL, with the given encoding and set of parameters.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Defines the result of creating a purchase."
      },
      "CreatedReturn": {
        "type": "object",
        "title": "CreatedReturn",
        "required": [
          "returnId"
        ],
        "properties": {
          "returnId": {
            "readOnly": false,
            "description": "The internal identifier of the return.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "returnNumber": {
            "readOnly": false,
            "description": "The external number of the return.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Identifies a created a return."
      },
      "Credentials": {
        "type": "object",
        "title": "Credentials",
        "properties": {
          "identifier": {
            "example": "anton.johansson@viskan.se",
            "readOnly": false,
            "description": "The identifier of the customer, for example an email address.",
            "type": "string"
          },
          "identifierType": {
            "$ref": "#/components/schemas/IdentifierType"
          },
          "password": {
            "example": "s3cr3t",
            "readOnly": false,
            "description": "The plain-text password of the customer.",
            "type": "string"
          }
        },
        "description": "Holds customer credentials for authenticating to \"My pages\"."
      },
      "CurrentDeliveryPoint": {
        "type": "object",
        "title": "CurrentDeliveryPoint",
        "required": [
          "deliveryPointId"
        ],
        "properties": {
          "deliveryPointCode": {
            "readOnly": false,
            "description": "The unique code of the delivery point. It\u0027s unique per carrier.",
            "type": "string",
            "example": "..."
          },
          "deliveryPointId": {
            "readOnly": false,
            "description": "The internal identifier of the delivery point.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryPointName": {
            "readOnly": false,
            "description": "The public name of the delivery point.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "The delivery point where the parcels of the delivery is currently at."
      },
      "CustomFieldDelivery": {
        "type": "object",
        "title": "CustomField",
        "properties": {
          "code": {
            "example": "shippingReference",
            "readOnly": false,
            "description": "The code of the custom field.",
            "type": "string"
          },
          "inheritedFrom": {
            "example": "PURCHASE",
            "readOnly": false,
            "description": "The type of the custom field.",
            "type": "string"
          },
          "value": {
            "example": "22468-15267-80",
            "readOnly": false,
            "description": "The value of the custom field.",
            "type": "string"
          }
        },
        "description": "Contains custom fields for a delivery."
      },
      "CustomField_PurchaseOrderAPI": {
        "type": "object",
        "title": "CustomField",
        "properties": {
          "code": {
            "readOnly": false,
            "description": "The code of the key associated with this field",
            "type": "string",
            "example": "..."
          },
          "value": {
            "readOnly": false,
            "description": "The value of this custom data.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Any custom data associated with this row"
      },
      "CustomField": {
        "type": "object",
        "title": "CustomField",
        "properties": {
          "code": {
            "readOnly": false,
            "description": "The code of a custom field. Must be present in CustomFieldKey table and be non-null and non-empty, otherwise will be ignored.",
            "type": "string",
            "example": "..."
          },
          "value": {
            "readOnly": false,
            "description": "The value to be assigned to the specified code.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Class that represents custom fields on purchases"
      },
      "MyPagesDeliveryCustomField": {
        "type": "object",
        "title": "CustomField",
        "properties": {
          "code": {
            "readOnly": false,
            "description": "The code of the custom field.",
            "type": "string",
            "example": "..."
          },
          "inheritedFrom": {
            "readOnly": false,
            "description": "The type of the custom field.",
            "type": "string",
            "example": "..."
          },
          "value": {
            "readOnly": false,
            "description": "The value of the custom field.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Defines a delivery custom field"
      },
      "CustomFieldReturnResult": {
        "type": "object",
        "title": "CustomField",
        "properties": {
          "code": {
            "example": "returnReference",
            "readOnly": false,
            "description": "The code of the custom field.",
            "type": "string"
          },
          "inheritedFrom": {
            "example": "RETURN",
            "readOnly": false,
            "description": "The type of the custom field.",
            "type": "string"
          },
          "value": {
            "example": "22468-15267-80",
            "readOnly": false,
            "description": "The value of the custom field.",
            "type": "string"
          }
        },
        "description": "Contains custom fields for a return."
      },
      "CustomFieldDeliveryChanges": {
        "type": "object",
        "title": "CustomField",
        "properties": {
          "code": {
            "example": "shippingReference",
            "readOnly": false,
            "description": "The code of the custom field.",
            "type": "string"
          },
          "value": {
            "example": "22468-15267-80",
            "readOnly": false,
            "description": "The value of the custom field.",
            "type": "string"
          }
        },
        "description": "Contains custom fields for a delivery."
      },
      "CustomField_OrderAPI": {
        "type": "object",
        "title": "CustomField",
        "properties": {
          "code": {
            "example": "orderReference",
            "readOnly": false,
            "description": "The code of the custom field.",
            "type": "string"
          },
          "inheritedFrom": {
            "example": "PURCHASE",
            "readOnly": false,
            "description": "The type of the custom field.",
            "type": "string"
          },
          "value": {
            "example": "22468-15267-80",
            "readOnly": false,
            "description": "The value of the custom field.",
            "type": "string"
          }
        },
        "description": "Contains custom fields for an order."
      },
      "CustomFieldReturnToCreate": {
        "type": "object",
        "title": "CustomField",
        "properties": {
          "code": {
            "example": "returnReference",
            "readOnly": false,
            "description": "The code of the custom field.",
            "type": "string"
          },
          "value": {
            "example": "22468-15267-80",
            "readOnly": false,
            "description": "The value of the custom field.",
            "type": "string"
          }
        },
        "description": "Contains custom fields for a return."
      },
      "Customer": {
        "type": "object",
        "title": "Customer",
        "required": [
          "customerId",
          "multiBrandId"
        ],
        "properties": {
          "customerId": {
            "example": 123,
            "readOnly": false,
            "description": "The internal identifier of the customer.",
            "type": "integer",
            "format": "int32"
          },
          "customerNumber": {
            "example": "123456",
            "readOnly": false,
            "description": "The external identifier of the customer.",
            "type": "string"
          },
          "mergedCustomerIds": {
            "readOnly": false,
            "description": "Duplicates of the customer.",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "multiBrandId": {
            "example": 1,
            "readOnly": false,
            "description": "The multibrand (concept) the customer belongs to.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Customer"
      },
      "MyPagesCustomer": {
        "type": "object",
        "title": "Customer",
        "required": [
          "bonusPoints",
          "companyUser",
          "customerId",
          "priceListId"
        ],
        "properties": {
          "alternativeEmailAddress": {
            "readOnly": false,
            "description": "The second email address for the customer.",
            "type": "string",
            "example": "..."
          },
          "bonusPoints": {
            "readOnly": false,
            "description": "The bonus points a customer has",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "categories": {
            "readOnly": false,
            "description": "The categories that the customer is member of",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Category_v2"
            }
          },
          "cellphone": {
            "readOnly": false,
            "description": "The cellphone number for the customer.",
            "type": "string",
            "example": "..."
          },
          "companies": {
            "readOnly": false,
            "description": "The companies on whose behalf this customer can place orders",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Company"
            }
          },
          "companyName": {
            "readOnly": false,
            "description": "The company name if any",
            "type": "string",
            "example": "..."
          },
          "companyUser": {
            "readOnly": false,
            "description": "The customer is a user or a company user",
            "type": "boolean",
            "example": true
          },
          "consents": {
            "readOnly": false,
            "description": "The consents of the customer",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerConsent"
            }
          },
          "contactPerson": {
            "readOnly": false,
            "description": "The name of a contact person for a company if any",
            "type": "string",
            "example": "..."
          },
          "creditLimit": {
            "readOnly": false,
            "description": "The credit limit of the customer",
            "type": "number",
            "example": 12345
          },
          "creditUsed": {
            "readOnly": false,
            "description": "The amount of used credit. Should be less than the credit limit",
            "type": "number",
            "example": 12345
          },
          "customerId": {
            "readOnly": false,
            "description": "The internal unique identifier of the customer. Deprecated in favour of customerUUID",
            "type": "integer",
            "format": "int32"
          },
          "customerNumber": {
            "readOnly": false,
            "description": "The external unique number of the customer.",
            "type": "string",
            "example": "..."
          },
          "customerReducedPricePercentage": {
            "readOnly": false,
            "description": "The customerReducedPricePercentage if any",
            "type": "number",
            "example": 12345
          },
          "customerType": {
            "$ref": "#/components/schemas/CustomerType"
          },
          "customerUUID": {
            "readOnly": false,
            "description": "The universally unique identifier of the customer.",
            "type": "string",
            "example": "..."
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "deliveryAddresses": {
            "readOnly": false,
            "description": "The delivery addresses of a customer",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeliveryAddress"
            }
          },
          "emailAddress": {
            "readOnly": false,
            "description": "The email address for the customer.",
            "type": "string",
            "example": "..."
          },
          "firstName": {
            "readOnly": false,
            "description": "The first name of the customer.",
            "type": "string",
            "example": "..."
          },
          "invoiceAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "lastName": {
            "readOnly": false,
            "description": "The last name of the customer.",
            "type": "string",
            "example": "..."
          },
          "memberNumber": {
            "readOnly": false,
            "description": "The member number of the customer, used for customer club memberships.",
            "type": "string",
            "example": "..."
          },
          "organizationNumber": {
            "readOnly": false,
            "description": "The organization number if any",
            "type": "string",
            "example": "..."
          },
          "priceListId": {
            "readOnly": false,
            "description": "The default price list for this customer.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "properties": {
            "readOnly": false,
            "description": "The properties of a customer",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property_v2"
            }
          },
          "providerData": {
            "readOnly": false,
            "description": "The providerdata if any",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "socialSecurityNumber": {
            "readOnly": false,
            "description": "The social security number of the customer.",
            "type": "string",
            "example": "..."
          },
          "store": {
            "$ref": "#/components/schemas/MyPagesStore"
          },
          "vatRegistrationNumber": {
            "readOnly": false,
            "description": "The VAT registration number if any",
            "type": "string",
            "example": "..."
          }
        },
        "description": "A customer is the central part of ETM. It holds information required to communicate with the customer and holds shipping information for the\ncustomer."
      },
      "Customer_CustomerResult": {
        "type": "object",
        "title": "Customer",
        "required": [
          "companyUser",
          "customerId",
          "multiBrandId",
          "removed"
        ],
        "properties": {
          "addresses": {
            "readOnly": false,
            "description": "Other Addresses of the customer.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerAddress"
            }
          },
          "alternativeEmailAddress": {
            "example": "kkarlsson@post.se",
            "readOnly": false,
            "description": "Alternative email address of the customer.",
            "type": "string"
          },
          "birthDate": {
            "example": "1977-01-11",
            "readOnly": false,
            "description": "Birth date of the customer.",
            "type": "string",
            "format": "date"
          },
          "blockCode": {
            "$ref": "#/components/schemas/BlockCode"
          },
          "bonusPoints": {
            "example": "10",
            "readOnly": false,
            "description": "Bonus Points of the customer.",
            "type": "string"
          },
          "categories": {
            "readOnly": false,
            "description": "List of customer categories.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Category_CustomerResult"
            }
          },
          "cellphone": {
            "example": "+46712345678",
            "readOnly": false,
            "description": "Cell phone of the customer.",
            "type": "string"
          },
          "companies": {
            "readOnly": false,
            "description": "Contains a list of companies the customer has access to if it\u0027s a company user",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerUser"
            }
          },
          "companyName": {
            "example": "Viskan",
            "readOnly": false,
            "description": "Company name of the customer.",
            "type": "string"
          },
          "companyUser": {
            "readOnly": false,
            "description": "Whether or not the user is a company user",
            "type": "boolean",
            "example": true
          },
          "consents": {
            "readOnly": false,
            "description": "List of customer\u0027s consents.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Consent"
            }
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the address, in ISO alpha-2 format, for example SE.",
            "type": "string"
          },
          "createdAt": {
            "example": "2023-10-12T14:36:43.412+01:00",
            "readOnly": false,
            "description": "Creation date of the customer.",
            "type": "string",
            "format": "date-time"
          },
          "currencyCode": {
            "example": "SEK",
            "readOnly": false,
            "description": "Default Currency code of the customer.",
            "type": "string"
          },
          "customerId": {
            "example": 581,
            "readOnly": false,
            "description": "The internal identifier of the customer.",
            "type": "integer",
            "format": "int32"
          },
          "customerNumber": {
            "example": "100011",
            "readOnly": false,
            "description": "The external number of the customer.",
            "type": "string"
          },
          "defaultPaymentMethod": {
            "$ref": "#/components/schemas/DefaultPaymentMethod"
          },
          "defaultTermsOfPayment": {
            "$ref": "#/components/schemas/DefaultTermsOfPayment"
          },
          "emailAddress": {
            "example": "karl.karlsson@mail.se",
            "readOnly": false,
            "description": "Email address of the customer.",
            "type": "string"
          },
          "firstName": {
            "example": "Karl",
            "readOnly": false,
            "description": "First name of the customer.",
            "type": "string"
          },
          "firstSubscriptionName": {
            "example": "Omega 3 subscription",
            "readOnly": false,
            "description": "Get the name of the customers first subscription.",
            "type": "string"
          },
          "gender": {
            "$ref": "#/components/schemas/Gender"
          },
          "invoiceAddress": {
            "readOnly": false,
            "description": "Invoice Address of the customer.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InvoiceAddress"
            }
          },
          "landLine": {
            "example": "+46712345678",
            "readOnly": false,
            "description": "The landline of the customer.",
            "type": "string"
          },
          "languageCode": {
            "example": "SV",
            "readOnly": false,
            "description": "Language code of the customer.",
            "type": "string"
          },
          "lastName": {
            "example": "Karlsson",
            "readOnly": false,
            "description": "Last name of the customer.",
            "type": "string"
          },
          "mergedCustomerIds": {
            "readOnly": false,
            "description": "Duplicates of the customer.",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "modifiedAt": {
            "example": "2023-10-12T14:36:43.412+01:00",
            "readOnly": false,
            "description": "Last changed date of the customer.",
            "type": "string",
            "format": "date-time"
          },
          "multiBrandId": {
            "example": 1,
            "readOnly": false,
            "description": "The multibrand (concept) the customer belongs to.",
            "type": "integer",
            "format": "int32"
          },
          "organizationNumber": {
            "example": "7711221234",
            "readOnly": false,
            "description": "The organization number of the customer.",
            "type": "string"
          },
          "pickupPoints": {
            "readOnly": false,
            "description": "List of pickup points the customer has selected.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PickupPoint"
            }
          },
          "priceList": {
            "$ref": "#/components/schemas/PriceList"
          },
          "reducedPricePercentage": {
            "readOnly": false,
            "description": "The reduced price for the customer in percentage",
            "type": "number",
            "example": 12345
          },
          "removed": {
            "example": true,
            "readOnly": false,
            "description": "Whether or not the customer is removed.",
            "type": "boolean"
          },
          "socialSecurityNumber": {
            "example": "197701116050",
            "readOnly": false,
            "description": "The social security number of the customer.",
            "type": "string"
          },
          "users": {
            "readOnly": false,
            "description": "Contains a list of users the customer has if it\u0027s a company",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerUser"
            }
          },
          "vatRegistrationNumber": {
            "example": "DE123456789",
            "readOnly": false,
            "description": "VAT Registration Number of the customer.",
            "type": "string"
          }
        },
        "description": "** Customer information."
      },
      "CustomerActivitiesToAdd": {
        "type": "object",
        "title": "CustomerActivitiesToAdd",
        "properties": {
          "customerActivitiesToAdd": {
            "readOnly": false,
            "description": "The list of customers activities to add.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerActivity"
            }
          }
        },
        "description": "Holds information about customer activities."
      },
      "CustomerActivity": {
        "type": "object",
        "title": "CustomerActivity",
        "required": [
          "activityTypeId"
        ],
        "properties": {
          "activityTypeId": {
            "example": 23500,
            "readOnly": false,
            "description": "The id of the customer activity type, must be greater than or equal to \u003ccode\u003e20000\u003c/code\u003e.",
            "type": "integer",
            "format": "int32"
          },
          "comment": {
            "example": "Outbound email sent",
            "readOnly": false,
            "description": "The optional comment about the customer activity.",
            "type": "string"
          },
          "date": {
            "example": "2025-06-06T14:30:10.000+01:00",
            "readOnly": false,
            "description": "The optional timestamp of the customer activity. Make sure to include a correct time zone offset.",
            "type": "string",
            "format": "date"
          }
        },
        "description": "Holds information about a customer activity."
      },
      "CustomerAddress": {
        "type": "object",
        "title": "CustomerAddress",
        "properties": {
          "addressLine1": {
            "example": "Södra Vägen 3",
            "readOnly": false,
            "description": "The first address line, usually street address.",
            "type": "string"
          },
          "addressLine2": {
            "example": "Apartment 102",
            "readOnly": false,
            "description": "The second address line, contains extra data.",
            "type": "string"
          },
          "addressNumber": {
            "example": "ABC123",
            "readOnly": false,
            "description": "The external address number.",
            "type": "string"
          },
          "addressType": {
            "$ref": "#/components/schemas/AddressType"
          },
          "administrativeDivision": {
            "example": "West Gothland",
            "readOnly": false,
            "description": "The administrative division, such as region or state.",
            "type": "string"
          },
          "alternativeEmailAddress": {
            "example": "karl.karlsson.alt@mail.se",
            "readOnly": false,
            "description": "Alternative email address of the recipient.",
            "type": "string"
          },
          "careOf": {
            "example": "Some person",
            "readOnly": false,
            "description": "The care of (c/o) extension of the address.",
            "type": "string"
          },
          "cellphone": {
            "example": "+46712345678",
            "readOnly": false,
            "description": "Cell phone number of the recipient.",
            "type": "string"
          },
          "city": {
            "example": "Stockholm",
            "readOnly": false,
            "description": "The city of the address.",
            "type": "string"
          },
          "companyName": {
            "example": "Viskan",
            "readOnly": false,
            "description": "The company name of the customer, if the customer is connected to a company.",
            "type": "string"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the address, in ISO alpha-2 format, for example SE.",
            "type": "string"
          },
          "emailAddress": {
            "example": "karl.karlsson@mail.se",
            "readOnly": false,
            "description": "Email address of the recipient.",
            "type": "string"
          },
          "firstName": {
            "example": "Karl",
            "readOnly": false,
            "description": "The first name of the recipient.",
            "type": "string"
          },
          "lastName": {
            "example": "Karlsson",
            "readOnly": false,
            "description": "The last name of the recipient.",
            "type": "string"
          },
          "zipcode": {
            "example": "113 51",
            "readOnly": false,
            "description": "The zipcode/postal code of the address.",
            "type": "string"
          }
        },
        "description": "Customer Address"
      },
      "CustomerAddress_CustomerAPI": {
        "type": "object",
        "title": "CustomerAddress",
        "properties": {
          "addressLine1": {
            "example": "Södra Långgatan 12",
            "readOnly": false,
            "description": "The first address line, usually street address.",
            "type": "string"
          },
          "addressLine2": {
            "example": "Apartment 102",
            "readOnly": false,
            "description": "The second address line, contains extra data.",
            "type": "string"
          },
          "addressNumber": {
            "example": "ABC123",
            "readOnly": false,
            "description": "The external address number. Used as an identifier for a customerAddress. Required for updating addresses",
            "type": "string"
          },
          "addressType": {
            "$ref": "#/components/schemas/AddressType"
          },
          "administrativeDivision": {
            "example": "West Gothland",
            "readOnly": false,
            "description": "The administrative division, such as region or state.",
            "type": "string"
          },
          "careOf": {
            "example": "Some person",
            "readOnly": false,
            "description": "The care of (c/o) extension of the address.",
            "type": "string"
          },
          "cellphone": {
            "example": "+46712345678",
            "readOnly": false,
            "description": "Cell phone number of the recipient.",
            "type": "string"
          },
          "city": {
            "example": "Stockholm",
            "readOnly": false,
            "description": "The city of the address.",
            "type": "string"
          },
          "companyName": {
            "example": "Viskan",
            "readOnly": false,
            "description": "The company name of the customer, if the customer is connected to a company.",
            "type": "string"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the address, in ISO alpha-2 format, for example SE.",
            "type": "string"
          },
          "emailAddress": {
            "example": "karl.karlsson@mail.se",
            "readOnly": false,
            "description": "Email address of the recipient.",
            "type": "string"
          },
          "firstName": {
            "example": "Karl",
            "readOnly": false,
            "description": "The first name of the recipient.",
            "type": "string"
          },
          "lastName": {
            "example": "Karlsson",
            "readOnly": false,
            "description": "The last name of the recipient.",
            "type": "string"
          },
          "zipCode": {
            "example": "113 51",
            "readOnly": false,
            "description": "The zipcode/postal code of the address.",
            "type": "string"
          }
        },
        "description": "Customer Address"
      },
      "CustomerChanges": {
        "type": "object",
        "title": "CustomerChanges",
        "properties": {
          "consentsToUpdate": {
            "readOnly": false,
            "description": "Contains changes of customer\u0027s consents.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Consent_CustomerAPI"
            }
          },
          "pickupPoints": {
            "readOnly": false,
            "description": "Replaces the customer\u0027s pickup points. Omit (or null) to leave them untouched; an empty array clears all.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PickupPointToSet"
            }
          }
        },
        "description": "Contains changes that applies to a customer."
      },
      "CustomerCompanyInformation": {
        "type": "object",
        "title": "CustomerCompanyInformation",
        "required": [
          "customerId"
        ],
        "properties": {
          "active": {
            "readOnly": false,
            "description": "Whether or not this customer / user has access to the connected company.",
            "type": "boolean",
            "example": true
          },
          "administrator": {
            "readOnly": false,
            "description": "Whether or not this customer / user is an administrator of the connected company.",
            "type": "boolean",
            "example": true
          },
          "cellphone": {
            "readOnly": false,
            "description": "The cell phone number for the customer.",
            "type": "string",
            "example": "..."
          },
          "customerId": {
            "readOnly": false,
            "description": "The internal unique identifier of the customer.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "customerNumber": {
            "readOnly": false,
            "description": "The external unique number of the customer.",
            "type": "string",
            "example": "..."
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "emailAddress": {
            "readOnly": false,
            "description": "The email address for the customer.",
            "type": "string",
            "example": "..."
          },
          "firstName": {
            "readOnly": false,
            "description": "The first name of the customer user.",
            "type": "string",
            "example": "..."
          },
          "invoiceAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "lastName": {
            "readOnly": false,
            "description": "The last name of the customer user.",
            "type": "string",
            "example": "..."
          },
          "proxy": {
            "readOnly": false,
            "description": "Whether or not this customer / user is a proxy for the connected company.",
            "type": "boolean",
            "example": true
          }
        },
        "description": "Defines a company user."
      },
      "CustomerConsent_CustomerAPI": {
        "type": "object",
        "title": "CustomerConsent",
        "properties": {
          "key": {
            "$ref": "#/components/schemas/CustomerIntegrityType"
          },
          "value": {
            "$ref": "#/components/schemas/CustomerIntegrityValue"
          }
        },
        "description": "Represents a customer\u0027s consent to a specific type of integrity."
      },
      "CustomerConsent": {
        "type": "object",
        "title": "CustomerConsent",
        "properties": {
          "key": {
            "$ref": "#/components/schemas/CustomerIntegrityType"
          },
          "value": {
            "$ref": "#/components/schemas/CustomerIntegrityValue_customer"
          }
        },
        "description": ""
      },
      "CustomerIntegrityType": {
        "type": "string",
        "title": "CustomerIntegrityType",
        "enum": [
          "EMAIL_INFO",
          "SMS_INFO",
          "SMS_ADS",
          "TM",
          "DM",
          "EMAIL_ADS",
          "CUSTOM_CONSENT_1",
          "CUSTOM_CONSENT_2",
          "MEMBER"
        ],
        "description": ""
      },
      "CustomerIntegrityValue": {
        "type": "string",
        "title": "CustomerIntegrityValue",
        "enum": [
          "APPROVED",
          "DENIED"
        ],
        "description": "Represents the integrity value that is applied to a CustomerIntegrityType. This is used to indicate whether a customer has approved or\ndenied a specific integrity type."
      },
      "CustomerIntegrityValue_customer": {
        "type": "string",
        "title": "CustomerIntegrityValue",
        "enum": [
          "DENIED",
          "APPROVED",
          "UNKNOWN"
        ],
        "description": ""
      },
      "CustomerLookupRequest": {
        "type": "object",
        "title": "CustomerLookupRequest",
        "required": [
          "serviceProviderConfigId"
        ],
        "properties": {
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2).",
            "type": "string"
          },
          "identifiers": {
            "readOnly": false,
            "description": "The identifiers that will be used for the lookup.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MatchIdentifier"
            }
          },
          "info": {
            "$ref": "#/components/schemas/CreateInfo"
          },
          "serviceProviderConfigId": {
            "readOnly": false,
            "description": "The optional id of a service provider config if the lookup should be done at a third party. If left out the lookup is done internally only.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Information for a request to look up customer data, e.g. to prefill fields when creating a new account."
      },
      "CustomerLookupResponse": {
        "type": "object",
        "title": "CustomerLookupResponse",
        "properties": {
          "cellphone": {
            "readOnly": false,
            "description": "The cellphone number for the customer.",
            "type": "string",
            "example": "..."
          },
          "companyName": {
            "example": "Spotify",
            "readOnly": false,
            "description": "The name of the company.",
            "type": "string"
          },
          "customerType": {
            "$ref": "#/components/schemas/CustomerType"
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "emailAddress": {
            "example": "anton@viskan.com",
            "readOnly": false,
            "description": "The email address for the customer.",
            "type": "string"
          },
          "firstName": {
            "example": "Anton",
            "readOnly": false,
            "description": "The first name of the customer.",
            "type": "string"
          },
          "invoiceAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "lastName": {
            "example": "Johansson",
            "readOnly": false,
            "description": "The last name of the customer.",
            "type": "string"
          },
          "organizationNumber": {
            "example": "5567037485",
            "readOnly": false,
            "description": "The organization number of the company.",
            "type": "string"
          },
          "socialSecurityNumber": {
            "example": "199004141234",
            "readOnly": false,
            "description": "The social security number of the customer.",
            "type": "string"
          }
        },
        "description": "Customer data found by a lookup, used to prefill fields when creating a new account."
      },
      "CustomerMessage": {
        "type": "object",
        "title": "CustomerMessage",
        "required": [
          "helpdesk",
          "mailAttachmentId",
          "prioritizeTemplateSender"
        ],
        "properties": {
          "attachments": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attachment"
            }
          },
          "helpdesk": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "helpdeskTagId": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HelpdeskTag"
            }
          },
          "mailAttachmentId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "notificationTemplate": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "orderedParameter": {
            "readOnly": false,
            "description": "",
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Entry"
              }
            }
          },
          "prioritizeTemplateSender": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "replyTo": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "templateParameter": {
            "readOnly": false,
            "description": "",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "property1": "...",
              "property2": "..."
            }
          }
        },
        "description": "Holds data related to customer message."
      },
      "CustomerResult": {
        "type": "object",
        "title": "CustomerResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Customer_CustomerResult"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Documentation Customer API result class"
      },
      "CustomerToAddOrUpdate": {
        "type": "object",
        "title": "CustomerToAddOrUpdate",
        "required": [
          "companyUser"
        ],
        "properties": {
          "addresses": {
            "readOnly": false,
            "description": "Other Addresses of the customer. Can be used to list different delivery address in checkout for example.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerAddress_CustomerAPI"
            }
          },
          "alternativeEmailAddress": {
            "example": "karl.karlsson.alt@mail.se",
            "readOnly": false,
            "description": "Alternative email address of the customer.",
            "type": "string"
          },
          "birthDate": {
            "example": "19770111",
            "readOnly": false,
            "description": "The date of birth of the customer. To reset the birthdate, enter 19000101.",
            "type": "string"
          },
          "blockCodeNumber": {
            "example": "04",
            "readOnly": false,
            "description": "The block code to be set on the customer. Codes of type \u0027forgotten\u0027 or \u0027system\u0027 are restricted and cannot be used. To reset a customer\u0027s block code, send the value for \u0027none\u0027 (typically 00).",
            "type": "string"
          },
          "cellphone": {
            "example": "+46712345678",
            "readOnly": false,
            "description": "Cell phone number of the customer.",
            "type": "string"
          },
          "companiesToAddOrUpdate": {
            "readOnly": false,
            "description": "Companies that this customer has access to if it\u0027s a company user.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerUser"
            }
          },
          "companyName": {
            "example": "Viskan System AB",
            "readOnly": false,
            "description": "Company name of the customer.",
            "type": "string"
          },
          "companyUser": {
            "readOnly": false,
            "description": "If the user is a company user or not.",
            "type": "boolean",
            "example": true
          },
          "creditLimit": {
            "example": 1500,
            "readOnly": false,
            "description": "The credit limit for the customer. If not provided, the system falls back to the default credit limit configured for the customer\u0027s invoice country.",
            "type": "number"
          },
          "customerNumber": {
            "example": "100011",
            "readOnly": false,
            "description": "The external number of the customer. Mandatory when updating, can be used when adding new customers if you use your own external numbering system otherwise it will be generated if empty",
            "type": "string"
          },
          "customerType": {
            "$ref": "#/components/schemas/CustomerType"
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/Address"
          },
          "emailAddress": {
            "example": "karl.karlsson@mail.se",
            "readOnly": false,
            "description": "Email address of the customer.",
            "type": "string"
          },
          "firstName": {
            "example": "Karl",
            "readOnly": false,
            "description": "First name of the customer.",
            "type": "string"
          },
          "gender": {
            "example": "FEMALE",
            "readOnly": false,
            "description": "The gender of the customer. Only applicable for private persons. Can be UNSPECIFIED, MALE or FEMALE",
            "type": "string"
          },
          "invoiceAddress": {
            "$ref": "#/components/schemas/Address"
          },
          "landline": {
            "example": "+46701740615",
            "readOnly": false,
            "description": "Landline phone number of the customer.",
            "type": "string"
          },
          "languageCode": {
            "example": "no",
            "readOnly": false,
            "description": "The language code of the customer. Must match a valid language code (e.g. \"sv\", \"no\", \"en\", \"SV\"). If not provided, the language field will be left empty.",
            "type": "string"
          },
          "lastName": {
            "example": "Karlsson",
            "readOnly": false,
            "description": "Last name of the customer.",
            "type": "string"
          },
          "multiBrandId": {
            "example": 1,
            "readOnly": false,
            "description": "The multibrand that the customer belongs to. Only applied when creating a customer; defaults to 1 if not provided. It cannot be changed for an existing customer, attempting to do so results in an error.",
            "type": "integer",
            "format": "int32"
          },
          "organizationNumber": {
            "example": "7711221234",
            "readOnly": false,
            "description": "The organization number of the customer.",
            "type": "string"
          },
          "priceList": {
            "$ref": "#/components/schemas/PriceList"
          },
          "reducedPricePercentage": {
            "example": 0.25,
            "readOnly": false,
            "description": "The reduced price in percentage for this customer. If set to 0.5 the customer will get a 50% discounted price on all products.",
            "type": "number"
          },
          "socialSecurityNumber": {
            "example": "197701116050",
            "readOnly": false,
            "description": "The social security number of the customer.",
            "type": "string"
          },
          "usersToAddOrUpdate": {
            "readOnly": false,
            "description": "Which users has access to this customer if it\u0027s a company.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerUser"
            }
          }
        },
        "description": "Contains a customer to add or update"
      },
      "CustomerToAddOrUpdateResult": {
        "type": "object",
        "title": "CustomerToAddOrUpdateResult",
        "properties": {
          "created": {
            "readOnly": false,
            "description": "The list of customers that were created.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerToAddOrUpdateResultCustomer"
            }
          },
          "updated": {
            "readOnly": false,
            "description": "The list of customers that were updated.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerToAddOrUpdateResultCustomer"
            }
          }
        },
        "description": "Holds information about created \u0026 updated customers."
      },
      "CustomerToAddOrUpdateResultCustomer": {
        "type": "object",
        "title": "CustomerToAddOrUpdateResultCustomer",
        "required": [
          "customerId"
        ],
        "properties": {
          "customerId": {
            "readOnly": false,
            "description": "The internal identifier.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "customerNumber": {
            "readOnly": false,
            "description": "The customer number.",
            "type": "string",
            "example": "..."
          },
          "emailAddress": {
            "readOnly": false,
            "description": "The email address.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Holds information about a created or updated customer."
      },
      "CustomerType": {
        "type": "string",
        "title": "CustomerType",
        "enum": [
          "COMPANY",
          "PERSON"
        ],
        "description": ""
      },
      "CustomerUser": {
        "type": "object",
        "title": "CustomerUser",
        "required": [
          "active",
          "admin",
          "customerId",
          "proxy"
        ],
        "properties": {
          "active": {
            "example": true,
            "readOnly": false,
            "description": "If connection should be active or not.",
            "type": "boolean"
          },
          "admin": {
            "example": true,
            "readOnly": false,
            "description": "If the user should be designated as an Administrator or not.",
            "type": "boolean"
          },
          "customerId": {
            "example": 123,
            "readOnly": false,
            "description": "The identifier of the customer.",
            "type": "integer",
            "format": "int32"
          },
          "proxy": {
            "example": true,
            "readOnly": false,
            "description": "If the user should be designated as a proxy or not.",
            "type": "boolean"
          }
        },
        "description": "The customer to add as a connection"
      },
      "CustomersToAddOrUpdate": {
        "type": "object",
        "title": "CustomersToAddOrUpdate",
        "properties": {
          "customersToAddOrUpdate": {
            "readOnly": false,
            "description": "The customers to add or update.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerToAddOrUpdate"
            }
          }
        },
        "description": "Contains a list of customers to add or update."
      },
      "DayOfWeek": {
        "type": "string",
        "title": "DayOfWeek",
        "enum": [
          "MONDAY",
          "TUESDAY",
          "WEDNESDAY",
          "THURSDAY",
          "FRIDAY",
          "SATURDAY",
          "SUNDAY"
        ],
        "description": "A day-of-week, such as \u0027Tuesday\u0027.\n\u003cp\u003e\nRepresents the 7 days of the week - Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday."
      },
      "DefaultAttributes": {
        "type": "object",
        "title": "DefaultAttributes",
        "properties": {
          "attribute1Number": {
            "example": "1066",
            "readOnly": false,
            "description": "The default attribute1 for this product, presented by number. E.g attribute1 is color.\nIf red is set as the default color then the product detail will show a red variant as the default product variant",
            "type": "string"
          },
          "attribute2Number": {
            "example": "4577",
            "readOnly": false,
            "description": "The default attribute2 for this product, presented by number. E.g attribute2 is size.\nIf XL is set as the default size then the product detail will show a variant with XL as the default product variant",
            "type": "string"
          },
          "attribute3Number": {
            "example": "456",
            "readOnly": false,
            "description": "The default attribute3 for this product, presented by number. E.g attribute3 is taste.\nIf cheese is set as the default taste then the product detail will show a cheese variant as the default product variant",
            "type": "string"
          }
        },
        "description": "Defines default attributes of a product."
      },
      "DefaultPaymentMethod": {
        "type": "object",
        "title": "DefaultPaymentMethod",
        "required": [
          "paymentMethodId"
        ],
        "properties": {
          "paymentMethodId": {
            "example": 104,
            "readOnly": false,
            "description": "Default payment method id.",
            "type": "integer",
            "format": "int32"
          },
          "paymentMethodName": {
            "example": "Invoice",
            "readOnly": false,
            "description": "Default payment method name.",
            "type": "string"
          }
        },
        "description": "Default Payment Method"
      },
      "DefaultTermsOfPayment": {
        "type": "object",
        "title": "DefaultTermsOfPayment",
        "required": [
          "daysToPay",
          "termsOfPaymentId"
        ],
        "properties": {
          "daysToPay": {
            "example": 14,
            "readOnly": false,
            "description": "Number of days the customer has to pay the invoice.",
            "type": "integer",
            "format": "int32"
          },
          "termsOfPaymentId": {
            "example": 100012,
            "readOnly": false,
            "description": "Default terms of payment id.",
            "type": "integer",
            "format": "int32"
          },
          "termsOfPaymentName": {
            "example": "Partial payment",
            "readOnly": false,
            "description": "Default terms of payment name.",
            "type": "string"
          }
        },
        "description": "Default Terms Of Payment"
      },
      "MyPagesDelivery": {
        "type": "object",
        "title": "Deliveries",
        "required": [
          "deliveryId"
        ],
        "properties": {
          "deliveryId": {
            "readOnly": false,
            "description": "The identifier for the delivery",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryNumber": {
            "readOnly": false,
            "description": "The external, unique number of the delivery (the invoice number)",
            "type": "string",
            "example": "..."
          },
          "deliveryStatus": {
            "$ref": "#/components/schemas/DeliveryStatus"
          },
          "discount": {
            "readOnly": false,
            "description": "Discount on \"head\" level. Does not include discount on the rows.",
            "type": "number",
            "example": 12345
          },
          "dueDate": {
            "readOnly": false,
            "description": "The due date if any",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "estimatedDeliveryDate": {
            "readOnly": false,
            "description": "The estimated date when the delivery was delivered. Only available for deliveries created from subscriptions.",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "invoiceDate": {
            "readOnly": false,
            "description": "The invoice date if any",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "orderNumber": {
            "readOnly": false,
            "description": "The order number of the delivery",
            "type": "string",
            "example": "..."
          },
          "orderType": {
            "$ref": "#/components/schemas/OrderType"
          },
          "paymentDate": {
            "readOnly": false,
            "description": "The payment date if any",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "paymentReference": {
            "readOnly": false,
            "description": "The payment reference if any",
            "type": "string",
            "example": "..."
          },
          "paymentStatus": {
            "$ref": "#/components/schemas/PaymentStatus"
          },
          "subscriptionDescription": {
            "readOnly": false,
            "description": "The description of the subscription the delivery originates from.",
            "type": "string",
            "example": "..."
          },
          "totalAmount": {
            "readOnly": false,
            "description": "The total amount to pay for this delivery.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Defines a delivery.\n\u003cp\u003e\nOne customer can have multiple deliveries and a delivery can potentially have delivery rows.\n\u003c/p\u003e"
      },
      "Delivery": {
        "type": "object",
        "title": "Delivery",
        "required": [
          "batchNumber",
          "deliveryId",
          "orderId",
          "warehouseId"
        ],
        "properties": {
          "batchNumber": {
            "example": 2490,
            "readOnly": false,
            "description": "The batch number that includes this delivery.",
            "type": "integer",
            "format": "int32"
          },
          "campaign": {
            "$ref": "#/components/schemas/Campaign_DeliveryAPI"
          },
          "currencyCode": {
            "readOnly": false,
            "description": "The iso3 currency code of the currency used.",
            "type": "string",
            "example": "..."
          },
          "customFields": {
            "readOnly": false,
            "description": "The Custom Fields for the delivery",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomFieldDelivery"
            }
          },
          "customer": {
            "$ref": "#/components/schemas/DeliveryCustomer"
          },
          "deliveryDate": {
            "example": "2020-09-30",
            "readOnly": false,
            "description": "The date when the delivery was actually delivered.",
            "type": "string",
            "format": "date"
          },
          "deliveryId": {
            "readOnly": false,
            "description": "The internal identifier of the delivery.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryMethod": {
            "$ref": "#/components/schemas/DeliveryMethod_DeliveryAPI"
          },
          "deliveryNote": {
            "readOnly": false,
            "description": "A delivery note",
            "type": "string",
            "example": "..."
          },
          "deliveryNumber": {
            "readOnly": false,
            "description": "The external number of the delivery.",
            "type": "string",
            "example": "..."
          },
          "deliveryPoint": {
            "$ref": "#/components/schemas/DeliveryPoint_DeliveryAPI"
          },
          "estimatedArrivalDate": {
            "example": "2020-09-28",
            "readOnly": false,
            "description": "The estimated date when the delivery is delivered to the customer. Only available when using shipping options and timeslot.",
            "type": "string",
            "format": "date"
          },
          "externalOrderNumber": {
            "readOnly": false,
            "description": "The number of the order that it has in a thirdparty system.",
            "type": "string",
            "example": "..."
          },
          "invoice": {
            "$ref": "#/components/schemas/DeliveryInvoice"
          },
          "methodOfArrivalNumber": {
            "example": "E01",
            "readOnly": false,
            "description": "Method of arrival.",
            "type": "string"
          },
          "minimumDeliveryDate": {
            "example": "2020-09-21",
            "readOnly": false,
            "description": "The earliest date when the order should be delivered.",
            "type": "string",
            "format": "date"
          },
          "orderDate": {
            "example": "2020-09-21",
            "readOnly": false,
            "description": "The date when the order behind the delivery was placed.",
            "type": "string",
            "format": "date"
          },
          "orderId": {
            "readOnly": false,
            "description": "The internal identifier of the order.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "orderNumber": {
            "readOnly": false,
            "description": "The external number of the order.",
            "type": "string",
            "example": "..."
          },
          "parcels": {
            "readOnly": false,
            "description": "The parcels of this delivery.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeliveryParcel"
            }
          },
          "paymentMethod": {
            "$ref": "#/components/schemas/PaymentMethod_DeliveryAPI"
          },
          "paymentReferences": {
            "readOnly": false,
            "description": "The payment references related to this delivery\u0027s order.\n\nContains both order-level and delivery-level transactions. On orders split into multiple deliveries,\norder-level transactions can appear on each delivery. Use transactionType to distinguish them\n(for example AUTHORIZATION/SALE are order-level while CAPTURE/REFUND are delivery-level).",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentReference"
            }
          },
          "physicalStoreNumber": {
            "example": "S01",
            "readOnly": false,
            "description": "The number of the physical store where the order was placed. \u003ccode\u003enull\u003c/code\u003e when the order was not placed in a physical store.\n\u003cp\u003eNot to be confused with \u003ccode\u003edeliveryPoint\u003c/code\u003e, which is where the consumer picks up the goods.\u003c/p\u003e",
            "type": "string"
          },
          "processChain": {
            "readOnly": false,
            "description": "The process chain of the delivery.",
            "type": "string",
            "example": "..."
          },
          "processStatus": {
            "readOnly": false,
            "description": "The process status of the delivery.",
            "type": "string",
            "example": "..."
          },
          "purchaseNumber": {
            "readOnly": false,
            "description": "The external number of the purchase.",
            "type": "string",
            "example": "..."
          },
          "rows": {
            "readOnly": false,
            "description": "The rows of the delivery.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeliveryRow"
            }
          },
          "seller": {
            "$ref": "#/components/schemas/Seller_DeliveryAPI"
          },
          "shippingOption": {
            "$ref": "#/components/schemas/ShippingOption"
          },
          "status": {
            "$ref": "#/components/schemas/DeliveryStatus_DeliveryAPI"
          },
          "subscriptionInformation": {
            "$ref": "#/components/schemas/SubscriptionInformation"
          },
          "taxRates": {
            "readOnly": false,
            "description": "The tax rates of the delivery.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeliveryTaxRate"
            }
          },
          "termsOfPayment": {
            "$ref": "#/components/schemas/TermsOfPayment"
          },
          "value": {
            "$ref": "#/components/schemas/DeliveryValue"
          },
          "warehouseId": {
            "readOnly": false,
            "description": "The id of the warehouse used for this delivery.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "warehouseNumber": {
            "readOnly": false,
            "description": "The number of the warehouse used for this delivery",
            "type": "string",
            "example": "..."
          },
          "webStoreNumber": {
            "example": "888",
            "readOnly": false,
            "description": "Web store where the order is placed. Only applicable for web orders, subscription based orders and physical store orders are not supported.",
            "type": "string"
          }
        },
        "description": "A delivery."
      },
      "DeliveryAddress": {
        "type": "object",
        "title": "DeliveryAddress",
        "properties": {
          "addressLine1": {
            "readOnly": false,
            "description": "The street address of the address.",
            "type": "string",
            "example": "..."
          },
          "addressLine2": {
            "readOnly": false,
            "description": "Indicates the additional address info, apartment etc.",
            "type": "string",
            "example": "..."
          },
          "administrativeDivision": {
            "readOnly": false,
            "description": "The state/province/region of the address.",
            "type": "string",
            "example": "..."
          },
          "alternativeEmailAddress": {
            "readOnly": false,
            "description": "The alternative email address for the receiver of the address.",
            "type": "string",
            "example": "..."
          },
          "careOf": {
            "readOnly": false,
            "description": "The c/o address.",
            "type": "string",
            "example": "..."
          },
          "cellphone": {
            "readOnly": false,
            "description": "The phone number of the receiver for the address.",
            "type": "string",
            "example": "..."
          },
          "city": {
            "readOnly": false,
            "description": "The city/postal city of the address.",
            "type": "string",
            "example": "..."
          },
          "companyName": {
            "readOnly": false,
            "description": "The name of the company for the address.",
            "type": "string",
            "example": "..."
          },
          "countryCode": {
            "readOnly": false,
            "description": "The country code of the address.",
            "type": "string",
            "example": "..."
          },
          "emailAddress": {
            "readOnly": false,
            "description": "The email address for the receiver of the address.",
            "type": "string",
            "example": "..."
          },
          "firstName": {
            "readOnly": false,
            "description": "The first name of the receiver for this address.",
            "type": "string",
            "example": "..."
          },
          "lastName": {
            "readOnly": false,
            "description": "The last name of the receiver for this address.",
            "type": "string",
            "example": "..."
          },
          "zipcode": {
            "readOnly": false,
            "description": "The zipcode of the address.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Holds delivery addresses for a customer."
      },
      "DeliveryChanges": {
        "type": "object",
        "title": "DeliveryChanges",
        "required": [
          "markAllRowsAsPicked",
          "pickingComplete"
        ],
        "properties": {
          "customFieldsToAdd": {
            "readOnly": false,
            "description": "The custom fields to add to the delivery. Any existing custom field will be overwritten.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomFieldDeliveryChanges"
            }
          },
          "markAllRowsAsPicked": {
            "readOnly": false,
            "description": "Marks all rows connected to a delivery as picked so it can be reported. Mutual exclusive with RowsToUpdate, difference is that no additional information needs to be supplied for the delivery.\npickingComplete will automatically be set to true when using this flag and can not be overridden.",
            "type": "boolean",
            "example": true
          },
          "parcelsToAdd": {
            "readOnly": false,
            "description": "Contains a list of parcels to add to the delivery.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeliveryParcel"
            }
          },
          "pickingComplete": {
            "readOnly": false,
            "description": "Whether or not to report the delivery, marking it as picked and sent to the consumer.",
            "type": "boolean",
            "example": true
          },
          "rowsToUpdate": {
            "readOnly": false,
            "description": "Contains changes to apply for delivery rows.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeliveryRowChanges"
            }
          }
        },
        "description": "Contains changes that applies to a delivery."
      },
      "DeliveryCustomer": {
        "type": "object",
        "title": "DeliveryCustomer",
        "required": [
          "customerId",
          "internal",
          "multiBrandId"
        ],
        "properties": {
          "alternativeEmailAddress": {
            "example": "info@viskan.com",
            "readOnly": false,
            "description": "The alternative email address of the customer.",
            "type": "string"
          },
          "bonusPoints": {
            "readOnly": false,
            "description": "The number of bonus points available.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "cellphone": {
            "example": "",
            "readOnly": false,
            "description": "The cell phone number of the customer.",
            "type": "string"
          },
          "companyName": {
            "example": "Viskan System AB",
            "readOnly": false,
            "description": "The company name of the customer, if the customer is a company. Mutually exclusive with \u003ccode\u003efirstName\u003c/code\u003e and \u003ccode\u003elastName\u003c/code\u003e.",
            "type": "string"
          },
          "contactPerson": {
            "example": "",
            "readOnly": false,
            "description": "The contact person name of the customer, if the customer is a company.",
            "type": "string"
          },
          "customerBalance": {
            "example": 125,
            "readOnly": false,
            "description": "The current balance of the customer.",
            "type": "number"
          },
          "customerId": {
            "example": 123,
            "readOnly": false,
            "description": "The unique, internal identifier of the customer.",
            "type": "integer",
            "format": "int32"
          },
          "customerNumber": {
            "readOnly": false,
            "description": "The unique, external number of the customer.",
            "type": "string",
            "example": "..."
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/AddressWithName"
          },
          "emailAddress": {
            "example": "info@viskan.com",
            "readOnly": false,
            "description": "The email address of the customer.",
            "type": "string"
          },
          "firstName": {
            "example": "",
            "readOnly": false,
            "description": "The first name of the customer, if the customer is a person. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e.",
            "type": "string"
          },
          "internal": {
            "example": false,
            "readOnly": false,
            "description": "Whether or not the customer is an internal customer.",
            "type": "boolean"
          },
          "invoiceAddress": {
            "$ref": "#/components/schemas/AddressWithName"
          },
          "landLine": {
            "example": "+46712345678",
            "readOnly": false,
            "description": "The land line of the customer.",
            "type": "string"
          },
          "lastName": {
            "example": "",
            "readOnly": false,
            "description": "The last name of the customer, if the customer is a person. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e.",
            "type": "string"
          },
          "multiBrandId": {
            "example": 1,
            "readOnly": false,
            "description": "The multibrand (concept) the customer belongs to.",
            "type": "integer",
            "format": "int32"
          },
          "organizationNumber": {
            "example": "556590-1864",
            "readOnly": false,
            "description": "The organization number of the customer, if the customer is a company.",
            "type": "string"
          },
          "socialSecurityNumber": {
            "example": "556590-1864",
            "readOnly": false,
            "description": "The social security number of the customer, if the customer is a person.",
            "type": "string"
          },
          "vatRegistrationNumber": {
            "example": "DE123456789",
            "readOnly": false,
            "description": "VAT Registration Number of the customer.",
            "type": "string"
          }
        },
        "description": "Contains customer information for a delivery."
      },
      "MyPagesDeliveryDetails": {
        "type": "object",
        "title": "DeliveryDetails",
        "required": [
          "deliveryId"
        ],
        "properties": {
          "customFields": {
            "readOnly": false,
            "description": "The custom fields of the delivery.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MyPagesDeliveryCustomField"
            }
          },
          "deliveryId": {
            "readOnly": false,
            "description": "The identifier for the delivery",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryNumber": {
            "readOnly": false,
            "description": "The external, unique number of the delivery (the invoice number)",
            "type": "string",
            "example": "..."
          },
          "deliveryStatus": {
            "$ref": "#/components/schemas/DeliveryStatus"
          },
          "discount": {
            "readOnly": false,
            "description": "Discount on \"head\" level. Does not include discount on the rows.",
            "type": "number",
            "example": 12345
          },
          "dueDate": {
            "readOnly": false,
            "description": "The due date if any",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "estimatedDeliveryDate": {
            "readOnly": false,
            "description": "The estimated date when the delivery was delivered. Only available for deliveries created from subscriptions.",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "invoiceDate": {
            "readOnly": false,
            "description": "The invoice date if any",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "orderNumber": {
            "readOnly": false,
            "description": "The order number of the delivery",
            "type": "string",
            "example": "..."
          },
          "orderType": {
            "$ref": "#/components/schemas/OrderType"
          },
          "paymentDate": {
            "readOnly": false,
            "description": "The payment date if any",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "paymentReference": {
            "readOnly": false,
            "description": "The payment reference if any",
            "type": "string",
            "example": "..."
          },
          "paymentStatus": {
            "$ref": "#/components/schemas/PaymentStatus"
          },
          "rows": {
            "readOnly": false,
            "description": "The rows of the delivery.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MyPagesDeliveryRow"
            }
          },
          "subscriptionDescription": {
            "readOnly": false,
            "description": "The description of the subscription the delivery originates from.",
            "type": "string",
            "example": "..."
          },
          "totalAmount": {
            "readOnly": false,
            "description": "The total amount to pay for this delivery.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Defines a delivery.\n\u003cp\u003e\nOne customer can have multiple deliveries and a delivery can potentially have delivery rows.\n\u003c/p\u003e"
      },
      "DeliveryEveryNth": {
        "type": "string",
        "title": "DeliveryEveryNth",
        "enum": [
          "EVERY_DELIVERY",
          "EVERY_SECOND_DELIVERY",
          "EVERY_THIRD_DELIVERY",
          "EVERY_FOURTH_DELIVERY",
          "EVEN_WEEKS",
          "UNEVEN_WEEKS"
        ],
        "description": ""
      },
      "DeliveryInvoice": {
        "type": "object",
        "title": "DeliveryInvoice",
        "properties": {
          "amountCheckSum": {
            "example": "1",
            "readOnly": false,
            "description": "The checksum for the payment.",
            "type": "string"
          },
          "amountToPay": {
            "example": 50.55,
            "readOnly": false,
            "description": "The remaining amount to be paid on the invoice (the invoice balance).\n\u003cp\u003eIn general, this is the total value of the delivery minus \u003ccode\u003epaidAmount\u003c/code\u003e, \u003ccode\u003ecreditedAmount\u003c/code\u003e and\n\u003ccode\u003etransferredAmount\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eA negative value means that more has been paid or credited than the invoice total.\u003c/p\u003e\n\u003cp\u003eRefunds to the customer increase the amount to pay and are not shown in \u003ccode\u003epaidAmount\u003c/code\u003e, \u003ccode\u003ecreditedAmount\u003c/code\u003e\nor \u003ccode\u003etransferredAmount\u003c/code\u003e.\u003c/p\u003e",
            "type": "number"
          },
          "creditedAmount": {
            "example": 25,
            "readOnly": false,
            "description": "The amount that has been credited on the invoice, for example through credit notes, returns or customer losses.\n\u003cp\u003eA positive amount reduces the amount to pay. The value is \u003ccode\u003e0.00\u003c/code\u003e when nothing has been credited.\u003c/p\u003e",
            "type": "number"
          },
          "dueDate": {
            "example": "2024-06-10",
            "readOnly": false,
            "description": "The due date of the invoice.",
            "type": "string",
            "format": "date"
          },
          "invoiceDate": {
            "example": "2024-05-31",
            "readOnly": false,
            "description": "The date when the invoice was created.",
            "type": "string",
            "format": "date"
          },
          "invoiceNumber": {
            "example": "126726",
            "readOnly": false,
            "description": "The number of the invoice.",
            "type": "string"
          },
          "paidAmount": {
            "example": 150.05,
            "readOnly": false,
            "description": "The amount that has been paid directly on the invoice, including prepayments.\n\u003cp\u003eCredited and transferred amounts are not included, see \u003ccode\u003ecreditedAmount\u003c/code\u003e and \u003ccode\u003etransferredAmount\u003c/code\u003e.\nFor factoring invoices, the payment from the factoring company is not included.\u003c/p\u003e",
            "type": "number"
          },
          "transactionReference": {
            "example": "375922423",
            "readOnly": false,
            "description": "The transaction reference of the invoice.",
            "type": "string"
          },
          "transferredAmount": {
            "example": 100,
            "readOnly": false,
            "description": "The net amount that has been transferred to or from the invoice, for example from another invoice or from the customer\u0027s\noutstanding account.\n\u003cul\u003e\n\u003cli\u003eA positive amount has been transferred \u003cb\u003eto\u003c/b\u003e the invoice and reduces the amount to pay.\u003c/li\u003e\n\u003cli\u003eA \u003cb\u003enegative\u003c/b\u003e amount has been transferred \u003cb\u003efrom\u003c/b\u003e the invoice, for example to another invoice or to the\ncustomer\u0027s outstanding account.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e0.00\u003c/code\u003e means that there is no net transfer. Transfers that were later reversed cancel each other out.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This amount includes the transfer from the customer\u0027s outstanding account\n(\u003ccode\u003etransferredFromCustomerAmount\u003c/code\u003e) and any later reversal of it. Do not add the two amounts together.\u003c/p\u003e",
            "type": "number"
          },
          "transferredFromCustomerAmount": {
            "example": 100,
            "readOnly": false,
            "description": "The amount that was transferred from the customer\u0027s outstanding account to the invoice when the invoice was created.\n\u003cp\u003eFor example, if the customer has an outstanding account of 100.00 and the invoice total is 249.00, the transferred amount is\n100.00 and 149.00 remains to be paid.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eA positive amount means that the customer\u0027s outstanding account was used to pay the invoice.\u003c/li\u003e\n\u003cli\u003eA negative amount is rare. It can occur if a prepayment was larger than the invoiced amount and the excess was transferred\nto the customer\u0027s outstanding account.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e0.00\u003c/code\u003e means that no transfer was made.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This amount is recalculated while the shipment is not yet reported, for example after a PATCH that changes\nquantities or prices. It is not updated after the shipment is reported. If the transfer is later reversed, for example when\nthe invoice is canceled or credited, only \u003ccode\u003etransferredAmount\u003c/code\u003e reflects it.\u003c/p\u003e",
            "type": "number"
          }
        },
        "description": "Contains information to be printed in the delivery invoice."
      },
      "DeliveryMethod_DeliveryAPI": {
        "type": "object",
        "title": "DeliveryMethod",
        "required": [
          "deliveryMethodId"
        ],
        "properties": {
          "customParcelLabel": {
            "example": "Open at 11 oclock",
            "readOnly": false,
            "description": "Custom parcel label text that can be printed on the label as a note for parcel delivery personnel",
            "type": "string"
          },
          "deliveryMethodId": {
            "example": 19,
            "readOnly": false,
            "description": "The internal identifier of the method.",
            "type": "integer",
            "format": "int32"
          },
          "deliveryMethodName": {
            "example": "MyPack",
            "readOnly": false,
            "description": "The public name of the method.",
            "type": "string"
          },
          "externalDeliveryMethodCode": {
            "example": "HOME-01",
            "readOnly": false,
            "description": "The external code of the method, the stable identifier integrations address it by. Empty when none is set.",
            "type": "string"
          },
          "methodName": {
            "readOnly": false,
            "description": "Deprecated in favor of deliveryMethodName",
            "type": "string"
          },
          "productCode": {
            "example": "A01",
            "readOnly": false,
            "description": "The code of the product at the shipping company.",
            "type": "string"
          },
          "serviceProvider": {
            "$ref": "#/components/schemas/ServiceProvider"
          },
          "shippingReference": {
            "example": "01HMRVKPAGQPA0FM06H7S890XZ",
            "readOnly": false,
            "description": "The shipping reference of this delivery.",
            "type": "string"
          }
        },
        "description": "The method being used to deliver the goods to the consumer."
      },
      "DeliveryMethod": {
        "type": "object",
        "title": "DeliveryMethod",
        "required": [
          "deliveryMethodId"
        ],
        "properties": {
          "deliveryMethodId": {
            "readOnly": false,
            "description": "The ID of the delivery method.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryMethodName": {
            "example": "In-store pickup",
            "readOnly": false,
            "description": "The name of the delivery method.",
            "type": "string"
          },
          "deliveryPointRule": {
            "$ref": "#/components/schemas/DeliveryPointRule"
          },
          "methodCode": {
            "readOnly": false,
            "description": "Deprecated in favor of \u003ccode\u003edeliveryMethodName\u003c/code\u003e",
            "type": "string"
          },
          "methodDescription": {
            "example": "Goods are delivered to a store where they can be picked up. The consumer is notified by a text message.",
            "readOnly": false,
            "description": "A short description of the delivery method.",
            "type": "string"
          },
          "methodName": {
            "readOnly": false,
            "description": "Deprecated in favor of \u003ccode\u003edeliveryMethodName\u003c/code\u003e",
            "type": "string"
          },
          "provider": {
            "$ref": "#/components/schemas/LogisticsProvider"
          },
          "shippingFee": {
            "example": 19,
            "readOnly": false,
            "description": "The shipping fee for this method for the filtered country.",
            "type": "number"
          },
          "timeSlotRule": {
            "$ref": "#/components/schemas/TimeSlotRule"
          }
        },
        "description": "Defines a delivery method that can be used to deliver goods to the consumers."
      },
      "DeliveryMethod_OrderAPI": {
        "type": "object",
        "title": "DeliveryMethod",
        "required": [
          "deliveryMethodId"
        ],
        "properties": {
          "customParcelLabel": {
            "example": "Open at 11 oclock",
            "readOnly": false,
            "description": "The custom parcel label of the method.",
            "type": "string"
          },
          "deliveryMethodId": {
            "example": 19,
            "readOnly": false,
            "description": "The internal identifier of the method.",
            "type": "integer",
            "format": "int32"
          },
          "deliveryMethodName": {
            "example": "MyPack",
            "readOnly": false,
            "description": "The public name of the method.",
            "type": "string"
          },
          "externalDeliveryMethodCode": {
            "example": "HOME-01",
            "readOnly": false,
            "description": "The external code of the method, the stable identifier integrations address it by. Empty when none is set.",
            "type": "string"
          },
          "methodName": {
            "readOnly": false,
            "description": "Deprecated in favor of deliveryMethodName",
            "type": "string"
          },
          "productCode": {
            "example": "A01",
            "readOnly": false,
            "description": "The product code of the method.",
            "type": "string"
          },
          "serviceProvider": {
            "example": "PostNord",
            "readOnly": false,
            "description": "The service provider of the method.",
            "type": "string"
          },
          "shippingReference": {
            "example": "37W15728OP640392F",
            "readOnly": false,
            "description": "The shipping reference of the method.",
            "type": "string"
          }
        },
        "description": "The method being used to deliver the goods to the consumer."
      },
      "DeliveryMethod_DeliveryMethodAPI": {
        "type": "object",
        "title": "DeliveryMethod",
        "required": [
          "deliveryMethodId"
        ],
        "properties": {
          "deliveryMethodId": {
            "readOnly": false,
            "description": "The internal identifier of the delivery method.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryMethodName": {
            "readOnly": false,
            "description": "The public name of the method of delivery.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Method of delivering goods to end customer"
      },
      "DeliveryMethodResult": {
        "type": "object",
        "title": "DeliveryMethodResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The delivery methods in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeliveryMethod_DeliveryMethodAPI"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a search result of delivery method."
      },
      "DeliveryParcel": {
        "type": "object",
        "title": "DeliveryParcel",
        "required": [
          "returnParcel",
          "revoked"
        ],
        "properties": {
          "currentDeliveryPoint": {
            "$ref": "#/components/schemas/CurrentDeliveryPoint"
          },
          "parcelNumber": {
            "example": "AE5O6742852SE",
            "readOnly": false,
            "description": "The parcel number (shipment number) of the parcel.",
            "type": "string"
          },
          "returnParcel": {
            "readOnly": false,
            "description": "Whether this parcel is a return parcel.",
            "type": "boolean",
            "example": true
          },
          "revoked": {
            "example": false,
            "readOnly": false,
            "description": "The revoked flag is the withdrawal status of the parcel and is only applicable for in-store parcel.",
            "type": "boolean"
          },
          "status": {
            "$ref": "#/components/schemas/ParcelStatus"
          }
        },
        "description": "Holds information about a single parcel."
      },
      "DeliveryPoint_DeliveryAPI": {
        "type": "object",
        "title": "DeliveryPoint",
        "required": [
          "deliveryPointId"
        ],
        "properties": {
          "carrier": {
            "readOnly": false,
            "description": "The name of the carrier.",
            "type": "string",
            "example": "..."
          },
          "carrierLookup": {
            "readOnly": false,
            "description": "The name of the carrier in the lookup language.",
            "type": "string",
            "example": "..."
          },
          "deliveryPointAddress": {
            "$ref": "#/components/schemas/DeliveryPointAddress"
          },
          "deliveryPointCode": {
            "readOnly": false,
            "description": "The unique code of the delivery point. It\u0027s unique per carrier.",
            "type": "string",
            "example": "..."
          },
          "deliveryPointId": {
            "readOnly": false,
            "description": "The internal identifier of the delivery point.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryPointName": {
            "readOnly": false,
            "description": "The public name of the delivery point.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Holds information about the delivery point for the delivery."
      },
      "DeliveryPoint": {
        "type": "object",
        "title": "DeliveryPoint",
        "required": [
          "deliveryPointId",
          "pickingHub"
        ],
        "properties": {
          "address": {
            "$ref": "#/components/schemas/AddressWithGeolocation"
          },
          "deliveryPointCode": {
            "readOnly": false,
            "description": "The code of the delivery point.",
            "type": "string",
            "example": "..."
          },
          "deliveryPointId": {
            "readOnly": false,
            "description": "The identifier of the delivery point.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryPointName": {
            "readOnly": false,
            "description": "The name of the delivery point.",
            "type": "string",
            "example": "..."
          },
          "email": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "pickingHub": {
            "readOnly": false,
            "description": "Indicates if the delivery point is used as a picking hub",
            "type": "boolean",
            "example": true
          },
          "provider": {
            "$ref": "#/components/schemas/LogisticsProvider"
          },
          "zipcodes": {
            "readOnly": false,
            "description": "This delivery point serves these zip codes",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          }
        },
        "description": "A delivery point is a physical location where shipped goods can be picked up. These can be of arbitrary type, for example physical stores or post offices.\nThese delivery points are bound to a logistics provider. For example, \u0027Posten\u0027 have different delivery points than \u0027In-store pickup\u0027."
      },
      "DeliveryPointAddress": {
        "type": "object",
        "title": "DeliveryPointAddress",
        "properties": {
          "addressLine1": {
            "example": "Druveforsvägen 8",
            "readOnly": false,
            "description": "The first address line, usually street address.",
            "type": "string"
          },
          "city": {
            "example": "BORÅS",
            "readOnly": false,
            "description": "The city of the address.",
            "type": "string"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the address, in ISO alpha-2 format, for example \u003ccode\u003eSE\u003c/code\u003e.",
            "type": "string"
          },
          "zipCode": {
            "example": "50454",
            "readOnly": false,
            "description": "The zipcode/postal code of the address.",
            "type": "string"
          }
        },
        "description": "Information about a delivery point address."
      },
      "DeliveryPointRule": {
        "type": "string",
        "title": "DeliveryPointRule",
        "enum": [
          "MANDATORY",
          "OPTIONAL",
          "ILLEGAL"
        ],
        "description": "Controls the rules for delivery points of a delivery method."
      },
      "DeliveryResult": {
        "type": "object",
        "title": "DeliveryResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The deliveries in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Delivery"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "searchStartedAt": {
            "example": "2026-06-02T15:20:03.123Z",
            "readOnly": false,
            "description": "The date and time when the search was started. This value can be used as the \u003ccode\u003emodifiedAfter\u003c/code\u003e parameter the \u003cstrong\u003enext\u003c/strong\u003e time\nyou make an API request to search for shipments. \u003cstrong\u003eNote:\u003c/strong\u003e This value is only returned on the initial search (when there is no\n\u003ccode\u003esearchId\u003c/code\u003e).",
            "type": "string",
            "format": "date-time"
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a search result of deliveries."
      },
      "MyPagesDeliveryRow": {
        "type": "object",
        "title": "DeliveryRow",
        "required": [
          "quantity"
        ],
        "properties": {
          "attribute1Code": {
            "readOnly": false,
            "description": "The attribute1 code of the product",
            "type": "string",
            "example": "..."
          },
          "attribute2Code": {
            "readOnly": false,
            "description": "The attribute2 code of the product",
            "type": "string",
            "example": "..."
          },
          "discount": {
            "readOnly": false,
            "description": "The discount in monetary value of this row",
            "type": "number",
            "example": 12345
          },
          "productId": {
            "readOnly": false,
            "description": "The internal product identifier",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productName": {
            "readOnly": false,
            "description": "The product name",
            "type": "string",
            "example": "..."
          },
          "productNumber": {
            "readOnly": false,
            "description": "The product number",
            "type": "string",
            "example": "..."
          },
          "productType": {
            "$ref": "#/components/schemas/ArticleType"
          },
          "quantity": {
            "readOnly": false,
            "description": "The number of items of this row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "status": {
            "$ref": "#/components/schemas/DeliveryRowStatus"
          },
          "unitPrice": {
            "readOnly": false,
            "description": "The unit price of this row.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Defines a delivery row"
      },
      "DeliveryRow": {
        "type": "object",
        "title": "DeliveryRow",
        "required": [
          "parentRowId",
          "quantity",
          "quantityReturned",
          "quantitySent",
          "rowId",
          "shouldBePicked",
          "stockKeepingUnitId",
          "warehouseId"
        ],
        "properties": {
          "accountingAccountForSales": {
            "readOnly": false,
            "description": "The bookkeeping account for sales.",
            "type": "string",
            "example": "..."
          },
          "additionalRowText": {
            "readOnly": false,
            "description": "The additional text for the delivery row.",
            "type": "string",
            "example": "..."
          },
          "campaign": {
            "$ref": "#/components/schemas/Campaign_DeliveryAPI"
          },
          "costOfGoodsSold": {
            "readOnly": false,
            "description": "This amount includes the cost of the materials and labor directly used to create the good. It excludes indirect expenses, such as distribution costs and sales force costs.",
            "type": "number",
            "example": 12345
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "The European article number (EAN13) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "parentRowId": {
            "readOnly": false,
            "description": "The row id for the parent of this row.\n\u003cp\u003eApplies to FLEXIBLE_PACKAGES, COPY_PRODUCT, STATIC_PACKAGE and MULTI_PACKAGE.\nAlso applies to add-ons for NORMAL products.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThis field contains \"0\" when no parent exists.\u003c/li\u003e\n\u003cli\u003eFor an add-on or child row this field holds the rowId of its parent row, which is always different from this row\u0027s own rowId.\u003c/li\u003e\n\u003cli\u003eIf a packaged product (FLEXIBLE_PACKAGES) contains other packaged products\n(COPY_PRODUCT, STATIC_PACKAGE and MULTI_PACKAGE), all parts of the\npackaged products point to the \"closest\" parent.\u003c/li\u003e\n\u003c/ul\u003e",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "personalizationText": {
            "readOnly": false,
            "description": "Personalization text to customize the row of the order.",
            "type": "string",
            "example": "..."
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price lookup number (PLUNO) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit. \u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "productName": {
            "readOnly": false,
            "description": "The translated name of the product in the consumers language.",
            "type": "string",
            "example": "..."
          },
          "quantity": {
            "readOnly": false,
            "description": "The quantity being delivered.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "quantityReturned": {
            "readOnly": false,
            "description": "The quantity that has been returned.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "quantitySent": {
            "readOnly": false,
            "description": "The quantity that has been sent.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "rowId": {
            "readOnly": false,
            "description": "The identifier of the row within the order.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "shouldBePicked": {
            "readOnly": false,
            "description": "Signifies if row should be physically picked or not.",
            "type": "boolean",
            "example": true
          },
          "status": {
            "$ref": "#/components/schemas/DeliveryRowStatus_DeliveryAPI"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The internal identifier of the stock keeping unit.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "value": {
            "$ref": "#/components/schemas/DeliveryRowValue"
          },
          "warehouseId": {
            "readOnly": false,
            "description": "The WarehouseID of the delivery row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "warehouseNumber": {
            "readOnly": false,
            "description": "The WarehouseNumber of the delivery row.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "A single row of a delivery."
      },
      "DeliveryRowChanges": {
        "type": "object",
        "title": "DeliveryRowChanges",
        "required": [
          "rowId"
        ],
        "properties": {
          "quantitySent": {
            "readOnly": false,
            "description": "Sets the total quantity sent. This value cannot be larger than the ordered quantity value.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "rowId": {
            "readOnly": false,
            "description": "The identifier of the row to update. This value is mandatory.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "value": {
            "$ref": "#/components/schemas/DeliveryValueUpdate"
          }
        },
        "description": "Contains changes that applies to a delivery row."
      },
      "DeliveryRowStatus_DeliveryAPI": {
        "type": "string",
        "title": "DeliveryRowStatus",
        "enum": [
          "CREATED",
          "DELIVERED",
          "CANCELED"
        ],
        "description": "The status of a delivery row."
      },
      "DeliveryRowStatus": {
        "type": "string",
        "title": "DeliveryRowStatus",
        "enum": [
          "CREATED",
          "REPORTED",
          "CANCELED"
        ],
        "description": "Defines possible statuses for delivery rows."
      },
      "DeliveryRowValue": {
        "type": "object",
        "title": "DeliveryRowValue",
        "properties": {
          "discount": {
            "readOnly": false,
            "description": "Deprecated. Use discountIncludingTax instead. The total discount of the row.",
            "type": "number"
          },
          "discountExcludingTax": {
            "readOnly": false,
            "description": "The total discount excluding tax of the row.",
            "type": "number",
            "example": 12345
          },
          "discountIncludingTax": {
            "readOnly": false,
            "description": "The total discount including tax of the row.",
            "type": "number",
            "example": 12345
          },
          "taxRate": {
            "readOnly": false,
            "description": "The tax rate of the row.",
            "type": "number",
            "example": 12345
          },
          "total": {
            "readOnly": false,
            "description": "Deprecated. Use totalIncludingTax instead. The total value of the row.",
            "type": "number"
          },
          "totalExcludingTax": {
            "readOnly": false,
            "description": "The total value excluding tax of the row.",
            "type": "number",
            "example": 12345
          },
          "totalIncludingTax": {
            "readOnly": false,
            "description": "The total value including tax of the row.",
            "type": "number",
            "example": 12345
          },
          "unitPrice": {
            "readOnly": false,
            "description": "Deprecated. Use unitPriceIncludingTax instead. The unit price of the row.",
            "type": "number"
          },
          "unitPriceExcludingTax": {
            "readOnly": false,
            "description": "The unit price excluding tax of the row.",
            "type": "number",
            "example": 12345
          },
          "unitPriceIncludingTax": {
            "readOnly": false,
            "description": "The unit price including tax of the row.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Contains values of a delivery row."
      },
      "DeliveryStatus_DeliveryAPI": {
        "type": "string",
        "title": "DeliveryStatus",
        "enum": [
          "CREATED",
          "DELIVERED",
          "CANCELED"
        ],
        "description": "The status of a delivery."
      },
      "DeliveryStatus": {
        "type": "string",
        "title": "DeliveryStatus",
        "enum": [
          "CREATED",
          "PARTIALLY_REPORTED",
          "REPORTED",
          "CANCELED"
        ],
        "description": "Defines possible statuses for deliveries."
      },
      "DeliveryTaxRate": {
        "type": "object",
        "title": "DeliveryTaxRate",
        "properties": {
          "amountExcludingTax": {
            "readOnly": false,
            "description": "The amount including tax rate.",
            "type": "number",
            "example": 12345
          },
          "taxAmount": {
            "readOnly": false,
            "description": "The amount excluding tax rate.",
            "type": "number",
            "example": 12345
          },
          "taxRate": {
            "readOnly": false,
            "description": "The tax rate.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Contains tax rates"
      },
      "DeliveryValue": {
        "type": "object",
        "title": "DeliveryValue",
        "properties": {
          "charge": {
            "readOnly": false,
            "description": "The charge of the delivery.",
            "type": "number",
            "example": 12345
          },
          "chargeExcludingTaxRate": {
            "readOnly": false,
            "description": "The charge of the delivery excluding tax rate.",
            "type": "number",
            "example": 12345
          },
          "discount": {
            "readOnly": false,
            "description": "The discount of the delivery.",
            "type": "number",
            "example": 12345
          },
          "discountExcludingTaxRate": {
            "readOnly": false,
            "description": "The discount of the delivery excluding tax rate.",
            "type": "number",
            "example": 12345
          },
          "paymentFee": {
            "readOnly": false,
            "description": "The payment fee of the delivery.",
            "type": "number",
            "example": 12345
          },
          "paymentFeeExcludingTaxRate": {
            "readOnly": false,
            "description": "The payment fee of the delivery excluding tax rate.",
            "type": "number",
            "example": 12345
          },
          "rounding": {
            "readOnly": false,
            "description": "The rounding of the invoice.",
            "type": "number",
            "example": 12345
          },
          "shippingFee": {
            "readOnly": false,
            "description": "The shipping fee of the delivery.",
            "type": "number",
            "example": 12345
          },
          "shippingFeeExcludingTaxRate": {
            "readOnly": false,
            "description": "The shipping fee of the delivery excluding tax rate.",
            "type": "number",
            "example": 12345
          },
          "total": {
            "readOnly": false,
            "description": "The total value of the delivery.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Contains values of the delivery."
      },
      "DeliveryValueUpdate": {
        "type": "object",
        "title": "DeliveryValueUpdate",
        "properties": {
          "discountExcludingTax": {
            "readOnly": false,
            "description": "The discount of the delivery excluding tax, mutually exclusive with discountIncludingTax.",
            "type": "number",
            "example": 12345
          },
          "discountIncludingTax": {
            "example": 10,
            "readOnly": false,
            "description": "The discount of the delivery including tax, mutually exclusive with discountExcludingTax.",
            "type": "number"
          },
          "priceExcludingTax": {
            "readOnly": false,
            "description": "The unit price of the row excluding tax, mutually exclusive with priceIncludingTax.",
            "type": "number",
            "example": 12345
          },
          "priceIncludingTax": {
            "example": 100,
            "readOnly": false,
            "description": "The unit price of the row including tax, mutually exclusive with priceExcludingTax.",
            "type": "number"
          }
        },
        "description": "Holds information for updating prices and discounts for a delivery."
      },
      "Dimensions": {
        "type": "object",
        "title": "Dimensions",
        "required": [
          "height",
          "width"
        ],
        "properties": {
          "height": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "width": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": ""
      },
      "Entry": {
        "type": "object",
        "title": "Entry",
        "properties": {
          "key": {
            "readOnly": false,
            "description": "",
            "type": "object",
            "example": {}
          },
          "value": {
            "readOnly": false,
            "description": "",
            "type": "object",
            "example": {}
          }
        },
        "description": ""
      },
      "Filter": {
        "type": "object",
        "title": "Filter",
        "properties": {
          "attribute1Ids": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "attribute1Tags": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "attribute2Ids": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "attribute2Tags": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "attribute3Ids": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "attribute3Tags": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "brandIds": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "brandTags": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "categoryIds": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "europeanArticleNumbers": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "priceRange": {
            "$ref": "#/components/schemas/PriceRangeFilter"
          },
          "priceType": {
            "$ref": "#/components/schemas/PriceType"
          },
          "properties": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyFilter"
            }
          },
          "propertyTags": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyTagFilter"
            }
          }
        },
        "description": ""
      },
      "Gender": {
        "type": "string",
        "title": "Gender",
        "enum": [
          "UNSPECIFIED",
          "MALE",
          "FEMALE"
        ],
        "description": "The gender of a customer."
      },
      "GenerateInvoicesRequest": {
        "type": "object",
        "title": "GenerateInvoicesRequest",
        "required": [
          "serviceProviderConfigId"
        ],
        "properties": {
          "serviceProviderConfigId": {
            "example": 42,
            "readOnly": false,
            "description": "The optional id of a service provider config if the invoices should be generated at a third party. If left out the request is recorded\ninternally only.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Information for a request to generate the invoices for an order. When a service provider config id is given the invoices are generated at that\nthird party, otherwise the request is recorded within Viskan only."
      },
      "Group": {
        "type": "object",
        "title": "Group",
        "properties": {
          "contentToAdd": {
            "$ref": "#/components/schemas/Content"
          },
          "contentToRemove": {
            "$ref": "#/components/schemas/Content"
          },
          "groupNumber": {
            "example": "1",
            "readOnly": false,
            "description": "The number of the group.",
            "type": "string"
          },
          "translationsToAddOrUpdate": {
            "readOnly": false,
            "description": "The translations to add or update.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Translation"
            }
          }
        },
        "description": "Contains a groups of content to add to the package"
      },
      "HelloRetailData": {
        "type": "object",
        "title": "HelloRetailData",
        "properties": {
          "filters": {
            "readOnly": false,
            "description": "",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "sort": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "trackingUserId": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "url": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "HelpdeskTag": {
        "type": "object",
        "title": "HelpdeskTag",
        "required": [
          "tag_id"
        ],
        "properties": {
          "tag_id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds the category id of the ticket category that represents the different \"labels/tags\" we can set on helpdesk tickets."
      },
      "IdentificationType": {
        "type": "string",
        "title": "IdentificationType",
        "enum": [
          "KNOWN",
          "DRIVING_LICENCE",
          "IDENTITY_CARD",
          "IDENTITY_CARD_NO_1",
          "IDENTITY_CARD_NO_2",
          "PASSPORT",
          "OTHER_SSN",
          "OTHER_NO_SSN"
        ],
        "description": "The identificationtype of the identification"
      },
      "IdentifierType": {
        "type": "string",
        "title": "IdentifierType",
        "enum": [
          "EMAIL",
          "SSN",
          "PHONE",
          "CUSTOMER_NUMBER"
        ],
        "description": "Defines possible ways to enter credentials"
      },
      "InvoiceAddress": {
        "type": "object",
        "title": "InvoiceAddress",
        "properties": {
          "addressLine1": {
            "example": "113 51 Stockholm",
            "readOnly": false,
            "description": "The first address line, usually street address.",
            "type": "string"
          },
          "administrativeDivision": {
            "example": "West Gothland",
            "readOnly": false,
            "description": "The administrative division, such as region or state.",
            "type": "string"
          },
          "careOf": {
            "example": "Some person",
            "readOnly": false,
            "description": "The care of (c/o) extension of the address.",
            "type": "string"
          },
          "city": {
            "example": "Stockholm",
            "readOnly": false,
            "description": "The city of the address.",
            "type": "string"
          },
          "companyName": {
            "example": "Viskan",
            "readOnly": false,
            "description": "The company name of the customer, if the customer is a company. Mutually exclusive with \u003ccode\u003efirstName\u003c/code\u003e and \u003ccode\u003elastName\u003c/code\u003e.",
            "type": "string"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the address, in ISO alpha-2 format, for example SE.",
            "type": "string"
          },
          "firstName": {
            "example": "Karl",
            "readOnly": false,
            "description": "The first name of the customer, if the customer is a person. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e.",
            "type": "string"
          },
          "lastName": {
            "example": "Karlsson",
            "readOnly": false,
            "description": "The last name of the customer, if the customer is a person. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e.",
            "type": "string"
          },
          "zipcode": {
            "example": "113 51",
            "readOnly": false,
            "description": "The zipcode/postal code of the address.",
            "type": "string"
          }
        },
        "description": "Invoice Address"
      },
      "Language": {
        "type": "object",
        "title": "Language",
        "properties": {
          "languageCode": {
            "example": "sv",
            "readOnly": false,
            "description": "The language of the translation.",
            "type": "string"
          },
          "name": {
            "example": "Skjortor",
            "readOnly": false,
            "description": "The translation of the category name.",
            "type": "string"
          }
        },
        "description": "Defines a translation of a category name in a specific language."
      },
      "Language_commons": {
        "type": "string",
        "title": "Language",
        "enum": [
          "gb",
          "cs",
          "da",
          "nl",
          "en",
          "et",
          "fi",
          "FLEMISH",
          "fr",
          "de",
          "el",
          "hu",
          "is",
          "it",
          "lv",
          "lt",
          "no",
          "pl",
          "pt",
          "ro",
          "ru",
          "sk",
          "sl",
          "es",
          "sv",
          "uk",
          "UNDEFINED"
        ],
        "description": "Defines the languages that can be used in ETM.\n\u003cp\u003e\nThe values of languages are from \u003ca href\u003d\"https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\"\u003ethe ISO 639-1 standard\u003c/a\u003e.\n\u003c/p\u003e"
      },
      "LanguageAlternative": {
        "type": "object",
        "title": "LanguageAlternative",
        "properties": {
          "languageCode": {
            "$ref": "#/components/schemas/Language_commons"
          },
          "path": {
            "example": "/byxor",
            "readOnly": false,
            "description": "The alternative path for the language.",
            "type": "string"
          }
        },
        "description": "Defines an alternative path for a specific language."
      },
      "LocalAddress": {
        "type": "object",
        "title": "LocalAddress",
        "properties": {
          "addressLine1": {
            "example": "Druveforsvägen 8",
            "readOnly": false,
            "description": "The first address line, usually street address.",
            "type": "string"
          },
          "administrativeDivision": {
            "readOnly": false,
            "description": "The administrative division, such as region or state.",
            "type": "string",
            "example": "..."
          },
          "careOf": {
            "readOnly": false,
            "description": "The care of (c/o) extension of the address.",
            "type": "string",
            "example": "..."
          },
          "city": {
            "example": "BORÅS",
            "readOnly": false,
            "description": "The city of the address.",
            "type": "string"
          },
          "zipcode": {
            "example": "50454",
            "readOnly": false,
            "description": "The zipcode/postal code of the address.",
            "type": "string"
          }
        },
        "description": "Information about a local geographical address. A local address means that it has no awareness of country."
      },
      "LogisticsProvider": {
        "type": "string",
        "title": "LogisticsProvider",
        "enum": [
          "UNKNOWN",
          "POSTEN",
          "SCHENKER",
          "LBC",
          "GENERAL",
          "SLOVENIAN_POST",
          "SLOVAKIAN_POST",
          "CZECH_POST",
          "NORWEGIAN_POST",
          "POSTI",
          "EDI_SOFT",
          "BRING_CITYMAIL",
          "PNL",
          "INTERNAL_LOGISTICS",
          "IN_STORE_PICKUP",
          "DHL",
          "BRING_PARCELS",
          "DSV",
          "COURIER",
          "POLISH_POST",
          "UPS",
          "HUNGARIAN_POST",
          "LITHUANIAN_POST",
          "RIKSDISTRIBUTION",
          "GLS",
          "BEST",
          "MATKAHUOLTO",
          "GORDON_DELIVERY",
          "INGRID"
        ],
        "description": "List of Logistics providers."
      },
      "LogoutRequest": {
        "type": "object",
        "title": "LogoutRequest",
        "properties": {
          "customerType": {
            "$ref": "#/components/schemas/CustomerType"
          }
        },
        "description": "Defines a request to logout a customer to the \"My pages\" API by providing customerType (Person or Company)"
      },
      "LookupOffer": {
        "type": "object",
        "title": "LookupOffer",
        "required": [
          "offerId"
        ],
        "properties": {
          "offerId": {
            "example": 777,
            "readOnly": false,
            "description": "The offer id of the offer.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "A simplistic representation of an offer"
      },
      "LookupResult": {
        "type": "object",
        "title": "LookupResult",
        "required": [
          "stockKeepingUnitId"
        ],
        "properties": {
          "offers": {
            "readOnly": false,
            "description": "Contains all offers connected to the product.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LookupOffer"
            }
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price look Up number (PLUNO) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit. \u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "stockKeepingUnitId": {
            "example": 123,
            "readOnly": false,
            "description": "The sku of the product.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "A lookup result of a product and connected offers."
      },
      "LowestPrice": {
        "type": "object",
        "title": "LowestPrice",
        "properties": {
          "average": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "maximum": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "minimum": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          }
        },
        "description": ""
      },
      "MatchIdentifier": {
        "type": "object",
        "title": "MatchIdentifier",
        "properties": {
          "kind": {
            "$ref": "#/components/schemas/MatchIdentifierKind"
          }
        },
        "description": "Specifies a single identifier to use for the matching strategy."
      },
      "MatchIdentifierKind": {
        "type": "string",
        "title": "MatchIdentifierKind",
        "enum": [
          "SOCIAL_SECURITY_NUMBER",
          "ORGANIZATION_NUMBER",
          "CUSTOMER_NUMBER",
          "EXTERNAL_MEMBER_NUMBER",
          "ZIPCODE",
          "EMAIL_ADDRESS",
          "PHONE_NUMBER",
          "CUSTOMER_UUID"
        ],
        "description": "Defines various kinds of matching strategies."
      },
      "MatchRequest": {
        "type": "object",
        "title": "MatchRequest",
        "required": [
          "createIfNotMatched",
          "priceListId",
          "serviceProviderConfigId",
          "timeToLiveMinutes"
        ],
        "properties": {
          "categoryIds": {
            "readOnly": false,
            "description": "The categories the customer is connected to.\n\u003cp\u003e\nNote: categoryIds is not compatible with createIfNotMatched, ie. categoryIds will \u003cb\u003enot\u003c/b\u003e be saved in a match call.\n\u003c/p\u003e",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2).",
            "type": "string"
          },
          "createIfNotMatched": {
            "readOnly": false,
            "description": "Whether or not to create a new customer if we could not match. Defaults to false. Should not be used if not needed.",
            "type": "boolean",
            "example": true
          },
          "identifiers": {
            "readOnly": false,
            "description": "The identifiers that will be used for matching.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MatchIdentifier"
            }
          },
          "info": {
            "$ref": "#/components/schemas/CreateInfo"
          },
          "level": {
            "$ref": "#/components/schemas/AuthenticationLevel"
          },
          "priceListId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "serviceProviderConfigId": {
            "readOnly": false,
            "description": "The optional id of a service provider if we want to match / create with a third party",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "shopcartId": {
            "readOnly": false,
            "description": "The identifier of the shopping cart to connect to the logged in user if the authentication was successful.",
            "type": "string",
            "example": "..."
          },
          "timeToLiveMinutes": {
            "example": 120,
            "readOnly": false,
            "description": "The number of minutes that the authentication will live. Defaults to 120.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Information for a request to attempt to match an existing customer. If matched properly, a \"My pages\" API token will be returned."
      },
      "Media": {
        "type": "object",
        "title": "Media",
        "required": [
          "attribute1Id",
          "attribute2Id",
          "attribute3Id",
          "mediaId",
          "sort"
        ],
        "properties": {
          "alternativeText": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "attribute1Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute2Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute3Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "dimensions": {
            "$ref": "#/components/schemas/Dimensions"
          },
          "fileName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "mediaId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "mediaType": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "presentationType": {
            "$ref": "#/components/schemas/PresentationType"
          },
          "sort": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": ""
      },
      "MediaChanges": {
        "type": "object",
        "title": "MediaChanges",
        "properties": {
          "attribute1Code": {
            "example": "Red",
            "readOnly": false,
            "description": "Which product color connected to media if any.",
            "type": "string"
          },
          "attribute2Code": {
            "example": "Large",
            "readOnly": false,
            "description": "Which product size connected to media if any.",
            "type": "string"
          },
          "attribute3Code": {
            "example": "75cm",
            "readOnly": false,
            "description": "Which product measurement connected to media if any.",
            "type": "string"
          },
          "base64Image": {
            "example": "aGVsbG8gd29ybGQ\u003d",
            "readOnly": false,
            "description": "Base64-encoded image data. Must be provided together with \u0027filename\u0027. Mutually exclusive with \u0027mediaURL\u0027.",
            "type": "string"
          },
          "filename": {
            "example": "product-image.jpg",
            "readOnly": false,
            "description": "Filename for the image when using base64 input (e.g. \"product-image.jpg\"). Must be provided together with \u0027base64Image\u0027.",
            "type": "string"
          },
          "mediaType": {
            "example": "FRONT_IMAGE",
            "readOnly": false,
            "description": "The type of media, which decides where it is shown. Defaults to FRONT_IMAGE.\n\u003cul\u003e\n\u003cli\u003eFRONT_IMAGE - front view image\u003c/li\u003e\n\u003cli\u003eBACK_IMAGE - back view image\u003c/li\u003e\n\u003cli\u003eTOP_IMAGE - top view image\u003c/li\u003e\n\u003cli\u003eBOTTOM_IMAGE - bottom view image\u003c/li\u003e\n\u003cli\u003eLIST_IMAGE - image shown when products are listed\u003c/li\u003e\n\u003cli\u003eSEARCH_IMAGE - image shown in search results\u003c/li\u003e\n\u003cli\u003eEXTRA_IMAGE_1 to EXTRA_IMAGE_100 - extra images, sorted by their number. EXTRA_IMAGE is the same as EXTRA_IMAGE_1.\u003c/li\u003e\n\u003c/ul\u003e",
            "type": "string"
          },
          "mediaURL": {
            "example": "https://www.example.com/path-to-image/image.jpg",
            "readOnly": false,
            "description": "The URL where the media is located.",
            "type": "string"
          },
          "prefix": {
            "example": "prefix",
            "readOnly": false,
            "description": "Prefix to prevent conflict with internally saved images.",
            "type": "string"
          },
          "priceLookUpNumber": {
            "example": "ABC-123",
            "readOnly": false,
            "description": "Price look-up number (PLUNO) to link this media to. Mutually exclusive with stockKeepingUnitId. Requires mediaType.",
            "type": "string"
          },
          "stockKeepingUnitId": {
            "example": 12345,
            "readOnly": false,
            "description": "SKU ID to link this media to. Mutually exclusive with priceLookUpNumber. Requires mediaType.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Contains information about a new or updated medias."
      },
      "MediaDisconnectResponse": {
        "type": "object",
        "title": "MediaDisconnectResponse",
        "properties": {
          "results": {
            "readOnly": false,
            "description": "The result of each media, in the order they were sent.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaDisconnectResult"
            }
          }
        },
        "description": "The result of disconnecting media."
      },
      "MediaDisconnectResult": {
        "type": "object",
        "title": "MediaDisconnectResult",
        "required": [
          "index",
          "removed"
        ],
        "properties": {
          "errorCode": {
            "example": "",
            "readOnly": false,
            "description": "Why the media was not disconnected. One of conflicting-media, missing-media, conflicting-attributes, missing-product,\nconflicting-product, invalid-media-type, media-not-found, product-not-found, variant-not-found or media-not-connected.\nOnly set if the media was not disconnected.",
            "type": "string"
          },
          "filename": {
            "example": "image-Red.jpg",
            "readOnly": false,
            "description": "The filename of the media, either as provided or built from the mediaURL.",
            "type": "string"
          },
          "index": {
            "example": 0,
            "readOnly": false,
            "description": "The position of the media in the request, starting at 0.",
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "example": "",
            "readOnly": false,
            "description": "A description of why the media was not disconnected. Only set if the media was not disconnected.",
            "type": "string"
          },
          "removed": {
            "example": true,
            "readOnly": false,
            "description": "True if the media was disconnected.",
            "type": "boolean"
          },
          "removedConnections": {
            "example": 1,
            "readOnly": false,
            "description": "The number of connections that were removed. Only set if the media was disconnected.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "The result of disconnecting one media."
      },
      "MediaResult": {
        "type": "object",
        "title": "MediaResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The stock keeping unit media in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnit"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a search result of media for stock keeping units."
      },
      "MediaScale": {
        "type": "object",
        "title": "MediaScale",
        "properties": {
          "location": {
            "readOnly": false,
            "description": "The location/URL of the media.",
            "type": "string",
            "example": "..."
          },
          "scale": {
            "$ref": "#/components/schemas/Scale"
          }
        },
        "description": "The data related to the image."
      },
      "MediaToConnect": {
        "type": "object",
        "title": "MediaToConnect",
        "properties": {
          "attribute1Code": {
            "example": "Red",
            "readOnly": false,
            "description": "Attribute1Code of the media. Mutually exclusive with AttributeXNumber.",
            "type": "string"
          },
          "attribute1Number": {
            "example": "1010",
            "readOnly": false,
            "description": "Attribute1Number of the media. Mutually exclusive with AttributeXCode.",
            "type": "string"
          },
          "attribute2Code": {
            "example": "Large",
            "readOnly": false,
            "description": "Attribute2Code of the media. Mutually exclusive with AttributeXNumber.",
            "type": "string"
          },
          "attribute2Number": {
            "example": "2020",
            "readOnly": false,
            "description": "Attribute2Number of the media. Mutually exclusive with AttributeXCode.",
            "type": "string"
          },
          "attribute3Code": {
            "example": "75cm",
            "readOnly": false,
            "description": "Attribute3Code of the media. Mutually exclusive with AttributeXNumber.",
            "type": "string"
          },
          "attribute3Number": {
            "example": "3030",
            "readOnly": false,
            "description": "Attribute3Number of the media. Mutually exclusive with AttributeXCode.",
            "type": "string"
          },
          "filename": {
            "example": "image-Red-Large-75cm.jpg",
            "readOnly": false,
            "description": "Filename of the media to connect. Used to connect media instead of using mediaURL. If both fields are supplied in a request, then filename will be used.\nIf attributeCodes/Numbers were used when saving media through the Media API, then these codes/numbers should be used in the filename when connecting the media.",
            "type": "string"
          },
          "mediaType": {
            "example": "FRONT_IMAGE",
            "readOnly": false,
            "description": "The type of media, which decides where it is shown. Defaults to FRONT_IMAGE.\n\u003cul\u003e\n\u003cli\u003eFRONT_IMAGE - front view image\u003c/li\u003e\n\u003cli\u003eBACK_IMAGE - back view image\u003c/li\u003e\n\u003cli\u003eTOP_IMAGE - top view image\u003c/li\u003e\n\u003cli\u003eBOTTOM_IMAGE - bottom view image\u003c/li\u003e\n\u003cli\u003eLIST_IMAGE - image shown when products are listed\u003c/li\u003e\n\u003cli\u003eSEARCH_IMAGE - image shown in search results\u003c/li\u003e\n\u003cli\u003eEXTRA_IMAGE_1 to EXTRA_IMAGE_100 - extra images, sorted by their number. EXTRA_IMAGE is the same as EXTRA_IMAGE_1.\u003c/li\u003e\n\u003c/ul\u003e",
            "type": "string"
          },
          "mediaURL": {
            "example": "https://www.example.com/path-to-image/image.jpg",
            "readOnly": false,
            "description": "The url to the media to connect. First create a media in the media API and then connect it using this field and optional attributeCodes/Numbers.",
            "type": "string"
          },
          "prefix": {
            "example": "viskan-",
            "readOnly": false,
            "description": "A prefix to add to the media name.",
            "type": "string"
          },
          "sort": {
            "example": "1",
            "readOnly": false,
            "description": "Sort order of the media within this article variant / SKU.",
            "type": "string"
          }
        },
        "description": "Contains changes that applies to a product medias."
      },
      "MediaToDisconnect_ProductToAddOrUpdate": {
        "type": "object",
        "title": "MediaToDisconnect",
        "properties": {
          "attribute1Code": {
            "example": "Red",
            "readOnly": false,
            "description": "Attribute1Code of the color to disconnect the media from. Without attributes the media is disconnected from the product level only. Mutually exclusive with AttributeXNumber.",
            "type": "string"
          },
          "attribute1Number": {
            "example": "1010",
            "readOnly": false,
            "description": "Attribute1Number of the color to disconnect the media from. Mutually exclusive with AttributeXCode.",
            "type": "string"
          },
          "attribute2Code": {
            "example": "Large",
            "readOnly": false,
            "description": "Attribute2Code of the size to disconnect the media from. Mutually exclusive with AttributeXNumber.",
            "type": "string"
          },
          "attribute2Number": {
            "example": "2020",
            "readOnly": false,
            "description": "Attribute2Number of the size to disconnect the media from. Mutually exclusive with AttributeXCode.",
            "type": "string"
          },
          "attribute3Code": {
            "example": "75cm",
            "readOnly": false,
            "description": "Attribute3Code of the measurement to disconnect the media from. Mutually exclusive with AttributeXNumber.",
            "type": "string"
          },
          "attribute3Number": {
            "example": "3030",
            "readOnly": false,
            "description": "Attribute3Number of the measurement to disconnect the media from. Mutually exclusive with AttributeXCode.",
            "type": "string"
          },
          "filename": {
            "example": "image-Red-Large-75cm.jpg",
            "readOnly": false,
            "description": "Filename of the media to disconnect, used as it is. Mutually exclusive with mediaURL, the same as in the Media API.",
            "type": "string"
          },
          "mediaType": {
            "example": "FRONT_IMAGE",
            "readOnly": false,
            "description": "The type of media to disconnect. Without it the media is disconnected from every type at the given level.\n\u003cul\u003e\n\u003cli\u003eFRONT_IMAGE - front view image\u003c/li\u003e\n\u003cli\u003eBACK_IMAGE - back view image\u003c/li\u003e\n\u003cli\u003eTOP_IMAGE - top view image\u003c/li\u003e\n\u003cli\u003eBOTTOM_IMAGE - bottom view image\u003c/li\u003e\n\u003cli\u003eLIST_IMAGE - image shown when products are listed\u003c/li\u003e\n\u003cli\u003eSEARCH_IMAGE - image shown in search results\u003c/li\u003e\n\u003cli\u003eEXTRA_IMAGE_1 to EXTRA_IMAGE_100 - extra images, sorted by their number. EXTRA_IMAGE is the same as EXTRA_IMAGE_1.\u003c/li\u003e\n\u003c/ul\u003e",
            "type": "string"
          },
          "mediaURL": {
            "example": "https://www.example.com/path-to-image/image.jpg",
            "readOnly": false,
            "description": "The url that was used when the media was connected. The filename is built from it the same way as when connecting: prefix, the name from\nthe url, the attribute codes or numbers and the extension. Mutually exclusive with filename.",
            "type": "string"
          },
          "prefix": {
            "example": "viskan-",
            "readOnly": false,
            "description": "The prefix that was used when the media was connected.",
            "type": "string"
          }
        },
        "description": "A media to disconnect from the product, a color or a variant. The match is exact, see the attributes."
      },
      "MediaToDisconnect": {
        "type": "object",
        "title": "MediaToDisconnect",
        "properties": {
          "attribute1Code": {
            "example": "Red",
            "readOnly": false,
            "description": "The product color to disconnect the media from. Only the connections on this color are removed. Mutually exclusive with attribute1Number.",
            "type": "string"
          },
          "attribute1Number": {
            "example": "10",
            "readOnly": false,
            "description": "The number of the product color to disconnect the media from. Mutually exclusive with attribute1Code.",
            "type": "string"
          },
          "attribute2Code": {
            "example": "Large",
            "readOnly": false,
            "description": "The product size to disconnect the media from. Mutually exclusive with attribute2Number.",
            "type": "string"
          },
          "attribute2Number": {
            "example": "20",
            "readOnly": false,
            "description": "The number of the product size to disconnect the media from. Mutually exclusive with attribute2Code.",
            "type": "string"
          },
          "attribute3Code": {
            "example": "75cm",
            "readOnly": false,
            "description": "The product measurement to disconnect the media from. Mutually exclusive with attribute3Number.",
            "type": "string"
          },
          "attribute3Number": {
            "example": "30",
            "readOnly": false,
            "description": "The number of the product measurement to disconnect the media from. Mutually exclusive with attribute3Code.",
            "type": "string"
          },
          "filename": {
            "example": "image-Red.jpg",
            "readOnly": false,
            "description": "The filename of the media, used as it is. Mutually exclusive with mediaURL.",
            "type": "string"
          },
          "mediaType": {
            "example": "FRONT_IMAGE",
            "readOnly": false,
            "description": "The type of media to disconnect. Without it the media is disconnected from every type at the given level.\n\u003cul\u003e\n\u003cli\u003eFRONT_IMAGE - front view image\u003c/li\u003e\n\u003cli\u003eBACK_IMAGE - back view image\u003c/li\u003e\n\u003cli\u003eTOP_IMAGE - top view image\u003c/li\u003e\n\u003cli\u003eBOTTOM_IMAGE - bottom view image\u003c/li\u003e\n\u003cli\u003eLIST_IMAGE - image shown when products are listed\u003c/li\u003e\n\u003cli\u003eSEARCH_IMAGE - image shown in search results\u003c/li\u003e\n\u003cli\u003eEXTRA_IMAGE_1 to EXTRA_IMAGE_100 - extra images, sorted by their number. EXTRA_IMAGE is the same as EXTRA_IMAGE_1.\u003c/li\u003e\n\u003c/ul\u003e",
            "type": "string"
          },
          "mediaURL": {
            "example": "https://www.example.com/path-to-image/image.jpg",
            "readOnly": false,
            "description": "The URL that was used when the media was uploaded. The filename is built from it the same way as when connecting: prefix, the\nname from the URL, the attribute codes or numbers and the extension. Mutually exclusive with filename.",
            "type": "string"
          },
          "prefix": {
            "example": "viskan-",
            "readOnly": false,
            "description": "The prefix that was used when the media was uploaded with mediaURL.",
            "type": "string"
          },
          "priceLookUpNumber": {
            "example": "ABC-123",
            "readOnly": false,
            "description": "The price look-up number (PLUNO) of the stock keeping unit (variant) to disconnect the media from. The attribute codes and numbers\nare then only used to build the filename. Mutually exclusive with productNumber and stockKeepingUnitId.",
            "type": "string"
          },
          "productNumber": {
            "example": "123PRODUCT",
            "readOnly": false,
            "description": "The product to disconnect the media from. Without any attribute only the connections on the product level are removed.\nMutually exclusive with stockKeepingUnitId and priceLookUpNumber.",
            "type": "string"
          },
          "stockKeepingUnitId": {
            "example": 12345,
            "readOnly": false,
            "description": "The stock keeping unit (variant) to disconnect the media from. The attribute codes and numbers are then only used to build the\nfilename. Mutually exclusive with productNumber and priceLookUpNumber.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "A media to disconnect from a product, a color or a variant."
      },
      "Meta": {
        "type": "object",
        "title": "Meta",
        "properties": {
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "title": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "MyPagesOrderCustomer": {
        "type": "object",
        "title": "MyPagesOrderCustomer",
        "required": [
          "customerId"
        ],
        "properties": {
          "cellphone": {
            "readOnly": false,
            "description": "The cell phone number for the customer.",
            "type": "string",
            "example": "..."
          },
          "companyName": {
            "readOnly": false,
            "description": "The company name of the customer, if the customer is a company.",
            "type": "string",
            "example": "..."
          },
          "customerId": {
            "readOnly": false,
            "description": "The internal unique identifier of the customer.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "emailAddress": {
            "readOnly": false,
            "description": "The email address for the customer.",
            "type": "string",
            "example": "..."
          },
          "firstName": {
            "readOnly": false,
            "description": "The first name of the customer, if the customer is a private person.",
            "type": "string",
            "example": "..."
          },
          "lastName": {
            "readOnly": false,
            "description": "The last name of the customer, if the customer is a private person.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "The customer of a order."
      },
      "MyPagesParcelStatus": {
        "type": "string",
        "title": "MyPagesParcelStatus",
        "enum": [
          "PLACED",
          "CREATED",
          "PACKED",
          "ROUTED",
          "ARRIVED",
          "COLLECTED"
        ],
        "description": "Parcel statuses represented in My Pages."
      },
      "NewsLetterRequest": {
        "type": "object",
        "title": "NewsLetterRequest",
        "required": [
          "allowUpdatingCustomer"
        ],
        "properties": {
          "allowUpdatingCustomer": {
            "example": true,
            "readOnly": false,
            "description": "Whether or not to update an existing matched customer and corresponding integrities.",
            "type": "boolean"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2).",
            "type": "string"
          },
          "emailAddress": {
            "example": "test@gmail.com",
            "readOnly": false,
            "description": "The email of the customer. Mandatory and cannot contain an empty value.",
            "type": "string"
          },
          "firstName": {
            "example": "Pelle",
            "readOnly": false,
            "description": "The name of the customer. Optional field.",
            "type": "string"
          },
          "lastName": {
            "example": "Andersson",
            "readOnly": false,
            "description": "The last name of the customer. Optional field.",
            "type": "string"
          }
        },
        "description": "Defines a Newsletter request to the MyPages V2 service. This request contains data used when calling the service responsible for creating new \"newsletter\ncustomers\" or updating existing customers to use newsletters."
      },
      "Note": {
        "type": "object",
        "title": "Note",
        "required": [
          "customerId",
          "deliveryId",
          "noteId",
          "orderId",
          "returnId",
          "searchAfterId",
          "subscriptionId"
        ],
        "properties": {
          "createdAt": {
            "example": "2023-10-12T14:30:10.000+01:00",
            "readOnly": false,
            "description": "The date the note was created.",
            "type": "string",
            "format": "date-time"
          },
          "customerId": {
            "example": 678,
            "readOnly": false,
            "description": "The internal customer id the note is related to.",
            "type": "integer",
            "format": "int32"
          },
          "customerNumber": {
            "example": "C-10024",
            "readOnly": false,
            "description": "The customer the note is related to.",
            "type": "string"
          },
          "deliveryId": {
            "example": 1234,
            "readOnly": false,
            "description": "The internal delivery Id the note is related to.",
            "type": "integer",
            "format": "int32"
          },
          "deliveryNumber": {
            "example": "D-00123",
            "readOnly": false,
            "description": "The delivery the note is related to.",
            "type": "string"
          },
          "description": {
            "example": "SMS sent to customer with payment information.",
            "readOnly": false,
            "description": "The body of the note.",
            "type": "string"
          },
          "modifiedAt": {
            "example": "2023-10-12T14:36:43.412+01:00",
            "readOnly": false,
            "description": "The date the note was last modified.",
            "type": "string",
            "format": "date-time"
          },
          "noteCode": {
            "$ref": "#/components/schemas/NoteCode"
          },
          "noteId": {
            "example": 101,
            "readOnly": false,
            "description": "The note identifier.",
            "type": "integer",
            "format": "int32"
          },
          "orderId": {
            "example": 123,
            "readOnly": false,
            "description": "The internal order Id the note is related to.",
            "type": "integer",
            "format": "int32"
          },
          "orderNumber": {
            "example": "O-00123",
            "readOnly": false,
            "description": "The order the note is related to.",
            "type": "string"
          },
          "returnId": {
            "example": 12345,
            "readOnly": false,
            "description": "The internal return Id the note is related to.",
            "type": "integer",
            "format": "int32"
          },
          "returnNumber": {
            "example": "R-00123",
            "readOnly": false,
            "description": "The return the note is related to.",
            "type": "string"
          },
          "searchAfterId": {
            "example": 2,
            "readOnly": false,
            "description": "The search identifier of the note. Can be used to continue the search from this note.",
            "type": "integer",
            "format": "int32"
          },
          "subscriptionId": {
            "example": 24,
            "readOnly": false,
            "description": "The subscription the note is related to.",
            "type": "integer",
            "format": "int32"
          },
          "ticketNumber": {
            "example": "T-00123",
            "readOnly": false,
            "description": "The ticket the note is related to.",
            "type": "string"
          },
          "title": {
            "example": "SMS sent",
            "readOnly": false,
            "description": "The title of the note.",
            "type": "string"
          }
        },
        "description": "A note."
      },
      "NoteCode": {
        "type": "object",
        "title": "NoteCode",
        "required": [
          "id"
        ],
        "properties": {
          "code": {
            "example": "001",
            "readOnly": false,
            "description": "The alphabetic identifier of the note code.",
            "type": "string"
          },
          "id": {
            "example": 5,
            "readOnly": false,
            "description": "The numeric identifier of the note code.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "A note code. (Also known as standard note)"
      },
      "NoteResult": {
        "type": "object",
        "title": "NoteResult",
        "required": [
          "searchAfterId",
          "size"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The notes that matched the search criteria.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Note"
            }
          },
          "searchAfterId": {
            "example": 2,
            "readOnly": false,
            "description": "The search identifier to continue from. Same as the highest searchAfterId in the hits.",
            "type": "integer",
            "format": "int32"
          },
          "size": {
            "example": 2,
            "readOnly": false,
            "description": "The total number of returned notes in the response.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Holds a list of notes."
      },
      "MyPagesOffer": {
        "type": "object",
        "title": "Offer",
        "properties": {
          "campaignName": {
            "readOnly": false,
            "description": "The name of the campaign",
            "type": "string",
            "example": "..."
          },
          "categoryLinkFriendlyName": {
            "readOnly": false,
            "description": "The link-friendly-name to a existing category",
            "type": "string",
            "example": "..."
          },
          "enddate": {
            "readOnly": false,
            "description": "The date the offer will expire",
            "type": "string",
            "format": "date-time",
            "example": "..."
          },
          "mediaFileName": {
            "readOnly": false,
            "description": "Filename to load media for the offer",
            "type": "string",
            "example": "..."
          }
        },
        "description": "An MyPagesOffer defines an offer connected against a customer category\n\u003cp\u003e\nA customer can be connected to several customer categories\n\u003cp\u003e"
      },
      "Offer": {
        "type": "object",
        "title": "Offer",
        "required": [
          "customerType",
          "offerId",
          "offerTypeId"
        ],
        "properties": {
          "alternativeOfferName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "customerType": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "offerId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "offerName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "offerTypeId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "parameters": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfferParameter"
            }
          },
          "properties": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property_response"
            }
          },
          "stockKeepingUnitIds": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          }
        },
        "description": ""
      },
      "Offer_OfferAPI": {
        "type": "object",
        "title": "Offer",
        "required": [
          "active",
          "customerCategoryId",
          "offerId",
          "priority",
          "requiresOfferCode"
        ],
        "properties": {
          "active": {
            "example": true,
            "readOnly": false,
            "description": "The current status of the offer.",
            "type": "boolean"
          },
          "appliedToPrices": {
            "$ref": "#/components/schemas/AppliedToPrices"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2) of the offer.",
            "type": "string"
          },
          "currencyCode": {
            "example": "SEK",
            "readOnly": false,
            "description": "The currency code (ISO 4217) of the offer.",
            "type": "string"
          },
          "customerCategoryId": {
            "example": -1,
            "readOnly": false,
            "description": "The category of customer the offer is limited to (-1 is unlimited).",
            "type": "integer",
            "format": "int32"
          },
          "endDate": {
            "example": "2022-12-31",
            "readOnly": false,
            "description": "The ending date/time of the offer.",
            "type": "string",
            "format": "date-time"
          },
          "maximumAmountOfProducts": {
            "example": "5",
            "readOnly": false,
            "description": "Defines the maximum number of units to which an offer can be applied. This parameter is relevant specifically for offers of types NEW_PRICE.\nFor offer types where this parameter does not apply, the API will return NOT_APPLICABLE. If the offer type is applicable (type NEW_PRICE) but the maximum quantity has not been set, the API will return NOT_SET.",
            "type": "string"
          },
          "offerId": {
            "example": 1,
            "readOnly": false,
            "description": "The offer id of the offer.",
            "type": "integer",
            "format": "int32"
          },
          "offerName": {
            "example": "Premium Discount",
            "readOnly": false,
            "description": "The offer name.",
            "type": "string"
          },
          "parameters": {
            "readOnly": false,
            "description": "Contains all parameters used in the offer (for supported offer-types).",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Parameter"
            }
          },
          "priority": {
            "example": 10,
            "readOnly": false,
            "description": "The relative priority of the offer in the range of 0 to 100, where 0 represents the lowest priority and 100 the highest.\nOffers are first of all applied according to priority and secondary by creation date (older offers have higher priority than newer ones).",
            "type": "integer",
            "format": "int32"
          },
          "requiresOfferCode": {
            "example": true,
            "readOnly": false,
            "description": "Whether or not the offer requires a specific offer code to be used.",
            "type": "boolean"
          },
          "startDate": {
            "example": "2022-01-01",
            "readOnly": false,
            "description": "The starting date/time of the offer.",
            "type": "string",
            "format": "date-time"
          },
          "stockKeepingUnits": {
            "readOnly": false,
            "description": "A collection of LookupResult of a product and connected offers..",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LookupResult"
            }
          },
          "stores": {
            "readOnly": false,
            "description": "Contains all stores connected to the offer.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Store"
            }
          },
          "type": {
            "$ref": "#/components/schemas/OfferType"
          }
        },
        "description": "Offer"
      },
      "OfferCode": {
        "type": "object",
        "title": "OfferCode",
        "required": [
          "maxUsageCount"
        ],
        "properties": {
          "code": {
            "example": "ABC123",
            "readOnly": false,
            "description": "The offer code.",
            "type": "string"
          },
          "endDate": {
            "example": "2022-01-01",
            "readOnly": false,
            "description": "The date when the offer code expire.",
            "type": "string",
            "format": "date"
          },
          "maxUsageCount": {
            "example": 100,
            "readOnly": false,
            "description": "The maximum number of times a offer code can be used.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "OfferCode"
      },
      "OfferCodes": {
        "type": "object",
        "title": "OfferCodes",
        "properties": {
          "offerCodesToAdd": {
            "readOnly": false,
            "description": "Contains offer code(s) to add.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfferCode"
            }
          }
        },
        "description": "OfferCodes to add to a specific offer"
      },
      "OfferParameter": {
        "type": "object",
        "title": "OfferParameter",
        "properties": {
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "key": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "value": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "OfferResult": {
        "type": "object",
        "title": "OfferResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The offers in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Offer_OfferAPI"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a search result of offers."
      },
      "OfferType": {
        "type": "string",
        "title": "OfferType",
        "enum": [
          "NEW_PRICE",
          "DISCOUNT_PERCENTAGE",
          "NEW_AMOUNT_FOR_PRODUCTS",
          "DISCOUNT_ON_MOST_EXPENSIVE",
          "NEW_PRICE_FOR_TWO",
          "FREE_PRODUCT"
        ],
        "description": "The type of offer."
      },
      "Order": {
        "type": "object",
        "title": "Order",
        "required": [
          "orderId",
          "sellerId"
        ],
        "properties": {
          "additionalOrderText": {
            "example": "dimensions:100x100cm",
            "readOnly": false,
            "description": "Additional order text.",
            "type": "string"
          },
          "campaign": {
            "$ref": "#/components/schemas/Campaign_OrderAPI"
          },
          "currencyCode": {
            "example": "SEK",
            "readOnly": false,
            "description": "The iso3 currency code of the currency used.",
            "type": "string"
          },
          "customFields": {
            "readOnly": false,
            "description": "The custom fields of the order.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomField_OrderAPI"
            }
          },
          "customer": {
            "$ref": "#/components/schemas/OrderCustomer"
          },
          "deliveryMethod": {
            "$ref": "#/components/schemas/DeliveryMethod_OrderAPI"
          },
          "methodOfArrivalNumber": {
            "example": "E01",
            "readOnly": false,
            "description": "Method of arrival.",
            "type": "string"
          },
          "offerCodes": {
            "readOnly": false,
            "description": "Any offer code(s) used for the order.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "orderDate": {
            "example": "2020-09-21",
            "readOnly": false,
            "description": "The date when the order was placed.",
            "type": "string",
            "format": "date"
          },
          "orderId": {
            "readOnly": false,
            "description": "The internal identifier of the order.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "orderNumber": {
            "readOnly": false,
            "description": "The external number of the order.",
            "type": "string",
            "example": "..."
          },
          "paymentMethod": {
            "$ref": "#/components/schemas/PaymentMethod_OrderAPI"
          },
          "paymentReferences": {
            "readOnly": false,
            "description": "The Payment references of this order.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentReference_OrderAPI"
            }
          },
          "physicalStoreNumber": {
            "example": "S01",
            "readOnly": false,
            "description": "The number of the physical store where the order was placed. Omitted when the order was not placed in a physical store.\n\u003cp\u003eNot to be confused with the delivery point of the delivery, which is where the consumer picks up the goods.\u003c/p\u003e",
            "type": "string"
          },
          "purchaseNumber": {
            "readOnly": false,
            "description": "The external number of the purchase.",
            "type": "string",
            "example": "..."
          },
          "rows": {
            "readOnly": false,
            "description": "The rows of the order.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderRow"
            }
          },
          "seller": {
            "$ref": "#/components/schemas/Seller_OrderAPI"
          },
          "sellerId": {
            "example": 12,
            "readOnly": false,
            "description": "The internal identifier of the seller. Same id as \u003ccode\u003eseller.sellerId\u003c/code\u003e, kept for backwards compatibility. 0 when the order has no seller.",
            "type": "integer",
            "format": "int32"
          },
          "status": {
            "$ref": "#/components/schemas/OrderStatus"
          },
          "subscriptionInformation": {
            "$ref": "#/components/schemas/SubscriptionInformation_OrderAPI"
          },
          "termsOfPayment": {
            "$ref": "#/components/schemas/TermsOfPayment_OrderAPI"
          },
          "value": {
            "$ref": "#/components/schemas/OrderValue"
          },
          "webStoreNumber": {
            "example": "888",
            "readOnly": false,
            "description": "Web store where the order is placed. Only applicable for web orders, subscription based orders and physical store orders are not supported.",
            "type": "string"
          }
        },
        "description": "An order."
      },
      "OrderAddress": {
        "type": "object",
        "title": "OrderAddress",
        "properties": {
          "addressLine1": {
            "example": "Druveforsvägen 8",
            "readOnly": false,
            "description": "The first address line, usually street address.",
            "type": "string"
          },
          "administrativeDivision": {
            "example": "Västra Götaland",
            "readOnly": false,
            "description": "The administrative division, such as region or state.",
            "type": "string"
          },
          "careOf": {
            "example": "Viskan",
            "readOnly": false,
            "description": "The care of (c/o) extension of the address.",
            "type": "string"
          },
          "city": {
            "example": "BORÅS",
            "readOnly": false,
            "description": "The city of the address.",
            "type": "string"
          },
          "companyName": {
            "example": "Viskan System AB",
            "readOnly": false,
            "description": "The company name of the recipient. Mutually exclusive with \u003ccode\u003efirstName\u003c/code\u003e and \u003ccode\u003elastName\u003c/code\u003e.",
            "type": "string"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the address, in ISO alpha-2 format, for example \u003ccode\u003eSE\u003c/code\u003e.",
            "type": "string"
          },
          "firstName": {
            "example": "John",
            "readOnly": false,
            "description": "The first name of the recipient. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e.",
            "type": "string"
          },
          "lastName": {
            "example": "Smith",
            "readOnly": false,
            "description": "The last name of the recipient. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e.",
            "type": "string"
          },
          "zipCode": {
            "example": "50454",
            "readOnly": false,
            "description": "The zipcode/postal code of the address.",
            "type": "string"
          },
          "zipcode": {
            "example": "50454",
            "readOnly": false,
            "description": "Deprecated, use zipCode instead. The zipcode/postal code of the address.",
            "type": "string"
          }
        },
        "description": "Contains the address information."
      },
      "OrderCustomer": {
        "type": "object",
        "title": "OrderCustomer",
        "required": [
          "customerId",
          "multiBrandId"
        ],
        "properties": {
          "alternativeEmailAddress": {
            "example": "info@viskan.com",
            "readOnly": false,
            "description": "The alternative email address of the customer.",
            "type": "string"
          },
          "cellphone": {
            "example": "+46730485995",
            "readOnly": false,
            "description": "The cell phone number of the customer.",
            "type": "string"
          },
          "companyName": {
            "example": "Viskan System AB",
            "readOnly": false,
            "description": "The company name of the customer, if the customer is a company. Mutually exclusive with \u003ccode\u003efirstName\u003c/code\u003e and \u003ccode\u003elastName\u003c/code\u003e.",
            "type": "string"
          },
          "contactPerson": {
            "example": "",
            "readOnly": false,
            "description": "The contact person name of the customer, if the customer is a company.",
            "type": "string"
          },
          "customerId": {
            "example": 123,
            "readOnly": false,
            "description": "The internal identifier of the customer.",
            "type": "integer",
            "format": "int32"
          },
          "customerNumber": {
            "example": "1001",
            "readOnly": false,
            "description": "The unique, external number of the customer.",
            "type": "string"
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/OrderAddress"
          },
          "emailAddress": {
            "example": "info@viskan.com",
            "readOnly": false,
            "description": "The email address of the customer.",
            "type": "string"
          },
          "firstName": {
            "example": "Karl",
            "readOnly": false,
            "description": "The first name of the customer, if the customer is a person. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e.",
            "type": "string"
          },
          "invoiceAddress": {
            "$ref": "#/components/schemas/OrderAddress"
          },
          "landLine": {
            "example": "+46701740615",
            "readOnly": false,
            "description": "The landline phone number of the customer.",
            "type": "string"
          },
          "lastName": {
            "example": "Karlsson",
            "readOnly": false,
            "description": "The last name of the customer, if the customer is a person. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e.",
            "type": "string"
          },
          "multiBrandId": {
            "example": 1,
            "readOnly": false,
            "description": "The multibrand (concept) the customer belongs to.",
            "type": "integer",
            "format": "int32"
          },
          "organizationNumber": {
            "example": "556590-1864",
            "readOnly": false,
            "description": "The organization number of the customer, if the customer is a company.",
            "type": "string"
          },
          "socialSecurityNumber": {
            "example": "198812132382",
            "readOnly": false,
            "description": "The social security number of the customer.",
            "type": "string"
          },
          "vatRegistrationNumber": {
            "example": "DE123456789",
            "readOnly": false,
            "description": "VAT Registration Number of the customer.",
            "type": "string"
          }
        },
        "description": "Contains customer information for a order."
      },
      "MyPagesOrderDetails": {
        "type": "object",
        "title": "OrderDetails",
        "required": [
          "returnable"
        ],
        "properties": {
          "charge": {
            "readOnly": false,
            "description": "The packing fee, including taxes.",
            "type": "number",
            "example": 12345
          },
          "customerId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/AddressWithName"
          },
          "discount": {
            "readOnly": false,
            "description": "The order discount including taxes. (Row discounts are not included in this value.)",
            "type": "number",
            "example": 12345
          },
          "emailAddress": {
            "readOnly": false,
            "description": "The email address associated with the order.",
            "type": "string",
            "example": "..."
          },
          "invoiceAddress": {
            "$ref": "#/components/schemas/AddressWithName"
          },
          "orderDate": {
            "readOnly": false,
            "description": "Date when order was placed.",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "orderNumber": {
            "readOnly": false,
            "description": "The order number for the order.",
            "type": "string",
            "example": "..."
          },
          "orderPlacedBy": {
            "$ref": "#/components/schemas/MyPagesOrderCustomer"
          },
          "orderPlacedFor": {
            "$ref": "#/components/schemas/MyPagesOrderCustomer"
          },
          "orderRows": {
            "readOnly": false,
            "description": "The rows of the order.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MyPagesOrderRow"
            }
          },
          "parcelTimeLine": {
            "readOnly": false,
            "description": "Sorted list of available parcel statuses for order",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParcelTimeLine"
            }
          },
          "parcels": {
            "readOnly": false,
            "description": "Parcel information, if there is any.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Parcel"
            }
          },
          "paymentFee": {
            "readOnly": false,
            "description": "The cost for the payment method, such as invoice fee, including taxes.",
            "type": "number",
            "example": 12345
          },
          "providerUniqueData": {
            "readOnly": false,
            "description": "The provider unique data if present",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "returnable": {
            "readOnly": false,
            "description": "Whether this order have any returns.",
            "type": "boolean",
            "example": true
          },
          "shippingFee": {
            "readOnly": false,
            "description": "The cost for shipping the goods, including taxes.",
            "type": "number",
            "example": 12345
          },
          "source": {
            "$ref": "#/components/schemas/Source"
          },
          "status": {
            "$ref": "#/components/schemas/OrderStatus_v2"
          },
          "store": {
            "$ref": "#/components/schemas/MyPagesStore"
          },
          "totalRowSalesToPay": {
            "readOnly": false,
            "description": "The total row sales to pay of the order.",
            "type": "number",
            "example": 12345
          },
          "totalRowSalesToPayExVat": {
            "readOnly": false,
            "description": "The total row sales to pay of the order, excluding vat.",
            "type": "number",
            "example": 12345
          },
          "totalRowVatToPay": {
            "readOnly": false,
            "description": "The total row vat to pay of the order.",
            "type": "number",
            "example": 12345
          },
          "totalValue": {
            "readOnly": false,
            "description": "The total value of the order including carriage, charge and discounts.",
            "type": "number",
            "example": 12345
          },
          "type": {
            "$ref": "#/components/schemas/OrderType"
          }
        },
        "description": "Order details define detailed information about a purchase made online or in a physical store.\n\u003cp\u003e\nOne customer can have multiple orders and an order can potentially have multiple items and multiple parcels (with or without tracking information).\n\u003c/p\u003e"
      },
      "OrderResult": {
        "type": "object",
        "title": "OrderResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The deliveries in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Order"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a search result for orders."
      },
      "OrderRow": {
        "type": "object",
        "title": "OrderRow",
        "required": [
          "parentRowId",
          "quantity",
          "quantitySent",
          "rowId",
          "stockKeepingUnitId"
        ],
        "properties": {
          "additionalRowText": {
            "readOnly": false,
            "description": "The additional text for the order row.",
            "type": "string",
            "example": "..."
          },
          "campaign": {
            "$ref": "#/components/schemas/Campaign_OrderAPI"
          },
          "discountExcludingTax": {
            "readOnly": false,
            "description": "Deprecated, use OrderRowValue#discountExcludingTax instead. Discount without Taxes applied",
            "type": "number"
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "The European article number (EAN13) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "linkFriendlyName": {
            "example": "clinton_waistcoat",
            "readOnly": false,
            "description": "The link friendly name of the product, in the language that the customer that placed the order uses.",
            "type": "string"
          },
          "offerCode": {
            "readOnly": false,
            "description": "Any offer code used for the row within the order.",
            "type": "string",
            "example": "..."
          },
          "parentRowId": {
            "readOnly": false,
            "description": "The row id for the parent of this row.\n\u003cp\u003eApplies to FLEXIBLE_PACKAGES, COPY_PRODUCT, STATIC_PACKAGE and MULTI_PACKAGE.\nAlso applies to add-ons for NORMAL products.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThis field contains \"0\" when no parent exists.\u003c/li\u003e\n\u003cli\u003eFor an add-on or child row this field holds the rowId of its parent row, which is always different from this row\u0027s own rowId.\u003c/li\u003e\n\u003cli\u003eIf a packaged product (FLEXIBLE_PACKAGES) contains other packaged products\n(COPY_PRODUCT, STATIC_PACKAGE and MULTI_PACKAGE), all parts of the\npackaged products point to the \"closest\" parent.\u003c/li\u003e\n\u003c/ul\u003e",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "personalizationText": {
            "readOnly": false,
            "description": "Personalization text to customize the row of the order.",
            "type": "string",
            "example": "..."
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price look Up number (PLUNO) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit. \u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "productName": {
            "readOnly": false,
            "description": "The translated name of the product in the consumers language.",
            "type": "string",
            "example": "..."
          },
          "quantity": {
            "example": 1,
            "readOnly": false,
            "description": "The quantity being delivered.",
            "type": "integer",
            "format": "int32"
          },
          "quantitySent": {
            "example": 0,
            "readOnly": false,
            "description": "The quantity that has been sent.",
            "type": "integer",
            "format": "int32"
          },
          "rowId": {
            "example": 1,
            "readOnly": false,
            "description": "The identifier of the row within the order.",
            "type": "integer",
            "format": "int32"
          },
          "status": {
            "$ref": "#/components/schemas/OrderRowStatus"
          },
          "stockKeepingUnitId": {
            "example": 513,
            "readOnly": false,
            "description": "The internal identifier of the stock keeping unit.",
            "type": "integer",
            "format": "int32"
          },
          "value": {
            "$ref": "#/components/schemas/OrderRowValue"
          }
        },
        "description": "A single row of a order."
      },
      "MyPagesOrderRow": {
        "type": "object",
        "title": "OrderRow",
        "required": [
          "quantity",
          "returned"
        ],
        "properties": {
          "attribute1Code": {
            "readOnly": false,
            "description": "The attribute1 code of the product",
            "type": "string",
            "example": "..."
          },
          "attribute2Code": {
            "readOnly": false,
            "description": "The attribute2 code of the product",
            "type": "string",
            "example": "..."
          },
          "color": {
            "readOnly": false,
            "description": "Use attribute1Code instead.",
            "type": "string"
          },
          "discount": {
            "readOnly": false,
            "description": "The discount in monetary value of this row",
            "type": "number",
            "example": 12345
          },
          "discountExVat": {
            "readOnly": false,
            "description": "The unit discount, excluding vat, of this row.",
            "type": "number",
            "example": 12345
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "Product European article number",
            "type": "string",
            "example": "..."
          },
          "linkFriendlyName": {
            "readOnly": false,
            "description": "Get the friendly name for the link.",
            "type": "string",
            "example": "..."
          },
          "mediaUrl": {
            "readOnly": false,
            "description": "URL for the media.",
            "type": "string",
            "example": "..."
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "Product price look-up number",
            "type": "string",
            "example": "..."
          },
          "productGroupName": {
            "readOnly": false,
            "description": "Default group for the article, if it has one.",
            "type": "string",
            "example": "..."
          },
          "productId": {
            "readOnly": false,
            "description": "The internal product identifier",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productName": {
            "readOnly": false,
            "description": "The product name",
            "type": "string",
            "example": "..."
          },
          "productNumber": {
            "readOnly": false,
            "description": "The product number",
            "type": "string",
            "example": "..."
          },
          "providerUniqueData": {
            "readOnly": false,
            "description": "The provider unique data if present",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "quantity": {
            "readOnly": false,
            "description": "The number of items of this row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "quantityDelivered": {
            "readOnly": false,
            "description": "Number of products delivered for this row.\n\u003cp\u003e\nNOTE: quantityDelivered may not \u003ci\u003ealways\u003c/i\u003e (for all external parties) be populated.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "returned": {
            "readOnly": false,
            "description": "If this row has been returned",
            "type": "boolean",
            "example": true
          },
          "rowSalesToPay": {
            "readOnly": false,
            "description": "The total price to pay for this row.",
            "type": "number",
            "example": 12345
          },
          "rowSalesToPayExVat": {
            "readOnly": false,
            "description": "The total price, excluding vat, to pay for this row.",
            "type": "number",
            "example": 12345
          },
          "rowVatToPay": {
            "readOnly": false,
            "description": "The total vat to pay for this row.",
            "type": "number",
            "example": 12345
          },
          "size": {
            "readOnly": false,
            "description": "Use attribute2Code instead.",
            "type": "string"
          },
          "unitPrice": {
            "readOnly": false,
            "description": "The unit price of this row.",
            "type": "number",
            "example": 12345
          },
          "unitPriceExVat": {
            "readOnly": false,
            "description": "The unit price, excluding vat, of this row.",
            "type": "number",
            "example": 12345
          },
          "unitVat": {
            "readOnly": false,
            "description": "The unit vat of this row.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "An order row defines a row from a purchase\n\u003cp\u003e\nEach order contains one or several rows"
      },
      "OrderRowStatus": {
        "type": "string",
        "title": "OrderRowStatus",
        "enum": [
          "PLACED",
          "DELIVERY_CREATED",
          "PART_DELIVERED",
          "FULLY_DELIVERED",
          "CANCELED"
        ],
        "description": "The status of a order row."
      },
      "OrderRowValue": {
        "type": "object",
        "title": "OrderRowValue",
        "properties": {
          "discount": {
            "example": 0,
            "readOnly": false,
            "description": "Deprecated. Use discountIncludingTax instead. The total discount of the row.",
            "type": "number"
          },
          "discountExcludingTax": {
            "example": 0,
            "readOnly": false,
            "description": "The total discount excluding tax of the row.",
            "type": "number"
          },
          "discountIncludingTax": {
            "example": 0,
            "readOnly": false,
            "description": "The total discount including tax of the row.",
            "type": "number"
          },
          "taxRate": {
            "example": 0.25,
            "readOnly": false,
            "description": "The tax rate of the row.",
            "type": "number"
          },
          "total": {
            "example": 20,
            "readOnly": false,
            "description": "Deprecated. Use totalIncludingTax instead. The total value of the row.",
            "type": "number"
          },
          "totalExcludingTax": {
            "example": 16,
            "readOnly": false,
            "description": "The total value excluding tax of the row.",
            "type": "number"
          },
          "totalIncludingTax": {
            "example": 20,
            "readOnly": false,
            "description": "The total value including tax of the row.",
            "type": "number"
          },
          "unitPrice": {
            "example": 20,
            "readOnly": false,
            "description": "Deprecated. Use unitPriceIncludingTax field instead. This field represents the unit price of the row.",
            "type": "number"
          },
          "unitPriceExcludingTax": {
            "example": 16,
            "readOnly": false,
            "description": "The unit price excluding tax of the row.",
            "type": "number"
          },
          "unitPriceIncludingTax": {
            "example": 20,
            "readOnly": false,
            "description": "The unit price including tax of the row.",
            "type": "number"
          }
        },
        "description": "Contains values of a order row."
      },
      "OrderStatus": {
        "type": "string",
        "title": "OrderStatus",
        "enum": [
          "PLACED",
          "DELIVERY_CREATED",
          "PART_DELIVERED",
          "FULLY_DELIVERED",
          "CANCELED"
        ],
        "description": "The status of a order."
      },
      "OrderStatus_v2": {
        "type": "string",
        "title": "OrderStatus",
        "enum": [
          "PLACED",
          "DELIVERY_CREATED",
          "PARTLY_DELIVERED",
          "DELIVERED",
          "CANCELLED"
        ],
        "description": "Defines possible statuses in the order flow."
      },
      "OrderType": {
        "type": "string",
        "title": "OrderType",
        "enum": [
          "STANDARD",
          "GIVER_RECRUITER",
          "BONUS",
          "EXTRA_CLUB_POSTING",
          "SUBSCRIPTION",
          "MEMBERSHIP_INTRO",
          "MEMBERSHIP_POSTING",
          "MEMBERSHIP_NO_THANKS",
          "STOCK_REDISTRIBUTION",
          "RECEIPT",
          "BUNDLE_ORDER",
          "UNCOLLECTED_FEE",
          "LAGUN",
          "SPECIAL"
        ],
        "description": ""
      },
      "OrderValue": {
        "type": "object",
        "title": "OrderValue",
        "properties": {
          "charge": {
            "example": 0,
            "readOnly": false,
            "description": "The charge of the order.",
            "type": "number"
          },
          "discount": {
            "example": 0,
            "readOnly": false,
            "description": "The discount of the order.",
            "type": "number"
          },
          "paymentFee": {
            "example": 0,
            "readOnly": false,
            "description": "The payment fee of the order.",
            "type": "number"
          },
          "shippingFee": {
            "example": 9,
            "readOnly": false,
            "description": "The shipping fee of the order.",
            "type": "number"
          },
          "total": {
            "example": 49,
            "readOnly": false,
            "description": "The total value of the order.",
            "type": "number"
          }
        },
        "description": "Contains values of the order."
      },
      "PackageContent": {
        "type": "object",
        "title": "PackageContent",
        "required": [
          "productId"
        ],
        "properties": {
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "The European article number (EAN13) of the component SKU. Null when the source row does not resolve to a specific SKU.",
            "type": "string",
            "example": "..."
          },
          "mandatory": {
            "readOnly": false,
            "description": "Whether this component is mandatory in the package. Null for article_attribute_master entries.",
            "type": "boolean",
            "example": true
          },
          "matchQuantity": {
            "readOnly": false,
            "description": "Whether the quantity of this component must be matched exactly. Null for article_attribute_master entries.",
            "type": "boolean",
            "example": true
          },
          "priceList": {
            "$ref": "#/components/schemas/PriceList_Product"
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price look-up number (PLUNO) of the component SKU. Null when the source row does not resolve to a specific SKU.",
            "type": "string",
            "example": "..."
          },
          "productId": {
            "readOnly": false,
            "description": "The internal product identifier of the component article.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productNumber": {
            "readOnly": false,
            "description": "The product number of the component article.",
            "type": "string",
            "example": "..."
          },
          "quantity": {
            "readOnly": false,
            "description": "The number of component units in this package entry.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "relationNumber": {
            "readOnly": false,
            "description": "The relation number grouping this entry with others in the same package group. Null for article_attribute_master entries.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "sort": {
            "readOnly": false,
            "description": "The sort order of this component within its group. Null for article_attribute_master entries.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "sourceType": {
            "$ref": "#/components/schemas/PackageContentSourceType"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The internal SKU identifier of the component. Null when the source row does not resolve to a specific SKU.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "An entry inside a product\u0027s or SKU\u0027s packageContents list. Describes one component article. Carries data from either\narticle_attribute_master (for master/static/multi-package products) or related_article_attribute (for CONTENTS\nflex-package contents and ALREADY_PACKAGED prepacks). The sourceType discriminator says which."
      },
      "PackageContentSourceType": {
        "type": "string",
        "title": "PackageContentSourceType",
        "enum": [
          "COPY_PRODUCT",
          "STATIC_PACKAGE",
          "MULTI_PACKAGE",
          "ALREADY_PACKAGED",
          "CONTENTS"
        ],
        "description": "The origin of a PackageContent entry. Master-attribute origins map to the master article\u0027s\nArticleType; relation-based origins map to RelationType values."
      },
      "PackageToAddOrUpdate": {
        "type": "object",
        "title": "PackageToAddOrUpdate",
        "properties": {
          "content": {
            "$ref": "#/components/schemas/ContentGroup"
          },
          "productNumber": {
            "example": "123PRODUCT",
            "readOnly": false,
            "description": "The product number of the master product.",
            "type": "string"
          }
        },
        "description": "Contains a package to add or update"
      },
      "PackagesToAddOrUpdate": {
        "type": "object",
        "title": "PackagesToAddOrUpdate",
        "properties": {
          "packagesToAddOrUpdate": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PackageToAddOrUpdate"
            }
          }
        },
        "description": "Contains packages to add or update"
      },
      "Parameter": {
        "type": "object",
        "title": "Parameter",
        "properties": {
          "description": {
            "example": "The discount in percent to apply to the product",
            "readOnly": false,
            "description": "The description of the usage of the parameter.",
            "type": "string"
          },
          "key": {
            "example": "discountPercent",
            "readOnly": false,
            "description": "The name of the parameter.",
            "type": "string"
          },
          "value": {
            "example": "20",
            "readOnly": false,
            "description": "The value of the parameter to be applied.",
            "type": "string"
          }
        },
        "description": "A variable condition or value of an offer"
      },
      "Parcel": {
        "type": "object",
        "title": "Parcel",
        "properties": {
          "parcelNumber": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "status": {
            "$ref": "#/components/schemas/MyPagesParcelStatus"
          },
          "trackingURL": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Holds tracking information for a shipped parcel, tied to a specific order."
      },
      "ParcelCreateCustomer": {
        "type": "object",
        "title": "ParcelCreateCustomer",
        "properties": {
          "alternativeCellphone": {
            "readOnly": false,
            "description": "An alternative cellphone number of the customer",
            "type": "string",
            "example": "..."
          },
          "alternativeEmail": {
            "readOnly": false,
            "description": "An alternative email address of the customer",
            "type": "string",
            "example": "..."
          },
          "cellphone": {
            "example": "+46701234567",
            "readOnly": false,
            "description": "The cellphone number of the customer",
            "type": "string"
          },
          "companyName": {
            "readOnly": false,
            "description": "The company name of the customer (mutually exclusive with firstName/lastName)",
            "type": "string",
            "example": "..."
          },
          "customerNumber": {
            "example": "10001",
            "readOnly": false,
            "description": "The customer number. Used to match against an existing customer",
            "type": "string"
          },
          "dateOfBirth": {
            "example": "1991-01-15",
            "readOnly": false,
            "description": "The date of birth of the customer (only for private persons). Format: YYYY-MM-DD",
            "type": "string"
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/ParcelCreateDeliveryAddress"
          },
          "email": {
            "example": "john.doe@example.com",
            "readOnly": false,
            "description": "The email address of the customer",
            "type": "string"
          },
          "firstName": {
            "example": "John",
            "readOnly": false,
            "description": "The first name of the customer (mutually exclusive with companyName)",
            "type": "string"
          },
          "lastName": {
            "example": "Doe",
            "readOnly": false,
            "description": "The last name of the customer (mutually exclusive with companyName)",
            "type": "string"
          },
          "orders": {
            "readOnly": false,
            "description": "The orders for this customer",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParcelCreateOrder"
            }
          },
          "organizationNumber": {
            "readOnly": false,
            "description": "The organization number of the customer (only for companies)",
            "type": "string",
            "example": "..."
          },
          "socialSecurityNumber": {
            "example": "19910115-1234",
            "readOnly": false,
            "description": "The social security number of the customer (only for private persons)",
            "type": "string"
          }
        },
        "description": "A customer for parcel creation"
      },
      "ParcelCreateDelivery": {
        "type": "object",
        "title": "ParcelCreateDelivery",
        "properties": {
          "parcels": {
            "readOnly": false,
            "description": "The parcels for this shipment",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParcelCreateParcel"
            }
          }
        },
        "description": "A shipment for parcel creation"
      },
      "ParcelCreateDeliveryAddress": {
        "type": "object",
        "title": "ParcelCreateDeliveryAddress",
        "properties": {
          "addressLine1": {
            "example": "Storgatan 1",
            "readOnly": false,
            "description": "The first line of the address",
            "type": "string"
          },
          "administrativeDivision": {
            "readOnly": false,
            "description": "The administrative division (state/province/region) of the address",
            "type": "string",
            "example": "..."
          },
          "careOf": {
            "readOnly": false,
            "description": "The care of (c/o) line of the address",
            "type": "string",
            "example": "..."
          },
          "city": {
            "example": "Stockholm",
            "readOnly": false,
            "description": "The city of the address",
            "type": "string"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The ISO 3166-1 alpha-2 country code",
            "type": "string"
          },
          "zipcode": {
            "example": "12345",
            "readOnly": false,
            "description": "The zipcode of the address",
            "type": "string"
          }
        },
        "description": "The delivery address of a customer"
      },
      "ParcelCreateOrder": {
        "type": "object",
        "title": "ParcelCreateOrder",
        "properties": {
          "cashOnDeliveryAmount": {
            "example": "0",
            "readOnly": false,
            "description": "The cash on delivery amount",
            "type": "string"
          },
          "deliveries": {
            "readOnly": false,
            "description": "The shipments for this order",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParcelCreateDelivery"
            }
          },
          "externalOrderNumber": {
            "readOnly": false,
            "description": "An external order number",
            "type": "string",
            "example": "..."
          },
          "orderDate": {
            "example": "2026-03-20T10:00:00.000Z",
            "readOnly": false,
            "description": "The order date. Defaults to the current date if not provided",
            "type": "string"
          },
          "orderNumber": {
            "example": "100001",
            "readOnly": false,
            "description": "The order number. Used to match against an existing order",
            "type": "string"
          },
          "paymentMethodCode": {
            "readOnly": false,
            "description": "The payment method code",
            "type": "string",
            "example": "..."
          }
        },
        "description": "An order for parcel creation"
      },
      "ParcelCreateParcel": {
        "type": "object",
        "title": "ParcelCreateParcel",
        "properties": {
          "comment": {
            "readOnly": false,
            "description": "A comment for the parcel",
            "type": "string",
            "example": "..."
          },
          "contents": {
            "example": "2 shirts, 1 pair of shoes",
            "readOnly": false,
            "description": "The contents of the parcel",
            "type": "string"
          },
          "destinationDeliveryPointCode": {
            "example": "STORE-0042",
            "readOnly": false,
            "description": "The code of the destination delivery point",
            "type": "string"
          },
          "occurredAt": {
            "example": "2026-03-20T14:15:30.000Z",
            "readOnly": false,
            "description": "The time that the parcel event occurred. Defaults to the current time if not provided",
            "type": "string"
          },
          "parcelNumber": {
            "example": "PKG-100011",
            "readOnly": false,
            "description": "The parcel number. Must be unique",
            "type": "string"
          },
          "parcelType": {
            "example": "normal",
            "readOnly": false,
            "description": "The parcel type. Defaults to \u0027normal\u0027 if not provided",
            "type": "string"
          },
          "reference": {
            "readOnly": false,
            "description": "A reference for the parcel",
            "type": "string",
            "example": "..."
          }
        },
        "description": "A parcel to create"
      },
      "ParcelCreateRequest": {
        "type": "object",
        "title": "ParcelCreateRequest",
        "properties": {
          "customers": {
            "readOnly": false,
            "description": "The customers to create parcels for",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParcelCreateCustomer"
            }
          }
        },
        "description": "The request body for creating parcels"
      },
      "ParcelInfo": {
        "type": "object",
        "title": "ParcelInfo",
        "required": [
          "revoked"
        ],
        "properties": {
          "comment": {
            "readOnly": false,
            "description": "A comment to be used for the parcel",
            "type": "string",
            "example": "..."
          },
          "contents": {
            "example": "2 shirts, 1 pair of shoes",
            "readOnly": false,
            "description": "The contents of the parcel",
            "type": "string"
          },
          "currentDeliveryPointCode": {
            "readOnly": false,
            "description": "The code of the deliverypoint where the parcel is currently at",
            "type": "string",
            "example": "..."
          },
          "customerIdentifiedBy": {
            "$ref": "#/components/schemas/IdentificationType"
          },
          "customerIdentifiedByValue": {
            "example": "19911111-1111",
            "readOnly": false,
            "description": "The identifying information of the recipient of the parcel",
            "type": "string"
          },
          "estimatedTimeOfArrival": {
            "example": "2012-05-23T18:25:43.899Z",
            "readOnly": false,
            "description": "The estimated time of arrival of the parcel",
            "type": "string"
          },
          "occurredAt": {
            "example": "2012-04-23T18:25:43.899Z",
            "readOnly": false,
            "description": "The time that this event was registered on the parcel",
            "type": "string"
          },
          "parcelNumber": {
            "example": "100011",
            "readOnly": false,
            "description": "The parcelnumber of the parcel",
            "type": "string"
          },
          "proxyIdentifiedBy": {
            "$ref": "#/components/schemas/IdentificationType"
          },
          "proxyIdentifiedByValue": {
            "example": "19911111-1112",
            "readOnly": false,
            "description": "The identifying information of the proxy collector for the recipient of the parcel",
            "type": "string"
          },
          "registeredBy": {
            "example": "karl karlsson",
            "readOnly": false,
            "description": "The identifying information of who registered the parcel",
            "type": "string"
          },
          "revoked": {
            "example": false,
            "readOnly": false,
            "description": "If the parcel is revoked or not",
            "type": "boolean"
          },
          "status": {
            "readOnly": false,
            "description": "The status of the parcel",
            "type": "string",
            "example": "..."
          },
          "stockLocation": {
            "readOnly": false,
            "description": "The stocklocation of the parcel",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Contains changes to apply for a parcel"
      },
      "ParcelStatus": {
        "type": "string",
        "title": "ParcelStatus",
        "enum": [
          "CREATED",
          "PACKED",
          "ROUTED",
          "MISDELIVERED",
          "REROUTED",
          "PRESUMED_ARRIVED",
          "ARRIVED",
          "COLLECTED",
          "UNCOLLECTED",
          "MISSING",
          "LOST",
          "UNPACKED",
          "CANCELLED"
        ],
        "description": "The status of a parcel. Statuses beyond \u003ccode\u003eCREATED\u003c/code\u003e, \u003ccode\u003ePACKED\u003c/code\u003e and \u003ccode\u003eCANCELLED\u003c/code\u003e are maintained for\n\u003cb\u003e\u0027In Store\u0027\u003c/b\u003e parcels and for carriers with a status integration."
      },
      "ParcelTimeLine": {
        "type": "object",
        "title": "ParcelTimeLine",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/MyPagesParcelStatus"
          }
        },
        "description": "Holds possible statuses for shipped parcels, tied to a specific order."
      },
      "ParcelUpdates": {
        "type": "object",
        "title": "ParcelUpdates",
        "properties": {
          "parcels": {
            "readOnly": false,
            "description": "Contains changes to apply for parcels",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParcelInfo"
            }
          }
        },
        "description": "Contains changes to apply for parcels"
      },
      "PathInfo": {
        "type": "object",
        "title": "PathInfo",
        "required": [
          "articleId",
          "categoryId",
          "redirectCode"
        ],
        "properties": {
          "articleId": {
            "example": 0,
            "readOnly": false,
            "description": "The identifier of the article to load and present.",
            "type": "integer",
            "format": "int32"
          },
          "categoryId": {
            "example": 441,
            "readOnly": false,
            "description": "The identifier of the category to load and present.",
            "type": "integer",
            "format": "int32"
          },
          "languageAlternatives": {
            "readOnly": false,
            "description": "The available language alternatives for the path.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LanguageAlternative"
            }
          },
          "redirectCode": {
            "example": 301,
            "readOnly": false,
            "description": "The HTTP code to use when redirecting.",
            "type": "integer",
            "format": "int32"
          },
          "redirectURL": {
            "example": "",
            "readOnly": false,
            "description": "The URL that the client should be redirected to.",
            "type": "string"
          },
          "targetType": {
            "$ref": "#/components/schemas/TargetType"
          }
        },
        "description": "The target destination of a path."
      },
      "PayType": {
        "type": "string",
        "title": "PayType",
        "enum": [
          "UNDEFINED",
          "COD",
          "INVOICE",
          "INSTANT_PAYMENT",
          "AUTOGIRO",
          "CASH",
          "CREDIT",
          "FACTORING",
          "PAY_LATER",
          "PREPAYMENT",
          "LAGUN",
          "E_INVOICE"
        ],
        "description": ""
      },
      "PaymentInfo": {
        "type": "object",
        "title": "PaymentInfo",
        "required": [
          "paymentMethodId",
          "problematic"
        ],
        "properties": {
          "expiresAtMonth": {
            "readOnly": false,
            "description": "The month that the credit card expires.",
            "type": "string",
            "example": "..."
          },
          "expiresAtYear": {
            "readOnly": false,
            "description": "The year that the credit card expires.",
            "type": "string",
            "example": "..."
          },
          "maskedCreditCardNumber": {
            "readOnly": false,
            "description": "The masked credit card number.",
            "type": "string",
            "example": "..."
          },
          "paymentMethodId": {
            "readOnly": false,
            "description": "The identifier of the payment method that was used.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "problematic": {
            "readOnly": false,
            "description": "Whether or not the payment is being problematic. This will be true if Viskan could not withdraw money from the reference payment for\nany reason, otherwise; false.",
            "type": "boolean",
            "example": true
          }
        },
        "description": "Holds information about how a subscription or rental is being paid periodically."
      },
      "PaymentMethod": {
        "type": "object",
        "title": "PaymentMethod",
        "required": [
          "paymentMethodId"
        ],
        "properties": {
          "external_pay_code": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "methodCode": {
            "readOnly": false,
            "description": "Deprecated in favor of \u003ccode\u003epaymentMethodName\u003c/code\u003e",
            "type": "string"
          },
          "methodDescription": {
            "readOnly": false,
            "description": "A short description of the payment method.",
            "type": "string",
            "example": "..."
          },
          "methodName": {
            "readOnly": false,
            "description": "Deprecated in favor of \u003ccode\u003epaymentMethodName\u003c/code\u003e",
            "type": "string"
          },
          "payType": {
            "$ref": "#/components/schemas/PayType"
          },
          "paymentFee": {
            "example": 19,
            "readOnly": false,
            "description": "The payment fee for this method for the filtered country.",
            "type": "number"
          },
          "paymentMethodId": {
            "readOnly": false,
            "description": "The ID of the payment method.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "paymentMethodName": {
            "readOnly": false,
            "description": "The name of the payment method.",
            "type": "string",
            "example": "..."
          },
          "serviceProviderCode": {
            "readOnly": false,
            "description": "The third party provider used for this payment method.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Defines a payment method that can be used to accept payments."
      },
      "PaymentMethod_CustomerAPI": {
        "type": "object",
        "title": "PaymentMethod",
        "required": [
          "paymentMethodId"
        ],
        "properties": {
          "paymentMethodId": {
            "example": 1,
            "readOnly": false,
            "description": "The id of the payment method.",
            "type": "integer",
            "format": "int32"
          },
          "paymentMethodName": {
            "example": "Invoice",
            "readOnly": false,
            "description": "The payment method name.",
            "type": "string"
          }
        },
        "description": "Payment method"
      },
      "PaymentMethod_SubscriptionAPI": {
        "type": "object",
        "title": "PaymentMethod",
        "required": [
          "paymentMethodId"
        ],
        "properties": {
          "paymentMethodId": {
            "example": 1,
            "readOnly": false,
            "description": "The id of the payment method.",
            "type": "integer",
            "format": "int32"
          },
          "paymentMethodName": {
            "example": "Invoice",
            "readOnly": false,
            "description": "The payment method name.",
            "type": "string"
          }
        },
        "description": "Payment method"
      },
      "PaymentMethod_OrderAPI": {
        "type": "object",
        "title": "PaymentMethod",
        "properties": {
          "externalPaymentMethodCode": {
            "example": "INVOICE-30",
            "readOnly": false,
            "description": "The external code of the payment method, the stable identifier integrations address it by. Empty when none is set.",
            "type": "string"
          },
          "paymentMethodId": {
            "readOnly": false,
            "description": "The id of the payment method.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "paymentMethodName": {
            "example": "Autogiro SE",
            "readOnly": false,
            "description": "The name of the payment method.",
            "type": "string"
          }
        },
        "description": "Contains information about a payment method"
      },
      "PaymentMethod_DeliveryAPI": {
        "type": "object",
        "title": "PaymentMethod",
        "required": [
          "paymentMethodId"
        ],
        "properties": {
          "externalPaymentMethodCode": {
            "example": "INVOICE-30",
            "readOnly": false,
            "description": "The external code of the payment method, the stable identifier integrations address it by. Empty when none is set.",
            "type": "string"
          },
          "paymentMethodCode": {
            "readOnly": false,
            "description": "The code of the payment method, deprecated use paymentMethodName instead.",
            "type": "string"
          },
          "paymentMethodId": {
            "readOnly": false,
            "description": "The internal identifier of the payment method.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "paymentMethodName": {
            "readOnly": false,
            "description": "The code of the payment method.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Holds information about the payment method."
      },
      "PaymentReference": {
        "type": "object",
        "title": "PaymentReference",
        "properties": {
          "additionalPaymentType": {
            "example": "Swish",
            "readOnly": false,
            "description": "The additional payment type, if any. Could for example indicate that you chose Swish within an Adyen checkout.",
            "type": "string"
          },
          "amount": {
            "example": 49,
            "readOnly": false,
            "description": "The amount that was paid.",
            "type": "number"
          },
          "reference": {
            "example": "37W15728OP640392F",
            "readOnly": false,
            "description": "The external reference to the transaction.",
            "type": "string"
          },
          "serviceProvider": {
            "example": "Klarna",
            "readOnly": false,
            "description": "The service provider that handled the transaction.",
            "type": "string"
          },
          "transactionType": {
            "$ref": "#/components/schemas/TransactionType"
          }
        },
        "description": "Contains information about a payment reference."
      },
      "PaymentReference_OrderAPI": {
        "type": "object",
        "title": "PaymentReference",
        "properties": {
          "additionalPaymentType": {
            "example": "Swish",
            "readOnly": false,
            "description": "The additional payment type, if any. Could for example indicate that you chose Swish within an Adyen checkout.",
            "type": "string"
          },
          "amount": {
            "example": 49,
            "readOnly": false,
            "description": "The amount that was paid.",
            "type": "number"
          },
          "reference": {
            "example": "37W15728OP640392F",
            "readOnly": false,
            "description": "The external reference to the transaction.",
            "type": "string"
          },
          "serviceProvider": {
            "example": "Klarna",
            "readOnly": false,
            "description": "The service provider that handled the transaction.",
            "type": "string"
          },
          "transactionType": {
            "$ref": "#/components/schemas/TransactionType"
          }
        },
        "description": "Contains information about a payment reference."
      },
      "PaymentStatus": {
        "type": "string",
        "title": "PaymentStatus",
        "enum": [
          "NOT_INVOICED",
          "UNPAID",
          "PARTLY_PAID",
          "NO_CLAIM",
          "OVERPAID"
        ],
        "description": "Defines possible statuses for payments."
      },
      "PhysicalStore": {
        "type": "object",
        "title": "PhysicalStore",
        "required": [
          "storeId"
        ],
        "properties": {
          "address": {
            "$ref": "#/components/schemas/AddressWithGeolocation"
          },
          "description": {
            "readOnly": false,
            "description": "A short description of the store.",
            "type": "string",
            "example": "..."
          },
          "email": {
            "readOnly": false,
            "description": "The e-mail address to use when contacting the store by e-mail.",
            "type": "string",
            "example": "..."
          },
          "openingHoursDeviation": {
            "readOnly": false,
            "description": "The potential deviation in opening hours.",
            "type": "string",
            "example": "..."
          },
          "openingHoursSaturday": {
            "readOnly": false,
            "description": "The opening hours on a Saturday.",
            "type": "string",
            "example": "..."
          },
          "openingHoursSunday": {
            "readOnly": false,
            "description": "The opening hours on a Sunday.",
            "type": "string",
            "example": "..."
          },
          "openingHoursWeekdays": {
            "readOnly": false,
            "description": "The opening hours on regular weekdays.",
            "type": "string",
            "example": "..."
          },
          "phone": {
            "readOnly": false,
            "description": "The phone number to use when contacting the store by phone.",
            "type": "string",
            "example": "..."
          },
          "storeId": {
            "readOnly": false,
            "description": "The identifier of the store.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "storeName": {
            "readOnly": false,
            "description": "The name of the store.",
            "type": "string",
            "example": "..."
          },
          "storeUrl": {
            "readOnly": false,
            "description": "The URL to the store\u0027s own page on the web site.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Defines a physical store, containing contact details, geographical location and opening hours."
      },
      "PhysicalStoreStockBalance": {
        "type": "object",
        "title": "PhysicalStoreStockBalance",
        "required": [
          "totalQuantity"
        ],
        "properties": {
          "stockKeepingUnits": {
            "readOnly": false,
            "description": "The stock keeping units containing information about stock balances.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PhysicalStoreStockKeepingUnit"
            }
          },
          "store": {
            "$ref": "#/components/schemas/PhysicalStore"
          },
          "totalQuantity": {
            "readOnly": false,
            "description": "The total quantity for all included stock keeping units.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Contains information about stock balances for a physical store. The stock balance information is separated by stock keeping units."
      },
      "PhysicalStoreStockKeepingUnit": {
        "type": "object",
        "title": "PhysicalStoreStockKeepingUnit",
        "required": [
          "articleId",
          "attribute1Id",
          "attribute2Id",
          "attribute3Id",
          "quantity",
          "stockKeepingUnitId"
        ],
        "properties": {
          "articleId": {
            "readOnly": false,
            "description": "The identifier of the article itself.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute1Id": {
            "readOnly": false,
            "description": "The identifier of the first attribute.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute2Id": {
            "readOnly": false,
            "description": "The identifier of the second attribute.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute3Id": {
            "readOnly": false,
            "description": "The identifier of the third attribute.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "quantity": {
            "readOnly": false,
            "description": "The quantity currently in stock for this unit.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The stock keeping unit.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Information about the quantity in stock of a specific stock keeping unit."
      },
      "PickupPoint": {
        "type": "object",
        "title": "PickupPoint",
        "required": [
          "pickupPointId"
        ],
        "properties": {
          "carrier": {
            "example": "Poste Italiane",
            "readOnly": false,
            "description": "The name of the carrier.",
            "type": "string"
          },
          "carrierLookup": {
            "example": "Poste Italiane",
            "readOnly": false,
            "description": "The name of the carrier in the lookup language.",
            "type": "string"
          },
          "pickupPointAddress": {
            "$ref": "#/components/schemas/PickupPointAddress"
          },
          "pickupPointCode": {
            "example": "ABC123",
            "readOnly": false,
            "description": "The unique code of the pickup point. It\u0027s unique per carrier.",
            "type": "string"
          },
          "pickupPointId": {
            "example": 42,
            "readOnly": false,
            "description": "The internal identifier of the pickup point.",
            "type": "integer",
            "format": "int32"
          },
          "pickupPointName": {
            "example": "Borås Centrum",
            "readOnly": false,
            "description": "The public name of the pickup point.",
            "type": "string"
          }
        },
        "description": "Pickup point selected by the customer for a carrier."
      },
      "PickupPointAddress": {
        "type": "object",
        "title": "PickupPointAddress",
        "properties": {
          "addressLine1": {
            "example": "Druveforsvägen 8",
            "readOnly": false,
            "description": "The first address line, usually street address.",
            "type": "string"
          },
          "city": {
            "example": "Borås",
            "readOnly": false,
            "description": "The city of the address.",
            "type": "string"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the address, in ISO alpha-2 format, for example SE.",
            "type": "string"
          },
          "zipCode": {
            "example": "50454",
            "readOnly": false,
            "description": "The zipcode/postal code of the address.",
            "type": "string"
          }
        },
        "description": "Address of a pickup point."
      },
      "PickupPointToSet": {
        "type": "object",
        "title": "PickupPointToSet",
        "properties": {
          "carrier": {
            "example": "Posten",
            "readOnly": false,
            "description": "The carrier name (the non-translated lookup name, same as carrierLookup returned by the customer search).",
            "type": "string"
          },
          "code": {
            "example": "AB123",
            "readOnly": false,
            "description": "The pickup point code. It\u0027s unique per carrier.",
            "type": "string"
          }
        },
        "description": "A pickup point to store for the customer, identified by carrier and code."
      },
      "PresentationType": {
        "type": "string",
        "title": "PresentationType",
        "enum": [
          "FRONT",
          "BACK",
          "LIST",
          "RELATED",
          "SEARCH",
          "TECH",
          "INTERNAL",
          "EXTRA",
          "TOP",
          "BOTTOM",
          "FEED"
        ],
        "description": ""
      },
      "PreviousDelivery": {
        "type": "object",
        "title": "PreviousDelivery",
        "required": [
          "carriageFee",
          "invoicedAmount",
          "valueOfProducts",
          "vat"
        ],
        "properties": {
          "carriageFee": {
            "example": 10,
            "readOnly": false,
            "description": "The carriage fee of the previous delivery.",
            "type": "number",
            "format": "double"
          },
          "invoicedAmount": {
            "example": 100,
            "readOnly": false,
            "description": "The total invoiced amount of the previous delivery.",
            "type": "number",
            "format": "double"
          },
          "previousDeliveryDate": {
            "example": "2020-05-02",
            "readOnly": false,
            "description": "The previous delivery date of the subscription.",
            "type": "string",
            "format": "date"
          },
          "valueOfProducts": {
            "example": 90,
            "readOnly": false,
            "description": "The total cost of the products of the previous delivery.",
            "type": "number",
            "format": "double"
          },
          "vat": {
            "example": 10,
            "readOnly": false,
            "description": "The vat of the previous delivery.",
            "type": "number",
            "format": "double"
          }
        },
        "description": "Previous Delivery information"
      },
      "Price": {
        "type": "object",
        "title": "Price",
        "properties": {
          "active": {
            "example": false,
            "readOnly": false,
            "description": "Indicates if this product price is active.",
            "type": "boolean"
          },
          "comparisonPrice": {
            "example": 100,
            "readOnly": false,
            "description": "The optional comparison price per unit.",
            "type": "number"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2) of the price.",
            "type": "string"
          },
          "currencyCode": {
            "example": "SEK",
            "readOnly": false,
            "description": "",
            "type": "string"
          },
          "priceList": {
            "$ref": "#/components/schemas/PriceList_Product"
          },
          "priceListName": {
            "example": "",
            "readOnly": false,
            "description": "The name of the optional price list. If not specified, the price is for the standard price list.\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e The priceListName field is deprecated and no longer used.  Please use the new priceList field instead.\u003c/p\u003e",
            "type": "string"
          },
          "recommendedPrice": {
            "example": 100,
            "readOnly": false,
            "description": "The optional recommended price per unit.",
            "type": "number"
          },
          "taxRate": {
            "example": 0.25,
            "readOnly": false,
            "description": "The tax rate of this price. This tax rate must be a valid tax rate for the given country.",
            "type": "number"
          },
          "unitPrice": {
            "example": 100,
            "readOnly": false,
            "description": "The sales price per unit, including tax.",
            "type": "number"
          },
          "unitPriceOriginal": {
            "example": 100,
            "readOnly": false,
            "description": "The optional original price per unit, including tax. If present and is higher than the sales price, the unit price is considered reduced.",
            "type": "number"
          }
        },
        "description": "Defines a single price of a stock keeping unit."
      },
      "Price_response": {
        "type": "object",
        "title": "Price",
        "required": [
          "offerTypeId",
          "priceCampaignId",
          "priceListId"
        ],
        "properties": {
          "comparisonPrice": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "lowestPriceWithinPeriod": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "offerTypeId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "priceCampaignId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "priceListId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "recommendedUnitPrice": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "salePrice": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "taxRate": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "unitPrice": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          }
        },
        "description": ""
      },
      "PriceCampaign": {
        "type": "object",
        "title": "PriceCampaign",
        "required": [
          "customerType",
          "offerTypeId",
          "priceCampaignId"
        ],
        "properties": {
          "alternativeCampaignName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "campaignName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "customerType": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "offerTypeId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "parameters": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfferParameter"
            }
          },
          "priceCampaignId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "properties": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property_response"
            }
          },
          "stockKeepingUnitIds": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          }
        },
        "description": ""
      },
      "PriceChanges": {
        "type": "object",
        "title": "PriceChanges",
        "properties": {
          "rowsToUpdate": {
            "readOnly": false,
            "description": "Contains a collection of product-price to update.\nDeprecated in favour of rowsToUpdateOrAdd}.\nThe new format allows for add prices in addition to updates.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductPriceUpdate"
            }
          },
          "rowsToUpdateOrAdd": {
            "readOnly": false,
            "description": "Contains a collection of product prices to update or add.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductPriceUpdateOrAdd"
            }
          }
        },
        "description": "Contains information about price changes."
      },
      "PriceList": {
        "type": "object",
        "title": "PriceList",
        "properties": {
          "priceListCode": {
            "example": "Regular",
            "readOnly": false,
            "description": "The optional price list code. Mutually exclusive with priceListId",
            "type": "string"
          },
          "priceListId": {
            "example": 0,
            "readOnly": false,
            "description": "The identifier of the optional price list, the default standard priceListId is \u003ccode\u003e0\u003c/code\u003e. Mutually exclusive with priceListCode",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Price List"
      },
      "PriceList_Product": {
        "type": "object",
        "title": "PriceList",
        "properties": {
          "priceListCode": {
            "example": "PL1",
            "readOnly": false,
            "description": "The API code of the optional price list. If not specified, the price is for the standard price list.",
            "type": "string"
          },
          "priceListId": {
            "example": 100012,
            "readOnly": false,
            "description": "The internal identifier of the optional price list, the default standard priceListId is \u003ccode\u003e0\u003c/code\u003e.",
            "type": "integer",
            "format": "int32"
          },
          "priceListName": {
            "example": "",
            "readOnly": false,
            "description": "The name of the optional price list. If not specified, the price is for the standard price list.",
            "type": "string"
          }
        },
        "description": "Defines a price list of a stock keeping unit."
      },
      "PriceRangeFilter": {
        "type": "object",
        "title": "PriceRangeFilter",
        "properties": {
          "from": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "to": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": ""
      },
      "PriceTier": {
        "type": "object",
        "title": "PriceTier",
        "required": [
          "filterByPriceList",
          "presentTierExcludingTax"
        ],
        "properties": {
          "filterByPriceList": {
            "readOnly": false,
            "description": "If set to true, the price tier will only be applied if the customer is using the specified price list.",
            "type": "boolean",
            "example": true
          },
          "offerText": {
            "readOnly": false,
            "description": "Optional text that can be displayed with the offer. i.e. \"Buy 3 for 100 SEK\".",
            "type": "string",
            "example": "..."
          },
          "presentTierExcludingTax": {
            "readOnly": false,
            "description": "If set to true, the offer text will be displayed with the price excluding tax. Assumes that price is sent in including tax. False by default.",
            "type": "boolean",
            "example": true
          },
          "price": {
            "readOnly": false,
            "description": "The new price for the specified quantity of items.",
            "type": "number",
            "example": 12345
          },
          "quantity": {
            "readOnly": false,
            "description": "The quantity of items to purchase to get the new price. The tier is deactivated if not specified.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Contains information about a price tier. Only supports a single tier at the moment."
      },
      "PriceType": {
        "type": "string",
        "title": "PriceType",
        "enum": [
          "ON_SALE",
          "NOT_ON_SALE"
        ],
        "description": ""
      },
      "Product": {
        "type": "object",
        "title": "Product",
        "required": [
          "active",
          "defaultCategoryId",
          "productId",
          "published"
        ],
        "properties": {
          "active": {
            "readOnly": false,
            "description": "Indicates if this product is active on Product level. There is also an active status on SKU level.",
            "type": "boolean",
            "example": true
          },
          "articleStatus": {
            "$ref": "#/components/schemas/ArticleStatus_article"
          },
          "brandCode": {
            "readOnly": false,
            "description": "A reference to the brand-code of the product.",
            "type": "string",
            "example": "..."
          },
          "brandName": {
            "readOnly": false,
            "description": "A reference to the brand-name of the product.",
            "type": "string",
            "example": "..."
          },
          "brandTag": {
            "readOnly": false,
            "description": "A reference to the brand-tag of the product. Used in the aggregations of the estore product API",
            "type": "string",
            "example": "..."
          },
          "categories": {
            "readOnly": false,
            "description": "All the active categories the product is connected to.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductCategory"
            }
          },
          "defaultAttributes": {
            "$ref": "#/components/schemas/DefaultAttributes"
          },
          "defaultCategoryId": {
            "readOnly": false,
            "description": "The default category-id of the product.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "packageContents": {
            "readOnly": false,
            "description": "A list of package contents for the product. Product-level package contents apply for all skus",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PackageContent"
            }
          },
          "productId": {
            "readOnly": false,
            "description": "The internal identifier of the product.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productName": {
            "readOnly": false,
            "description": "The internal untranslated name of the product.",
            "type": "string",
            "example": "..."
          },
          "productNumber": {
            "readOnly": false,
            "description": "The unique number of the product.",
            "type": "string",
            "example": "..."
          },
          "productType": {
            "$ref": "#/components/schemas/ArticleType"
          },
          "properties": {
            "readOnly": false,
            "description": "A list of properties for the product.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property_Product"
            }
          },
          "publishDate": {
            "example": "2024-06-01",
            "readOnly": false,
            "description": "The date the product is or will be published. If the product is already published, this is the date it was published. If the article status is \u003ccode\u003eNOT_YET_FOR_SALE\u003c/code\u003e and this date is in the future, the product is considered \"coming soon\".",
            "type": "string",
            "format": "date"
          },
          "published": {
            "readOnly": false,
            "description": "Indicates if this product is published on site on Product level. There is also a published status on SKU level.",
            "type": "boolean",
            "example": true
          },
          "stockKeepingUnits": {
            "readOnly": false,
            "description": "All the available stock keeping units of the product.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnit_Product"
            }
          },
          "taxCode": {
            "example": "T1",
            "readOnly": false,
            "description": "The tax code relevant to the product (VAT).",
            "type": "string"
          },
          "translations": {
            "readOnly": false,
            "description": "The translations for the product.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductTranslation"
            }
          }
        },
        "description": "Contains information about a new or updated products."
      },
      "MyPagesWishlistProductRequest": {
        "type": "object",
        "title": "Product",
        "properties": {
          "priceLookUpNumber": {
            "example": "10036-392",
            "readOnly": false,
            "description": "The price look up number of the product.",
            "type": "string"
          },
          "stockKeepingUnitId": {
            "example": 513,
            "readOnly": false,
            "description": "The stock keeping unit ID of the product.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Request object for saving a product in a wishlist."
      },
      "MyPagesWishlistProductResponse": {
        "type": "object",
        "title": "Product",
        "properties": {
          "attribute1Id": {
            "example": 1,
            "readOnly": false,
            "description": "The attribute1 ID.",
            "type": "integer",
            "format": "int32"
          },
          "attribute2Id": {
            "example": 1,
            "readOnly": false,
            "description": "The attribute2 ID.",
            "type": "integer",
            "format": "int32"
          },
          "attribute3Id": {
            "example": 1,
            "readOnly": false,
            "description": "The attribute3 ID.",
            "type": "integer",
            "format": "int32"
          },
          "priceLookUpNumber": {
            "example": "10036-392",
            "readOnly": false,
            "description": "The price look up number of the product.",
            "type": "string"
          },
          "productId": {
            "example": 1,
            "readOnly": false,
            "description": "The product ID.",
            "type": "integer",
            "format": "int32"
          },
          "stockKeepingUnitId": {
            "example": 513,
            "readOnly": false,
            "description": "The stock keeping unit ID of the product.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Response object for a product in a wishlist."
      },
      "ProductCategory": {
        "type": "object",
        "title": "ProductCategory",
        "required": [
          "categoryId"
        ],
        "properties": {
          "categoryId": {
            "readOnly": false,
            "description": "The id of the category.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "A category the product is connected to."
      },
      "ProductChanges": {
        "type": "object",
        "title": "ProductChanges",
        "properties": {
          "productsToAddOrUpdate": {
            "readOnly": false,
            "description": "The products to add or update.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductToAddOrUpdate"
            }
          }
        },
        "description": "Contains changes that applies to a product."
      },
      "ProductDetailRequest": {
        "type": "object",
        "title": "ProductDetailRequest",
        "required": [
          "excludeAddons",
          "includeCustomerCategoryOffers",
          "preview",
          "requireBalancesForRelatedProducts",
          "requireContentCategoryConnection",
          "requireMediaForRelatedProducts"
        ],
        "properties": {
          "countryCode": {
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2, for example \u003ccode\u003eSE\u003c/code\u003e) used for filtering, as an alternative to\ncountryId. The two are mutually exclusive, and supplying both is an error.\n\u003cp\u003e\nPrefer countryId whenever it is known. A countryCode has to be looked up on every call, and only\ncountries that are active for the store can be resolved, so countryId is both cheaper and less\nrestrictive.\n\u003c/p\u003e",
            "type": "string",
            "example": "..."
          },
          "countryId": {
            "readOnly": false,
            "description": "The country id used for filtering. Mutually exclusive with countryCode.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "customerReducedPricePercentage": {
            "readOnly": false,
            "description": "The customers reduced price in percentage",
            "type": "number",
            "example": 12345
          },
          "customerType": {
            "$ref": "#/components/schemas/CustomerType"
          },
          "excludeAddons": {
            "readOnly": false,
            "description": "If addon products should be excluded from the result",
            "type": "boolean",
            "example": true
          },
          "includeCustomerCategoryOffers": {
            "readOnly": false,
            "description": "If we want to return offers connected to the category of a customer",
            "type": "boolean",
            "example": true
          },
          "languageId": {
            "readOnly": false,
            "description": "The language you want to load the product with",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "linkFriendlyName": {
            "readOnly": false,
            "description": "A link friendly name that can be used to identify the product",
            "type": "string",
            "example": "..."
          },
          "preview": {
            "readOnly": false,
            "description": "Whether to include preview articles in the result",
            "type": "boolean",
            "example": true
          },
          "priceListIds": {
            "readOnly": false,
            "description": "The price list ids used for filtering",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "productId": {
            "readOnly": false,
            "description": "A product id that can be used to identify the product",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productUUID": {
            "readOnly": false,
            "description": "A product UUID that can be used to identify the product",
            "type": "string",
            "example": "..."
          },
          "requireBalancesForRelatedProducts": {
            "readOnly": false,
            "description": "If a related product requires balance to be in the result",
            "type": "boolean",
            "example": true
          },
          "requireContentCategoryConnection": {
            "readOnly": false,
            "description": "If content category table connections are required in the database for a category to appear",
            "type": "boolean",
            "example": true
          },
          "requireMediaForRelatedProducts": {
            "readOnly": false,
            "description": "If a related product requires media to be in the result",
            "type": "boolean",
            "example": true
          }
        },
        "description": "Defines a request for getting the details of a product"
      },
      "ProductDetailResponse": {
        "type": "object",
        "title": "ProductDetailResponse",
        "required": [
          "brandNew",
          "comingSoon",
          "preview",
          "productId"
        ],
        "properties": {
          "articleStatus": {
            "$ref": "#/components/schemas/ArticleStatus"
          },
          "brand": {
            "$ref": "#/components/schemas/Brand_response"
          },
          "brandNew": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "categories": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Category_response"
            }
          },
          "comingSoon": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "languageAlternatives": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductLanguageAlternative"
            }
          },
          "linkFriendlyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "longDescription": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "media": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Media"
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "offers": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Offer"
            }
          },
          "preview": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "priceCampaigns": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceCampaign"
            }
          },
          "productId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "productNumber": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "productType": {
            "$ref": "#/components/schemas/ProductType"
          },
          "productUUID": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "properties": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property_response"
            }
          },
          "providerData": {
            "readOnly": false,
            "description": "",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "publishDate": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "format": "date-time",
            "example": "..."
          },
          "relations": {
            "$ref": "#/components/schemas/Relations"
          },
          "shortDescription": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "stock": {
            "$ref": "#/components/schemas/Stock"
          },
          "stockKeepingUnits": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnit_response"
            }
          },
          "subscriptionTemplates": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionTemplate"
            }
          }
        },
        "description": "Holds information about a product detail response"
      },
      "ProductDimensions": {
        "type": "object",
        "title": "ProductDimensions",
        "properties": {
          "height": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "length": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "volume": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "weight": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "width": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          }
        },
        "description": ""
      },
      "ProductFeedRequest": {
        "type": "object",
        "title": "ProductFeedRequest",
        "required": [
          "countryId",
          "from",
          "includeAllVariants",
          "includeProperties",
          "includeRelatedArticles",
          "includeRootCategories",
          "preview",
          "size"
        ],
        "properties": {
          "categoryUUID": {
            "readOnly": false,
            "description": "The category UUID used for filtering",
            "type": "string",
            "example": "..."
          },
          "countryCode": {
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2, for example \u003ccode\u003eSE\u003c/code\u003e) used for filtering, as an alternative to\ncountryId. The two are mutually exclusive, and supplying both is an error.\n\u003cp\u003e\nPrefer countryId whenever it is known. A countryCode has to be looked up on every call, and only\ncountries that are active for the store can be resolved, so countryId is both cheaper and less\nrestrictive.\n\u003c/p\u003e",
            "type": "string",
            "example": "..."
          },
          "countryId": {
            "readOnly": false,
            "description": "The country id used for filtering, as supplied by the caller. Is -1 when the country was given as a\ncountryCode instead.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "customerType": {
            "$ref": "#/components/schemas/CustomerType"
          },
          "defaultColorCategoryId": {
            "example": 1,
            "readOnly": false,
            "description": "The default color to be displayed on a product (customer Unique for Engelsons)",
            "type": "integer",
            "format": "int32"
          },
          "from": {
            "readOnly": false,
            "description": "Where to start getting products",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "includeAllVariants": {
            "readOnly": false,
            "description": "If a list is split by attribute1 this setting can be used to get all variants in the stock keeping unit list",
            "type": "boolean",
            "example": true
          },
          "includeProperties": {
            "readOnly": false,
            "description": "If the stockKeepingUnits should include properties data, false by default, can lead to large amounts of data.",
            "type": "boolean",
            "example": true
          },
          "includeRelatedArticles": {
            "readOnly": false,
            "description": "Whether related articles should be included",
            "type": "boolean",
            "example": true
          },
          "includeRootCategories": {
            "readOnly": false,
            "description": "Whether root category names should be prepended to categoryPaths as standalone entries",
            "type": "boolean",
            "example": true
          },
          "languageId": {
            "readOnly": false,
            "description": "The language id used for filtering",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "modifiedAfter": {
            "example": "2025-03-18T10:55:28.123Z",
            "readOnly": false,
            "description": "Date for pagination",
            "type": "string",
            "format": "date-time"
          },
          "preview": {
            "readOnly": false,
            "description": "Whether to include preview articles in the result",
            "type": "boolean",
            "example": true
          },
          "size": {
            "readOnly": false,
            "description": "How many products to get",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "splitByAttribute1": {
            "readOnly": false,
            "description": "If we should split the result by attribute1 or not, or empty if the server should auto-determine",
            "type": "boolean",
            "example": true
          }
        },
        "description": "Defines a request for getting a list of products"
      },
      "ProductFeedResponse": {
        "type": "object",
        "title": "ProductFeedResponse",
        "required": [
          "total"
        ],
        "properties": {
          "aggregations": {
            "$ref": "#/components/schemas/Aggregations"
          },
          "products": {
            "readOnly": false,
            "description": "The products",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductForFeed"
            }
          },
          "sort": {
            "$ref": "#/components/schemas/AppliedSort"
          },
          "sortOptions": {
            "$ref": "#/components/schemas/ProductSortOptions"
          },
          "total": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds information about a product list response"
      },
      "ProductForFeed": {
        "type": "object",
        "title": "ProductForFeed",
        "required": [
          "attribute1Id",
          "attribute1IdToDisplay",
          "brandNew",
          "comingSoon",
          "preview",
          "productId"
        ],
        "properties": {
          "articleStatus": {
            "$ref": "#/components/schemas/ArticleStatus"
          },
          "attribute1Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute1IdToDisplay": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "brand": {
            "$ref": "#/components/schemas/BrandForFeed"
          },
          "brandNew": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "categories": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Category_response"
            }
          },
          "categoryPaths": {
            "readOnly": false,
            "description": "The category paths of the product",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "comingSoon": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "keywords": {
            "readOnly": false,
            "description": "The search keywords of the product",
            "type": "string",
            "example": "..."
          },
          "linkFriendlyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "longDescription": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "lowestPriceWithinPeriod": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "media": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Media"
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "offers": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Offer"
            }
          },
          "preview": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "priceCampaigns": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceCampaign"
            }
          },
          "productId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "productNumber": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "productType": {
            "$ref": "#/components/schemas/ProductType"
          },
          "productUUID": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "properties": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property_response"
            }
          },
          "providerData": {
            "readOnly": false,
            "description": "",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "publishDate": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "format": "date-time",
            "example": "..."
          },
          "relations": {
            "$ref": "#/components/schemas/Relations"
          },
          "shortDescription": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "stock": {
            "$ref": "#/components/schemas/Stock"
          },
          "stockKeepingUnits": {
            "readOnly": false,
            "description": "The stock keeping units of the product",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnitForFeed"
            }
          },
          "subscriptionTemplates": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionTemplate"
            }
          }
        },
        "description": "Holds information about a product"
      },
      "ProductForList": {
        "type": "object",
        "title": "ProductForList",
        "required": [
          "attribute1Id",
          "attribute1IdToDisplay",
          "brandNew",
          "comingSoon",
          "preview",
          "productId"
        ],
        "properties": {
          "articleStatus": {
            "$ref": "#/components/schemas/ArticleStatus"
          },
          "attribute1Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute1IdToDisplay": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "brand": {
            "$ref": "#/components/schemas/Brand_response"
          },
          "brandNew": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "comingSoon": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "linkFriendlyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "lowestPriceWithinPeriod": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "media": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Media"
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "offers": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Offer"
            }
          },
          "preview": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "priceCampaigns": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceCampaign"
            }
          },
          "productId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "productNumber": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "productType": {
            "$ref": "#/components/schemas/ProductType"
          },
          "productUUID": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "properties": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property_response"
            }
          },
          "providerData": {
            "readOnly": false,
            "description": "",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "publishDate": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "format": "date-time",
            "example": "..."
          },
          "shortDescription": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "stock": {
            "$ref": "#/components/schemas/Stock"
          },
          "stockKeepingUnits": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnit_response"
            }
          },
          "subscriptionTemplates": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionTemplate"
            }
          }
        },
        "description": "Holds information about a product"
      },
      "ProductLanguageAlternative": {
        "type": "object",
        "title": "ProductLanguageAlternative",
        "properties": {
          "languageCode": {
            "$ref": "#/components/schemas/Language_commons"
          },
          "linkFriendlyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "ProductListRequest": {
        "type": "object",
        "title": "ProductListRequest",
        "required": [
          "countryId",
          "from",
          "includeAllVariants",
          "includeCustomerCategoryOffers",
          "includeProperties",
          "preview",
          "requireBalance",
          "requireBalancesForRelatedProducts",
          "requireMedia",
          "requireMediaForRelatedProducts",
          "requireStoreBalances",
          "serviceProviderConfigId",
          "size"
        ],
        "properties": {
          "aggregations": {
            "$ref": "#/components/schemas/Aggregations_request"
          },
          "categoryId": {
            "readOnly": false,
            "description": "The category id used for filtering",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "categoryUUID": {
            "readOnly": false,
            "description": "The category UUID used for filtering",
            "type": "string",
            "example": "..."
          },
          "countryCode": {
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2, for example \u003ccode\u003eSE\u003c/code\u003e) used for filtering, as an alternative to\ncountryId. The two are mutually exclusive, and supplying both is an error.\n\u003cp\u003e\nPrefer countryId whenever it is known. A countryCode has to be looked up on every call, and only\ncountries that are active for the store can be resolved, so countryId is both cheaper and less\nrestrictive.\n\u003c/p\u003e",
            "type": "string",
            "example": "..."
          },
          "countryId": {
            "readOnly": false,
            "description": "The country id used for filtering, as supplied by the caller. Is -1 when the country was given as a\ncountryCode instead.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "customerReducedPricePercentage": {
            "readOnly": false,
            "description": "Calculates a percentage price reduction in product list prices",
            "type": "number",
            "example": 12345
          },
          "customerType": {
            "$ref": "#/components/schemas/CustomerType"
          },
          "daysAsNew": {
            "readOnly": false,
            "description": "Specifies how many days \"new\" is defined as",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "filter": {
            "$ref": "#/components/schemas/Filter"
          },
          "from": {
            "readOnly": false,
            "description": "Where to start getting products",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "helloRetailData": {
            "$ref": "#/components/schemas/HelloRetailData"
          },
          "includeAllVariants": {
            "readOnly": false,
            "description": "If a list is split by attribute1 this setting can be used to get all variants in the stock keeping unit list",
            "type": "boolean",
            "example": true
          },
          "includeCustomerCategoryOffers": {
            "readOnly": false,
            "description": "If we should include customer category offers or not",
            "type": "boolean",
            "example": true
          },
          "includeProperties": {
            "readOnly": false,
            "description": "If the stockKeepingUnits should include properties data, false by default, can lead to large amounts of data.",
            "type": "boolean",
            "example": true
          },
          "languageId": {
            "readOnly": false,
            "description": "The language id used for filtering",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "mediaRowIds": {
            "readOnly": false,
            "description": "If provided, media must match one of the given row ids",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "preview": {
            "readOnly": false,
            "description": "Whether to include preview articles in the result",
            "type": "boolean",
            "example": true
          },
          "priceListIds": {
            "readOnly": false,
            "description": "The price list ids used for filtering",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "productNumbers": {
            "readOnly": false,
            "description": "If loading a list these product numbers can be used to identify the products",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "productSources": {
            "readOnly": false,
            "description": "Used to set what product sources should be used instead getting them via filters or product providers",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductSource"
            }
          },
          "requireBalance": {
            "readOnly": false,
            "description": "If the product needs balances or not to be in the result",
            "type": "boolean",
            "example": true
          },
          "requireBalancesForRelatedProducts": {
            "readOnly": false,
            "description": "If a related product requires balance to be in the result",
            "type": "boolean",
            "example": true
          },
          "requireMedia": {
            "readOnly": false,
            "description": "If the product needs a media or not to be in the result",
            "type": "boolean",
            "example": true
          },
          "requireMediaForRelatedProducts": {
            "readOnly": false,
            "description": "If a related product requires media to be in the result",
            "type": "boolean",
            "example": true
          },
          "requireStoreBalances": {
            "readOnly": false,
            "description": "If the product requires store balance to be in the result",
            "type": "boolean",
            "example": true
          },
          "serviceProviderConfigId": {
            "readOnly": false,
            "description": "The id of the external service provider config, if any.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "size": {
            "readOnly": false,
            "description": "How many products to get",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "sort": {
            "$ref": "#/components/schemas/Sort"
          },
          "splitByAttribute1": {
            "readOnly": false,
            "description": "If we should split the result by attribute1 or not, or empty if the server should auto-determine",
            "type": "boolean",
            "example": true
          },
          "stockKeepingUnitStatusExclusions": {
            "readOnly": false,
            "description": "What stock keeping unit statuses to exclude in the result",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnitStatus"
            }
          }
        },
        "description": "Defines a request for getting a list of products"
      },
      "ProductListResponse": {
        "type": "object",
        "title": "ProductListResponse",
        "required": [
          "total"
        ],
        "properties": {
          "aggregations": {
            "$ref": "#/components/schemas/Aggregations"
          },
          "products": {
            "readOnly": false,
            "description": "The products",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductForList"
            }
          },
          "sort": {
            "$ref": "#/components/schemas/AppliedSort"
          },
          "sortOptions": {
            "$ref": "#/components/schemas/ProductSortOptions"
          },
          "total": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds information about a product list response"
      },
      "ProductPriceUpdate": {
        "type": "object",
        "title": "ProductPriceUpdate",
        "properties": {
          "clearSalePrice": {
            "readOnly": false,
            "description": "\u003cp\u003eIf this boolean flag \u003cb\u003eis not\u003c/b\u003e set, the products sale price is set to salePrice and unit price is set to unitPrice (if present).\u003c/p\u003e\n\u003cp\u003eIf this boolean flag \u003cb\u003eis\u003c/b\u003e set, the products sale price is set to unitPrice - if present - or otherwise to the products unit price (which in turn is set to zero).\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with salePrice.",
            "type": "boolean"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "\u003cp\u003eThe country code (ISO 3166-1 alpha-2) of the product to update.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with currencyCode.\u003c/p\u003e",
            "type": "string"
          },
          "currencyCode": {
            "example": "SEK",
            "readOnly": false,
            "description": "The currency code (ISO 4217) of the product to update.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with countryCode.\u003c/p\u003e",
            "type": "string"
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe European article number (EAN13) of the stock keeping unit to update price for.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with productId and stockKeepingUnitId.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e European article numbers in Viskan are no longer unique and is therefore not a reliable way of identifying stock keeping units with.\u003c/p\u003e",
            "type": "string"
          },
          "productId": {
            "readOnly": false,
            "description": "\u003cp\u003eThe internal identifier of the product (including variants) to update price for.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with stockKeepingUnitId and europeanArticleNumber.\u003c/p\u003e",
            "type": "integer",
            "format": "int32"
          },
          "salePrice": {
            "readOnly": false,
            "description": "\u003cp\u003eThe new sale price of the product.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with clearSalePrice.\u003c/p\u003e",
            "type": "number"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "\u003cp\u003eThe internal identifier of the stock keeping unit to update price for.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with productId and europeanArticleNumber.\u003c/p\u003e",
            "type": "integer",
            "format": "int32"
          },
          "unitPrice": {
            "readOnly": false,
            "description": "The new unit price of the product.",
            "type": "number"
          }
        },
        "description": "Contains information about product-price update."
      },
      "ProductPriceUpdateOrAdd": {
        "type": "object",
        "title": "ProductPriceUpdateOrAdd",
        "properties": {
          "active": {
            "example": false,
            "readOnly": false,
            "description": "Enable or disable product pricing based on specified country, currency, or product identifier.",
            "type": "boolean"
          },
          "clearSalePrice": {
            "example": false,
            "readOnly": false,
            "description": "\u003cp\u003eTakes the product off sale by setting the original price to zero.\u003c/p\u003e\n\u003cp\u003eIf unitPrice is sent, the selling price is set to unitPrice. Otherwise the selling price is\nset to the previous original price. Send unitPrice together with this flag to set the regular price\nof a product that is not on sale.\u003c/p\u003e\n\u003cp\u003eIf this flag is not set, the selling price is only changed by salePrice.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with salePrice, and it is ignored when adding new\nprices.\u003c/p\u003e",
            "type": "boolean"
          },
          "comparisonPrice": {
            "example": 420,
            "readOnly": false,
            "description": "Comparison product price (this is what we specify to other companies when selling the product). If not specified, the default value is 0",
            "type": "number"
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "\u003cp\u003eThe country code (ISO 3166-1 alpha-2) of the product to update or add.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with currencyCode.\u003c/p\u003e",
            "type": "string"
          },
          "currencyCode": {
            "example": "SEK",
            "readOnly": false,
            "description": "The currency code (ISO 4217) of the product to update or add.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with countryCode.\u003c/p\u003e",
            "type": "string"
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe European article number (EAN13) of the stock keeping unit to update or add price for.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with productId, productNumber, priceLookupUnitNumber and stockKeepingUnitId.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e European article numbers in Viskan are no longer unique and is therefore not a reliable way of identifying stock keeping units with.\u003c/p\u003e",
            "type": "string"
          },
          "priceListId": {
            "example": 0,
            "readOnly": false,
            "description": "The internal identifier of the optional price list to add the price to.\nIf not specified, then the price will be added to the standard price list.",
            "type": "integer",
            "format": "int32"
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit to update or add price for.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with productId, productNumber, stockKeepingUnitId and europeanArticleNumber.\u003c/p\u003e",
            "type": "string",
            "example": "..."
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit to update or add price for.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with productId, productNumber, stockKeepingUnitId and europeanArticleNumber.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e priceLookupUnitNumber is not used due to incorrect field name.\u003c/p\u003e",
            "type": "string"
          },
          "priceTier": {
            "$ref": "#/components/schemas/PriceTier"
          },
          "productId": {
            "example": 24,
            "readOnly": false,
            "description": "\u003cp\u003eThe internal identifier of the product (including variants) to update or add price for.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with productNumber, stockKeepingUnitId, priceLookupUnitNumber and europeanArticleNumber.\u003c/p\u003e",
            "type": "integer",
            "format": "int32"
          },
          "productNumber": {
            "example": "5149761",
            "readOnly": false,
            "description": "\u003cp\u003eThe public identifier of the product (including variants) to update or add price for.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with productId, stockKeepingUnitId, priceLookupUnitNumber and europeanArticleNumber.\u003c/p\u003e",
            "type": "string"
          },
          "recommendedPrice": {
            "example": 470,
            "readOnly": false,
            "description": "Recommended price from product supplier. If not specified, the default value is 0",
            "type": "number"
          },
          "salePrice": {
            "example": 399,
            "readOnly": false,
            "description": "\u003cp\u003eThe selling price, which is the price the customer pays. Send it together with unitPrice to put\na product on sale.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with clearSalePrice.\u003c/p\u003e",
            "type": "number"
          },
          "stockKeepingUnitId": {
            "example": 513,
            "readOnly": false,
            "description": "\u003cp\u003eThe internal identifier of the stock keeping unit to update or add price for.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with productId, productNumber, priceLookupUnitNumber and europeanArticleNumber.\u003c/p\u003e",
            "type": "integer",
            "format": "int32"
          },
          "unitPrice": {
            "example": 499,
            "readOnly": false,
            "description": "\u003cp\u003eThe regular price of the product.\u003c/p\u003e\n\u003cp\u003eWhen updating an existing price, this sets the original price, which is shown alongside the selling\nprice when the product is on sale. It only becomes the price the customer pays when it is sent together\nwith clearSalePrice: true.\u003c/p\u003e\n\u003cp\u003eWhen adding a new price, this is also used as the selling price if no salePrice is sent.\u003c/p\u003e",
            "type": "number"
          },
          "vatRate": {
            "example": 0.25,
            "readOnly": false,
            "description": "The vat rate of the product price.\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mandatory when adding new prices.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field can be updated if sending in changed vat on existing price. Demands that countryCode is specified\u003c/p\u003e",
            "type": "number"
          }
        },
        "description": "Contains information about product price to update or add."
      },
      "ProductResult": {
        "type": "object",
        "title": "ProductResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The products in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Product"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a search result of products."
      },
      "ProductSearchRequest": {
        "type": "object",
        "title": "ProductSearchRequest",
        "required": [
          "countryId",
          "from",
          "includeAllVariants",
          "includeCustomerCategoryOffers",
          "includeProperties",
          "preview",
          "requireBalance",
          "requireBalancesForRelatedProducts",
          "requireMedia",
          "requireMediaForRelatedProducts",
          "requireStoreBalances",
          "serviceProviderConfigId",
          "size"
        ],
        "properties": {
          "aggregations": {
            "$ref": "#/components/schemas/Aggregations_request"
          },
          "categoryId": {
            "readOnly": false,
            "description": "The category id used for filtering",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "categoryUUID": {
            "readOnly": false,
            "description": "The category UUID used for filtering",
            "type": "string",
            "example": "..."
          },
          "countryCode": {
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2, for example \u003ccode\u003eSE\u003c/code\u003e) used for filtering, as an alternative to\ncountryId. The two are mutually exclusive, and supplying both is an error.\n\u003cp\u003e\nPrefer countryId whenever it is known. A countryCode has to be looked up on every call, and only\ncountries that are active for the store can be resolved, so countryId is both cheaper and less\nrestrictive.\n\u003c/p\u003e",
            "type": "string",
            "example": "..."
          },
          "countryId": {
            "readOnly": false,
            "description": "The country id used for filtering, as supplied by the caller. Is -1 when the country was given as a\ncountryCode instead.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "customerReducedPricePercentage": {
            "readOnly": false,
            "description": "Calculates a percentage price reduction in product list prices",
            "type": "number",
            "example": 12345
          },
          "customerType": {
            "$ref": "#/components/schemas/CustomerType"
          },
          "daysAsNew": {
            "readOnly": false,
            "description": "Specifies how many days \"new\" is defined as",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "filter": {
            "$ref": "#/components/schemas/Filter"
          },
          "from": {
            "readOnly": false,
            "description": "Where to start getting products",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "helloRetailData": {
            "$ref": "#/components/schemas/HelloRetailData"
          },
          "includeAllVariants": {
            "readOnly": false,
            "description": "If a list is split by attribute1 this setting can be used to get all variants in the stock keeping unit list",
            "type": "boolean",
            "example": true
          },
          "includeCustomerCategoryOffers": {
            "readOnly": false,
            "description": "If we should include customer category offers or not",
            "type": "boolean",
            "example": true
          },
          "includeProperties": {
            "readOnly": false,
            "description": "If the stockKeepingUnits should include properties data, false by default, can lead to large amounts of data.",
            "type": "boolean",
            "example": true
          },
          "languageId": {
            "readOnly": false,
            "description": "The language id used for filtering",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "matchFields": {
            "readOnly": false,
            "description": "The fields to match with. Uses Elasticsearch multi_match.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "mediaRowIds": {
            "readOnly": false,
            "description": "If provided, media must match one of the given row ids",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "preview": {
            "readOnly": false,
            "description": "Whether to include preview articles in the result",
            "type": "boolean",
            "example": true
          },
          "priceListIds": {
            "readOnly": false,
            "description": "The price list ids used for filtering",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "productNumbers": {
            "readOnly": false,
            "description": "If loading a list these product numbers can be used to identify the products",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "productSources": {
            "readOnly": false,
            "description": "Used to set what product sources should be used instead getting them via filters or product providers",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductSource"
            }
          },
          "query": {
            "readOnly": false,
            "description": "The query to search",
            "type": "string",
            "example": "..."
          },
          "requireBalance": {
            "readOnly": false,
            "description": "If the product needs balances or not to be in the result",
            "type": "boolean",
            "example": true
          },
          "requireBalancesForRelatedProducts": {
            "readOnly": false,
            "description": "If a related product requires balance to be in the result",
            "type": "boolean",
            "example": true
          },
          "requireMedia": {
            "readOnly": false,
            "description": "If the product needs a media or not to be in the result",
            "type": "boolean",
            "example": true
          },
          "requireMediaForRelatedProducts": {
            "readOnly": false,
            "description": "If a related product requires media to be in the result",
            "type": "boolean",
            "example": true
          },
          "requireStoreBalances": {
            "readOnly": false,
            "description": "If the product requires store balance to be in the result",
            "type": "boolean",
            "example": true
          },
          "searchFields": {
            "readOnly": false,
            "description": "The fields to search with. Uses Elasticsearch query_string.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "serviceProviderConfigId": {
            "readOnly": false,
            "description": "The id of the external service provider config, if any.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "size": {
            "readOnly": false,
            "description": "How many products to get",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "sort": {
            "$ref": "#/components/schemas/Sort"
          },
          "splitByAttribute1": {
            "readOnly": false,
            "description": "If we should split the result by attribute1 or not, or empty if the server should auto-determine",
            "type": "boolean",
            "example": true
          },
          "stockKeepingUnitStatusExclusions": {
            "readOnly": false,
            "description": "What stock keeping unit statuses to exclude in the result",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnitStatus"
            }
          }
        },
        "description": "Defines a request for searching for products"
      },
      "ProductSortOption": {
        "type": "object",
        "title": "ProductSortOption",
        "required": [
          "selected"
        ],
        "properties": {
          "group": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "label": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "selected": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "value": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "ProductSortOptions": {
        "type": "object",
        "title": "ProductSortOptions",
        "properties": {
          "options": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductSortOption"
            }
          },
          "provider": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "ProductSource": {
        "type": "object",
        "title": "ProductSource",
        "required": [
          "attribute1Id",
          "productId"
        ],
        "properties": {
          "attribute1Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": ""
      },
      "ProductToAddOrUpdate": {
        "type": "object",
        "title": "ProductToAddOrUpdate",
        "required": [
          "active",
          "defaultCategoryId",
          "enforceUniqueEuropeanArticleNumbers",
          "published"
        ],
        "properties": {
          "active": {
            "readOnly": false,
            "description": "Changes if the product is active.",
            "type": "boolean",
            "example": true
          },
          "articleStatus": {
            "$ref": "#/components/schemas/ArticleStatus_article"
          },
          "brandName": {
            "example": "Brand Name",
            "readOnly": false,
            "description": "Changes to brand name.",
            "type": "string"
          },
          "brandTag": {
            "example": "Brand Name",
            "readOnly": false,
            "description": "Changes to brand tag. Can be used to group brands on the site when filtering for example if you have two brands Viskan Shirts and Viskan Pants that you want to group under Viskan.",
            "type": "string"
          },
          "categoriesToReplaceExisting": {
            "readOnly": false,
            "description": "Contains the product categories to replace any existing ones. An empty list will remove all connections.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CategoriesToReplaceExisting"
            }
          },
          "defaultAttributes": {
            "$ref": "#/components/schemas/DefaultAttributes"
          },
          "defaultCategoryId": {
            "readOnly": false,
            "description": "The default category-id for the product.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "enforceUniqueEuropeanArticleNumbers": {
            "readOnly": false,
            "description": "Specifies if European Article Numbers should be considered unique.",
            "type": "boolean",
            "example": true
          },
          "mediasToConnect": {
            "readOnly": false,
            "description": "Contains medias to connect to product.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaToConnect"
            }
          },
          "mediasToDisconnect": {
            "readOnly": false,
            "description": "Contains medias to disconnect from the product. The match is exact: a media without attributes is only disconnected from the product\nlevel, with attribute1 (and attribute2 and attribute3) only from that color (size, measurement), and without mediaType from every\nmedia type at that level. The media is found by filename, or its filename is built from mediaURL the same way as when connecting.\nDisconnecting is done before connecting, so a media can be replaced in the same call. It is all or nothing: if any media cannot be\ndisconnected, nothing in the call is saved and the call fails with status 400, listing every media that failed. Each error has the\nerrorCode \u003ccode\u003e~disconnect.\u0026lt;reason\u0026gt;\u003c/code\u003e (for example \u003ccode\u003e~disconnect.media-not-connected\u003c/code\u003e), an errorMessage and\ndata with productNumber, index (the position in mediasToDisconnect), filename and mediaURL. The media itself is never deleted, it\nstays in the media library.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaToDisconnect_ProductToAddOrUpdate"
            }
          },
          "productName": {
            "example": "Product Name",
            "readOnly": false,
            "description": "Changes to product name.",
            "type": "string"
          },
          "productNumber": {
            "example": "123PRODUCT",
            "readOnly": false,
            "description": "The identifier of the product. This is mandatory.",
            "type": "string"
          },
          "productType": {
            "$ref": "#/components/schemas/ArticleType"
          },
          "propertiesToAddOrUpdate": {
            "readOnly": false,
            "description": "Contains properties to add to the product, mutually exclusive with \u003ccode\u003epropertiesToReplace\u003c/code\u003e.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyToAddOrUpdate"
            }
          },
          "propertiesToReplace": {
            "readOnly": false,
            "description": "Contains changes to apply for product properties. This will replace any existing connections. An empty list will remove all connections. Mutually exclusive with \u003ccode\u003epropertiesToAddOrUpdate\u003c/code\u003e.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyToReplace"
            }
          },
          "publishDate": {
            "example": "2024-06-01",
            "readOnly": false,
            "description": "Changes to the publish date for the product. If the article status is \u003ccode\u003eNOT_YET_FOR_SALE\u003c/code\u003e and this date is in the future, the product is considered \"coming soon\".",
            "type": "string",
            "format": "date"
          },
          "published": {
            "readOnly": false,
            "description": "Changes if the product is published on site. When omitted, the existing value is preserved.",
            "type": "boolean",
            "example": true
          },
          "stockKeepingUnitsToAddOrUpdate": {
            "readOnly": false,
            "description": "Contains changes to apply for product variants.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnitToAddOrUpdate"
            }
          },
          "taxCode": {
            "example": "T1",
            "readOnly": false,
            "description": "The tax code relevant to the product (VAT). Send empty string (i.e. \"\") to remove tax code from the article.",
            "type": "string"
          },
          "translationsToAddOrUpdate": {
            "readOnly": false,
            "description": "Changes to translations.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TranslationToAddOrUpdate"
            }
          }
        },
        "description": "Contains changes that applies to a product."
      },
      "ProductTranslation": {
        "type": "object",
        "title": "ProductTranslation",
        "properties": {
          "brandName": {
            "example": "Nike",
            "readOnly": false,
            "description": "The translated brand name of the product.",
            "type": "string"
          },
          "brandTag": {
            "example": "Sportswear",
            "readOnly": false,
            "description": "The translated brand tag of the product used for aggregations in the estore product API",
            "type": "string"
          },
          "keywords": {
            "example": "yellow, shirt, cotton",
            "readOnly": false,
            "description": "A list of translated keywords for the product.",
            "type": "string"
          },
          "languageCode": {
            "$ref": "#/components/schemas/Language_commons"
          },
          "linkFriendlyName": {
            "readOnly": false,
            "description": "The link friendly name used in URLs.\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e linkFriendlyName is not used due to incorrect field name. Replaced by path.\u003c/p\u003e",
            "type": "string"
          },
          "longDescription": {
            "example": "This is a high quality yellow shirt made from 100% cotton. It is very comfortable to wear and looks great.",
            "readOnly": false,
            "description": "The translated long description of the product.",
            "type": "string"
          },
          "metaDescription": {
            "example": "Buy high quality yellow shirt made from 100% cotton. Comfortable to wear and looks great.",
            "readOnly": false,
            "description": "The translated meta description of the product.",
            "type": "string"
          },
          "metaTitle": {
            "example": "Yellow shirt - High quality yellow shirt",
            "readOnly": false,
            "description": "The translated meta title of the product.",
            "type": "string"
          },
          "path": {
            "example": "yellow-shirt",
            "readOnly": false,
            "description": "The link friendly name used in URLs.",
            "type": "string"
          },
          "productName": {
            "example": "Yellow shirt",
            "readOnly": false,
            "description": "The translated name of the product.",
            "type": "string"
          },
          "shortDescription": {
            "example": "High quality yellow shirt.",
            "readOnly": false,
            "description": "The translated short description of the product.",
            "type": "string"
          }
        },
        "description": "Defines a translation of a product in a specific language."
      },
      "ProductType": {
        "type": "string",
        "title": "ProductType",
        "enum": [
          "NORMAL",
          "VOUCHER",
          "SUBSCRIPTION_MAIN_PRODUCT",
          "MIX_MATCH",
          "LOOKBOOK",
          "FLEXIBLE_PACKAGES",
          "COPY_PRODUCT",
          "STATIC_PACKAGE",
          "MULTI_PACKAGE"
        ],
        "description": ""
      },
      "ProductsToAdd": {
        "type": "object",
        "title": "ProductsToAdd",
        "required": [
          "priority",
          "quantity"
        ],
        "properties": {
          "priceLookupUnitNumber": {
            "example": "10036-392",
            "readOnly": false,
            "description": "The price lookup unit number (PLUNO) of new unit.",
            "type": "string"
          },
          "priority": {
            "example": 202318,
            "readOnly": false,
            "description": "Specifies which priority to add the product to.",
            "type": "integer",
            "format": "int32"
          },
          "quantity": {
            "example": 1,
            "readOnly": false,
            "description": "Quantity to add.",
            "type": "integer",
            "format": "int32"
          },
          "stockKeepingUnitId": {
            "example": 513,
            "readOnly": false,
            "description": "The internal identifier of the new unit.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Contains products to add to the subscription."
      },
      "PropertiesToConnect": {
        "type": "object",
        "title": "PropertiesToConnect",
        "properties": {
          "propertiesToConnect": {
            "readOnly": false,
            "description": "The properties to connect to the given customer.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyToConnect"
            }
          }
        },
        "description": "Contains a list of properties to connect or add/update translations for."
      },
      "PropertiesToDelete": {
        "type": "object",
        "title": "PropertiesToDelete",
        "properties": {
          "propertiesToDelete": {
            "readOnly": false,
            "description": "The properties to delete.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyToDelete"
            }
          }
        },
        "description": "Contains a list of properties to delete."
      },
      "Property": {
        "type": "object",
        "title": "Property",
        "properties": {
          "buckets": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyBucket"
            }
          },
          "keyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "Property_PropertyHit": {
        "type": "object",
        "title": "Property",
        "properties": {
          "presentation": {
            "readOnly": false,
            "description": "The presentation type of the key used",
            "type": "string",
            "example": "..."
          },
          "propertyKeyName": {
            "readOnly": false,
            "description": "The name of the property",
            "type": "string",
            "example": "..."
          },
          "translations": {
            "readOnly": false,
            "description": "The translations for the property key",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TranslationKey"
            }
          },
          "values": {
            "readOnly": false,
            "description": "The property values and their translations",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyValue"
            }
          }
        },
        "description": "Property information."
      },
      "Property_v2": {
        "type": "object",
        "title": "Property",
        "required": [
          "keyId"
        ],
        "properties": {
          "internalKeyName": {
            "readOnly": false,
            "description": "The internal name of the property",
            "type": "string",
            "example": "..."
          },
          "keyGroup": {
            "readOnly": false,
            "description": "The keygroup of the property",
            "type": "string",
            "example": "..."
          },
          "keyId": {
            "readOnly": false,
            "description": "The id of the property",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "keyName": {
            "readOnly": false,
            "description": "The translated name of the property",
            "type": "string",
            "example": "..."
          },
          "values": {
            "readOnly": false,
            "description": "The values connected to the given property",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Value"
            }
          }
        },
        "description": "Represents a customer property."
      },
      "Property_response": {
        "type": "object",
        "title": "Property",
        "required": [
          "usedForFilter"
        ],
        "properties": {
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "group": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "internalKeyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "keyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "usedForFilter": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "values": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyValue_response"
            }
          }
        },
        "description": ""
      },
      "Property_Product": {
        "type": "object",
        "title": "Property",
        "properties": {
          "propertyKeyName": {
            "example": "CountryOfOrigin",
            "readOnly": false,
            "description": "The key name for this property.",
            "type": "string"
          },
          "propertyValues": {
            "readOnly": false,
            "description": "The values of this property.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyValue_Product"
            }
          },
          "translations": {
            "readOnly": false,
            "description": "Optional. Contains translated names for the key of the property. This will REPLACE any existing translation key names.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyKeyNameTranslation"
            }
          }
        },
        "description": "Defines a property of a stock keeping unit."
      },
      "PropertyBucket": {
        "type": "object",
        "title": "PropertyBucket",
        "required": [
          "count"
        ],
        "properties": {
          "count": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "item": {
            "$ref": "#/components/schemas/PropertyBucketItem"
          }
        },
        "description": ""
      },
      "PropertyBucketItem": {
        "type": "object",
        "title": "PropertyBucketItem",
        "required": [
          "valueId"
        ],
        "properties": {
          "tag": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "tagTranslation": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "valueId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "valueName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "PropertyFilter": {
        "type": "object",
        "title": "PropertyFilter",
        "properties": {
          "keyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "valueIds": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          }
        },
        "description": ""
      },
      "PropertyForFeed": {
        "type": "object",
        "title": "PropertyForFeed",
        "required": [
          "usedForFilter"
        ],
        "properties": {
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "group": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "internalKeyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "keyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "usedForFilter": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "values": {
            "readOnly": false,
            "description": "The property values",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyValueForFeed"
            }
          }
        },
        "description": "Holds information about Properties"
      },
      "PropertyHit": {
        "type": "object",
        "title": "PropertyHit",
        "required": [
          "customerId"
        ],
        "properties": {
          "customerId": {
            "example": 581,
            "readOnly": false,
            "description": "The internal identifier of the property.",
            "type": "integer",
            "format": "int32"
          },
          "customerNumber": {
            "example": "45874587",
            "readOnly": false,
            "description": "The external identifier of the customer.",
            "type": "string"
          },
          "properties": {
            "readOnly": false,
            "description": "The internal identifier of the property.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property_PropertyHit"
            }
          }
        },
        "description": "Property hit information."
      },
      "PropertyKey": {
        "type": "object",
        "title": "PropertyKey",
        "properties": {
          "presentation": {
            "readOnly": false,
            "description": "The presentation of the property key. This needs to be specified when adding new properties!\nThe available presentations are:\n\u003cul\u003e\n\u003cli\u003etext - regular string values\u003c/li\u003e\n\u003cli\u003ecombobox - fixed set of values that should be selectable in a list\u003c/li\u003e\n\u003cli\u003echeckbox - boolean valued\u003c/li\u003e\n\u003cli\u003einteger - numeric integer values\u003c/li\u003e\n\u003cli\u003efloat - numeric decimal values\u003c/li\u003e\n\u003cli\u003ehtml - html text\u003c/li\u003e\n\u003c/ul\u003e",
            "type": "string",
            "example": "..."
          },
          "propertyKeyName": {
            "readOnly": false,
            "description": "The internal name of the property key",
            "type": "string",
            "example": "..."
          },
          "translationsToAddOrUpdate": {
            "readOnly": false,
            "description": "The translations for the key",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TranslationKey_PropertyKey"
            }
          }
        },
        "description": "The key of the property"
      },
      "PropertyKeyNameTranslation": {
        "type": "object",
        "title": "PropertyKeyNameTranslation",
        "properties": {
          "languageCode": {
            "$ref": "#/components/schemas/Language_commons"
          },
          "propertyKeyName": {
            "example": "Läder",
            "readOnly": false,
            "description": "The translated name of the property key.",
            "type": "string"
          },
          "propertyKeyNameDescription": {
            "example": "Läder av högsta kvalitet",
            "readOnly": false,
            "description": "The optional translated description of the property key.",
            "type": "string"
          }
        },
        "description": "Contains changes that applies to a property translation."
      },
      "PropertyResult": {
        "type": "object",
        "title": "PropertyResult",
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyHit"
            }
          }
        },
        "description": "Documentation Property API result class"
      },
      "PropertyTagFilter": {
        "type": "object",
        "title": "PropertyTagFilter",
        "properties": {
          "keyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "valueTags": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          }
        },
        "description": ""
      },
      "PropertyToAddOrUpdate": {
        "type": "object",
        "title": "PropertyToAddOrUpdate",
        "required": [
          "replaceValues"
        ],
        "properties": {
          "propertyKeyName": {
            "example": "Material",
            "readOnly": false,
            "description": "The property key of the property.",
            "type": "string"
          },
          "propertyValue": {
            "example": "Leather",
            "readOnly": false,
            "description": "",
            "type": "string"
          },
          "replaceValues": {
            "readOnly": false,
            "description": "Whether or not the given set of values should replace the existing set of values. This defaults to \u003ccode\u003efalse\u003c/code\u003e, but will change to \u003ccode\u003etrue\u003c/code\u003e in the future,\nand the flag will be removed completely. The idea is to always pass in the current set of values for each property key.\n\n\u003cb\u003eNote:\u003c/b\u003e Set this to \u003ccode\u003etrue\u003c/code\u003e as soon as possible to avoid issues when we remove change this behavior in the future.",
            "type": "boolean",
            "example": true
          },
          "translations": {
            "readOnly": false,
            "description": "Optional translations to add or update for the property key. \u003cb\u003eNote\u003c/b\u003e that if you use the old deprecated \u003ccode\u003epropertyValue\u003c/code\u003e field, this list of translations is actually for that value, and is not documented properly here.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyKeyNameTranslation"
            }
          },
          "values": {
            "readOnly": false,
            "description": "Contains the values to be used for the key. This will not replace any existing values. Mutually exclusive with \u003ccode\u003epropertyValue\u003c/code\u003e.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyValue_PropertyToReplace"
            }
          }
        },
        "description": "Contains changes that applies to a product property."
      },
      "PropertyToConnect": {
        "type": "object",
        "title": "PropertyToConnect",
        "properties": {
          "customerId": {
            "example": "123",
            "readOnly": false,
            "description": "The customer id of the customer we want to control the property of.",
            "type": "string"
          },
          "key": {
            "$ref": "#/components/schemas/PropertyKey"
          },
          "values": {
            "readOnly": false,
            "description": "Get the property value",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyValue_PropertyToConnect"
            }
          }
        },
        "description": "A property to connect to the customer (and/or add/update translations for)"
      },
      "PropertyToDelete": {
        "type": "object",
        "title": "PropertyToDelete",
        "properties": {
          "customerId": {
            "example": "100011",
            "readOnly": false,
            "description": "The customer id of the customer having the property we want to delete.",
            "type": "string"
          },
          "propertyKeyName": {
            "readOnly": false,
            "description": "The key of the property to delete.",
            "type": "string",
            "example": "..."
          },
          "values": {
            "readOnly": false,
            "description": "The values to be deleted.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValueToDelete"
            }
          }
        },
        "description": "Contains a property to delete"
      },
      "PropertyToReplace": {
        "type": "object",
        "title": "PropertyToReplace",
        "properties": {
          "propertyKeyName": {
            "example": "Material",
            "readOnly": false,
            "description": "The property key of the property.",
            "type": "string"
          },
          "translations": {
            "readOnly": false,
            "description": "Optional translations to add or update for the property key.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyKeyNameTranslation"
            }
          },
          "values": {
            "readOnly": false,
            "description": "Contains the values to be used for the key. This will \u003cb\u003ereplace\u003c/b\u003e all the existing values.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyValue_PropertyToReplace"
            }
          }
        },
        "description": "Contains changes that applies to a product property."
      },
      "PropertyValue_response": {
        "type": "object",
        "title": "PropertyValue",
        "required": [
          "valueId"
        ],
        "properties": {
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "internalValueName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "valueId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "valueName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": ""
      },
      "PropertyValue": {
        "type": "object",
        "title": "PropertyValue",
        "properties": {
          "mediaURL": {
            "readOnly": false,
            "description": "An url to some image to be associated with this property",
            "type": "string",
            "example": "..."
          },
          "propertyValue": {
            "readOnly": false,
            "description": "The value of the property",
            "type": "string",
            "example": "..."
          },
          "translations": {
            "readOnly": false,
            "description": "The translations for the property value",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TranslationValue"
            }
          }
        },
        "description": "The property value"
      },
      "PropertyValue_PropertyToConnect": {
        "type": "object",
        "title": "PropertyValue",
        "properties": {
          "mediaURL": {
            "readOnly": false,
            "description": "The media url to be associated with this value",
            "type": "string",
            "example": "..."
          },
          "propertyValue": {
            "readOnly": false,
            "description": "The value of the property",
            "type": "string",
            "example": "..."
          },
          "translationsToAddOrUpdate": {
            "readOnly": false,
            "description": "The translations for the property value",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TranslationValue_PropertyValue"
            }
          }
        },
        "description": "The value of the property"
      },
      "PropertyValue_PropertyToReplace": {
        "type": "object",
        "title": "PropertyValue",
        "properties": {
          "aggregationSort": {
            "example": "5",
            "readOnly": false,
            "description": "Optional. The sort order of the property value, used to control the order of filter aggregations in the product API. For example, to ensure sizes appear as S, M, L, XL rather than alphabetically.",
            "type": "string"
          },
          "propertyValue": {
            "example": "Leather",
            "readOnly": false,
            "description": "The property value of the property.",
            "type": "string"
          },
          "sort": {
            "example": "1",
            "readOnly": false,
            "description": "Optional. The sort order of the property on the product.",
            "type": "string"
          },
          "tag": {
            "example": "L",
            "readOnly": false,
            "description": "Optional. The tag of the property value, can be used to group property values in estore productAPI.",
            "type": "string"
          },
          "translations": {
            "readOnly": false,
            "description": "Optional translations to add or update for the property value.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyValueTranslation"
            }
          }
        },
        "description": "Contains changes that applies to a product properties value and translation."
      },
      "PropertyValue_Product": {
        "type": "object",
        "title": "PropertyValue",
        "properties": {
          "propertyValue": {
            "example": "SWE",
            "readOnly": false,
            "description": "The value of this property.",
            "type": "string"
          },
          "translations": {
            "readOnly": false,
            "description": "The translations for this property value",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyValueTranslation"
            }
          }
        },
        "description": "Defines a property value of a property."
      },
      "PropertyValueForFeed": {
        "type": "object",
        "title": "PropertyValueForFeed",
        "required": [
          "valueId"
        ],
        "properties": {
          "description": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "internalValueName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "tag": {
            "readOnly": false,
            "description": "The tag of the property value",
            "type": "string",
            "example": "..."
          },
          "tagTranslation": {
            "readOnly": false,
            "description": "The translated tag of the property value",
            "type": "string",
            "example": "..."
          },
          "valueId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "valueName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Holds information about Property Values"
      },
      "PropertyValueTranslation": {
        "type": "object",
        "title": "PropertyValueTranslation",
        "properties": {
          "languageCode": {
            "$ref": "#/components/schemas/Language_commons"
          },
          "propertyValue": {
            "example": "95% Läder, 5% Polyester",
            "readOnly": false,
            "description": "The translated name of the property value.",
            "type": "string"
          },
          "propertyValueDescription": {
            "example": "Läder av högsta kvalitet",
            "readOnly": false,
            "description": "The optional translated description of the property value.",
            "type": "string"
          },
          "tag": {
            "example": "Läder",
            "readOnly": false,
            "description": "The optional tag that can be used to group properties in estore productAPI.",
            "type": "string"
          }
        },
        "description": "Contains changes that applies to a product property translation."
      },
      "PurchaseOrder": {
        "type": "object",
        "title": "PurchaseOrder",
        "required": [
          "purchaseOrderId"
        ],
        "properties": {
          "agreedDeliveryDate": {
            "example": "2023-10-12T14:36:43.412+01:00",
            "readOnly": false,
            "description": "The agreed delivery date of the purchase orders.",
            "type": "string",
            "format": "date-time"
          },
          "desiredDeliveryDate": {
            "example": "2023-10-12T14:36:43.412+01:00",
            "readOnly": false,
            "description": "The desired delivery date of the purchase orders.",
            "type": "string",
            "format": "date-time"
          },
          "orderDate": {
            "example": "2023-10-12T14:36:43.412+01:00",
            "readOnly": false,
            "description": "The order date of the purchase orders.",
            "type": "string",
            "format": "date-time"
          },
          "plannedArrivalDate": {
            "example": "2023-10-12T14:36:43.412+01:00",
            "readOnly": false,
            "description": "The planned arrival date of the purchase orders.",
            "type": "string",
            "format": "date-time"
          },
          "purchaseOrderId": {
            "readOnly": false,
            "description": "The internal identifier of the purchase order.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "purchaseOrderNumber": {
            "readOnly": false,
            "description": "The external number of the purchase order.",
            "type": "string",
            "example": "..."
          },
          "rows": {
            "readOnly": false,
            "description": "The goods that has been ordered by the supplier.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PurchaseOrderRow"
            }
          },
          "status": {
            "$ref": "#/components/schemas/PurchaseOrderStatus"
          },
          "supplier": {
            "$ref": "#/components/schemas/Supplier"
          },
          "warehouse": {
            "$ref": "#/components/schemas/Warehouse"
          }
        },
        "description": "A purchase order is an order against a supplier to fill up stock balances."
      },
      "PurchaseOrderChanges": {
        "type": "object",
        "title": "PurchaseOrderChanges",
        "required": [
          "receiveComplete"
        ],
        "properties": {
          "receiveComplete": {
            "readOnly": false,
            "description": "Whether or not to report the purchase order, marking it as received.",
            "type": "boolean",
            "example": true
          },
          "receivedGoods": {
            "readOnly": false,
            "description": "Contains goods to mark as received.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PurchaseOrderRowReceivedGoods"
            }
          }
        },
        "description": "Contains changes that applies to a return."
      },
      "PurchaseOrderResult": {
        "type": "object",
        "title": "PurchaseOrderResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The purchase orders in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PurchaseOrder"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a search result of purchase orders."
      },
      "PurchaseOrderRow": {
        "type": "object",
        "title": "PurchaseOrderRow",
        "required": [
          "quantity",
          "quantityDelivered",
          "rowId",
          "stockKeepingUnitId"
        ],
        "properties": {
          "customFields": {
            "readOnly": false,
            "description": "Any custom data associated with this row, e.g. kolli-id",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomField_PurchaseOrderAPI"
            }
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "The European article number (EAN13) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price lookup unit number (PLUNO) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit. \u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "quantity": {
            "readOnly": false,
            "description": "The quantity ordered from the supplier.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "quantityDelivered": {
            "readOnly": false,
            "description": "The quantity that has already been delivered by the supplier.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "rowId": {
            "readOnly": false,
            "description": "The identifier of the row within the order.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "status": {
            "$ref": "#/components/schemas/PurchaseOrderStatus"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The internal identifier of the stock keeping unit.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "unitPriceExcludingTax": {
            "readOnly": false,
            "description": "The unit price excluding tax for the stock keeping unit.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "A single row of a purchase order."
      },
      "PurchaseOrderRowReceivedGoods": {
        "type": "object",
        "title": "PurchaseOrderRowReceivedGoods",
        "required": [
          "stockKeepingUnitId"
        ],
        "properties": {
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe European article number (EAN13) of the stock keeping unit to mark as received.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with stockKeepingUnitId and priceLookupUnitNumber, or they must refer to the same stock keeping unit.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e European article numbers in Viskan are no longer unique and is therefore not a reliable way of identifying stock keeping units with.\u003c/p\u003e",
            "type": "string"
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit to mark as received.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with stockKeepingUnitId and europeanArticleNumber, or they must refer to the same stock keeping unit.\u003c/p\u003e",
            "type": "string",
            "example": "..."
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit to mark as received.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with stockKeepingUnitId and europeanArticleNumber, or they must refer to the same stock keeping unit.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e priceLookupUnitNumber is not used due to incorrect field name.\u003c/p\u003e",
            "type": "string"
          },
          "quantityReceived": {
            "readOnly": false,
            "description": "Quantity to mark as received. The total quantity marked (in one or multiple calls) cannot be larger than the registered quantity on the row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "\u003cp\u003eThe internal identifier of the stock keeping unit to mark as received.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with priceLookupUnitNumber and europeanArticleNumber, or they must refer to the same stock keeping unit.\u003c/p\u003e",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Contains goods that should be marked as received."
      },
      "PurchaseOrderStatus": {
        "type": "string",
        "title": "PurchaseOrderStatus",
        "enum": [
          "PLANNED",
          "CREATED",
          "PART_DELIVERED",
          "DELIVERED",
          "CANCELED"
        ],
        "description": "The status of a purchase order."
      },
      "PurchaseResultAction": {
        "type": "string",
        "title": "PurchaseResultAction",
        "enum": [
          "NONE",
          "REDIRECT",
          "SUBMIT",
          "PROVIDER_UNIQUE_ACTION"
        ],
        "description": "Defines various purchase result actions."
      },
      "QueryServiceRequest": {
        "type": "object",
        "title": "QueryRequest",
        "required": [
          "fetchAll"
        ],
        "properties": {
          "fetchAll": {
            "readOnly": false,
            "description": "Indicates to the query framework that we want to retrieve every search result in the data mapping. No matter any sizing the template. Used when\nbulk fetching",
            "type": "boolean",
            "example": true
          },
          "params": {
            "readOnly": false,
            "description": "The parameters to pass along to the search templates/script.",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "scriptName": {
            "readOnly": false,
            "description": "Name of processing script",
            "type": "string",
            "example": "..."
          },
          "scriptPostFunction": {
            "readOnly": false,
            "description": "Name of post function to execute post query",
            "type": "string",
            "example": "..."
          },
          "scriptPreFunction": {
            "readOnly": false,
            "description": "Name of pre function to execute pre query",
            "type": "string",
            "example": "..."
          },
          "scriptProcessFunction": {
            "readOnly": false,
            "description": "Name of function to process instead of query. Is mutual exclusive to #getTemplate()",
            "type": "string",
            "example": "..."
          },
          "template": {
            "readOnly": false,
            "description": "The search template to use when querying for data.",
            "type": "string",
            "example": "..."
          },
          "type": {
            "readOnly": false,
            "description": "The type of the dynamic data to get, for example \u0027ArticleAttribute1List\u0027.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Contains information required to perform a dynamic data query to ETM."
      },
      "QueryServiceResultPayload": {
        "type": "object",
        "title": "QueryResponse",
        "required": [
          "total"
        ],
        "properties": {
          "aggregations": {
            "readOnly": false,
            "description": "The resulting aggregations in this payload.",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "hits": {
            "readOnly": false,
            "description": "The actual hits in this payload.",
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {
                "type": "object"
              }
            },
            "example": [
              {
                "property1": {},
                "property2": {}
              },
              {
                "property1": {},
                "property2": {}
              }
            ]
          },
          "total": {
            "readOnly": false,
            "description": "The total number of hits in this payload.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Contains the result of a dynamic query."
      },
      "RawPurchaseFlexibleSubscription": {
        "type": "object",
        "title": "RawPurchaseFlexibleSubscription",
        "required": [
          "createInitialOrderDirectly",
          "interval"
        ],
        "properties": {
          "createInitialOrderDirectly": {
            "readOnly": false,
            "description": "Whether an initial order creation is needed or not. If set any authorization or sale transactions to be used with the orders should be marked with forOrder",
            "type": "boolean",
            "example": true
          },
          "interval": {
            "readOnly": false,
            "description": "Interval of the subscription - how often products should be delivered in days.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "rows": {
            "readOnly": false,
            "description": "Rows of the subscription - contain all products the subscription should include.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RawPurchaseFlexibleSubscriptionRow"
            }
          }
        },
        "description": "Raw purchase row for creating flexible subscriptions from a template."
      },
      "RawPurchaseFlexibleSubscriptionRow": {
        "type": "object",
        "title": "RawPurchaseFlexibleSubscriptionRow",
        "required": [
          "quantity",
          "stockKeepingUnitId"
        ],
        "properties": {
          "discounts": {
            "readOnly": false,
            "description": "Discounts that are to be applied to this row.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RawPurchaseSubscriptionDiscount"
            }
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The Price Look Up number of the stock keeping unit for this row. Mutually exclusive with stock keeping unit ID.",
            "type": "string",
            "example": "..."
          },
          "quantity": {
            "example": 1,
            "readOnly": false,
            "description": "The quantity of the row.",
            "type": "integer",
            "format": "int32"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The internal identifier of the stock keeping unit for this row. Mutually exclusive with Price Look Up number.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "taxRate": {
            "example": 0.25,
            "readOnly": false,
            "description": "The tax rate of the row. The value should be between zero and one, meaning that it can be multiplied with in order to get the total amount of value added\ntax.\n\u003cp\u003e\nIf no taxRate is sent in, the rate specified in the product register will be used.",
            "type": "number"
          },
          "unitPrice": {
            "readOnly": false,
            "description": "The price of one individual unit. Deprecated in favor of unitPriceIncludingTax",
            "type": "number"
          },
          "unitPriceExcludingTax": {
            "readOnly": false,
            "description": "The unit price excluding tax of one individual unit.",
            "type": "number",
            "example": 12345
          },
          "unitPriceIncludingTax": {
            "readOnly": false,
            "description": "The unit price including tax of one individual unit.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "A row of a raw purchase will result in a flexible subscription row. It has a stock keeping unit with the given quantity. Price information and\npotential discount is also provided."
      },
      "RawPurchaseOrderRow": {
        "type": "object",
        "title": "RawPurchaseOrderRow",
        "required": [
          "quantity",
          "stockKeepingUnitId"
        ],
        "properties": {
          "discount": {
            "readOnly": false,
            "description": "The total discount of the row. This value is \u003cb\u003enot\u003c/b\u003e per quantity. Deprecated in favor of \u003ccode\u003ediscountIncludingTax\u003c/code\u003e.\nHaving both values will cause the deprecated one to be overridden.",
            "type": "number"
          },
          "discountExcludingTax": {
            "readOnly": false,
            "description": "The total discount excluding tax of the row. This value is \u003cb\u003enot\u003c/b\u003e per quantity.",
            "type": "number",
            "example": 12345
          },
          "discountIncludingTax": {
            "readOnly": false,
            "description": "The total discount including tax of the row. This value is \u003cb\u003enot\u003c/b\u003e per quantity.",
            "type": "number",
            "example": 12345
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The Price Look Up number of the stock keeping unit for this row. Mutually exclusive with stock keeping unit ID.",
            "type": "string",
            "example": "..."
          },
          "quantity": {
            "example": 1,
            "readOnly": false,
            "description": "The quantity of the row.",
            "type": "integer",
            "format": "int32"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The internal identifier of the stock keeping unit for this row. Mutually exclusive with Price Look Up number.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "taxRate": {
            "example": 0.25,
            "readOnly": false,
            "description": "The tax rate of the row. The value should be between zero and one, meaning that it can be multiplied with in order to get the total amount of value added\ntax.\n\u003cp\u003e\nIf no taxRate is sent in, the rate specified in the product register will be used.",
            "type": "number"
          },
          "unitPrice": {
            "readOnly": false,
            "description": "The price of one individual unit. Deprecated in favor of unitPriceIncludingTax",
            "type": "number"
          },
          "unitPriceExcludingTax": {
            "readOnly": false,
            "description": "The unit price excluding tax of one individual unit.",
            "type": "number",
            "example": 12345
          },
          "unitPriceIncludingTax": {
            "readOnly": false,
            "description": "The unit price including tax of one individual unit.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "A row of a raw purchase will result in a regular order row. It has a stock keeping unit with the given quantity. Price information and potential\ndiscount is also provided."
      },
      "RawPurchasePaymentReference": {
        "type": "object",
        "title": "RawPurchasePaymentReference",
        "required": [
          "forOrder",
          "forSubscription"
        ],
        "properties": {
          "amount": {
            "readOnly": false,
            "description": "The amount of the reference. Optional for transaction type REFERENCE.",
            "type": "number",
            "example": 12345
          },
          "externalPaymentMethodCode": {
            "readOnly": false,
            "description": "The external code of the payment method for the reference. An alternative to the payment method code, that is stable across renames. If this is\nnot specified, the reference will fallback to the purchase payment method.\n\u003cp\u003e\nMutually exclusive with paymentMethodCode. Supplying both is rejected with the error code\nraw-purchase.payment-method-code-conflict.\n\u003cp\u003e\nThe external code is unique among the payment methods that have one, so at most one method answers to a given code.",
            "type": "string",
            "example": "..."
          },
          "externalReference": {
            "readOnly": false,
            "description": "The external reference. May be used differently for different payment methods. Needs to be used if references should be grouped.\n\u003cp\u003e\nNOTE: For \u003cb\u003eAdyen\u003c/b\u003e recurring transactions it must contain shopperReference (original purchase number).",
            "type": "string",
            "example": "..."
          },
          "forOrder": {
            "readOnly": false,
            "description": "Whether this transaction is for order. True by default. Should be true for the AUTHORIZATION/SALE transaction of a subscription if\ncreateInitialOrderDirectly is used.",
            "type": "boolean",
            "example": true
          },
          "forSubscription": {
            "readOnly": false,
            "description": "Whether this transaction is for subscription. False by default. Should be true if the payment reference is used to create orders for the\nsubscription. Should be set to true when setting transactionType to REFERENCE for the .",
            "type": "boolean",
            "example": true
          },
          "parentReference": {
            "readOnly": false,
            "description": "The parent reference. Should be used if the transaction is related to another transaction. For example when doing an initial charge of\nsubscription payment agreement, the parent reference of the AUTHORIZATION should be the reference of the recurring transaction with transaction\ntype REFERENCE.",
            "type": "string",
            "example": "..."
          },
          "paymentMethodCode": {
            "readOnly": false,
            "description": "The payment method for the reference. If this is not specified, the reference will fallback to the purchase payment method.\n\u003cp\u003e\nMutually exclusive with externalPaymentMethodCode. Supplying both is rejected with the error code\nraw-purchase.payment-method-code-conflict.",
            "type": "string",
            "example": "..."
          },
          "paymentMethodType": {
            "readOnly": false,
            "description": "The payment method type.\n\u003cp\u003e\nNOTE: For \u003cb\u003eAdyen\u003c/b\u003e recurring transactions it must contain payment method type (i.e. paypal, ideal, klarna_pay_now).",
            "type": "string",
            "example": "..."
          },
          "reference": {
            "readOnly": false,
            "description": "The payment reference.",
            "type": "string",
            "example": "..."
          },
          "transactionType": {
            "$ref": "#/components/schemas/TransactionType"
          }
        },
        "description": "Represents a transaction of a payment."
      },
      "RawPurchaseRequest": {
        "type": "object",
        "title": "RawPurchaseRequest",
        "properties": {
          "additionalOrderText": {
            "readOnly": false,
            "description": "The Additional order text on the purchase.",
            "type": "string",
            "example": "..."
          },
          "address": {
            "$ref": "#/components/schemas/Address_address"
          },
          "alternativeEmailAddress": {
            "readOnly": false,
            "description": "The alternative email address of the customer.",
            "type": "string",
            "example": "..."
          },
          "cellphone": {
            "readOnly": false,
            "description": "The cellphone number of the customer.",
            "type": "string",
            "example": "..."
          },
          "charge": {
            "readOnly": false,
            "description": "The charge of the purchase. Deprecated in favor of \u003ccode\u003eserviceFeeIncludingTax\u003c/code\u003e. Having both values will cause the deprecated one to be overridden.",
            "type": "number"
          },
          "companyName": {
            "readOnly": false,
            "description": "The company name of the customer. Mutually exclusive with \u003ccode\u003efirstName\u003c/code\u003e, \u003ccode\u003elastName\u003c/code\u003e and \u003ccode\u003esocialSecurityNumber\u003c/code\u003e.",
            "type": "string",
            "example": "..."
          },
          "customFields": {
            "readOnly": false,
            "description": "Custom fields.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomField"
            }
          },
          "customerNumber": {
            "readOnly": false,
            "description": "The customer number.",
            "type": "string",
            "example": "..."
          },
          "dateOfBirth": {
            "readOnly": false,
            "description": "Date of birth of the customer.",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/AddressWithName"
          },
          "deliveryMethodCode": {
            "readOnly": false,
            "description": "Deprecated in favor of \u003ccode\u003edeliveryMethodName\u003c/code\u003e",
            "type": "string"
          },
          "deliveryMethodName": {
            "readOnly": false,
            "description": "The name of the delivery method.\n\u003cp\u003e\nMutually exclusive with externalDeliveryMethodCode. Supplying both is rejected with the error code\nraw-purchase.delivery-method-code-conflict.",
            "type": "string",
            "example": "..."
          },
          "deliveryPointCode": {
            "readOnly": false,
            "description": "The code of the optional delivery point.",
            "type": "string",
            "example": "..."
          },
          "discount": {
            "readOnly": false,
            "description": "The head-level discount of the purchase. Not to be confused with row-level discount.",
            "type": "number",
            "example": 12345
          },
          "email": {
            "readOnly": false,
            "description": "The email address of the customer.",
            "type": "string",
            "example": "..."
          },
          "externalDeliveryMethodCode": {
            "readOnly": false,
            "description": "The external code of the delivery method. An alternative to the delivery method name that stays stable when the name is changed.\n\u003cp\u003e\nMutually exclusive with deliveryMethodName. Supplying both is rejected with the error code\nraw-purchase.delivery-method-code-conflict.\n\u003cp\u003e\nThe external code is unique among the delivery methods that have one, so at most one method answers to a given code.",
            "type": "string",
            "example": "..."
          },
          "externalPaymentMethodCode": {
            "readOnly": false,
            "description": "The external code of the payment method. An alternative to the payment method name that stays stable when the name is changed.\n\u003cp\u003e\nMutually exclusive with paymentMethodName. Supplying both is rejected with the error code\nraw-purchase.payment-method-code-conflict.\n\u003cp\u003e\nThe external code is unique among the payment methods that have one, so at most one method answers to a given code.",
            "type": "string",
            "example": "..."
          },
          "firstName": {
            "readOnly": false,
            "description": "The first name of the customer. Mutually exclusive with \u0027companyName\u0027.",
            "type": "string",
            "example": "..."
          },
          "flexibleSubscriptions": {
            "readOnly": false,
            "description": "The flexible subscriptions of this purchase.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RawPurchaseFlexibleSubscription"
            }
          },
          "gender": {
            "$ref": "#/components/schemas/Sex"
          },
          "googleAnalyticsId": {
            "readOnly": false,
            "description": "Google Analytics Client Id. This Id is used to track anonymous users and their actions. Purchase data will be pushed to google analytics with\nthis id.",
            "type": "string",
            "example": "..."
          },
          "integrities": {
            "example": "EMAIL_INFO",
            "readOnly": false,
            "description": "The list of integrities that the customer consents or opts in to.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "integritiesMap": {
            "readOnly": false,
            "description": "The map of integrities that the customer opts out or opts in to.",
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            },
            "example": {
              "EMAIL_INFO": true,
              "SMS_INFO": false
            }
          },
          "landline": {
            "readOnly": false,
            "description": "The landline phone number of the customer.",
            "type": "string",
            "example": "..."
          },
          "languageCode": {
            "$ref": "#/components/schemas/Language_commons"
          },
          "lastName": {
            "readOnly": false,
            "description": "The last name of the customer. Mutually exclusive with \u0027companyName\u0027.",
            "type": "string",
            "example": "..."
          },
          "marketingCampaignCode": {
            "readOnly": false,
            "description": "The code of the marketing campaign.",
            "type": "string",
            "example": "..."
          },
          "methodOfArrivalNumber": {
            "readOnly": false,
            "description": "The number of the method of arrival (or \"channel\").",
            "type": "string",
            "example": "..."
          },
          "nextDeliveryDate": {
            "readOnly": false,
            "description": "For orders: earliest delivery date. For subscriptions: suggested next delivery date. Defaulted to today\u0027s date.",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "notes": {
            "readOnly": false,
            "description": "A free text that will be stored in the order\u0027s/subscription\u0027s list of notes.",
            "type": "string",
            "example": "..."
          },
          "orderDate": {
            "readOnly": false,
            "description": "For orders: the order date. For subscription: the starting date. Defaulted to nextDeliveryDate if specified, otherwise today\u0027s date",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "organizationNumber": {
            "readOnly": false,
            "description": "The organization number of the customer. Mutually exclusive with \u003ccode\u003efirstName\u003c/code\u003e, \u003ccode\u003elastName\u003c/code\u003e and\n\u003ccode\u003esocialSecurityNumber\u003c/code\u003e.",
            "type": "string",
            "example": "..."
          },
          "paymentFee": {
            "readOnly": false,
            "description": "The payment fee of the purchase. Deprecated in favor of \u003ccode\u003epaymentFeeIncludingTax\u003c/code\u003e. Having both values will cause the deprecated one to be overridden.",
            "type": "number"
          },
          "paymentFeeExcludingTax": {
            "readOnly": false,
            "description": "The payment fee excluding tax of the purchase.",
            "type": "number",
            "example": 12345
          },
          "paymentFeeIncludingTax": {
            "readOnly": false,
            "description": "The payment fee of the purchase.",
            "type": "number",
            "example": 12345
          },
          "paymentFeeTaxRate": {
            "readOnly": false,
            "description": "The tax rate of the payment fee of the purchase.",
            "type": "number",
            "example": 12345
          },
          "paymentMethodCode": {
            "readOnly": false,
            "description": "Deprecated in favor of \u003ccode\u003epaymentMethodName\u003c/code\u003e",
            "type": "string"
          },
          "paymentMethodName": {
            "readOnly": false,
            "description": "The name of the payment method.\n\u003cp\u003e\nMutually exclusive with externalPaymentMethodCode. Supplying both is rejected with the error code\nraw-purchase.payment-method-code-conflict.",
            "type": "string",
            "example": "..."
          },
          "paymentReference": {
            "readOnly": false,
            "description": "Deprecated in favor of list of payment references.\n\u003cp\u003e\nUse RawPurchaseRequest#paymentReferences instead.",
            "type": "string"
          },
          "paymentReferences": {
            "readOnly": false,
            "description": "The references of the payment, if the payment method requires it.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RawPurchasePaymentReference"
            }
          },
          "remoteAddress": {
            "readOnly": false,
            "description": "The remote client address.",
            "type": "string",
            "example": "..."
          },
          "rows": {
            "readOnly": false,
            "description": "The regular stock keeping unit rows of this purchase.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RawPurchaseOrderRow"
            }
          },
          "sellerDepartment": {
            "readOnly": false,
            "description": "For sales handled by third parties, typically TM call centers - the department that the seller belongs to. The order/subscription\u0027s createdBy field will\nbe updated with the department (and sellerPerson)",
            "type": "string",
            "example": "..."
          },
          "sellerPerson": {
            "readOnly": false,
            "description": "For sales handled by third parties, typically TM call centers - the name/identifier of the seller person. The order/subscription\u0027s createdBy field will\nbe updated with the seller (and sellerDepartment)",
            "type": "string",
            "example": "..."
          },
          "serviceFeeExcludingTax": {
            "readOnly": false,
            "description": "The service fee excluding tax of the purchase. Only applicable for normal purchases.",
            "type": "number",
            "example": 12345
          },
          "serviceFeeIncludingTax": {
            "readOnly": false,
            "description": "The service fee of the purchase. Only applicable for normal purchases.",
            "type": "number",
            "example": 12345
          },
          "serviceFeeTaxRate": {
            "readOnly": false,
            "description": "The tax rate of the service fee of the purchase.",
            "type": "number",
            "example": 12345
          },
          "shippingFee": {
            "readOnly": false,
            "description": "The shipping fee of the purchase. Deprecated in favor of \u003ccode\u003eshippingFeeIncludingTax\u003c/code\u003e. Having both values will cause the deprecated one to be overridden.",
            "type": "number"
          },
          "shippingFeeExcludingTax": {
            "readOnly": false,
            "description": "The shipping fee excluding tax of the purchase.",
            "type": "number",
            "example": 12345
          },
          "shippingFeeIncludingTax": {
            "readOnly": false,
            "description": "The shipping fee of the purchase.",
            "type": "number",
            "example": 12345
          },
          "shippingFeeTaxRate": {
            "readOnly": false,
            "description": "The tax rate of the shipping fee of the purchase.",
            "type": "number",
            "example": 12345
          },
          "socialSecurityNumber": {
            "readOnly": false,
            "description": "The social security number of the customer. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e and \u003ccode\u003eorganizationNumber\u003c/code\u003e.",
            "type": "string",
            "example": "..."
          },
          "storeNumber": {
            "readOnly": false,
            "description": "The number of the physical store that this purchase was made within. This value is not to be confused with a delivery point when using Click \u0026\nCollect.",
            "type": "string",
            "example": "..."
          },
          "subscriptions": {
            "readOnly": false,
            "description": "The subscription rows of this purchase.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RawPurchaseSubscriptionRow"
            }
          },
          "termsOfDeliveryCode": {
            "readOnly": false,
            "description": "The code of the terms of delivery.",
            "type": "string",
            "example": "..."
          },
          "termsOfPaymentCode": {
            "readOnly": false,
            "description": "The code of the terms of payment.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "A raw purchase contains all the necessary information for the order chain. It contains information about the customer, including contact\ninformation and shipping details. It contains content information, such as regular order information, with fees and rows, but also potential\nsubscriptions. It contains information about how payments are handled and how deliveries are handled."
      },
      "RawPurchaseResponse": {
        "type": "object",
        "title": "RawPurchaseResponse",
        "properties": {
          "purchaseNumber": {
            "readOnly": false,
            "description": "The identifier of the raw purchase that was created.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Contains the response from Raw Purchase API."
      },
      "RawPurchaseSubscriptionDiscount": {
        "type": "object",
        "title": "RawPurchaseSubscriptionDiscount",
        "required": [
          "numberOfUses",
          "sort"
        ],
        "properties": {
          "discountAmount": {
            "readOnly": false,
            "description": "The discount amount. Mutually exclusive with discount percent. Deprecated in favor of \u003ccode\u003ediscountAmountIncludingTax\u003c/code\u003e. Having both\nvalues will cause the deprecated one to be overridden.",
            "type": "number",
            "example": 12345
          },
          "discountAmountExcludingTax": {
            "readOnly": false,
            "description": "The discount amount excluding tax. Mutually exclusive with discount percent.",
            "type": "number",
            "example": 12345
          },
          "discountAmountIncludingTax": {
            "readOnly": false,
            "description": "The discount amount including tax. Mutually exclusive with discount percent.",
            "type": "number",
            "example": 12345
          },
          "discountPercent": {
            "readOnly": false,
            "description": "The optional discount percent. Mutually exclusive with discount amount. Must be a value between zero and one, e.g. 0.05 \u003d 5% discount.",
            "type": "number",
            "example": 12345
          },
          "numberOfUses": {
            "readOnly": false,
            "description": "The number of uses represents how many times the discount can be used. If there are multiple rows with discounts in the same subscription, then\nthe number of uses must be the same for identical sort. If the number of uses is zero, then the discount will be applied until the subscription\nis cancelled.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "sort": {
            "readOnly": false,
            "description": "The discount sort represents the order in which the discounts will be applied. The discount with the lowest sort will be applied first. Lowest\nsort must be 1, sort must be unique per discount array and must be sequential.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Raw purchase subscription discount."
      },
      "RawPurchaseSubscriptionRow": {
        "type": "object",
        "title": "RawPurchaseSubscriptionRow",
        "required": [
          "createInitialOrderDirectly"
        ],
        "properties": {
          "createInitialOrderDirectly": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "templateCode": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Raw purchase row for creating subscriptions from a template."
      },
      "Receipt": {
        "type": "object",
        "title": "Receipt",
        "properties": {
          "countryCode": {
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2) of the receipt.",
            "type": "string",
            "example": "..."
          },
          "currencyCode": {
            "readOnly": false,
            "description": "The currency code (ISO 4217) of the receipt.",
            "type": "string",
            "example": "..."
          },
          "customFields": {
            "readOnly": false,
            "description": "Custom fields registered on the purchase, as key/value pairs.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomField"
            }
          },
          "customer": {
            "$ref": "#/components/schemas/ReceiptCustomer"
          },
          "deliveryMethod": {
            "$ref": "#/components/schemas/ReceiptDeliveryMethod"
          },
          "identifier": {
            "readOnly": false,
            "description": "The identifier of the receipt.",
            "type": "string"
          },
          "integrities": {
            "readOnly": false,
            "description": "",
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            },
            "example": {
              "property1": true,
              "property2": true
            }
          },
          "maskedCustomer": {
            "$ref": "#/components/schemas/ReceiptCustomer"
          },
          "offerCodes": {
            "readOnly": false,
            "description": "All offer codes used on the receipt. This data is duplicated on offers and rows.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "offers": {
            "readOnly": false,
            "description": "The head-level offers of the receipt.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceiptOffer"
            }
          },
          "orderNumber": {
            "readOnly": false,
            "description": "The order number of the receipt. This field may or may not be set, depending on the payment method.",
            "type": "string",
            "example": "..."
          },
          "params": {
            "readOnly": false,
            "description": "Parameters from unique hooks, such as Klarna Checkout.",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "property1": "...",
              "property2": "..."
            }
          },
          "paymentMethod": {
            "$ref": "#/components/schemas/ReceiptPaymentMethod"
          },
          "purchaseNumber": {
            "readOnly": false,
            "description": "The purchase number of the receipt.",
            "type": "string",
            "example": "..."
          },
          "rentals": {
            "readOnly": false,
            "description": "The rentals of this receipt.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceiptRental"
            }
          },
          "rows": {
            "readOnly": false,
            "description": "The order rows of the receipt.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceiptRow"
            }
          },
          "seller": {
            "$ref": "#/components/schemas/Seller"
          },
          "shopcartId": {
            "readOnly": false,
            "description": "The identifier of the shopping cart that caused this receipt. Useful to know whether or not to send tracking pixels to third party providers by\ncomparing against the consumers session.",
            "type": "string",
            "example": "..."
          },
          "streamlineExpressServiceCode": {
            "readOnly": false,
            "description": "Code of streamline express service if this receipt is a result of a Streamline express purchase.",
            "type": "string",
            "example": "..."
          },
          "subscriptions": {
            "readOnly": false,
            "description": "The subscriptions of the receipt.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceiptSubscription"
            }
          },
          "usedVouchers": {
            "readOnly": false,
            "description": "All vouchers (gift cards) used in the receipt.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceiptUsedVoucher"
            }
          },
          "value": {
            "$ref": "#/components/schemas/ReceiptValue"
          }
        },
        "description": "Defines a receipt for an order online."
      },
      "ReceiptAddOn": {
        "type": "object",
        "title": "ReceiptAddOn",
        "required": [
          "rowId",
          "stockKeepingUnitId"
        ],
        "properties": {
          "meta": {
            "readOnly": false,
            "description": "Dynamic meta data about the stock keeping unit of this row.",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "rowId": {
            "readOnly": false,
            "description": "The identifier of the row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The stock keeping unit of the row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "value": {
            "$ref": "#/components/schemas/ReceiptAddOnValue"
          }
        },
        "description": "Defines a single add-on row that belongs to a receipt row."
      },
      "ReceiptAddOnValue": {
        "type": "object",
        "title": "ReceiptAddOnValue",
        "properties": {
          "taxRate": {
            "readOnly": false,
            "description": "The tax rate of the row.",
            "type": "number",
            "example": 12345
          },
          "total": {
            "readOnly": false,
            "description": "The total value of the row, including taxes.",
            "type": "number",
            "example": 12345
          },
          "totalExcludingTax": {
            "readOnly": false,
            "description": "The total value of the row, excluding taxes.",
            "type": "number",
            "example": 12345
          },
          "unitPrice": {
            "readOnly": false,
            "description": "The price of a single item of the row, including taxes.",
            "type": "number",
            "example": 12345
          },
          "unitPriceExcludingTax": {
            "readOnly": false,
            "description": "The price of a single item of the row, excluding taxes.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Defines value details for receipt rows."
      },
      "ReceiptCustomer": {
        "type": "object",
        "title": "ReceiptCustomer",
        "properties": {
          "address": {
            "$ref": "#/components/schemas/Address_address"
          },
          "alternativeEmailAddress": {
            "readOnly": false,
            "description": "The alternative email address.",
            "type": "string",
            "example": "..."
          },
          "cellphone": {
            "readOnly": false,
            "description": "The cell-phone number.",
            "type": "string",
            "example": "..."
          },
          "companyName": {
            "readOnly": false,
            "description": "The name of the company.",
            "type": "string",
            "example": "..."
          },
          "customerNumber": {
            "readOnly": false,
            "description": "The unique customer number.",
            "type": "string",
            "example": "..."
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/AddressWithName"
          },
          "email": {
            "readOnly": false,
            "description": "The email address.",
            "type": "string",
            "example": "..."
          },
          "firstName": {
            "readOnly": false,
            "description": "The first name of the customer.",
            "type": "string",
            "example": "..."
          },
          "lastName": {
            "readOnly": false,
            "description": "The last name of the customer.",
            "type": "string",
            "example": "..."
          },
          "organizationNumber": {
            "readOnly": false,
            "description": "The organization number of the company.",
            "type": "string",
            "example": "..."
          },
          "socialSecurityNumber": {
            "readOnly": false,
            "description": "The social security number of the customer.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Holds information about the customer of a receipt."
      },
      "ReceiptDeliveryMethod": {
        "type": "object",
        "title": "ReceiptDeliveryMethod",
        "required": [
          "deliveryMethodId"
        ],
        "properties": {
          "deliveryMethodId": {
            "readOnly": false,
            "description": "The identifier of the method.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryMethodName": {
            "readOnly": false,
            "description": "The name of the delivery method.",
            "type": "string",
            "example": "..."
          },
          "methodName": {
            "readOnly": false,
            "description": "Deprecated in favor of \u003ccode\u003eReceiptDeliveryMethod#deliveryMethodName\u003c/code\u003e",
            "type": "string"
          }
        },
        "description": "Contains information about the delivery method of a receipt."
      },
      "ReceiptOffer": {
        "type": "object",
        "title": "ReceiptOffer",
        "required": [
          "offerId"
        ],
        "properties": {
          "discount": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "offerDescription": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "offerId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Contains information about a head-level offer of a receipt."
      },
      "ReceiptPaymentMethod": {
        "type": "object",
        "title": "ReceiptPaymentMethod",
        "required": [
          "paymentMethodId"
        ],
        "properties": {
          "methodName": {
            "readOnly": false,
            "description": "The name of the method.",
            "type": "string"
          },
          "paymentMethodId": {
            "readOnly": false,
            "description": "The identifier of the method.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "paymentMethodName": {
            "readOnly": false,
            "description": "The name of the payment method.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Contains information about the payment method of a receipt."
      },
      "ReceiptRental": {
        "type": "object",
        "title": "ReceiptRental",
        "required": [
          "quantity",
          "stockKeepingUnitId"
        ],
        "properties": {
          "addOnRows": {
            "readOnly": false,
            "description": "The add-on rows of the rental.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceiptRentalAddOn"
            }
          },
          "meta": {
            "readOnly": false,
            "description": "Dynamic meta data about the stock keeping unit of this row.",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "quantity": {
            "readOnly": false,
            "description": "The quantity being rented.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "rentalInfo": {
            "$ref": "#/components/schemas/RentalInfo"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The stock keeping unit of the rental.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "value": {
            "$ref": "#/components/schemas/ReceiptRentalValue"
          }
        },
        "description": "Defines a single rental of a receipt."
      },
      "ReceiptRentalAddOn": {
        "type": "object",
        "title": "ReceiptRentalAddOn",
        "required": [
          "stockKeepingUnitId"
        ],
        "properties": {
          "meta": {
            "readOnly": false,
            "description": "Dynamic meta data about the stock keeping unit of this row.",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The stock keeping unit of the add-on.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "value": {
            "$ref": "#/components/schemas/ReceiptRentalValue"
          }
        },
        "description": "Defines a single add-on row that belongs to a rental."
      },
      "ReceiptRentalValue": {
        "type": "object",
        "title": "ReceiptRentalValue",
        "properties": {
          "taxRate": {
            "readOnly": false,
            "description": "The tax rate of the row.",
            "type": "number",
            "example": 12345
          },
          "unitPrice": {
            "readOnly": false,
            "description": "The price of a single item of the row, including taxes.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Defines value details for receipt rows."
      },
      "ReceiptRow": {
        "type": "object",
        "title": "ReceiptRow",
        "required": [
          "offerGroup",
          "offerId",
          "quantity",
          "rowId",
          "stockKeepingUnitId"
        ],
        "properties": {
          "addOnRows": {
            "readOnly": false,
            "description": "The add-on rows of the row.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceiptAddOn"
            }
          },
          "meta": {
            "readOnly": false,
            "description": "Dynamic meta data about the stock keeping unit of this row.",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "offerDescription": {
            "readOnly": false,
            "description": "The description of the offer gained for this row.",
            "type": "string",
            "example": "..."
          },
          "offerGroup": {
            "readOnly": false,
            "description": "The group that applied the offer gained for this row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "offerId": {
            "readOnly": false,
            "description": "The identifier of the offer gained for this row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "quantity": {
            "readOnly": false,
            "description": "The quantity of the row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "rowId": {
            "readOnly": false,
            "description": "The identifier of the row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The stock keeping unit of the row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "value": {
            "$ref": "#/components/schemas/ReceiptRowValue"
          }
        },
        "description": "Defines a single order row of a receipt."
      },
      "ReceiptRowValue": {
        "type": "object",
        "title": "ReceiptRowValue",
        "properties": {
          "discount": {
            "readOnly": false,
            "description": "The total discount gained for this row.",
            "type": "number",
            "example": 12345
          },
          "discountExcludingTax": {
            "readOnly": false,
            "description": "The total discount gained for this row, excluding taxes.",
            "type": "number",
            "example": 12345
          },
          "taxRate": {
            "readOnly": false,
            "description": "The tax rate of the row.",
            "type": "number",
            "example": 12345
          },
          "total": {
            "readOnly": false,
            "description": "The total value of the row, including taxes.",
            "type": "number",
            "example": 12345
          },
          "totalExcludingTax": {
            "readOnly": false,
            "description": "The total value of the row, excluding taxes.",
            "type": "number",
            "example": 12345
          },
          "unitPrice": {
            "readOnly": false,
            "description": "The price of a single item of the row, including taxes.",
            "type": "number",
            "example": 12345
          },
          "unitPriceExcludingTax": {
            "readOnly": false,
            "description": "The price of a single item of the row, excluding taxes.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Defines value details for receipt rows."
      },
      "ReceiptSubscription": {
        "type": "object",
        "title": "ReceiptSubscription",
        "required": [
          "offerGroup",
          "offerId",
          "quantity",
          "rowId",
          "subscriptionTypeId"
        ],
        "properties": {
          "addOnRows": {
            "readOnly": false,
            "description": "The add-on rows of the row.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceiptAddOn"
            }
          },
          "meta": {
            "readOnly": false,
            "description": "Dynamic meta data about the stock keeping unit of this row.",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "offerDescription": {
            "readOnly": false,
            "description": "The description of the offer gained for this row.",
            "type": "string",
            "example": "..."
          },
          "offerGroup": {
            "readOnly": false,
            "description": "The group that applied the offer gained for this row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "offerId": {
            "readOnly": false,
            "description": "The identifier of the offer gained for this row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "quantity": {
            "readOnly": false,
            "description": "The quantity.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "rowId": {
            "readOnly": false,
            "description": "The identifier of the row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "subscriptionTypeId": {
            "readOnly": false,
            "description": "The subscription type of the subscription.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "value": {
            "$ref": "#/components/schemas/ReceiptRowValue"
          }
        },
        "description": "Defines a single subscription of a receipt."
      },
      "ReceiptUsedVoucher": {
        "type": "object",
        "title": "ReceiptUsedVoucher",
        "properties": {
          "amountToReserve": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "discountAmount": {
            "readOnly": false,
            "description": "The discount the voucher gave on the purchase. Only set for vouchers that give a discount, such as bonus checks.",
            "type": "number",
            "example": 12345
          },
          "name": {
            "readOnly": false,
            "description": "The name of the voucher from the provider, e.g. the name of a bonus check.",
            "type": "string",
            "example": "..."
          },
          "paymentMethod": {
            "$ref": "#/components/schemas/ReceiptPaymentMethod"
          },
          "type": {
            "$ref": "#/components/schemas/VoucherType"
          },
          "voucherNumber": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Contains information about used vouchers: gift cards, which pay part of the purchase, and bonus checks, which give a discount."
      },
      "ReceiptValue": {
        "type": "object",
        "title": "ReceiptValue",
        "properties": {
          "charge": {
            "readOnly": false,
            "description": "The packing fee, including taxes.",
            "type": "number",
            "example": 12345
          },
          "chargeExcludingTax": {
            "readOnly": false,
            "description": "The packing fee, excluding taxes.",
            "type": "number",
            "example": 12345
          },
          "discountTotal": {
            "readOnly": false,
            "description": "The total discount gained for the receipt, including taxes.",
            "type": "number",
            "example": 12345
          },
          "discountTotalExcludingTax": {
            "readOnly": false,
            "description": "The total discount gained for the receipt, excluding taxes.",
            "type": "number",
            "example": 12345
          },
          "paymentFee": {
            "readOnly": false,
            "description": "The cost for the payment method, such as invoice fee, including taxes.",
            "type": "number",
            "example": 12345
          },
          "paymentFeeExcludingTax": {
            "readOnly": false,
            "description": "The cost for the payment method, such as invoice fee, excluding taxes.",
            "type": "number",
            "example": 12345
          },
          "shippingFee": {
            "readOnly": false,
            "description": "The cost for shipping the goods, including taxes.",
            "type": "number",
            "example": 12345
          },
          "shippingFeeExcludingTax": {
            "readOnly": false,
            "description": "The cost for shipping the goods, excluding taxes.",
            "type": "number",
            "example": 12345
          },
          "total": {
            "readOnly": false,
            "description": "The total value for the receipt, including taxes.",
            "type": "number",
            "example": 12345
          },
          "totalExcludingTax": {
            "readOnly": false,
            "description": "The total value for the receipt, excluding taxes.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Defines value details for receipts."
      },
      "Referral": {
        "type": "object",
        "title": "Referral",
        "required": [
          "referringCustomerId"
        ],
        "properties": {
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2). This will be used for finding or creating the new referred customer.",
            "type": "string"
          },
          "referredEmailAddress": {
            "example": "anton.johansson@viskan.se",
            "readOnly": false,
            "description": "The email address of the customer being referred.",
            "type": "string"
          },
          "referringCustomerId": {
            "readOnly": false,
            "description": "The identifier of the customer that is referring.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Defines a referral from one customer to a (potentially) new customer."
      },
      "RegisterCustomerRequest": {
        "type": "object",
        "title": "RegisterCustomer",
        "required": [
          "checkPhoneNumberDuplicateEnabled",
          "companyUser",
          "priceListId",
          "serviceProviderConfigId"
        ],
        "properties": {
          "alternativeEmailAddress": {
            "example": "erik.brudzinskis@viskan.se",
            "readOnly": false,
            "description": "The second email address of the customer. This is used for order confirmations.",
            "type": "string"
          },
          "categoryIds": {
            "readOnly": false,
            "description": "The customer categoryIds for a customer",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          },
          "cellphone": {
            "example": "+46730485995",
            "readOnly": false,
            "description": "The cell phone number of the customer.",
            "type": "string"
          },
          "checkPhoneNumberDuplicateEnabled": {
            "readOnly": false,
            "description": "Checks if phone number duplication is enabled or not",
            "type": "boolean",
            "example": true
          },
          "companyName": {
            "example": "Viskan System AB",
            "readOnly": false,
            "description": "The organization name of the customer",
            "type": "string"
          },
          "companyUser": {
            "example": true,
            "readOnly": false,
            "description": "Define a customer is B2B customer or not",
            "type": "boolean"
          },
          "consents": {
            "readOnly": false,
            "description": "The consents of the customer.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerConsent_CustomerAPI"
            }
          },
          "contactPerson": {
            "example": "Erik Brudzinskis",
            "readOnly": false,
            "description": "The name of a contact person for a company",
            "type": "string"
          },
          "customerType": {
            "$ref": "#/components/schemas/CustomerType"
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "emailAddress": {
            "example": "anton.johansson@viskan.se",
            "readOnly": false,
            "description": "The email address of the customer. This is used for verification and to set a password.",
            "type": "string"
          },
          "firstName": {
            "example": "Anton",
            "readOnly": false,
            "description": "The first name of the customer.",
            "type": "string"
          },
          "invoiceAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "lastName": {
            "example": "Johansson",
            "readOnly": false,
            "description": "The last name of the customer.",
            "type": "string"
          },
          "organizationNumber": {
            "example": "5565901864",
            "readOnly": false,
            "description": "The organization number of the customer.",
            "type": "string"
          },
          "priceListId": {
            "readOnly": false,
            "description": "The default priceListId for a customer",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "providerParameters": {
            "readOnly": false,
            "description": "Custom parameters for the service provider.",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "serviceProviderConfigId": {
            "readOnly": false,
            "description": "The 3rd party customer club provider to use.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "socialSecurityNumber": {
            "example": "199004141234",
            "readOnly": false,
            "description": "The social security number of the customer.",
            "type": "string"
          }
        },
        "description": "Request object for updating a customer."
      },
      "RegisterInterest": {
        "type": "object",
        "title": "RegisterInterest",
        "properties": {
          "attribute1Id": {
            "readOnly": false,
            "description": "The attribute1 ID.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute2Id": {
            "readOnly": false,
            "description": "The attribute2 ID.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute3Id": {
            "readOnly": false,
            "description": "The attribute3 ID.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country code of the customer",
            "type": "string"
          },
          "emailAddress": {
            "example": "john.doe@example.com",
            "readOnly": false,
            "description": "The email of the customer",
            "type": "string"
          },
          "productId": {
            "readOnly": false,
            "description": "The product ID. Mutually exclusive with #getStockKeepingUnitId().",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The stock keeping unit ID of the product. Mutually exclusive with #getProductId().",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Describes a request to register interest in a product."
      },
      "RelatedProduct": {
        "type": "object",
        "title": "RelatedProduct",
        "required": [
          "mandatory",
          "matchQuantity",
          "quantity",
          "relationNumber"
        ],
        "properties": {
          "mandatory": {
            "example": false,
            "readOnly": false,
            "description": "If related article is mandatory or not.",
            "type": "boolean"
          },
          "matchQuantity": {
            "example": false,
            "readOnly": false,
            "description": "Determine if the quantity of related articles needs to be matched.",
            "type": "boolean"
          },
          "priceLookUpNumber": {
            "example": "123SKU",
            "readOnly": false,
            "description": "Related price lookup number, PLUNO (SKU to connect). Not compatible with product number.",
            "type": "string"
          },
          "priceLookupUnitNumber": {
            "example": "123SKU",
            "readOnly": false,
            "description": "Related price lookup number, PLUNO (SKU to connect). Not compatible with product number. Deprecated in favor of priceLookUpNumber.\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "productNumber": {
            "example": "321PRODUCT",
            "readOnly": false,
            "description": "Related product number (product to connect). Not compatible with price lookup number (PLUNO).",
            "type": "string"
          },
          "quantity": {
            "example": 3,
            "readOnly": false,
            "description": "The number of related products. Default is 0.",
            "type": "integer",
            "format": "int32"
          },
          "relationNumber": {
            "example": 1,
            "readOnly": false,
            "description": "Relation number. Default is 0.",
            "type": "integer",
            "format": "int32"
          },
          "relationType": {
            "$ref": "#/components/schemas/RelationType"
          }
        },
        "description": "Related product information"
      },
      "RelatedProductChanges": {
        "type": "object",
        "title": "RelatedProductChanges",
        "properties": {
          "relatedProductsToAddOrUpdate": {
            "readOnly": false,
            "description": "Related products to add or update.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RelatedProductToAddOrUpdate"
            }
          }
        },
        "description": "Contains new or changed related products for a given product."
      },
      "RelatedProductDeletes": {
        "type": "object",
        "title": "RelatedProductDeletes",
        "properties": {
          "relatedProductsToDelete": {
            "readOnly": false,
            "description": "Related products to delete.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RelatedProductToDelete"
            }
          }
        },
        "description": "Contains related products for deletion."
      },
      "RelatedProductId": {
        "type": "object",
        "title": "RelatedProductId",
        "required": [
          "relationNumber"
        ],
        "properties": {
          "priceLookUpNumber": {
            "example": "123SKU",
            "readOnly": false,
            "description": "Related price lookup number, PLUNO (SKU to connect). Not compatible with product number.",
            "type": "string"
          },
          "priceLookupNumber": {
            "example": "123SKU",
            "readOnly": false,
            "description": "Related price lookup number, PLUNO (SKU to connect). Not compatible with product number. Deprecated due to incorrect field name in favor of priceLookUpNumber.",
            "type": "string"
          },
          "priceLookupUnitNumber": {
            "example": "123SKU",
            "readOnly": false,
            "description": "Related price lookup number, PLUNO (SKU to connect). Not compatible with product number. Deprecated in favor of priceLookupNumber.",
            "type": "string"
          },
          "productNumber": {
            "example": "321PRODUCT",
            "readOnly": false,
            "description": "Related product number (product to connect). Not compatible with price lookup number (PLUNO).",
            "type": "string"
          },
          "relationNumber": {
            "example": 1,
            "readOnly": false,
            "description": "Relation number. Default is 0.",
            "type": "integer",
            "format": "int32"
          },
          "relationType": {
            "$ref": "#/components/schemas/RelationType"
          }
        },
        "description": "Related product information"
      },
      "RelatedProductToAddOrUpdate": {
        "type": "object",
        "title": "RelatedProductToAddOrUpdate",
        "properties": {
          "masterPriceLookupNumber": {
            "example": "123SKU",
            "readOnly": false,
            "description": "The identifier of the master stock keeping unit. Not compatible with product number.",
            "type": "string"
          },
          "masterProductNumber": {
            "example": "123PRODUCT",
            "readOnly": false,
            "description": "The identifier of the master product. Not compatible with price lookup number (PLUNO).",
            "type": "string"
          },
          "relatedProducts": {
            "readOnly": false,
            "description": "Related products to add or update.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RelatedProduct"
            }
          },
          "translationsToAddOrUpdate": {
            "readOnly": false,
            "description": "Changes to relation translations.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TranslationToAddOrUpdate_RelatedProductToAddOrUpdate"
            }
          }
        },
        "description": "Related products to add or update."
      },
      "RelatedProductToDelete": {
        "type": "object",
        "title": "RelatedProductToDelete",
        "properties": {
          "masterPriceLookupNumber": {
            "example": "123SKU",
            "readOnly": false,
            "description": "The identifier of the master stock keeping unit. Not compatible with product number.",
            "type": "string"
          },
          "masterProductNumber": {
            "example": "123PRODUCT",
            "readOnly": false,
            "description": "The identifier of the master product. Not compatible with price lookup number (PLUNO).",
            "type": "string"
          },
          "relatedProducts": {
            "readOnly": false,
            "description": "Related products to delete.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RelatedProductId"
            }
          },
          "translationsToDelete": {
            "readOnly": false,
            "description": "Translations to delete",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TranslationToDelete"
            }
          }
        },
        "description": "Related products to delete."
      },
      "RelationProduct": {
        "type": "object",
        "title": "RelationProduct",
        "required": [
          "attribute1IdToDisplay",
          "brandNew",
          "mandatory",
          "matchQuantity",
          "preview",
          "productId"
        ],
        "properties": {
          "articleStatus": {
            "$ref": "#/components/schemas/ArticleStatus"
          },
          "attribute1IdToDisplay": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "brand": {
            "$ref": "#/components/schemas/Brand_response"
          },
          "brandNew": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "connection": {
            "$ref": "#/components/schemas/Connection"
          },
          "linkFriendlyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "longDescription": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "mandatory": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "matchQuantity": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "media": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Media"
            }
          },
          "offers": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Offer"
            }
          },
          "preview": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "priceCampaigns": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceCampaign"
            }
          },
          "productId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "productNumber": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "productType": {
            "$ref": "#/components/schemas/ProductType"
          },
          "properties": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property_response"
            }
          },
          "relationNumber": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "relationType": {
            "readOnly": false,
            "description": "",
            "type": "object",
            "example": {}
          },
          "shortDescription": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "stock": {
            "$ref": "#/components/schemas/Stock"
          },
          "stockKeepingUnits": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnit_response"
            }
          }
        },
        "description": ""
      },
      "RelationTranslation": {
        "type": "object",
        "title": "RelationTranslation",
        "properties": {
          "languageCode": {
            "example": "en",
            "readOnly": false,
            "description": "The language code of the translation, this is the identifier. This value is mandatory. (BCP 47 code)",
            "type": "string"
          },
          "shortDescription": {
            "example": "Short description of the product",
            "readOnly": false,
            "description": "Changes to the short description for this translation.",
            "type": "string"
          }
        },
        "description": ""
      },
      "RelationType": {
        "type": "string",
        "title": "RelationType",
        "enum": [
          "MATCHING",
          "REPLACEMENT",
          "SET",
          "ALREADY_PACKAGED",
          "ALSO_BOUGHT",
          "ADD_ON",
          "AUTOMATIC_REPLACEMENT",
          "CONTENTS",
          "PURCHASE_OPTIONS",
          "SHOPCART_OFFER",
          "GIFT",
          "EXTRA_SUBSCRIPTION_SHIPMENT",
          "GENERIC_1",
          "GENERIC_2"
        ],
        "description": ""
      },
      "Relations": {
        "type": "object",
        "title": "Relations",
        "properties": {
          "products": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RelationProduct"
            }
          }
        },
        "description": ""
      },
      "RenewalAction": {
        "type": "string",
        "title": "RenewalAction",
        "enum": [
          "RENDER_SNIPPET"
        ],
        "description": "Defines various actions that needs to be done by the client when renewing payment information."
      },
      "RenewalResult": {
        "type": "object",
        "title": "RenewalResult",
        "properties": {
          "action": {
            "$ref": "#/components/schemas/RenewalAction"
          },
          "snippetParams": {
            "readOnly": false,
            "description": "Parameters required to render the snippet.",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          }
        },
        "description": "Information about successfully renewed payment information."
      },
      "Rental": {
        "type": "object",
        "title": "Rental",
        "required": [
          "active",
          "minimumRentalLength",
          "rentalId"
        ],
        "properties": {
          "active": {
            "example": true,
            "readOnly": false,
            "description": "The active status of the rental.",
            "type": "boolean"
          },
          "fee": {
            "example": 100,
            "readOnly": false,
            "description": "The periodic fee of the rental.",
            "type": "number"
          },
          "feeAt": {
            "example": "2021-05-25",
            "readOnly": false,
            "description": "The next payment date for the rental.",
            "type": "string",
            "format": "date"
          },
          "minimumRentalLength": {
            "example": 12,
            "readOnly": false,
            "description": "The shortest possible time of rental for the rental, in months.",
            "type": "integer",
            "format": "int32"
          },
          "paymentInfo": {
            "$ref": "#/components/schemas/PaymentInfo"
          },
          "rentalId": {
            "example": 123,
            "readOnly": false,
            "description": "The ID of the rental. If rentalId is 0, it means the rental is pending.",
            "type": "integer",
            "format": "int32"
          },
          "rentalName": {
            "example": "ACME Mini Freezer X-5000",
            "readOnly": false,
            "description": "The name of the rental.",
            "type": "string"
          },
          "rentalRows": {
            "readOnly": false,
            "description": "The rows of the rental, containing detailed information of the rental product(s).",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RentalRow"
            }
          },
          "startedAt": {
            "example": "2019-05-25",
            "readOnly": false,
            "description": "The start date of the rental.",
            "type": "string",
            "format": "date"
          }
        },
        "description": "Defines information about one rental. One Rental can include multiple products such as insurance and add-on products."
      },
      "RentalInfo": {
        "type": "object",
        "title": "RentalInfo",
        "required": [
          "minimumRentalLength",
          "rentalPeriodId"
        ],
        "properties": {
          "minimumRentalLength": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "rentalPeriodId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": ""
      },
      "RentalRow": {
        "type": "object",
        "title": "RentalRow",
        "required": [
          "quantity"
        ],
        "properties": {
          "fee": {
            "example": 100,
            "readOnly": false,
            "description": "The fee per one single product, insurance or add-on to rent.",
            "type": "number"
          },
          "linkFriendlyName": {
            "example": "white-goods-insurance",
            "readOnly": false,
            "description": "The link friendly name of the product.",
            "type": "string"
          },
          "mediaFileName": {
            "example": "white_goods_insurance.jpg",
            "readOnly": false,
            "description": "The name of the media file of the product.",
            "type": "string"
          },
          "productName": {
            "example": "White Goods Insurance",
            "readOnly": false,
            "description": "The name of the product, insurance or add-on to rent.",
            "type": "string"
          },
          "quantity": {
            "example": 2,
            "readOnly": false,
            "description": "The quantity of products on this row.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Defines a product included in a rental."
      },
      "RentalHead": {
        "type": "object",
        "title": "Rentals",
        "properties": {
          "nextFee": {
            "example": 100,
            "readOnly": false,
            "description": "The next fee to pay.",
            "type": "number"
          },
          "nextFeeAt": {
            "example": "2021-05-25",
            "readOnly": false,
            "description": "The date of the next payment.",
            "type": "string",
            "format": "date"
          },
          "rentals": {
            "readOnly": false,
            "description": "The list of rentals.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rental"
            }
          },
          "totalFee": {
            "example": 1000,
            "readOnly": false,
            "description": "The total fee of all rentals for one customer.",
            "type": "number"
          }
        },
        "description": "A RentalHead defines information on all of one customer\u0027s rentals, including meta information such as total fee."
      },
      "ReservationRequest": {
        "type": "object",
        "title": "ReservationRequest",
        "required": [
          "desiredQuantity",
          "stockKeepingUnitId",
          "warehouseId"
        ],
        "properties": {
          "desiredQuantity": {
            "readOnly": false,
            "description": "The desired quantity to reserve.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price lookup number (PLUNO) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit. \u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "reference": {
            "readOnly": false,
            "description": "The unique reference of this reservation.",
            "type": "string",
            "example": "..."
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The internal identifier of the stock keeping unit.\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with priceLookupUnitNumber.\u003c/p\u003e",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "warehouseId": {
            "readOnly": false,
            "description": "The internal identifier of the warehouse and mutually exclusive with WarehouseNumber",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "warehouseNumber": {
            "readOnly": false,
            "description": "The identifying number for the warehouse. Mutually exclusive with warehouseId.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Defines a reservation request."
      },
      "ReservationRunRequest": {
        "type": "object",
        "title": "ReservationRunRequest",
        "properties": {
          "productId": {
            "example": 42,
            "readOnly": false,
            "description": "The internal identifier of the product to run reservation for. Targets all of the product\u0027s stock keeping units.\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with stockKeepingUnitId.\u003c/p\u003e",
            "type": "integer",
            "format": "int32"
          },
          "stockKeepingUnitId": {
            "example": 619,
            "readOnly": false,
            "description": "The internal identifier of the stock keeping unit to run reservation for.\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with productId.\u003c/p\u003e",
            "type": "integer",
            "format": "int32"
          },
          "warehouseId": {
            "example": 1,
            "readOnly": false,
            "description": "The internal identifier of the warehouse to run reservation for. Omit to run for all warehouses.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Defines a reservation run request."
      },
      "ReservationRunResult": {
        "type": "object",
        "title": "ReservationRunResult",
        "required": [
          "reserved"
        ],
        "properties": {
          "reserved": {
            "readOnly": false,
            "description": "Whether any reservation work was performed. \u003ccode\u003efalse\u003c/code\u003e when the run was skipped because nothing needed reserving.",
            "type": "boolean",
            "example": true
          }
        },
        "description": "Holds the result of a reservation run."
      },
      "ResetPasswordRequest": {
        "type": "object",
        "title": "ResetPasswordRequest",
        "required": [
          "companyUser",
          "customerId",
          "serviceProviderConfigId",
          "timeToLiveMinutes"
        ],
        "properties": {
          "companyUser": {
            "readOnly": false,
            "description": "The type of the customer, B2B company user or normal user",
            "type": "boolean",
            "example": true
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2) of the customer that the password reset is intended for.",
            "type": "string"
          },
          "customerId": {
            "example": 68,
            "readOnly": false,
            "description": "The customerId of the customer to reset the password for.",
            "type": "integer",
            "format": "int32"
          },
          "existingPasswordRequired": {
            "readOnly": false,
            "description": "If an existing password is require for the customer to reset their own password",
            "type": "boolean",
            "example": true
          },
          "identifier": {
            "example": "anton.johansson@viskan.se",
            "readOnly": false,
            "description": "The identifier of the customer.",
            "type": "string"
          },
          "identifierType": {
            "$ref": "#/components/schemas/IdentifierType"
          },
          "noMatchTemplateCode": {
            "example": "MY_PAGES_RESET_PASSWORD_NO_MATCH",
            "readOnly": false,
            "description": "In case if email is not registered in the system then email will be sent to email address generated using this template code.",
            "type": "string"
          },
          "serviceProviderConfigId": {
            "readOnly": false,
            "description": "The service provider configuration to use. This is needed if you are connecting to a third party customer club provider.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "timeToLiveMinutes": {
            "example": 60,
            "readOnly": false,
            "description": "The number of minutes that the token should remain valid for. Defaults to \u003ccode\u003e60\u003c/code\u003e.",
            "type": "integer",
            "format": "int32"
          },
          "tokenType": {
            "$ref": "#/components/schemas/TokenType"
          }
        },
        "description": "Contains information for requesting a new reset password token."
      },
      "Return": {
        "type": "object",
        "title": "Return",
        "required": [
          "customerId",
          "deliveryId",
          "multiBrandId",
          "orderId",
          "returnId"
        ],
        "properties": {
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country code (ISO 3166-1 alpha-2) of the return.",
            "type": "string"
          },
          "currencyCode": {
            "example": "SEK",
            "readOnly": false,
            "description": "The The currency code (ISO 4217) of the return.",
            "type": "string"
          },
          "customFields": {
            "readOnly": false,
            "description": "The custom fields to add to the return. Any existing custom field will be overwritten.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomFieldReturnResult"
            }
          },
          "customerId": {
            "readOnly": false,
            "description": "The internal identifier of the customer connected to the return.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "customerNumber": {
            "readOnly": false,
            "description": "The external number of the customer.",
            "type": "string",
            "example": "..."
          },
          "deliveryId": {
            "readOnly": false,
            "description": "The internal identifier of the delivery connected to the return.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryNumber": {
            "readOnly": false,
            "description": "The external number of the delivery.",
            "type": "string",
            "example": "..."
          },
          "methodOfArrivalNumber": {
            "readOnly": false,
            "description": "Specifies the arrival method number associated with the returned order.",
            "type": "string",
            "example": "..."
          },
          "multiBrandId": {
            "example": 1,
            "readOnly": false,
            "description": "The multibrand (concept) the customer belongs to.",
            "type": "integer",
            "format": "int32"
          },
          "orderId": {
            "readOnly": false,
            "description": "The internal identifier of the order connected to the return.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "orderNumber": {
            "readOnly": false,
            "description": "The external number of the order.",
            "type": "string",
            "example": "..."
          },
          "purchaseNumber": {
            "readOnly": false,
            "description": "The external number of the purchase.",
            "type": "string",
            "example": "..."
          },
          "returnDate": {
            "example": "2020-09-21",
            "readOnly": false,
            "description": "The date of the return.",
            "type": "string",
            "format": "date"
          },
          "returnId": {
            "readOnly": false,
            "description": "The internal identifier of the return.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "returnNumber": {
            "readOnly": false,
            "description": "The external number of the return.",
            "type": "string",
            "example": "..."
          },
          "returnReason": {
            "$ref": "#/components/schemas/ReturnReason"
          },
          "returnValue": {
            "$ref": "#/components/schemas/ReturnValue"
          },
          "rows": {
            "readOnly": false,
            "description": "The rows of the return.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReturnRow"
            }
          },
          "status": {
            "$ref": "#/components/schemas/ReturnStatus"
          },
          "warehouse": {
            "$ref": "#/components/schemas/Warehouse_ReturnAPI"
          },
          "webStoreNumber": {
            "readOnly": false,
            "description": "Specifies the store number where the returned order was placed.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "A return."
      },
      "ReturnChanges": {
        "type": "object",
        "title": "ReturnChanges",
        "required": [
          "received"
        ],
        "properties": {
          "received": {
            "readOnly": false,
            "description": "Indicate whether or not the return has been received and should be marked for completion.",
            "type": "boolean",
            "example": true
          },
          "rowsToUpdate": {
            "readOnly": false,
            "description": "Contains changes to apply for return rows.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReturnRowChanges"
            }
          }
        },
        "description": "Contains changes that applies to a return."
      },
      "ReturnReason": {
        "type": "object",
        "title": "ReturnReason",
        "required": [
          "reasonId"
        ],
        "properties": {
          "note": {
            "readOnly": false,
            "description": "The comment/note of the reason for the return.",
            "type": "string",
            "example": "..."
          },
          "reasonCode": {
            "readOnly": false,
            "description": "The code of the reason for the return.",
            "type": "string",
            "example": "..."
          },
          "reasonId": {
            "readOnly": false,
            "description": "The identifier of the reason for the return.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "reasonName": {
            "readOnly": false,
            "description": "The name of the reason for the return.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "The reason for a return."
      },
      "ReturnReasonSearch": {
        "type": "object",
        "title": "ReturnReasonSearch",
        "required": [
          "active",
          "reasonId",
          "requiresPreview"
        ],
        "properties": {
          "active": {
            "readOnly": false,
            "description": "If the reason is active and can be used or not.",
            "type": "boolean",
            "example": true
          },
          "reasonCode": {
            "example": "01",
            "readOnly": false,
            "description": "The code of the reason.",
            "type": "string"
          },
          "reasonId": {
            "readOnly": false,
            "description": "The internal identifier of the reason.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "reasonName": {
            "example": "Return Name!",
            "readOnly": false,
            "description": "The name of the reason.",
            "type": "string"
          },
          "reasonType": {
            "$ref": "#/components/schemas/ReturnReasonType"
          },
          "requiresPreview": {
            "readOnly": false,
            "description": "Specifies if this reason requires review before reporting a return.",
            "type": "boolean",
            "example": true
          }
        },
        "description": "Contains data that defines a return reason."
      },
      "ReturnReasonType": {
        "type": "string",
        "title": "ReturnReasonType",
        "enum": [
          "RETURN",
          "COMPLAINT",
          "UNDISCHARGED",
          "UNSPECIFIED"
        ],
        "description": "The status of a return."
      },
      "ReturnResult": {
        "type": "object",
        "title": "ReturnResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The returns in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Return"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a search result of returns."
      },
      "ReturnRow": {
        "type": "object",
        "title": "ReturnRow",
        "required": [
          "quantity",
          "reasonId",
          "rowId",
          "stockKeepingUnitId"
        ],
        "properties": {
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "The European article number (EAN13) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price lookup unit number (PLUNO) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit. \u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "quantity": {
            "readOnly": false,
            "description": "The quantity being returned.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "reasonCode": {
            "readOnly": false,
            "description": "The code of the reason for a specific row.",
            "type": "string",
            "example": "..."
          },
          "reasonId": {
            "readOnly": false,
            "description": "The internal identifier of the reason for a specific row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "reasonName": {
            "readOnly": false,
            "description": "The name of the reason for a specific row.",
            "type": "string",
            "example": "..."
          },
          "rowId": {
            "readOnly": false,
            "description": "The identifier of the row within the return.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The internal identifier of the stock keeping unit.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "value": {
            "$ref": "#/components/schemas/ReturnRowValue"
          }
        },
        "description": "A single row of a return."
      },
      "ReturnRowChanges": {
        "type": "object",
        "title": "ReturnRowChanges",
        "required": [
          "rowId"
        ],
        "properties": {
          "quantity": {
            "readOnly": false,
            "description": "Quantity to mark as received/returned. The total quantity marked (in one or multiple calls) cannot be larger than the registered quantity on the return row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "rowId": {
            "readOnly": false,
            "description": "The identifier of the row to update. This value is mandatory.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Contains changes that applies to a return row."
      },
      "ReturnRowValue": {
        "type": "object",
        "title": "ReturnRowValue",
        "properties": {
          "taxRate": {
            "readOnly": false,
            "description": "The tax rate of the row.",
            "type": "number",
            "example": 12345
          },
          "total": {
            "readOnly": false,
            "description": "The total amount returned for the row.",
            "type": "number",
            "example": 12345
          },
          "totalExcludingTax": {
            "readOnly": false,
            "description": "The total amount excluding tax returned for the row.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Contains values of a return row."
      },
      "ReturnStatus": {
        "type": "string",
        "title": "ReturnStatus",
        "enum": [
          "CREATED",
          "RECEIVED",
          "REPORTED",
          "CANCELED"
        ],
        "description": "The status of a return."
      },
      "ReturnToCreate": {
        "type": "object",
        "title": "ReturnToCreate",
        "required": [
          "completed",
          "deliveryId",
          "reasonId",
          "warehouseId"
        ],
        "properties": {
          "completed": {
            "readOnly": false,
            "description": "\u003cp\u003eSpecifies if this return should be considered complete. If this flag is set, return will be reported in ETM.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e The return will not be completed if the return reason does not allow it.\u003c/p\u003e",
            "type": "boolean",
            "example": true
          },
          "customFieldsToAdd": {
            "readOnly": false,
            "description": "The custom fields to add to the return. Any existing custom field will be overwritten.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomFieldReturnToCreate"
            }
          },
          "deliveryId": {
            "readOnly": false,
            "description": "The internal identifier of the delivery. Mutually exclusive with other delivery identifiers.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryNumber": {
            "example": "DELIVERYNUMBER123",
            "readOnly": false,
            "description": "The external identifier of a delivery. Mutually exclusive with other delivery identifiers.",
            "type": "string"
          },
          "note": {
            "readOnly": false,
            "description": "The return comment/note.",
            "type": "string",
            "example": "..."
          },
          "reasonCode": {
            "readOnly": false,
            "description": "The code for the reason a return is created. Mutually exclusive with reasonId.",
            "type": "string",
            "example": "..."
          },
          "reasonId": {
            "readOnly": false,
            "description": "The identifier for the reason a return is created. Mutually exclusive with reasonCode.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "rows": {
            "readOnly": false,
            "description": "The returns in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReturnToCreateRow"
            }
          },
          "warehouseId": {
            "readOnly": false,
            "description": "The identifier for the warehouse to register the return for. Mutually exclusive with WarehouseNumber.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "warehouseNumber": {
            "readOnly": false,
            "description": "The identifying number for the warehouse to register the return for. Mutually exclusive with warehouseId.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Contains data used to create a return."
      },
      "ReturnToCreateRow": {
        "type": "object",
        "title": "ReturnToCreateRow",
        "required": [
          "quantity",
          "reasonId",
          "stockKeepingUnitId"
        ],
        "properties": {
          "priceLookUpNumber": {
            "example": "PLUNO123",
            "readOnly": false,
            "description": "An identifier for a stock keeping unit in the format of PLUNO. Mutually exclusive with other stock keeping unit identifiers.",
            "type": "string"
          },
          "priceLookupUnitNumber": {
            "example": "PLUNO123",
            "readOnly": false,
            "description": "An identifier for a stock keeping unit in the format of PLUNO. Mutually exclusive with other stock keeping unit identifiers.\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "quantity": {
            "readOnly": false,
            "description": "The quantity to return.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "reasonCode": {
            "readOnly": false,
            "description": "The code for the reason this row is returned. Mutually exclusive with reasonId.",
            "type": "string",
            "example": "..."
          },
          "reasonId": {
            "readOnly": false,
            "description": "The identifier of the reason for a return at specific row. Mutually exclusive with reasonCode.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The internal identifier of a stock keeping unit. Mutually exclusive with other stock keeping unit identifiers.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Contains data used to create a return."
      },
      "ReturnValue": {
        "type": "object",
        "title": "ReturnValue",
        "properties": {
          "charge": {
            "readOnly": false,
            "description": "The reimbursed charge associated with the order.",
            "type": "number",
            "example": 12345
          },
          "deliveryFee": {
            "readOnly": false,
            "description": "The reimbursed delivery fee associated with the order.",
            "type": "number",
            "example": 12345
          },
          "discount": {
            "readOnly": false,
            "description": "The imposed discount associated with the return.",
            "type": "number",
            "example": 12345
          },
          "paymentFee": {
            "readOnly": false,
            "description": "The reimbursed payment fee associated with the order.",
            "type": "number",
            "example": 12345
          },
          "returnFee": {
            "readOnly": false,
            "description": "The imposed fee associated with the return.",
            "type": "number",
            "example": 12345
          },
          "rounding": {
            "readOnly": false,
            "description": "The imposed rounding associated with the return.",
            "type": "number",
            "example": 12345
          },
          "totalAmount": {
            "readOnly": false,
            "description": "The total value of the return.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "The value of a return."
      },
      "Scale": {
        "type": "string",
        "title": "Scale",
        "enum": [
          "THUMBNAIL",
          "LIST",
          "NORMAL",
          "ORIGINAL",
          "LARGE"
        ],
        "description": "The different media scales/sizes. Scale is typically only defined for images, for other types of media it\u0027s undefined how a size is to be\ninterpreted."
      },
      "Seller_OrderAPI": {
        "type": "object",
        "title": "Seller",
        "required": [
          "sellerId"
        ],
        "properties": {
          "sellerId": {
            "example": 12,
            "readOnly": false,
            "description": "The internal identifier of the seller.",
            "type": "integer",
            "format": "int32"
          },
          "sellerName": {
            "example": "Anna Andersson",
            "readOnly": false,
            "description": "The name of the seller.",
            "type": "string"
          },
          "sellerNumber": {
            "example": "S100",
            "readOnly": false,
            "description": "The external number of the seller.",
            "type": "string"
          }
        },
        "description": "Contains information about a seller."
      },
      "Seller": {
        "type": "object",
        "title": "Seller",
        "required": [
          "sellerId"
        ],
        "properties": {
          "sellerId": {
            "readOnly": false,
            "description": "The ID of the seller.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "sellerName": {
            "readOnly": false,
            "description": "The name or the description of the seller.",
            "type": "string",
            "example": "..."
          },
          "sellerNumber": {
            "readOnly": false,
            "description": "The number of the seller.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Defines a seller."
      },
      "Seller_DeliveryAPI": {
        "type": "object",
        "title": "Seller",
        "required": [
          "sellerId"
        ],
        "properties": {
          "sellerId": {
            "example": 12,
            "readOnly": false,
            "description": "The internal identifier of the seller.",
            "type": "integer",
            "format": "int32"
          },
          "sellerName": {
            "example": "Anna Andersson",
            "readOnly": false,
            "description": "The name of the seller.",
            "type": "string"
          },
          "sellerNumber": {
            "example": "S100",
            "readOnly": false,
            "description": "The external number of the seller.",
            "type": "string"
          }
        },
        "description": "Contains information about a seller."
      },
      "ServiceProvider": {
        "type": "string",
        "title": "ServiceProvider",
        "enum": [
          "INGRID",
          "NSHIFT"
        ],
        "description": "The Service provider"
      },
      "ServiceProviderConfiguration": {
        "type": "object",
        "title": "ServiceProviderConfiguration",
        "required": [
          "serviceProviderConfigurationId"
        ],
        "properties": {
          "parameters": {
            "readOnly": false,
            "description": "The parameters of the service provider configuration.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ServiceProviderConfigurationParameter"
            }
          },
          "serviceProviderCode": {
            "example": "diggecard",
            "readOnly": false,
            "description": "The code of the service provider.",
            "type": "string"
          },
          "serviceProviderConfigurationId": {
            "readOnly": false,
            "description": "The identifier of the service provider configuration.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Defines a service provider configuration. A Service provider configuration are usually used when communication with third parties."
      },
      "ServiceProviderConfigurationParameter": {
        "type": "object",
        "title": "ServiceProviderConfigurationParameter",
        "required": [
          "active"
        ],
        "properties": {
          "active": {
            "readOnly": false,
            "description": "If the parameter is active or not.",
            "type": "boolean",
            "example": true
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country the parameter is configured for.",
            "type": "string"
          },
          "serviceProviderParameterCode": {
            "readOnly": false,
            "description": "The internal code of the parameter.",
            "type": "string",
            "example": "..."
          },
          "value": {
            "readOnly": false,
            "description": "The value of the parameter.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Defines a service provider configuration parameter."
      },
      "SetPasswordRequest": {
        "type": "object",
        "title": "SetPasswordRequest",
        "properties": {
          "password": {
            "example": "s3cr3t",
            "readOnly": false,
            "description": "The new password to set.",
            "type": "string"
          }
        },
        "description": "Contains the new password that will be set for a customer. Notice that we only accept a single password value here, so it is recommended to perform\na confirmation check on the API client side before passing it to this API."
      },
      "Sex": {
        "type": "string",
        "title": "Sex",
        "enum": [
          "UNISEX",
          "MAN",
          "WOMAN"
        ],
        "description": "Represents a customers sex"
      },
      "ShipmentProduct": {
        "type": "object",
        "title": "ShipmentProduct",
        "required": [
          "attribute1Id",
          "attribute2Id",
          "attribute3Id",
          "productId",
          "quantity"
        ],
        "properties": {
          "attribute1Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute2Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "attribute3Id": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "quantity": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": ""
      },
      "ShippingOption_v2": {
        "type": "object",
        "title": "ShippingOption",
        "properties": {
          "deliveryInstructions": {
            "readOnly": false,
            "description": "The delivery instruction for this shipping option if any",
            "type": "string",
            "example": "..."
          },
          "timeSlot": {
            "$ref": "#/components/schemas/TimeSlot_v2"
          }
        },
        "description": "Represents shipping options"
      },
      "ShippingOption": {
        "type": "object",
        "title": "ShippingOption",
        "properties": {
          "deliveryInstructions": {
            "example": "The port code is 4912",
            "readOnly": false,
            "description": "The delivery instructions of this delivery.",
            "type": "string"
          },
          "timeSlot": {
            "$ref": "#/components/schemas/TimeSlot_DeliveryAPI"
          }
        },
        "description": "The shipping options of the delivery."
      },
      "Sort": {
        "type": "string",
        "title": "Sort",
        "enum": [
          "DEFAULT",
          "RELEVANCE_DESC",
          "PRICE_ASC",
          "PRICE_DESC",
          "CATEGORY_SORT_ASC",
          "CATEGORY_SORT_DESC",
          "PUBLISHED_ASC",
          "PUBLISHED_DESC"
        ],
        "description": ""
      },
      "SortSource": {
        "type": "string",
        "title": "SortSource",
        "enum": [
          "REQUEST",
          "CATEGORY_DEFAULT",
          "FALLBACK"
        ],
        "description": ""
      },
      "Source": {
        "type": "string",
        "title": "Source",
        "enum": [
          "INTERNAL",
          "EXTERNAL"
        ],
        "description": "Source of order"
      },
      "Stock": {
        "type": "object",
        "title": "Stock",
        "required": [
          "incoming"
        ],
        "properties": {
          "incoming": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "incomingAt": {
            "example": "2025-06-01",
            "readOnly": false,
            "description": "",
            "type": "string"
          },
          "physicalStore": {
            "$ref": "#/components/schemas/StockState"
          },
          "web": {
            "$ref": "#/components/schemas/StockState"
          }
        },
        "description": ""
      },
      "StockBalance": {
        "type": "object",
        "title": "StockBalance",
        "required": [
          "availableBalance",
          "balance",
          "balanceIncoming",
          "stockKeepingUnitId",
          "warehouseId"
        ],
        "properties": {
          "availableBalance": {
            "example": 9,
            "readOnly": false,
            "description": "Number of items stored in the warehouse, taking reservations into account.",
            "type": "integer",
            "format": "int32"
          },
          "balance": {
            "example": 12,
            "readOnly": false,
            "description": "Number of items stored in the warehouse.",
            "type": "integer",
            "format": "int32"
          },
          "balanceIncoming": {
            "example": 5,
            "readOnly": false,
            "description": "Number of incoming items to the warehouse.",
            "type": "integer",
            "format": "int32"
          },
          "estimatedDeliveryDate": {
            "example": "2024-02-15",
            "readOnly": false,
            "description": "The estimated date for incoming stock to arrive at the warehouse.",
            "type": "string"
          },
          "estimatedShippingDate": {
            "example": "2024-10-25",
            "readOnly": false,
            "description": "The estimated date the stock will be ready for shipment to the end customer.",
            "type": "string"
          },
          "europeanArticleNumber": {
            "example": "14114192",
            "readOnly": false,
            "description": "The European article number (EAN13) of the stock keeping unit.",
            "type": "string"
          },
          "modifiedAt": {
            "example": "2024-03-21T14:36:43.412+01:00",
            "readOnly": false,
            "description": "Last changed date for the balance",
            "type": "string",
            "format": "date-time"
          },
          "priceLookUpNumber": {
            "example": "14114192",
            "readOnly": false,
            "description": "The price lookup number (PLUNO) of the stock keeping unit.",
            "type": "string"
          },
          "priceLookupNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit. \u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit. \u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "stockKeepingUnitId": {
            "example": 619,
            "readOnly": false,
            "description": "The internal identifier of the stock keeping unit.",
            "type": "integer",
            "format": "int32"
          },
          "warehouseId": {
            "example": 1,
            "readOnly": false,
            "description": "The internal identifier of the warehouse that balance belongs to. Mutually exclusive with WarehouseNumber.",
            "type": "integer",
            "format": "int32"
          },
          "warehouseNumber": {
            "example": "W01",
            "readOnly": false,
            "description": "The external identifier of the warehouse that balance belongs to. Mutually exclusive with warehouseId.",
            "type": "string"
          }
        },
        "description": "Contains information about stock balance for a specific stock keeping unit in a specific warehouse, optionally at a specific stock location."
      },
      "StockBalanceResult": {
        "type": "object",
        "title": "StockBalanceResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "page": {
            "example": 1,
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32"
          },
          "pagesLeft": {
            "example": 1,
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32"
          },
          "searchId": {
            "example": "236c000d-70a8-4a6c-beed-36e788c107b9",
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string"
          },
          "stockBalances": {
            "readOnly": false,
            "description": "The stock balances in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockBalance"
            }
          },
          "totalHits": {
            "example": 29,
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Holds a search result of stock balances."
      },
      "StockBalanceUpdate": {
        "type": "object",
        "title": "StockBalanceUpdate",
        "required": [
          "balance",
          "balanceIncoming",
          "warehouseId"
        ],
        "properties": {
          "balance": {
            "readOnly": false,
            "description": "The physical number of units stored in the warehouse.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "balanceIncoming": {
            "readOnly": false,
            "description": "The incoming number of units to be delivered to the warehouse.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "estimatedDeliveryDate": {
            "example": "2024-09-12",
            "readOnly": false,
            "description": "Changes to the estimated delivery date. The date when the incoming units are estimated to arrive at the warehouse.",
            "type": "string"
          },
          "estimatedShippingDate": {
            "example": "2024-10-25",
            "readOnly": false,
            "description": "Changes to the estimated shipping date. The estimated date the stock will be ready for shipment to the end customer.",
            "type": "string"
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe European article number (EAN13) of the stock keeping unit to update stock balance for.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with stockKeepingUnitId and priceLookupUnitNumber.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e European article numbers in Viskan are no longer unique and is therefore not a reliable way of identifying stock keeping units with.\u003c/p\u003e",
            "type": "string"
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The Price Look-Up number (PLUNO) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "The price lookup unit number (PLUNO) of this stock keeping unit.\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookupNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "\u003cp\u003eThe internal identifier of the stock keeping unit to update stock balance for.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e This field is mutually exclusive with europeanArticleNumber and priceLookupUnitNumber.\u003c/p\u003e",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "warehouseId": {
            "readOnly": false,
            "description": "The identifier of the warehouse to update stock balance in. Mutually exclusive with warehouseNumber.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "warehouseNumber": {
            "readOnly": false,
            "description": "The unique number of the warehouse to update stock balance in. Mutually exclusive with warehouseId.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Contains information about stock balance update or creation for a specific stock keeping unit in a specific warehouse."
      },
      "StockKeepingUnit_Product": {
        "type": "object",
        "title": "StockKeepingUnit",
        "required": [
          "active",
          "published",
          "stockKeepingUnitId"
        ],
        "properties": {
          "active": {
            "readOnly": false,
            "description": "Indicates if this unit is active on unit level. There is also an active status on product level and if that is \u003ccode\u003efalse\u003c/code\u003e it will override this unit status.",
            "type": "boolean",
            "example": true
          },
          "attribute1Code": {
            "readOnly": false,
            "description": "A reference to the attribute 1 code.",
            "type": "string",
            "example": "..."
          },
          "attribute1Number": {
            "readOnly": false,
            "description": "A reference to the attribute 1 number.",
            "type": "string",
            "example": "..."
          },
          "attribute1Sort": {
            "example": 10,
            "readOnly": false,
            "description": "The sort order of attribute 1. The sort order is shared by all products that use the attribute.",
            "type": "integer",
            "format": "int32"
          },
          "attribute1Tag": {
            "readOnly": false,
            "description": "A reference to the attribute 1 tag used for aggregations in the estore product API.",
            "type": "string",
            "example": "..."
          },
          "attribute2Code": {
            "readOnly": false,
            "description": "A reference to the attribute 2 code.",
            "type": "string",
            "example": "..."
          },
          "attribute2Number": {
            "readOnly": false,
            "description": "A reference to the attribute 2 number.",
            "type": "string",
            "example": "..."
          },
          "attribute2Sort": {
            "example": 10,
            "readOnly": false,
            "description": "The sort order of attribute 2. The sort order is shared by all products that use the attribute.",
            "type": "integer",
            "format": "int32"
          },
          "attribute2Tag": {
            "readOnly": false,
            "description": "A reference to the attribute 2 tag used for aggregations in the estore product API.",
            "type": "string",
            "example": "..."
          },
          "attribute3Code": {
            "readOnly": false,
            "description": "A reference to the attribute 3 code.",
            "type": "string",
            "example": "..."
          },
          "attribute3Number": {
            "readOnly": false,
            "description": "A reference to the attribute 3 number.",
            "type": "string",
            "example": "..."
          },
          "attribute3Sort": {
            "example": 10,
            "readOnly": false,
            "description": "The sort order of attribute 3. The sort order is shared by all products that use the attribute.",
            "type": "integer",
            "format": "int32"
          },
          "attribute3Tag": {
            "readOnly": false,
            "description": "A reference to the attribute 3 tag used for aggregations in the estore product API.",
            "type": "string",
            "example": "..."
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "The European article number (EAN13) of this unit.",
            "type": "string",
            "example": "..."
          },
          "height": {
            "readOnly": false,
            "description": "The height of this unit in millimeters.",
            "type": "number",
            "example": 12345
          },
          "length": {
            "readOnly": false,
            "description": "The length of this unit in millimeters.",
            "type": "number",
            "example": 12345
          },
          "packageContents": {
            "readOnly": false,
            "description": "A list of package contents for this unit. SKU-level package contents apply for specified skus only.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PackageContent"
            }
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price lookup unit number (PLUNO) of this unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "The price lookup unit number (PLUNO) of this unit.\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e priceLookupUnitNumber is not used due to incorrect field name.\u003c/p\u003e",
            "type": "string"
          },
          "prices": {
            "readOnly": false,
            "description": "A list of available prices for this unit.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Price"
            }
          },
          "properties": {
            "readOnly": false,
            "description": "A list of sku properties for this unit.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property_Product"
            }
          },
          "publishDate": {
            "example": "2024-06-01",
            "readOnly": false,
            "description": "The date the stock keeping unit is or will be published.",
            "type": "string",
            "format": "date"
          },
          "published": {
            "readOnly": false,
            "description": "Indicates if this unit is published to site on unit level. There is also a published status on product level and if that is \u003ccode\u003efalse\u003c/code\u003e it will override this unit status.",
            "type": "boolean",
            "example": true
          },
          "status": {
            "$ref": "#/components/schemas/ArticleStatus_article"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The internal identifier of this unit.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "suppliers": {
            "readOnly": false,
            "description": "A list of suppliers for this unit.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Supplier_Product"
            }
          },
          "translations": {
            "readOnly": false,
            "description": "A list of translations for this unit.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnitTranslation"
            }
          },
          "volume": {
            "readOnly": false,
            "description": "The volume of this unit in cubic millimeters.",
            "type": "number",
            "example": 12345
          },
          "weight": {
            "readOnly": false,
            "description": "The weight of this unit in grams.",
            "type": "number",
            "example": 12345
          },
          "width": {
            "readOnly": false,
            "description": "The width of this unit in millimeters.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "The purchasable unit of a product."
      },
      "StockKeepingUnit": {
        "type": "object",
        "title": "StockKeepingUnit",
        "required": [
          "stockKeepingUnitId"
        ],
        "properties": {
          "medias": {
            "readOnly": false,
            "description": "The medias of this stock keeping unit.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnitMedia"
            }
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price lookup number (PLUNO) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookupUnitNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit. \u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The internal identifier of this stock keeping unit.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "The collection of media for a product."
      },
      "StockKeepingUnit_response": {
        "type": "object",
        "title": "StockKeepingUnit",
        "required": [
          "balance",
          "brandNew",
          "comingSoon",
          "stockKeepingUnitId"
        ],
        "properties": {
          "attribute1": {
            "$ref": "#/components/schemas/Attribute1_response"
          },
          "attribute2": {
            "$ref": "#/components/schemas/Attribute2_response"
          },
          "attribute3": {
            "$ref": "#/components/schemas/Attribute3_response"
          },
          "balance": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "brandNew": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "closestEstimatedShippingDate": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "comingSoon": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "dimensions": {
            "$ref": "#/components/schemas/ProductDimensions"
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "price": {
            "$ref": "#/components/schemas/Price_response"
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "properties": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property_response"
            }
          },
          "publishDate": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "format": "date-time",
            "example": "..."
          },
          "status": {
            "$ref": "#/components/schemas/StockKeepingUnitStatus"
          },
          "stock": {
            "$ref": "#/components/schemas/Stock"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": ""
      },
      "StockKeepingUnitForFeed": {
        "type": "object",
        "title": "StockKeepingUnitForFeed",
        "required": [
          "balance",
          "brandNew",
          "comingSoon",
          "stockKeepingUnitId"
        ],
        "properties": {
          "attribute1": {
            "$ref": "#/components/schemas/Attribute1ForFeed"
          },
          "attribute2": {
            "$ref": "#/components/schemas/Attribute2ForFeed"
          },
          "attribute3": {
            "$ref": "#/components/schemas/Attribute3ForFeed"
          },
          "balance": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "brandNew": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "closestEstimatedShippingDate": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "comingSoon": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "dimensions": {
            "$ref": "#/components/schemas/ProductDimensions"
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "price": {
            "$ref": "#/components/schemas/Price_response"
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "properties": {
            "readOnly": false,
            "description": "The properties of the stock keeping unit",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyForFeed"
            }
          },
          "publishDate": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "format": "date-time",
            "example": "..."
          },
          "status": {
            "$ref": "#/components/schemas/StockKeepingUnitStatus"
          },
          "stock": {
            "$ref": "#/components/schemas/Stock"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds information about a stock keeping unit connected to a product"
      },
      "StockKeepingUnitMedia": {
        "type": "object",
        "title": "StockKeepingUnitMedia",
        "properties": {
          "scales": {
            "readOnly": false,
            "description": "The different scales of this media.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MediaScale"
            }
          },
          "type": {
            "$ref": "#/components/schemas/Type"
          }
        },
        "description": "The specific media details for a product."
      },
      "StockKeepingUnitStatus": {
        "type": "string",
        "title": "StockKeepingUnitStatus",
        "enum": [
          "FOR_SALE",
          "NOT_YET_FOR_SALE",
          "PREVIEW",
          "DISCONTINUED"
        ],
        "description": ""
      },
      "StockKeepingUnitStockBalancesChanges": {
        "type": "object",
        "title": "StockKeepingUnitStockBalancesChanges",
        "required": [
          "balance",
          "balanceIncoming",
          "warehouseId"
        ],
        "properties": {
          "balance": {
            "readOnly": false,
            "description": "Changes to the stock balance.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "balanceIncoming": {
            "readOnly": false,
            "description": "Changes to the incoming stock balance. The number of incoming units to be delivered to the warehouse.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "estimatedDeliveryDate": {
            "example": "2026-10-25",
            "readOnly": false,
            "description": "Changes to the estimated delivery date. The date when the incoming units are estimated to arrive at the warehouse.",
            "type": "string"
          },
          "estimatedShippingDate": {
            "example": "2024-10-25",
            "readOnly": false,
            "description": "Changes to the estimated shipping date. The estimated date the stock will be ready for shipment to the end customer.",
            "type": "string"
          },
          "warehouseId": {
            "readOnly": false,
            "description": "The internal identifier of this warehouse.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "warehouseNumber": {
            "readOnly": false,
            "description": "The number of the warehouse. Mutually exclusive with warehouseId",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Contains changes that applies to a stockkeepingunit balances."
      },
      "StockKeepingUnitSupplierChanges": {
        "type": "object",
        "title": "StockKeepingUnitSupplierChanges",
        "required": [
          "supplierId"
        ],
        "properties": {
          "currencyCode": {
            "example": "EUR",
            "readOnly": false,
            "description": "Changes to currency.",
            "type": "string"
          },
          "price": {
            "example": 10,
            "readOnly": false,
            "description": "Changes to the price (exvat).",
            "type": "number"
          },
          "supplierId": {
            "readOnly": false,
            "description": "The internal identifier of this supplier.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "supplierNumber": {
            "example": "sup_no1",
            "readOnly": false,
            "description": "The number of this supplier (only used without supplier ID)",
            "type": "string"
          },
          "supplierProductNumber": {
            "example": "123PRODUCT",
            "readOnly": false,
            "description": "The identifier of the product for this supplier.",
            "type": "string"
          }
        },
        "description": "Contains changes that applies to a stockkeepingunit supplier."
      },
      "StockKeepingUnitToAddOrUpdate": {
        "type": "object",
        "title": "StockKeepingUnitToAddOrUpdate",
        "required": [
          "active",
          "published"
        ],
        "properties": {
          "active": {
            "readOnly": false,
            "description": "Changes if the unit is active.",
            "type": "boolean",
            "example": true
          },
          "attribute1": {
            "$ref": "#/components/schemas/Attribute1Changes"
          },
          "attribute2": {
            "$ref": "#/components/schemas/Attribute2Changes"
          },
          "attribute3": {
            "$ref": "#/components/schemas/Attribute3Changes"
          },
          "europeanArticleNumber": {
            "example": "12345ABCD",
            "readOnly": false,
            "description": "\u003cp\u003eThe European article number.\u003c/p\u003e\n\u003cp\u003e\n\u003cb\u003eNote:\u003c/b\u003e Previously, this field could be used to identify an existing row. But European article numbers are no longer unique in Viskan,\nso it\u0027s not advisable to use this as en identifier anymore. Please refer to using priceLookUpNumber instead.\n\u003c/p\u003e",
            "type": "string"
          },
          "height": {
            "readOnly": false,
            "description": "The height of this unit in millimeters.",
            "type": "number",
            "example": 12345
          },
          "length": {
            "readOnly": false,
            "description": "The length of this unit in millimeters.",
            "type": "number",
            "example": 12345
          },
          "priceLookUpNumber": {
            "example": "12345ABCD",
            "readOnly": false,
            "description": "The price lookup unit number. Can be used to identify an existing row.",
            "type": "string"
          },
          "priceLookupUnitNumber": {
            "example": "12345ABCD",
            "readOnly": false,
            "description": "The price lookup unit number. Can be used to identify an existing row.\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e priceLookupUnitNumber is not used due to incorrect field name.\u003c/p\u003e",
            "type": "string"
          },
          "propertiesToAddOrUpdate": {
            "readOnly": false,
            "description": "Contains properties to add to the stock keeping unit. Mutually exclusive with \u003ccode\u003epropertiesToReplace\u003c/code\u003e.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyToAddOrUpdate"
            }
          },
          "propertiesToReplace": {
            "readOnly": false,
            "description": "Contains changes to apply for properties of this stock keeping unit. This will replace any existing connections. An empty list will remove all connections. Mutually exclusive with \u003ccode\u003epropertiesToAddOrUpdate\u003c/code\u003e.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyToReplace"
            }
          },
          "publishDate": {
            "example": "2024-06-01",
            "readOnly": false,
            "description": "Changes to the publish date for this stock keeping unit.",
            "type": "string",
            "format": "date"
          },
          "published": {
            "readOnly": false,
            "description": "Changes if this unit is published on site. When omitted, the existing value is preserved.",
            "type": "boolean",
            "example": true
          },
          "status": {
            "$ref": "#/components/schemas/ArticleStatus_article"
          },
          "stockBalances": {
            "readOnly": false,
            "description": "Changes to stock balances",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnitStockBalancesChanges"
            }
          },
          "suppliers": {
            "readOnly": false,
            "description": "Changes to suppliers",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StockKeepingUnitSupplierChanges"
            }
          },
          "volume": {
            "readOnly": false,
            "description": "The volume of this unit in cubic millimeters.\u003cbr\u003e\nNOTE! If not provided (and if possible) this value will be calculated",
            "type": "number",
            "example": 12345
          },
          "weight": {
            "readOnly": false,
            "description": "The weight of this unit in grams.",
            "type": "number",
            "example": 12345
          },
          "width": {
            "readOnly": false,
            "description": "The width of this unit in millimeters.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Contains changes that applies to a product variant."
      },
      "StockKeepingUnitTranslation": {
        "type": "object",
        "title": "StockKeepingUnitTranslation",
        "properties": {
          "attribute1Code": {
            "example": "Crimson",
            "readOnly": false,
            "description": "The translated attribute 1 code of the stock keeping unit.",
            "type": "string"
          },
          "attribute1Tag": {
            "example": "Red",
            "readOnly": false,
            "description": "The translated attribute 1 tag of the stock keeping unit used for grouping.",
            "type": "string"
          },
          "attribute2Code": {
            "example": "XL",
            "readOnly": false,
            "description": "The translated attribute 2 code of the stock keeping unit.",
            "type": "string"
          },
          "attribute2Tag": {
            "example": "Mens sizes",
            "readOnly": false,
            "description": "The translated attribute 2 tag of the stock keeping unit used for grouping.",
            "type": "string"
          },
          "attribute3Code": {
            "example": "33",
            "readOnly": false,
            "description": "The translated attribute 3 code of the stock keeping unit.",
            "type": "string"
          },
          "attribute3Tag": {
            "example": "A",
            "readOnly": false,
            "description": "The translated attribute 3 tag of the stock keeping unit used for grouping.",
            "type": "string"
          },
          "languageCode": {
            "$ref": "#/components/schemas/Language_commons"
          }
        },
        "description": "Defines a translation of a stock keeping unit in a specific language."
      },
      "StockState": {
        "type": "string",
        "title": "StockState",
        "enum": [
          "OUT_OF_STOCK",
          "FEW_LEFT",
          "IN_STOCK"
        ],
        "description": ""
      },
      "Store": {
        "type": "object",
        "title": "Store",
        "required": [
          "storeId"
        ],
        "properties": {
          "storeId": {
            "example": 123,
            "readOnly": false,
            "description": "The id of the store.",
            "type": "integer",
            "format": "int32"
          },
          "storeNumber": {
            "example": "ABC123",
            "readOnly": false,
            "description": "The number assigned to the store.",
            "type": "string"
          }
        },
        "description": "A marketplace where the offer is made available"
      },
      "MyPagesStore": {
        "type": "object",
        "title": "Store",
        "required": [
          "storeId"
        ],
        "properties": {
          "storeId": {
            "readOnly": false,
            "description": "The internal identifier of the store.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "storeName": {
            "readOnly": false,
            "description": "The name of the store.",
            "type": "string",
            "example": "..."
          },
          "storeNumber": {
            "readOnly": false,
            "description": "The external number of the store.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "A store represents a physical store.\n\u003cp\u003e\nCould be favorite-store or store where the order was purchased from, for example"
      },
      "StoreSetting": {
        "type": "object",
        "title": "StoreSetting",
        "required": [
          "secret"
        ],
        "properties": {
          "groupTag": {
            "example": "colors",
            "readOnly": false,
            "description": "The tag of the group of the setting. Useful for only loading a subset of settings.",
            "type": "string"
          },
          "secret": {
            "example": true,
            "readOnly": false,
            "description": "Whether the setting value is classified, must be handled in a secure way and never be exposed to the public",
            "type": "boolean"
          },
          "settingKey": {
            "example": "mainFontColor",
            "readOnly": false,
            "description": "The key of the setting.",
            "type": "string"
          },
          "settingValue": {
            "example": "FF0000",
            "readOnly": false,
            "description": "The value of the setting.",
            "type": "string"
          }
        },
        "description": "Holds a single setting for a web store. A setting can be anything from external tokens (such as the Google Analytics token) to simple styling\nsettings (such as font names or colors)."
      },
      "StreamlineExpressRequest": {
        "type": "object",
        "title": "StreamlineExpressRequest",
        "required": [
          "interval"
        ],
        "properties": {
          "additionalOrderText": {
            "readOnly": false,
            "description": "The Additional order text on the purchase.",
            "type": "string",
            "example": "..."
          },
          "alternativeEmailAddress": {
            "readOnly": false,
            "description": "The alternative email address of the customer.",
            "type": "string",
            "example": "..."
          },
          "applicableIntegrities": {
            "readOnly": false,
            "description": "Defines integrities that the consumer has accepted.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "campaignCode": {
            "readOnly": false,
            "description": "The campaign to use for the purchase.",
            "type": "string",
            "example": "..."
          },
          "cellphone": {
            "readOnly": false,
            "description": "The cellphone number of the customer.",
            "type": "string",
            "example": "..."
          },
          "companyName": {
            "readOnly": false,
            "description": "The company name of the customer. Mutually exclusive with \u003ccode\u003efirstName\u003c/code\u003e, \u003ccode\u003elastName\u003c/code\u003e and \u003ccode\u003esocialSecurityNumber\u003c/code\u003e.",
            "type": "string",
            "example": "..."
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the customer, in ISO alpha-2 format, for example \u003ccode\u003eSE\u003c/code\u003e.",
            "type": "string"
          },
          "customFields": {
            "readOnly": false,
            "description": "Custom fields.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomField"
            }
          },
          "customerNumber": {
            "readOnly": false,
            "description": "The customer number of an existing customer. The order/subscription will be connected to the specified customer. Name, address and contact\ndetails will be updated.",
            "type": "string",
            "example": "..."
          },
          "dateOfBirth": {
            "readOnly": false,
            "description": "Date of birth of the customer.",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "deliveryMethodCode": {
            "readOnly": false,
            "description": "Deprecated in favor of \u003ccode\u003edeliveryMethodName\u003c/code\u003e",
            "type": "string"
          },
          "deliveryMethodName": {
            "readOnly": false,
            "description": "The name of the delivery method.",
            "type": "string",
            "example": "..."
          },
          "deniedIntegrities": {
            "readOnly": false,
            "description": "Defines integrities that the consumer has opted out from.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "email": {
            "readOnly": false,
            "description": "The email address of the customer.",
            "type": "string",
            "example": "..."
          },
          "firstName": {
            "readOnly": false,
            "description": "The first name of the customer. Mutually exclusive with \u0027companyName\u0027.",
            "type": "string",
            "example": "..."
          },
          "gender": {
            "$ref": "#/components/schemas/Sex"
          },
          "interval": {
            "readOnly": false,
            "description": "The interval of the subscription.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "invoiceAddress": {
            "readOnly": false,
            "description": "The invoice address.",
            "type": "string",
            "example": "..."
          },
          "invoiceAddressDescription": {
            "readOnly": false,
            "description": "The description of the invoice address.",
            "type": "string",
            "example": "..."
          },
          "invoiceAdministrativeDivision": {
            "readOnly": false,
            "description": "The administrative division of the address, such as province, state, municipality or county",
            "type": "string",
            "example": "..."
          },
          "invoiceCity": {
            "readOnly": false,
            "description": "The city of the invoice address.",
            "type": "string",
            "example": "..."
          },
          "invoiceZipcode": {
            "readOnly": false,
            "description": "The zipcode of the invoice address.",
            "type": "string",
            "example": "..."
          },
          "landline": {
            "readOnly": false,
            "description": "The landline phone number of the customer.",
            "type": "string",
            "example": "..."
          },
          "languageCode": {
            "$ref": "#/components/schemas/Language_commons"
          },
          "lastName": {
            "readOnly": false,
            "description": "The last name of the customer. Mutually exclusive with \u0027companyName\u0027.",
            "type": "string",
            "example": "..."
          },
          "marketingCampaignCode": {
            "readOnly": false,
            "description": "The marketing campaign to use for the purchase",
            "type": "string",
            "example": "..."
          },
          "methodOfArrivalNumber": {
            "readOnly": false,
            "description": "The number of the method of arrival (or \"channel\").",
            "type": "string",
            "example": "..."
          },
          "nextDeliveryDate": {
            "readOnly": false,
            "description": "For orders: earliest delivery date. For subscriptions: suggested next delivery date. Defaulted to today\u0027s date.",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "notes": {
            "readOnly": false,
            "description": "A free text that will be stored in the order\u0027s/subscription\u0027s list of notes.",
            "type": "string",
            "example": "..."
          },
          "orderDate": {
            "readOnly": false,
            "description": "For orders: the order date. For subscription: the starting date. Defaulted to nextDeliveryDate if specified, otherwise today\u0027s date",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "organizationNumber": {
            "readOnly": false,
            "description": "The organization number of the customer. Mutually exclusive with \u003ccode\u003efirstName\u003c/code\u003e, \u003ccode\u003elastName\u003c/code\u003e and\n\u003ccode\u003esocialSecurityNumber\u003c/code\u003e.",
            "type": "string",
            "example": "..."
          },
          "page": {
            "readOnly": false,
            "description": "The Streamline Express page to use.",
            "type": "string",
            "example": "..."
          },
          "paymentMethodCode": {
            "readOnly": false,
            "description": "Deprecated in favor of \u003ccode\u003epaymentMethodName\u003c/code\u003e",
            "type": "string"
          },
          "paymentMethodName": {
            "readOnly": false,
            "description": "The name of the payment method.",
            "type": "string",
            "example": "..."
          },
          "remoteAddress": {
            "readOnly": false,
            "description": "The remote client address.",
            "type": "string",
            "example": "..."
          },
          "sellerDepartment": {
            "readOnly": false,
            "description": "For sales handled by third parties, typically TM call centers - the department that the seller belongs to. The order/subscription\u0027s createdBy field will\nbe updated with the department (and sellerPerson)",
            "type": "string",
            "example": "..."
          },
          "sellerNumber": {
            "readOnly": false,
            "description": "The number of the seller to use.",
            "type": "string",
            "example": "..."
          },
          "sellerPerson": {
            "readOnly": false,
            "description": "For sales handled by third parties, typically TM call centers - the name/identifier of the seller person. The order/subscription\u0027s createdBy field will\nbe updated with the seller (and sellerDepartment)",
            "type": "string",
            "example": "..."
          },
          "socialSecurityNumber": {
            "readOnly": false,
            "description": "The social security number of the customer. Mutually exclusive with \u003ccode\u003ecompanyName\u003c/code\u003e and \u003ccode\u003eorganizationNumber\u003c/code\u003e.",
            "type": "string",
            "example": "..."
          },
          "startDate": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "format": "date"
          },
          "termsOfDeliveryCode": {
            "readOnly": false,
            "description": "The code of the terms of delivery.",
            "type": "string",
            "example": "..."
          },
          "termsOfPaymentCode": {
            "readOnly": false,
            "description": "The code of the terms of payment.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Defines a request to the Streamline Express service. This information contains the page to use together with optional overrides (such as payment\nmethod to use) in addition to the customer information that should be used when creating the purchase."
      },
      "StreamlineExpressResponse": {
        "type": "object",
        "title": "StreamlineExpressResponse",
        "properties": {
          "charge": {
            "readOnly": false,
            "description": "The charge fee of the purchase.",
            "type": "number",
            "example": 12345
          },
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country of the customer, in ISO alpha-2 format, for example \u003ccode\u003eSE\u003c/code\u003e.",
            "type": "string"
          },
          "currencyCode": {
            "example": "SEK",
            "readOnly": false,
            "description": "The currency code (ISO 4217).",
            "type": "string"
          },
          "discount": {
            "readOnly": false,
            "description": "The discount value of the purchase.",
            "type": "number",
            "example": 12345
          },
          "paymentFee": {
            "readOnly": false,
            "description": "The payment fee of the purchase.",
            "type": "number",
            "example": 12345
          },
          "purchaseNumber": {
            "readOnly": false,
            "description": "The number of the generated purchase.",
            "type": "string",
            "example": "..."
          },
          "shippingFee": {
            "readOnly": false,
            "description": "The shipping fee of the purchase.",
            "type": "number",
            "example": 12345
          },
          "totalValue": {
            "readOnly": false,
            "description": "The total value of the purchase.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Defines a response from the Streamline Express service."
      },
      "SubProduct": {
        "type": "object",
        "title": "SubProduct",
        "properties": {
          "priceListCode": {
            "example": "B_123PRODUCT",
            "readOnly": false,
            "description": "The optional code of the price list used when the sub product is sold within the package.\nMust refer to a price list. Cannot be combined with priceListId. When omitted, the current price list is kept.",
            "type": "string"
          },
          "priceListId": {
            "example": 3,
            "readOnly": false,
            "description": "The optional id of the price list used when the sub product is sold within the package, the standard price list is \u003ccode\u003e0\u003c/code\u003e.\nMust refer to a price list. Cannot be combined with priceListCode. When omitted, the current price list is kept.\nUse \u003ccode\u003e-1\u003c/code\u003e to remove the price list so that no package price list is used.",
            "type": "integer",
            "format": "int32"
          },
          "productNumber": {
            "example": "1234PRODUCT",
            "readOnly": false,
            "description": "The product number of the sub product",
            "type": "string"
          }
        },
        "description": "A product to be added to a package, the sub-product must already exist in the system."
      },
      "SubmitParameter": {
        "type": "object",
        "title": "SubmitParameter",
        "properties": {
          "key": {
            "readOnly": false,
            "description": "The parameter key.",
            "type": "string",
            "example": "..."
          },
          "value": {
            "readOnly": false,
            "description": "The parameter value.",
            "type": "object",
            "example": {}
          }
        },
        "description": "Represents a submit parameter. It is a simple key/value pair that is retrieved n the result when creating new purchases."
      },
      "Subscription": {
        "type": "object",
        "title": "Subscription",
        "required": [
          "active",
          "deliveries",
          "interval",
          "subscriptionId",
          "totalHoldbacks"
        ],
        "properties": {
          "active": {
            "example": true,
            "readOnly": false,
            "description": "",
            "type": "boolean"
          },
          "arrivalMethod": {
            "$ref": "#/components/schemas/ArrivalMethod"
          },
          "campaign": {
            "$ref": "#/components/schemas/Campaign"
          },
          "cancellationReason": {
            "$ref": "#/components/schemas/CancellationReason"
          },
          "customFields": {
            "readOnly": false,
            "description": "The custom fields of the subscription.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomField_OrderAPI"
            }
          },
          "customer": {
            "$ref": "#/components/schemas/Customer"
          },
          "deliveries": {
            "example": 2,
            "readOnly": false,
            "description": "The number of deliveries of this subscription.",
            "type": "integer",
            "format": "int32"
          },
          "endDate": {
            "example": "2022-02-02",
            "readOnly": false,
            "description": "The end date of the subscription.",
            "type": "string",
            "format": "date"
          },
          "interval": {
            "example": 30,
            "readOnly": false,
            "description": "The interval used for this subscription.",
            "type": "integer",
            "format": "int32"
          },
          "latestHoldback": {
            "example": "2020-06-01",
            "readOnly": false,
            "description": "The date of the latest holdback.",
            "type": "string",
            "format": "date"
          },
          "modifiedAt": {
            "example": "2023-05-08T14:28:04.120+02:00",
            "readOnly": false,
            "description": "The last changed date of the subscription.",
            "type": "string",
            "format": "date-time"
          },
          "name": {
            "example": "Vitamin D Pills Subscription",
            "readOnly": false,
            "description": "The name of the subscription.",
            "type": "string"
          },
          "nextDeliveryDate": {
            "example": "2020-06-02",
            "readOnly": false,
            "description": "The next planned delivery of the subscription.",
            "type": "string",
            "format": "date"
          },
          "paymentMethod": {
            "$ref": "#/components/schemas/PaymentMethod_SubscriptionAPI"
          },
          "previousDelivery": {
            "$ref": "#/components/schemas/PreviousDelivery"
          },
          "previousDeliveryDate": {
            "readOnly": false,
            "description": "\u003cp\u003eThe previous delivery date.\u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Use previousDelivery instead. \u003c/p\u003e",
            "type": "string",
            "format": "date"
          },
          "priceList": {
            "example": "Golden Prices",
            "readOnly": false,
            "description": "The price list of this subscription.",
            "type": "string"
          },
          "purchaseNumber": {
            "example": "34D5JZJ",
            "readOnly": false,
            "description": "The active status of the subscription.",
            "type": "string"
          },
          "startDate": {
            "example": "2020-02-02",
            "readOnly": false,
            "description": "The start date of the subscription.",
            "type": "string",
            "format": "date"
          },
          "subscriptionId": {
            "example": 123456,
            "readOnly": false,
            "description": "The unique ID of the subscription.",
            "type": "integer",
            "format": "int64"
          },
          "subscriptionRows": {
            "readOnly": false,
            "description": "The rows of the subscription.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionRows"
            }
          },
          "totalHoldbacks": {
            "example": 2,
            "readOnly": false,
            "description": "The total number of holdbacks.",
            "type": "integer",
            "format": "int32"
          },
          "upcomingDeliveries": {
            "readOnly": false,
            "description": "The upcoming deliveries of the subscription.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UpcomingDeliveries"
            }
          }
        },
        "description": "Subscription information."
      },
      "MyPagesSubscription": {
        "type": "object",
        "title": "Subscription",
        "required": [
          "active",
          "minimumNumberOfDeliveries",
          "modifiable",
          "shipmentInProgress",
          "subscriptionId"
        ],
        "properties": {
          "active": {
            "readOnly": false,
            "description": "If this subscription is active or not",
            "type": "boolean",
            "example": true
          },
          "cancellationEligibility": {
            "$ref": "#/components/schemas/CancellationEligibility"
          },
          "deactivateAfterNextDelivery": {
            "readOnly": false,
            "description": "If this subscription is going to be deactivated after the next delivery.",
            "type": "boolean",
            "example": true
          },
          "deliveryCount": {
            "readOnly": false,
            "description": "The number of deliveries that have been done",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryEveryNth": {
            "$ref": "#/components/schemas/DeliveryEveryNth"
          },
          "estimatedNextDelivery": {
            "readOnly": false,
            "description": "The estimated next delivery of the subscription if any",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "interval": {
            "readOnly": false,
            "description": "The delivery interval of the subscription, in days.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "latestChangeDate": {
            "readOnly": false,
            "description": "The latest date for changes before changes done to the subscription affects the next delivery",
            "type": "string",
            "format": "date-time",
            "example": "..."
          },
          "minimumNumberOfDeliveries": {
            "readOnly": false,
            "description": "Minimum number of deliveries before customer can cancel the subscription",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "modifiable": {
            "readOnly": false,
            "description": "If the user is currently permitted to make edits to this subscription.",
            "type": "boolean",
            "example": true
          },
          "numberOfProductsPerDelivery": {
            "readOnly": false,
            "description": "Specifies how many products are required per delivery. Only applicable for period based subscriptions. Zero means that the there are no\nlimitations.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "shipmentInProgress": {
            "readOnly": false,
            "description": "If a physical shipment is actively being processed by the warehouse.",
            "type": "boolean",
            "example": true
          },
          "subscriptionId": {
            "readOnly": false,
            "description": "The identifier for the subscription",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "subscriptionName": {
            "readOnly": false,
            "description": "The display name of the subscription.\n\u003cp\u003e\nFor subscriptions based on a subscription template that has a main product, this is the main product\u0027s name\n(translated to the requested language when available, otherwise the product\u0027s default name).\nOtherwise, this is the subscription\u0027s own description.\n\u003c/p\u003e",
            "type": "string",
            "example": "..."
          },
          "subscriptionType": {
            "$ref": "#/components/schemas/SubscriptionType"
          },
          "subscriptionTypeId": {
            "readOnly": false,
            "description": "The identifier of the subscription template used for this subscription",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Defines a subscription.\n\u003cp\u003e\nOne customer can have multiple subscriptions and a subscription can potentially have several rows.\n\u003c/p\u003e"
      },
      "Subscription_CustomerAPI": {
        "type": "object",
        "title": "Subscription",
        "required": [
          "active",
          "deliveries",
          "interval",
          "subscriptionId",
          "totalHoldbacks"
        ],
        "properties": {
          "active": {
            "example": true,
            "readOnly": false,
            "description": "The active status of the subscription.",
            "type": "boolean"
          },
          "arrivalMethod": {
            "$ref": "#/components/schemas/ArrivalMethod_CustomerAPI"
          },
          "campaign": {
            "$ref": "#/components/schemas/Campaign"
          },
          "cancellationReason": {
            "$ref": "#/components/schemas/CancellationReason_CustomerAPI"
          },
          "customFields": {
            "readOnly": false,
            "description": "The custom fields of the subscription.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomField_OrderAPI"
            }
          },
          "deliveries": {
            "example": 2,
            "readOnly": false,
            "description": "The number of deliveries of this subscription.",
            "type": "integer",
            "format": "int32"
          },
          "endDate": {
            "example": "2022-02-03",
            "readOnly": false,
            "description": "The end date of the subscription.",
            "type": "string",
            "format": "date"
          },
          "interval": {
            "example": 30,
            "readOnly": false,
            "description": "The interval used for this subscription.",
            "type": "integer",
            "format": "int32"
          },
          "latestHoldback": {
            "example": "2020-06-01",
            "readOnly": false,
            "description": "The date of the latest holdback.",
            "type": "string",
            "format": "date"
          },
          "modifiedAt": {
            "example": "2023-05-08T14:28:04.120+02:00",
            "readOnly": false,
            "description": "The last changed date of the subscription.",
            "type": "string",
            "format": "date-time"
          },
          "name": {
            "example": "Vitamin D Pills Subscription",
            "readOnly": false,
            "description": "The name of the subscription.",
            "type": "string"
          },
          "nextDeliveryDate": {
            "example": "2020-06-02",
            "readOnly": false,
            "description": "The next planned delivery of the subscription.",
            "type": "string",
            "format": "date"
          },
          "paymentMethod": {
            "$ref": "#/components/schemas/PaymentMethod_CustomerAPI"
          },
          "previousDelivery": {
            "$ref": "#/components/schemas/PreviousDelivery"
          },
          "priceList": {
            "example": "Golden Prices",
            "readOnly": false,
            "description": "The price list of this subscription.",
            "type": "string"
          },
          "startDate": {
            "example": "2020-02-02",
            "readOnly": false,
            "description": "The start date of the subscription.",
            "type": "string",
            "format": "date"
          },
          "subscriptionId": {
            "example": 123650,
            "readOnly": false,
            "description": "The unique ID of the subscription.",
            "type": "integer",
            "format": "int64"
          },
          "totalHoldbacks": {
            "example": 2,
            "readOnly": false,
            "description": "The total number of holdbacks.",
            "type": "integer",
            "format": "int32"
          },
          "upcomingDeliveries": {
            "readOnly": false,
            "description": "The upcoming deliveries of the subscription.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UpcomingDeliveries"
            }
          }
        },
        "description": "Subscription information."
      },
      "SubscriptionDeliveryProduct": {
        "type": "object",
        "title": "SubscriptionDeliveryProduct",
        "required": [
          "discountAmountExcludingTax",
          "discountAmountIncludingTax",
          "discountPercentage",
          "priceExcludingTax",
          "priceIncludingTax",
          "productId",
          "quantity",
          "quantityMax",
          "sendOnlyWithDeliveryX",
          "stockKeepingUnitId",
          "subscriptionRowId"
        ],
        "properties": {
          "additionalProduct": {
            "example": false,
            "readOnly": false,
            "description": "Whether the stock keeping unit has been added additionally.",
            "type": "boolean"
          },
          "attribute1Code": {
            "readOnly": false,
            "description": "The code of the first attribute of the product.",
            "type": "string",
            "example": "..."
          },
          "attribute2Code": {
            "readOnly": false,
            "description": "The code of the second attribute of the product.",
            "type": "string",
            "example": "..."
          },
          "attribute3Code": {
            "readOnly": false,
            "description": "The code of the third attribute of the product.",
            "type": "string",
            "example": "..."
          },
          "discountAmountExcludingTax": {
            "example": 4,
            "readOnly": false,
            "description": "The discount (excluding taxes) of the upcoming delivery.",
            "type": "number",
            "format": "double"
          },
          "discountAmountIncludingTax": {
            "example": 5,
            "readOnly": false,
            "description": "The discount (including taxes) of the upcoming delivery.",
            "type": "number",
            "format": "double"
          },
          "discountPercentage": {
            "example": 0.1,
            "readOnly": false,
            "description": "The discount percentage (decimal 0-1) specified to be used on the upcoming delivery. This is NOT discount / price ratio!",
            "type": "number",
            "format": "double"
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "The European article number (EAN13) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceExcludingTax": {
            "example": 8,
            "readOnly": false,
            "description": "The price (excluding taxes) of the upcoming delivery.",
            "type": "number",
            "format": "double"
          },
          "priceIncludingTax": {
            "example": 10,
            "readOnly": false,
            "description": "The price (including taxes) of the upcoming delivery.",
            "type": "number",
            "format": "double"
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price look up number (PLUNO) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookupNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit. \u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "productId": {
            "readOnly": false,
            "description": "The internal identifier of the product (all variants).",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "quantity": {
            "example": 1,
            "readOnly": false,
            "description": "The quantity that is going to be delivered.",
            "type": "integer",
            "format": "int32"
          },
          "quantityMax": {
            "example": 3,
            "readOnly": false,
            "description": "How many products can be shipped in total for this row.\nIf the subscription is cyclical the quantity count is reset on the next cycle and the max quantity can once again be shipped.\nA value of 0 means it\u0027s infinite.",
            "type": "integer",
            "format": "int32"
          },
          "sendOnlyWithDeliveryX": {
            "example": 3,
            "readOnly": false,
            "description": "If specified the given row will only be delivered on delivery number X.",
            "type": "integer",
            "format": "int32"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The internal identifier of the stock keeping unit.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "subscriptionRowId": {
            "readOnly": false,
            "description": "The unique internal identifier of the row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "templateProduct": {
            "example": true,
            "readOnly": false,
            "description": "Whether the stock keeping unit is default on the subscription template.",
            "type": "boolean"
          }
        },
        "description": "Subscription delivery product"
      },
      "MyPagesSubscriptionDetails": {
        "type": "object",
        "title": "SubscriptionDetails",
        "required": [
          "active",
          "minimumNumberOfDeliveries",
          "modifiable",
          "productId",
          "shipmentInProgress",
          "subscriptionId"
        ],
        "properties": {
          "active": {
            "readOnly": false,
            "description": "If this subscription is active or not",
            "type": "boolean",
            "example": true
          },
          "cancellationEligibility": {
            "$ref": "#/components/schemas/CancellationEligibility"
          },
          "deactivateAfterNextDelivery": {
            "readOnly": false,
            "description": "If this subscription is going to be deactivated after the next delivery.",
            "type": "boolean",
            "example": true
          },
          "deliveryCount": {
            "readOnly": false,
            "description": "The number of deliveries that have been done",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "deliveryEveryNth": {
            "$ref": "#/components/schemas/DeliveryEveryNth"
          },
          "discountNextDelivery": {
            "readOnly": false,
            "description": "The discount on next delivery for the subscription. Does not include the discounts on the rows.",
            "type": "number",
            "example": 12345
          },
          "estimatedNextDelivery": {
            "readOnly": false,
            "description": "The estimated next delivery of the subscription if any",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "interval": {
            "readOnly": false,
            "description": "The delivery interval of the subscription, in days.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "latestChangeDate": {
            "readOnly": false,
            "description": "The latest date for changes before changes done to the subscription affects the next delivery",
            "type": "string",
            "format": "date-time",
            "example": "..."
          },
          "minimumNumberOfDeliveries": {
            "readOnly": false,
            "description": "Minimum number of deliveries before customer can cancel the subscription",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "modifiable": {
            "readOnly": false,
            "description": "If the user is currently permitted to make edits to this subscription.",
            "type": "boolean",
            "example": true
          },
          "numberOfProductsPerDelivery": {
            "readOnly": false,
            "description": "Specifies how many products are required per delivery. Only applicable for period based subscriptions. Zero means that the there are no\nlimitations.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productId": {
            "readOnly": false,
            "description": "The internal identifier for the subscription product. \u003c/br\u003e\nThe subscription product is optional and represents the core product to which the customer is subscribing. \u003c/br\u003e\nHowever, the subscription may contain additional secondary products.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productName": {
            "readOnly": false,
            "description": "The product name of the subscription product",
            "type": "string",
            "example": "..."
          },
          "productNumber": {
            "readOnly": false,
            "description": "The product number of the subscription product",
            "type": "string",
            "example": "..."
          },
          "rows": {
            "readOnly": false,
            "description": "The rows of the subscription.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MyPagesSubscriptionRow"
            }
          },
          "shipmentInProgress": {
            "readOnly": false,
            "description": "If a physical shipment is actively being processed by the warehouse.",
            "type": "boolean",
            "example": true
          },
          "shippingFee": {
            "readOnly": false,
            "description": "The shipping fee for the subscription.",
            "type": "number",
            "example": 12345
          },
          "shippingOption": {
            "$ref": "#/components/schemas/ShippingOption_v2"
          },
          "subscriptionId": {
            "readOnly": false,
            "description": "The identifier for the subscription",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "subscriptionName": {
            "readOnly": false,
            "description": "The display name of the subscription.\n\u003cp\u003e\nFor subscriptions based on a subscription template that has a main product, this is the main product\u0027s name\n(translated to the requested language when available, otherwise the product\u0027s default name).\nOtherwise, this is the subscription\u0027s own description.\n\u003c/p\u003e",
            "type": "string",
            "example": "..."
          },
          "subscriptionType": {
            "$ref": "#/components/schemas/SubscriptionType"
          },
          "subscriptionTypeId": {
            "readOnly": false,
            "description": "The identifier of the subscription template used for this subscription",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "upcomingDiscounts": {
            "readOnly": false,
            "description": "A list of upcoming discounts.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionUpcomingDiscount"
            }
          },
          "useAttribute1": {
            "$ref": "#/components/schemas/UseAttributeX"
          },
          "useAttribute2": {
            "$ref": "#/components/schemas/UseAttributeX"
          },
          "useAttribute3": {
            "$ref": "#/components/schemas/UseAttributeX"
          },
          "validQuantities": {
            "readOnly": false,
            "description": "Valid quantities for the subscription\u0027s product. These represent the allowed purchase amounts. \u003c/br\u003e\nIf a subscription template includes a main product, defining at least one valid quantity is mandatory.",
            "type": "array",
            "items": {
              "type": "integer"
            },
            "example": [
              12345,
              12345
            ]
          }
        },
        "description": "Defines a subscription.\n\u003cp\u003e\nOne customer can have multiple subscriptions and a subscription can potentially have several rows.\n\u003c/p\u003e"
      },
      "SubscriptionInformation_OrderAPI": {
        "type": "object",
        "title": "SubscriptionInformation",
        "required": [
          "deliveryCount",
          "subscriptionId"
        ],
        "properties": {
          "deliveryCount": {
            "readOnly": false,
            "description": "The number of deliveries of the subscription.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "description": {
            "example": "",
            "readOnly": false,
            "description": "The description of the subscription.",
            "type": "string"
          },
          "offerCodes": {
            "example": [
              "",
              "..."
            ],
            "readOnly": false,
            "description": "The offer codes used (if any)",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "subscriptionId": {
            "example": 123650,
            "readOnly": false,
            "description": "The unique number of the subscription.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Contains subscription information for a order."
      },
      "SubscriptionInformation": {
        "type": "object",
        "title": "SubscriptionInformation",
        "required": [
          "subscriptionTypeId"
        ],
        "properties": {
          "campaignName": {
            "readOnly": false,
            "description": "The name of the campaign that was used when the subscription was created.",
            "type": "string",
            "example": "..."
          },
          "deliveriesSent": {
            "readOnly": false,
            "description": "The number of deliveries sent for this subscription.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "lastChangeDate": {
            "readOnly": false,
            "description": "The last date for changing the subscription.",
            "type": "string",
            "example": "..."
          },
          "nextDeliveryDate": {
            "readOnly": false,
            "description": "The next delivery date.",
            "type": "string",
            "example": "..."
          },
          "subscriptionTypeCode": {
            "readOnly": false,
            "description": "The code of the subscription type.",
            "type": "string",
            "example": "..."
          },
          "subscriptionTypeId": {
            "readOnly": false,
            "description": "The internal identifier of the subscription type.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds information about the subscription if the underlying order was created via one."
      },
      "SubscriptionResult": {
        "type": "object",
        "title": "SubscriptionResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The subscriptions in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Subscription_CustomerAPI"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a search result of subscriptions."
      },
      "SubscriptionResult_SubscriptionAPI": {
        "type": "object",
        "title": "SubscriptionResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The subscriptions in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Subscription"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a search result of subscriptions."
      },
      "MyPagesSubscriptionRow": {
        "type": "object",
        "title": "SubscriptionRow",
        "required": [
          "active",
          "fullyDelivered",
          "manuallyAdded",
          "priority",
          "quantity",
          "sendDeliveryEveryNth",
          "sendOnlyWithDeliveryX",
          "shipsIndefinitely",
          "stockKeepingUnitId",
          "subscriptionRowId"
        ],
        "properties": {
          "active": {
            "readOnly": false,
            "description": "Shows if the row has been fully delivered. An inactive row won\u0027t be sent until activated again",
            "type": "boolean",
            "example": true
          },
          "attribute1Code": {
            "readOnly": false,
            "description": "The attribute1 code of the product",
            "type": "string",
            "example": "..."
          },
          "attribute2Code": {
            "readOnly": false,
            "description": "The attribute2 code of the product",
            "type": "string",
            "example": "..."
          },
          "attribute3Code": {
            "readOnly": false,
            "description": "The attribute3 code of the product",
            "type": "string",
            "example": "..."
          },
          "discount": {
            "readOnly": false,
            "description": "The discount in monetary value of this row",
            "type": "number",
            "example": 12345
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "The European article number (EAN13) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "fullyDelivered": {
            "readOnly": false,
            "description": "Shows if the row has been fully delivered. A fully delivered row wont be sent again",
            "type": "boolean",
            "example": true
          },
          "manuallyAdded": {
            "readOnly": false,
            "description": "If the product has been added manually. (Specific for one time items in period based subscriptions)",
            "type": "boolean",
            "example": true
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price lookup unit number (PLUNO) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priority": {
            "readOnly": false,
            "description": "Shows the priority of the row. The group with the lowest priority will be sent on the next delivery",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productId": {
            "readOnly": false,
            "description": "The internal product identifier",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productName": {
            "readOnly": false,
            "description": "The product name",
            "type": "string",
            "example": "..."
          },
          "productNumber": {
            "readOnly": false,
            "description": "The product number",
            "type": "string",
            "example": "..."
          },
          "productType": {
            "$ref": "#/components/schemas/ArticleType"
          },
          "quantity": {
            "readOnly": false,
            "description": "The number of items of this row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "sendDeliveryEveryNth": {
            "readOnly": false,
            "description": "Defines how often the customer wants to get deliveries.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "sendOnlyWithDeliveryX": {
            "readOnly": false,
            "description": "Specifies if the product should be restricted to a particular delivery. If 0 include the product in all deliveries. \u003c/br\u003e\nIf set to a value greater than 0, the product is included only in the delivery matching the specified value.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "shipsIndefinitely": {
            "readOnly": false,
            "description": "Indicates whether products should be shipped indefinitely.",
            "type": "boolean",
            "example": true
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The stock keeping unit ID of the product.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "subscriptionRowId": {
            "readOnly": false,
            "description": "The identifier of the subscription row",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "totalDiscount": {
            "readOnly": false,
            "description": "The total discount of a row",
            "type": "number",
            "example": 12345
          },
          "totalSum": {
            "readOnly": false,
            "description": "The total sum of a row",
            "type": "number",
            "example": 12345
          },
          "unitPrice": {
            "readOnly": false,
            "description": "The unit price of this row.",
            "type": "number",
            "example": 12345
          }
        },
        "description": "Defines a subscription row"
      },
      "SubscriptionRowAddedOrUpdatedResultRow": {
        "type": "object",
        "title": "SubscriptionRowAddedOrUpdatedResultRow",
        "required": [
          "subscriptionRowId"
        ],
        "properties": {
          "subscriptionRowId": {
            "readOnly": false,
            "description": "The internal identifier of the row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds details about a created or updated subscriptions."
      },
      "SubscriptionRowProduct": {
        "type": "object",
        "title": "SubscriptionRowProduct",
        "required": [
          "discountAmountExcludingTax",
          "discountAmountIncludingTax",
          "discountPercentage",
          "priceExcludingTax",
          "priceIncludingTax",
          "productId",
          "quantity",
          "quantityMax",
          "sendOnlyWithDeliveryX",
          "stockKeepingUnitId",
          "subscriptionRowId"
        ],
        "properties": {
          "active": {
            "example": true,
            "readOnly": false,
            "description": "Whether row is active.",
            "type": "boolean"
          },
          "attribute1Code": {
            "readOnly": false,
            "description": "The code of the first attribute of the product.",
            "type": "string",
            "example": "..."
          },
          "attribute2Code": {
            "readOnly": false,
            "description": "The code of the second attribute of the product.",
            "type": "string",
            "example": "..."
          },
          "attribute3Code": {
            "readOnly": false,
            "description": "The code of the third attribute of the product.",
            "type": "string",
            "example": "..."
          },
          "discountAmountExcludingTax": {
            "example": 4,
            "readOnly": false,
            "description": "The discount (excluding taxes) of the upcoming delivery.",
            "type": "number",
            "format": "double"
          },
          "discountAmountIncludingTax": {
            "example": 5,
            "readOnly": false,
            "description": "The discount (including taxes) of the upcoming delivery.",
            "type": "number",
            "format": "double"
          },
          "discountPercentage": {
            "example": 0.1,
            "readOnly": false,
            "description": "The discount percentage (decimal 0-1) specified to be used on the upcoming delivery. This is NOT discount / price ratio!",
            "type": "number",
            "format": "double"
          },
          "europeanArticleNumber": {
            "readOnly": false,
            "description": "The European article number (EAN13) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "fullyDelivered": {
            "example": false,
            "readOnly": false,
            "description": "Whether the row is fully delivered.",
            "type": "boolean"
          },
          "priceExcludingTax": {
            "example": 8,
            "readOnly": false,
            "description": "The price (excluding taxes) of the upcoming delivery.",
            "type": "number",
            "format": "double"
          },
          "priceIncludingTax": {
            "example": 10,
            "readOnly": false,
            "description": "The price (including taxes) of the upcoming delivery.",
            "type": "number",
            "format": "double"
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price look up number (PLUNO) of the stock keeping unit.",
            "type": "string",
            "example": "..."
          },
          "priceLookupNumber": {
            "readOnly": false,
            "description": "\u003cp\u003eThe price lookup unit number (PLUNO) of the stock keeping unit. \u003c/p\u003e\n\u003cp\u003e\u003cb\u003eDeprecated:\u003c/b\u003e Deprecated due to incorrect field name. Use priceLookUpNumber instead \u003c/p\u003e",
            "type": "string"
          },
          "productId": {
            "readOnly": false,
            "description": "The internal identifier of the product (all variants).",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "quantity": {
            "example": 1,
            "readOnly": false,
            "description": "The quantity that is going to be delivered.",
            "type": "integer",
            "format": "int32"
          },
          "quantityMax": {
            "example": 3,
            "readOnly": false,
            "description": "How many products can be shipped in total for this row.\nIf the subscription is cyclical the quantity count is reset on the next cycle and the max quantity can once again be shipped.\nA value of 0 means it\u0027s infinite.",
            "type": "integer",
            "format": "int32"
          },
          "sendOnlyWithDeliveryX": {
            "example": 3,
            "readOnly": false,
            "description": "If specified the given row will only be delivered on delivery number X.",
            "type": "integer",
            "format": "int32"
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The internal identifier of the stock keeping unit.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "subscriptionRowId": {
            "readOnly": false,
            "description": "The unique internal identifier of the row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Subscription row product"
      },
      "SubscriptionRowToAddOrUpdate": {
        "type": "object",
        "title": "SubscriptionRowToAddOrUpdate",
        "required": [
          "active",
          "discountAmountExcludingTax",
          "discountAmountIncludingTax",
          "discountPercentage",
          "priceExcludingTax",
          "priceIncludingTax",
          "priority",
          "quantity",
          "quantityMax",
          "sendOnlyWithDeliveryX",
          "taxRate"
        ],
        "properties": {
          "active": {
            "readOnly": false,
            "description": "If the given row should be active.",
            "type": "boolean",
            "example": true
          },
          "attribute1Code": {
            "readOnly": false,
            "description": "The attribute code of the first attribute for the product to be added on the new row.",
            "type": "string",
            "example": "..."
          },
          "attribute2Code": {
            "readOnly": false,
            "description": "The attribute code of the second attribute for the product to be added on the new row.",
            "type": "string",
            "example": "..."
          },
          "attribute3Code": {
            "readOnly": false,
            "description": "The attribute code of the third attribute for the product to be added on the new row.",
            "type": "string",
            "example": "..."
          },
          "discountAmountExcludingTax": {
            "example": 1,
            "readOnly": false,
            "description": "The discount (excluding tax) to be used for the given row (mutually exclusive with percentage).",
            "type": "number",
            "format": "double"
          },
          "discountAmountIncludingTax": {
            "example": 1.25,
            "readOnly": false,
            "description": "The discount (including tax) to be used for the given row (mutually exclusive with percentage).",
            "type": "number",
            "format": "double"
          },
          "discountPercentage": {
            "example": 0.1,
            "readOnly": false,
            "description": "The discount percentage to be used for the given row (mutually exclusive with amount).",
            "type": "number",
            "format": "double"
          },
          "priceExcludingTax": {
            "example": 100,
            "readOnly": false,
            "description": "The price (excluding tax) to be used for the given row. Only applicable if the subscription is for a country with external tax service provider.",
            "type": "number",
            "format": "double"
          },
          "priceIncludingTax": {
            "example": 125,
            "readOnly": false,
            "description": "The price (including tax) to be used for the given row.",
            "type": "number",
            "format": "double"
          },
          "priceLookUpNumber": {
            "readOnly": false,
            "description": "The price lookup number of the product to be added on the new row.",
            "type": "string",
            "example": "..."
          },
          "priority": {
            "readOnly": false,
            "description": "The priority of the row. This is the order in which the products are shipped out. Lower priority ships first. Same priority ships together.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "productId": {
            "readOnly": false,
            "description": "The product id of the product to be added on the new row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "quantity": {
            "example": 1,
            "readOnly": false,
            "description": "The quantity to be used for the given row.",
            "type": "integer",
            "format": "int32"
          },
          "quantityMax": {
            "example": 5,
            "readOnly": false,
            "description": "The max quantity to be used as the limit for the given row.",
            "type": "integer",
            "format": "int32"
          },
          "sendOnlyWithDeliveryX": {
            "readOnly": false,
            "description": "Here it can be specified if the new row only should be sent with a specific delivery.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "stockKeepingUnitId": {
            "readOnly": false,
            "description": "The stock keeping unit id of the product to be added on the new row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "subscriptionRowId": {
            "readOnly": false,
            "description": "The id of the row to update (if this is not specified a new row will be added).",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "taxRate": {
            "example": 0.25,
            "readOnly": false,
            "description": "The taxrate to be used for the given row. If not specified the taxrate gets taken from the price registered for the product used.",
            "type": "number",
            "format": "double"
          }
        },
        "description": "Contains a list of subscriptions rows to add or update."
      },
      "SubscriptionRowToAddOrUpdateResultRow": {
        "type": "object",
        "title": "SubscriptionRowToAddOrUpdateResultRow",
        "required": [
          "subscriptionRowId"
        ],
        "properties": {
          "subscriptionRowId": {
            "readOnly": false,
            "description": "The internal identifier of the row.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds information about a created or updated subscriptions."
      },
      "SubscriptionRows": {
        "type": "object",
        "title": "SubscriptionRows",
        "properties": {
          "priority": {
            "example": 3,
            "readOnly": false,
            "description": "The priority of the row (rows with same priority gets delivered together, lowest priority first).",
            "type": "integer",
            "format": "int32"
          },
          "products": {
            "readOnly": false,
            "description": "The products of the upcoming delivery.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionRowProduct"
            }
          }
        },
        "description": "Subscription rows"
      },
      "SubscriptionRowsAddedOrUpdatedResult": {
        "type": "object",
        "title": "SubscriptionRowsAddedOrUpdatedResult",
        "properties": {
          "created": {
            "readOnly": false,
            "description": "The list of created subscription rows.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionRowAddedOrUpdatedResultRow"
            }
          },
          "updated": {
            "readOnly": false,
            "description": "The list of updated subscription rows.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionRowAddedOrUpdatedResultRow"
            }
          }
        },
        "description": "Holds details about created and updated subscription rows."
      },
      "SubscriptionRowsToAddOrUpdate": {
        "type": "object",
        "title": "SubscriptionRowsToAddOrUpdate",
        "properties": {
          "subscriptionRowsToAddOrUpdate": {
            "readOnly": false,
            "description": "The customers to add or update.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionRowToAddOrUpdate"
            }
          }
        },
        "description": "Contains a list of subscriptions rows to add or update."
      },
      "SubscriptionRowsToAddOrUpdateResult": {
        "type": "object",
        "title": "SubscriptionRowsToAddOrUpdateResult",
        "properties": {
          "created": {
            "readOnly": false,
            "description": "The list of subscription rows that were created.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionRowToAddOrUpdateResultRow"
            }
          },
          "updated": {
            "readOnly": false,
            "description": "The list of subscription rows that were updated.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionRowToAddOrUpdateResultRow"
            }
          }
        },
        "description": "Holds information about created \u0026 updated subscription rows."
      },
      "SubscriptionRowsToUpdate": {
        "type": "object",
        "title": "SubscriptionRowsToUpdate",
        "required": [
          "quantity",
          "subscriptionRowId"
        ],
        "properties": {
          "active": {
            "example": true,
            "readOnly": false,
            "description": "Used to deactivate or reactivate a subscription row. (Also used for deleting a one time item in a period based subscription)",
            "type": "boolean"
          },
          "quantity": {
            "example": 123,
            "readOnly": false,
            "description": "Changes to the quantity (setting this to 0 will cancel the subscription row).",
            "type": "integer",
            "format": "int32"
          },
          "stockKeepingUnitId": {
            "example": 513,
            "readOnly": false,
            "description": "The internal identifier of the replacement unit. Please note changing a stock keeping unit doesn\u0027t affect the prices of the row.",
            "type": "integer",
            "format": "int32"
          },
          "subscriptionRowId": {
            "readOnly": false,
            "description": "The identifier of the subscription row. This is mandatory.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Contains changes that applies to a subscription row."
      },
      "SubscriptionShipment": {
        "type": "object",
        "title": "SubscriptionShipment",
        "required": [
          "infinite",
          "interval",
          "shipmentNumber"
        ],
        "properties": {
          "infinite": {
            "readOnly": false,
            "description": "",
            "type": "boolean",
            "example": true
          },
          "interval": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "priceIncludingTax": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          },
          "products": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentProduct"
            }
          },
          "shipmentNumber": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "shippingFee": {
            "readOnly": false,
            "description": "",
            "type": "number",
            "example": 12345
          }
        },
        "description": ""
      },
      "SubscriptionTemplate": {
        "type": "object",
        "title": "SubscriptionTemplate",
        "required": [
          "subscriptionTemplateId"
        ],
        "properties": {
          "linkFriendlyName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "longDescription": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "shipmentPlan": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionShipment"
            }
          },
          "shortDescription": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "subscriptionTemplateId": {
            "readOnly": false,
            "description": "",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "templateName": {
            "readOnly": false,
            "description": "",
            "type": "string",
            "example": "..."
          },
          "useAttribute1": {
            "$ref": "#/components/schemas/UseAttributeX"
          },
          "useAttribute2": {
            "$ref": "#/components/schemas/UseAttributeX"
          },
          "useAttribute3": {
            "$ref": "#/components/schemas/UseAttributeX"
          }
        },
        "description": ""
      },
      "SubscriptionToUpdate": {
        "type": "object",
        "title": "SubscriptionToUpdate",
        "properties": {
          "deliveryEveryNth": {
            "$ref": "#/components/schemas/DeliveryEveryNth"
          },
          "deliveryEveryNthUpdateDate": {
            "example": "2024-02-26",
            "readOnly": false,
            "description": "For Weekly subscriptions only, defines when the DeliveryEveryNth update takes affect.",
            "type": "string",
            "format": "date"
          },
          "deliveryInstructions": {
            "example": "Open gate with code: 12345",
            "readOnly": false,
            "description": "The delivery instructions of the subscription.",
            "type": "string"
          },
          "interval": {
            "example": 30,
            "readOnly": false,
            "description": "Change of the interval in days.",
            "type": "integer",
            "format": "int32"
          },
          "nextDeliveryDate": {
            "example": "2021-12-01",
            "readOnly": false,
            "description": "Change of the next delivery date.",
            "type": "string",
            "format": "date"
          },
          "productsToAdd": {
            "readOnly": false,
            "description": "Products to add to the subscription.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductsToAdd"
            }
          },
          "subscriptionRowsToUpdate": {
            "readOnly": false,
            "description": "Changes to the subscription rows.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionRowsToUpdate"
            }
          },
          "timeSlotId": {
            "example": 1,
            "readOnly": false,
            "description": "The timeslot id of the subscription.",
            "type": "integer",
            "format": "int32"
          }
        },
        "description": "Contains changes that applies to a subscription."
      },
      "SubscriptionType": {
        "type": "string",
        "title": "SubscriptionType",
        "enum": [
          "TAILORED_SUBSCRIPTION",
          "WEEKLY_BASED_SUBSCRIPTION"
        ],
        "description": "Defines possible types of subscriptions."
      },
      "SubscriptionUpcomingDiscount": {
        "type": "object",
        "title": "SubscriptionUpcomingDiscount",
        "required": [
          "active",
          "numberOfUses",
          "sort",
          "unlimitedNumberOfUses",
          "used"
        ],
        "properties": {
          "active": {
            "readOnly": false,
            "description": "If the discount is active",
            "type": "boolean",
            "example": true
          },
          "appliesTo": {
            "$ref": "#/components/schemas/AppliesTo"
          },
          "discountAmount": {
            "readOnly": false,
            "description": "The amount of discount if specified",
            "type": "number",
            "example": 12345
          },
          "discountPercentage": {
            "readOnly": false,
            "description": "The percentage of discount if specified",
            "type": "number",
            "example": 12345
          },
          "freeText": {
            "readOnly": false,
            "description": "An arbitrary text connected to the discount.",
            "type": "string",
            "example": "..."
          },
          "numberOfUses": {
            "readOnly": false,
            "description": "The number of total uses this discount can be used. Zero indicates infinite amount.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "sort": {
            "readOnly": false,
            "description": "What sort this specific discount has.\n\u003cp\u003e\nThese subscriptions are automatically used upon the next delivery and the sort decides which subscription is next.\n\u003c/p\u003e",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "unlimitedNumberOfUses": {
            "readOnly": false,
            "description": "Indicates that this discount has unlimited amount of uses",
            "type": "boolean",
            "example": true
          },
          "used": {
            "readOnly": false,
            "description": "How many times this discount has been used.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Represents an available subscription discount"
      },
      "Supplier": {
        "type": "object",
        "title": "Supplier",
        "required": [
          "supplierId"
        ],
        "properties": {
          "supplierId": {
            "readOnly": false,
            "description": "The internal identifier of the supplier.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "supplierName": {
            "readOnly": false,
            "description": "The public name of the supplier.",
            "type": "string",
            "example": "..."
          },
          "supplierNumber": {
            "readOnly": false,
            "description": "The supplier number",
            "type": "string",
            "example": "..."
          }
        },
        "description": "A supplier is a company that deliver goods to us."
      },
      "Supplier_Product": {
        "type": "object",
        "title": "Supplier",
        "required": [
          "supplierId"
        ],
        "properties": {
          "currencyCode": {
            "example": "SEK",
            "readOnly": false,
            "description": "The currency code of the product for this supplier.",
            "type": "string"
          },
          "previousDeliveryDate": {
            "example": "2020-01-01",
            "readOnly": false,
            "description": "The date of the previous delivery for this supplier.",
            "type": "string",
            "format": "date"
          },
          "supplierId": {
            "example": 123,
            "readOnly": false,
            "description": "The internal identifier of this supplier.",
            "type": "integer",
            "format": "int32"
          },
          "supplierNumber": {
            "example": "12345678",
            "readOnly": false,
            "description": "The number of this supplier",
            "type": "string"
          },
          "supplierProductNumber": {
            "example": "123PRODUCT",
            "readOnly": false,
            "description": "The identifier of the product for this supplier.",
            "type": "string"
          },
          "unitPriceExcludingTax": {
            "example": 123.1234,
            "readOnly": false,
            "description": "The price of the product for this supplier.",
            "type": "number"
          }
        },
        "description": "Defines a supplier of a stock keeping unit."
      },
      "SupplierResult": {
        "type": "object",
        "title": "SupplierResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Supplier"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a search result of supplier."
      },
      "TargetType": {
        "type": "string",
        "title": "TargetType",
        "enum": [
          "ARTICLE",
          "CATEGORY",
          "REDIRECT"
        ],
        "description": "Defines the type of the path destination target."
      },
      "TaxRateAddressRequest": {
        "type": "object",
        "title": "TaxRateAddressRequest",
        "properties": {
          "addressLine1": {
            "example": "Druveforsvägen 8",
            "readOnly": false,
            "description": "The first address line, usually street address.",
            "type": "string"
          },
          "administrativeDivision": {
            "example": "Borås kommun",
            "readOnly": false,
            "description": "The administrative division, such as region or state.",
            "type": "string"
          },
          "city": {
            "example": "BORÅS",
            "readOnly": false,
            "description": "The city of the address.",
            "type": "string"
          },
          "zipcode": {
            "example": "50454",
            "readOnly": false,
            "description": "The zipcode/postal code of the address.",
            "type": "string"
          }
        },
        "description": "The address for the tax rate calculation."
      },
      "TaxRateFeeResponse": {
        "type": "object",
        "title": "TaxRateFeeResponse",
        "required": [
          "fixedTaxRate"
        ],
        "properties": {
          "amountExcludingTax": {
            "example": 22.49,
            "readOnly": false,
            "description": "The amount excluding tax",
            "type": "number"
          },
          "amountIncludingTax": {
            "example": 29.99,
            "readOnly": false,
            "description": "The amount including tax",
            "type": "number"
          },
          "fixedTaxRate": {
            "readOnly": false,
            "description": "Whether the tax rate is fixed. If it is false, then the tax rate is weighted (average of total tax rate)",
            "type": "boolean",
            "example": true
          },
          "taxRate": {
            "example": 0.25,
            "readOnly": false,
            "description": "The tax rate",
            "type": "number"
          }
        },
        "description": "Response with calculated tax rate for different fees, i.e. shipping fee, payment fee, etc."
      },
      "TaxRateLineRequest": {
        "type": "object",
        "title": "TaxRateLineRequest",
        "required": [
          "quantity",
          "stockKeepingUnitId"
        ],
        "properties": {
          "discountExcludingTax": {
            "example": 10,
            "readOnly": false,
            "description": "The discount amount to calculate tax for",
            "type": "number"
          },
          "lineId": {
            "example": 1,
            "readOnly": false,
            "description": "The unique identifier for the line. Optional",
            "type": "integer",
            "format": "int32"
          },
          "priceLookUpNumber": {
            "example": "57968634",
            "readOnly": false,
            "description": "The price look up number for the product. Mutually exclusive with stockKeepingUnitId",
            "type": "string"
          },
          "quantity": {
            "example": 3,
            "readOnly": false,
            "description": "The quantity of the product. Defaults to 1",
            "type": "integer",
            "format": "int32"
          },
          "stockKeepingUnitId": {
            "example": 379667,
            "readOnly": false,
            "description": "The unique identifier for the stock keeping unit. Mutually exclusive with priceLookUpNumber",
            "type": "integer",
            "format": "int32"
          },
          "unitPriceExcludingTax": {
            "example": 99.99,
            "readOnly": false,
            "description": "The monetary amount to calculate tax for",
            "type": "number"
          }
        },
        "description": "Lines for CalculateTaxRateRequest representing each product we need to calculate tax for."
      },
      "TaxRateLineResponse": {
        "type": "object",
        "title": "TaxRateLineResponse",
        "required": [
          "stockKeepingUnitId"
        ],
        "properties": {
          "amountExcludingTax": {
            "example": 9.44,
            "readOnly": false,
            "description": "The monetary calculated amount excluding tax",
            "type": "number"
          },
          "amountIncludingTax": {
            "example": 11.79,
            "readOnly": false,
            "description": "The monetary calculated amount including tax",
            "type": "number"
          },
          "discountExcludingTax": {
            "example": 21.19,
            "readOnly": false,
            "description": "The monetary discount excluding tax",
            "type": "number"
          },
          "discountIncludingTax": {
            "example": 26.49,
            "readOnly": false,
            "description": "The monetary discount including tax",
            "type": "number"
          },
          "lineId": {
            "example": 1,
            "readOnly": false,
            "description": "The unique identifier for the line",
            "type": "integer",
            "format": "int32"
          },
          "priceLookUpNumber": {
            "example": "57968634",
            "readOnly": false,
            "description": "The price look up number for the product",
            "type": "string"
          },
          "stockKeepingUnitId": {
            "example": 379667,
            "readOnly": false,
            "description": "The unique identifier for the stock keeping unit",
            "type": "integer",
            "format": "int32"
          },
          "taxRate": {
            "example": 0.25,
            "readOnly": false,
            "description": "The applied tax rate",
            "type": "number"
          },
          "unitPriceExcludingTax": {
            "example": 10.21,
            "readOnly": false,
            "description": "The monetary unit price excluding tax",
            "type": "number"
          },
          "unitPriceIncludingTax": {
            "example": 12.76,
            "readOnly": false,
            "description": "The monetary unit price including tax",
            "type": "number"
          }
        },
        "description": "Lines for CalculateTaxRateRequest representing each product we calculated tax for."
      },
      "TaxRateRequest": {
        "type": "object",
        "title": "TaxRateRequest",
        "properties": {
          "countryCode": {
            "example": "SE",
            "readOnly": false,
            "description": "The country code to calculate tax for",
            "type": "string"
          },
          "orderLines": {
            "readOnly": false,
            "description": "The order lines to calculate tax for",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TaxRateLineRequest"
            }
          },
          "paymentFeeExcludingTax": {
            "example": 0.99,
            "readOnly": false,
            "description": "The payment fee to calculate tax for. Optional",
            "type": "number"
          },
          "receiverAddress": {
            "$ref": "#/components/schemas/TaxRateAddressRequest"
          },
          "serviceFeeExcludingTax": {
            "example": 1.99,
            "readOnly": false,
            "description": "The service fee to calculate tax for. Optional",
            "type": "number"
          },
          "shippingFeeExcludingTax": {
            "example": 9.99,
            "readOnly": false,
            "description": "The shipping fee to calculate tax for",
            "type": "number"
          }
        },
        "description": "Request to calculate the tax rate based on passed SKUs/PLU numbers."
      },
      "TaxRateResponse": {
        "type": "object",
        "title": "TaxRateResponse",
        "properties": {
          "orderLines": {
            "readOnly": false,
            "description": "The calculated tax rate for each product.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TaxRateLineResponse"
            }
          },
          "paymentFee": {
            "$ref": "#/components/schemas/TaxRateFeeResponse"
          },
          "serviceFee": {
            "$ref": "#/components/schemas/TaxRateFeeResponse"
          },
          "shippingFee": {
            "$ref": "#/components/schemas/TaxRateFeeResponse"
          }
        },
        "description": "Response with calculated tax rate for the passed SKUs/PLU numbers."
      },
      "TermsOfPayment": {
        "type": "object",
        "title": "TermsOfPayment",
        "required": [
          "daysToPay",
          "termsOfPaymentId"
        ],
        "properties": {
          "daysToPay": {
            "example": 14,
            "readOnly": false,
            "description": "Number of days the customer has to pay the invoice.",
            "type": "integer",
            "format": "int32"
          },
          "termsOfPaymentId": {
            "example": 100012,
            "readOnly": false,
            "description": "Default terms of payment id.",
            "type": "integer",
            "format": "int32"
          },
          "termsOfPaymentName": {
            "example": "Partial payment",
            "readOnly": false,
            "description": "Default terms of payment name.",
            "type": "string"
          }
        },
        "description": "Terms Of Payment"
      },
      "TermsOfPayment_OrderAPI": {
        "type": "object",
        "title": "TermsOfPayment",
        "required": [
          "daysToPay",
          "termsOfPaymentId"
        ],
        "properties": {
          "daysToPay": {
            "example": 14,
            "readOnly": false,
            "description": "Number of days the customer has to pay the invoice.",
            "type": "integer",
            "format": "int32"
          },
          "termsOfPaymentId": {
            "example": 100012,
            "readOnly": false,
            "description": "Default terms of payment id.",
            "type": "integer",
            "format": "int32"
          },
          "termsOfPaymentName": {
            "example": "Partial payment",
            "readOnly": false,
            "description": "Default terms of payment name.",
            "type": "string"
          }
        },
        "description": "Terms Of Payment"
      },
      "TimeSlot_v2": {
        "type": "object",
        "title": "TimeSlot",
        "required": [
          "timeSlotId"
        ],
        "properties": {
          "dayOfWeek": {
            "$ref": "#/components/schemas/DayOfWeek"
          },
          "timeFrom": {
            "example": "15:00:00",
            "readOnly": false,
            "description": "The time from of the time slot.",
            "type": "string"
          },
          "timeSlotId": {
            "readOnly": false,
            "description": "The internal identifier of the time slot.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "timeTo": {
            "example": "18:00:00",
            "readOnly": false,
            "description": "The time to of the time slot.",
            "type": "string"
          }
        },
        "description": "Represents a time slot"
      },
      "TimeSlot_DeliveryAPI": {
        "type": "object",
        "title": "TimeSlot",
        "required": [
          "timeSlotId"
        ],
        "properties": {
          "dayOfWeek": {
            "$ref": "#/components/schemas/DayOfWeek"
          },
          "timeFrom": {
            "example": "15:00:00",
            "readOnly": false,
            "description": "The time from of the time slot.",
            "type": "string"
          },
          "timeSlotId": {
            "example": 2,
            "readOnly": false,
            "description": "The internal identifier of the time slot.",
            "type": "integer",
            "format": "int32"
          },
          "timeTo": {
            "example": "18:00:00",
            "readOnly": false,
            "description": "The time to of the time slot.",
            "type": "string"
          }
        },
        "description": "The time slot of a delivery."
      },
      "TimeSlot": {
        "type": "object",
        "title": "TimeSlot",
        "required": [
          "timeSlotId"
        ],
        "properties": {
          "dayOfWeek": {
            "$ref": "#/components/schemas/DayOfWeek"
          },
          "timeFrom": {
            "readOnly": false,
            "description": "The time from of the time slot.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "timeSlotId": {
            "readOnly": false,
            "description": "The identifier of the time slot.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "timeTo": {
            "readOnly": false,
            "description": "The time to of the time slot.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Defines a time slot."
      },
      "TimeSlotRule": {
        "type": "string",
        "title": "TimeSlotRule",
        "enum": [
          "MANDATORY",
          "ILLEGAL"
        ],
        "description": "Controls the rules for time slots of a delivery method."
      },
      "TokenType": {
        "type": "string",
        "title": "TokenType",
        "enum": [
          "RESET_PASSWORD_TOKEN",
          "ACTIVATE_PASSWORD_TOKEN"
        ],
        "description": "Defines various token types."
      },
      "TransactionType": {
        "type": "string",
        "title": "TransactionType",
        "enum": [
          "REFERENCE",
          "AUTHORIZATION",
          "SALE",
          "CAPTURE",
          "REFUND",
          "CANCELLATION"
        ],
        "description": ""
      },
      "Translation": {
        "type": "object",
        "title": "Translation",
        "properties": {
          "groupName": {
            "example": "Nike",
            "readOnly": false,
            "description": "The group name of the package for example a brand name.",
            "type": "string"
          },
          "languageCode": {
            "example": "sv",
            "readOnly": false,
            "description": "The iso2 language code.",
            "type": "string"
          }
        },
        "description": "Contains translations for the package."
      },
      "TranslationKey": {
        "type": "object",
        "title": "TranslationKey",
        "properties": {
          "languageCode": {
            "readOnly": false,
            "description": "The language code of the language used for the translation",
            "type": "string",
            "example": "..."
          },
          "propertyKeyName": {
            "readOnly": false,
            "description": "The translated name of the property key",
            "type": "string",
            "example": "..."
          },
          "propertyKeyNameDescription": {
            "readOnly": false,
            "description": "The translated description of the property",
            "type": "string",
            "example": "..."
          }
        },
        "description": "The translation for a property value"
      },
      "TranslationKey_PropertyKey": {
        "type": "object",
        "title": "TranslationKey",
        "properties": {
          "description": {
            "readOnly": false,
            "description": "The translated name of the property keys description",
            "type": "string",
            "example": "..."
          },
          "languageCode": {
            "readOnly": false,
            "description": "The language code of the language used for the translation",
            "type": "string",
            "example": "..."
          },
          "name": {
            "readOnly": false,
            "description": "The translated name of the property key. Leave this empty to delete a translation for a given language",
            "type": "string",
            "example": "..."
          }
        },
        "description": "The translations for the key"
      },
      "TranslationToAddOrUpdate_RelatedProductToAddOrUpdate": {
        "type": "object",
        "title": "TranslationToAddOrUpdate",
        "required": [
          "relationNumber"
        ],
        "properties": {
          "relationNumber": {
            "example": 1,
            "readOnly": false,
            "description": "Relation number",
            "type": "integer",
            "format": "int32"
          },
          "relationType": {
            "$ref": "#/components/schemas/RelationType"
          },
          "translations": {
            "readOnly": false,
            "description": "Changes to the product relation translations.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RelationTranslation"
            }
          }
        },
        "description": "Product relation translations."
      },
      "TranslationToAddOrUpdate": {
        "type": "object",
        "title": "TranslationToAddOrUpdate",
        "properties": {
          "brandName": {
            "example": "Adidas Shirts",
            "readOnly": false,
            "description": "Changes to brand name for this translation.",
            "type": "string"
          },
          "brandTag": {
            "example": "Adidas",
            "readOnly": false,
            "description": "Changes to brand tag for this translation. Can be used to group brands on the site when filtering for example if you have two brands Viskan Shirts and Viskan Pants that you want to group under Viskan.",
            "type": "string"
          },
          "keywords": {
            "readOnly": false,
            "description": "Changes to the keywords for this translation. An empty array clears the keywords for the given article, to keep existing simply don\u0027t send keywords element.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "...",
              "..."
            ]
          },
          "languageCode": {
            "example": "en",
            "readOnly": false,
            "description": "The language code of the translation, this is the identifier. This value is mandatory. (BCP 47 code)",
            "type": "string"
          },
          "longDescription": {
            "example": "Long description of the product",
            "readOnly": false,
            "description": "Changes to the long description for this translation.",
            "type": "string"
          },
          "metaDescription": {
            "example": "Meta description of the product",
            "readOnly": false,
            "description": "Changes to the meta description for this translation.",
            "type": "string"
          },
          "metaTitle": {
            "example": "Meta title of the product",
            "readOnly": false,
            "description": "Changes to the meta title for this translation.",
            "type": "string"
          },
          "path": {
            "example": "mount-hood-jacket",
            "readOnly": false,
            "description": "Path for this translation.",
            "type": "string"
          },
          "productName": {
            "example": "Product Name Changed",
            "readOnly": false,
            "description": "Changes to the product name of this translation.",
            "type": "string"
          },
          "shortDescription": {
            "example": "Short description of the product",
            "readOnly": false,
            "description": "Changes to the short description for this translation.",
            "type": "string"
          }
        },
        "description": "Contains changes that applies to a product."
      },
      "TranslationToDelete": {
        "type": "object",
        "title": "TranslationToDelete",
        "required": [
          "relationNumber"
        ],
        "properties": {
          "languages": {
            "example": [
              "en",
              "sv"
            ],
            "readOnly": false,
            "description": "Language codes of translations to be deleted.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "relationNumber": {
            "example": 1,
            "readOnly": false,
            "description": "Relation number",
            "type": "integer",
            "format": "int32"
          },
          "relationType": {
            "$ref": "#/components/schemas/RelationType"
          }
        },
        "description": "Product relation translations."
      },
      "TranslationValue_PropertyValue": {
        "type": "object",
        "title": "TranslationValue",
        "properties": {
          "languageCode": {
            "readOnly": false,
            "description": "The language code of the language used for the translation",
            "type": "string",
            "example": "..."
          },
          "propertyValue": {
            "readOnly": false,
            "description": "The translated value of the property. Leave this empty to delete the translation for the given language",
            "type": "string",
            "example": "..."
          },
          "propertyValueDescription": {
            "readOnly": false,
            "description": "The translated description of the property",
            "type": "string",
            "example": "..."
          }
        },
        "description": "The translations for the value"
      },
      "TranslationValue": {
        "type": "object",
        "title": "TranslationValue",
        "properties": {
          "languageCode": {
            "readOnly": false,
            "description": "The language code of the language used for the translation",
            "type": "string",
            "example": "..."
          },
          "propertyValue": {
            "readOnly": false,
            "description": "The translated name of the property value",
            "type": "string",
            "example": "..."
          },
          "propertyValueDescription": {
            "readOnly": false,
            "description": "The translated description of the property description",
            "type": "string",
            "example": "..."
          }
        },
        "description": "The translation for a property value"
      },
      "Type": {
        "type": "string",
        "title": "Type",
        "enum": [
          "Front",
          "Back",
          "List",
          "Related",
          "Search",
          "Tech",
          "Internal",
          "Extra"
        ],
        "description": "Represents media type"
      },
      "UpcomingDeliveries": {
        "type": "object",
        "title": "UpcomingDeliveries",
        "properties": {
          "cancelled": {
            "example": false,
            "readOnly": false,
            "description": "Whether the delivery is cancelled or not.",
            "type": "boolean"
          },
          "estimatedDeliveryDate": {
            "example": "2024-04-02",
            "readOnly": false,
            "description": "The estimated delivery date of the delivery.",
            "type": "string",
            "format": "date"
          },
          "products": {
            "readOnly": false,
            "description": "The products of the upcoming delivery.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionDeliveryProduct"
            }
          }
        },
        "description": "Upcoming deliveries"
      },
      "UpdateCustomerRequest": {
        "type": "object",
        "title": "UpdateCustomer",
        "properties": {
          "alternativeEmailAddress": {
            "readOnly": false,
            "description": "If set, the email address will be updated.",
            "type": "string",
            "example": "..."
          },
          "cellphone": {
            "readOnly": false,
            "description": "If set, the cell phone number will be updated.",
            "type": "string",
            "example": "..."
          },
          "companyName": {
            "readOnly": false,
            "description": "If set, the company name will be updated. Note that only B2B customer can change this.",
            "type": "string",
            "example": "..."
          },
          "consents": {
            "readOnly": false,
            "description": "If set, the consents will be updated.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerConsent_CustomerAPI"
            }
          },
          "contactPerson": {
            "readOnly": false,
            "description": "If set, the name of a contact person will be updated.",
            "type": "string",
            "example": "..."
          },
          "deliveryAddress": {
            "$ref": "#/components/schemas/Address_address"
          },
          "emailAddress": {
            "readOnly": false,
            "description": "If set, the email address will be updated.",
            "type": "string",
            "example": "..."
          },
          "firstName": {
            "readOnly": false,
            "description": "If set, the first name will be updated.",
            "type": "string",
            "example": "..."
          },
          "invoiceAddress": {
            "$ref": "#/components/schemas/LocalAddress"
          },
          "lastName": {
            "readOnly": false,
            "description": "If set, the last name will be updated.",
            "type": "string",
            "example": "..."
          },
          "organizationNumber": {
            "readOnly": false,
            "description": "If set, the organization number will be updated. Note that only B2B customer can change this.",
            "type": "string",
            "example": "..."
          },
          "password": {
            "$ref": "#/components/schemas/UpdatePassword"
          },
          "providerParameters": {
            "readOnly": false,
            "description": "If set, custom parameters will be forwarded to the service provider (e.g. trueFriends, consentMemberTerms for Voyado).",
            "type": "object",
            "additionalProperties": {
              "type": "object"
            },
            "example": {
              "property1": {},
              "property2": {}
            }
          },
          "socialSecurityNumber": {
            "readOnly": false,
            "description": "If set, the social security number will be updated.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Request object for updating a customer."
      },
      "UpdatePassword": {
        "type": "object",
        "title": "UpdatePassword",
        "properties": {
          "currentPassword": {
            "readOnly": false,
            "description": "The current password of the customer. Needed to confirm the update of the password.",
            "type": "string",
            "example": "..."
          },
          "newPassword": {
            "readOnly": false,
            "description": "The new password to set. Notice that we only accept a single password value here, so it is recommended to perform a confirmation check on\nthe API client side before passing it to this API.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Contains information for updating the customer password. To update the customer password, the current password is required."
      },
      "UseAttributeX": {
        "type": "string",
        "title": "UseAttributeX",
        "enum": [
          "NOT_APPLICABLE",
          "SINGLE_SELECT",
          "MULTI_SELECT"
        ],
        "description": "Specifies if and how many variants may be selected for a subscription"
      },
      "Value": {
        "type": "object",
        "title": "Value",
        "required": [
          "valueId"
        ],
        "properties": {
          "internalValue": {
            "readOnly": false,
            "description": "The internal value",
            "type": "string",
            "example": "..."
          },
          "value": {
            "readOnly": false,
            "description": "The translated value",
            "type": "string",
            "example": "..."
          },
          "valueId": {
            "readOnly": false,
            "description": "The id of the value",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Represents a customer property value."
      },
      "ValueToDelete": {
        "type": "object",
        "title": "ValueToDelete",
        "properties": {
          "propertyValue": {
            "readOnly": false,
            "description": "The property value to delete.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "The values to delete"
      },
      "VoucherLookupRequest": {
        "type": "object",
        "title": "VoucherLookupRequest",
        "required": [
          "paymentMethodId"
        ],
        "properties": {
          "countryCode": {
            "readOnly": false,
            "description": "The country to look the voucher up for, since voucher providers are configured per country. Only used when looking a voucher up on its own.\nWhen a voucher is added to a shopcart the country of the shopcart is used instead.",
            "type": "string",
            "example": "..."
          },
          "maxAmount": {
            "readOnly": false,
            "description": "The largest amount that may be used from the voucher.",
            "type": "number"
          },
          "parameters": {
            "readOnly": false,
            "description": "Provides extra parameters to the provider. For example, it can say what type of number it is, a phone number or a card number.\n\u003cp\u003e\nKnown parameters:\n\u003cul\u003e\n\u003cli\u003eRetain 24, \u003ccode\u003etype\u003c/code\u003e: \u003ccode\u003ecardNumber\u003c/code\u003e (default) or \u003ccode\u003ephoneNumber\u003c/code\u003e\n\u003c/ul\u003e\n\u003c/p\u003e",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "property1": "...",
              "property2": "..."
            }
          },
          "paymentMethodId": {
            "readOnly": false,
            "description": "The payment method of the voucher provider.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "shopcartId": {
            "readOnly": false,
            "description": "The shopcart the voucher is added to. Set by the server from the path when adding a voucher to a shopcart, so there is no need to send it.\nNot used when looking a voucher up on its own.",
            "type": "string",
            "example": "..."
          },
          "verificationCode": {
            "readOnly": false,
            "description": "The verification code for the voucher, if required by the provider. Could for example be a PIN code.",
            "type": "string",
            "example": "..."
          },
          "voucherNumber": {
            "readOnly": false,
            "description": "The number for the voucher to look up. Serves as identifier.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Represents a request to look up a voucher (for example a gift card or a bonus check)."
      },
      "VoucherLookupResponse": {
        "type": "object",
        "title": "VoucherLookupResponse",
        "properties": {
          "amountAvailable": {
            "readOnly": false,
            "description": "The available amount of money on this voucher.",
            "type": "number",
            "example": 12345
          },
          "comment": {
            "readOnly": false,
            "description": "Free text about the voucher from the provider, for example a message to the receiver or the reason\na gift card is in its current state. Empty when the provider does not expose any text.",
            "type": "string",
            "example": "..."
          },
          "validTo": {
            "readOnly": false,
            "description": "The last date the voucher can be used. 1900-01-01 when the provider does not\nexpose an expiry date.",
            "type": "string",
            "format": "date",
            "example": "..."
          },
          "voucherNumber": {
            "readOnly": false,
            "description": "The number of the voucher. Serves as identifier.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "The result of looking a voucher up on its own, for example when a customer checks the balance of a gift card. Only the properties that describe the\nvoucher itself are exposed. The properties that only make sense once the voucher is added to a shopcart are left out, as is the verification code,\nwhich there is no reason to send back to the caller."
      },
      "VoucherType": {
        "type": "string",
        "title": "VoucherType",
        "enum": [
          "STANDARD",
          "OFFER_TRIGGER",
          "BONUS_CHECK"
        ],
        "description": ""
      },
      "Warehouse_WarehouseAPI": {
        "type": "object",
        "title": "Warehouse",
        "required": [
          "warehouseId"
        ],
        "properties": {
          "warehouseId": {
            "readOnly": false,
            "description": "The internal identifier of the warehouse.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "warehouseName": {
            "readOnly": false,
            "description": "The public name of the warehouse.",
            "type": "string",
            "example": "..."
          },
          "warehouseNumber": {
            "readOnly": false,
            "description": "The public number of the warehouse.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "Warehouse"
      },
      "Warehouse_ReturnAPI": {
        "type": "object",
        "title": "Warehouse",
        "required": [
          "warehouseId"
        ],
        "properties": {
          "warehouseId": {
            "readOnly": false,
            "description": "The identifier of the warehouse of the return.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "warehouseName": {
            "readOnly": false,
            "description": "The name of the warehouse of the return.",
            "type": "string",
            "example": "..."
          },
          "warehouseNumber": {
            "readOnly": false,
            "description": "The number of the warehouse of the return. Mutually exclusive with WarehouseId",
            "type": "string",
            "example": "..."
          }
        },
        "description": "The warehouse of a return."
      },
      "Warehouse": {
        "type": "object",
        "title": "Warehouse",
        "required": [
          "warehouseId"
        ],
        "properties": {
          "warehouseId": {
            "readOnly": false,
            "description": "The internal identifier of the warehouse.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "warehouseName": {
            "readOnly": false,
            "description": "The external name of the warehouse. Mutually exclusive with warehouseNumber.",
            "type": "string",
            "example": "..."
          },
          "warehouseNumber": {
            "readOnly": false,
            "description": "The identifying number for the warehouse. Mutually exclusive with warehouseId.",
            "type": "string",
            "example": "..."
          }
        },
        "description": "The warehouse for the purchase order."
      },
      "WarehouseResult": {
        "type": "object",
        "title": "WarehouseResult",
        "required": [
          "page",
          "pagesLeft",
          "totalHits"
        ],
        "properties": {
          "hits": {
            "readOnly": false,
            "description": "The warehouses in this page.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Warehouse_WarehouseAPI"
            }
          },
          "page": {
            "readOnly": false,
            "description": "The page retrieved.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "pagesLeft": {
            "readOnly": false,
            "description": "The number of pages that remain.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          },
          "searchId": {
            "readOnly": false,
            "description": "The identifier of the search. Used to get more pages.",
            "type": "string",
            "example": "..."
          },
          "totalHits": {
            "readOnly": false,
            "description": "The total number of hits for the search.",
            "type": "integer",
            "format": "int32",
            "example": 12345
          }
        },
        "description": "Holds a search result of warehouse."
      },
      "MyPagesWishlistRequest": {
        "type": "object",
        "title": "Wishlist",
        "properties": {
          "name": {
            "example": "Wishlist Name",
            "readOnly": false,
            "description": "The name of the wishlist.",
            "type": "string"
          },
          "products": {
            "readOnly": false,
            "description": "The products in the wishlist.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MyPagesWishlistProductRequest"
            }
          }
        },
        "description": "Request object for saving a wishlist."
      },
      "MyPagesWishlistResponse": {
        "type": "object",
        "title": "Wishlist",
        "properties": {
          "name": {
            "example": "My Wishlist",
            "readOnly": false,
            "description": "The name of the wishlist.",
            "type": "string"
          },
          "products": {
            "readOnly": false,
            "description": "The products in the wishlist.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MyPagesWishlistProductResponse"
            }
          },
          "wishlistId": {
            "example": "1797a278-fc75-48f9-b814-bb674d64abbb",
            "readOnly": false,
            "description": "The \u003ccode\u003euuid\u003c/code\u003e of the wishlist.",
            "type": "string"
          }
        },
        "description": "Response object for a wishlist."
      },
      "MyPagesWishlistIdResponse": {
        "type": "object",
        "title": "WishlistId",
        "properties": {
          "wishlistId": {
            "example": "1797a278-fc75-48f9-b814-bb674d64abbb",
            "readOnly": false,
            "description": "The \u003ccode\u003euuid\u003c/code\u003e of the wishlist.",
            "type": "string"
          }
        },
        "description": "Response object for the ID of a wishlist."
      },
      "MyPagesWishlistNameRequest": {
        "type": "object",
        "title": "WishlistName",
        "properties": {
          "name": {
            "example": "New Name",
            "readOnly": false,
            "description": "The new name for the wishlist.",
            "type": "string"
          }
        },
        "description": "Request object for updating the name of a wishlist."
      },
      "JournalItem": {
        "type": "object",
        "properties": {
          "number": {
            "type": "string",
            "description": "The journal number.",
            "example": "INV-2025-00001"
          },
          "type": {
            "type": "string",
            "description": "The journal type: INVOICE or PAYMENT.",
            "enum": [
              "INVOICE",
              "PAYMENT"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the journal was created."
          },
          "rows": {
            "type": "array",
            "description": "The accounting rows that belong to this journal.",
            "items": {
              "$ref": "#/components/schemas/JournalRowItem"
            }
          }
        }
      },
      "JournalRowItem": {
        "type": "object",
        "properties": {
          "currencyCode": {
            "type": "string",
            "description": "ISO 4217 currency code.",
            "example": "SEK"
          },
          "countryCode": {
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code. Null when grouping on country is not used.",
            "x-viskan-nullable": "true"
          },
          "accountNumber": {
            "type": "string",
            "description": "Account number.",
            "example": "3001"
          },
          "clubName": {
            "type": "string",
            "description": "Club name. Null when grouping on club is not used.",
            "x-viskan-nullable": "true"
          },
          "accountDescription": {
            "type": "string",
            "description": "Description of the account number."
          },
          "taxRate": {
            "type": "number",
            "description": "VAT / tax rate as a decimal fraction, e.g. 0.25 for 25%.",
            "example": 0.25
          },
          "amount": {
            "type": "number",
            "description": "Net amount for this grouping. Rows with a zero net amount are excluded."
          }
        }
      },
      "PeriodItem": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "description": "Description of the accounting period, e.g. \u00272025-09\u0027.",
            "example": "2025-09"
          },
          "dateFrom": {
            "type": "string",
            "format": "date",
            "description": "First day of the accounting period."
          },
          "dateTo": {
            "type": "string",
            "format": "date",
            "description": "Last day of the accounting period."
          },
          "journals": {
            "type": "array",
            "description": "The journals that belong to this period.",
            "items": {
              "$ref": "#/components/schemas/JournalItem"
            }
          }
        }
      },
      "AggregationBucket": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "The bucket key."
          },
          "count": {
            "type": "integer",
            "format": "int64",
            "description": "Number of logs in the bucket.",
            "example": 42
          }
        }
      },
      "RequestLogResult": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of logs matching the query.",
            "example": 1234
          },
          "logs": {
            "type": "array",
            "description": "The logs in the current page, ordered from newest to oldest.",
            "items": {
              "$ref": "#/components/schemas/ResultLog"
            }
          },
          "searchAfter": {
            "type": "string",
            "description": "Cursor to pass as \u003ccode\u003esearchAfter\u003c/code\u003e in a subsequent request to fetch the next page. \u003ccode\u003enull\u003c/code\u003e when there are no more pages."
          },
          "aggregations": {
            "$ref": "#/components/schemas/Aggregations_2",
            "description": "Aggregations over the full result set, useful for building filter facets."
          }
        }
      },
      "ResultLog": {
        "type": "object",
        "properties": {
          "logId": {
            "type": "string",
            "description": "Unique identifier of the log entry."
          },
          "loggedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The timestamp at which the request was logged."
          },
          "clientId": {
            "type": "string",
            "description": "Identifier of the client that made the request.",
            "example": "isv_my_integration"
          },
          "pathPattern": {
            "type": "string",
            "description": "The API path pattern matched by the request.",
            "example": "/orders/{orderId}"
          },
          "path": {
            "type": "string",
            "description": "The actual request URL path.",
            "example": "/orders/4711"
          },
          "method": {
            "type": "string",
            "description": "The HTTP method used.",
            "example": "GET"
          },
          "query": {
            "type": "string",
            "description": "The raw query string of the request, if any.",
            "example": "limit\u003d20\u0026offset\u003d0"
          },
          "correlationId": {
            "type": "string",
            "description": "Correlation (trace) identifier for the request."
          },
          "remoteAddress": {
            "type": "string",
            "description": "IP address of the client that made the request.",
            "example": "203.0.113.42"
          },
          "requestTime": {
            "type": "number",
            "description": "Time spent processing the request, in seconds.",
            "example": 0.123
          },
          "statusCode": {
            "type": "integer",
            "format": "int32",
            "description": "HTTP response status code.",
            "example": 200
          }
        }
      },
      "Aggregations_2": {
        "type": "object",
        "properties": {
          "clientId": {
            "type": "array",
            "description": "Buckets grouped by client identifier.",
            "items": {
              "$ref": "#/components/schemas/AggregationBucket"
            }
          },
          "method": {
            "type": "array",
            "description": "Buckets grouped by HTTP method.",
            "items": {
              "$ref": "#/components/schemas/AggregationBucket"
            }
          },
          "pathPattern": {
            "type": "array",
            "description": "Buckets grouped by API path pattern.",
            "items": {
              "$ref": "#/components/schemas/AggregationBucket"
            }
          },
          "statusCode": {
            "type": "array",
            "description": "Buckets grouped by HTTP response status code.",
            "items": {
              "$ref": "#/components/schemas/AggregationBucket"
            }
          }
        }
      },
      "CreateReturnReasonRequest": {
        "type": "object",
        "properties": {
          "reasonCode": {
            "type": "string",
            "description": "Short code identifying the reason (e.g. \u0027RET01\u0027). Must be unique per company."
          },
          "reasonDesc": {
            "type": "string",
            "description": "Human-readable description of the reason."
          },
          "reasonType": {
            "type": "string",
            "description": "Type of return reason.",
            "enum": [
              "RETURN",
              "COMPLAINT",
              "CREDIT",
              "UNDISCHARGED"
            ]
          },
          "active": {
            "type": "boolean",
            "description": "Whether the reason is active and selectable."
          },
          "requiresReview": {
            "type": "boolean",
            "description": "Whether returns using this reason require manual review before processing."
          },
          "increaseStock": {
            "type": "boolean",
            "description": "Whether returned items are put back in stock."
          },
          "daysToReturn": {
            "type": "integer",
            "format": "int32",
            "description": "Maximum days after purchase that a return is allowed. 0 means no limit."
          },
          "penaltyArticleId": {
            "type": "integer",
            "format": "int32",
            "description": "Article ID charged as a penalty fee on the return. -1 means no penalty article."
          },
          "completeReturn": {
            "type": "boolean",
            "description": "Whether the entire order is returned (all lines), not just selected lines."
          },
          "telemarketingCredit": {
            "type": "boolean",
            "description": "Whether the return should generate a telemarketing credit note."
          },
          "deactivateSubscription": {
            "type": "boolean",
            "description": "Whether the customer\u0027s subscription should be deactivated on return."
          },
          "cancellationReasonId": {
            "type": "integer",
            "format": "int32",
            "description": "ID of the cancellation reason linked to this return reason. -1 means no cancellation reason."
          },
          "translations": {
            "type": "array",
            "description": "Language-specific descriptions for the reason.",
            "items": {
              "$ref": "#/components/schemas/ReturnReasonTranslationRow"
            }
          },
          "defaults": {
            "type": "array",
            "description": "Country/delivery-method default settings for this reason.",
            "items": {
              "$ref": "#/components/schemas/ReturnReasonDefaultRow"
            }
          },
          "entries": {
            "type": "array",
            "description": "In-store arrival methods allowed for this reason.",
            "items": {
              "$ref": "#/components/schemas/ReturnReasonEntryRow"
            }
          }
        }
      },
      "ReturnReasonDefaultRow": {
        "type": "object",
        "properties": {
          "returnReasonDefaultId": {
            "type": "integer",
            "format": "int32",
            "description": "Surrogate ID of this default row. Required for rows in the modified list; omit or null for new rows in the added list."
          },
          "countryId": {
            "type": "integer",
            "format": "int32",
            "description": "ID of the country this default applies to."
          },
          "wayOfDeliveryId": {
            "type": "integer",
            "format": "int32",
            "description": "ID of the way of delivery. -1 means all delivery methods."
          },
          "returnFee": {
            "type": "number",
            "description": "Fee charged to the customer for the return."
          },
          "clearShippingFee": {
            "type": "boolean",
            "description": "Clear the shipping fee from the return credit."
          },
          "clearPaymentFee": {
            "type": "boolean",
            "description": "Clear the payment fee from the return credit."
          },
          "clearServiceFee": {
            "type": "boolean",
            "description": "Clear the service fee from the return credit."
          },
          "clearRounding": {
            "type": "boolean",
            "description": "Clear the rounding amount from the return credit."
          },
          "clearDiscount": {
            "type": "boolean",
            "description": "Clear the discount amount from the return credit."
          },
          "clearAmountClaim": {
            "type": "boolean",
            "description": "Clear the amount claim from the return credit."
          },
          "clearQuantity": {
            "type": "boolean",
            "description": "Clear the returned quantity."
          }
        }
      },
      "ReturnReasonEntryRow": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "integer",
            "format": "int32",
            "description": "ID of the InStore arrival method entry."
          }
        }
      },
      "ReturnReasonTranslationRow": {
        "type": "object",
        "properties": {
          "languageId": {
            "type": "integer",
            "format": "int32",
            "description": "ID of the language this translation applies to."
          },
          "description": {
            "type": "string",
            "description": "Translated description of the reason in the given language."
          }
        }
      },
      "CreateReturnReasonResponse": {
        "type": "object",
        "properties": {
          "reasonId": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "CreatePriceListRequest": {
        "type": "object",
        "properties": {
          "priceListName": {
            "type": "string",
            "description": "The name of the price list.",
            "example": "Standard"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the price list is active and can be used. Defaults to \u003ccode\u003etrue\u003c/code\u003e.",
            "example": true
          }
        }
      },
      "CreatePriceListResponse": {
        "type": "object",
        "properties": {
          "priceListId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the created price list.",
            "example": 1
          }
        }
      },
      "CreateMultiBrandRequest": {
        "type": "object",
        "properties": {
          "multiBrandName": {
            "type": "string",
            "description": "The name of the multi brand.",
            "example": "Acme"
          },
          "icon": {
            "type": "string",
            "description": "The base64-encoded icon (PNG or SVG) of the multi brand. Leave empty for no icon. Defaults to an empty string."
          },
          "active": {
            "type": "boolean",
            "description": "Whether the multi brand is active and can be used. Defaults to \u003ccode\u003etrue\u003c/code\u003e.",
            "example": true
          }
        }
      },
      "CreateMultiBrandResponse": {
        "type": "object",
        "properties": {
          "multiBrandId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the created multi brand.",
            "example": 1
          }
        }
      },
      "DefaultModifications": {
        "type": "object",
        "properties": {
          "added": {
            "type": "array",
            "description": "New default rows to insert. returnReasonDefaultId must be omitted or null.",
            "items": {
              "$ref": "#/components/schemas/ReturnReasonDefaultRow"
            }
          },
          "modified": {
            "type": "array",
            "description": "Existing default rows to update. Each must include returnReasonDefaultId.",
            "items": {
              "$ref": "#/components/schemas/ReturnReasonDefaultRow"
            }
          },
          "removed": {
            "type": "array",
            "description": "String representations of returnReasonDefaultId values to delete (e.g. \"123\").",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "EntryModifications": {
        "type": "object",
        "properties": {
          "added": {
            "type": "array",
            "description": "New arrival method entry IDs to insert.",
            "items": {
              "$ref": "#/components/schemas/ReturnReasonEntryRow"
            }
          },
          "removed": {
            "type": "array",
            "description": "Entry IDs to delete.",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          }
        }
      },
      "TranslationModifications": {
        "type": "object",
        "properties": {
          "added": {
            "type": "array",
            "description": "New translation rows to insert.",
            "items": {
              "$ref": "#/components/schemas/ReturnReasonTranslationRow"
            }
          },
          "modified": {
            "type": "array",
            "description": "Existing translation rows to update. Each must include the language ID.",
            "items": {
              "$ref": "#/components/schemas/ReturnReasonTranslationRow"
            }
          },
          "removed": {
            "type": "array",
            "description": "Language IDs of translation rows to delete.",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          }
        }
      },
      "UpdateReturnReasonRequest": {
        "type": "object",
        "description": "Partial update for a return reason. Omit or null any scalar field to leave it unchanged. Omit a sub-table object entirely to leave that sub-table untouched.",
        "properties": {
          "reasonCode": {
            "type": "string",
            "description": "Short code identifying the reason. Null means no change."
          },
          "reasonDesc": {
            "type": "string",
            "description": "Human-readable description of the reason. Null means no change."
          },
          "reasonType": {
            "type": "string",
            "description": "Type of return reason. Null means no change.",
            "enum": [
              "RETURN",
              "COMPLAINT",
              "CREDIT",
              "UNDISCHARGED"
            ]
          },
          "active": {
            "type": "boolean",
            "description": "Whether the reason is active. Null means no change."
          },
          "requiresReview": {
            "type": "boolean",
            "description": "Whether returns require manual review. Null means no change."
          },
          "increaseStock": {
            "type": "boolean",
            "description": "Whether returned items are put back in stock. Null means no change."
          },
          "daysToReturn": {
            "type": "integer",
            "format": "int32",
            "description": "Maximum days after purchase that a return is allowed. 0 means no limit. Null means no change."
          },
          "penaltyArticleId": {
            "type": "integer",
            "format": "int32",
            "description": "Article ID charged as a penalty fee. -1 means no penalty article. Null means no change."
          },
          "completeReturn": {
            "type": "boolean",
            "description": "Whether the entire order is returned. Null means no change."
          },
          "telemarketingCredit": {
            "type": "boolean",
            "description": "Whether to generate a telemarketing credit note. Null means no change."
          },
          "deactivateSubscription": {
            "type": "boolean",
            "description": "Whether to deactivate the customer\u0027s subscription on return. Null means no change."
          },
          "cancellationReasonId": {
            "type": "integer",
            "format": "int32",
            "description": "ID of the linked cancellation reason. -1 means no cancellation reason. Null means no change."
          },
          "translations": {
            "$ref": "#/components/schemas/TranslationModifications",
            "description": "Diff for language-specific descriptions. Null means no change to translations."
          },
          "defaults": {
            "$ref": "#/components/schemas/DefaultModifications",
            "description": "Diff for country/delivery-method default settings. Null means no change to defaults."
          },
          "entries": {
            "$ref": "#/components/schemas/EntryModifications",
            "description": "Diff for in-store arrival methods. Null means no change to entries."
          }
        }
      },
      "UpdatePriceListRequest": {
        "type": "object",
        "properties": {
          "priceListName": {
            "type": "string",
            "description": "The name to give the price list, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": "Standard"
          },
          "active": {
            "type": "boolean",
            "description": "Whether to set the price list as active or inactive, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": true
          }
        }
      },
      "UpdatePhysicalStoreRequest": {
        "type": "object",
        "properties": {
          "ipWhitelist": {
            "type": "array",
            "description": "The CIDR ranges allowed to act as this store, replacing the existing whitelist, or \u003ccode\u003enull\u003c/code\u003e to not update it. An empty list clears it.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "PhysicalStoreItem": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "format": "uuid",
            "description": "Public unique identifier of the store."
          },
          "storeNumber": {
            "type": "string",
            "description": "External store number."
          },
          "name": {
            "type": "string",
            "description": "Name of the store."
          },
          "active": {
            "type": "boolean",
            "description": "Whether the store is active."
          },
          "ipWhitelist": {
            "type": "array",
            "description": "CIDR ranges allowed to act as this store.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "UpdateMultiBrandRequest": {
        "type": "object",
        "properties": {
          "multiBrandName": {
            "type": "string",
            "description": "The name to give the multi brand, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": "Acme"
          },
          "icon": {
            "type": "string",
            "description": "The base64-encoded icon (PNG or SVG) to set, or \u003ccode\u003enull\u003c/code\u003e to not update it. An empty string removes the icon."
          },
          "active": {
            "type": "boolean",
            "description": "Whether to set the multi brand as active or inactive, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": true
          }
        }
      },
      "HelpdeskLabelItem": {
        "type": "object",
        "properties": {
          "labelId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the label, as set in a ticket\u0027s labels.",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "The name of the label.",
            "example": "Returns"
          },
          "description": {
            "type": "string",
            "description": "What the label is used for; may be an empty string.",
            "example": "The ticket is related to a return."
          },
          "color": {
            "type": "string",
            "description": "The color of the label as a CSS hex code, #rgb or #rrggbb.",
            "example": "#6699cc"
          }
        }
      },
      "ServiceProviderConfigurationSearchResult": {
        "type": "object",
        "properties": {
          "hits": {
            "type": "array",
            "description": "The found service provider configurations.",
            "items": {
              "$ref": "#/components/schemas/ServiceProviderConfiguration_2"
            }
          }
        }
      },
      "ReturnReasonItem": {
        "type": "object",
        "properties": {
          "reasonId": {
            "type": "integer",
            "format": "int32",
            "description": "Surrogate ID of the return reason."
          },
          "reasonCode": {
            "type": "string",
            "description": "Short code identifying the reason (e.g. \u0027RET01\u0027)."
          },
          "reasonDesc": {
            "type": "string",
            "description": "Human-readable description of the reason."
          },
          "reasonType": {
            "type": "string",
            "description": "Type of return reason.",
            "enum": [
              "RETURN",
              "COMPLAINT",
              "CREDIT",
              "UNDISCHARGED"
            ]
          },
          "active": {
            "type": "boolean",
            "description": "Whether the reason is active and selectable."
          }
        }
      },
      "ReturnReasonDetail": {
        "type": "object",
        "properties": {
          "reasonId": {
            "type": "integer",
            "format": "int32",
            "description": "Surrogate ID of the return reason."
          },
          "reasonCode": {
            "type": "string",
            "description": "Short code identifying the reason (e.g. \u0027RET01\u0027)."
          },
          "reasonDesc": {
            "type": "string",
            "description": "Human-readable description of the reason."
          },
          "reasonType": {
            "type": "string",
            "description": "Type of return reason.",
            "enum": [
              "RETURN",
              "COMPLAINT",
              "CREDIT",
              "UNDISCHARGED"
            ]
          },
          "active": {
            "type": "boolean",
            "description": "Whether the reason is active and selectable."
          },
          "requiresReview": {
            "type": "boolean",
            "description": "Whether returns using this reason require manual review before processing."
          },
          "increaseStock": {
            "type": "boolean",
            "description": "Whether returned items are put back in stock."
          },
          "daysToReturn": {
            "type": "integer",
            "format": "int32",
            "description": "Maximum days after purchase that a return is allowed. 0 means no limit."
          },
          "penaltyArticleId": {
            "type": "integer",
            "format": "int32",
            "description": "Article ID charged as a penalty fee on the return. -1 means no penalty article."
          },
          "completeReturn": {
            "type": "boolean",
            "description": "Whether the entire order is returned (all lines), not just selected lines."
          },
          "telemarketingCredit": {
            "type": "boolean",
            "description": "Whether the return generates a telemarketing credit note."
          },
          "deactivateSubscription": {
            "type": "boolean",
            "description": "Whether the customer\u0027s subscription is deactivated on return."
          },
          "cancellationReasonId": {
            "type": "integer",
            "format": "int32",
            "description": "ID of the cancellation reason linked to this return reason. -1 means no cancellation reason."
          },
          "translations": {
            "type": "array",
            "description": "Language-specific descriptions for the reason.",
            "items": {
              "$ref": "#/components/schemas/ReturnReasonTranslationRow"
            }
          },
          "defaults": {
            "type": "array",
            "description": "Country/delivery-method default settings for this reason.",
            "items": {
              "$ref": "#/components/schemas/ReturnReasonDefaultRow"
            }
          },
          "entries": {
            "type": "array",
            "description": "In-store arrival methods allowed for this reason.",
            "items": {
              "$ref": "#/components/schemas/ReturnReasonEntryRow"
            }
          }
        }
      },
      "PriceListItem": {
        "type": "object",
        "properties": {
          "priceListId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the price list.",
            "example": 1
          },
          "priceListName": {
            "type": "string",
            "description": "The name of the price list.",
            "example": "Standard"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the price list is active and can be used.",
            "example": true
          }
        }
      },
      "MultiBrandItem": {
        "type": "object",
        "properties": {
          "multiBrandId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the multi brand.",
            "example": 1
          },
          "multiBrandName": {
            "type": "string",
            "description": "The name of the multi brand.",
            "example": "Acme"
          },
          "icon": {
            "type": "string",
            "description": "The base64-encoded icon (PNG or SVG) of the multi brand, or an empty string if none is set."
          },
          "active": {
            "type": "boolean",
            "description": "Whether the multi brand is active and can be used.",
            "example": true
          }
        }
      },
      "ServiceProvider_2": {
        "type": "object",
        "properties": {
          "serviceProviderCode": {
            "type": "string",
            "description": "The internal code of the service provider.",
            "example": "klarna"
          },
          "serviceProviderName": {
            "type": "string",
            "description": "The translated name of the service provider, or the raw translation key when no translation exists.",
            "example": "Klarna"
          },
          "serviceProviderDescription": {
            "type": "string",
            "description": "The translated description of the service provider, or the raw translation key when no translation exists.",
            "example": "Klarna payments"
          }
        }
      },
      "ServiceProviderConfiguration_2": {
        "type": "object",
        "properties": {
          "serviceProviderConfigId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the service provider configuration.",
            "example": 1
          },
          "serviceProviderConfigName": {
            "type": "string",
            "description": "The internal name of the configuration.",
            "example": "Default Klarna"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the configuration is active.",
            "example": true
          },
          "serviceProvider": {
            "$ref": "#/components/schemas/ServiceProvider_2",
            "description": "The service provider that the configuration is for."
          }
        }
      },
      "Unassign": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "format": "int64",
            "description": "The current version of the ticket.",
            "example": 7
          }
        }
      },
      "Activity": {
        "type": "object",
        "properties": {
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "When the activity occurred.",
            "example": "2025-09-11T08:16:02Z"
          },
          "type": {
            "type": "string",
            "description": "Type of activity.",
            "enum": [
              "ASSIGN",
              "UNASSIGN",
              "ADD_LABELS",
              "REMOVE_LABELS",
              "CONNECT_CUSTOMER",
              "DISCONNECT_CUSTOMER",
              "SET_RESOLUTION",
              "FORWARD"
            ],
            "example": "SET_RESOLUTION"
          },
          "centralUserId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the user that triggered the activity, or \u003ccode\u003enull\u003c/code\u003e if it was triggered by an automation.",
            "example": 55
          },
          "data": {
            "type": "object",
            "additionalProperties": {},
            "description": "Additional activity data as key/value map."
          }
        }
      },
      "Message": {
        "type": "object",
        "properties": {
          "receivedAt": {
            "type": "string",
            "format": "date-time",
            "deprecated": true,
            "description": "When the message was received.",
            "example": "2025-09-11T08:15:30Z"
          },
          "direction": {
            "type": "string",
            "description": "Message direction.",
            "enum": [
              "INBOUND",
              "OUTBOUND",
              "AUTO_REPLY"
            ],
            "example": "INBOUND"
          },
          "messageId": {
            "type": "string",
            "description": "The identifier of the message.",
            "example": "\u003cgenerated@id\u003e"
          },
          "mailSendId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the sent email. Only applicable to outgoing messages.",
            "example": "c2277230-b0d2-4684-92b8-55c76cc759e5"
          },
          "senderName": {
            "type": "string",
            "description": "Sender display name.",
            "example": "Jane Smith"
          },
          "senderAddress": {
            "type": "string",
            "description": "Sender email address.",
            "example": "jane@example.com"
          },
          "replyTo": {
            "type": "string",
            "description": "Reply-To address.",
            "example": "greg@example.com"
          },
          "deliveredTo": {
            "type": "string",
            "description": "Delivered-To address.",
            "example": "support@example.com"
          },
          "recipients": {
            "type": "array",
            "description": "To recipients.",
            "example": [
              "support@example.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "recipientsCC": {
            "type": "array",
            "description": "CC recipients.",
            "items": {
              "type": "string"
            }
          },
          "recipientsBCC": {
            "type": "array",
            "description": "BCC recipients.",
            "items": {
              "type": "string"
            }
          },
          "subject": {
            "type": "string",
            "description": "Subject line.",
            "example": "Re: Your order"
          },
          "contentType": {
            "type": "string",
            "description": "Body content type."
          },
          "body": {
            "type": "string"
          },
          "attachments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attachment_2"
            }
          },
          "jobConfigId": {
            "type": "integer",
            "format": "int32"
          },
          "verifiedDomain": {
            "type": "boolean"
          }
        }
      },
      "DisconnectCustomer": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "format": "int64",
            "description": "The current version of the ticket.",
            "example": 7
          }
        }
      },
      "CreateTicketRequest": {
        "type": "object",
        "properties": {
          "receivedAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the message was received.",
            "example": "2025-09-11T08:15:30Z",
            "x-viskan-field-format": "offset-date-time"
          },
          "subject": {
            "type": "string",
            "description": "The subject line of the message.",
            "example": "Order inquiry"
          },
          "senderName": {
            "type": "string",
            "description": "The display name of the sender.",
            "example": "Jane Smith"
          },
          "senderAddress": {
            "type": "string",
            "description": "The email address of the sender.",
            "example": "jane@example.com"
          },
          "body": {
            "type": "string",
            "description": "The content of the message.",
            "example": "When will my order arrive?"
          },
          "contentType": {
            "type": "string",
            "description": "The content type of the body.",
            "example": "text/plain"
          },
          "replyTo": {
            "type": "string",
            "description": "The address to send replies to.",
            "example": "greg@example.com"
          },
          "deliveredTo": {
            "type": "string",
            "description": "The address that the message was delivered to.",
            "example": "support@example.com"
          },
          "recipients": {
            "type": "array",
            "description": "The \u003ccode\u003eTo\u003c/code\u003e recipients of the message.",
            "example": [
              "support@example.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "recipientsCC": {
            "type": "array",
            "description": "The \u003ccode\u003eCC\u003c/code\u003e recipients of the message.",
            "items": {
              "type": "string"
            }
          },
          "recipientsBCC": {
            "type": "array",
            "description": "The \u003ccode\u003eBCC\u003c/code\u003e recipients of the message.",
            "items": {
              "type": "string"
            }
          },
          "helpdeskAccountId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the Helpdesk account that the ticket belongs to. Set to \u003ccode\u003enull\u003c/code\u003e to leave it unset.",
            "example": 1
          },
          "customerId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the customer to connect the ticket to. Set to \u003ccode\u003enull\u003c/code\u003e to leave it unconnected.",
            "example": 352951
          },
          "autoReply": {
            "type": "boolean",
            "description": "Whether the message is an automatic reply. Defaults to \u003ccode\u003efalse\u003c/code\u003e.",
            "example": false
          }
        },
        "required": [
          "body",
          "contentType",
          "receivedAt",
          "senderAddress",
          "senderName",
          "subject"
        ]
      },
      "CreateTicketResponse": {
        "type": "object",
        "properties": {
          "ticketId": {
            "type": "string",
            "description": "The identifier of the created ticket.",
            "example": "a5a1b1a9-2ad0-4bb9-86b1-3fae3b1e3dc6",
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "MessageInfo": {
        "type": "object",
        "properties": {
          "receivedAt": {
            "type": "string",
            "format": "date-time",
            "deprecated": true,
            "description": "When the message was received.",
            "example": "2025-09-11T08:15:30Z"
          },
          "direction": {
            "type": "string",
            "description": "Message direction.",
            "enum": [
              "INBOUND",
              "OUTBOUND",
              "AUTO_REPLY"
            ],
            "example": "INBOUND"
          },
          "messageId": {
            "type": "string",
            "description": "The identifier of the message.",
            "example": "\u003cgenerated@id\u003e"
          },
          "mailSendId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the sent email. Only applicable to outgoing messages.",
            "example": "c2277230-b0d2-4684-92b8-55c76cc759e5"
          },
          "senderName": {
            "type": "string",
            "description": "Sender display name.",
            "example": "Jane Smith"
          },
          "senderAddress": {
            "type": "string",
            "description": "Sender email address.",
            "example": "jane@example.com"
          },
          "replyTo": {
            "type": "string",
            "description": "Reply-To address.",
            "example": "greg@example.com"
          },
          "deliveredTo": {
            "type": "string",
            "description": "Delivered-To address.",
            "example": "support@example.com"
          },
          "recipients": {
            "type": "array",
            "description": "To recipients.",
            "example": [
              "support@example.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "recipientsCC": {
            "type": "array",
            "description": "CC recipients.",
            "items": {
              "type": "string"
            }
          },
          "recipientsBCC": {
            "type": "array",
            "description": "BCC recipients.",
            "items": {
              "type": "string"
            }
          },
          "subject": {
            "type": "string",
            "description": "Subject line.",
            "example": "Re: Your order"
          },
          "contentType": {
            "type": "string",
            "description": "Body content type."
          },
          "numberOfAttachments": {
            "type": "integer",
            "format": "int32",
            "description": "Number of attachments in the message.",
            "example": 2
          }
        }
      },
      "TicketResponse": {
        "type": "object",
        "properties": {
          "ticketId": {
            "type": "string",
            "description": "Identifier of the ticket.",
            "example": "a5a1b1a9-2ad0-4bb9-86b1-3fae3b1e3dc6",
            "x-viskan-field-format": "uuid"
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "Version of the ticket document.",
            "example": 7
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the ticket was created.",
            "example": "2025-09-11T08:15:30Z",
            "x-viskan-field-format": "offset-date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the ticket was last modified.",
            "example": "2025-09-11T08:16:02Z",
            "x-viskan-field-format": "offset-date-time"
          },
          "customerId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the customer that this ticket is connected to, or \u003ccode\u003enull\u003c/code\u003e if it is not connected to a customer.",
            "example": 352951,
            "x-viskan-nullable": "true"
          },
          "ticketNumber": {
            "type": "string",
            "description": "External ticket number.",
            "example": "1001"
          },
          "helpdeskAccountId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the Helpdesk account that this ticket belongs to, or \u003ccode\u003enull\u003c/code\u003e if it does not belong to any account.",
            "example": 1,
            "x-viskan-nullable": "true"
          },
          "multiBrandId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the multibrand that this ticket belongs to.",
            "example": 1
          },
          "centralUserId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the assigned user, or \u003ccode\u003enull\u003c/code\u003e when unassigned.",
            "example": 41,
            "x-viskan-nullable": "true"
          },
          "resolution": {
            "type": "string",
            "description": "Ticket resolution state.",
            "enum": [
              "UNRESOLVED",
              "RESOLVED",
              "NO_ACTION_REQUIRED",
              "SPAM",
              "TRASH"
            ],
            "example": "UNRESOLVED"
          },
          "labels": {
            "type": "array",
            "description": "The labels set on this ticket.",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "autoReply": {
            "type": "boolean",
            "description": "Whether the latest update was an automatic reply.",
            "example": false
          },
          "activities": {
            "type": "array",
            "description": "History of ticket activities.",
            "items": {
              "$ref": "#/components/schemas/Activity"
            }
          },
          "messages": {
            "type": "array",
            "description": "Brief information about all messages of this ticket, without content or attachments.",
            "items": {
              "$ref": "#/components/schemas/MessageInfo"
            }
          }
        }
      },
      "PatchTicketRequest": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the customer to connect the ticket to. Set to \u003ccode\u003enull\u003c/code\u003e to keep unchanged.",
            "example": 352951
          },
          "resolution": {
            "type": "string",
            "description": "The resolution status of the ticket. Set to \u003ccode\u003enull\u003c/code\u003e to keep unchanged.",
            "enum": [
              "UNRESOLVED",
              "RESOLVED",
              "NO_ACTION_REQUIRED",
              "SPAM",
              "TRASH"
            ],
            "example": "UNRESOLVED"
          },
          "assignee": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the user to assign the ticket to. Set to \u003ccode\u003enull\u003c/code\u003e to keep unchanged.",
            "example": 41
          },
          "labels": {
            "type": "array",
            "description": "The set of label IDs to apply to the ticket. Set to \u003ccode\u003enull\u003c/code\u003e to keep unchanged.",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "uniqueItems": true
          },
          "helpdeskAccountId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the helpdesk account the ticket belongs to. Set to \u003ccode\u003enull\u003c/code\u003e to keep unchanged.",
            "example": 1
          },
          "customerMultiBrandId": {
            "type": "integer",
            "format": "int32",
            "description": "The multibrand ID of the customer being connected. Only supplied together with \u003ccode\u003ecustomerId\u003c/code\u003e; used to reject connecting a customer that belongs to another multibrand. Set to \u003ccode\u003enull\u003c/code\u003e when unknown.",
            "example": 1
          }
        }
      },
      "TicketSearchResponse": {
        "type": "object",
        "properties": {
          "ticketId": {
            "type": "string",
            "description": "Identifier of the ticket.",
            "example": "a5a1b1a9-2ad0-4bb9-86b1-3fae3b1e3dc6",
            "x-viskan-field-format": "uuid"
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "Version of the ticket document.",
            "example": 7
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the ticket was created.",
            "example": "2025-09-11T08:15:30Z",
            "x-viskan-field-format": "offset-date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the ticket was last modified.",
            "example": "2025-09-11T08:16:02Z",
            "x-viskan-field-format": "offset-date-time"
          },
          "customerId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the customer that this ticket is connected to, or \u003ccode\u003enull\u003c/code\u003e if it is not connected to a customer.",
            "example": 352951,
            "x-viskan-nullable": "true"
          },
          "ticketNumber": {
            "type": "string",
            "description": "External ticket number.",
            "example": "1001"
          },
          "helpdeskAccountId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the Helpdesk account that this ticket belongs to, or \u003ccode\u003enull\u003c/code\u003e if it does not belong to any account.",
            "example": 1,
            "x-viskan-nullable": "true"
          },
          "multiBrandId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the multibrand that this ticket belongs to.",
            "example": 1
          },
          "centralUserId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the assigned user, or \u003ccode\u003enull\u003c/code\u003e when unassigned.",
            "example": 41,
            "x-viskan-nullable": "true"
          },
          "resolution": {
            "type": "string",
            "description": "Ticket resolution state.",
            "enum": [
              "UNRESOLVED",
              "RESOLVED",
              "NO_ACTION_REQUIRED",
              "SPAM",
              "TRASH"
            ],
            "example": "UNRESOLVED"
          },
          "labels": {
            "type": "array",
            "description": "The labels set on this ticket.",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "uniqueItems": true
          },
          "autoReply": {
            "type": "boolean",
            "description": "Whether the latest update was an automatic reply.",
            "example": false
          },
          "senderAddress": {
            "type": "string",
            "description": "The sender email address of the first message.",
            "example": "jane@example.com"
          },
          "senderName": {
            "type": "string",
            "description": "The sender display name of the first message.",
            "example": "Jane Smith"
          },
          "subject": {
            "type": "string",
            "description": "The subject line of the first message.",
            "example": "Order inquiry"
          },
          "firstMessageId": {
            "type": "string",
            "description": "The ID of the first message.",
            "example": "\u003cgenerated@id\u003e"
          },
          "lastMessageId": {
            "type": "string",
            "description": "The ID of the last message.",
            "example": "\u003cgenerated@id\u003e"
          },
          "activities": {
            "type": "array",
            "description": "History of ticket activities.",
            "items": {
              "$ref": "#/components/schemas/Activity"
            }
          },
          "numberOfMessages": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of messages in the ticket.",
            "example": 5
          },
          "numberOfAttachments": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of attachments in the ticket.",
            "example": 2
          },
          "participants": {
            "type": "array",
            "description": "List of unique participant email addresses in the conversation, excluding the sender of the first message.",
            "example": [
              "bob@example.com",
              "charlie@example.com"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "TicketSearchResult": {
        "type": "object",
        "properties": {
          "totalNumberOfHits": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of results.",
            "example": 123
          },
          "totalHitsRelation": {
            "type": "string",
            "description": "Relation for total hits.",
            "enum": [
              "EQUAL_TO",
              "GREATER_THAN_OR_EQUAL_TO",
              "OFF"
            ]
          },
          "page": {
            "type": "integer",
            "format": "int32",
            "description": "Requested page number."
          },
          "hitsPerPage": {
            "type": "integer",
            "format": "int32",
            "description": "Requested page size."
          },
          "tickets": {
            "type": "array",
            "description": "The tickets found, without messages. It includes a number of messages and attachments and the ID of the of the first message.",
            "items": {
              "$ref": "#/components/schemas/TicketSearchResponse"
            }
          }
        }
      },
      "StreamingResponseBody": {},
      "Attachment_2": {
        "type": "object",
        "properties": {
          "attachmentId": {
            "type": "string"
          },
          "fileName": {
            "type": "string"
          },
          "contentType": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "REGULAR",
              "POTENTIALLY_DANGEROUS",
              "BLOCKED",
              "NOT_AVAILABLE"
            ]
          },
          "size": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Aggregations_3": {
        "type": "object",
        "properties": {
          "numberOfOpenTickets": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of open tickets.",
            "example": 42
          },
          "numberOfOpenTicketsAssignedToMe": {
            "type": "integer",
            "format": "int64",
            "description": "Number of open tickets assigned to the current user.",
            "example": 15
          },
          "numberOfOpenUnassignedTickets": {
            "type": "integer",
            "format": "int64",
            "description": "Number of open tickets that are unassigned.",
            "example": 8
          }
        }
      },
      "CreateDraftRequest": {
        "type": "object",
        "properties": {
          "draftName": {
            "type": "string",
            "description": "Displayed name of a new draft.",
            "example": "Black Friday"
          }
        },
        "required": [
          "draftName"
        ]
      },
      "CreateDraftResponse": {
        "type": "object",
        "properties": {
          "draftId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the created draft.",
            "example": "e104abc6-6355-42a3-8b4d-08ff838d028f",
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "CreateStoreSettingRequest": {
        "type": "object",
        "properties": {
          "storeSettingKey": {
            "type": "string",
            "description": "Key part of key-value pair for store settings.",
            "example": "remarketing"
          },
          "storeSettingValue": {
            "type": "string",
            "description": "Value part of key-value pair for store settings.",
            "example": "true"
          },
          "countryCode": {
            "type": "string",
            "description": "Country this store setting should apply to. If not specified, then the store setting applies to all countries.",
            "example": "SE"
          },
          "languageCode": {
            "type": "string",
            "description": "Language (in ISO 639-1 format) this store setting should apply to. If not specified, then the store setting applies to all languages.",
            "example": "sv"
          }
        },
        "required": [
          "storeSettingKey",
          "storeSettingValue"
        ]
      },
      "CreateStoreSettingResponse": {
        "type": "object",
        "properties": {
          "storeSettingId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the created store setting.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "CreateSectionRequest": {
        "type": "object",
        "properties": {
          "sectionName": {
            "type": "string",
            "description": "Displayed name of a section.",
            "example": "Start Page Hero"
          },
          "sectionDescription": {
            "type": "string",
            "description": "Displayed description of a section.",
            "example": "Section for the start page displaying an image and text"
          },
          "sectionType": {
            "type": "string",
            "description": "Type of a section.",
            "enum": [
              "IMAGE_AND_TEXT",
              "SLIDER",
              "MENU",
              "GRIDS",
              "MISC"
            ],
            "example": "IMAGE_AND_TEXT"
          },
          "content": {
            "type": "string",
            "description": "The content of the section. Can be any useful format for the frontend, such as JSON, HTML, scripts, etc.",
            "example": "\u003cp\u003e{4dd9fd6f-9403-49e6-83df-2550abac538e}\u003c/p\u003e\u003cimage url\u003d{a8eecb0e-b06a-4b2c-882f-376cff259454}\u003e"
          },
          "variables": {
            "type": "array",
            "description": "List of variables for this section.",
            "items": {
              "$ref": "#/components/schemas/CreateSectionVariableRequest"
            }
          },
          "searchableContent": {
            "type": "string",
            "description": "Searchable contents of this section.",
            "example": "Start page"
          }
        },
        "required": [
          "sectionName",
          "sectionType"
        ]
      },
      "CreateSectionVariableRequest": {
        "type": "object",
        "properties": {
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "New variable will have the specified UUID. Must be in UUID V4 format.",
            "example": "4dd9fd6f-9403-49e6-83df-2550abac538e",
            "x-viskan-field-format": "uuid"
          },
          "variableName": {
            "type": "string",
            "description": "Displayed name of a variable.",
            "example": "Hero paragraph"
          },
          "variableType": {
            "type": "string",
            "description": "Type of a variable.",
            "enum": [
              "TEXT",
              "IMAGE_URL",
              "CATEGORY"
            ],
            "example": "TEXT"
          }
        },
        "required": [
          "variableId",
          "variableName",
          "variableType"
        ]
      },
      "CreateSectionResponse": {
        "type": "object",
        "properties": {
          "sectionId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the created section.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "ConnectProductRequest": {
        "type": "object",
        "properties": {
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of the layout to connect the product to.",
            "example": "a1f4e3b2-7c89-4d56-b123-9e8f7a6b5c4d",
            "x-viskan-field-format": "uuid"
          },
          "variables": {
            "type": "array",
            "description": "List of variables to set for the product-to-layout connection.",
            "items": {
              "$ref": "#/components/schemas/CreateProductVariableRequest"
            }
          }
        },
        "required": [
          "layoutId"
        ]
      },
      "CreateProductVariableRequest": {
        "type": "object",
        "properties": {
          "layoutSectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of a section as part of a layout.",
            "example": "be0111c5-a24b-47bd-86f7-77c12d632bdc",
            "x-viskan-field-format": "uuid"
          },
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the content locale this variable belongs to.",
            "example": "136ec43d-6983-4f1c-a6a1-c39147656b23",
            "x-viskan-field-format": "uuid"
          },
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the variable.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "variableValue": {
            "type": "string",
            "description": "The value of the variable.",
            "example": "Welcome to start page!"
          }
        },
        "required": [
          "contentLocaleId",
          "layoutSectionId",
          "variableId",
          "variableValue"
        ]
      },
      "CreatePageRequest": {
        "type": "object",
        "properties": {
          "categoryId": {
            "type": "string",
            "format": "uuid",
            "description": "Sets the category this page is attached to.",
            "example": "fb831d92-c7b3-42fe-ac92-a2c2014d72f6",
            "x-viskan-field-format": "uuid"
          },
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "Sets the content locale this page is associated with. Exclusive with language code and country code.",
            "example": "774ab227-18fe-4541-ba3b-06ad3e95ae75",
            "x-viskan-field-format": "uuid"
          },
          "languageCode": {
            "type": "string",
            "description": "Sets the language (in ISO 639-1 format) of this page. Exclusive with content locale.",
            "example": "en"
          },
          "countryCode": {
            "type": "string",
            "description": "Sets the country of this page. Exclusive with content locale.",
            "example": "US"
          },
          "metaTitle": {
            "type": "string",
            "description": "Sets the metaTitle of this page.",
            "example": "Start Page for Black Week Sale"
          },
          "metaDescription": {
            "type": "string",
            "description": "Sets the metaDescription of this page.",
            "example": "Temporary page for Black Week Sale"
          },
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of a layout which should be applied to this page.",
            "example": "e8391697-5592-434a-9e20-ac2316adc235",
            "x-viskan-field-format": "uuid"
          },
          "title": {
            "type": "string",
            "description": "Displayed title of this page.",
            "example": "Black Week Sale"
          },
          "path": {
            "type": "string",
            "description": "URL path for this page.",
            "example": "/black-week-sale"
          },
          "variables": {
            "type": "array",
            "description": "Variable values that should be updated.",
            "items": {
              "$ref": "#/components/schemas/CreateVariableRequest"
            }
          },
          "searchableContent": {
            "type": "string",
            "description": "Searchable contents of this page.",
            "example": "Black week sale 2025"
          }
        },
        "required": [
          "categoryId",
          "layoutId",
          "title"
        ]
      },
      "CreateVariableRequest": {
        "type": "object",
        "properties": {
          "layoutSectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of a section as part of a layout.",
            "example": "be0111c5-a24b-47bd-86f7-77c12d632bdc",
            "x-viskan-field-format": "uuid"
          },
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of a variable.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "variableValue": {
            "type": "string",
            "description": "Variable value for this particular page.",
            "example": "Welcome to start page!"
          }
        },
        "required": [
          "layoutSectionId",
          "variableId",
          "variableValue"
        ]
      },
      "CreatePageResponse": {
        "type": "object",
        "properties": {
          "pageId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the created page.",
            "example": "fb840e50-8a8b-477c-a3c8-fffe2bf97e1c",
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "LanguageAlternativeResponse": {
        "type": "object",
        "properties": {
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The content locale this alternative version is associated with. Exclusive with language code and country code.",
            "example": "774ab227-18fe-4541-ba3b-06ad3e95ae75",
            "x-viskan-field-format": "uuid"
          },
          "languageCode": {
            "type": "string",
            "description": "Language code (in ISO 639-1 format) for the alternative version. Exclusive with content locale.",
            "example": "sv"
          },
          "countryCode": {
            "type": "string",
            "description": "Country code for the alternative version. Exclusive with content locale.",
            "example": "SE"
          },
          "path": {
            "type": "string",
            "description": "Path for the alternative version.",
            "example": "/hem"
          }
        }
      },
      "PageSearchResponse": {
        "type": "object",
        "properties": {
          "categoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the category.",
            "example": "fb840e50-8a8b-477c-a3c8-fffe2bf97e1c",
            "x-viskan-field-format": "uuid"
          },
          "categoryName": {
            "type": "string",
            "description": "The name of the category.",
            "example": "Start Page"
          },
          "hidden": {
            "type": "boolean",
            "description": "Whether the page is hidden. Is null for categories that are not part of the content category tree.",
            "example": false
          },
          "indexed": {
            "type": "boolean",
            "description": "Whether the page is indexed. Is null for categories that are not part of the content category tree.",
            "example": true
          },
          "protectionLevel": {
            "type": "string",
            "description": "The protection level of the category. A protected category requires the user to be logged in to access it. Defaults to NONE.",
            "enum": [
              "NONE",
              "LOW",
              "MEDIUM",
              "HIGH"
            ],
            "example": "NONE"
          },
          "protectionFallbackCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the fallback category used when the user does not have access to this protected category.",
            "example": "0ee32a6e-0c4d-4f7b-bd89-f21ddad81135",
            "x-viskan-field-format": "uuid"
          },
          "path": {
            "type": "string",
            "description": "The path of the page.",
            "example": "/start"
          },
          "pageId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the page.",
            "example": "d8ff524e-1272-4a15-b23f-261964c3554a",
            "x-viskan-field-format": "uuid"
          },
          "title": {
            "type": "string",
            "description": "The title of the page.",
            "example": "Black Week Sale"
          },
          "metaTitle": {
            "type": "string",
            "description": "Meta title of the page.",
            "example": "Start Page for Black Week Sale"
          },
          "metaDescription": {
            "type": "string",
            "description": "Meta description of the page.",
            "example": "Temporary page for Black Week Sale"
          },
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The content locale this page is associated with. Exclusive with language code and country code.",
            "example": "774ab227-18fe-4541-ba3b-06ad3e95ae75",
            "x-viskan-field-format": "uuid"
          },
          "languageCode": {
            "type": "string",
            "description": "Language code (in ISO 639-1 format) of the page. Exclusive with content locale.",
            "example": "en"
          },
          "countryCode": {
            "type": "string",
            "description": "Country code of the page. Exclusive with content locale.",
            "example": "US"
          },
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the layout associated with the page.",
            "example": "e8391697-5592-434a-9e20-ac2316adc235",
            "x-viskan-field-format": "uuid"
          },
          "parentCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the parent category.",
            "example": "0ee32a6e-0c4d-4f7b-bd89-f21ddad81135",
            "x-viskan-field-format": "uuid"
          },
          "siblingCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the sibling category.",
            "example": "04e0069f-8f37-43ce-952e-9c248feacb11",
            "x-viskan-field-format": "uuid"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          },
          "languageAlternatives": {
            "type": "array",
            "description": "Other language versions of this page within the same category, each with its locale and path.",
            "items": {
              "$ref": "#/components/schemas/LanguageAlternativeResponse"
            }
          },
          "variables": {
            "type": "array",
            "description": "Variables associated with the page, including their current values and change status.",
            "items": {
              "$ref": "#/components/schemas/PageVariableResponse"
            }
          },
          "searchableContent": {
            "type": "string",
            "description": "Searchable content for a section is only returned if the section is drafted. After publishing, this section\u0027s searchable content becomes part of the page\u0027s searchable content.",
            "example": "Start page"
          }
        }
      },
      "PageVariableResponse": {
        "type": "object",
        "properties": {
          "layoutSectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of a section as part of a layout.",
            "example": "be0111c5-a24b-47bd-86f7-77c12d632bdc",
            "x-viskan-field-format": "uuid"
          },
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the variable.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "variableValue": {
            "type": "string",
            "description": "The value of the variable.",
            "example": "Welcome to start page!"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "CreateLayoutRequest": {
        "type": "object",
        "properties": {
          "layoutName": {
            "type": "string",
            "description": "Displayed name of a layout.",
            "example": "Start Page layout"
          },
          "layoutDescription": {
            "type": "string",
            "description": "Displayed description of a layout.",
            "example": "Layout created for start pages"
          },
          "layoutType": {
            "type": "string",
            "description": "Type of a layout.",
            "enum": [
              "START_PAGE",
              "PRODUCT_PAGE",
              "PRODUCT_LIST",
              "CHECKOUT",
              "SEARCH",
              "NOT_FOUND",
              "LOCALE",
              "INFO",
              "HEADER",
              "FOOTER",
              "MISC"
            ],
            "example": "START_PAGE"
          },
          "sections": {
            "type": "array",
            "description": "Sections that should be included in this layout.",
            "items": {
              "$ref": "#/components/schemas/CreateLayoutSectionRequest"
            }
          }
        },
        "required": [
          "layoutName",
          "layoutType"
        ]
      },
      "CreateLayoutSectionRequest": {
        "type": "object",
        "properties": {
          "sectionId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of a section.",
            "example": "fb831d92-c7b3-42fe-ac92-a2c2014d72f6",
            "x-viskan-field-format": "uuid"
          }
        },
        "required": [
          "sectionId"
        ]
      },
      "CreateLayoutResponse": {
        "type": "object",
        "properties": {
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the created layout.",
            "example": "ae3b1645-9722-42bd-b3ab-1a6a6cbe3565",
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "CreateCategoryRequest": {
        "type": "object",
        "properties": {
          "categoryName": {
            "type": "string",
            "description": "The name of the category",
            "example": "Start Page"
          },
          "hidden": {
            "type": "boolean",
            "description": "Whether a category should be hidden. Defaults to false.",
            "example": false
          },
          "indexed": {
            "type": "boolean",
            "description": "Whether a category should be indexed. Defaults to true.",
            "example": true
          },
          "protectionLevel": {
            "type": "string",
            "description": "The protection level of the category. A protected category requires the user to be logged in to access it. Defaults to NONE.",
            "enum": [
              "NONE",
              "LOW",
              "MEDIUM",
              "HIGH"
            ],
            "example": "NONE"
          },
          "protectionFallbackCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the fallback category used when the user does not have access to this protected category.",
            "example": "0ee32a6e-0c4d-4f7b-bd89-f21ddad81135",
            "x-viskan-field-format": "uuid"
          },
          "parentCategoryId": {
            "type": "string",
            "format": "uuid",
            "deprecated": true,
            "description": "Parent category for this category. Must refer to an existing category in the category tree. Deprecated - treePlacement should be used instead.",
            "example": "0118434c-9053-4d78-a9b5-06966052f5dd",
            "x-viskan-field-format": "uuid"
          },
          "siblingCategoryId": {
            "type": "string",
            "format": "uuid",
            "deprecated": true,
            "description": "Sibling category for this category. Sibling category must have the same parent as created category. Deprecated - treePlacement should be used instead.",
            "example": "3edd0eea-9a63-4305-95d8-b281c71ce243",
            "x-viskan-field-format": "uuid"
          },
          "treePlacement": {
            "type": "array",
            "description": "The list of tree placements for the new category. Each tree placement specifies a parent category and an optional sibling category to determine where the new category should be placed in the category tree.",
            "items": {
              "$ref": "#/components/schemas/TreePlacementRequest"
            }
          }
        },
        "required": [
          "categoryName"
        ]
      },
      "TreePlacementRequest": {
        "type": "object",
        "properties": {
          "categoryTreeId": {
            "type": "string",
            "format": "uuid",
            "description": "The unique identifier of the category tree node. If not provided, a new UUID will be generated.",
            "example": "6b2a2871-f20d-4fa0-895e-e3c41976db7a",
            "x-viskan-field-format": "uuid"
          },
          "parentCategoryTreeId": {
            "type": "string",
            "format": "uuid",
            "description": "The unique identifier of the parent category tree node. This field is required.",
            "example": "fb840e50-8a8b-477c-a3c8-fffe2bf97e1c",
            "x-viskan-field-format": "uuid"
          },
          "siblingCategoryTreeId": {
            "type": "string",
            "format": "uuid",
            "description": "The unique identifier of the sibling category tree node that will be the next in order after this placement. This field is optional; if not provided, the new category will be placed at the end among its siblings.",
            "example": "123e4567-e89b-12d3-a456-426614174000",
            "x-viskan-field-format": "uuid"
          }
        },
        "required": [
          "parentCategoryTreeId"
        ]
      },
      "CreateCategoryResponse": {
        "type": "object",
        "properties": {
          "categoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the created category.",
            "example": "415eede9-b5ce-4992-ab10-a553acf5c0bb",
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "UpdateDraftRequest": {
        "type": "object",
        "properties": {
          "draftName": {
            "type": "string",
            "description": "Displayed name of a draft.",
            "example": "Black Week Updated Draft"
          }
        }
      },
      "UpdateStoreSettingRequest": {
        "type": "object",
        "properties": {
          "storeSettingKey": {
            "type": "string",
            "description": "Key part of key-value pair for store settings.",
            "example": "checkMediaEnabled"
          },
          "storeSettingValue": {
            "type": "string",
            "description": "Value part of key-value pair for store settings.",
            "example": "true"
          },
          "countryCode": {
            "type": "string",
            "description": "Country this store setting should apply to. If not specified, then the store setting applies to all countries.",
            "example": "SE"
          },
          "languageCode": {
            "type": "string",
            "description": "Language (in ISO 639-1 format) this store setting should apply to. If not specified, then the store setting applies to all languages.",
            "example": "sv"
          },
          "action": {
            "type": "string",
            "description": "Action to be performed on the entity.",
            "enum": [
              "REMOVE"
            ],
            "example": "REMOVE"
          }
        }
      },
      "UpdateSectionRequest": {
        "type": "object",
        "properties": {
          "sectionName": {
            "type": "string",
            "description": "Displayed name of a section.",
            "example": "Start Page Hero"
          },
          "sectionDescription": {
            "type": "string",
            "description": "Displayed description of a section.",
            "example": "Section for the start page displaying an image and text"
          },
          "sectionType": {
            "type": "string",
            "description": "Type of a section.",
            "enum": [
              "IMAGE_AND_TEXT",
              "SLIDER",
              "MENU",
              "GRIDS",
              "MISC"
            ],
            "example": "IMAGE_AND_TEXT"
          },
          "content": {
            "type": "string",
            "description": "The content of the section. Can be any useful format for the frontend, such as JSON, HTML, scripts, etc.",
            "example": "\u003cp\u003e{4dd9fd6f-9403-49e6-83df-2550abac538e}\u003c/p\u003e\u003cimage url\u003d{a8eecb0e-b06a-4b2c-882f-376cff259454}\u003e"
          },
          "action": {
            "type": "string",
            "description": "Action to be performed on the entity.",
            "enum": [
              "REMOVE"
            ],
            "example": "REMOVE"
          },
          "variables": {
            "type": "array",
            "description": "List of variables for this section.",
            "items": {
              "$ref": "#/components/schemas/UpdateSectionVariableRequest"
            }
          },
          "searchableContent": {
            "type": "string",
            "description": "Searchable contents of this section.",
            "example": "Start page"
          }
        }
      },
      "UpdateSectionVariableRequest": {
        "type": "object",
        "properties": {
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of a variable.",
            "example": "4dd9fd6f-9403-49e6-83df-2550abac538e",
            "x-viskan-field-format": "uuid"
          },
          "variableName": {
            "type": "string",
            "description": "Displayed name of a variable.",
            "example": "Hero paragraph"
          },
          "variableType": {
            "type": "string",
            "description": "Type of a variable.",
            "enum": [
              "TEXT",
              "IMAGE_URL",
              "CATEGORY"
            ],
            "example": "TEXT"
          }
        },
        "required": [
          "variableId",
          "variableName",
          "variableType"
        ]
      },
      "UpdateProductRequest": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "description": "Action to perform on the product-to-layout connection. Set to REMOVE to mark the connection for removal upon publish.",
            "enum": [
              "REMOVE"
            ],
            "example": "REMOVE"
          },
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of the layout to connect the product to.",
            "example": "a1f4e3b2-7c89-4d56-b123-9e8f7a6b5c4d",
            "x-viskan-field-format": "uuid"
          },
          "variables": {
            "type": "array",
            "description": "List of variables to update for the product-to-layout connection.",
            "items": {
              "$ref": "#/components/schemas/UpdateProductVariableRequest"
            }
          }
        }
      },
      "UpdateProductVariableRequest": {
        "type": "object",
        "properties": {
          "layoutSectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of a section as part of a layout.",
            "example": "be0111c5-a24b-47bd-86f7-77c12d632bdc",
            "x-viskan-field-format": "uuid"
          },
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the content locale this variable belongs to.",
            "example": "136ec43d-6983-4f1c-a6a1-c39147656b23",
            "x-viskan-field-format": "uuid"
          },
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the variable.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "variableValue": {
            "type": "string",
            "description": "The value of the variable.",
            "example": "Welcome to start page!"
          }
        },
        "required": [
          "contentLocaleId",
          "layoutSectionId",
          "variableId",
          "variableValue"
        ]
      },
      "UpdatePageRequest": {
        "type": "object",
        "properties": {
          "metaTitle": {
            "type": "string",
            "description": "Updated metaTitle of this page.",
            "example": "Start Page for Black Week Sale"
          },
          "metaDescription": {
            "type": "string",
            "description": "Updated metaDescription of this page.",
            "example": "Temporary page for Black Week Sale"
          },
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of a layout which should be applied to this page.",
            "example": "e8391697-5592-434a-9e20-ac2316adc235",
            "x-viskan-field-format": "uuid"
          },
          "title": {
            "type": "string",
            "description": "Displayed title of this page.",
            "example": "Black Week Sale"
          },
          "path": {
            "type": "string",
            "description": "URL path for this page.",
            "example": "/black-week-sale"
          },
          "action": {
            "type": "string",
            "description": "Action to be performed on the entity.",
            "enum": [
              "REMOVE"
            ],
            "example": "REMOVE"
          },
          "variables": {
            "type": "array",
            "description": "Variable values that should be updated.",
            "items": {
              "$ref": "#/components/schemas/UpdateVariableRequest"
            }
          },
          "searchableContent": {
            "type": "string",
            "description": "Searchable contents of this page.",
            "example": "Black week 2025"
          }
        }
      },
      "UpdateVariableRequest": {
        "type": "object",
        "properties": {
          "layoutSectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of a section as part of a layout.",
            "example": "be0111c5-a24b-47bd-86f7-77c12d632bdc",
            "x-viskan-field-format": "uuid"
          },
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of a variable.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "variableValue": {
            "type": "string",
            "description": "Variable value for this particular page.",
            "example": "Welcome to start page!"
          }
        },
        "required": [
          "layoutSectionId",
          "variableId",
          "variableValue"
        ]
      },
      "UpdateCountryRequest": {
        "type": "object",
        "properties": {
          "countryCode": {
            "type": "string",
            "description": "Country code.",
            "example": "SE"
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the locale is enabled for the country.",
            "example": true
          }
        },
        "required": [
          "countryCode",
          "enabled"
        ]
      },
      "UpdateLocaleRequest": {
        "type": "object",
        "properties": {
          "countries": {
            "type": "array",
            "description": "List of countries associated with this locale, each with a country code and an enabled flag indicating whether the locale is active for that country.",
            "items": {
              "$ref": "#/components/schemas/UpdateCountryRequest"
            }
          }
        }
      },
      "UpdateLayoutRequest": {
        "type": "object",
        "properties": {
          "layoutName": {
            "type": "string",
            "description": "Displayed name of a layout.",
            "example": "Start Page layout"
          },
          "layoutDescription": {
            "type": "string",
            "description": "Displayed description of a layout.",
            "example": "Layout created for start pages"
          },
          "layoutType": {
            "type": "string",
            "description": "Type of a layout.",
            "enum": [
              "START_PAGE",
              "PRODUCT_PAGE",
              "PRODUCT_LIST",
              "CHECKOUT",
              "SEARCH",
              "NOT_FOUND",
              "LOCALE",
              "INFO",
              "HEADER",
              "FOOTER",
              "MISC"
            ],
            "example": "START_PAGE"
          },
          "action": {
            "type": "string",
            "description": "Action to be performed on the entity.",
            "enum": [
              "REMOVE"
            ],
            "example": "REMOVE"
          },
          "sections": {
            "type": "array",
            "description": "Sections that should be included in this layout.",
            "items": {
              "$ref": "#/components/schemas/UpdateLayoutSectionRequest"
            }
          }
        }
      },
      "UpdateLayoutSectionRequest": {
        "type": "object",
        "properties": {
          "sectionId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of a section.",
            "example": "fb831d92-c7b3-42fe-ac92-a2c2014d72f6",
            "x-viskan-field-format": "uuid"
          },
          "layoutSectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of a section as part of a layout.",
            "example": "fb831d92-c7b3-42fe-ac92-a2c2014d72f6",
            "x-viskan-field-format": "uuid"
          }
        },
        "required": [
          "sectionId"
        ]
      },
      "UpdateCategoryRequest": {
        "type": "object",
        "properties": {
          "categoryName": {
            "type": "string",
            "description": "Internal category name.",
            "example": "Start Page"
          },
          "hidden": {
            "type": "boolean",
            "description": "Whether a category should be hidden.",
            "example": false
          },
          "indexed": {
            "type": "boolean",
            "description": "Whether a category should be indexed.",
            "example": true
          },
          "protectionLevel": {
            "type": "string",
            "description": "The protection level of the category. A protected category requires the user to be logged in to access it. Defaults to NONE.",
            "enum": [
              "NONE",
              "LOW",
              "MEDIUM",
              "HIGH"
            ],
            "example": "NONE"
          },
          "protectionFallbackCategoryId": {
            "type": "string",
            "description": "ID of the fallback category used when the user does not have access to this protected category. Send an empty string to clear the fallback.",
            "example": "0ee32a6e-0c4d-4f7b-bd89-f21ddad81135"
          },
          "parentCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "Parent category for this category. Must refer to an existing category in the category tree.",
            "example": "0118434c-9053-4d78-a9b5-06966052f5dd",
            "x-viskan-field-format": "uuid"
          },
          "siblingCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "Sibling category for this category. Sibling category must have the same parent as the updated category.",
            "example": "3edd0eea-9a63-4305-95d8-b281c71ce243",
            "x-viskan-field-format": "uuid"
          },
          "treePlacement": {
            "type": "array",
            "description": "The list of tree placements for the category. Each tree placement specifies a parent category and an optional sibling category to determine where the new category should be placed in the category tree. Null value keeps tree placements unchanged, empty array clears all tree placements.",
            "items": {
              "$ref": "#/components/schemas/TreePlacementRequest"
            }
          },
          "action": {
            "type": "string",
            "description": "Action to be performed on the entity.",
            "enum": [
              "REMOVE"
            ],
            "example": "REMOVE"
          }
        }
      },
      "DraftListResponse": {
        "type": "object",
        "properties": {
          "draftId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the draft.",
            "example": "3e6cce60-79ee-4a40-b6f4-c7ef640418b7",
            "x-viskan-field-format": "uuid"
          },
          "draftName": {
            "type": "string",
            "description": "Displayed name of the draft.",
            "example": "Black Week"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the draft was last edited.",
            "example": "2025-02-13T10:10:00.000Z"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the draft was created.",
            "example": "2025-02-01T19:00:00.000Z"
          },
          "createdBy": {
            "$ref": "#/components/schemas/DraftUserResponse",
            "description": "The user who created the draft. Null when a service client created the draft."
          }
        }
      },
      "DraftUserResponse": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the user.",
            "example": "08ce1500-a817-40e8-8e5a-36d3cef125df",
            "x-viskan-field-format": "uuid"
          },
          "firstName": {
            "type": "string",
            "description": "The first name of the user. Null when the name could not be resolved.",
            "example": "John"
          },
          "lastName": {
            "type": "string",
            "description": "The last name of the user. Null when the name could not be resolved.",
            "example": "Doe"
          }
        }
      },
      "DraftCategoryResponse": {
        "type": "object",
        "properties": {
          "categoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the category.",
            "example": "8c03d0fd-e15e-494b-b3f9-c3584e64de01",
            "x-viskan-field-format": "uuid"
          },
          "categoryName": {
            "type": "string",
            "description": "The name of the category.",
            "example": "Start Page Category"
          },
          "draftedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time this category was drafted.",
            "example": "2025-02-01T19:00:00.000Z"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the category was published.",
            "example": "2025-01-11T19:00:00.000Z"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "DraftItemResponse": {
        "type": "object",
        "properties": {
          "draftId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the draft.",
            "example": "3e6cce60-79ee-4a40-b6f4-c7ef640418b7",
            "x-viskan-field-format": "uuid"
          },
          "draftName": {
            "type": "string",
            "description": "Displayed name of the draft.",
            "example": "Black Week"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the draft was last edited.",
            "example": "2025-02-13T10:10:00.000Z"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the draft was created.",
            "example": "2025-02-01T19:00:00.000Z"
          },
          "createdBy": {
            "$ref": "#/components/schemas/DraftUserResponse",
            "description": "The user who created the draft. Null when a service client created the draft."
          },
          "pages": {
            "type": "array",
            "description": "Pages that have been created, modified, or removed in this draft. Each entry includes a comparison status indicating the type of change relative to the current publishment.",
            "items": {
              "$ref": "#/components/schemas/DraftPageResponse"
            }
          },
          "layouts": {
            "type": "array",
            "description": "Layouts that have been created, modified, or removed in this draft. Each entry includes a comparison status indicating the type of change relative to the current publishment.",
            "items": {
              "$ref": "#/components/schemas/DraftLayoutResponse"
            }
          },
          "sections": {
            "type": "array",
            "description": "Sections that have been created, modified, or removed in this draft. Each entry includes a comparison status indicating the type of change relative to the current publishment.",
            "items": {
              "$ref": "#/components/schemas/DraftSectionResponse"
            }
          },
          "categories": {
            "type": "array",
            "description": "Categories that have been created, modified, or removed in this draft. Each entry includes a comparison status indicating the type of change relative to the current publishment.",
            "items": {
              "$ref": "#/components/schemas/DraftCategoryResponse"
            }
          },
          "storeSettings": {
            "type": "array",
            "description": "Store settings that have been created, modified, or removed in this draft. Each entry includes a comparison status indicating the type of change relative to the current publishment.",
            "items": {
              "$ref": "#/components/schemas/DraftStoreSettingResponse"
            }
          },
          "locales": {
            "type": "array",
            "description": "Locales that have been created, modified, or removed in this draft. Each entry includes a comparison status indicating the type of change relative to the current publishment.",
            "items": {
              "$ref": "#/components/schemas/DraftLocaleResponse"
            }
          },
          "products": {
            "type": "array",
            "description": "Products that have been created, modified, or removed in this draft. Each entry includes a comparison status indicating the type of change relative to the current publishment.",
            "items": {
              "$ref": "#/components/schemas/DraftProductResponse"
            }
          },
          "warnings": {
            "type": "array",
            "description": "Validation warnings for the draft, such as pages missing variable values or referencing non-existent layouts.",
            "items": {
              "$ref": "#/components/schemas/DraftWarningResponse"
            }
          }
        }
      },
      "DraftLayoutResponse": {
        "type": "object",
        "properties": {
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the layout.",
            "example": "31166915-7c44-46a8-b035-988f860043e1",
            "x-viskan-field-format": "uuid"
          },
          "layoutName": {
            "type": "string",
            "description": "The name of the layout.",
            "example": "Standard sale page layout"
          },
          "draftedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time this layout was drafted.",
            "example": "2025-02-01T19:00:00.000Z"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the layout was published.",
            "example": "2025-01-11T19:00:00.000Z"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "DraftLocaleResponse": {
        "type": "object",
        "properties": {
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the content locale.",
            "example": "774ab227-18fe-4541-ba3b-06ad3e95ae75",
            "x-viskan-field-format": "uuid"
          },
          "languageCode": {
            "type": "string",
            "description": "The language code (in ISO 639-1 format) of the locale.",
            "example": "en"
          },
          "countries": {
            "type": "array",
            "description": "Countries the locale applies to and their enabled state.",
            "items": {
              "$ref": "#/components/schemas/Country_2"
            }
          },
          "draftedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time this locale was drafted.",
            "example": "2025-02-01T19:00:00.000Z"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the locale was published.",
            "example": "2025-01-11T19:00:00.000Z"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "DraftPageResponse": {
        "type": "object",
        "properties": {
          "pageId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the page.",
            "example": "5cf50fd6-5ab3-43bc-8291-e74665d1f8ab",
            "x-viskan-field-format": "uuid"
          },
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The content locale this page is associated with. Exclusive with language code and country code.",
            "example": "774ab227-18fe-4541-ba3b-06ad3e95ae75",
            "x-viskan-field-format": "uuid"
          },
          "title": {
            "type": "string",
            "description": "The title of the page.",
            "example": "Start Page"
          },
          "languageCode": {
            "type": "string",
            "description": "The language code (in ISO 639-1 format) of the page. Exclusive with content locale.",
            "example": "en"
          },
          "countryCode": {
            "type": "string",
            "description": "The country code of the page. Exclusive with content locale.",
            "example": "US"
          },
          "draftedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time this page was drafted.",
            "example": "2025-02-01T19:00:00.000Z"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the page was published.",
            "example": "2025-01-11T19:00:00.000Z"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "DraftProductResponse": {
        "type": "object",
        "properties": {
          "productLayoutId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the product-layout connection.",
            "example": "3e6cce60-79ee-4a40-b6f4-c7ef640418b7",
            "x-viskan-field-format": "uuid"
          },
          "productId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the product.",
            "example": "3e6cce60-79ee-4a40-b6f4-c7ef640418b7",
            "x-viskan-field-format": "uuid"
          },
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the layout the product is connected to.",
            "example": "a1f4e3b2-7c89-4d56-b123-9e8f7a6b5c4d",
            "x-viskan-field-format": "uuid"
          },
          "draftedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the product-to-layout connection was drafted.",
            "example": "2025-02-01T19:00:00.000Z"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the product-to-layout connection was published.",
            "example": "2025-01-11T19:00:00.000Z"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "DraftSectionResponse": {
        "type": "object",
        "properties": {
          "sectionId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the section.",
            "example": "5a331c07-b203-444e-88ed-d5ddeb2212ff",
            "x-viskan-field-format": "uuid"
          },
          "sectionName": {
            "type": "string",
            "description": "The name of the section.",
            "example": "Start Page Hero"
          },
          "draftedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time this section was drafted.",
            "example": "2025-02-01T19:00:00.000Z"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the section was published.",
            "example": "2025-01-11T19:00:00.000Z"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "DraftStoreSettingResponse": {
        "type": "object",
        "properties": {
          "storeSettingId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the store setting.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "storeSettingKey": {
            "type": "string",
            "description": "The key of the store setting.",
            "example": "searchUrlPrefix"
          },
          "storeSettingValue": {
            "type": "string",
            "description": "The value of the store setting.",
            "example": "search"
          },
          "countryCode": {
            "type": "string",
            "description": "The country this store setting applies to.",
            "example": "SE"
          },
          "languageCode": {
            "type": "string",
            "description": "The language code (in ISO 639-1 format) for the store setting.",
            "example": "sv"
          },
          "draftedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time this store setting was drafted.",
            "example": "2025-02-01T19:00:00.000Z"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the store setting was published.",
            "example": "2025-01-11T19:00:00.000Z"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "DraftWarningResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "The unique identifier for the entity with warning. For example, if type \u003d PAGE, then id \u003d pageId.",
            "example": "5da0525d-01da-427f-859f-947fa3c33aa2",
            "x-viskan-field-format": "uuid"
          },
          "type": {
            "type": "string",
            "description": "The type of the warning.",
            "enum": [
              "DRAFT",
              "PAGE",
              "LAYOUT",
              "SECTION",
              "VARIABLE",
              "PRODUCT"
            ],
            "example": "PAGE"
          },
          "code": {
            "type": "string",
            "description": "The specific code for the warning.",
            "example": "page-missing-variable-value"
          },
          "message": {
            "type": "string",
            "description": "The warning message detailing the issue.",
            "example": "\u0027Startpage\u0027 is missing a value for the variable \u0027Hero - Title\u0027"
          }
        }
      },
      "AvailableTranslationResponse": {
        "type": "object",
        "properties": {
          "pageId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the translated page.",
            "example": "946fe813-1c54-42f9-9e75-f87072badc22",
            "x-viskan-field-format": "uuid"
          },
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The content locale this translation is associated with. Exclusive with language code and country code.",
            "example": "774ab227-18fe-4541-ba3b-06ad3e95ae75",
            "x-viskan-field-format": "uuid"
          },
          "languageCode": {
            "type": "string",
            "description": "The language code (in ISO 639-1 format) for the translation. Exclusive with content locale.",
            "example": "sv"
          },
          "countryCode": {
            "type": "string",
            "description": "The country code for the translation. Exclusive with content locale.",
            "example": "SE"
          },
          "path": {
            "type": "string",
            "description": "The URL path for the translated page.",
            "example": "/start"
          }
        }
      },
      "CategoryTreeResponse": {
        "type": "object",
        "properties": {
          "categoryTreeId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the category tree node. Allows the same category to appear multiple times in the tree.",
            "example": "6b2a2871-f20d-4fa0-895e-e3c41976db7a",
            "x-viskan-field-format": "uuid"
          },
          "categoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the category.",
            "example": "fb840e50-8a8b-477c-a3c8-fffe2bf97e1c",
            "x-viskan-field-format": "uuid"
          },
          "categoryName": {
            "type": "string",
            "description": "The name of the category.",
            "example": "Start Page"
          },
          "hidden": {
            "type": "boolean",
            "description": "Whether the category is hidden.",
            "example": false
          },
          "indexed": {
            "type": "boolean",
            "description": "Whether the category is indexed.",
            "example": true
          },
          "protectionLevel": {
            "type": "string",
            "description": "The protection level of the category. A protected category requires the user to be logged in to access it. Defaults to NONE.",
            "enum": [
              "NONE",
              "LOW",
              "MEDIUM",
              "HIGH"
            ],
            "example": "NONE"
          },
          "protectionFallbackCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the fallback category used when the user does not have access to this protected category.",
            "example": "0ee32a6e-0c4d-4f7b-bd89-f21ddad81135",
            "x-viskan-field-format": "uuid"
          },
          "pageId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the page for this category.",
            "example": "5cf50fd6-5ab3-43bc-8291-e74665d1f8ab",
            "x-viskan-field-format": "uuid"
          },
          "path": {
            "type": "string",
            "description": "The URL path of the page for this category.",
            "example": "/start"
          },
          "title": {
            "type": "string",
            "description": "The title of the page.",
            "example": "Start Page"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time the page was published.",
            "example": "2025-01-15T10:30:00+01:00"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          },
          "availableTranslations": {
            "type": "array",
            "description": "Translations of the page in other locales, each with its own path and locale information.",
            "items": {
              "$ref": "#/components/schemas/AvailableTranslationResponse"
            }
          },
          "children": {
            "type": "array",
            "description": "Child categories in the hierarchy, each with their own pages and further children forming a recursive tree.",
            "items": {
              "$ref": "#/components/schemas/CategoryTreeResponse"
            }
          }
        }
      },
      "StoreSettingListResponse": {
        "type": "object",
        "properties": {
          "storeSettingId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the store setting.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "storeSettingKey": {
            "type": "string",
            "description": "The key of the store setting.",
            "example": "searchUrlPrefix"
          },
          "storeSettingValue": {
            "type": "string",
            "description": "The value of the store setting.",
            "example": "search"
          },
          "countryCode": {
            "type": "string",
            "description": "The country this store setting applies to.",
            "example": "SE"
          },
          "languageCode": {
            "type": "string",
            "description": "The language code (in ISO 639-1 format) for the store setting.",
            "example": "sv"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "StoreSettingItemResponse": {
        "type": "object",
        "properties": {
          "storeSettingId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the store setting.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "storeSettingKey": {
            "type": "string",
            "description": "The key of the store setting.",
            "example": "searchUrlPrefix"
          },
          "storeSettingValue": {
            "type": "string",
            "description": "The value of the store setting.",
            "example": "search"
          },
          "countryCode": {
            "type": "string",
            "description": "The country this store setting applies to. If not specified, then the store setting applies to all countries.",
            "example": "SE"
          },
          "languageCode": {
            "type": "string",
            "description": "The language code (in ISO 639-1 format) for the store setting. If not specified, then the store setting applies to all languages.",
            "example": "sv"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "SectionListResponse": {
        "type": "object",
        "properties": {
          "sectionId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the section.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "sectionName": {
            "type": "string",
            "description": "Name of the section.",
            "example": "Start Page Hero"
          },
          "sectionDescription": {
            "type": "string",
            "description": "Description of the section.",
            "example": "Section for the start page displaying an image and text"
          },
          "sectionType": {
            "type": "string",
            "description": "Type of a section.",
            "enum": [
              "IMAGE_AND_TEXT",
              "SLIDER",
              "MENU",
              "GRIDS",
              "MISC"
            ],
            "example": "IMAGE_AND_TEXT"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "SectionItemResponse": {
        "type": "object",
        "properties": {
          "sectionId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the section.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "sectionName": {
            "type": "string",
            "description": "Name of the section.",
            "example": "Start Page Hero"
          },
          "sectionDescription": {
            "type": "string",
            "description": "Description of the section.",
            "example": "Section for the start page displaying an image and text"
          },
          "sectionType": {
            "type": "string",
            "description": "Type of a section.",
            "enum": [
              "IMAGE_AND_TEXT",
              "SLIDER",
              "MENU",
              "GRIDS",
              "MISC"
            ],
            "example": "IMAGE_AND_TEXT"
          },
          "content": {
            "type": "string",
            "description": "Content of the section.",
            "example": "\u003cp\u003e{e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0}\u003c/p\u003e\u003cimage url\u003d{b6238f26-929b-41a2-862b-3029525e8b2f}\u003e"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          },
          "variables": {
            "type": "array",
            "description": "Variables defined in this section. Variables act as placeholders in the section content that can be given different values per page.",
            "items": {
              "$ref": "#/components/schemas/SectionVariableResponse"
            }
          },
          "layouts": {
            "type": "array",
            "description": "Layouts that include this section. Useful for understanding the impact of changes to this section.",
            "items": {
              "$ref": "#/components/schemas/SectionLayoutResponse"
            }
          },
          "searchableContent": {
            "type": "string",
            "description": "Searchable contents of this section.",
            "example": "Start page"
          }
        }
      },
      "SectionLayoutResponse": {
        "type": "object",
        "properties": {
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the layout.",
            "example": "ede165df-ff75-45aa-8cac-ec6a851b2433",
            "x-viskan-field-format": "uuid"
          },
          "layoutName": {
            "type": "string",
            "description": "Name of the layout.",
            "example": "Main layout"
          }
        }
      },
      "SectionVariableResponse": {
        "type": "object",
        "properties": {
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the variable.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "variableName": {
            "type": "string",
            "description": "Name of the variable.",
            "example": "Hero paragraph"
          },
          "variableType": {
            "type": "string",
            "description": "Type of a variable.",
            "enum": [
              "TEXT",
              "IMAGE_URL",
              "CATEGORY"
            ],
            "example": "TEXT"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "ProductVariableResponse": {
        "type": "object",
        "properties": {
          "layoutSectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of a section as part of a layout.",
            "example": "be0111c5-a24b-47bd-86f7-77c12d632bdc",
            "x-viskan-field-format": "uuid"
          },
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the content locale this variable is for.",
            "example": "136ec43d-6983-4f1c-a6a1-c39147656b23",
            "x-viskan-field-format": "uuid"
          },
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the variable.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "variableValue": {
            "type": "string",
            "description": "The value of the variable.",
            "example": "Welcome to start page!"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "ProductItemResponse": {
        "type": "object",
        "properties": {
          "productLayoutId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the product-layout connection.",
            "example": "534f4af9-874f-40e8-b86e-c324fee21051",
            "x-viskan-field-format": "uuid"
          },
          "productId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the product.",
            "example": "3e6cce60-79ee-4a40-b6f4-c7ef640418b7",
            "x-viskan-field-format": "uuid"
          },
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the layout the product is connected to.",
            "example": "a1f4e3b2-7c89-4d56-b123-9e8f7a6b5c4d",
            "x-viskan-field-format": "uuid"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          },
          "variables": {
            "type": "array",
            "description": "List of variables for the product-to-layout connection.",
            "items": {
              "$ref": "#/components/schemas/ProductVariableResponse"
            }
          }
        }
      },
      "PageLayoutResponse": {
        "type": "object",
        "properties": {
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the layout.",
            "example": "e8391697-5592-434a-9e20-ac2316adc235",
            "x-viskan-field-format": "uuid"
          },
          "layoutName": {
            "type": "string",
            "description": "The name of the layout.",
            "example": "Product List default layout"
          },
          "layoutDescription": {
            "type": "string",
            "description": "Description of the layout.",
            "example": "Default layout created for product list pages"
          },
          "layoutType": {
            "type": "string",
            "description": "Type of a layout.",
            "enum": [
              "START_PAGE",
              "PRODUCT_PAGE",
              "PRODUCT_LIST",
              "CHECKOUT",
              "SEARCH",
              "NOT_FOUND",
              "LOCALE",
              "INFO",
              "HEADER",
              "FOOTER",
              "MISC"
            ],
            "example": "PRODUCT_LIST"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          },
          "sections": {
            "type": "array",
            "description": "Sections that make up this layout, including their content and variables with any page-level overrides.",
            "items": {
              "$ref": "#/components/schemas/PageSectionResponse"
            }
          }
        }
      },
      "PageResponse": {
        "type": "object",
        "properties": {
          "pageId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the page.",
            "example": "fb840e50-8a8b-477c-a3c8-fffe2bf97e1c",
            "x-viskan-field-format": "uuid"
          },
          "categoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the category associated with the page.",
            "example": "fb831d92-c7b3-42fe-ac92-a2c2014d72f6",
            "x-viskan-field-format": "uuid"
          },
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The content locale this page is associated with. Exclusive with language code and country code.",
            "example": "774ab227-18fe-4541-ba3b-06ad3e95ae75",
            "x-viskan-field-format": "uuid"
          },
          "title": {
            "type": "string",
            "description": "The title of the page.",
            "example": "Black Week Sale"
          },
          "metaTitle": {
            "type": "string",
            "description": "Meta title of the page.",
            "example": "Start Page for Black Week Sale"
          },
          "metaDescription": {
            "type": "string",
            "description": "Meta description of the page.",
            "example": "Temporary page for Black Week Sale"
          },
          "languageCode": {
            "type": "string",
            "description": "The language code (in ISO 639-1 format) of the page. Exclusive with content locale.",
            "example": "en"
          },
          "countryCode": {
            "type": "string",
            "description": "The country code of the page. Exclusive with content locale.",
            "example": "US"
          },
          "path": {
            "type": "string",
            "description": "The URL path of the page.",
            "example": "/black-week-sale"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          },
          "layout": {
            "$ref": "#/components/schemas/PageLayoutResponse",
            "description": "Layout associated with the page, including its sections and variables with any page-level value overrides."
          },
          "searchableContent": {
            "type": "string",
            "description": "searchableContent on a page returns only the content related to that page if the page is drafted. If it is published, it returns the combined content of the page and all sections within it.",
            "example": "Black week sale 2025"
          }
        }
      },
      "PageSectionResponse": {
        "type": "object",
        "properties": {
          "layoutSectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of a section as part of a layout.",
            "example": "be0111c5-a24b-47bd-86f7-77c12d632bdc",
            "x-viskan-field-format": "uuid"
          },
          "sectionId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the section.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "sectionName": {
            "type": "string",
            "description": "Name of the section.",
            "example": "Start Page Hero"
          },
          "sectionDescription": {
            "type": "string",
            "description": "Description of the section.",
            "example": "Section for the start page displaying an image and text"
          },
          "sectionType": {
            "type": "string",
            "description": "Type of the section.",
            "enum": [
              "IMAGE_AND_TEXT",
              "SLIDER",
              "MENU",
              "GRIDS",
              "MISC"
            ],
            "example": "IMAGE_AND_TEXT"
          },
          "content": {
            "type": "string",
            "description": "Content of the section.",
            "example": "\u003cp\u003e{e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0}\u003c/p\u003e\u003cimage url\u003d{b6238f26-929b-41a2-862b-3029525e8b2f}\u003e"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          },
          "variables": {
            "type": "array",
            "description": "Variables associated with the section. If the variable value has never been assigned, then the status is null.",
            "items": {
              "$ref": "#/components/schemas/VariableResponse"
            }
          }
        }
      },
      "VariableResponse": {
        "type": "object",
        "properties": {
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the variable.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "variableName": {
            "type": "string",
            "description": "Name of the variable.",
            "example": "Hero paragraph"
          },
          "variableType": {
            "type": "string",
            "description": "Type of the variable.",
            "enum": [
              "TEXT",
              "IMAGE_URL",
              "CATEGORY"
            ],
            "example": "TEXT"
          },
          "variableValue": {
            "type": "string",
            "description": "Value of the variable.",
            "example": "Welcome to start page!"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "LocaleListResponse": {
        "type": "object",
        "properties": {
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the content locale.",
            "example": "1a7c7f65-1d4e-4c3d-8f6d-5e2cbb9f2e11",
            "x-viskan-field-format": "uuid"
          },
          "languageCode": {
            "type": "string",
            "description": "Language code of the locale (ISO 639-1).",
            "example": "en"
          },
          "countries": {
            "type": "array",
            "description": "List of countries associated with this locale, each with a country code and an enabled flag indicating whether the locale is active for that country.",
            "items": {
              "$ref": "#/components/schemas/Country_2"
            }
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "LocaleItemResponse": {
        "type": "object",
        "properties": {
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the content locale.",
            "example": "1a7c7f65-1d4e-4c3d-8f6d-5e2cbb9f2e11",
            "x-viskan-field-format": "uuid"
          },
          "languageCode": {
            "type": "string",
            "description": "Language code of the locale (ISO 639-1).",
            "example": "en"
          },
          "countries": {
            "type": "array",
            "description": "List of countries associated with this locale, each with a country code and an enabled flag indicating whether the locale is active for that country.",
            "items": {
              "$ref": "#/components/schemas/Country_2"
            }
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "LayoutListResponse": {
        "type": "object",
        "properties": {
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the layout.",
            "example": "acbbeca5-e63d-49fb-ba71-f32ba63e6073",
            "x-viskan-field-format": "uuid"
          },
          "layoutName": {
            "type": "string",
            "description": "The name of the layout.",
            "example": "Start Page layout"
          },
          "layoutDescription": {
            "type": "string",
            "description": "Description of the layout.",
            "example": "Layout created for start pages"
          },
          "layoutType": {
            "type": "string",
            "description": "Type of a layout.",
            "enum": [
              "START_PAGE",
              "PRODUCT_PAGE",
              "PRODUCT_LIST",
              "CHECKOUT",
              "SEARCH",
              "NOT_FOUND",
              "LOCALE",
              "INFO",
              "HEADER",
              "FOOTER",
              "MISC"
            ],
            "example": "START_PAGE"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "LayoutItemResponse": {
        "type": "object",
        "properties": {
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the layout.",
            "example": "e8391697-5592-434a-9e20-ac2316adc235",
            "x-viskan-field-format": "uuid"
          },
          "layoutName": {
            "type": "string",
            "description": "The name of the layout.",
            "example": "Product List default layout"
          },
          "layoutDescription": {
            "type": "string",
            "description": "Description of the layout.",
            "example": "Default layout created for product list pages"
          },
          "layoutType": {
            "type": "string",
            "description": "Type of a layout.",
            "enum": [
              "START_PAGE",
              "PRODUCT_PAGE",
              "PRODUCT_LIST",
              "CHECKOUT",
              "SEARCH",
              "NOT_FOUND",
              "LOCALE",
              "INFO",
              "HEADER",
              "FOOTER",
              "MISC"
            ],
            "example": "START_PAGE"
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          },
          "sections": {
            "type": "array",
            "description": "Sections included in this layout, each identified by a layout-section ID and the underlying section ID.",
            "items": {
              "$ref": "#/components/schemas/LayoutSectionResponse"
            }
          },
          "pages": {
            "type": "array",
            "description": "Pages that reference this layout. Useful for understanding the impact of changes to this layout.",
            "items": {
              "$ref": "#/components/schemas/LayoutPageResponse"
            }
          }
        }
      },
      "LayoutPageResponse": {
        "type": "object",
        "properties": {
          "pageId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the page.",
            "example": "3629bd11-e45d-4c63-8b5a-6190b5dfd0e7",
            "x-viskan-field-format": "uuid"
          },
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The content locale this page is associated with.",
            "example": "774ab227-18fe-4541-ba3b-06ad3e95ae75",
            "x-viskan-field-format": "uuid"
          },
          "title": {
            "type": "string",
            "description": "Title of the page.",
            "example": "Start Page"
          }
        }
      },
      "LayoutSectionResponse": {
        "type": "object",
        "properties": {
          "layoutSectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of a section as part of a layout.",
            "example": "be0111c5-a24b-47bd-86f7-77c12d632bdc",
            "x-viskan-field-format": "uuid"
          },
          "sectionId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the section.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "sectionName": {
            "type": "string",
            "description": "Name of the section.",
            "example": "Start Page Hero"
          }
        }
      },
      "CategoryResponse": {
        "type": "object",
        "properties": {
          "categoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the category.",
            "example": "fb840e50-8a8b-477c-a3c8-fffe2bf97e1c",
            "x-viskan-field-format": "uuid"
          },
          "categoryName": {
            "type": "string",
            "description": "Name of the category.",
            "example": "Start Page"
          },
          "hidden": {
            "type": "boolean",
            "description": "Indicates if the category is hidden.",
            "example": false
          },
          "indexed": {
            "type": "boolean",
            "description": "Indicates if the category is indexed.",
            "example": true
          },
          "protectionLevel": {
            "type": "string",
            "description": "The protection level of the category. A protected category requires the user to be logged in to access it. Defaults to NONE.",
            "enum": [
              "NONE",
              "LOW",
              "MEDIUM",
              "HIGH"
            ],
            "example": "NONE"
          },
          "protectionFallbackCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the fallback category used when the user does not have access to this protected category.",
            "example": "0ee32a6e-0c4d-4f7b-bd89-f21ddad81135",
            "x-viskan-field-format": "uuid"
          },
          "parentCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the parent category. Null, if category is not part of the category tree.",
            "example": "0ee32a6e-0c4d-4f7b-bd89-f21ddad81135",
            "x-viskan-field-format": "uuid"
          },
          "siblingCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the sibling category.",
            "example": "04e0069f-8f37-43ce-952e-9c248feacb11",
            "x-viskan-field-format": "uuid"
          },
          "treePlacement": {
            "type": "array",
            "description": "The list of tree placements for the category. Each tree placement specifies a parent category and an optional sibling category to determine where the new category should be placed in the category tree.",
            "items": {
              "$ref": "#/components/schemas/TreePlacementResponse"
            }
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "TreePlacementResponse": {
        "type": "object",
        "properties": {
          "categoryTreeId": {
            "type": "string",
            "format": "uuid",
            "description": "The unique identifier of the category tree node.",
            "example": "6b2a2871-f20d-4fa0-895e-e3c41976db7a",
            "x-viskan-field-format": "uuid"
          },
          "parentCategoryTreeId": {
            "type": "string",
            "format": "uuid",
            "description": "The unique identifier of the parent category tree node.",
            "example": "fb840e50-8a8b-477c-a3c8-fffe2bf97e1c",
            "x-viskan-field-format": "uuid"
          },
          "siblingCategoryTreeId": {
            "type": "string",
            "format": "uuid",
            "description": "The unique identifier of the sibling category tree node that will be the next in order after this placement.",
            "example": "123e4567-e89b-12d3-a456-426614174000",
            "x-viskan-field-format": "uuid"
          }
        },
        "required": [
          "parentCategoryTreeId"
        ]
      },
      "Country_2": {
        "type": "object",
        "properties": {
          "countryCode": {
            "type": "string",
            "description": "Country code.",
            "example": "SE"
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the locale is enabled for this country.",
            "example": true
          }
        }
      },
      "ProductListResponse_2": {
        "type": "object",
        "properties": {
          "productLayoutId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the product-layout connection.",
            "example": "421c1de3-8420-452c-91ce-120016d3d5d7",
            "x-viskan-field-format": "uuid"
          },
          "productId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the product.",
            "example": "3e6cce60-79ee-4a40-b6f4-c7ef640418b7",
            "x-viskan-field-format": "uuid"
          },
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "The identifier of the layout the product is connected to.",
            "example": "a1f4e3b2-7c89-4d56-b123-9e8f7a6b5c4d",
            "x-viskan-field-format": "uuid"
          },
          "variables": {
            "type": "array",
            "description": "List of variables for the product-to-layout connection.",
            "items": {
              "$ref": "#/components/schemas/ProductVariableResponse"
            }
          },
          "status": {
            "type": "string",
            "description": "Status of the entity in comparison to published version.",
            "enum": [
              "NEW",
              "MODIFIED",
              "REMOVED",
              "CURRENT"
            ],
            "example": "MODIFIED"
          }
        }
      },
      "CreateJobExecutionExclusionRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the exclusion.",
            "example": "Christmas freeze"
          },
          "intervals": {
            "type": "array",
            "description": "The intervals during which jobs should not execute.",
            "items": {
              "$ref": "#/components/schemas/IntervalRequest"
            }
          },
          "jobs": {
            "$ref": "#/components/schemas/JobsDelta",
            "description": "The job configs to assign this exclusion to on creation."
          }
        }
      },
      "IntervalRequest": {
        "type": "object",
        "properties": {
          "startDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The start date and time of the exclusion interval.",
            "example": "2026-12-24T00:00:00+01:00"
          },
          "endDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The end date and time of the exclusion interval.",
            "example": "2026-12-26T23:59:59+01:00"
          }
        }
      },
      "JobsDelta": {
        "type": "object",
        "properties": {
          "added": {
            "type": "array",
            "description": "Job config IDs to assign this exclusion to.",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "removed": {
            "type": "array",
            "description": "Job config IDs to unassign this exclusion from.",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          }
        }
      },
      "CreateJobExecutionExclusionResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the created exclusion.",
            "example": 1
          }
        }
      },
      "ExecuteJobConfigResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "The status of the execution.",
            "example": "OK"
          },
          "messages": {
            "type": "array",
            "description": "The messages generated during execution.",
            "items": {
              "$ref": "#/components/schemas/JobMessageItem"
            }
          }
        }
      },
      "JobMessageItem": {
        "type": "object",
        "properties": {
          "severity": {
            "type": "string",
            "description": "The severity of the message.",
            "example": "INFO"
          },
          "description": {
            "type": "string",
            "description": "The message description."
          }
        }
      },
      "IntervalsDelta": {
        "type": "object",
        "properties": {
          "added": {
            "type": "array",
            "description": "Intervals to add.",
            "items": {
              "$ref": "#/components/schemas/IntervalRequest"
            }
          },
          "modified": {
            "type": "array",
            "description": "Intervals to modify.",
            "items": {
              "$ref": "#/components/schemas/UpdateIntervalRequest"
            }
          },
          "removed": {
            "type": "array",
            "description": "Interval IDs to remove.",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          }
        }
      },
      "UpdateIntervalRequest": {
        "type": "object",
        "properties": {
          "intervalId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the interval to update.",
            "example": 1
          },
          "startDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The start date and time of the exclusion interval.",
            "example": "2026-12-24T00:00:00+01:00"
          },
          "endDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The end date and time of the exclusion interval.",
            "example": "2026-12-26T23:59:59+01:00"
          }
        }
      },
      "UpdateJobExecutionExclusionRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name to give the exclusion, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": "Christmas freeze"
          },
          "intervals": {
            "$ref": "#/components/schemas/IntervalsDelta",
            "description": "Delta updates for the intervals."
          },
          "jobs": {
            "$ref": "#/components/schemas/JobsDelta",
            "description": "Delta updates for the job configs assigned to this exclusion."
          }
        }
      },
      "BulkUpdateJobConfigRequest": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "description": "The unique identifiers of the job configs to update.",
            "example": [
              1,
              2,
              3
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "active": {
            "type": "boolean",
            "description": "Whether to set the configs as active or inactive, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": true
          },
          "jobExecutionExclusionId": {
            "type": "integer",
            "format": "int32",
            "description": "The job execution exclusion ID to assign (0 to unassign), or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": 1
          }
        }
      },
      "UpdateJobConfigRequest": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean",
            "description": "Whether to set the config as active or inactive, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": true
          },
          "jobExecutionExclusionId": {
            "type": "integer",
            "format": "int32",
            "description": "The job execution exclusion ID to assign, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": 1
          }
        }
      },
      "JobHistoryItem": {
        "type": "object",
        "properties": {
          "jobHistoryId": {
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the history entry."
          },
          "jobConfigName": {
            "type": "string",
            "description": "The name of the job configuration.",
            "example": "Process orders"
          },
          "status": {
            "type": "string",
            "description": "The execution status.",
            "example": "OK"
          },
          "acknowledged": {
            "type": "boolean",
            "description": "Whether the failure has been acknowledged."
          },
          "startTime": {
            "type": "string",
            "description": "When execution started.",
            "example": "2026-03-30T10:00:00"
          },
          "duration": {
            "type": "integer",
            "format": "int32",
            "description": "Duration in milliseconds.",
            "example": 15000
          },
          "interactive": {
            "type": "boolean",
            "description": "Whether the execution was triggered manually by a user."
          },
          "messageCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of messages from the execution.",
            "example": 3
          },
          "executedBy": {
            "type": "string",
            "description": "The user who executed the job (external UUID).",
            "example": "1f79b421-e91b-4491-bd7f-6beafa0f0fc6"
          },
          "userAllowedToExecute": {
            "type": "boolean",
            "description": "Whether the user is allowed to execute the job config."
          }
        }
      },
      "JobHistoryDetail": {
        "type": "object",
        "properties": {
          "jobHistoryId": {
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the history entry."
          },
          "jobConfigName": {
            "type": "string",
            "description": "The name of the job configuration."
          },
          "status": {
            "type": "string",
            "description": "The execution status."
          },
          "acknowledged": {
            "type": "boolean",
            "description": "Whether the failure has been acknowledged."
          },
          "startTime": {
            "type": "string",
            "description": "When execution started."
          },
          "duration": {
            "type": "integer",
            "format": "int32",
            "description": "Duration in milliseconds."
          },
          "interactive": {
            "type": "boolean",
            "description": "Whether the execution was triggered manually by a user."
          },
          "firedOn": {
            "type": "string",
            "description": "Host that fired the scheduled trigger."
          },
          "scheduledFireTime": {
            "type": "string",
            "description": "When the job was scheduled to fire."
          },
          "actualFireTime": {
            "type": "string",
            "description": "When the trigger actually fired."
          },
          "executedOn": {
            "type": "string",
            "description": "Host that executed the job."
          },
          "executedBy": {
            "type": "string",
            "description": "Name of the user who executed the job."
          },
          "messages": {
            "type": "array",
            "description": "Translated messages from the execution.",
            "items": {
              "$ref": "#/components/schemas/JobHistoryMessageItem"
            }
          }
        }
      },
      "JobHistoryMessageItem": {
        "type": "object",
        "properties": {
          "severity": {
            "type": "string",
            "description": "The severity of the message.",
            "example": "INFO"
          },
          "description": {
            "type": "string",
            "description": "The translated message description."
          }
        }
      },
      "JobExecutionExclusionItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the exclusion.",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "The name of the exclusion.",
            "example": "Christmas freeze"
          }
        }
      },
      "AssignedJobItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the job config.",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "The name of the job config.",
            "example": "Process order cancellations"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the job config is active.",
            "example": true
          }
        }
      },
      "IntervalItem": {
        "type": "object",
        "properties": {
          "intervalId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the interval.",
            "example": 1
          },
          "startDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The start date and time of the exclusion interval.",
            "example": "2026-12-24T00:00:00+01:00"
          },
          "endDateTime": {
            "type": "string",
            "format": "date-time",
            "description": "The end date and time of the exclusion interval.",
            "example": "2026-12-26T23:59:59+01:00"
          }
        }
      },
      "JobExecutionExclusionDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the exclusion.",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "The name of the exclusion.",
            "example": "Christmas freeze"
          },
          "intervals": {
            "type": "array",
            "description": "The intervals during which jobs should not execute.",
            "items": {
              "$ref": "#/components/schemas/IntervalItem"
            }
          },
          "jobs": {
            "type": "array",
            "description": "The job configs this exclusion is assigned to.",
            "items": {
              "$ref": "#/components/schemas/AssignedJobItem"
            }
          }
        }
      },
      "JobConfigItem": {
        "type": "object",
        "properties": {
          "jobConfigId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the job config.",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "The name of the job config.",
            "example": "Process order cancellations"
          },
          "description": {
            "type": "string",
            "description": "The description of the job config."
          },
          "active": {
            "type": "boolean",
            "description": "Whether the job config is active.",
            "example": true
          },
          "userAllowedToActivate": {
            "type": "boolean",
            "description": "Whether the user is allowed to activate/deactivate this config.",
            "example": true
          },
          "userAllowedToExecute": {
            "type": "boolean",
            "description": "Whether the user is allowed to manually execute this config.",
            "example": false
          },
          "jobExecutionExclusionId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the assigned job execution exclusion. 0 means none.",
            "example": 0
          }
        }
      },
      "PropertyValueTranslationItem": {
        "type": "object",
        "properties": {
          "languageCode": {
            "type": "string",
            "description": "The language code (ISO 639-1).",
            "example": "sv"
          },
          "name": {
            "type": "string",
            "description": "The translated value name.",
            "example": "Röd"
          },
          "description": {
            "type": "string",
            "description": "The translated description of the property value."
          }
        }
      },
      "RawValueItem": {
        "type": "object",
        "description": "A raw property value with optional translations.",
        "properties": {
          "value": {
            "description": "The raw value.",
            "example": "Gold",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer",
                "format": "int32"
              },
              {
                "type": "number",
                "format": "double"
              },
              {
                "type": "boolean"
              }
            ]
          },
          "translations": {
            "type": "array",
            "description": "Translations for this value. Omitting or setting to null clears any existing translations.",
            "items": {
              "$ref": "#/components/schemas/PropertyValueTranslationItem"
            },
            "x-viskan-nullable": "true"
          }
        }
      },
      "SetPropertyValueRequest": {
        "type": "object",
        "description": "Request to set or update the value of a single property key on an entity. For raw types (STRING, INTEGER, FLOAT, BOOLEAN, HTML), use \u003ccode\u003evalue\u003c/code\u003e for a single value or \u003ccode\u003evalues\u003c/code\u003e for multiple values. Each value is an object with \u003ccode\u003evalue\u003c/code\u003e and optional \u003ccode\u003etranslations\u003c/code\u003e. For \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e, use \u003ccode\u003epropertyValueId\u003c/code\u003e. For \u003ccode\u003eMULTI_SELECT\u003c/code\u003e, use \u003ccode\u003epropertyValueIds\u003c/code\u003e. PUT is full replacement — any existing values not in the request are removed.",
        "properties": {
          "value": {
            "description": "A single raw value. For STRING, INTEGER, FLOAT, BOOLEAN and HTML presentation types. Should be an object: \u003ccode\u003e{\"value\": \"Gold\", \"translations\": [{\"languageCode\": \"sv\", \"name\": \"Guld\"}]}\u003c/code\u003e. Mutually exclusive with \u003ccode\u003evalues\u003c/code\u003e, \u003ccode\u003epropertyValueId\u003c/code\u003e and \u003ccode\u003epropertyValueIds\u003c/code\u003e.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/RawValueItem"
              }
            ],
            "x-viskan-nullable": "true"
          },
          "values": {
            "type": "array",
            "description": "Multiple raw values. For STRING, INTEGER, FLOAT, BOOLEAN and HTML presentation types. Each item is an object with \u003ccode\u003evalue\u003c/code\u003e and optional \u003ccode\u003etranslations\u003c/code\u003e. Consider using a single \u003ccode\u003evalue\u003c/code\u003e with comma-separated content, or \u003ccode\u003eMULTI_SELECT\u003c/code\u003e for reusable predefined values. Mutually exclusive with \u003ccode\u003evalue\u003c/code\u003e, \u003ccode\u003epropertyValueId\u003c/code\u003e and \u003ccode\u003epropertyValueIds\u003c/code\u003e.",
            "items": {
              "$ref": "#/components/schemas/RawValueItem"
            },
            "x-viskan-nullable": "true"
          },
          "propertyValueId": {
            "type": "integer",
            "format": "int32",
            "description": "The predefined property value ID. Only for \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e presentation type.",
            "x-viskan-nullable": "true"
          },
          "propertyValueIds": {
            "type": "array",
            "description": "The list of predefined property value IDs. Only for \u003ccode\u003eMULTI_SELECT\u003c/code\u003e presentation type.",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "x-viskan-nullable": "true"
          }
        }
      },
      "CreatePropertyValueRequest": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "The value.",
            "example": "Red"
          },
          "mediaURL": {
            "type": "string",
            "description": "The media URL associated with this value.",
            "x-viskan-nullable": "true"
          },
          "filterTag": {
            "type": "string",
            "description": "The filter tag associated with this value.",
            "x-viskan-nullable": "true"
          },
          "sort": {
            "type": "integer",
            "format": "int32",
            "description": "The sort order of this value.",
            "example": 0
          },
          "translations": {
            "type": "array",
            "description": "Translations for this property value.",
            "items": {
              "$ref": "#/components/schemas/PropertyValueTranslationItem"
            },
            "x-viskan-nullable": "true"
          }
        }
      },
      "ModifyPropertyValueRequest": {
        "type": "object",
        "properties": {
          "propertyValueId": {
            "type": "integer",
            "format": "int32",
            "description": "The property value ID to modify.",
            "example": 1
          },
          "value": {
            "type": "string",
            "description": "The value.",
            "example": "Red"
          },
          "mediaURL": {
            "type": "string",
            "description": "The media URL associated with this value.",
            "x-viskan-nullable": "true"
          },
          "filterTag": {
            "type": "string",
            "description": "The filter tag associated with this value.",
            "x-viskan-nullable": "true"
          },
          "sort": {
            "type": "integer",
            "format": "int32",
            "description": "The sort order of this value.",
            "example": 0
          },
          "translations": {
            "type": "array",
            "description": "Translations for this property value. Replaces all existing translations for this value.",
            "items": {
              "$ref": "#/components/schemas/PropertyValueTranslationItem"
            },
            "x-viskan-nullable": "true"
          }
        }
      },
      "PropertyKeyTranslationItem": {
        "type": "object",
        "properties": {
          "languageCode": {
            "type": "string",
            "description": "The language code (ISO 639-1).",
            "example": "sv"
          },
          "name": {
            "type": "string",
            "description": "The translated name of the property key.",
            "example": "Färg"
          },
          "description": {
            "type": "string",
            "description": "The translated description of the property key."
          }
        }
      },
      "TranslationsDelta": {
        "type": "null",
        "properties": {
          "added": {
            "type": "array",
            "description": "Translations to add.",
            "items": {
              "$ref": "#/components/schemas/PropertyKeyTranslationItem"
            }
          },
          "modified": {
            "type": "array",
            "description": "Translations to modify.",
            "items": {
              "$ref": "#/components/schemas/PropertyKeyTranslationItem"
            }
          },
          "removed": {
            "type": "array",
            "description": "Language codes to remove.",
            "example": [
              "sv",
              "en"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "UpdatePropertyKeyRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The internal name of the property key.",
            "example": "Color",
            "x-viskan-nullable": "true"
          },
          "keyGroup": {
            "type": "string",
            "description": "The key group.",
            "example": "Appearance",
            "x-viskan-nullable": "true"
          },
          "usedForFilter": {
            "type": "boolean",
            "description": "Whether this key is used for filtering in webshops.",
            "x-viskan-nullable": "true"
          },
          "usedForPresentation": {
            "type": "boolean",
            "description": "Whether this key is used for presentation in webshops.",
            "x-viskan-nullable": "true"
          },
          "allowUpdateInUI": {
            "type": "boolean",
            "description": "Whether properties of this key can be updated through the UI.",
            "x-viskan-nullable": "true"
          },
          "sendToShippingProvider": {
            "type": "boolean",
            "description": "Whether properties of this key are sent to shipping providers.",
            "x-viskan-nullable": "true"
          },
          "sort": {
            "type": "integer",
            "format": "int32",
            "description": "The sort order of the property key within its key group.",
            "example": 0,
            "x-viskan-nullable": "true"
          },
          "translations": {
            "$ref": "#/components/schemas/TranslationsDelta",
            "description": "Delta update for translations: added, modified, and removed."
          },
          "values": {
            "$ref": "#/components/schemas/ValuesDelta",
            "description": "Delta update for predefined values: added, modified, and removed. Only applicable for \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e and \u003ccode\u003eMULTI_SELECT\u003c/code\u003e presentation types."
          }
        }
      },
      "ValuesDelta": {
        "type": "null",
        "properties": {
          "added": {
            "type": "array",
            "description": "Values to add.",
            "items": {
              "$ref": "#/components/schemas/CreatePropertyValueRequest"
            }
          },
          "modified": {
            "type": "array",
            "description": "Values to modify.",
            "items": {
              "$ref": "#/components/schemas/ModifyPropertyValueRequest"
            }
          },
          "removed": {
            "type": "array",
            "description": "Property value IDs to remove.",
            "items": {
              "type": "integer",
              "format": "int32"
            }
          }
        }
      },
      "PropertyKeyDetailItem": {
        "type": "object",
        "properties": {
          "propertyKeyId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the property key.",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "The internal name of the property key.",
            "example": "Color"
          },
          "presentation": {
            "type": "string",
            "description": "The presentation type.",
            "enum": [
              "STRING",
              "SINGLE_SELECT",
              "BOOLEAN",
              "MULTI_SELECT",
              "INTEGER",
              "FLOAT",
              "HTML",
              "STRINGS",
              "INTEGERS",
              "FLOATS"
            ],
            "example": "SINGLE_SELECT"
          },
          "keyGroup": {
            "type": "string",
            "description": "The key group.",
            "example": "Appearance"
          },
          "usedForFilter": {
            "type": "boolean",
            "description": "Whether this key is used for filtering in webshops."
          },
          "usedForPresentation": {
            "type": "boolean",
            "description": "Whether this key is used for presentation in webshops."
          },
          "allowUpdateInUI": {
            "type": "boolean",
            "description": "Whether properties of this key can be updated through the UI."
          },
          "sendToShippingProvider": {
            "type": "boolean",
            "description": "Whether properties of this key are sent to shipping providers."
          },
          "sort": {
            "type": "integer",
            "format": "int32",
            "description": "The sort order of the property key within its key group.",
            "example": 0
          },
          "translations": {
            "type": "array",
            "description": "The translations for this property key.",
            "items": {
              "$ref": "#/components/schemas/PropertyKeyTranslationItem"
            }
          },
          "values": {
            "type": "array",
            "description": "The predefined values. Only present for \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e and \u003ccode\u003eMULTI_SELECT\u003c/code\u003e presentation types.",
            "items": {
              "$ref": "#/components/schemas/PropertyValueDetailItem"
            }
          }
        }
      },
      "PropertyValueDetailItem": {
        "type": "object",
        "properties": {
          "propertyValueId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the property value.",
            "example": 1
          },
          "value": {
            "type": "string",
            "description": "The default value.",
            "example": "Red"
          },
          "mediaURL": {
            "type": "string",
            "description": "The media URL associated with this value."
          },
          "filterTag": {
            "type": "string",
            "description": "The filter tag associated with this value."
          },
          "sort": {
            "type": "integer",
            "format": "int32",
            "description": "The sort order of this value.",
            "example": 0
          },
          "translations": {
            "type": "array",
            "description": "The translations for this property value.",
            "items": {
              "$ref": "#/components/schemas/PropertyValueTranslationItem"
            }
          }
        }
      },
      "CreatePropertyKeyRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The internal name of the property key.",
            "example": "Color"
          },
          "presentation": {
            "type": "string",
            "description": "The presentation type.",
            "enum": [
              "STRING",
              "SINGLE_SELECT",
              "BOOLEAN",
              "MULTI_SELECT",
              "INTEGER",
              "FLOAT",
              "HTML",
              "STRINGS",
              "INTEGERS",
              "FLOATS"
            ],
            "example": "SINGLE_SELECT"
          },
          "keyGroup": {
            "type": "string",
            "description": "The key group.",
            "example": "Appearance"
          },
          "usedForFilter": {
            "type": "boolean",
            "description": "Whether this key is used for filtering in webshops."
          },
          "usedForPresentation": {
            "type": "boolean",
            "description": "Whether this key is used for presentation in webshops."
          },
          "allowUpdateInUI": {
            "type": "boolean",
            "description": "Whether properties of this key can be updated through the UI."
          },
          "sendToShippingProvider": {
            "type": "boolean",
            "description": "Whether properties of this key are sent to shipping providers."
          },
          "sort": {
            "type": "integer",
            "format": "int32",
            "description": "The sort order of the property key within its key group.",
            "example": 0
          },
          "translations": {
            "type": "array",
            "description": "Translations for this property key.",
            "items": {
              "$ref": "#/components/schemas/PropertyKeyTranslationItem"
            },
            "x-viskan-nullable": "true"
          },
          "values": {
            "type": "array",
            "description": "Predefined values for this property key. Only applicable for \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e and \u003ccode\u003eMULTI_SELECT\u003c/code\u003e presentation types.",
            "items": {
              "$ref": "#/components/schemas/CreatePropertyValueRequest"
            },
            "x-viskan-nullable": "true"
          }
        }
      },
      "EntityPropertyItem": {
        "type": "object",
        "properties": {
          "propertyKeyId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the property key.",
            "example": 1
          },
          "propertyKeyName": {
            "type": "string",
            "description": "The name of the property key.",
            "example": "Color"
          },
          "presentation": {
            "type": "string",
            "description": "The presentation type.",
            "enum": [
              "STRING",
              "SINGLE_SELECT",
              "BOOLEAN",
              "MULTI_SELECT",
              "INTEGER",
              "FLOAT",
              "HTML",
              "STRINGS",
              "INTEGERS",
              "FLOATS"
            ],
            "example": "SINGLE_SELECT"
          },
          "value": {
            "deprecated": true,
            "description": "Deprecated. Use \u003ccode\u003epropertyValue.value\u003c/code\u003e for raw single-value and SINGLE_SELECT types, or \u003ccode\u003epropertyValues[].value\u003c/code\u003e for STRINGS/INTEGERS/FLOATS/MULTI_SELECT. Retained for backwards compatibility.",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer",
                "format": "int32"
              },
              {
                "type": "number",
                "format": "double"
              },
              {
                "type": "boolean"
              }
            ],
            "x-viskan-nullable": "true"
          },
          "propertyValue": {
            "$ref": "#/components/schemas/EntityPropertyValueItem",
            "description": "The selected value. Present for \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e, and for raw presentation types with a single assigned value.",
            "x-viskan-nullable": "true"
          },
          "propertyValues": {
            "type": "array",
            "description": "The selected values. Present for \u003ccode\u003eMULTI_SELECT\u003c/code\u003e, and for raw presentation types with multiple assigned values.",
            "items": {
              "$ref": "#/components/schemas/EntityPropertyValueItem"
            },
            "x-viskan-nullable": "true"
          }
        }
      },
      "EntityPropertyValueItem": {
        "type": "object",
        "properties": {
          "propertyValueId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the property value. Null for raw presentation types (STRING, STRINGS, INTEGER, INTEGERS, FLOAT, FLOATS, BOOLEAN, HTML); populated for SINGLE_SELECT/MULTI_SELECT.",
            "example": 1,
            "x-viskan-nullable": "true"
          },
          "value": {
            "description": "The value. Typed as Integer/Double/Boolean for INTEGER/FLOAT/BOOLEAN raw keys, String otherwise.",
            "example": "Red",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer",
                "format": "int32"
              },
              {
                "type": "number",
                "format": "double"
              },
              {
                "type": "boolean"
              }
            ]
          },
          "mediaURL": {
            "type": "string",
            "description": "The media URL associated with this value."
          },
          "translations": {
            "type": "array",
            "description": "Translations for this value.",
            "items": {
              "$ref": "#/components/schemas/PropertyValueTranslationItem"
            }
          }
        }
      },
      "PageInfo": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "format": "int32",
            "description": "The 1-based page number.",
            "example": 1
          },
          "pageSize": {
            "type": "integer",
            "format": "int32",
            "description": "The requested page size.",
            "example": 100
          },
          "hasMore": {
            "type": "boolean",
            "description": "Whether there are more hits on a following page.",
            "example": true
          }
        }
      },
      "PagedResultProductCategoryPropertyAssignmentItem": {
        "type": "object",
        "properties": {
          "page": {
            "$ref": "#/components/schemas/PageInfo",
            "description": "Paging information."
          },
          "hits": {
            "type": "array",
            "description": "The hits on this page.",
            "items": {
              "$ref": "#/components/schemas/ProductCategoryPropertyAssignmentItem"
            }
          }
        }
      },
      "ProductCategoryPropertyAssignmentItem": {
        "type": "object",
        "properties": {
          "categoryId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the product category.",
            "example": 101
          },
          "propertyValue": {
            "$ref": "#/components/schemas/PropertyValueSummaryItem",
            "description": "The selected value. Present for \u003ccode\u003eSINGLE_SELECT\u003c/code\u003e, and for raw presentation types with a single assigned value.",
            "x-viskan-nullable": "true"
          },
          "propertyValues": {
            "type": "array",
            "description": "The selected values. Present for \u003ccode\u003eMULTI_SELECT\u003c/code\u003e, and for raw presentation types with multiple assigned values.",
            "items": {
              "$ref": "#/components/schemas/PropertyValueSummaryItem"
            },
            "x-viskan-nullable": "true"
          }
        }
      },
      "PropertyValueSummaryItem": {
        "type": "object",
        "properties": {
          "propertyValueId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the property value. Null for raw presentation types (STRING, STRINGS, INTEGER, INTEGERS, FLOAT, FLOATS, BOOLEAN, HTML); populated for SINGLE_SELECT/MULTI_SELECT.",
            "example": 1,
            "x-viskan-nullable": "true"
          },
          "value": {
            "description": "The value. Typed as Integer/Double/Boolean for INTEGER/FLOAT/BOOLEAN raw keys, String otherwise.",
            "example": "Red",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer",
                "format": "int32"
              },
              {
                "type": "number",
                "format": "double"
              },
              {
                "type": "boolean"
              }
            ]
          }
        }
      },
      "CreateTenantRequest": {
        "type": "object",
        "properties": {
          "tenantName": {
            "type": "string",
            "description": "The name of the tenant.",
            "example": "Viskan System AB"
          },
          "countryCode": {
            "type": "string",
            "description": "The country of the legal entity. Must be a valid \u003ca href\u003d\"https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes\"\u003eISO 3166-1 alpha-2\u003c/a\u003e country code.",
            "example": "SE"
          },
          "organizationNumber": {
            "type": "string",
            "description": "The organization number of the company that owns this tenant.",
            "example": "5565901864"
          },
          "databaseHost": {
            "type": "string",
            "description": "The hostname of the database server of the main database of this tenant.",
            "example": "viskanssql.viskan.local"
          },
          "databaseNameKey": {
            "type": "string",
            "description": "The company name part of the database name of the new database. A prefix and a suffix will be added to this value.",
            "example": "Viskan"
          }
        }
      },
      "CreatedTenant": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "description": "The identifier of the created tenant.",
            "example": "46c5b0b0-c42a-44b0-97e2-39ef2f9118ac",
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "UpdateTenantRequest": {
        "type": "object",
        "properties": {
          "tenantName": {
            "type": "string",
            "description": "The name of the tenant, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "Viskan System AB"
          },
          "countryCode": {
            "type": "string",
            "description": "The country of the legal entity, or \u003ccode\u003enull\u003c/code\u003e. Must be a valid \u003ca href\u003d\"https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes\"\u003eISO 3166-1 alpha-2\u003c/code\u003e country code if present.",
            "example": "SE"
          },
          "organizationNumber": {
            "type": "string",
            "description": "The organization number of the company that owns this tenant, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "5565901864"
          },
          "browserKey": {
            "type": "string",
            "description": "The short and unique key that is used in the browser to identify this tenant, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "lf1dk8"
          },
          "databaseName": {
            "type": "string",
            "description": "The name of the main database of this tenant, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "ViskanProd"
          },
          "databaseHost": {
            "type": "string",
            "description": "The hostname of the database server of the main database of this tenant, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "viskanssql.viskan.local"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the tenant is active, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": true
          }
        }
      },
      "TenantInfo": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "description": "The identifier of the tenant.",
            "example": "46c5b0b0-c42a-44b0-97e2-39ef2f9118ac",
            "x-viskan-field-format": "uuid"
          },
          "instanceId": {
            "type": "integer",
            "format": "int32",
            "description": "The internal numeric identifier of the tenant. This is a deprecated field, use the tenant ID instead.",
            "example": 42
          },
          "tenantName": {
            "type": "string",
            "description": "The name of the tenant.",
            "example": "Viskan System AB"
          },
          "countryCode": {
            "type": "string",
            "description": "The country of the legal entity. This value is always a valid \u003ca href\u003d\"https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes\"\u003eISO 3166-1 alpha-2\u003c/code\u003e country code.",
            "example": "SE"
          },
          "organizationNumber": {
            "type": "string",
            "description": "The organization number of the company that owns this tenant.",
            "example": "5565901864"
          },
          "browserKey": {
            "type": "string",
            "description": "The short and unique key that is used in the browser to identify this tenant.",
            "example": "lf1dk8"
          },
          "databaseName": {
            "type": "string",
            "description": "The name of the main database of this tenant.",
            "example": "ViskanProd"
          },
          "databaseHost": {
            "type": "string",
            "description": "The hostname of the database server of the main database of this tenant.",
            "example": "viskanssql.viskan.local"
          },
          "companyId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the company within the main database. This is a deprecated feature, all new tenants should have zero as the value of this field.",
            "example": 0
          },
          "active": {
            "type": "boolean",
            "description": "Whether the tenant is active.",
            "example": true
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the tenant was last modified.",
            "example": "2025-09-11T08:16:02+02:00",
            "x-viskan-field-format": "offset-date-time"
          }
        }
      },
      "AddUserToTenantRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "description": "The identifier of the tenant to add the user to.",
            "example": "8811e13d-8359-4a63-90c8-4c178b02e564",
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "SynchronizeUsersRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "description": "The identifier of the tenant to synchronize users for.",
            "example": "8811e13d-8359-4a63-90c8-4c178b02e564",
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "ReplayUserEventsRequest": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "description": "The identifier of the tenant to replay, or null for every tenant.",
            "example": "8811e13d-8359-4a63-90c8-4c178b02e564",
            "x-viskan-field-format": "uuid"
          },
          "userId": {
            "type": "string",
            "description": "The identifier of the user to replay, or null for every user.",
            "example": "e61bb58a-72d7-42e0-8cf8-b29e5b78b092",
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "CreateUserRequest": {
        "type": "object",
        "properties": {
          "emailAddress": {
            "type": "string",
            "description": "The email address of the user to create.",
            "example": "john.doe@viskan.com",
            "x-viskan-field-format": "email-address"
          },
          "firstName": {
            "type": "string",
            "description": "The first name of the user. Can be \u003ccode\u003enull\u003c/code\u003e if the email address is already a registered account. Use the \u003ca href\u003d\"/api-reference/admin/user/check-availability.html\"\u003eCheck availability\u003c/a\u003e method to know this.",
            "example": "John",
            "x-viskan-nullable": "true"
          },
          "lastName": {
            "type": "string",
            "description": "The last name of the user. Can be \u003ccode\u003enull\u003c/code\u003e if the email address is already a registered account. Use the \u003ca href\u003d\"/api-reference/admin/user/check-availability.html\"\u003eCheck availability\u003c/a\u003e method to know this.",
            "example": "Doe",
            "x-viskan-nullable": "true"
          },
          "permissionLevel": {
            "type": "string",
            "description": "The permission level to assign to the user.",
            "enum": [
              "NORMAL",
              "SUPERUSER",
              "ADMINISTRATOR"
            ],
            "example": "NORMAL"
          },
          "groupIds": {
            "type": "array",
            "description": "The IDs of the groups to add the user to.",
            "example": [
              1,
              3
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "uniqueItems": true
          },
          "connectedTenantIds": {
            "type": "array",
            "description": "The IDs of the connected tenants to add this user to. This is only applicable if the setup uses connected tenants. It is also only applicable for normal users and superusers. Administrators automatically get assigned to all connected tenants.",
            "example": [
              "8811e13d-8359-4a63-90c8-4c178b02e564",
              "bae25401-b6c1-465e-b2e6-607a2b40f854"
            ],
            "items": {
              "type": "string",
              "x-viskan-field-format": "uuid"
            },
            "uniqueItems": true,
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "CreateUserResult": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "The identifier of the user.",
            "example": "08ce1500-a817-40e8-8e5a-36d3cef125df",
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "AvailabilityRequest": {
        "type": "object",
        "properties": {
          "emailAddress": {
            "type": "string",
            "description": "The email address to check availability of.",
            "example": "john.doe@viskan.com",
            "x-viskan-field-format": "email-address"
          }
        }
      },
      "AvailabilityResult": {
        "type": "object",
        "properties": {
          "emailAddress": {
            "type": "string",
            "description": "The exact email address of the user found.",
            "example": "john.doe@viskan.com",
            "x-viskan-field-format": "email-address"
          },
          "firstName": {
            "type": "string",
            "description": "The first name of the found user.",
            "example": "John"
          },
          "lastName": {
            "type": "string",
            "description": "The last name of the found user.",
            "example": "Doe"
          },
          "accessToTenant": {
            "type": "boolean",
            "description": "Whether the found user already has access to this tenant. If it does not, it can be added to this tenant.",
            "example": false
          },
          "legacyUser": {
            "type": "boolean",
            "description": "Whether the found user is a legacy user that can be upgraded to a next-gen user.",
            "example": false
          }
        }
      },
      "NewUserGroup": {
        "type": "object",
        "properties": {
          "groupName": {
            "type": "string",
            "description": "The name of the new user group.",
            "example": "Customer service"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the user group is active. Defaults to \u003ccode\u003etrue\u003c/code\u003e.",
            "example": true
          },
          "roles": {
            "type": "array",
            "description": "The list of permission roles that the user group should have access to.",
            "example": [
              "country",
              "customer:read",
              "customer:update"
            ],
            "items": {
              "type": "string",
              "enum": [
                "base",
                "admin",
                "viskanAdmin",
                "accounting",
                "accountingconfig",
                "accountingjournal",
                "apiclient",
                "arrivalmethod",
                "bankaccount",
                "blockcode",
                "bonusconfig",
                "bulkmessaging",
                "campaign",
                "campaignconfig",
                "cancellationreason",
                "certificate",
                "city",
                "contentperiod",
                "country",
                "country:read",
                "country:create",
                "country:update",
                "country:delete",
                "creditreason",
                "creditrule",
                "currency",
                "customer",
                "customer:read",
                "customer:create",
                "customer:update",
                "customer:forget",
                "customercategory",
                "customerconfig",
                "customerimport",
                "customfield",
                "datasearch",
                "delivery",
                "dispatchplanning",
                "dropshipping",
                "duplicatecontrol",
                "duplicatecontrolconfig",
                "exchangerate",
                "filecomm",
                "helpdesk",
                "instorearrival",
                "instorecollect",
                "instoreconfig",
                "instoreoverview",
                "instorepick",
                "instorereturn",
                "inventory",
                "illegalword",
                "invoicetext",
                "invoicetype",
                "jobconfig",
                "jobconfigoverview",
                "jobhistory",
                "logisticsprovider",
                "media",
                "multibrand",
                "offer",
                "offer:create",
                "offer:delete",
                "offer:read",
                "offer:update",
                "orderconfig",
                "orderoverview",
                "payment",
                "paymentmethod",
                "paymentterms",
                "physicalstore",
                "postalcode",
                "pricecampaign",
                "pricelist",
                "product",
                "productcategory",
                "productconfig",
                "productreplacement",
                "purchaseorder",
                "redirect",
                "refund",
                "remarketingconfig",
                "reminder",
                "reminderconfig",
                "return",
                "returnreason",
                "seller",
                "serviceprovider",
                "settings",
                "shipmentbatchconfig",
                "shipmentoverview",
                "shipmentoverview:read",
                "shipmentoverview:create",
                "shipmentoverview:update",
                "shipmentoverview:cancel",
                "shipmentpicking",
                "shippingmethod",
                "shippingterms",
                "standardnote",
                "stocklocation",
                "stockmodule",
                "stockoverview",
                "stockvalue",
                "streamlineexpress",
                "streamlineexpress:read",
                "streamlineexpress:create",
                "streamlineexpress:update",
                "streamlineexpress:delete",
                "subscriptionmassupdate",
                "subscriptiontemplate",
                "subscriptiontemplate:read",
                "subscriptiontemplate:create",
                "subscriptiontemplate:update",
                "subscriptiontemplate:delete",
                "subscriptiontemplateconfig",
                "supplier",
                "templatetext",
                "user",
                "usergroup",
                "validname",
                "warehouse"
              ]
            }
          },
          "reports": {
            "type": "array",
            "description": "The list of report IDs that the user group should have access to.",
            "example": [
              10000,
              10001
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "warehouses": {
            "type": "array",
            "description": "The list of warehouses that the user group should have access to.",
            "items": {
              "$ref": "#/components/schemas/WarehouseKey"
            }
          },
          "returnReasonIds": {
            "type": "array",
            "description": "The list of return reasons IDs that the user group should have access to.",
            "example": [
              1,
              3
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "storeIds": {
            "type": "array",
            "description": "The list of web store IDs that the user group should have access to.",
            "example": [
              1
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            }
          }
        }
      },
      "WarehouseKey": {
        "type": "object",
        "properties": {
          "warehouseCompanyId": {
            "type": "integer",
            "format": "int32",
            "description": "The company ID of the warehouse.",
            "example": 0
          },
          "warehouseId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the warehouse.",
            "example": 1
          }
        }
      },
      "CreatedUserGroup": {
        "type": "object",
        "properties": {
          "groupId": {
            "type": "integer",
            "format": "int32",
            "description": "The identifier of the created user group.",
            "example": 1
          }
        }
      },
      "UpdateGlobalUserRequest": {
        "type": "object",
        "properties": {
          "blocked": {
            "type": "boolean",
            "description": "The block status to set, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": true,
            "x-viskan-nullable": "true"
          },
          "firstName": {
            "type": "string",
            "description": "The first name to set, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": "John",
            "x-viskan-nullable": "true"
          },
          "lastName": {
            "type": "string",
            "description": "The last name to set, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": "Doe",
            "x-viskan-nullable": "true"
          }
        }
      },
      "GroupModifications": {
        "type": "object",
        "properties": {
          "added": {
            "type": "array",
            "description": "The list of group IDs to add to the user.",
            "example": [
              1,
              3
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "removed": {
            "type": "array",
            "description": "The list of group IDs to remove from the user.",
            "example": [
              7
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            }
          }
        }
      },
      "TenantModifications": {
        "type": "object",
        "properties": {
          "added": {
            "type": "array",
            "description": "The list of connected tenant IDs to add to the user.",
            "example": [
              "8811e13d-8359-4a63-90c8-4c178b02e564",
              "bae25401-b6c1-465e-b2e6-607a2b40f854"
            ],
            "items": {
              "type": "string",
              "x-viskan-field-format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          "removed": {
            "type": "array",
            "description": "The list of connected tenant IDs to remove from the user.",
            "example": [
              "e34d6c1c-da01-4dd8-95a7-8bc5d2beab8f"
            ],
            "items": {
              "type": "string",
              "x-viskan-field-format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          }
        }
      },
      "UpdateUserRequest": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "description": "The first name to set, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": "John",
            "x-viskan-nullable": "true"
          },
          "lastName": {
            "type": "string",
            "description": "The last name to set, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": "Doe",
            "x-viskan-nullable": "true"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the user is active or not, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": true,
            "x-viskan-nullable": "true"
          },
          "permissionLevel": {
            "type": "string",
            "description": "The permission level to set, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "enum": [
              "NORMAL",
              "SUPERUSER",
              "ADMINISTRATOR"
            ],
            "example": "NORMAL",
            "x-viskan-nullable": "true"
          },
          "groups": {
            "$ref": "#/components/schemas/GroupModifications",
            "description": "Modifications to the list of user groups that the user is a member of."
          },
          "connectedTenants": {
            "$ref": "#/components/schemas/TenantModifications",
            "description": "Modifications to the list of connected tenants that the user is a member of."
          },
          "username": {
            "type": "string",
            "deprecated": true,
            "description": "The legacy username of the user. This is only needed to access the older generations of Viskan Backoffice. Avoid using this.",
            "x-viskan-nullable": "true"
          },
          "password": {
            "type": "string",
            "deprecated": true,
            "description": "The legacy password of the user. This is only needed by Viskan customers that access the older generation of Viskan Backoffice and they don\u0027t use matching usernames between the Citrix accounts and these users.",
            "x-viskan-nullable": "true"
          },
          "languageId": {
            "type": "integer",
            "format": "int32",
            "deprecated": true,
            "description": "The legacy language of the user. This is only used by the older generations of Viskan Backoffice. Avoid using this.",
            "x-viskan-nullable": "true"
          }
        }
      },
      "ReportModifications": {
        "type": "object",
        "properties": {
          "added": {
            "type": "array",
            "description": "Reports that should be added.",
            "example": [
              10000,
              10001
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "uniqueItems": true
          },
          "removed": {
            "type": "array",
            "description": "Reports that should be removed.",
            "example": [
              10002
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "uniqueItems": true
          }
        }
      },
      "ReturnReasonModifications": {
        "type": "object",
        "properties": {
          "added": {
            "type": "array",
            "description": "Return reasons that should be added.",
            "items": {
              "$ref": "#/components/schemas/ReturnReason_2"
            },
            "uniqueItems": true
          },
          "removed": {
            "type": "array",
            "description": "Return reasons that should be removed.",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "uniqueItems": true
          }
        }
      },
      "RoleModifications": {
        "type": "object",
        "properties": {
          "added": {
            "type": "array",
            "description": "Roles that should be added.",
            "example": [
              "currency"
            ],
            "items": {
              "type": "string",
              "enum": [
                "base",
                "admin",
                "viskanAdmin",
                "accounting",
                "accountingconfig",
                "accountingjournal",
                "apiclient",
                "arrivalmethod",
                "bankaccount",
                "blockcode",
                "bonusconfig",
                "bulkmessaging",
                "campaign",
                "campaignconfig",
                "cancellationreason",
                "certificate",
                "city",
                "contentperiod",
                "country",
                "country:read",
                "country:create",
                "country:update",
                "country:delete",
                "creditreason",
                "creditrule",
                "currency",
                "customer",
                "customer:read",
                "customer:create",
                "customer:update",
                "customer:forget",
                "customercategory",
                "customerconfig",
                "customerimport",
                "customfield",
                "datasearch",
                "delivery",
                "dispatchplanning",
                "dropshipping",
                "duplicatecontrol",
                "duplicatecontrolconfig",
                "exchangerate",
                "filecomm",
                "helpdesk",
                "instorearrival",
                "instorecollect",
                "instoreconfig",
                "instoreoverview",
                "instorepick",
                "instorereturn",
                "inventory",
                "illegalword",
                "invoicetext",
                "invoicetype",
                "jobconfig",
                "jobconfigoverview",
                "jobhistory",
                "logisticsprovider",
                "media",
                "multibrand",
                "offer",
                "offer:create",
                "offer:delete",
                "offer:read",
                "offer:update",
                "orderconfig",
                "orderoverview",
                "payment",
                "paymentmethod",
                "paymentterms",
                "physicalstore",
                "postalcode",
                "pricecampaign",
                "pricelist",
                "product",
                "productcategory",
                "productconfig",
                "productreplacement",
                "purchaseorder",
                "redirect",
                "refund",
                "remarketingconfig",
                "reminder",
                "reminderconfig",
                "return",
                "returnreason",
                "seller",
                "serviceprovider",
                "settings",
                "shipmentbatchconfig",
                "shipmentoverview",
                "shipmentoverview:read",
                "shipmentoverview:create",
                "shipmentoverview:update",
                "shipmentoverview:cancel",
                "shipmentpicking",
                "shippingmethod",
                "shippingterms",
                "standardnote",
                "stocklocation",
                "stockmodule",
                "stockoverview",
                "stockvalue",
                "streamlineexpress",
                "streamlineexpress:read",
                "streamlineexpress:create",
                "streamlineexpress:update",
                "streamlineexpress:delete",
                "subscriptionmassupdate",
                "subscriptiontemplate",
                "subscriptiontemplate:read",
                "subscriptiontemplate:create",
                "subscriptiontemplate:update",
                "subscriptiontemplate:delete",
                "subscriptiontemplateconfig",
                "supplier",
                "templatetext",
                "user",
                "usergroup",
                "validname",
                "warehouse"
              ]
            },
            "uniqueItems": true
          },
          "removed": {
            "type": "array",
            "description": "Roles that should be removed.",
            "example": [
              "customer:update"
            ],
            "items": {
              "type": "string",
              "enum": [
                "base",
                "admin",
                "viskanAdmin",
                "accounting",
                "accountingconfig",
                "accountingjournal",
                "apiclient",
                "arrivalmethod",
                "bankaccount",
                "blockcode",
                "bonusconfig",
                "bulkmessaging",
                "campaign",
                "campaignconfig",
                "cancellationreason",
                "certificate",
                "city",
                "contentperiod",
                "country",
                "country:read",
                "country:create",
                "country:update",
                "country:delete",
                "creditreason",
                "creditrule",
                "currency",
                "customer",
                "customer:read",
                "customer:create",
                "customer:update",
                "customer:forget",
                "customercategory",
                "customerconfig",
                "customerimport",
                "customfield",
                "datasearch",
                "delivery",
                "dispatchplanning",
                "dropshipping",
                "duplicatecontrol",
                "duplicatecontrolconfig",
                "exchangerate",
                "filecomm",
                "helpdesk",
                "instorearrival",
                "instorecollect",
                "instoreconfig",
                "instoreoverview",
                "instorepick",
                "instorereturn",
                "inventory",
                "illegalword",
                "invoicetext",
                "invoicetype",
                "jobconfig",
                "jobconfigoverview",
                "jobhistory",
                "logisticsprovider",
                "media",
                "multibrand",
                "offer",
                "offer:create",
                "offer:delete",
                "offer:read",
                "offer:update",
                "orderconfig",
                "orderoverview",
                "payment",
                "paymentmethod",
                "paymentterms",
                "physicalstore",
                "postalcode",
                "pricecampaign",
                "pricelist",
                "product",
                "productcategory",
                "productconfig",
                "productreplacement",
                "purchaseorder",
                "redirect",
                "refund",
                "remarketingconfig",
                "reminder",
                "reminderconfig",
                "return",
                "returnreason",
                "seller",
                "serviceprovider",
                "settings",
                "shipmentbatchconfig",
                "shipmentoverview",
                "shipmentoverview:read",
                "shipmentoverview:create",
                "shipmentoverview:update",
                "shipmentoverview:cancel",
                "shipmentpicking",
                "shippingmethod",
                "shippingterms",
                "standardnote",
                "stocklocation",
                "stockmodule",
                "stockoverview",
                "stockvalue",
                "streamlineexpress",
                "streamlineexpress:read",
                "streamlineexpress:create",
                "streamlineexpress:update",
                "streamlineexpress:delete",
                "subscriptionmassupdate",
                "subscriptiontemplate",
                "subscriptiontemplate:read",
                "subscriptiontemplate:create",
                "subscriptiontemplate:update",
                "subscriptiontemplate:delete",
                "subscriptiontemplateconfig",
                "supplier",
                "templatetext",
                "user",
                "usergroup",
                "validname",
                "warehouse"
              ]
            },
            "uniqueItems": true
          }
        }
      },
      "UpdateUserGroup": {
        "type": "object",
        "properties": {
          "groupName": {
            "type": "string",
            "description": "The name to set, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": "Customer service",
            "x-viskan-nullable": "true"
          },
          "active": {
            "type": "boolean",
            "description": "The active-status to set, or \u003ccode\u003enull\u003c/code\u003e to not update it.",
            "example": true,
            "x-viskan-nullable": "true"
          },
          "reports": {
            "$ref": "#/components/schemas/ReportModifications",
            "description": "Modifications to the list of report IDs that the user group have access to."
          },
          "roles": {
            "$ref": "#/components/schemas/RoleModifications",
            "description": "Modifications to the list of permission roles that the user group have access to."
          },
          "warehouses": {
            "$ref": "#/components/schemas/WarehouseModifications",
            "description": "Modifications to the list of warehouses that the user group have access to."
          },
          "returnReasons": {
            "$ref": "#/components/schemas/ReturnReasonModifications",
            "description": "Modifications to the list of return reasons that the user group have access to."
          },
          "webStores": {
            "$ref": "#/components/schemas/WebStoreModifications",
            "description": "Modifications to the list of web stores that the user group have access to."
          }
        }
      },
      "WarehouseModifications": {
        "type": "object",
        "properties": {
          "added": {
            "type": "array",
            "description": "Warehouses that should be added.",
            "items": {
              "$ref": "#/components/schemas/WarehouseKey"
            },
            "uniqueItems": true
          },
          "removed": {
            "type": "array",
            "description": "Warehouses that should be removed.",
            "items": {
              "$ref": "#/components/schemas/WarehouseKey"
            },
            "uniqueItems": true
          }
        }
      },
      "WebStore": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the web store.",
            "example": 1
          }
        }
      },
      "WebStoreModifications": {
        "type": "object",
        "properties": {
          "added": {
            "type": "array",
            "description": "Web stores that should be added.",
            "items": {
              "$ref": "#/components/schemas/WebStore"
            },
            "uniqueItems": true
          },
          "removed": {
            "type": "array",
            "description": "Web stores that should be removed.",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "uniqueItems": true
          }
        }
      },
      "GlobalUser": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "The identifier of the user.",
            "example": "08ce1500-a817-40e8-8e5a-36d3cef125df",
            "x-viskan-field-format": "uuid"
          },
          "centralUserId": {
            "type": "integer",
            "format": "int32",
            "description": "The central (internal) user identifier.",
            "example": 12345
          },
          "emailAddress": {
            "type": "string",
            "description": "The email address of the user.",
            "example": "john.doe@viskan.com",
            "x-viskan-field-format": "email-address"
          },
          "profilePictureURL": {
            "type": "string",
            "description": "The URL of the user\u0027s profile picture.",
            "example": "https://profilepicture.connect.visma.com/v1.0/08ce1500-a817-40e8-8e5a-36d3cef125df?client_id\u003dviskan",
            "x-viskan-field-format": "url"
          },
          "firstName": {
            "type": "string",
            "description": "The first name of the user.",
            "example": "John"
          },
          "lastName": {
            "type": "string",
            "description": "The last name of the user.",
            "example": "Doe"
          },
          "blocked": {
            "type": "boolean",
            "description": "Whether the user is blocked.",
            "example": false
          }
        }
      },
      "ProfileInfo": {
        "type": "object",
        "description": "Information about the user profile.",
        "properties": {
          "userId": {
            "type": "string",
            "description": "The identifier of the user.",
            "example": "08ce1500-a817-40e8-8e5a-36d3cef125df",
            "x-viskan-field-format": "uuid"
          },
          "emailAddress": {
            "type": "string",
            "description": "The email address of the user.",
            "example": "john.doe@example.com",
            "x-viskan-field-format": "email-address"
          },
          "firstName": {
            "type": "string",
            "description": "The first name of the user.",
            "example": "John"
          },
          "lastName": {
            "type": "string",
            "description": "The last name of the user.",
            "example": "Doe"
          },
          "profilePictureURL": {
            "type": "string",
            "description": "The URL of their profile picture.",
            "example": "https://profilepicture.connect.visma.com/v1.0/08ce1500-a817-40e8-8e5a-36d3cef125df?client_id\u003dviskan",
            "x-viskan-field-format": "url"
          }
        }
      },
      "ProfileDetails": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "The identifier of the user.",
            "example": "08ce1500-a817-40e8-8e5a-36d3cef125df",
            "x-viskan-field-format": "uuid"
          },
          "emailAddress": {
            "type": "string",
            "description": "The email address of the user.",
            "example": "john.doe@viskan.com",
            "x-viskan-field-format": "email-address"
          },
          "firstName": {
            "type": "string",
            "description": "The first name of the user.",
            "example": "John"
          },
          "lastName": {
            "type": "string",
            "description": "The last name of the user.",
            "example": "Doe"
          },
          "viskanEmployee": {
            "type": "boolean",
            "description": "Indicates whether the user is a Viskan employee.",
            "example": false
          },
          "profilePictureURL": {
            "type": "string",
            "description": "The URL of their profile picture.",
            "example": "https://profilepicture.connect.visma.com/v1.0/08ce1500-a817-40e8-8e5a-36d3cef125df?client_id\u003dviskan",
            "x-viskan-field-format": "url"
          }
        }
      },
      "UserListItem": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "The identifier of the user.",
            "example": "08ce1500-a817-40e8-8e5a-36d3cef125df",
            "x-viskan-field-format": "uuid"
          },
          "emailAddress": {
            "type": "string",
            "description": "The email address of the user.",
            "example": "john.doe@viskan.se",
            "x-viskan-field-format": "email-address"
          },
          "firstName": {
            "type": "string",
            "description": "The first name of the user.",
            "example": "John"
          },
          "lastName": {
            "type": "string",
            "description": "The last name of the user.",
            "example": "Doe"
          },
          "profilePictureURL": {
            "type": "string",
            "description": "The URL of the user\u0027s profile picture. This value is empty for users that have not yet accepted their initial invitation.",
            "example": "https://profilepicture.connect.visma.com/v1.0/08ce1500-a817-40e8-8e5a-36d3cef125df?client_id\u003dviskan",
            "x-viskan-field-format": "url"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the user is active.",
            "example": true
          },
          "inConnectedTenantsOnly": {
            "type": "boolean",
            "description": "Whether the user is only active in connected tenants, and not the current one. This is only applicable for setups with connected tenants. Otherwise, it always has the value \u003ccode\u003efalse\u003c/code\u003e.",
            "example": false
          },
          "blocked": {
            "type": "boolean",
            "description": "Whether the user is blocked centrally by Viskan.",
            "example": false
          },
          "permissionLevel": {
            "type": "string",
            "description": "The permission level of the user.",
            "enum": [
              "NORMAL",
              "SUPERUSER",
              "ADMINISTRATOR"
            ],
            "example": "NORMAL"
          }
        }
      },
      "ConnectedTenant": {
        "type": "object",
        "properties": {
          "tenantId": {
            "type": "string",
            "description": "The identifier of the connected tenant.",
            "example": "46c5b0b0-c42a-44b0-97e2-39ef2f9118ac",
            "x-viskan-field-format": "uuid"
          },
          "tenantName": {
            "type": "string",
            "description": "The name of the tenant.",
            "example": "Viskan System AB"
          }
        }
      },
      "GroupData": {
        "type": "object",
        "properties": {
          "groupId": {
            "type": "integer",
            "format": "int32",
            "description": "The identifier of the group.",
            "example": 1
          },
          "groupName": {
            "type": "string",
            "description": "The name of the group.",
            "example": "Customer service"
          }
        }
      },
      "UserData": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "The identifier of the user.",
            "example": "08ce1500-a817-40e8-8e5a-36d3cef125df",
            "x-viskan-field-format": "uuid"
          },
          "emailAddress": {
            "type": "string",
            "description": "The email address of the user.",
            "example": "john.doe@viskan.se",
            "x-viskan-field-format": "email-address"
          },
          "firstName": {
            "type": "string",
            "description": "The first name of the user.",
            "example": "John"
          },
          "lastName": {
            "type": "string",
            "description": "The last name of the user.",
            "example": "Doe"
          },
          "profilePictureURL": {
            "type": "string",
            "description": "The URL of the user\u0027s profile picture. This value is empty for users that have not yet accepted their initial invitation.",
            "example": "https://profilepicture.connect.visma.com/v1.0/08ce1500-a817-40e8-8e5a-36d3cef125df?client_id\u003dviskan",
            "x-viskan-field-format": "url"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the user is active.",
            "example": true
          },
          "blocked": {
            "type": "boolean",
            "description": "Whether the user is blocked centrally by Viskan.",
            "example": false
          },
          "permissionLevel": {
            "type": "string",
            "description": "The permission level of the user.",
            "enum": [
              "NORMAL",
              "SUPERUSER",
              "ADMINISTRATOR"
            ],
            "example": "NORMAL"
          },
          "groups": {
            "type": "array",
            "description": "The user groups that the user is a member of.",
            "items": {
              "$ref": "#/components/schemas/GroupData"
            }
          },
          "connectedTenants": {
            "type": "array",
            "description": "The connected tenants that this user is a member of. Only applicable in setups that use connected tenants. If connected tenants are not used, the value will be an empty list.",
            "items": {
              "$ref": "#/components/schemas/ConnectedTenant"
            }
          },
          "physicalStores": {
            "type": "array",
            "description": "The identifiers of the physical stores that the user is an active member of.",
            "example": [
              "3fa85f64-5717-4562-b3fc-2c963f66afa6"
            ],
            "items": {
              "type": "string",
              "x-viskan-field-format": "uuid"
            },
            "x-viskan-field-format": "uuid"
          },
          "username": {
            "type": "string",
            "deprecated": true,
            "description": "The legacy username of the user. This is only needed to access the older generations of Viskan Backoffice. Avoid using this."
          },
          "languageId": {
            "type": "integer",
            "format": "int32",
            "deprecated": true,
            "description": "The legacy language of the user. This is only used by the older generations of Viskan Backoffice. Avoid using this."
          }
        }
      },
      "UserGroupListItem": {
        "type": "object",
        "properties": {
          "groupId": {
            "type": "integer",
            "format": "int32",
            "description": "The identifier of the user group.",
            "example": 1
          },
          "groupName": {
            "type": "string",
            "description": "The name of the user group.",
            "example": "Customer service"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the user group is active.",
            "example": true
          }
        }
      },
      "UserGroupData": {
        "type": "object",
        "properties": {
          "groupId": {
            "type": "integer",
            "format": "int32",
            "description": "The identifier of the user group.",
            "example": 1
          },
          "groupName": {
            "type": "string",
            "description": "The name of the user group.",
            "example": "Customer service"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the user group is active.",
            "example": true
          },
          "roles": {
            "type": "array",
            "description": "The list of permission roles that the user group have access to.",
            "example": [
              "country",
              "customer:read",
              "customer:update"
            ],
            "items": {
              "type": "string",
              "enum": [
                "base",
                "admin",
                "viskanAdmin",
                "accounting",
                "accountingconfig",
                "accountingjournal",
                "apiclient",
                "arrivalmethod",
                "bankaccount",
                "blockcode",
                "bonusconfig",
                "bulkmessaging",
                "campaign",
                "campaignconfig",
                "cancellationreason",
                "certificate",
                "city",
                "contentperiod",
                "country",
                "country:read",
                "country:create",
                "country:update",
                "country:delete",
                "creditreason",
                "creditrule",
                "currency",
                "customer",
                "customer:read",
                "customer:create",
                "customer:update",
                "customer:forget",
                "customercategory",
                "customerconfig",
                "customerimport",
                "customfield",
                "datasearch",
                "delivery",
                "dispatchplanning",
                "dropshipping",
                "duplicatecontrol",
                "duplicatecontrolconfig",
                "exchangerate",
                "filecomm",
                "helpdesk",
                "instorearrival",
                "instorecollect",
                "instoreconfig",
                "instoreoverview",
                "instorepick",
                "instorereturn",
                "inventory",
                "illegalword",
                "invoicetext",
                "invoicetype",
                "jobconfig",
                "jobconfigoverview",
                "jobhistory",
                "logisticsprovider",
                "media",
                "multibrand",
                "offer",
                "offer:create",
                "offer:delete",
                "offer:read",
                "offer:update",
                "orderconfig",
                "orderoverview",
                "payment",
                "paymentmethod",
                "paymentterms",
                "physicalstore",
                "postalcode",
                "pricecampaign",
                "pricelist",
                "product",
                "productcategory",
                "productconfig",
                "productreplacement",
                "purchaseorder",
                "redirect",
                "refund",
                "remarketingconfig",
                "reminder",
                "reminderconfig",
                "return",
                "returnreason",
                "seller",
                "serviceprovider",
                "settings",
                "shipmentbatchconfig",
                "shipmentoverview",
                "shipmentoverview:read",
                "shipmentoverview:create",
                "shipmentoverview:update",
                "shipmentoverview:cancel",
                "shipmentpicking",
                "shippingmethod",
                "shippingterms",
                "standardnote",
                "stocklocation",
                "stockmodule",
                "stockoverview",
                "stockvalue",
                "streamlineexpress",
                "streamlineexpress:read",
                "streamlineexpress:create",
                "streamlineexpress:update",
                "streamlineexpress:delete",
                "subscriptionmassupdate",
                "subscriptiontemplate",
                "subscriptiontemplate:read",
                "subscriptiontemplate:create",
                "subscriptiontemplate:update",
                "subscriptiontemplate:delete",
                "subscriptiontemplateconfig",
                "supplier",
                "templatetext",
                "user",
                "usergroup",
                "validname",
                "warehouse"
              ]
            }
          },
          "reports": {
            "type": "array",
            "description": "The list of report IDs that the user group have access to.",
            "example": [
              10000,
              10001
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            }
          },
          "warehouses": {
            "type": "array",
            "description": "The list of warehouses that the user group have access to.",
            "items": {
              "$ref": "#/components/schemas/WarehouseKey"
            }
          },
          "returnReasons": {
            "type": "array",
            "description": "The list of return reasons that the user group have access to.",
            "items": {
              "$ref": "#/components/schemas/ReturnReason_2"
            }
          },
          "webStores": {
            "type": "array",
            "description": "The list of web stores that the user group have access to.",
            "items": {
              "$ref": "#/components/schemas/WebStore"
            }
          }
        }
      },
      "Member": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "The ID of the user.",
            "example": "08ce1500-a817-40e8-8e5a-36d3cef125df"
          },
          "firstName": {
            "type": "string",
            "description": "The first name of the user.",
            "example": "John"
          },
          "lastName": {
            "type": "string",
            "description": "The last name of the user.",
            "example": "Doe"
          },
          "emailAddress": {
            "type": "string",
            "description": "The email address of the user.",
            "example": "john.doe@viskan.com"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the user is active.",
            "example": true
          }
        }
      },
      "ReportData": {
        "type": "object",
        "properties": {
          "reportId": {
            "type": "integer",
            "format": "int32",
            "description": "The identifier of the report.",
            "example": 10305
          },
          "reportName": {
            "type": "string",
            "description": "The name of the report.",
            "example": "General invoice (SE)"
          },
          "reportGroupId": {
            "type": "integer",
            "format": "int32",
            "description": "An identifier of the report group that the report belongs to.",
            "example": 1
          }
        }
      },
      "ReturnReason_2": {
        "type": "object",
        "properties": {
          "returnReasonId": {
            "type": "integer",
            "format": "int32",
            "description": "The ID of the return reason.",
            "example": 1
          }
        }
      },
      "AddressInput": {
        "type": "object",
        "properties": {
          "addressLine1": {
            "type": "string",
            "description": "Street address.",
            "example": "Allégatan 1"
          },
          "careOf": {
            "type": "string",
            "description": "Care of / address description."
          },
          "postalCode": {
            "type": "string",
            "description": "Postal code.",
            "example": "50344"
          },
          "city": {
            "type": "string",
            "description": "City.",
            "example": "Borås"
          },
          "administrativeDivision": {
            "type": "string",
            "description": "Administrative division / province."
          },
          "countryCode": {
            "type": "string",
            "description": "ISO country code.",
            "example": "SE"
          }
        }
      },
      "WarehouseContactInfo": {
        "type": "object",
        "properties": {
          "contactPerson": {
            "type": "string",
            "description": "Contact person.",
            "example": "John Doe"
          },
          "primaryPhoneNumber": {
            "type": "string",
            "description": "Primary phone number.",
            "example": "+46701234567"
          },
          "alternativePhoneNumber": {
            "type": "string",
            "description": "Alternative phone number."
          },
          "emailAddress": {
            "type": "string",
            "description": "Email address.",
            "example": "warehouse@example.com"
          }
        }
      },
      "WarehouseCreateRequest": {
        "type": "object",
        "properties": {
          "warehouseName": {
            "type": "string",
            "description": "The name of the warehouse.",
            "example": "New Warehouse"
          },
          "warehouseNumber": {
            "type": "string",
            "description": "The warehouse number.",
            "example": "WH-002"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the warehouse is active. Defaults to true.",
            "example": true
          },
          "currencyCode": {
            "type": "string",
            "description": "ISO currency code.",
            "example": "SEK"
          },
          "settings": {
            "$ref": "#/components/schemas/WarehouseSettings",
            "description": "Warehouse configuration settings."
          },
          "address": {
            "$ref": "#/components/schemas/AddressInput",
            "description": "Warehouse address details."
          },
          "contactInfo": {
            "$ref": "#/components/schemas/WarehouseContactInfo",
            "description": "Warehouse contact information."
          }
        }
      },
      "WarehouseSettings": {
        "type": "object",
        "properties": {
          "managedByExternalSystem": {
            "type": "boolean",
            "description": "Whether the warehouse is managed by an external system.",
            "example": false
          },
          "balancesUpdatedByExternalSystem": {
            "type": "boolean",
            "description": "Whether stock balances are updated by an external system.",
            "example": false
          },
          "locationsAllowed": {
            "type": "boolean",
            "description": "Whether stock locations are allowed.",
            "example": true
          },
          "usedForDeliveries": {
            "type": "boolean",
            "description": "Whether the warehouse is used for deliveries.",
            "example": true
          },
          "usedForReturns": {
            "type": "boolean",
            "description": "Whether the warehouse is used for returns.",
            "example": false
          },
          "purchasingAllowed": {
            "type": "boolean",
            "description": "Whether purchasing is allowed.",
            "example": false
          },
          "manualSelectionOnly": {
            "type": "boolean",
            "description": "Whether the warehouse can only be selected manually.",
            "example": false
          },
          "includeInStockBalances": {
            "type": "boolean",
            "description": "Whether to include in stock balances.",
            "example": true
          }
        }
      },
      "WarehouseCreatedResponse": {
        "type": "object",
        "properties": {
          "warehouseId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the created warehouse.",
            "example": 123
          }
        }
      },
      "WarehouseUpdateRequest": {
        "type": "object",
        "properties": {
          "warehouseName": {
            "type": "string",
            "description": "The name of the warehouse, or null to not update.",
            "example": "Main Warehouse"
          },
          "warehouseNumber": {
            "type": "string",
            "description": "The warehouse number, or null to not update.",
            "example": "WH-001"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the warehouse is active, or null to not update.",
            "example": true
          },
          "currencyCode": {
            "type": "string",
            "description": "ISO currency code, or null to not update.",
            "example": "SEK"
          },
          "settings": {
            "$ref": "#/components/schemas/WarehouseSettings",
            "description": "Warehouse configuration settings, or null to not update."
          },
          "address": {
            "$ref": "#/components/schemas/AddressInput",
            "description": "Warehouse address details, or null to not update."
          },
          "contactInfo": {
            "$ref": "#/components/schemas/WarehouseContactInfo",
            "description": "Warehouse contact information, or null to not update."
          }
        }
      },
      "WarehouseListItem": {
        "type": "object",
        "properties": {
          "warehouseId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the warehouse.",
            "example": 1
          },
          "warehouseName": {
            "type": "string",
            "description": "The name of the warehouse.",
            "example": "Main Warehouse"
          },
          "warehouseNumber": {
            "type": "string",
            "description": "The warehouse number.",
            "example": "WH-001"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the warehouse is active.",
            "example": true
          }
        }
      },
      "WarehouseAddress": {
        "type": "object",
        "properties": {
          "addressLine1": {
            "type": "string",
            "description": "Street address.",
            "example": "Allégatan 1"
          },
          "careOf": {
            "type": "string",
            "description": "Care of / address description."
          },
          "postalCode": {
            "type": "string",
            "description": "Postal code.",
            "example": "50344"
          },
          "city": {
            "type": "string",
            "description": "City.",
            "example": "Borås"
          },
          "administrativeDivision": {
            "type": "string",
            "description": "Administrative division / province."
          },
          "countryCode": {
            "type": "string",
            "description": "ISO country code.",
            "example": "SE"
          }
        }
      },
      "WarehouseResponse": {
        "type": "object",
        "properties": {
          "warehouseId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the warehouse.",
            "example": 1
          },
          "warehouseName": {
            "type": "string",
            "description": "The name of the warehouse.",
            "example": "Main Warehouse"
          },
          "warehouseNumber": {
            "type": "string",
            "description": "The warehouse number.",
            "example": "WH-001"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the warehouse is active.",
            "example": true
          },
          "currencyCode": {
            "type": "string",
            "description": "The ISO currency code.",
            "example": "SEK"
          },
          "settings": {
            "$ref": "#/components/schemas/WarehouseSettings",
            "description": "Warehouse configuration settings."
          },
          "address": {
            "$ref": "#/components/schemas/WarehouseAddress",
            "description": "Warehouse address details."
          },
          "contactInfo": {
            "$ref": "#/components/schemas/WarehouseContactInfo",
            "description": "Warehouse contact information."
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the warehouse was last modified."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the warehouse was created."
          }
        }
      },
      "StocklocationListItem": {
        "type": "object",
        "properties": {
          "stocklocationId": {
            "type": "integer",
            "format": "int32",
            "description": "The unique identifier of the stock location.",
            "example": 1
          },
          "warehouseId": {
            "type": "integer",
            "format": "int32",
            "description": "The identifier of the warehouse.",
            "example": 1
          },
          "locationId": {
            "type": "integer",
            "format": "int32",
            "description": "The location identifier within the warehouse.",
            "example": 0
          },
          "description": {
            "type": "string",
            "description": "The description of the stock location.",
            "example": "(None)"
          },
          "alternativeDescription": {
            "type": "string",
            "description": "The alternative description of the stock location.",
            "example": "(None)"
          },
          "active": {
            "type": "boolean",
            "description": "Indicates whether the stock location is active.",
            "example": true
          },
          "sort": {
            "type": "integer",
            "format": "int32",
            "description": "The sort order of the stock location.",
            "example": 0
          }
        }
      },
      "LayoutResponse": {
        "type": "object",
        "properties": {
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the layout template.",
            "example": "acbbeca5-e63d-49fb-ba71-f32ba63e6073",
            "x-viskan-field-format": "uuid"
          },
          "layoutName": {
            "type": "string",
            "description": "The display name of the layout template, used for identification in the CMS.",
            "example": "Start Page layout"
          },
          "layoutDescription": {
            "type": "string",
            "description": "An optional human-readable description of the layout\u0027s purpose and intended use.",
            "example": "Layout created for start pages",
            "x-viskan-nullable": "true"
          },
          "layoutType": {
            "type": "string",
            "description": "The page type this layout is designed for, determining where it can be used (e.g. START_PAGE for landing pages, PRODUCT_PAGE for product detail pages, HEADER/FOOTER for shared page sections).",
            "enum": [
              "START_PAGE",
              "PRODUCT_PAGE",
              "PRODUCT_LIST",
              "CHECKOUT",
              "SEARCH",
              "NOT_FOUND",
              "LOCALE",
              "INFO",
              "HEADER",
              "FOOTER",
              "MISC"
            ],
            "example": "START_PAGE"
          },
          "sections": {
            "type": "array",
            "description": "The sections included in this layout, defining the structure and content areas of pages using this layout.",
            "items": {
              "$ref": "#/components/schemas/LayoutSectionResponse_2"
            }
          }
        }
      },
      "LayoutSectionVariableResponse": {
        "type": "object",
        "properties": {
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the variable. This ID is referenced as a placeholder in the section\u0027s content template (e.g. {variableId}) and used to match variable values from pages.",
            "example": "4dd9fd6f-9403-49e6-83df-2550abac538e",
            "x-viskan-field-format": "uuid"
          },
          "variableName": {
            "type": "string",
            "description": "The display name of the variable, used for identification in the CMS editor when editing page content.",
            "example": "Hero paragraph"
          },
          "variableType": {
            "type": "string",
            "description": "The data type of the variable, determining what kind of content it holds.",
            "enum": [
              "TEXT",
              "IMAGE_URL",
              "CATEGORY"
            ],
            "example": "TEXT"
          }
        }
      },
      "LanguageAlternativeResponse_2": {
        "type": "object",
        "properties": {
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The content locale this alternative version is associated with. Exclusive with language code and country code.",
            "example": "774ab227-18fe-4541-ba3b-06ad3e95ae75",
            "x-viskan-field-format": "uuid"
          },
          "languageCode": {
            "type": "string",
            "description": "Language code (in ISO 639-1 format) for the alternative version. Exclusive with content locale.",
            "example": "sv"
          },
          "countryCode": {
            "type": "string",
            "description": "Country code for the alternative version. Exclusive with content locale.",
            "example": "SE"
          },
          "path": {
            "type": "string",
            "description": "The URL path for this language version of the page, used for hreflang links and language switching.",
            "example": "/start-sv",
            "x-viskan-nullable": "true"
          }
        }
      },
      "PageSearchResponse_2": {
        "type": "object",
        "properties": {
          "categoryId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the category this page belongs to in the web page hierarchy.",
            "example": "fb840e50-8a8b-477c-a3c8-fffe2bf97e1c",
            "x-viskan-field-format": "uuid"
          },
          "categoryName": {
            "type": "string",
            "description": "The display name of the category, typically used in navigation menus and breadcrumbs. Null for categories that are not part of the content category tree.",
            "example": "Start Page",
            "x-viskan-nullable": "true"
          },
          "hidden": {
            "type": "boolean",
            "description": "Whether the page is hidden from navigation. Hidden pages are not shown in menus or category trees but can still be accessed via direct URL. Null for categories that are not part of the content category tree.",
            "example": false,
            "x-viskan-nullable": "true"
          },
          "indexed": {
            "type": "boolean",
            "description": "Whether the page is indexed by search engines. Non-indexed pages are excluded from sitemaps and include a noindex directive. Null for categories that are not part of the content category tree.",
            "example": true,
            "x-viskan-nullable": "true"
          },
          "protectionLevel": {
            "type": "string",
            "description": "The protection level of the category, determining access restrictions. A protected category (protectionLevel other than NONE) requires authentication to access.",
            "enum": [
              "NONE",
              "LOW",
              "MEDIUM",
              "HIGH"
            ],
            "example": "NONE",
            "x-viskan-nullable": "true"
          },
          "protectionFallbackCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "Fallback category in case protection level of a user is not met, i.e. user is not logged in.",
            "example": "093ffd95-76b6-4249-a410-c984327c94eb",
            "x-viskan-field-format": "uuid"
          },
          "path": {
            "type": "string",
            "description": "The URL path segment used for routing to this page, e.g. \u0027/start\u0027 or \u0027/black-week-sale\u0027.",
            "example": "/start",
            "x-viskan-nullable": "true"
          },
          "pageId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the page.",
            "example": "d8ff524e-1272-4a15-b23f-261964c3554a",
            "x-viskan-field-format": "uuid"
          },
          "title": {
            "type": "string",
            "description": "The display title of the page, typically shown as the page heading and in browser tabs.",
            "example": "Black Week Sale"
          },
          "metaTitle": {
            "type": "string",
            "description": "The HTML meta title used for SEO, displayed in browser tabs and search engine results.",
            "example": "Start Page for Black Week Sale"
          },
          "metaDescription": {
            "type": "string",
            "description": "The HTML meta description used for SEO, typically displayed as the snippet in search engine results.",
            "example": "Temporary page for Black Week Sale"
          },
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The content locale this page is associated with. Exclusive with language code and country code.",
            "example": "774ab227-18fe-4541-ba3b-06ad3e95ae75",
            "x-viskan-field-format": "uuid"
          },
          "languageCode": {
            "type": "string",
            "description": "Language code (in ISO 639-1 format) of the page. Exclusive with content locale.",
            "example": "en"
          },
          "countryCode": {
            "type": "string",
            "description": "Country code of the page. Exclusive with content locale.",
            "example": "SE"
          },
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the layout template that defines the structure and sections of this page.",
            "example": "e8391697-5592-434a-9e20-ac2316adc235",
            "x-viskan-field-format": "uuid"
          },
          "parentCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the parent category in the category tree hierarchy. Null for root-level categories.",
            "example": "0ee32a6e-0c4d-4f7b-bd89-f21ddad81135",
            "x-viskan-field-format": "uuid",
            "x-viskan-nullable": "true"
          },
          "siblingCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the next sibling category in the tree, used for ordered navigation between categories at the same level. Null if this is the last sibling.",
            "example": "04e0069f-8f37-43ce-952e-9c248feacb11",
            "x-viskan-field-format": "uuid",
            "x-viskan-nullable": "true"
          },
          "languageAlternatives": {
            "type": "array",
            "description": "Alternative language versions of the page, used for hreflang links and language switching.",
            "items": {
              "$ref": "#/components/schemas/LanguageAlternativeResponse_2"
            }
          },
          "variables": {
            "type": "array",
            "description": "List of variable values for this page. Each variable provides the actual content that populates a placeholder defined in the page\u0027s layout sections.",
            "items": {
              "$ref": "#/components/schemas/PageVariableResponse_2"
            }
          }
        }
      },
      "PageVariableResponse_2": {
        "type": "object",
        "properties": {
          "layoutSectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of the layout section this variable belongs to, linking the variable value to a specific section in the page\u0027s layout.",
            "example": "be0111c5-a24b-47bd-86f7-77c12d632bdc",
            "x-viskan-field-format": "uuid"
          },
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the variable, matching a variable definition in the layout section.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "variableValue": {
            "type": "string",
            "description": "The actual content value for this variable (e.g. text or an image URL) that replaces the variable\u0027s placeholder in the section content template.",
            "example": "Welcome to start page!"
          }
        }
      },
      "CategoryTreeResponse_2": {
        "type": "object",
        "properties": {
          "categoryTreeId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the category in the web page hierarchy.",
            "example": "6b2a2871-f20d-4fa0-895e-e3c41976db7a",
            "x-viskan-field-format": "uuid"
          },
          "categoryId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of the category in the web page hierarchy.",
            "example": "fb840e50-8a8b-477c-a3c8-fffe2bf97e1c",
            "x-viskan-field-format": "uuid"
          },
          "categoryName": {
            "type": "string",
            "description": "The display name of the category, typically used in navigation menus and breadcrumbs.",
            "example": "Start Page"
          },
          "hidden": {
            "type": "boolean",
            "description": "Whether the category is hidden from navigation. Hidden categories are not shown in menus or category trees but can still be accessed via direct URL.",
            "example": false
          },
          "indexed": {
            "type": "boolean",
            "description": "Whether the category page is indexed by search engines. Non-indexed pages are excluded from sitemaps and include a noindex directive.",
            "example": true
          },
          "protectionLevel": {
            "type": "string",
            "description": "The protection level of the category, determining access restrictions. A protected category (protectionLevel other than NONE) requires authentication to access.",
            "enum": [
              "NONE",
              "LOW",
              "MEDIUM",
              "HIGH"
            ],
            "example": "NONE",
            "x-viskan-nullable": "true"
          },
          "protectionFallbackCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "Fallback category in case protection level of a user is not met, i.e. user is not logged in.",
            "example": "093ffd95-76b6-4249-a410-c984327c94eb",
            "x-viskan-field-format": "uuid"
          },
          "pageId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the page associated with this category. Null if no page has been created for this category yet.",
            "example": "5cf50fd6-5ab3-43bc-8291-e74665d1f8ab",
            "x-viskan-field-format": "uuid",
            "x-viskan-nullable": "true"
          },
          "path": {
            "type": "string",
            "description": "The URL path segment used for routing to this category\u0027s page, e.g. \u0027/start\u0027 or \u0027/black-week-sale\u0027. Null if no page exists for this category.",
            "example": "/start",
            "x-viskan-nullable": "true"
          },
          "title": {
            "type": "string",
            "description": "The display title of the page, typically shown as the page heading and in browser tabs.",
            "example": "Start Page"
          },
          "children": {
            "type": "array",
            "description": "Nested child categories forming the tree structure. Each child has the same structure and may in turn contain its own children.",
            "items": {
              "$ref": "#/components/schemas/CategoryTreeResponse_2"
            }
          }
        }
      },
      "ProductListResponse_3": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of a product, which does not use default product detail layout and is connected to a separate layout.",
            "example": "23e4ff9e-2e3d-4a82-a347-424cd8772683",
            "x-viskan-field-format": "uuid"
          },
          "layoutId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of a layout the product is connected to.",
            "example": "23e4ff9e-2e3d-4a82-a347-424cd8772683",
            "x-viskan-field-format": "uuid"
          },
          "variables": {
            "type": "array",
            "description": "The list of variables for the product. These variables are used to populate the layout connected to the product.",
            "items": {
              "$ref": "#/components/schemas/ProductVariableResponse_2"
            }
          }
        }
      },
      "ProductVariableResponse_2": {
        "type": "object",
        "properties": {
          "layoutSectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of the layout section this variable belongs to, linking the variable value to a specific section in the product\u0027s layout.",
            "example": "be0111c5-a24b-47bd-86f7-77c12d632bdc",
            "x-viskan-field-format": "uuid"
          },
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The content locale this variable belongs to.",
            "example": "774ab227-18fe-4541-ba3b-06ad3e95ae75",
            "x-viskan-field-format": "uuid"
          },
          "variableId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the variable, matching a variable definition in the layout section.",
            "example": "e7f65f98-e2a6-4ffd-a985-6e6a4180f5e0",
            "x-viskan-field-format": "uuid"
          },
          "variableValue": {
            "type": "string",
            "description": "The actual content value for this variable (e.g. text or an image URL) that replaces the variable\u0027s placeholder in the section content template.",
            "example": "Welcome to start page!"
          }
        }
      },
      "LayoutSectionResponse_2": {
        "type": "object",
        "properties": {
          "layoutSectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of this specific section instance within the layout. Used to link page variable values to their corresponding section.",
            "example": "be0111c5-a24b-47bd-86f7-77c12d632bdc",
            "x-viskan-field-format": "uuid"
          },
          "sectionId": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier of the section template. Multiple layouts can reference the same section template.",
            "example": "fb831d92-c7b3-42fe-ac92-a2c2014d72f6",
            "x-viskan-field-format": "uuid"
          },
          "sectionName": {
            "type": "string",
            "description": "The display name of the section, used for identification in the CMS editor.",
            "example": "Start Page Hero"
          },
          "sectionDescription": {
            "type": "string",
            "description": "An optional human-readable description of the section\u0027s purpose and visual appearance.",
            "example": "Section for the start page displaying an image and text",
            "x-viskan-nullable": "true"
          },
          "sectionType": {
            "type": "string",
            "description": "The type of content this section represents, such as IMAGE_AND_TEXT, SLIDER, MENU, GRIDS, or MISC.",
            "enum": [
              "IMAGE_AND_TEXT",
              "SLIDER",
              "MENU",
              "GRIDS",
              "MISC"
            ],
            "example": "IMAGE_AND_TEXT"
          },
          "content": {
            "type": "string",
            "description": "The content template of the section. Can be any format useful for the frontend (JSON, HTML, scripts, etc.). Contains variable placeholders as UUIDs in curly braces that are replaced with actual values per page.",
            "example": "\u003cp\u003e{4dd9fd6f-9403-49e6-83df-2550abac538e}\u003c/p\u003e\u003cimage url\u003d{a8eecb0e-b06a-4b2c-882f-376cff259454}\u003e"
          },
          "variables": {
            "type": "array",
            "description": "The variable definitions for this section. These define the editable placeholders in the content template that can be filled with content per page.",
            "items": {
              "$ref": "#/components/schemas/LayoutSectionVariableResponse"
            }
          }
        }
      },
      "CreateLocaleDTO": {
        "type": "object",
        "properties": {
          "languageCode": {
            "type": "string",
            "description": "The language of this locale.",
            "example": "sv"
          },
          "countries": {
            "type": "array",
            "description": "The list of countries available for this locale.",
            "items": {
              "$ref": "#/components/schemas/Country_3"
            }
          }
        }
      },
      "CreateWebStoreRequest": {
        "type": "object",
        "properties": {
          "localeMode": {
            "type": "string",
            "description": "What locale mode the store should use.",
            "enum": [
              "DOMAIN_ONLY",
              "COUNTRY_IN_PATH",
              "DOMAIN_WITH_LANGUAGE_PATH",
              "LANGUAGE_AND_COUNTRY_IN_PATH"
            ],
            "example": "COUNTRY_IN_PATH"
          },
          "rootProductCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the root category for products.",
            "example": "d0bc44ec-1efd-4af9-a825-7deb4f0712ce"
          },
          "startPageCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the start page category. Root category for content - content category hierarchy always starts with this category.",
            "example": "5650586e-34e5-4de4-97f5-15ea3dc3f80a"
          },
          "headerCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the header category.",
            "example": "10d835f7-b46c-48e0-8996-ea75d3de3500"
          },
          "footerCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the footer category.",
            "example": "1bbae4b1-c1fe-42b3-90a5-20dc9b5522f4"
          },
          "productDetailPageCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the product detail page category.",
            "example": "82c82cec-5381-4e23-ac8f-0e88eb9ac54f"
          },
          "notFoundCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the not found category.",
            "example": "05616617-3a4a-4c7c-b825-95e54362f344"
          },
          "notFoundGlobalCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the global not found category. Must be \u003ccode\u003enull\u003c/code\u003e when \u003ccode\u003elocaleMode\u003c/code\u003e is \u003ccode\u003eDOMAIN_ONLY\u003c/code\u003e.",
            "example": "f629c1fd-b73e-41eb-a2b1-a6178702c51a",
            "x-viskan-nullable": "true"
          },
          "checkoutCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the checkout category.",
            "example": "7e2b6869-24ee-4c1d-9b62-24472a72cd2b"
          },
          "receiptCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the receipt category.",
            "example": "16d64e15-a80c-4ec7-b575-2e5bb8238ea0"
          },
          "localePickerCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the locale picker category. Always \u003ccode\u003enull\u003c/code\u003e for DOMAIN_ONLY locale mode.",
            "example": "50372cca-b819-4809-8d26-ea87dcdd7195",
            "x-viskan-nullable": "true"
          },
          "searchResultCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the search result category.",
            "example": "7c9fd76d-d6fd-40ad-a351-571b3839506b"
          },
          "storeSettings": {
            "type": "array",
            "description": "The store settings for the web store.",
            "items": {
              "$ref": "#/components/schemas/StoreSettingDTO"
            }
          },
          "locales": {
            "type": "array",
            "description": "The locales to create for this web store.",
            "items": {
              "$ref": "#/components/schemas/CreateLocaleDTO"
            }
          },
          "legacyStoreActive": {
            "type": "boolean",
            "description": "Whether this web store shares its category tree with a still-live Streamline 3 store. Defaults to false.",
            "example": false
          }
        }
      },
      "StoreSettingDTO": {
        "type": "object",
        "properties": {
          "storeSettingId": {
            "type": "string",
            "format": "uuid",
            "description": "The store setting ID.",
            "example": "f9ba6266-24d3-49bd-ac4d-5bac5059effa"
          },
          "storeSettingKey": {
            "type": "string",
            "description": "The store setting key.",
            "example": "showMenu"
          },
          "storeSettingValue": {
            "type": "string",
            "description": "The store setting value.",
            "example": "true"
          },
          "countryCode": {
            "type": "string",
            "description": "The store setting country code. If \u003ccode\u003enull\u003c/code\u003e, then this store setting is considered to be global.",
            "example": "SE",
            "x-viskan-nullable": "true"
          },
          "languageCode": {
            "type": "string",
            "description": "The store setting language code. If \u003ccode\u003enull\u003c/code\u003e, then this store setting is considered to be global.",
            "example": "sv",
            "x-viskan-nullable": "true"
          }
        }
      },
      "CreateWebStoreResponse": {
        "type": "object",
        "properties": {
          "webStoreId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the created web store.",
            "example": "f9ba6266-24d3-49bd-ac4d-5bac5059effa"
          }
        }
      },
      "UpdateLocaleDTO": {
        "type": "object",
        "properties": {
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the locale.",
            "example": "78dd64ef-ee64-494d-af21-3f4ac7e226a3"
          },
          "languageCode": {
            "type": "string",
            "description": "The language of this locale.",
            "example": "sv"
          },
          "countries": {
            "type": "array",
            "description": "The list of countries available for this locale.",
            "items": {
              "$ref": "#/components/schemas/Country_3"
            }
          }
        }
      },
      "UpdateWebStoreRequest": {
        "type": "object",
        "properties": {
          "localeMode": {
            "type": "string",
            "description": "What locale mode the store should use, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "enum": [
              "DOMAIN_ONLY",
              "COUNTRY_IN_PATH",
              "DOMAIN_WITH_LANGUAGE_PATH",
              "LANGUAGE_AND_COUNTRY_IN_PATH"
            ],
            "example": "COUNTRY_IN_PATH",
            "x-viskan-nullable": "true"
          },
          "rootProductCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the root category for products, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "d0bc44ec-1efd-4af9-a825-7deb4f0712ce",
            "x-viskan-nullable": "true"
          },
          "startPageCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the start page category, or \u003ccode\u003enull\u003c/code\u003e to not update. Root category for content - content category hierarchy always starts with this category.",
            "example": "5650586e-34e5-4de4-97f5-15ea3dc3f80a",
            "x-viskan-nullable": "true"
          },
          "headerCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the header category, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "10d835f7-b46c-48e0-8996-ea75d3de3500",
            "x-viskan-nullable": "true"
          },
          "footerCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the footer category, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "1bbae4b1-c1fe-42b3-90a5-20dc9b5522f4",
            "x-viskan-nullable": "true"
          },
          "productDetailPageCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the product detail page category, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "82c82cec-5381-4e23-ac8f-0e88eb9ac54f",
            "x-viskan-nullable": "true"
          },
          "notFoundCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the not found category, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "05616617-3a4a-4c7c-b825-95e54362f344",
            "x-viskan-nullable": "true"
          },
          "notFoundGlobalCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the global not found category, or \u003ccode\u003enull\u003c/code\u003e to not update. Must be \u003ccode\u003enull\u003c/code\u003e when \u003ccode\u003elocaleMode\u003c/code\u003e is \u003ccode\u003eDOMAIN_ONLY\u003c/code\u003e.",
            "example": "f629c1fd-b73e-41eb-a2b1-a6178702c51a",
            "x-viskan-nullable": "true"
          },
          "checkoutCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the checkout category, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "7e2b6869-24ee-4c1d-9b62-24472a72cd2b",
            "x-viskan-nullable": "true"
          },
          "receiptCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the receipt category, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "16d64e15-a80c-4ec7-b575-2e5bb8238ea0",
            "x-viskan-nullable": "true"
          },
          "localePickerCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the locale picker category, or \u003ccode\u003enull\u003c/code\u003e to not update. Always \u003ccode\u003enull\u003c/code\u003e for DOMAIN_ONLY locale mode.",
            "example": "50372cca-b819-4809-8d26-ea87dcdd7195",
            "x-viskan-nullable": "true"
          },
          "searchResultCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the search result category, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": "7c9fd76d-d6fd-40ad-a351-571b3839506b",
            "x-viskan-nullable": "true"
          },
          "storeSettings": {
            "type": "array",
            "description": "The store settings to update, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "items": {
              "$ref": "#/components/schemas/StoreSettingDTO"
            }
          },
          "locales": {
            "type": "array",
            "description": "The locales to update for this web store, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "items": {
              "$ref": "#/components/schemas/UpdateLocaleDTO"
            }
          },
          "legacyStoreActive": {
            "type": "boolean",
            "description": "Whether this web store shares its category tree with a still-live Streamline 3 store, or \u003ccode\u003enull\u003c/code\u003e to not update.",
            "example": false,
            "x-viskan-nullable": "true"
          }
        }
      },
      "GetWebStoreResponse": {
        "type": "object",
        "properties": {
          "webStoreId": {
            "type": "string",
            "format": "uuid",
            "description": "The internal identifier of the web store.",
            "example": "0e1ad1e6-5ad2-4df1-981b-4db39e44a684",
            "x-viskan-field-format": "uuid"
          },
          "localeMode": {
            "type": "string",
            "description": "What locale mode the store uses.",
            "enum": [
              "DOMAIN_ONLY",
              "COUNTRY_IN_PATH",
              "DOMAIN_WITH_LANGUAGE_PATH",
              "LANGUAGE_AND_COUNTRY_IN_PATH"
            ],
            "example": "COUNTRY_IN_PATH"
          },
          "rootProductCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the root category for products.",
            "example": "d0bc44ec-1efd-4af9-a825-7deb4f0712ce",
            "x-viskan-field-format": "uuid"
          },
          "startPageCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the start page category. Root category for content - content category hierarchy always starts with this category.",
            "example": "5650586e-34e5-4de4-97f5-15ea3dc3f80a",
            "x-viskan-field-format": "uuid"
          },
          "headerCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the header category.",
            "example": "10d835f7-b46c-48e0-8996-ea75d3de3500",
            "x-viskan-field-format": "uuid"
          },
          "footerCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the footer category.",
            "example": "1bbae4b1-c1fe-42b3-90a5-20dc9b5522f4",
            "x-viskan-field-format": "uuid"
          },
          "productDetailPageCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the product detail page category.",
            "example": "82c82cec-5381-4e23-ac8f-0e88eb9ac54f",
            "x-viskan-field-format": "uuid"
          },
          "notFoundCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the not found category.",
            "example": "05616617-3a4a-4c7c-b825-95e54362f344",
            "x-viskan-field-format": "uuid"
          },
          "notFoundGlobalCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the global not found category. Always \u003ccode\u003enull\u003c/code\u003e when \u003ccode\u003elocaleMode\u003c/code\u003e has the value \u003ccode\u003eDOMAIN_ONLY\u003c/code\u003e.",
            "example": "f629c1fd-b73e-41eb-a2b1-a6178702c51a",
            "x-viskan-field-format": "uuid",
            "x-viskan-nullable": "true"
          },
          "checkoutCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the checkout category.",
            "example": "7e2b6869-24ee-4c1d-9b62-24472a72cd2b",
            "x-viskan-field-format": "uuid"
          },
          "receiptCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the receipt category.",
            "example": "16d64e15-a80c-4ec7-b575-2e5bb8238ea0",
            "x-viskan-field-format": "uuid"
          },
          "localePickerCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the locale picker category. Always \u003ccode\u003enull\u003c/code\u003e for \u003ccode\u003eDOMAIN_ONLY\u003c/code\u003e locale mode.",
            "example": "50372cca-b819-4809-8d26-ea87dcdd7195",
            "x-viskan-field-format": "uuid",
            "x-viskan-nullable": "true"
          },
          "searchResultCategoryId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the search result category.",
            "example": "7c9fd76d-d6fd-40ad-a351-571b3839506b",
            "x-viskan-field-format": "uuid"
          },
          "storeSettings": {
            "type": "array",
            "description": "The store settings.",
            "items": {
              "$ref": "#/components/schemas/StoreSettingResponse"
            }
          },
          "locales": {
            "type": "array",
            "description": "The locales for this web store.",
            "items": {
              "$ref": "#/components/schemas/LocaleResponse"
            }
          },
          "legacyStoreActive": {
            "type": "boolean",
            "description": "Whether this web store shares its category tree with a still-live Streamline 3 store.",
            "example": false
          }
        }
      },
      "LocaleResponse": {
        "type": "object",
        "properties": {
          "contentLocaleId": {
            "type": "string",
            "format": "uuid",
            "description": "The ID of the locale.",
            "example": "78dd64ef-ee64-494d-af21-3f4ac7e226a3"
          },
          "languageCode": {
            "type": "string",
            "description": "The language of this locale.",
            "example": "sv"
          },
          "countries": {
            "type": "array",
            "description": "The list of countries available for this locale.",
            "items": {
              "$ref": "#/components/schemas/Country_3"
            }
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time this locale was published, or \u003ccode\u003enull\u003c/code\u003e if unpublished.",
            "x-viskan-nullable": "true"
          }
        }
      },
      "StoreSettingResponse": {
        "type": "object",
        "properties": {
          "storeSettingId": {
            "type": "string",
            "format": "uuid",
            "description": "The store setting ID.",
            "example": "f9ba6266-24d3-49bd-ac4d-5bac5059effa",
            "x-viskan-field-format": "uuid"
          },
          "storeSettingKey": {
            "type": "string",
            "description": "The store setting key.",
            "example": "showMenu"
          },
          "storeSettingValue": {
            "type": "string",
            "description": "The store setting value.",
            "example": "true"
          },
          "countryCode": {
            "type": "string",
            "description": "The store setting country code. If \u003ccode\u003enull\u003c/code\u003e, then this store setting is considered to be global.",
            "example": "SE",
            "x-viskan-nullable": "true"
          },
          "languageCode": {
            "type": "string",
            "description": "The store setting language code. If \u003ccode\u003enull\u003c/code\u003e, then this store setting is considered to be global.",
            "example": "sv",
            "x-viskan-nullable": "true"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time this store setting was published, or \u003ccode\u003enull\u003c/code\u003e if unpublished.",
            "x-viskan-nullable": "true"
          }
        }
      },
      "Country_3": {
        "type": "object",
        "properties": {
          "countryCode": {
            "type": "string",
            "description": "The country code for a locale.",
            "example": "SE"
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether this country is enabled in this locale.",
            "example": true
          }
        }
      }
    }
  }
}