openapi: 3.0.1
info:
  title: Voyado Engage API
  description: ""
  contact:
    name: Developer documentation
    url: https://developer.voyado.com
  version: v3
servers:
- url: https://voyadodemoecom.voyado.com/
paths:
  /api/v3/contacts/{contactId}/achievements:
    get:
      tags:
      - achievements
      operationId: Achievements_GetAchievementsForContact
      parameters:
      - name: contactId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiAchievementValue'
            application/problem+json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiAchievementValue'
      security:
      - apikey: []
  /api/v3/achievements:
    get:
      tags:
      - achievements
      operationId: Achievements_GetAllAchievements
      parameters:
      - name: offset
        in: query
        schema:
          type: integer
          format: int32
      - name: count
        in: query
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedResultOfApiAchievementDefinition'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PagedResultOfApiAchievementDefinition'
      security:
      - apikey: []
  /api/v3/contacts/{contactId}/achievements/{achievementId}:
    post:
      tags:
      - achievements
      operationId: Achievements_SetAchievement
      parameters:
      - name: contactId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: achievementId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
        required: true
      responses:
        "204":
          description: No Content
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: value
    delete:
      tags:
      - achievements
      operationId: Achievements_RemoveAchievement
      parameters:
      - name: contactId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: achievementId
        in: path
        required: true
        schema:
          type: string
      responses:
        "204":
          description: No Content
          content: {}
      security:
      - apikey: []
  /api/v3/automation/customTriggers/{triggerId}/triggerByContactId/{contactId}:
    post:
      tags:
      - automation
      operationId: CustomTriggers_TriggerByContactId
      parameters:
      - name: triggerId
        in: path
        required: true
        schema:
          type: string
      - name: contactId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              type: object
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
      security:
      - apikey: []
      x-codegen-request-body-name: value
  /api/v3/automation/customTriggers/{triggerId}/triggerBySocialSecurityNumber/{ssn}:
    post:
      tags:
      - automation
      operationId: CustomTriggers_TriggerBySocialSecurityNumber
      parameters:
      - name: triggerId
        in: path
        required: true
        schema:
          type: string
      - name: ssn
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
      security:
      - apikey: []
      x-codegen-request-body-name: value
  /api/v3/automation/customTriggers/{triggerId}/triggerByExternalContactId/{externalId}:
    post:
      tags:
      - automation
      operationId: CustomTriggers_TriggerByExternalContactId
      parameters:
      - name: triggerId
        in: path
        required: true
        schema:
          type: string
      - name: externalId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
      security:
      - apikey: []
      x-codegen-request-body-name: value
  /api/v3/automation/customTriggers/{triggerId}/triggerByContactTypeAndKey/{contactType}/{keyValue}:
    post:
      tags:
      - automation
      operationId: CustomTriggers_TriggerByContactTypeAndKey
      parameters:
      - name: triggerId
        in: path
        required: true
        schema:
          type: string
      - name: contactType
        in: path
        required: true
        schema:
          type: string
      - name: keyValue
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
      security:
      - apikey: []
      x-codegen-request-body-name: value
  /api/v3/challenges/{id}:
    get:
      tags:
      - challenges
      summary: Get challenge assignment by id.
      description: Get an challenge assignment by id.
      operationId: Challenge_GetChallengeById
      parameters:
      - name: id
        in: path
        description: Assignment id
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
              example:
                challengeCompletedOn: null
                challengeEnd: null
                challengeId: f732a08a-5237-4965-9d38-5f2ed8716bc5
                challengeStart: 2025-07-21T20:22:18.5738219+02:00
                completedCheckpoints: 2
                imageUrl: null
                contactId: b0176459-74a1-47ae-bbe0-a8f731f5300c
                id: 2ce7d5c2-730b-4c84-8345-63257a06f0e6
                isActive: false
                isChallengeCompleted: false
                latestCheckpointAddedOn: 2025-07-26T20:22:18.5738219+02:00
                requiredCheckpoints: 5
                status: Active
                links:
                - id: 2ce7d5c2-730b-4c84-8345-63257a06f0e6
                  href: "https://mytenant.voyado.com/api/v{x}/challenges/2ce7d5c2-730b-4c84-8345-63257a06f0e6"
                  method: GET
                  rel: self
                - id: f732a08a-5237-4965-9d38-5f2ed8716bc5
                  href: "https://mytenant.voyado.com/api/v{x}/challenges/definitions/f732a08a-5237-4965-9d38-5f2ed8716bc5"
                  method: GET
                  rel: definition
            application/problem+json:
              schema:
                type: object
        "404":
          description: Challenge id does not exist.
          content: {}
      security:
      - apikey: []
  /api/v3/challenges/definitions/{id}:
    get:
      tags:
      - challenges
      summary: Get a challenge definition by id.
      description: Get a challenge definition by id.
      operationId: Challenge_GetChallengeDefinitionById
      parameters:
      - name: id
        in: path
        description: Definition id
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
              example:
                id: b34a2558-9031-4c9c-9680-323e91f7323b
                name: Sample Challenge
                checkpointAssignOn: ProductPurchase
                createdBy: Admin
                createdOn: 2025-07-18T20:22:18.5738219+02:00
                description: Description of the sample challenge
                expirationDays: 60
                isContactConsentRequired: true
                isRecurring: false
                isScheduled: true
                modifiedBy: Admin
                modifiedOn: 2025-07-28T20:22:18.5738219+02:00
                requiredNumberOfCheckpoints: 5
                scheduledFrom: 2025-07-28T20:22:18.5738219+02:00
                scheduledTo: 2025-08-28T20:22:18.5738219+02:00
                status: Active
            application/problem+json:
              schema:
                type: object
      security:
      - apikey: []
  /api/v3/challenges/definitions:
    get:
      tags:
      - challenges
      summary: Get a list of all the challenge definitions.
      description: Get a list of all the challenge definitions.
      operationId: Challenge_GetChallengeDefinitions
      parameters:
      - name: offset
        in: query
        description: Defaults to 0
        schema:
          type: integer
          format: int32
      - name: count
        in: query
        description: Defaults to 100
        schema:
          type: integer
          format: int32
      - name: status
        in: query
        description: "All, Active, Draft or Ended. If not specified it will default\
          \ to All"
        schema:
          type: string
          enum:
          - All
          - Active
          - Draft
          - Scheduled
          - Ended
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
              example:
                items:
                - id: a46e8e68-a874-439d-be3e-cbbf4a73063d
                  name: Sample Challenge
                  checkpointAssignOn: ProductPurchase
                  createdBy: Admin
                  createdOn: 2025-07-18T20:22:18.5738219+02:00
                  description: Description of the sample challenge
                  expirationDays: 60
                  isContactConsentRequired: true
                  isRecurring: false
                  isScheduled: true
                  modifiedBy: Admin
                  modifiedOn: 2025-07-27T20:22:18.5738219+02:00
                  requiredNumberOfCheckpoints: 5
                  scheduledFrom: null
                  scheduledTo: null
                  status: Active
                  links:
                  - id: a46e8e68-a874-439d-be3e-cbbf4a73063d
                    href: "https://mytenant.voyado.com/api/v{x}/challenges/definitions/a46e8e68-a874-439d-be3e-cbbf4a73063d"
                    method: GET
                    rel: self
                totalCount: 3
                offset: 1
                count: 1
                links:
                - href: "https://mytenant.voyado.com/api/v{x}/challenges/definitions?offset=0&count=1&status=All"
                  method: GET
                  rel: previous
                - href: "https://mytenant.voyado.com/api/v{x}/challenges/definitions?offset=2&count=1&status=All"
                  method: GET
                  rel: next
            application/problem+json:
              schema:
                type: object
      security:
      - apikey: []
  /api/v3/challenges:
    get:
      tags:
      - challenges
      summary: Search for challenges for a contact
      description: Search for challenges for a contact.
      operationId: Challenge_GetChallenges
      parameters:
      - name: contactId
        in: query
        description: Contact id
        required: true
        schema:
          type: string
          format: uuid
      - name: definitionId
        in: query
        description: Definition id - Optional to limit to a certain challenge definition
        schema:
          type: string
          format: uuid
      - name: offset
        in: query
        description: Defaults to 0
        schema:
          type: integer
          format: int32
      - name: count
        in: query
        description: Defaults to 100
        schema:
          type: integer
          format: int32
      - name: filter
        in: query
        description: "All, Active, Completed or NotCompleted. If not specified it\
          \ will default to All"
        schema:
          type: string
          enum:
          - All
          - Active
          - Completed
          - NotCompleted
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
              example:
                links:
                - href: "https://mytenant.voyado.com/api/v{x}/challenges?offset=0&count=20&contactId=8713d2d0-7383-4bd4-8e01-6532c1467cc5"
                  method: GET
                  rel: previous
                - href: "https://mytenant.voyado.com/api/v{x}/challenges?offset=20&count=40&contactId=8713d2d0-7383-4bd4-8e01-6532c1467cc5"
                  method: GET
                  rel: next
                items:
                - challengeCompletedOn: null
                  challengeEnd: null
                  challengeId: 2b9a6c84-6991-46ee-8d03-9dc4b64dabd5
                  challengeStart: 2025-07-21T20:22:18.5738219+02:00
                  completedCheckpoints: 2
                  imageUrl: null
                  contactId: 23cdba44-e91a-44f7-a5e8-f1f7d815693c
                  id: 5a786da7-2879-48ab-b9b5-91afa986ae35
                  isActive: false
                  isChallengeCompleted: false
                  latestCheckpointAddedOn: 2025-07-26T20:22:18.5738219+02:00
                  requiredCheckpoints: 5
                  status: Active
                  links:
                  - id: 5a786da7-2879-48ab-b9b5-91afa986ae35
                    href: "https://mytenant.voyado.com/api/v{x}/challenges/5a786da7-2879-48ab-b9b5-91afa986ae35"
                    method: GET
                    rel: self
                  - id: 2b9a6c84-6991-46ee-8d03-9dc4b64dabd5
                    href: "https://mytenant.voyado.com/api/v{x}/challenges/definitions/2b9a6c84-6991-46ee-8d03-9dc4b64dabd5"
                    method: GET
                    rel: definition
                totalCount: 1
                offset: 0
                count: 1
            application/problem+json:
              schema:
                type: object
      security:
      - apikey: []
  /api/v3/challenges/checkpoints:
    post:
      tags:
      - challenges
      summary: Add checkpoints to contacts
      description: "Send in a list of checkpoints to be assigned to a some challenge\
        \ for a number of contacts,\r\nthe endpoint will be able to take max 1000\
        \ checkpoint rows.\r\n            \r\n### The following fields should be provided:\r\
        \n            \r\n- definitionId: Must be a Guid\r\n- contactId: Must be a\
        \ Guid\r\n- checkPointAmount: Number of checkpoints to assign to the challenge\r\
        \n            \r\n### Important info:\r\nIf some rows are not correct it will\
        \ still result in an OK response code and the incorrect checkpoints will be\
        \ skipped. Please\r\ncheck the response for NotAccepted items."
      operationId: Challenge_AddChallengeCheckPoints
      requestBody:
        description: The JSON object which contains the checkpoint transactions.
        content:
          application/json:
            schema:
              type: array
              example:
              - definitionId: ff6b6dfb-5ce8-43e6-8226-8129277a68fb
                contactId: 20c7bebe-6967-4ab9-9c65-82dd60eaf82d
                checkpointAmount: 5
              items:
                $ref: '#/components/schemas/ChallengeCheckPointModel'
        required: true
      responses:
        "200":
          description: Some or all of the checkpoints successfully added
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddCheckpointResultExample'
              example:
                missingContactIds:
                - 004bbc66-669b-4f62-ae55-7c25d7290c58
                missingDefinitionIds:
                - 8e4c26f3-e0ca-4156-9ea6-cc0d9c627b79
                notAccepted:
                - definitionId: 8e4c26f3-e0ca-4156-9ea6-cc0d9c627b79
                  contactId: e50d11a4-18bb-47ab-a023-84b6ffefcabf
                  checkpointAmount: 3
                - definitionId: d6df6959-1135-4b06-a4c4-a4a55f99c597
                  contactId: 004bbc66-669b-4f62-ae55-7c25d7290c58
                  checkpointAmount: 2
            application/problem+json:
              schema:
                $ref: '#/components/schemas/AddCheckpointResultExample'
        "400":
          description: "Too many items, Not a valid payload, All checkpoint amounts\
            \ must be greater than 0"
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: models
  /api/v3/challenges/definitions/{id}/assign:
    post:
      tags:
      - challenges
      summary: "Assign a specific challenge to the approved contact, considering that\
        \ the contact has granted approval."
      description: "Will assign the challenge for the contact and return true. If\
        \ the contact already\r\nhas been assigned for the challenge it will also\
        \ return true."
      operationId: Challenge_Consent
      parameters:
      - name: id
        in: path
        description: Definition id
        required: true
        schema:
          type: string
          format: uuid
      - name: contactId
        in: query
        description: Contact id
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: boolean
            application/problem+json:
              schema:
                type: boolean
        "404":
          description: Challenge definition or contact does not exists
          content: {}
      security:
      - apikey: []
  /api/v3/consents:
    get:
      tags:
      - consents
      summary: Get all consents definitions
      description: "Get all consents definitions\r\n\r\nExample of metaData for a\
        \ Consent:\r\n\r\n\"metaData\": {\r\n  \"conditionText\": {\r\n    \"sv-SE\"\
        : \"Svensk villkorstext\",\r\n    \"en-GB\": \"English text to show for condition\"\
        \r\n  },\r\n  \"displayText\": {\r\n    \"sv-SE\": \"Svensk text att visa\"\
        ,\r\n    \"en-GB\": \"English text to display\"\r\n  },\r\n  \"linkText\"\
        : {\r\n    \"sv-SE\": \"Svensk text att visa på länk\",\r\n    \"en-GB\":\
        \ \"English text to show on link\"\r\n  }\r\n}"
      operationId: Consents_GetConsents
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiConsentDefinition'
            application/problem+json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiConsentDefinition'
      security:
      - apikey: []
  /api/v3/contactoverview:
    get:
      tags:
      - contactoverview
      summary: Get all information about a single contact.
      description: "Get all information about a single contact by specifying either:\r\
        \n- contactId\r\n- email and contactType\r\n- socialSecurityNumber and contactType\r\
        \n- mobilePhone and contactType\r\n- customKey and contactType (the customKey\
        \ must be configured by your supplier)\r\n- any and contactType - the any\
        \ field can contain email, socialSecurityNumber, mobilePhone or the custom\
        \ key (and are checked in that order)\r\n            \r\nThe dynamic fields\
        \ of the response depend on your current Voyado configuration."
      operationId: ContactOverview_GetContactOverviewAsync
      parameters:
      - name: contactType
        in: query
        schema:
          type: string
      - name: contactId
        in: query
        schema:
          type: string
      - name: email
        in: query
        schema:
          type: string
      - name: socialSecurityNumber
        in: query
        schema:
          type: string
      - name: mobilePhone
        in: query
        schema:
          type: string
      - name: customKey
        in: query
        schema:
          type: string
      - name: any
        in: query
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: object
                  properties: {}
            application/problem+json:
              schema:
                type: object
                additionalProperties:
                  type: object
                  properties: {}
        "400":
          description: "InvalidEmailAddress, InvalidSocialSecurityNumber, InvalidPhoneNumber,\
            \ InvalidContactId, InvalidSearchQuery, InvalidContactType"
          content: {}
        "404":
          description: ContactNotFound
          content: {}
        "409":
          description: MultipleMatches
          content: {}
        "500":
          description: InvalidSystemConfiguration
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/{contactId}:
    get:
      tags:
      - contacts
      summary: Get a single contact.
      description: "Get a single contact, using the unique identifier.\r\n\r\nThe\
        \ dynamic fields of the response object depend on\r\nthe current instance\
        \ configuration."
      operationId: ContactsV_GetContactById
      parameters:
      - name: contactId
        in: path
        description: Contact identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IApiContact'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/IApiContact'
        "404":
          description: ContactNotFound
          content: {}
      security:
      - apikey: []
    delete:
      tags:
      - contacts
      summary: Deletes a contact
      operationId: ContactsV_ContactDelete
      parameters:
      - name: contactId
        in: path
        description: Contact identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      - name: source
        in: query
        description: Source system identifier (instance configuration)
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "404":
          description: ContactNotFound
          content: {}
      security:
      - apikey: []
    patch:
      tags:
      - contacts
      summary: Update a contact.
      description: "Update one or several fields of a single contact.\r\nDo not send\
        \ an empty value unless you want it to be empty."
      operationId: ContactsV_ContactPatch
      parameters:
      - name: contactId
        in: path
        description: Contact identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        description: Updates to apply.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/contactAttributes'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IApiContact'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/IApiContact'
        "400":
          description: NoData
          content: {}
        "404":
          description: ContactNotFound
          content: {}
        "422":
          description: ValidationError
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: value
  /api/v3/contacts/bulk/status:
    get:
      tags:
      - contacts
      summary: Get status for a specific contact bulk import
      operationId: ContactBulk_GetBulkStatus
      parameters:
      - name: batchId
        in: query
        description: Id from bulk contact import
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: Status object for batch
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "403":
          description: Forbidden
          content: {}
        "404":
          description: BulkStatusNotFound
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/{contactId}/productrecommendations:
    get:
      tags:
      - contacts
      summary: Get recommended products for a contact.
      operationId: ProductRecommendation_GetProductRecommendations
      parameters:
      - name: contactId
        in: path
        description: Contact identifier (GUID).
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductRecommendationsModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProductRecommendationsModel'
        "400":
          description: InvalidContactId
          content: {}
        "404":
          description: ContactNotFound
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/{contactId}/purchasehistorysummary:
    get:
      tags:
      - contacts
      summary: Get purchase history summary for a single contact.
      description: "Following summary shows the purchase history for a single contact,\
        \ over all time, 12 months and 24 months."
      operationId: ContactRetailKpi_GetPurchaseHistory
      parameters:
      - name: contactId
        in: path
        description: Contact identifier (GUID)
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PurchaseHistorySummary'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PurchaseHistorySummary'
        "404":
          description: RetailKpiNotCalculated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
      security:
      - apikey: []
  /api/v3/contacts/{contactId}/backinstock/subscriptions:
    get:
      tags:
      - contacts
      summary: Get back in stock subscriptions for a contact
      description: Get back in stock subscriptions for a contact
      operationId: BackInStockSubscription_GetByContactId
      parameters:
      - name: contactId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content: {}
        "500":
          description: Internal error
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/{contactId}/smsmessages:
    get:
      tags:
      - contacts
      summary: "Get the latest SMS messages a contact has received, max 500"
      description: Can retrieve messages up to three (3) months old
      operationId: ContactMessage_GetSmsMessagesByContactId
      parameters:
      - name: contactId
        in: path
        description: Contact identifier (GUID)
        required: true
        schema:
          type: string
          format: uuid
      - name: count
        in: query
        description: "Max number of items to take, default value 100, max 500"
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListResultOfApiMessage'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ListResultOfApiMessage'
        "404":
          description: ContactNotFound
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/{contactId}/emailmessages:
    get:
      tags:
      - contacts
      summary: "Get the latest email messages a contact has received, max 500"
      description: Can retrieve messages up to three (3) months old
      operationId: ContactMessage_GetEmailMessagesByContactId
      parameters:
      - name: contactId
        in: path
        description: Contact identifier (GUID)
        required: true
        schema:
          type: string
          format: uuid
      - name: count
        in: query
        description: "Max number of items to take, default value 100, max 500"
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListResultOfApiMessage'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ListResultOfApiMessage'
        "404":
          description: ContactNotFound
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/{contactType}/byexternalid/{externalId}:
    get:
      tags:
      - contacts
      summary: Get a single contact by type and external id.
      description: "Get a single contact of a certain type, using the\r\ncontact's\
        \ external id.\r\n\r\nThe dynamic fields of the response object depend on\r\
        \nthe current configuration."
      operationId: ContactsV_GetContactByExternalIdAsync
      parameters:
      - name: contactType
        in: path
        description: "Contact type, e.g. Member or Contact."
        required: true
        schema:
          type: string
      - name: externalId
        in: path
        description: External contact id.
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IApiContact'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/IApiContact'
        "400":
          description: InvalidContactType
          content: {}
        "404":
          description: ContactNotFound
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/{contactType}/bykey:
    get:
      tags:
      - contacts
      summary: Get a single contact by type and key value.
      description: "Get a single contact of a certain type, using a key\r\nvalue that\
        \ corresponds to the current instance configuration. This can\r\nonly be used\
        \ for contact types with exactly ONE key.\r\n\r\nThe dynamic fields of the\
        \ response object depend on\r\nthe current configuration."
      operationId: ContactsV_GetContactByTypeAndKeyValueAsync
      parameters:
      - name: contactType
        in: path
        description: "Contact type, e.g. \"member\"."
        required: true
        schema:
          type: string
      - name: keyValue
        in: query
        description: "Key value, e.g. ssn, phone number etc."
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IApiContact'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/IApiContact'
        "400":
          description: "InvalidContactType, InvalidEmailAddress, InvalidPhoneNumber,\
            \ InvalidSocialSecurityNumber"
          content: {}
        "404":
          description: ContactNotFound
          content: {}
        "409":
          description: MultipleMatches
          content: {}
        "500":
          description: InvalidSystemConfiguration
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/{contactId}/postalmessages:
    get:
      tags:
      - contacts
      summary: "Get the latest postal messages a contact has received, max 500"
      description: Can retrieve messages up to three (3) months old
      operationId: ContactMessage_GetPostalMessagesByContactId
      parameters:
      - name: contactId
        in: path
        description: Contact identifier (GUID)
        required: true
        schema:
          type: string
          format: uuid
      - name: count
        in: query
        description: "Max number of items to take, default value 100, max 500"
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListResultOfApiMessage'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ListResultOfApiMessage'
        "404":
          description: ContactNotFound
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/changes:
    get:
      tags:
      - contacts
      summary: Gets a list containing the contact IDs of all contacts who have been
        changed within a specified time range.
      operationId: ContactsV_GetChangedContactIds
      parameters:
      - name: changeType
        in: query
        description: "Created, Updated or Deleted"
        required: true
        schema:
          type: string
          enum:
          - Created
          - Updated
          - Deleted
      - name: fromDate
        in: query
        description: Start of timespan (ex 2023-05-04 11:20:00.000)
        required: true
        schema:
          type: string
          format: date-time
      - name: toDate
        in: query
        description: End of timespan (Default the current time and date)
        schema:
          type: string
          format: date-time
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "400":
          description: Bad Request
          content: {}
        "403":
          description: Forbidden
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/id:
    get:
      tags:
      - contacts
      summary: Get the contactId for one (or several) contacts using a choice of keys.
      description: "Get the contactId for one (or several) contacts using either:\r\
        \n- email\r\n- socialSecurityNumber\r\n- mobilePhone\r\n- customKey (the customKey\
        \ must be configured by your supplier)\r\n- any - the any field can contain\
        \ email, socialSecurityNumber, mobilePhone or the custom key (and are checked\
        \ in that order)"
      operationId: ContactOverview_GetContactIdAsync
      parameters:
      - name: contactType
        in: query
        schema:
          type: string
      - name: email
        in: query
        schema:
          type: string
      - name: socialSecurityNumber
        in: query
        schema:
          type: string
      - name: mobilePhone
        in: query
        schema:
          type: string
      - name: customKey
        in: query
        schema:
          type: string
      - name: any
        in: query
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: string
            application/problem+json:
              schema:
                type: string
        "400":
          description: "InvalidEmailAddress, InvalidSocialSecurityNumber, InvalidPhoneNumber,\
            \ InvalidSearchQuery, InvalidContactType"
          content: {}
        "404":
          description: ContactNotFound
          content: {}
        "409":
          description: "MultipleMatches, shows first 50 multiple matches"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionMultipleMatchesResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionMultipleMatchesResponse'
        "500":
          description: InvalidSystemConfiguration
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/bulk:
    post:
      tags:
      - contacts
      summary: Create a number of contacts
      operationId: ContactBulk_CreateContactsInBulk
      parameters:
      - name: contactType
        in: query
        description: "Optional, if not set the default ContactType will be used"
        schema:
          type: string
      requestBody:
        description: Value in JArray
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/contactCreateBulkExample'
        required: true
      responses:
        "202":
          description: BatchId
          content:
            application/json:
              schema:
                type: string
                format: uuid
                example: 00000000-0000-0000-0000-000000000000
            application/problem+json:
              schema:
                type: string
                format: uuid
                example: 00000000-0000-0000-0000-000000000000
        "403":
          description: Forbidden
          content: {}
        "422":
          description: UnprocessableEntity
          content: {}
        "503":
          description: ServiceUnavailable
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: value
    patch:
      tags:
      - contacts
      summary: Update a number of contacts
      operationId: ContactBulk_UpdateContactsInBulk
      parameters:
      - name: contactType
        in: query
        description: "Optional, if not set the default ContactType will be used"
        schema:
          type: string
      - name: avoidTriggeringExport
        in: query
        description: "Optional, default value is false"
        schema:
          type: boolean
      requestBody:
        description: Value in JArray
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/contactUpdateBulkExample'
        required: true
      responses:
        "202":
          description: BatchId
          content:
            application/json:
              schema:
                type: string
                format: uuid
                example: 00000000-0000-0000-0000-000000000000
            application/problem+json:
              schema:
                type: string
                format: uuid
                example: 00000000-0000-0000-0000-000000000000
        "403":
          description: Forbidden
          content: {}
        "422":
          description: UnprocessableEntity
          content: {}
        "503":
          description: ServiceUnavailable
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: value
  /api/v3/contacts/{contactId}/unsubscribeSms:
    post:
      tags:
      - contacts
      summary: Unsubscribes contact from Sms
      description: Optional messageId input if user wants to unsubscribe on specific
        message instead of last sent Sms
      operationId: ContactMessage_SmsUnsubscribeContact
      parameters:
      - name: contactId
        in: path
        description: Contact identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      - name: messageId
        in: query
        description: Message Id (string).
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "202":
          description: Accepted
          content: {}
        "400":
          description: ValidationError
          content: {}
        "404":
          description: ContactNotFound
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/{contactId}/unsubscribeEmail:
    post:
      tags:
      - contacts
      summary: Unsubscribes contact from email
      description: Optional messageId input if user wants to unsubscribe on specific
        message instead of last sent email
      operationId: ContactMessage_EmailUnsubscribeContact
      parameters:
      - name: contactId
        in: path
        description: Contact identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      - name: messageId
        in: query
        description: Message Id (string).
        schema:
          type: string
      responses:
        "200":
          description: OK
          content: {}
        "400":
          description: ValidationError
          content: {}
        "404":
          description: ContactNotFound
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/{contactId}/updateContactType:
    post:
      tags:
      - contacts
      summary: Update contacttype for contact
      description: Updates the contactType for a contact if all expected contact data
        is available
      operationId: ContactsV_UpdateContactType
      parameters:
      - name: contactId
        in: path
        description: Contact identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      - name: contactTypeId
        in: query
        description: The ContactType id (string).
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content: {}
        "400":
          description: InvalidContactType
          content: {}
        "404":
          description: ContactNotFound
          content: {}
        "422":
          description: ValidationError
          content: {}
      security:
      - apikey: []
  /api/v3/contacts/{contactId}/createNpsResponse:
    post:
      tags:
      - contacts
      summary: Create a NPS response for a contact
      description: Create a NPS response for a contact. Optional input is stordeId
        if Nps response is connected to a store
      operationId: Nps_CreateNpsResponse
      parameters:
      - name: contactId
        in: path
        description: Contact identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      - name: grade
        in: query
        description: Grade (int). Must be between 0 and 10
        required: true
        schema:
          type: integer
          format: int32
      - name: storeId
        in: query
        description: Store identifier (GUID)
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "400":
          description: InvalidGrade
          content: {}
        "404":
          description: ContactNotFound
          content: {}
      security:
      - apikey: []
  /api/v3/contacts:
    post:
      tags:
      - contacts
      summary: Create a new contact.
      description: "Create a new contact.\r\nIf the contacts key identifier (example:\
        \ Email) already exists : returns the GUID of the first entry found."
      operationId: ContactsV_ContactPost
      parameters:
      - name: source
        in: query
        description: Source system identifier (instance configuration)
        schema:
          type: string
      - name: storeExternalId
        in: query
        description: The unique id code of the current store (and therefore also the
          recruited-by store). Not mandatory but strongly recommended.
        schema:
          type: string
      - name: createAsUnapproved
        in: query
        description: Contact is not approved on creation. (Default value false)
        schema:
          type: boolean
      requestBody:
        description: Contact data.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/contactPost'
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IApiContact'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/IApiContact'
        "400":
          description: NoData
          content: {}
        "409":
          description: "ApprovedContactWithKeyExists, ContactWithKeyIsBeingCreated"
          content: {}
        "422":
          description: ValidationError
          content: {}
        "504":
          description: RequestTimeOut
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: value
  /api/v3/interactions/{interactionId}:
    get:
      tags:
      - interactions
      summary: Get Interaction
      description: Retrieve a specific Interaction by providing the interactionId.
      operationId: Interaction_GetInteraction
      parameters:
      - name: interactionId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Interaction
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InteractionModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/InteractionModel'
        "400":
          description: BadRequest
          content: {}
        "404":
          description: Interaction not found
          content: {}
      security:
      - apikey: []
    delete:
      tags:
      - interactions
      summary: Delete Interaction
      description: Delete a specific Interaction by providing the interactionId.
      operationId: Interaction_DeleteInteraction
      parameters:
      - name: interactionId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Interaction Removed
          content: {}
        "400":
          description: BadRequest
          content: {}
        "404":
          description: Interaction not found
          content: {}
      security:
      - apikey: []
  /api/v3/interactions:
    get:
      tags:
      - interactions
      summary: Get multiple Interactions
      description: "Retrieve multiple Interactions of a specified type connected to\
        \ a specific contactId. Both schemaId and contactId are required. \r\nThe\
        \ continuation parameter can be used to access the next page when there are\
        \ more than 50 records available. This token can be found in the response."
      operationId: Interaction_GetInteractions
      parameters:
      - name: contactId
        in: query
        required: true
        schema:
          type: string
          format: uuid
      - name: schemaId
        in: query
        required: true
        schema:
          type: string
      - name: continuation
        in: query
        schema:
          type: string
      responses:
        "200":
          description: Interactions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InteractionPage'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/InteractionPage'
        "400":
          description: BadRequest
          content: {}
        "404":
          description: Interaction not found
          content: {}
      security:
      - apikey: []
    post:
      tags:
      - interactions
      summary: Create new Interaction
      description: Create a new Interaction connected to a specific contactId.
      operationId: Interaction_CreateInteraction
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/interactionSchema'
        required: true
      responses:
        "200":
          description: InteractionResponse
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InteractionCreateResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/InteractionCreateResponse'
        "400":
          description: BadRequest
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: interaction
  /api/v3/interactionschemas:
    get:
      tags:
      - interactionschemas
      summary: Get InteractionSchemas
      description: Retrieve all InteractionSchemas.
      operationId: InteractionSchema_GetInteractionSchemas
      responses:
        "200":
          description: InteractionSchemas
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/InteractionSchemaWithoutJsonModel'
            application/problem+json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/InteractionSchemaWithoutJsonModel'
        "500":
          description: InternalServerError
          content: {}
      security:
      - apikey: []
    post:
      tags:
      - interactionschemas
      summary: Create a new InteractionSchema
      description: Create a new InteractionSchema.
      operationId: InteractionSchema_CreateInteractionSchema
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/interactionSchemaSchema'
        required: true
      responses:
        "200":
          description: InteractionSchemaResponse
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InteractionSchemaResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/InteractionSchemaResponse'
        "400":
          description: BadRequest
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: interactionSchema
  /api/v3/interactionschemas/{interactionSchemaId}:
    get:
      tags:
      - interactionschemas
      summary: Get InteractionSchema
      description: Retrieve a specific InteractionSchema by providing the schemaId.
      operationId: InteractionSchema_GetInteractionSchema
      parameters:
      - name: interactionSchemaId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: InteractionSchema
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InteractionSchemaModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/InteractionSchemaModel'
        "400":
          description: BadRequest
          content: {}
      security:
      - apikey: []
    delete:
      tags:
      - interactionschemas
      summary: Delete InteractionSchema
      description: Delete InteractionSchema by providing the schemaId.
      operationId: InteractionSchema_DeleteInteractionSchema
      parameters:
      - name: interactionSchemaId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: InteractionSchema Removed
          content: {}
        "400":
          description: BadRequest
          content: {}
        "404":
          description: Interaction Schema not found
          content: {}
      security:
      - apikey: []
  /api/v3/inventory/stock-levels:
    put:
      tags:
      - inventory
      summary: Update stock levels
      description: "Batch update of stock levels for multiple SKU's.\r\n         \
        \   \r\nRequest model:\r\n- Sku*: Unique SKU of the product. E.g: \"123XYZ\"\
        \r\n- Quantity*: The latest stock quantity of the product. E.g: 10\r\n- Locale:\
        \ Culture code. A corresponding product feed should be configured. E.g: \"\
        sv-se\"\r\n- ExternalId: External identifier. E.g: \"SE-123XYZ\"\r\n     \
        \       \r\n\\* required"
      operationId: Inventory_UpdateStockLevels
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/StockLevelRequest'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "202":
          description: Stock Levels updated
          content: {}
        "400":
          description: Invalid request
          content: {}
        "500":
          description: Internal error
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: stockLevels
  /api/v3/inventory/backinstock/subscriptions:
    post:
      tags:
      - inventory
      summary: Create back in stock subscription
      description: "Create a back in stock subscription for a specific SKU.\r\n\r\n\
        Request model:\r\n- ContactId*: Contact id of the subscriber. E.g: \"FF9FD9AF-6778-4714-B0FE-F6E6612840C8\"\
        \r\n- Sku*: Unique SKU of the product. E.g: \"123XYZ\"\r\n- Locale*: Culture\
        \ code. A corresponding product feed should be configured. E.g: \"sv-se\"\r\
        \n- ExternalId: External identifier. E.g: \"SE-123XYZ\"\r\n\r\n\\* required"
      operationId: BackInStockSubscription_Subscribe
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubscriptionRequest'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "201":
          description: Subscription created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/SubscriptionResponse'
        "400":
          description: Invalid request
          content: {}
        "409":
          description: Subscription already exists
          content: {}
        "500":
          description: Internal error
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: subscription
  /api/v3/inventory/backinstock/subscriptions/{subscriptionId}:
    delete:
      tags:
      - inventory
      summary: Delete back in stock subscription
      description: Delete a specific back in stock subscription.
      operationId: BackInStockSubscription_Unsubscribe
      parameters:
      - name: subscriptionId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "204":
          description: Subscription deleted
          content: {}
        "500":
          description: Internal error
          content: {}
      security:
      - apikey: []
  /api/v3/orders/jobs/{jobId}:
    get:
      tags:
      - orders
      summary: Get job status of asynchronous requests
      description: "Returns the job status of requests to change an order.\r\n   \
        \         \r\nAll endpoints that create or change an order is asynchronous.\
        \ That is the request returns with code 202 Accepted and a link to this endpoint\
        \ where the client can query for progress of the change.\r\n- If the job is\
        \ processing the return is 200 with information about the job, status is \"\
        Processing\"\r\n- If the job completed successfully the return is a 200 with\
        \ information about the job and status is \"Completed\".\r\n- If the request\
        \ could not be processed the return is an Error."
      operationId: Orders_GetJob
      parameters:
      - name: jobId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Status of requested job
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderJob'
              example:
                status: Processing
                jobId: L263E2VHWYC
                orderId: order-123
        "400":
          description: Bad request
          content: {}
        "404":
          description: No job found
          content: {}
        "409":
          description: The request conflicted with internal state
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderJob'
              example:
                status: Error
                jobId: L263E2VHWYC
                orderId: order-123
                error: Order already created
        "422":
          description: Could not process request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderJob'
              example:
                status: Error
                jobId: L263E2VHWYC
                orderId: order-123
                error: Order already created
      security:
      - apikey: []
  /api/v3/orders/{orderId}:
    get:
      tags:
      - orders
      summary: Get specific order
      description: "Get a specific order by unique order identifier.\r\nIf the optional\
        \ contactId is supplied it is verified that the order is connected to the\
        \ contact."
      operationId: Orders_Get
      parameters:
      - name: orderId
        in: path
        description: Unique order identifier
        required: true
        schema:
          type: string
      - name: contactId
        in: query
        description: Optional contactId
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: Requested order
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderResponse'
              example:
                orderId: order-123
                contactId: be48fad9-8f65-433e-9229-d8eb86537ae6
                versionTag: roifado5xmcvk5clyli6aewmx4
                externalStoreId: Ecom-Europe
                status: InProgress
                externalStatus: Picked
                references:
                - order-123
                currencyCode: EUR
                channel: Ecom
                createdAt: 2025-07-28T20:21:18+02:00
                lastChangedAt: 2025-07-28T20:22:18+02:00
                lineItems:
                  items:
                  - id: item-1
                    type: Purchase
                    externalStatus: Reserved
                    quantity: 1
                    article:
                      sku: 1978-abc80-1
                      name: ABC 80
                      description: Advanced Basic Computer for the 1980s
                      imageUri: https://placehold.co/600x420
                      targetUri: https://example.com/abc80
                    discounts:
                      items:
                      - type: Voucher
                        description: Reward voucher
                        amount: 100
                        code: reward
                    returnDetails: null
                    pricePerUnit: 1199
                    originalPricePerUnit: 1299
                    totalPrice: 1199
                    originalTotalPrice: 1299
                    taxes:
                      items:
                      - amount: 299.75
                        percent: 25
                        description: VAT
                    group: group-1
                  - id: item-2
                    type: Purchase
                    externalStatus: Picked
                    quantity: 2
                    article:
                      sku: 1978-abc80-2
                      name: Power Supply
                      description: Advanced Basic Computer for the 1980s
                      imageUri: https://placehold.co/600x420
                      targetUri: https://example.com/abc80
                    discounts:
                      items:
                      - type: Voucher
                        description: Reward voucher
                        amount: 100
                        code: reward
                    returnDetails: null
                    pricePerUnit: 199
                    originalPricePerUnit: 299
                    totalPrice: 398
                    originalTotalPrice: 598
                    taxes:
                      items:
                      - amount: 99.5
                        percent: 25
                        description: VAT
                    group: group-2
                  subTotal: 1597
                payments:
                  items:
                  - paidAt: 2025-07-28T20:22:18.6994076+02:00
                    method: CreditDebit
                    amount: 1647
                    description: MasterCard payment
                fees:
                  items:
                  - type: Shipping
                    description: DHL
                    amount: 100
                    taxes:
                      items:
                      - amount: 25
                        percent: 25
                        description: VAT
                  - type: Administration
                    description: Administration fee
                    amount: 50
                    taxes:
                      items:
                      - amount: 12.5
                        percent: 25
                        description: VAT
                discounts:
                  items:
                  - type: Seasonal
                    description: Vintage Days campaign
                    amount: 100
                    code: vintagedays
                returnDetails: null
                delivery:
                  method: DHL
                  trackingNumber: "1234567890"
                  trackingUri: https://dhl.com/track/1234567890
                  deliveryDate: 2025-07-31T20:22:18+02:00
                billingAddress:
                  title: Mr
                  firstname: John
                  lastname: Doe
                  streetAddress: Main Street 1
                  streetAddress2: null
                  postalCode: "12345"
                  region: null
                  city: Springfield
                  country: US
                  email: john@example.com
                  phone: "+1234567890"
                deliveryAddress:
                  title: Mr
                  firstname: John
                  lastname: Doe
                  streetAddress: Main Street 1
                  streetAddress2: null
                  postalCode: "12345"
                  region: null
                  city: Springfield
                  country: US
                  email: john@example.com
                  phone: "+1234567890"
                totalPrice: 1647
                taxes:
                  items:
                  - amount: 411.75
                    percent: 25
                    description: VAT
                  totalTax: 411.75
                links:
                - id: order-123
                  href: https://mytenant.voyado.com/api/v3/orders/order-123
                  method: GET
                  rel: self
        "400":
          description: Bad request
          content: {}
        "404":
          description: Order not found or the optional contactId did not match the
            order
          content: {}
      security:
      - apikey: []
    put:
      tags:
      - orders
      summary: Replace order
      description: Sends a request to replace an order. The replacement is asynchronous
        - use the information in the response to follow the progress and catch any
        errors.
      operationId: Orders_Put
      parameters:
      - name: orderId
        in: path
        description: Unique order identifier by client
        required: true
        schema:
          type: string
      requestBody:
        description: Order object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReplaceOrderRequest'
        required: true
      responses:
        "202":
          description: Request has been accepted
          headers:
            Location:
              description: Location of the job endpoint
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderJob'
              example:
                status: Accepted
                jobId: L263E2VHWYC
                orderId: order-123
                href: https://mytenant.voyado.com/api/v3/example/jobs/endpoint/for/jobid/L263E2VHWYC
        "400":
          description: Bad request
          content: {}
        "404":
          description: Order not found
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: order
    delete:
      tags:
      - orders
      summary: Delete order
      description: Sends a request to delete an order. The deletion is asynchronous
        - use the information in the response to follow the progress and catch any
        errors.
      operationId: Orders_Delete
      parameters:
      - name: orderId
        in: path
        description: Unique order identifier
        required: true
        schema:
          type: string
      responses:
        "202":
          description: Request has been accepted
          headers:
            Location:
              description: Location of the job endpoint
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderJob'
              example:
                status: Accepted
                jobId: L263E2VHWYC
                orderId: order-123
                href: https://mytenant.voyado.com/api/v3/example/jobs/endpoint/for/jobid/L263E2VHWYC
        "400":
          description: Bad request
          content: {}
        "404":
          description: Order not found
          content: {}
      security:
      - apikey: []
  /api/v3/orders:
    get:
      tags:
      - orders
      summary: Get orders by contact
      description: Gets all orders for a contact. Returns a paged result with links
        that can be used to get the next/previous result set.
      operationId: Orders_GetAllByContact
      parameters:
      - name: contactId
        in: query
        description: Contact identifier
        required: true
        schema:
          type: string
          format: uuid
      - name: offset
        in: query
        description: Defaults to 0
        schema:
          type: integer
          format: int32
      - name: count
        in: query
        description: Defaults to 10
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: Orders for a contact
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedOrderResponses'
              example:
                items:
                - orderId: order-123
                  contactId: ae4c7dbc-ca40-4216-9ff4-682e7a2d902c
                  versionTag: roifado5xmcvk5clyli6aewmx4
                  externalStoreId: Ecom-Europe
                  status: InProgress
                  externalStatus: Picked
                  references:
                  - order-123
                  currencyCode: EUR
                  channel: Ecom
                  createdAt: 2025-07-28T20:21:18+02:00
                  lastChangedAt: 2025-07-28T20:22:18+02:00
                  lineItems:
                    items:
                    - id: item-1
                      type: Purchase
                      externalStatus: Reserved
                      quantity: 1
                      article:
                        sku: 1978-abc80-1
                        name: ABC 80
                        description: Advanced Basic Computer for the 1980s
                        imageUri: https://placehold.co/600x420
                        targetUri: https://example.com/abc80
                      discounts:
                        items:
                        - type: Voucher
                          description: Reward voucher
                          amount: 100
                          code: reward
                      returnDetails: null
                      pricePerUnit: 1199
                      originalPricePerUnit: 1299
                      totalPrice: 1199
                      originalTotalPrice: 1299
                      taxes:
                        items:
                        - amount: 299.75
                          percent: 25
                          description: VAT
                      group: group-1
                    - id: item-2
                      type: Purchase
                      externalStatus: Picked
                      quantity: 2
                      article:
                        sku: 1978-abc80-2
                        name: Power Supply
                        description: Advanced Basic Computer for the 1980s
                        imageUri: https://placehold.co/600x420
                        targetUri: https://example.com/abc80
                      discounts:
                        items:
                        - type: Voucher
                          description: Reward voucher
                          amount: 100
                          code: reward
                      returnDetails: null
                      pricePerUnit: 199
                      originalPricePerUnit: 299
                      totalPrice: 398
                      originalTotalPrice: 598
                      taxes:
                        items:
                        - amount: 99.5
                          percent: 25
                          description: VAT
                      group: group-2
                    subTotal: 1597
                  payments:
                    items:
                    - paidAt: 2025-07-28T20:22:18.7150312+02:00
                      method: CreditDebit
                      amount: 1647
                      description: MasterCard payment
                  fees:
                    items:
                    - type: Shipping
                      description: DHL
                      amount: 100
                      taxes:
                        items:
                        - amount: 25
                          percent: 25
                          description: VAT
                    - type: Administration
                      description: Administration fee
                      amount: 50
                      taxes:
                        items:
                        - amount: 12.5
                          percent: 25
                          description: VAT
                  discounts:
                    items:
                    - type: Seasonal
                      description: Vintage Days campaign
                      amount: 100
                      code: vintagedays
                  returnDetails: null
                  delivery:
                    method: DHL
                    trackingNumber: "1234567890"
                    trackingUri: https://dhl.com/track/1234567890
                    deliveryDate: 2025-07-31T20:22:18+02:00
                  billingAddress:
                    title: Mr
                    firstname: John
                    lastname: Doe
                    streetAddress: Main Street 1
                    streetAddress2: null
                    postalCode: "12345"
                    region: null
                    city: Springfield
                    country: US
                    email: john@example.com
                    phone: "+1234567890"
                  deliveryAddress:
                    title: Mr
                    firstname: John
                    lastname: Doe
                    streetAddress: Main Street 1
                    streetAddress2: null
                    postalCode: "12345"
                    region: null
                    city: Springfield
                    country: US
                    email: john@example.com
                    phone: "+1234567890"
                  totalPrice: 1647
                  taxes:
                    items:
                    - amount: 411.75
                      percent: 25
                      description: VAT
                    totalTax: 411.75
                  links:
                  - id: order-123
                    href: https://mytenant.voyado.com/api/v3/orders/order-123
                    method: GET
                    rel: self
                totalCount: 1
                offset: 0
                count: 1
                links:
                - href: https://mytenant.voyado.com/api/v3/orders/?contactId=ae4c7dbc-ca40-4216-9ff4-682e7a2d902c&offset=0&count=10
                  method: GET
                  rel: previous
                - href: https://mytenant.voyado.com/api/v3/orders/?contactId=ae4c7dbc-ca40-4216-9ff4-682e7a2d902c&offset=10&count=10
                  method: GET
                  rel: next
        "400":
          description: Bad request
          content: {}
        "404":
          description: No orders found for contact
          content: {}
      security:
      - apikey: []
    post:
      tags:
      - orders
      summary: Register new order
      description: Sends a request to create an order. The creation is asynchronous
        - use the information in the response to follow the progress and catch any
        errors.
      operationId: Orders_Post
      requestBody:
        description: Order object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateOrderRequest'
        required: true
      responses:
        "202":
          description: Request has been accepted
          headers:
            Location:
              description: Location of the job endpoint
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderJob'
              example:
                status: Accepted
                jobId: L263E2VHWYC
                orderId: order-123
                href: https://mytenant.voyado.com/api/v3/example/jobs/endpoint/for/jobid/L263E2VHWYC
        "400":
          description: Bad request
          content: {}
        "409":
          description: Order already exists
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: order
  /api/v3/orders/{orderId}/action:
    post:
      tags:
      - orders
      summary: Perform actions on order
      description: Trigger action events for specific order.
      operationId: Orders_PostAction
      parameters:
      - name: orderId
        in: path
        description: Unique order identifier by client
        required: true
        schema:
          type: string
      requestBody:
        description: Order action
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderActionRequest'
        required: true
      responses:
        "202":
          description: Request has been accepted
          headers:
            Location:
              description: Location of the job endpoint
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderJob'
              example:
                status: Accepted
                jobId: L263E2VHWYC
                orderId: order-123
                href: https://mytenant.voyado.com/api/v3/example/jobs/endpoint/for/jobid/L263E2VHWYC
        "400":
          description: Bad request
          content: {}
        "404":
          description: Order not found or VersionTag did not match the order
          content: {}
        "422":
          description: Order has no contact
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: action
  /api/v3/orders/{orderId}/change-status:
    post:
      tags:
      - orders
      summary: Change status of an existing order
      description: Overwrites the status of an existing order. The change is asynchronous
        - use the information in the response to follow the progress and catch any
        errors.
      operationId: Orders_PostStatus
      parameters:
      - name: orderId
        in: path
        description: Unique order identifier by client
        required: true
        schema:
          type: string
      requestBody:
        description: Status object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangeOrderStatusRequest'
        required: true
      responses:
        "202":
          description: Request has been accepted
          headers:
            Location:
              description: Location of the job endpoint
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderJob'
              example:
                status: Accepted
                jobId: L263E2VHWYC
                orderId: order-123
                href: https://mytenant.voyado.com/api/v3/example/jobs/endpoint/for/jobid/L263E2VHWYC
        "400":
          description: Bad request
          content: {}
        "404":
          description: Order not found
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: status
  /api/v3/orders/{orderId}/change-delivery:
    post:
      tags:
      - orders
      summary: Change delivery of an existing order
      description: Overwrites the delivery of an existing order. The change is asynchronous
        - use the information in the response to follow the progress and catch any
        errors.
      operationId: Orders_PostDelivery
      parameters:
      - name: orderId
        in: path
        description: Unique order identifier by client
        required: true
        schema:
          type: string
      requestBody:
        description: Delivery object
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChangeOrderDeliveryRequest'
        required: true
      responses:
        "202":
          description: Request has been accepted
          headers:
            Location:
              description: Location of the job endpoint
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderJob'
              example:
                status: Accepted
                jobId: L263E2VHWYC
                orderId: order-123
                href: https://mytenant.voyado.com/api/v3/example/jobs/endpoint/for/jobid/L263E2VHWYC
        "400":
          description: Bad request
          content: {}
        "404":
          description: Order not found
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: delivery
  /api/v3/personlookup/getpersonlookup:
    get:
      tags:
      - personlookup
      summary: Get a single contact information by either social security number or
        mobile phone number.
      operationId: PersonLookup_GetPersonLookup
      parameters:
      - name: socialSecurityNumber
        in: query
        description: String that contains social security number
        schema:
          type: string
      - name: phoneNumber
        in: query
        description: String that contains mobile phone number
        schema:
          type: string
      - name: countryCode
        in: query
        description: Country where the contact is registered
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactSearchResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ContactSearchResult'
        "400":
          description: "InvalidPhoneNumber, InvalidSocialSecurityNumber"
          content: {}
        "404":
          description: ""
          content: {}
        "422":
          description: ValidationError
          content: {}
        "502":
          description: NoData
          content: {}
      security:
      - apikey: []
  /api/v3/point-accounts/{id}:
    get:
      tags:
      - points
      summary: Get point account by Id
      description: "## Response Object\r\n- Id: The unique identifier of the point\
        \ account.\r\n- Balance: The current balance of the point account.\r\n- BalanceExpires:\
        \ The date when the balance needs to be recalculated, due to points expiring\
        \ or becoming active. Balance can increase, decrease or stay the same. It\
        \ is not recommended to use this field, it is an accidentally exposed implementation\
        \ detail that will be removed in future versions of the API!\r\n- ContactId:\
        \ The contact identifier associated with the point account.\r\n- DefinitionId:\
        \ The definition identifier of the point account.\r\n- PendingPoints: The\
        \ sum of pending transactions.\r\n- PointsWillExpireDueToInactivity: The date\
        \ when the points will expire due to inactivity (only applies to expiry method\
        \ \"Contact inactive\"). If this value is `null` it means that there are no\
        \ points that will expire due to inactivity, either due to no such points\
        \ having been earned on this point account, or all of them have already expired."
      operationId: PointAccountV_GetPointAccount
      parameters:
      - name: id
        in: path
        description: The Id of the point account
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: Returns point account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PointAccountModelV3'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PointAccountModelV3'
        "404":
          description: The account was not found
          content:
            application/json:
              schema:
                type: string
            application/problem+json:
              schema:
                type: string
      security:
      - apikey: []
  /api/v3/point-transactions/{id}:
    get:
      tags:
      - points
      summary: Gets a transaction by the provided transaction id
      operationId: PointTransaction_GetPointTransaction
      parameters:
      - name: id
        in: path
        description: Transaction unique id
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PointTransactionDto'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PointTransactionDto'
        "404":
          description: The transaction was not found
          content:
            application/json:
              schema:
                type: string
            application/problem+json:
              schema:
                type: string
      security:
      - apikey: []
  /api/v3/point-accounts:
    get:
      tags:
      - points
      summary: Get point accounts by contact Id
      description: "## Response Object\r\n- Id: The unique identifier of the point\
        \ account.\r\n- Balance: The current balance of the point account.\r\n- BalanceExpires:\
        \ The date when the balance needs to be recalculated, due to points expiring\
        \ or becoming active. Balance can increase, decrease or stay the same. It\
        \ is not recommended to use this field, it is an accidentally exposed implementation\
        \ detail that will be removed in future versions of the API!\r\n- ContactId:\
        \ The contact identifier associated with the point account.\r\n- DefinitionId:\
        \ The definition identifier of the point account.\r\n- PendingPoints: The\
        \ sum of pending transactions.\r\n- PointsWillExpireDueToInactivity: The date\
        \ when the points will expire due to inactivity (only applies to expiry method\
        \ \"Contact inactive\"). If this value is `null` it means that there are no\
        \ points that will expire due to inactivity, either due to no such points\
        \ having been earned on this point account, or all of them have already expired."
      operationId: PointAccountV_GetPointAccounts
      parameters:
      - name: contactId
        in: query
        description: The Id of the contact
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: Returns point accounts.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PointAccountModelV3'
            application/problem+json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PointAccountModelV3'
        "404":
          description: The account was not found
          content:
            application/json:
              schema:
                type: string
            application/problem+json:
              schema:
                type: string
      security:
      - apikey: []
    post:
      tags:
      - points
      summary: Creates a point account for a contact and a point account definition
      description: "Gets a list of accounts by contact id\r\n            \r\n## Response\
        \ Object\r\n- Items: A list of point accounts.\r\n- Offset: The offset of\
        \ the result set.\r\n- Count: The number of items in the result set.\r\n-\
        \ TotalCount: The total number of items available.\r\n            \r\nEach\
        \ point account contains:\r\n- Id: The unique identifier of the point account.\r\
        \n- Balance: The current balance of the point account.\r\n- BalanceExpires:\
        \ The date when the balance needs to be recalculated, due to points expiring\
        \ or becoming active. Balance can increase, decrease or stay the same. It\
        \ is not recommended to use this field, it is an accidentally exposed implementation\
        \ detail that will be removed in future versions of the API!\r\n- ContactId:\
        \ The contact identifier associated with the point account.\r\n- DefinitionId:\
        \ The definition identifier of the point account.\r\n- PendingPoints: The\
        \ sum of pending transactions."
      operationId: PointAccountV_CreatePointAccount
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePointAccountModel'
        required: true
      responses:
        "200":
          description: Returns created point account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PointAccountModelV3'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PointAccountModelV3'
        "400":
          description: The account was not found
          content:
            application/json:
              schema:
                type: string
            application/problem+json:
              schema:
                type: string
      security:
      - apikey: []
      x-codegen-request-body-name: model
  /api/v3/point-transactions:
    get:
      tags:
      - points
      summary: Get point transactions for a specific point account Id.
      operationId: PointTransaction_GetPointTransactions
      parameters:
      - name: id
        in: query
        description: Point account unique id
        required: true
        schema:
          type: string
          format: uuid
      - name: offset
        in: query
        description: Defaults to 0
        schema:
          type: integer
          format: int32
      - name: count
        in: query
        description: Defaults to 100
        schema:
          type: integer
          format: int32
      - name: sortBy
        in: query
        description: Default TransactionDate
        schema:
          type: string
          enum:
          - TransactionDate
          - CreatedOn
      - name: sortOrder
        in: query
        description: Default Descending
        schema:
          type: string
          enum:
          - Ascending
          - Descending
      - name: filter
        in: query
        description: "Active, Pending, Expired and All. If not specified the default\
          \ will be Active."
        schema:
          type: string
          enum:
          - Active
          - Pending
          - Expired
          - All
      responses:
        "200":
          description: Returns the list of point transactions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PointTransactionDtoResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PointTransactionDtoResult'
        "400":
          description: Invalid request parameters.
          content:
            application/json:
              schema:
                type: string
            application/problem+json:
              schema:
                type: string
        "404":
          description: The transaction was not found
          content:
            application/json:
              schema:
                type: string
            application/problem+json:
              schema:
                type: string
      security:
      - apikey: []
    post:
      tags:
      - points
      summary: Add a point transaction to a point account
      description: "## Recommendation\r\n            \r\nThis is the recommended way\
        \ to add point transactions to a point account. Reasons:\r\n- By adding a\
        \ single point transaction, failures are easier to handle\r\n- When adding\
        \ the single point transaction you provide a unique id, which will be used\
        \ as the idempotency key. This allows retries if you are unsure if the transaction\
        \ was successfully added.\r\n- When adding the single transaction, the request\
        \ is accepted quickly and the transaction is processed in the background.\r\
        \n            \r\nIf you want to add multiple transactions at once, you can\
        \ use the bulk endpoint POST api/[api version]/point-accounts/transactions\r\
        \n            \r\n## Behavior\r\n            \r\nAsynchronously add a point\
        \ transaction to the point account specified.\r\n            \r\nProvide a\
        \ globally unique identifier for the transaction, if the transaction already\
        \ exists then the request will do nothing. This is to prevent duplicate transactions\
        \ and so that the consumer can retry a request if it fails or unsure if successful.\r\
        \nThe point account must be created before a transaction can be added."
      operationId: PointTransaction_AddPointTransacion
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddPointTransactionRequestModel'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "202":
          description: Accepts the transaction request for later processing.
          content: {}
        "400":
          description: Invalid request
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: body
  /api/v3/point-accounts/transactions:
    post:
      tags:
      - points
      summary: Adds Point transactions to the specified accounts for contact members.
      description: "## Recommendation\r\n            \r\nThe recommendation is to\
        \ use POST api/[api version]/point-transactions to add a single transaction\
        \ instead of using this endpoint. Reasons:\r\n- By adding a single point transaction,\
        \ failures are easier to handle\r\n- When adding the single point transaction\
        \ you provide a unique id, which will be used as the idempotency key. This\
        \ allows retries if you are unsure if the transaction was successfully added.\r\
        \n- When adding the single transaction, the request is accepted quickly and\
        \ the transaction is processed in the background.\r\n            \r\nWith\
        \ that said, if you still want to use this endpoint, please be aware of the\
        \ following:\r\n\r\n## Behavior\r\n            \r\nProvide one or more point\
        \ transactions to be added to the specified contacts' accounts.\r\nThe point\
        \ transactions do not need to be added to the same contact.\r\nYou can add\
        \ up to 1000 transactions in a single request.\r\n            \r\n### Point\
        \ Transaction fields\r\n\r\n- contactId: Must be a Guid\r\n- amount: The amount\
        \ of points, negative amounts are accepted.\r\n- definitionId: specifies to\
        \ which point account each transaction should be sent to\r\n- timeStamp: If\
        \ not provided then the default value is taken from the requestors system\
        \ timezone.\r\n- source: Must be provided or else that specified transaction\
        \ will not be accepted.\r\n- description: Must be provided or else that transaction\
        \ will not be accepted.\r\n- validFrom: If not provided then the default value\
        \ is taken from the requestors system timezone.\r\n- validTo: Specifies how\
        \ long the points are valid\r\n- expireAfterMonthsInactive: Specifies how\
        \ long the points are valid after the account has been inactive.\r\n     \
        \       \r\n### Important info\r\n            \r\nIf any of the transactions\
        \ are correct, the response will be Accepted. You need to ensure that the\
        \ NotAccepted list in the response is empty to know that all transactions\
        \ were added correctly.\r\n            \r\n### Idempotency-Key\r\n\r\nThe\
        \ idempotency key is a unique identifier included in the header of an HTTP\
        \ request to ensure the idempotence of certain operations. An idempotent operation\
        \ is one that produces the same result regardless of how many times it is\
        \ executed with the same input.\r\n\r\n#### Purpose\r\n\r\nThe primary purpose\
        \ of the idempotency key is to enable safe retries of requests. In situations\
        \ where a client needs to resend a request due to network issues or other\
        \ transient failures, the idempotency key helps prevent unintended side effects\
        \ by ensuring that repeated requests with the same key result in the same\
        \ outcome."
      operationId: PointAccount_AddPointTransactions
      parameters:
      - name: Idempotency-Key
        in: header
        description: "Optional, lasts for 24 hours"
        schema:
          type: string
      requestBody:
        description: The JSON object which contains the point transactions.
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/PointTransactionToAccount'
        required: true
      responses:
        "202":
          description: The request is accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PointTransactionToAccountResultModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PointTransactionToAccountResultModel'
        "400":
          description: "Too many items, New point system not active"
          content: {}
        "504":
          description: GatewayTimeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
      security:
      - apikey: []
      x-codegen-request-body-name: pointTransactions
  /api/v3/promotions/multichannels/{id}:
    get:
      tags:
      - promotions
      summary: Get multichannel promotion by id
      description: Gets the multichannel promotion with the identifier which is set
        by Voyado
      operationId: MultichannelPromotions_GetById
      parameters:
      - name: id
        in: path
        description: Promotion identifier from Voyado
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultichannelPromotionModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/MultichannelPromotionModel'
        "400":
          description: Missing value for parameter 'id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
        "404":
          description: Promotion not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
        "500":
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
      security:
      - apikey: []
    delete:
      tags:
      - promotions
      summary: Delete multichannel promotion by id
      description: Only unassigned multichannel promotions can be deleted
      operationId: MultichannelPromotions_DeleteById
      parameters:
      - name: id
        in: path
        description: Voyado identifier to a multichannel promotion
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "204":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusCodeResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/StatusCodeResult'
        "400":
          description: "Promotion can not be deleted because it is locked.\r\n   \
            \                                                  Promotion can not be\
            \ deleted because it has been redeemed.\r\n                          \
            \                           Promotion can not be deleted because it is\
            \ assigned to someone."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
        "404":
          description: Promotion not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
        "500":
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
      security:
      - apikey: []
  /api/v3/promotions/multichannels/{promotionId}/validity:
    get:
      tags:
      - promotions
      summary: Get multichannel promotion validity by id
      description: Gets the multichannel promotion with the identifier which is an
        internal reference for Voyado
      operationId: MultichannelPromotions_GetValidityById
      parameters:
      - name: promotionId
        in: path
        description: Identifier inside of Voyado
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PromotionValidityModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PromotionValidityModel'
        "400":
          description: Missing value for parameter 'promotionId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
        "404":
          description: Promotion not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
        "500":
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
      security:
      - apikey: []
  /api/v3/promotions/multichannels:
    get:
      tags:
      - promotions
      summary: Get multichannel promotion by external id
      description: Gets the multichannel promotion with the identifier which is an
        external reference for Voyado
      operationId: MultichannelPromotions_GetByExternalId
      parameters:
      - name: externalId
        in: query
        description: External identifier outside of Voyado
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultichannelPromotionModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/MultichannelPromotionModel'
        "400":
          description: Missing value for parameter 'externalId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
        "404":
          description: Promotion not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
        "500":
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
      security:
      - apikey: []
    post:
      tags:
      - promotions
      summary: Create a new multichannel promotion
      description: Only creates multichannel promotion in status 'Draft'.
      operationId: MultichannelPromotions_Create
      requestBody:
        description: Multichannel promotion to save
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MultichannelBasePromotionModel'
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultichannelPromotionModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/MultichannelPromotionModel'
        "400":
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
        "500":
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
      security:
      - apikey: []
      x-codegen-request-body-name: model
    delete:
      tags:
      - promotions
      summary: Delete multichannel promotion by external id
      description: Only unassigned multichannel promotions can be deleted
      operationId: MultichannelPromotions_DeleteByExternalId
      parameters:
      - name: externalId
        in: query
        description: External identifier to a multichannel promotion
        required: true
        schema:
          type: string
      responses:
        "204":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusCodeResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/StatusCodeResult'
        "400":
          description: "Promotion can not be deleted because it is locked. \r\n  \
            \                                                   Promotion can not\
            \ be deleted because it has been redeemed.\r\n                       \
            \                              Promotion can not be deleted because it\
            \ is assigned to someone."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
        "404":
          description: Promotion not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
        "500":
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
      security:
      - apikey: []
  /api/v3/promotions/multichannels/validity:
    get:
      tags:
      - promotions
      summary: Get multichannel promotion validity by external id
      description: Gets the multichannel promotion validity with the identifier which
        is an external reference for Voyado
      operationId: MultichannelPromotions_GetByValidityExternalId
      parameters:
      - name: externalId
        in: query
        description: External identifier outside of Voyado
        required: true
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PromotionValidityModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PromotionValidityModel'
        "400":
          description: Missing value for parameter 'externalId'.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/BadRequestMessageSwaggerModel'
        "404":
          description: Promotion not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
        "500":
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
      security:
      - apikey: []
  /api/v3/promotion-assignments:
    get:
      tags:
      - promotions
      summary: Get available multichannel promotions assigned to a contact.
      description: "To filter on redemptionChannelType add it as a query string\r\n\
        ?redemptionChannelType=POS\r\nIt can be POS, ECOM or OTHER"
      operationId: PromotionAssignments_GetActivePromotionAssignmentsForContactAsync
      parameters:
      - name: contactId
        in: query
        description: Contact identifier
        required: true
        schema:
          type: string
          format: uuid
      - name: redemptionChannelType
        in: query
        description: "Filter on redemptionChannelType it can be POS, ECOM or OTHER"
        schema:
          type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiPromotionModel'
            application/problem+json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiPromotionModel'
      security:
      - apikey: []
    post:
      tags:
      - promotions
      summary: Assign a multichannel promotion to a contact
      operationId: PromotionAssignments_Assign
      requestBody:
        description: Object with ContactId and PromotionId
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssignPromotionModel'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "400":
          description: "InvalidContactId, InvalidPromotionId"
          content: {}
        "404":
          description: "ContactNotFound, PromotionNotFound"
          content: {}
        "409":
          description: PromotionExpired
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: value
  /api/v3/promotions/multichannels/{id}/validity:
    put:
      tags:
      - promotions
      summary: Updates validity for an existing multichannel promotion
      description: "Updates duration of an existing multichannel promotion.\r\nOnly\
        \ multichannel promotion in status 'Draft' can be updated."
      operationId: MultichannelPromotions_UpdateValidity
      parameters:
      - name: id
        in: path
        description: Voyado multichannel promotion identifier
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        description: Validity of promotion to update
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PromotionValidityModel'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultichannelPromotionModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/MultichannelPromotionModel'
        "400":
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvalidModelStateSwaggerModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/InvalidModelStateSwaggerModel'
        "404":
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
        "500":
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
      security:
      - apikey: []
      x-codegen-request-body-name: model
  /api/v3/promotions/multichannels/{promotionId}:
    put:
      tags:
      - promotions
      summary: Updates an existing multichannel promotion
      description: "Updates an existing multichannel promotion.\r\nOnly multichannel\
        \ promotion in status 'Draft' can be updated."
      operationId: MultichannelPromotions_Update
      parameters:
      - name: promotionId
        in: path
        description: Voyado multichannel promotion identifier
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        description: Multichannel promotion to update
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MultichannelPromotionModel'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultichannelPromotionModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/MultichannelPromotionModel'
        "400":
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvalidModelStateSwaggerModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/InvalidModelStateSwaggerModel'
        "404":
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/NotFoundResult'
        "422":
          description: "Unprocessable, promotion has other status than 'Draft'."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusCodeResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/StatusCodeResult'
        "500":
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
      security:
      - apikey: []
      x-codegen-request-body-name: model
  /api/v3/promotion-assignments/{assignmentId}/redeem:
    post:
      tags:
      - promotions
      summary: Redeem promotion assignment
      description: "Redeem a multichannel offer promotion for a contact using the\
        \ internal promotion assignment Id\r\n            \r\nRedemption channel can\
        \ be POS, ECOM or OTHER."
      operationId: PromotionAssignments_RedeemByPromotionAssignmentIdAsync
      parameters:
      - name: assignmentId
        in: path
        description: The id of the promotion assignment
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        description: The channel where the promotion was used
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RedeemBodyModel'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "400":
          description: "InvalidPromotionAssignmentId, NotAValidRedemptionChannel"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
        "404":
          description: PromotionNotFound
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
        "409":
          description: "PromotionAlreadyRedeemed, PromotionNotValidForRedemptionChannel"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
        "504":
          description: GatewayTimeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
      security:
      - apikey: []
      x-codegen-request-body-name: value
  /api/v3/reward-vouchers:
    get:
      tags:
      - reward-vouchers
      summary: "Get all reward vouchers for a contact. Expired, redeemed and available"
      description: "Get all reward vouchers for a contact. Expired, redeemed and available.\r\
        \nThe result can be paginated, using the offset and\r\ncount query parameters."
      operationId: RewardVouchers_GetRewardVouchersForContact
      parameters:
      - name: contactId
        in: query
        description: Contact identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      - name: offset
        in: query
        description: The first item to retrieve. (Default value 0)
        schema:
          type: integer
          format: int32
      - name: count
        in: query
        description: The max number of items to retrieve. (Default value 100)
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedResultOfAllRewardVoucherModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PagedResultOfAllRewardVoucherModel'
      security:
      - apikey: []
  /api/v3/reward-vouchers/redeemed:
    get:
      tags:
      - reward-vouchers
      summary: Get redeemed reward vouchers for a contact.
      description: "Get redeemed reward vouchers for a contact.\r\nThe result can\
        \ be paginated, using the offset and\r\ncount query parameters."
      operationId: RewardVouchers_GetRedeemedRewardVouchersForContact
      parameters:
      - name: contactId
        in: query
        description: Contact identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      - name: offset
        in: query
        description: The first item to retrieve. (Default value 0)
        schema:
          type: integer
          format: int32
      - name: count
        in: query
        description: The max number of items to retrieve. (Default value 100)
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedResultOfRedeemedRewardVoucherModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PagedResultOfRedeemedRewardVoucherModel'
      security:
      - apikey: []
  /api/v3/reward-vouchers/available:
    get:
      tags:
      - reward-vouchers
      summary: Get available reward vouchers.
      description: "Get available reward vouchers for a contact.\r\n            \r\
        \nExpired and redeemed reward vouchers are excluded\r\n            \r\nThe\
        \ result can be paginated, using the *offset*\r\nand *count* query parameters."
      operationId: RewardVouchers_GetAvailableRewardVouchers
      parameters:
      - name: contactId
        in: query
        description: Contact identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      - name: offset
        in: query
        description: Number of items to skip. (Default value 0)
        schema:
          type: integer
          format: int32
      - name: count
        in: query
        description: Max number of items to take. (Default value 100)
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedResultOfAvailableRewardVoucherModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PagedResultOfAvailableRewardVoucherModel'
        "404":
          description: ContactNotFound
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
      security:
      - apikey: []
  /api/v3/reward-vouchers/{rewardVoucherId}/redeem:
    post:
      tags:
      - reward-vouchers
      summary: Redeem a reward voucher.
      description: Redeem an active reward voucher with a provided identifier.
      operationId: RewardVouchers_RedeemRewardVoucher
      parameters:
      - name: rewardVoucherId
        in: path
        description: RewardVoucher identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RedeemedRewardVoucherModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/RedeemedRewardVoucherModel'
        "400":
          description: InvalidRewardVoucherId
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
        "404":
          description: RewardVoucherNotFound
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
        "409":
          description: "RewardVoucherAlreadyRedeemed, RewardVoucherExpired"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
        "504":
          description: GatewayTimeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
      security:
      - apikey: []
  /api/v3/reward-vouchers/{rewardVoucherId}/reactivate:
    post:
      tags:
      - reward-vouchers
      summary: Reactivate a redeemed reward voucher
      description: Reactivate a redeemed reward voucher with a provided identifier
      operationId: RewardVouchers_ReactivateRewardVoucher
      parameters:
      - name: rewardVoucherId
        in: path
        description: RewardVoucher identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReactivatedRewardVoucherModel'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ReactivatedRewardVoucherModel'
        "400":
          description: InvalidRewardVoucherId
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
        "404":
          description: RewardVoucherNotFound
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
        "409":
          description: "RewardVoucherAlreadyActivated, RewardVoucherExpired, ReactivationLimitExceeded"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiExceptionResponse'
      security:
      - apikey: []
  /api/v3/sms/sendToPhoneNumbers:
    post:
      tags:
      - sms
      summary: Send SMS to multiple phone numbers.
      description: "Send an SMS to one or multiple phone numbers. \r\n\r\nPhone numbers\
        \ must be prefixed with a + and country code\r\n(e.g. +4670xxxxxxx for a Swedish\
        \ mobile phone number)."
      operationId: SmsMessages_SendSmsToPhoneNumbers
      requestBody:
        description: Message data.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendSmsRequest'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SendSmsResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/SendSmsResponse'
        "400":
          description: "NoData, NoRecipients, InvalidPhoneNumber"
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: request
  /api/v3/stores:
    get:
      tags:
      - stores
      summary: Gets all the stores.
      operationId: StoresV_GetStores
      parameters:
      - name: includeInactive
        in: query
        description: Value indicating if the inactive stores should be included or
          not. (Default value = false)
        schema:
          type: boolean
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiStore'
            application/problem+json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiStore'
      security:
      - apikey: []
    post:
      tags:
      - stores
      summary: Creates a store.
      operationId: StoresV_CreateStore
      requestBody:
        description: The store object to create.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiStore'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiStore'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiStore'
        "400":
          description: "InvalidStore, InvalidTimeZone"
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: apiStore
  /api/v3/stores/{externalId}:
    get:
      tags:
      - stores
      summary: Gets a single store.
      operationId: StoresV_GetStore
      parameters:
      - name: externalId
        in: path
        description: The external id of the store to get.
        required: true
        schema:
          type: string
      - name: includeInactive
        in: query
        description: Value indicating if the store can be inactive or not. (Default
          value = false)
        schema:
          type: boolean
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiStore'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiStore'
        "400":
          description: MoreThanOneStoreFound
          content: {}
        "404":
          description: StoreNotFound
          content: {}
      security:
      - apikey: []
    post:
      tags:
      - stores
      summary: Updates a store.
      description: Updates a store. externalId is the store identifier.
      operationId: StoresV_UpdateStore
      parameters:
      - name: externalId
        in: path
        description: The external id of the store to update.
        required: true
        schema:
          type: string
      requestBody:
        description: The store object to update.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiStore'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiStore'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ApiStore'
        "400":
          description: "InvalidStore, MoreThanOneStoreFound, InvalidTimeZone"
          content: {}
        "404":
          description: StoreNotFound
          content: {}
      security:
      - apikey: []
      x-codegen-request-body-name: apiStore
  /api/v3/target-audiences:
    get:
      tags:
      - target-audiences
      summary: Get all target audiences
      operationId: TargetAudience_GetTargetAudiences
      responses:
        "200":
          description: List of all target audiences
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/IdName'
            application/problem+json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/IdName'
        "500":
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ExceptionResponseContent'
      security:
      - apikey: []
  /api/v3/tracking/carts:
    post:
      tags:
      - tracking
      summary: Register a collection of cart updates
      description: "Register a batch of cart updates. Cart updates are processed according\
        \ to update time. If multiple cart updates are registered with the same identifier\
        \ only the latest update (according to update time) is considered.\r\n   \
        \         \r\nRequest model:\r\n- CartReference: Unique identifier of the\
        \ cart. Links the update to a specific cart. Ex: \"006788ba-9f65-49c6-b3a0-2315d1854728\"\
        \r\n- Time: Time of the cart update. ISO8601 with Time Zone Designators. Ex:\
        \ \"2021-09-22T11:00:00+02:00\"\r\n- ContactId: Contact id of the cart owner.\
        \ GUID or short GUID. Ex: \"ae16a9b4-f581-4568-8948-a96100b2afd4\"\r\n- SessionId:\
        \ Unique identifier of the session. Ex: \"3b7e493b-5dfe-4b98-b6cf-049f2ea4309d\"\
        \r\n- Language: Culture code of the cart. A corresponding product feed should\
        \ be configured. Ex: \"sv-SE\"\r\n- Url: Url to the cart. Ex: \"https://www.store.se/cart?id=006788ba-9f65-49c6-b3a0-2315d1854728\"\
        \r\n- Items: Collection of cart items. Ex: \"[{\"Sku\":\"90183744\",\"Quantity\"\
        :1},{\"Sku\":\"90156607\",\"Quantity\":1}]\""
      operationId: Cart_RegisterCarts
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/Cart'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "202":
          description: Accepted
          content: {}
        "400":
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvalidModelStateResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/InvalidModelStateResult'
      security:
      - apikey: []
      x-codegen-request-body-name: cartModels
  /api/v3/tracking/productviews:
    post:
      tags:
      - tracking
      summary: Register a collection of views to specific products for given contacts
      description: "Register a collection of views to specific products for given\
        \ contacts.\r\n            \r\nRequest model:\r\n- ItemId: Unique SKU/Article\
        \ Id/Item Id of the viewed product. Will be matched against SKU on the imported\
        \ articles in Voyado. Ex: \"123XYZ\"\r\n- Category: Category of the product\
        \ on the website. Will be used for filtering. Ex: \"novels &gt; cormac mccarthy\
        \ &gt; the road\"\r\n- Time: Time of the product view. ISO8601 with Time Zone\
        \ Designators. Ex: \"2021-09-22T11:00:00+02:00\"\r\n- ContactId: Contact id\
        \ of the viewer. GUID or short GUID. Ex: \"FF9FD9AF-6778-4714-B0FE-F6E6612840C8\"\
        \r\n- SessionId: Unique identifier of the session. Ex: \"3b7e493b-5dfe-4b98-b6cf-049f2ea4309d\"\
        \r\n- NewSession: Boolean value that indicates that new session.\r\n- Language:\
        \ Culture code of the cart. A corresponding product feed should be configured.\
        \ Ex: \"sv-SE\"\r\n- Url: Url of the productview. Ex: \"https://www.voyado.com?sku=eu901-011-v10\"\
        \r\n- ExternalReferrer: The external site that the user came from (clicked\
        \ a link) Ex: \"https://www.google.com\""
      operationId: ProductView_RegisterProductViews
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/ProductView'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
        "202":
          description: Accepted
          content: {}
        "400":
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvalidModelStateResult'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/InvalidModelStateResult'
      security:
      - apikey: []
      x-codegen-request-body-name: productViewApiModels
  /api/v3/transactions:
    get:
      tags:
      - transactions
      summary: Get transactions for a contact.
      description: "Retrieves transactions for a contact. Each line item includes\
        \ article data \r\nfetched from articles based on the SKU, if available.\r\
        \nSupports pagination with offset and count parameters."
      operationId: Transactions_GetTransactionsWithArticlesByContactId
      parameters:
      - name: contactId
        in: query
        description: Contact identifier (GUID).
        required: true
        schema:
          type: string
          format: uuid
      - name: offset
        in: query
        description: Number of transactions to skip. (Default 0)
        schema:
          type: integer
          format: int32
      - name: count
        in: query
        description: Maximum number of transactions to return. (Default 100)
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedResultOfTransactionItemWithArticlesResponse'
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PagedResultOfTransactionItemWithArticlesResponse'
        "400":
          description: InvalidContactId
          content: {}
        "404":
          description: ContactNotFound
          content: {}
      security:
      - apikey: []
  /api/v3/receipts:
    post:
      tags:
      - transactions
      summary: Imports receipts (transactions)
      description: "The /receipts endpoint is used to store each customers purchase\
        \ and returns in Engage.\r\nAll fields in the data model can be used for segmentation\
        \ and analysis in Engage.\r\nIf you want to send out transactional emails,\
        \ use the /orders endpoint instead.\r\n\r\n### Identification\r\n\r\nTo be\
        \ able to store a receipt in Voyado, you need to connect it to a specific\
        \ \r\ncontact.\r\n\r\nIn the example payload below the contact type is “Member”\
        \ and the key type is “email” \r\nThe key has to be a unique data field for\
        \ the specific contact type, \r\nnormally one of these fields:\r\n- contactId\r\
        \n- email\r\n- mobilePhone\r\n- memberNumber\r\n- externalId\r\n- personal\
        \ identity number - only Swedish or Finnish"
      operationId: ImportTransactions_ImportReceipts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImportReceiptRequest'
        required: true
      responses:
        "202":
          description: ""
          content:
            application/json:
              schema:
                type: object
            application/problem+json:
              schema:
                type: object
      security:
      - apikey: []
      x-codegen-request-body-name: importReceiptRequest
components:
  schemas:
    ApiAchievementValue:
      type: object
      properties:
        name:
          type: string
        id:
          type: string
        date:
          type: string
          format: date-time
    PagedResultOfApiAchievementDefinition:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/ApiAchievementDefinition'
        totalCount:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
        count:
          type: integer
          format: int32
    ApiAchievementDefinition:
      type: object
      properties:
        name:
          type: string
        id:
          type: string
        metaData:
          type: object
          properties: {}
    CancellationToken:
      type: object
      properties:
        isCancellationRequested:
          type: boolean
          readOnly: true
        canBeCanceled:
          type: boolean
          readOnly: true
        waitHandle:
          $ref: '#/components/schemas/WaitHandle'
    WaitHandle:
      type: object
      properties:
        handle:
          type: object
          properties: {}
        safeWaitHandle:
          $ref: '#/components/schemas/SafeWaitHandle'
    SafeWaitHandle:
      type: object
      properties:
        isInvalid:
          type: boolean
          readOnly: true
        isClosed:
          type: boolean
          readOnly: true
    ChallengeCheckPointModel:
      type: object
      properties:
        definitionId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        contactId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        checkpointAmount:
          type: integer
          format: int32
    AddCheckpointResultExample:
      type: object
    ApiConsentDefinition:
      type: object
      properties:
        name:
          type: string
        id:
          type: string
        metaData:
          type: object
          properties: {}
    ApiContactOverviewSearchQueryData:
      type: object
      properties:
        contactType:
          type: string
        contactId:
          type: string
        email:
          type: string
        socialSecurityNumber:
          type: string
        mobilePhone:
          type: string
        customKey:
          type: string
        any:
          type: string
    IApiContact:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          example: 00000000-0000-0000-0000-000000000000
        attributes:
          type: object
          additionalProperties:
            type: object
            properties: {}
          readOnly: true
        meta:
          type: object
          additionalProperties:
            type: object
            properties: {}
          readOnly: true
        preferences:
          type: object
          additionalProperties:
            type: object
            properties: {}
          readOnly: true
        consents:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/IApiConsent'
      example:
        id: string
        attributes:
          "1": string
          "123": "123"
          "234": true
          "890": "890"
          "1234": "1234"
          "123412": 65
          lastName: Doe
          firstName: John
          street: Example Avenue 12
          zipCode: string
          city: Examplecity
          email: john.doe@example.com
          mobilePhone: "+46700111222"
          countryCode: SE
          socialSecurityNumber: "196703183993"
          gender: Female
          age: 65
          birthDay: 2005-07-28
          careOf: careOf
          country: Sverige
          externalId: externalId
          tbRating: 65
          tbRatingm: 65
          memberNumber: 12345
          rfm: 123.45
          shoeSize: 123.45
          shirtSize: shirtSize
          waistSize: 65
          skinType: skinType
          favoriteGroup: favoriteGroup
          favoriteBrand: favoriteBrand
          skinTone: skinTone
          typeOfCar: typeOfCar
          carModelYear: carModelYear
          car: true
          children:
          - 2017-01-01
          - 2015-01-01
          typeOfCustomer: typeOfCustomer
          typeOfHome: typeOfHome
          isRenovating: true
          favoriteColor: favoriteColor
          favoriteSweets: favoriteSweets
          interiorStyle: interiorStyle
          favoriteActivity: favoriteActivity
          typOfActivist: typOfActivist
          sizeOfHouse: sizeOfHouse
          trainingType: trainingType
          favoriteDrink: favoriteDrink
          favoriteFood: favoriteFood
          healthGoal: healthGoal
          improvementPlans: improvementPlans
          subscriptionStart: 2025-07-28T20:22:18+02:00
          subscriptionEnd: 2025-07-28T20:22:18+02:00
          organizationNumber: organizationNumber
          companyAddress: companyAddress
          companyName: companyName
          companyCountry: companyCountry
          companyRevenue: companyRevenue
          companyRole: companyRole
          companySize: companySize
          imageOfpet: imageOfpet
          lastLogin: 2025-07-28T20:22:18+02:00
          lastLoginEcom: 2025-07-28T20:22:18+02:00
          giveAway: true
          forening: forening
          marke: marke
          markeBonus: markeBonus
          antalSupportrar: 65
          supporterBonus: supporterBonus
          stadiumBonus: stadiumBonus
          startedCredit: 2025-07-28T20:22:18+02:00
          endedCredit: 2025-07-28T20:22:18+02:00
          hasCreditBox: true
          activatedApp: 2025-07-28T20:22:18+02:00
          activatedAppBox: true
          donatesBonus: true
          comment: comment
          dueDate: 2025-07-28T20:22:18+02:00
          hasAppp: true
          activityLevel: activityLevel
          betweenPurchases: betweenPurchases
          yearsRemaining: yearsRemaining
          lifetimeValue: lifetimeValue
          actBefore: actBefore
          churnScore: churnScore
          recentlyShopped: recentlyShopped
          discoveryKey: ccf7068c-fc8b-46b7-b749-2477ad29a797
          pickedUpBabyBox: 2025-07-28T20:22:18+02:00
          babyboxPickedUp: true
          rFMmarketX: 123.45
          toBeRemoved: true
          size: size
          numberOfRaces: 65
          paddockClubMember: true
          tbFirstSeen: 2025-07-28T20:22:18+02:00
          tbLastSeen: 2025-07-28T20:22:18+02:00
          acceptedInvitation: true
          cVrank: 65
          readyForPickup: true
          latestAppLogin: 2025-07-28T20:22:18+02:00
          easycomFirstOrderDate: 2025-07-28T20:22:18+02:00
          easycomLastOrderDate: 2025-07-28T20:22:18+02:00
          easycomPiecesClaimed: 65
          easycomPiecesReturned: 65
          easycomPiecesSold: 65
          easycomTrueProfit: 123.45
          easycomRevenue: 123.45
          easycomCost: 123.45
          easycomClaimShare: 65
          easycomReturnShare: 65
          easycomTrueProfitShare: 65
          lang: en
          bodyType: bodyType
          weightedRFM: 65
          recencyRFM: 65
          frequencyRFM: 65
          monetaryRFM: 65
          clickedOnlineAd: clickedOnlineAd
          nameDay: 2025-07-28T20:22:18+02:00
          favouriteFlower: favouriteFlower
          serialNumber: serialNumber
          rentedSuit: true
          anniversary: 2025-07-28T20:22:18+02:00
          kirsCLV: kirsCLV
          x: x
          synundersokning: 2025-07-28T20:22:18+02:00
          abonnemangSlutar: 2025-07-28T20:22:18+02:00
          state: state
          expectedBirthDate: 2025-07-28T20:22:18+02:00
          childsName: childsName
          subscriptionType: subscriptionType
          seller: true
          admin: true
          buyer: true
          tOTALREVENUESELLER: 65
          lASTENDDATESALESELLER: 2025-07-28T20:22:18+02:00
          tOTALPROFITADMIN: 65
          tOTALNBRADMIN: 65
          lASTPURCHASEDATE: 2025-07-28T20:22:18+02:00
          aVERAGEREVENUEPURCHASE: 65
          leftEye: leftEye
          rightEye: rightEye
          horseType: horseType
          disciplin: disciplin
          interactionDate: 2025-07-28T20:22:18+02:00
          lastCheck: 2025-07-28T20:22:18+02:00
          nextCheck: 2025-07-28T20:22:18+02:00
          digitalWallet: true
          sessionId: sessionId
          golfHandicap: 65
          testPeking: testPeking
          lenswayTest: lenswayTest
          petName: petName
          petBirthday: 2025-07-28T20:22:18+02:00
          elevateKey: elevateKey
          onsiteReferral: 65
          bciMatch: true
          favBar: favBar
          regnr: regnr
          numberOfPeopleInHousehold: 65
          typeOfLiving: typeOfLiving
          oogmetingeyewish: oogmetingeyewish
          eyetesteyewish: 2025-07-28T20:22:18+02:00
          pregnant: true
          babyDueDate: 2025-07-28T20:22:18+02:00
          meinBonita: true
          trainingGoal: trainingGoal
          distanceWeek: 65
          postureAnalysis: postureAnalysis
          sitooString1: sitooString1
          sitooString2: sitooString2
          sitooString3: sitooString3
          sitooInteger1: 65
          sitooInteger2: 65
          favoritebrand02: string
          favoritebrand03: favoritebrand03
          creditLimit: 123.45
          availabilityToSpend: 123.45
          hasApp: []
          membershipType: string
          customerType: string
          occasion: string
          favouriteTeam: string
          matthewsTest: string
          accceptsPostal: string
          easycomLevels: string
          customerStatus: string
          placeOfPurchase: string
          participatedHiking: string
          preAccess: string
          participatedEvent: string
          action: string
          subscriptiontypedropdowntest: string
          competing: string
          interactionNew: string
          lukeTest: string
          digitalWalletType: string
          storeEmployee: string
          winePreferences:
          - ' Red wine'
          - ' White wine'
          - ' Rosé'
          - ' Sparkling wine'
          preferredWineStyle:
          - ' Dry'
          - ' Sweet'
          - ' Full-bodied'
          - ' Light'
          preferredWineRegion: string
          beschwerden: string
          themen:
          - Mister O'Lui
          - Beasts
          hairType: string
          hairtypes: string
          knie:
          - Hund
          - Katze
          - Hase
          - Meerschweinchen
          - Vogel
          appFrequency: string
          acceptsPush: string
          kwantumWoonTrend: string
          houseType: string
          mainInterestKwantum: string
          movingActivity: string
          petBreedWelkoop: string
          weightWelkoop:
          - 1-5 kg
          - 5-10 kg
          - 10-15 kg
          - 15-20 kg
          - 20-30 kg
          - 30-50 kg
          petWeightWelkoop: string
          voetKlachten: string
          schoenTypeSchultrups: string
          dack: string
          sportSchutrups: string
          schutrupsInteresses:
          - Baby
          - Kind
          - Heren
          - Dames
          - Thuis
          - Duurzaam
          - Thema's
          - Nieuw
          wellbeing: []
          sailingpreference:
          - ' Offshore Sailing'
          - ' Coastal sailing'
          - ' In shore sailing'
          obelinkVakantie: string
          obelinkTransport:
          - Auto
          - Camper
          - Caravan
          - Vouwwagen
          - Vliegtuig
          healthquiz:
          - " Skin, Hair & Nails"
          - ' Metabolism & Energy'
          - ' Mobility & Recovery'
          - ' Balance & Stress Resilience '
          faceshapeeyewish: string
          eyecareEyewish:
          - Glasses
          - Lenses
          - Sunglasses
          lensescoatingseyewish: string
          carowner: string
          productlineMaxiCosy: string
          workoutSportNutrition: string
          farbe: string
          footStrike: string
          carSeatDorel: string
        meta: {}
        preferences:
          AcceptsEmail: false
          AcceptsPostal: false
          AcceptsSms: false
        consents:
        - id: acceptsPersonalOffers
          value: true
          date: 2025-07-28T20:22:18.8875313+02:00
          source: string
          comment: string
        - id: acceptSegmentation
          value: true
          date: 2025-07-28T20:22:18.8875313+02:00
          source: string
          comment: string
        - id: acceptsMemberTerms
          value: true
          date: 2025-07-28T20:22:18.8875313+02:00
          source: string
          comment: string
        - id: activeSubscription
          value: true
          date: 2025-07-28T20:22:18.8875313+02:00
          source: string
          comment: string
        - id: acceptsSocialMedia
          value: true
          date: 2025-07-28T20:22:18.8875313+02:00
          source: string
          comment: string
        - id: deletionRequest
          value: true
          date: 2025-07-28T20:22:18.8875313+02:00
          source: string
          comment: string
        - id: deletionApproved
          value: true
          date: 2025-07-28T20:22:18.8875313+02:00
          source: string
          comment: string
        - id: memberConsent2test
          value: true
          date: 2025-07-28T20:22:18.8875313+02:00
          source: string
          comment: string
        - id: vipps
          value: true
          date: 2025-07-28T20:22:18.8875313+02:00
          source: string
          comment: string
        - id: doubleOpt
          value: true
          date: 2025-07-28T20:22:18.8875313+02:00
          source: string
          comment: string
        memberlevel:
          Expires: 2025-07-28T20:22:18.5894475+02:00
          LevelName: Gold level
          RemainingToUpgrade: 123
          BasedOnRewardPoints: 345
          LevelId: gold
          LatestChange: 2024-07-28T20:22:18.5894475+02:00
    IApiConsent:
      type: object
      properties:
        comment:
          type: string
        date:
          type: string
          format: date-time
        id:
          type: string
        source:
          type: string
        value:
          type: boolean
    contactAttributes:
      title: contactAttributes
      type: object
      example:
        "1": string
        "123": "123"
        "234": true
        "890": "890"
        "1234": "1234"
        "123412": 65
        lastName: Doe
        firstName: John
        street: Example Avenue 12
        zipCode: string
        city: Examplecity
        email: john.doe@example.com
        mobilePhone: "+46700111222"
        countryCode: SE
        socialSecurityNumber: "190508235629"
        gender: Female
        age: 65
        birthDay: 2005-07-28
        careOf: careOf
        externalId: externalId
        tbRating: 65
        tbRatingm: 65
        memberNumber: 12345
        shoeSize: 123.45
        shirtSize: shirtSize
        waistSize: 65
        favoriteBrand: favoriteBrand
        children:
        - 2017-01-01
        - 2015-01-01
        favoriteColor: favoriteColor
        organizationNumber: organizationNumber
        discoveryKey: 384b175f-c75c-4431-a18e-27088eae39e1
        toBeRemoved: true
        acceptedInvitation: true
        lang: en
        rentedSuit: true
        anniversary: 2025-07-28T20:22:18+02:00
        kirsCLV: kirsCLV
        x: x
        expectedBirthDate: 2025-07-28T20:22:18+02:00
        childsName: childsName
        leftEye: leftEye
        rightEye: rightEye
        lastCheck: 2025-07-28T20:22:18+02:00
        nextCheck: 2025-07-28T20:22:18+02:00
        golfHandicap: 65
        testPeking: testPeking
        lenswayTest: lenswayTest
        petName: petName
        petBirthday: 2025-07-28T20:22:18+02:00
        bciMatch: true
        favBar: favBar
        regnr: regnr
        numberOfPeopleInHousehold: 65
        typeOfLiving: typeOfLiving
        oogmetingeyewish: oogmetingeyewish
        eyetesteyewish: 2025-07-28T20:22:18+02:00
        pregnant: true
        babyDueDate: 2025-07-28T20:22:18+02:00
        meinBonita: true
        trainingGoal: trainingGoal
        distanceWeek: 65
        postureAnalysis: postureAnalysis
        favoritebrand02: string
        favoritebrand03: favoritebrand03
        creditLimit: 123.45
        availabilityToSpend: 123.45
        membershipType: string
        occasion: string
        matthewsTest: string
        customerStatus: string
        lukeTest: string
        storeEmployee: string
        beschwerden: string
        themen:
        - Mister O'Lui
        - Beasts
        hairType: string
        hairtypes: string
        knie:
        - Hund
        - Katze
        - Hase
        - Meerschweinchen
        - Vogel
        kwantumWoonTrend: string
        houseType: string
        mainInterestKwantum: string
        movingActivity: string
        voetKlachten: string
        schoenTypeSchultrups: string
        dack: string
        sportSchutrups: string
        schutrupsInteresses:
        - Baby
        - Kind
        - Heren
        - Dames
        - Thuis
        - Duurzaam
        - Thema's
        - Nieuw
        wellbeing: []
        sailingpreference:
        - ' Offshore Sailing'
        - ' Coastal sailing'
        - ' In shore sailing'
        obelinkVakantie: string
        obelinkTransport:
        - Auto
        - Camper
        - Caravan
        - Vouwwagen
        - Vliegtuig
        healthquiz:
        - " Skin, Hair & Nails"
        - ' Metabolism & Energy'
        - ' Mobility & Recovery'
        - ' Balance & Stress Resilience '
        faceshapeeyewish: string
        eyecareEyewish:
        - Glasses
        - Lenses
        - Sunglasses
        lensescoatingseyewish: string
        carowner: string
        productlineMaxiCosy: string
        workoutSportNutrition: string
        farbe: string
        footStrike: string
        carSeatDorel: string
        meta: {}
        preferences:
          acceptsEmail: false
          acceptsPostal: false
          acceptsSms: false
        consents:
        - id: acceptsPersonalOffers
          value: true
          date: 2025-07-28T20:22:18.5894475+02:00
          source: string
          comment: string
        - id: acceptsMemberTerms
          value: true
          date: 2025-07-28T20:22:18.5894475+02:00
          source: string
          comment: string
        - id: deletionRequest
          value: true
          date: 2025-07-28T20:22:18.5894475+02:00
          source: string
          comment: string
        - id: deletionApproved
          value: true
          date: 2025-07-28T20:22:18.5894475+02:00
          source: string
          comment: string
        - id: doubleOpt
          value: true
          date: 2025-07-28T20:22:18.5894475+02:00
          source: string
          comment: string
    ProductRecommendationsModel:
      type: object
      properties:
        skus:
          type: array
          items:
            type: string
    PurchaseHistorySummary:
      type: object
      properties:
        lastUpdated:
          type: string
          format: date-time
        purchaseAmountAll:
          type: number
          format: double
        numberOfArticlePurchasesAll:
          type: number
          format: double
        averageReceiptAll:
          type: number
          format: double
        latestReceiptDate:
          type: string
          format: date-time
        purchaseFrequencyAll:
          type: number
          format: double
        purchaseAmountLastYear:
          type: number
          format: double
        numberOfArticlePurchasesLastYear:
          type: number
          format: double
        averageReceiptLastYear:
          type: number
          format: double
        purchaseFrequencyLastYear:
          type: number
          format: double
        purchaseAmountLastTwoYears:
          type: number
          format: double
        numberOfArticlePurchasesLastTwoYears:
          type: number
          format: double
        averageReceiptLastTwoYears:
          type: number
          format: double
        purchaseFrequencyLastTwoYears:
          type: number
          format: double
      example:
        lastUpdated: 2025-07-28T20:22:18.5894475+02:00
        purchaseAmountAll: 2119.26
        numberOfArticlePurchasesAll: 3
        averageReceiptAll: 2119.26
        latestReceiptDate: 2023-07-28T20:22:18.5894475+02:00
        purchaseFrequencyAll: 1
        purchaseAmountLastYear: 0
        numberOfArticlePurchasesLastYear: 0
        averageReceiptLastYear: 0
        purchaseFrequencyLastYear: 1
        purchaseAmountLastTwoYears: 2119.26
        numberOfArticlePurchasesLastTwoYears: 3
        averageReceiptLastTwoYears: 2119.26
        purchaseFrequencyLastTwoYears: 2119.26
    NotFoundResult:
      type: object
      properties:
        request:
          type: object
          properties: {}
          readOnly: true
    ListResultOfApiMessage:
      type: object
      properties:
        count:
          type: integer
          format: int32
        items:
          type: array
          items:
            $ref: '#/components/schemas/ApiMessage'
    ApiMessage:
      type: object
      properties:
        messageId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        name:
          type: string
        sendDateTime:
          type: string
          format: date-time
        type:
          type: string
        source:
          type: string
        isTransactional:
          type: boolean
        status:
          type: string
        messageLink:
          type: string
        messageText:
          type: string
    ApiContactIdSearchQueryData:
      type: object
      properties:
        contactType:
          type: string
        email:
          type: string
        socialSecurityNumber:
          type: string
        mobilePhone:
          type: string
        customKey:
          type: string
        any:
          type: string
    ApiExceptionMultipleMatchesResponse:
      type: object
      properties:
        errorCode:
          type: string
          readOnly: true
        messageDetails:
          $ref: '#/components/schemas/MultipleMatchesMessageDetails'
        message:
          type: string
          readOnly: true
        requestId:
          type: string
          readOnly: true
    MultipleMatchesMessageDetails:
      type: object
      properties:
        multipleMatchesFound:
          type: array
          items:
            type: string
            format: uuid
            example: 00000000-0000-0000-0000-000000000000
    contactCreateBulkExample:
      title: contactCreateBulkExample
      type: object
      example:
      - "1": string
        "123": "123"
        "234": true
        "890": "890"
        "1234": "1234"
        "123412": 65
        lastName: Doe
        firstName: John
        street: Example Avenue 12
        zipCode: string
        city: Examplecity
        email: john.doe@example.com
        mobilePhone: "+46700111222"
        countryCode: SE
        socialSecurityNumber: "200603165762"
        gender: Female
        age: 65
        birthDay: 2005-07-28
        careOf: careOf
        externalId: externalId
        tbRating: 65
        tbRatingm: 65
        memberNumber: 12345
        rfm: 123.45
        shoeSize: 123.45
        shirtSize: shirtSize
        waistSize: 65
        favoriteBrand: favoriteBrand
        children:
        - 2017-01-01
        - 2015-01-01
        favoriteColor: favoriteColor
        organizationNumber: organizationNumber
        discoveryKey: bf3a6ec4-c36f-4a6f-b8b4-bb38d8976a47
        toBeRemoved: true
        acceptedInvitation: true
        lang: en
        rentedSuit: true
        anniversary: 2025-07-28T20:22:18+02:00
        kirsCLV: kirsCLV
        x: x
        expectedBirthDate: 2025-07-28T20:22:18+02:00
        childsName: childsName
        leftEye: leftEye
        rightEye: rightEye
        lastCheck: 2025-07-28T20:22:18+02:00
        nextCheck: 2025-07-28T20:22:18+02:00
        golfHandicap: 65
        testPeking: testPeking
        lenswayTest: lenswayTest
        petName: petName
        petBirthday: 2025-07-28T20:22:18+02:00
        bciMatch: true
        favBar: favBar
        regnr: regnr
        numberOfPeopleInHousehold: 65
        typeOfLiving: typeOfLiving
        oogmetingeyewish: oogmetingeyewish
        eyetesteyewish: 2025-07-28T20:22:18+02:00
        pregnant: true
        babyDueDate: 2025-07-28T20:22:18+02:00
        meinBonita: true
        trainingGoal: trainingGoal
        distanceWeek: 65
        postureAnalysis: postureAnalysis
        favoritebrand02: string
        favoritebrand03: favoritebrand03
        creditLimit: 123.45
        availabilityToSpend: 123.45
        membershipType: string
        occasion: string
        matthewsTest: string
        customerStatus: string
        lukeTest: string
        storeEmployee: string
        beschwerden: string
        themen:
        - Mister O'Lui
        - Beasts
        hairType: string
        hairtypes: string
        knie:
        - Hund
        - Katze
        - Hase
        - Meerschweinchen
        - Vogel
        kwantumWoonTrend: string
        houseType: string
        mainInterestKwantum: string
        movingActivity: string
        voetKlachten: string
        schoenTypeSchultrups: string
        dack: string
        sportSchutrups: string
        schutrupsInteresses:
        - Baby
        - Kind
        - Heren
        - Dames
        - Thuis
        - Duurzaam
        - Thema's
        - Nieuw
        wellbeing: []
        sailingpreference:
        - ' Offshore Sailing'
        - ' Coastal sailing'
        - ' In shore sailing'
        obelinkVakantie: string
        obelinkTransport:
        - Auto
        - Camper
        - Caravan
        - Vouwwagen
        - Vliegtuig
        healthquiz:
        - " Skin, Hair & Nails"
        - ' Metabolism & Energy'
        - ' Mobility & Recovery'
        - ' Balance & Stress Resilience '
        faceshapeeyewish: string
        eyecareEyewish:
        - Glasses
        - Lenses
        - Sunglasses
        lensescoatingseyewish: string
        carowner: string
        productlineMaxiCosy: string
        workoutSportNutrition: string
        farbe: string
        footStrike: string
        carSeatDorel: string
        registrationStoreId: storeExternalId
        currentStoreExternalId: storeExternalId
        labels: "lableName1,lableName2"
      - "1": string
        "123": "123"
        "234": true
        "890": "890"
        "1234": "1234"
        "123412": 65
        lastName: Doe
        firstName: John
        street: Example Avenue 12
        zipCode: string
        city: Examplecity
        email: john.doe@example.com
        mobilePhone: "+46700111222"
        countryCode: SE
        socialSecurityNumber: "200603165762"
        gender: Female
        age: 65
        birthDay: 2005-07-28
        careOf: careOf
        externalId: externalId
        tbRating: 65
        tbRatingm: 65
        memberNumber: 12345
        rfm: 123.45
        shoeSize: 123.45
        shirtSize: shirtSize
        waistSize: 65
        favoriteBrand: favoriteBrand
        children:
        - 2017-01-01
        - 2015-01-01
        favoriteColor: favoriteColor
        organizationNumber: organizationNumber
        discoveryKey: bf3a6ec4-c36f-4a6f-b8b4-bb38d8976a47
        toBeRemoved: true
        acceptedInvitation: true
        lang: en
        rentedSuit: true
        anniversary: 2025-07-28T20:22:18+02:00
        kirsCLV: kirsCLV
        x: x
        expectedBirthDate: 2025-07-28T20:22:18+02:00
        childsName: childsName
        leftEye: leftEye
        rightEye: rightEye
        lastCheck: 2025-07-28T20:22:18+02:00
        nextCheck: 2025-07-28T20:22:18+02:00
        golfHandicap: 65
        testPeking: testPeking
        lenswayTest: lenswayTest
        petName: petName
        petBirthday: 2025-07-28T20:22:18+02:00
        bciMatch: true
        favBar: favBar
        regnr: regnr
        numberOfPeopleInHousehold: 65
        typeOfLiving: typeOfLiving
        oogmetingeyewish: oogmetingeyewish
        eyetesteyewish: 2025-07-28T20:22:18+02:00
        pregnant: true
        babyDueDate: 2025-07-28T20:22:18+02:00
        meinBonita: true
        trainingGoal: trainingGoal
        distanceWeek: 65
        postureAnalysis: postureAnalysis
        favoritebrand02: string
        favoritebrand03: favoritebrand03
        creditLimit: 123.45
        availabilityToSpend: 123.45
        membershipType: string
        occasion: string
        matthewsTest: string
        customerStatus: string
        lukeTest: string
        storeEmployee: string
        beschwerden: string
        themen:
        - Mister O'Lui
        - Beasts
        hairType: string
        hairtypes: string
        knie:
        - Hund
        - Katze
        - Hase
        - Meerschweinchen
        - Vogel
        kwantumWoonTrend: string
        houseType: string
        mainInterestKwantum: string
        movingActivity: string
        voetKlachten: string
        schoenTypeSchultrups: string
        dack: string
        sportSchutrups: string
        schutrupsInteresses:
        - Baby
        - Kind
        - Heren
        - Dames
        - Thuis
        - Duurzaam
        - Thema's
        - Nieuw
        wellbeing: []
        sailingpreference:
        - ' Offshore Sailing'
        - ' Coastal sailing'
        - ' In shore sailing'
        obelinkVakantie: string
        obelinkTransport:
        - Auto
        - Camper
        - Caravan
        - Vouwwagen
        - Vliegtuig
        healthquiz:
        - " Skin, Hair & Nails"
        - ' Metabolism & Energy'
        - ' Mobility & Recovery'
        - ' Balance & Stress Resilience '
        faceshapeeyewish: string
        eyecareEyewish:
        - Glasses
        - Lenses
        - Sunglasses
        lensescoatingseyewish: string
        carowner: string
        productlineMaxiCosy: string
        workoutSportNutrition: string
        farbe: string
        footStrike: string
        carSeatDorel: string
        registrationStoreId: storeExternalId
        currentStoreExternalId: storeExternalId
        labels: "lableName1,lableName2"
    contactUpdateBulkExample:
      title: contactUpdateBulkExample
      type: object
      example:
      - "1": string
        "123": "123"
        "234": true
        "890": "890"
        "1234": "1234"
        "123412": 65
        contactId: 067da0c0-c4a1-4dbc-9e18-59230db118e3
        lastName: Doe
        firstName: John
        street: Example Avenue 12
        zipCode: string
        city: Examplecity
        email: john.doe@example.com
        mobilePhone: "+46700111222"
        countryCode: SE
        socialSecurityNumber: "191503205484"
        gender: Female
        age: 65
        birthDay: 2005-07-28
        careOf: careOf
        externalId: externalId
        tbRating: 65
        tbRatingm: 65
        memberNumber: 12345
        rfm: 123.45
        shoeSize: 123.45
        shirtSize: shirtSize
        waistSize: 65
        favoriteBrand: favoriteBrand
        children:
        - 2017-01-01
        - 2015-01-01
        favoriteColor: favoriteColor
        organizationNumber: organizationNumber
        discoveryKey: 42a996f8-2322-4bab-81a7-6b8a174fb1ea
        toBeRemoved: true
        acceptedInvitation: true
        lang: en
        rentedSuit: true
        anniversary: 2025-07-28T20:22:18+02:00
        kirsCLV: kirsCLV
        x: x
        expectedBirthDate: 2025-07-28T20:22:18+02:00
        childsName: childsName
        leftEye: leftEye
        rightEye: rightEye
        lastCheck: 2025-07-28T20:22:18+02:00
        nextCheck: 2025-07-28T20:22:18+02:00
        golfHandicap: 65
        testPeking: testPeking
        lenswayTest: lenswayTest
        petName: petName
        petBirthday: 2025-07-28T20:22:18+02:00
        bciMatch: true
        favBar: favBar
        regnr: regnr
        numberOfPeopleInHousehold: 65
        typeOfLiving: typeOfLiving
        oogmetingeyewish: oogmetingeyewish
        eyetesteyewish: 2025-07-28T20:22:18+02:00
        pregnant: true
        babyDueDate: 2025-07-28T20:22:18+02:00
        meinBonita: true
        trainingGoal: trainingGoal
        distanceWeek: 65
        postureAnalysis: postureAnalysis
        favoritebrand02: string
        favoritebrand03: favoritebrand03
        creditLimit: 123.45
        availabilityToSpend: 123.45
        membershipType: string
        occasion: string
        matthewsTest: string
        customerStatus: string
        lukeTest: string
        storeEmployee: string
        beschwerden: string
        themen:
        - Mister O'Lui
        - Beasts
        hairType: string
        hairtypes: string
        knie:
        - Hund
        - Katze
        - Hase
        - Meerschweinchen
        - Vogel
        kwantumWoonTrend: string
        houseType: string
        mainInterestKwantum: string
        movingActivity: string
        voetKlachten: string
        schoenTypeSchultrups: string
        dack: string
        sportSchutrups: string
        schutrupsInteresses:
        - Baby
        - Kind
        - Heren
        - Dames
        - Thuis
        - Duurzaam
        - Thema's
        - Nieuw
        wellbeing: []
        sailingpreference:
        - ' Offshore Sailing'
        - ' Coastal sailing'
        - ' In shore sailing'
        obelinkVakantie: string
        obelinkTransport:
        - Auto
        - Camper
        - Caravan
        - Vouwwagen
        - Vliegtuig
        healthquiz:
        - " Skin, Hair & Nails"
        - ' Metabolism & Energy'
        - ' Mobility & Recovery'
        - ' Balance & Stress Resilience '
        faceshapeeyewish: string
        eyecareEyewish:
        - Glasses
        - Lenses
        - Sunglasses
        lensescoatingseyewish: string
        carowner: string
        productlineMaxiCosy: string
        workoutSportNutrition: string
        farbe: string
        footStrike: string
        carSeatDorel: string
        currentStoreExternalId: storeExternalId
        labels: "lableName1,lableName2"
      - "1": string
        "123": "123"
        "234": true
        "890": "890"
        "1234": "1234"
        "123412": 65
        contactId: 067da0c0-c4a1-4dbc-9e18-59230db118e3
        lastName: Doe
        firstName: John
        street: Example Avenue 12
        zipCode: string
        city: Examplecity
        email: john.doe@example.com
        mobilePhone: "+46700111222"
        countryCode: SE
        socialSecurityNumber: "191503205484"
        gender: Female
        age: 65
        birthDay: 2005-07-28
        careOf: careOf
        externalId: externalId
        tbRating: 65
        tbRatingm: 65
        memberNumber: 12345
        rfm: 123.45
        shoeSize: 123.45
        shirtSize: shirtSize
        waistSize: 65
        favoriteBrand: favoriteBrand
        children:
        - 2017-01-01
        - 2015-01-01
        favoriteColor: favoriteColor
        organizationNumber: organizationNumber
        discoveryKey: 42a996f8-2322-4bab-81a7-6b8a174fb1ea
        toBeRemoved: true
        acceptedInvitation: true
        lang: en
        rentedSuit: true
        anniversary: 2025-07-28T20:22:18+02:00
        kirsCLV: kirsCLV
        x: x
        expectedBirthDate: 2025-07-28T20:22:18+02:00
        childsName: childsName
        leftEye: leftEye
        rightEye: rightEye
        lastCheck: 2025-07-28T20:22:18+02:00
        nextCheck: 2025-07-28T20:22:18+02:00
        golfHandicap: 65
        testPeking: testPeking
        lenswayTest: lenswayTest
        petName: petName
        petBirthday: 2025-07-28T20:22:18+02:00
        bciMatch: true
        favBar: favBar
        regnr: regnr
        numberOfPeopleInHousehold: 65
        typeOfLiving: typeOfLiving
        oogmetingeyewish: oogmetingeyewish
        eyetesteyewish: 2025-07-28T20:22:18+02:00
        pregnant: true
        babyDueDate: 2025-07-28T20:22:18+02:00
        meinBonita: true
        trainingGoal: trainingGoal
        distanceWeek: 65
        postureAnalysis: postureAnalysis
        favoritebrand02: string
        favoritebrand03: favoritebrand03
        creditLimit: 123.45
        availabilityToSpend: 123.45
        membershipType: string
        occasion: string
        matthewsTest: string
        customerStatus: string
        lukeTest: string
        storeEmployee: string
        beschwerden: string
        themen:
        - Mister O'Lui
        - Beasts
        hairType: string
        hairtypes: string
        knie:
        - Hund
        - Katze
        - Hase
        - Meerschweinchen
        - Vogel
        kwantumWoonTrend: string
        houseType: string
        mainInterestKwantum: string
        movingActivity: string
        voetKlachten: string
        schoenTypeSchultrups: string
        dack: string
        sportSchutrups: string
        schutrupsInteresses:
        - Baby
        - Kind
        - Heren
        - Dames
        - Thuis
        - Duurzaam
        - Thema's
        - Nieuw
        wellbeing: []
        sailingpreference:
        - ' Offshore Sailing'
        - ' Coastal sailing'
        - ' In shore sailing'
        obelinkVakantie: string
        obelinkTransport:
        - Auto
        - Camper
        - Caravan
        - Vouwwagen
        - Vliegtuig
        healthquiz:
        - " Skin, Hair & Nails"
        - ' Metabolism & Energy'
        - ' Mobility & Recovery'
        - ' Balance & Stress Resilience '
        faceshapeeyewish: string
        eyecareEyewish:
        - Glasses
        - Lenses
        - Sunglasses
        lensescoatingseyewish: string
        carowner: string
        productlineMaxiCosy: string
        workoutSportNutrition: string
        farbe: string
        footStrike: string
        carSeatDorel: string
        currentStoreExternalId: storeExternalId
        labels: "lableName1,lableName2"
    contactPost:
      title: contactPost
      type: object
      example:
        "1": string
        "123": "123"
        "234": true
        "890": "890"
        "1234": "1234"
        "123412": 65
        lastName: Doe
        firstName: John
        street: Example Avenue 12
        zipCode: string
        city: Examplecity
        email: john.doe@example.com
        mobilePhone: "+46700111222"
        countryCode: SE
        socialSecurityNumber: "199910061788"
        gender: Female
        age: 65
        birthDay: 2005-07-28
        careOf: careOf
        externalId: externalId
        tbRating: 65
        tbRatingm: 65
        memberNumber: 12345
        shoeSize: 123.45
        shirtSize: shirtSize
        waistSize: 65
        favoriteBrand: favoriteBrand
        children:
        - 2017-01-01
        - 2015-01-01
        favoriteColor: favoriteColor
        organizationNumber: organizationNumber
        discoveryKey: 6c71122a-530c-4bc1-a1cd-3ba86b5fe1a0
        toBeRemoved: true
        acceptedInvitation: true
        lang: en
        rentedSuit: true
        anniversary: 2025-07-28T20:22:18+02:00
        kirsCLV: kirsCLV
        x: x
        expectedBirthDate: 2025-07-28T20:22:18+02:00
        childsName: childsName
        leftEye: leftEye
        rightEye: rightEye
        lastCheck: 2025-07-28T20:22:18+02:00
        nextCheck: 2025-07-28T20:22:18+02:00
        golfHandicap: 65
        testPeking: testPeking
        lenswayTest: lenswayTest
        petName: petName
        petBirthday: 2025-07-28T20:22:18+02:00
        bciMatch: true
        favBar: favBar
        regnr: regnr
        numberOfPeopleInHousehold: 65
        typeOfLiving: typeOfLiving
        oogmetingeyewish: oogmetingeyewish
        eyetesteyewish: 2025-07-28T20:22:18+02:00
        pregnant: true
        babyDueDate: 2025-07-28T20:22:18+02:00
        meinBonita: true
        trainingGoal: trainingGoal
        distanceWeek: 65
        postureAnalysis: postureAnalysis
        favoritebrand02: string
        favoritebrand03: favoritebrand03
        creditLimit: 123.45
        availabilityToSpend: 123.45
        membershipType: string
        occasion: string
        matthewsTest: string
        customerStatus: string
        lukeTest: string
        storeEmployee: string
        beschwerden: string
        themen:
        - Mister O'Lui
        - Beasts
        hairType: string
        hairtypes: string
        knie:
        - Hund
        - Katze
        - Hase
        - Meerschweinchen
        - Vogel
        kwantumWoonTrend: string
        houseType: string
        mainInterestKwantum: string
        movingActivity: string
        voetKlachten: string
        schoenTypeSchultrups: string
        dack: string
        sportSchutrups: string
        schutrupsInteresses:
        - Baby
        - Kind
        - Heren
        - Dames
        - Thuis
        - Duurzaam
        - Thema's
        - Nieuw
        wellbeing: []
        sailingpreference:
        - ' Offshore Sailing'
        - ' Coastal sailing'
        - ' In shore sailing'
        obelinkVakantie: string
        obelinkTransport:
        - Auto
        - Camper
        - Caravan
        - Vouwwagen
        - Vliegtuig
        healthquiz:
        - " Skin, Hair & Nails"
        - ' Metabolism & Energy'
        - ' Mobility & Recovery'
        - ' Balance & Stress Resilience '
        faceshapeeyewish: string
        eyecareEyewish:
        - Glasses
        - Lenses
        - Sunglasses
        lensescoatingseyewish: string
        carowner: string
        productlineMaxiCosy: string
        workoutSportNutrition: string
        farbe: string
        footStrike: string
        carSeatDorel: string
        contactType: Member
        meta: {}
        preferences:
          acceptsEmail: false
          acceptsPostal: false
          acceptsSms: false
        consents:
        - id: acceptsPersonalOffers
          value: true
          date: 2025-07-28T20:22:18.6206965+02:00
          source: string
          comment: string
        - id: acceptsMemberTerms
          value: true
          date: 2025-07-28T20:22:18.6206965+02:00
          source: string
          comment: string
        - id: deletionRequest
          value: true
          date: 2025-07-28T20:22:18.6206965+02:00
          source: string
          comment: string
        - id: deletionApproved
          value: true
          date: 2025-07-28T20:22:18.6206965+02:00
          source: string
          comment: string
        - id: doubleOpt
          value: true
          date: 2025-07-28T20:22:18.6206965+02:00
          source: string
          comment: string
    InteractionModel:
      type: object
      properties:
        id:
          type: string
        contactId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        schemaId:
          type: string
        createdDate:
          type: string
          format: date-time
        payload:
          type: object
          properties: {}
    InteractionPage:
      type: object
      properties:
        links:
          type: array
          items:
            $ref: '#/components/schemas/HypermediaLink'
        items:
          type: array
          items:
            $ref: '#/components/schemas/InteractionModel'
    HypermediaLink:
      type: object
      properties:
        href:
          type: string
        method:
          type: string
        rel:
          type: string
    InteractionCreateResponse:
      type: object
      properties:
        id:
          type: string
        self:
          $ref: '#/components/schemas/InteractionCreateResponseSelf'
    InteractionCreateResponseSelf:
      type: object
      properties:
        contactId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        href:
          type: string
        created:
          type: string
          format: date-time
    interactionSchema:
      title: interactionSchema
      type: object
      example:
        contactId: 00000000-0000-0000-0000-000000000000
        schemaId: Reuse-Spring-2023
        createdDate: 2025-07-28 18:22:18 +00:00
        payload:
          price: 123
          delivered: 2011-11-03T20:00:11
          name: ReusedItem
          orderNumber: FX-250123-110
    InteractionSchemaWithoutJsonModel:
      type: object
      properties:
        id:
          type: string
        displayName:
          type: string
    InteractionSchemaModel:
      type: object
      properties:
        jsonSchema:
          type: object
          properties: {}
        id:
          type: string
        displayName:
          type: string
      example:
        id: string
        displayName: string
        jsonSchema: "{}"
    InteractionSchemaResponse:
      type: object
      properties:
        id:
          type: string
        self:
          $ref: '#/components/schemas/InteractionSchemaResponseSelf'
    InteractionSchemaResponseSelf:
      type: object
      properties:
        href:
          type: string
        created:
          type: string
          format: date-time
    interactionSchemaSchema:
      title: interactionSchemaSchema
      type: object
      example:
        id: Reuse-Spring-2023
        displayName: Reuse Spring Sale
        jsonSchema:
          $schema: https://json-schema.org/draft/2020-12/schema
          type: object
          properties:
            price:
              type: integer
              displayName: Price
              showInContactCard: "true"
              addToSegmentation: "false"
            delivered:
              type: string
              format: date-time
              displayName: Delivered
              showInContactCard: "true"
              addToSegmentation: "false"
            name:
              type: string
              displayName: Name
              showInContactCard: "true"
              addToSegmentation: "false"
            orderNumber:
              type: string
              displayName: Order number
              showInContactCard: "true"
              addToSegmentation: "false"
    StockLevelRequest:
      type: object
      properties:
        sku:
          type: string
        locale:
          type: string
        quantity:
          type: integer
          format: int32
        externalId:
          type: string
      example:
        Sku: 12345-XL
        Locale: sv-SE
        Quantity: 10
        ExternalId: 12345-XL-ECOM
    SubscriptionRequest:
      type: object
      properties:
        contactId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        sku:
          type: string
        locale:
          type: string
        externalId:
          type: string
      example:
        ContactId: 0d6cf29a-f4a9-42f4-bcdf-308bef3af294
        Sku: 12345-XL
        Locale: sv-SE
        ExternalId: 12345-XL-ECOM
    SubscriptionResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        contactId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        sku:
          type: string
        locale:
          type: string
        externalId:
          type: string
        createdOn:
          type: string
          format: date-time
      example:
        Id: 21640e0e-9c81-470a-854c-849393745f65
        ContactId: a6d726ad-aeb6-4f8f-b2f9-70c16cbfff4a
        Sku: 12345-XL
        Locale: sv-SE
        ExternalId: 12345-XL-ECOM
        CreatedOn: 2025-07-28T20:22:18.6363231+02:00
    OrderJob:
      type: object
      properties:
        status:
          type: string
        jobId:
          type: string
        orderId:
          $ref: '#/components/schemas/OrderId'
        href:
          type: string
        error:
          type: string
        errorDetails:
          type: string
        versionTag:
          type: string
    OrderId:
      type: object
      properties:
        value:
          type: string
          readOnly: true
    OrderResponse:
      type: object
      properties:
        orderId:
          type: string
        contactId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        versionTag:
          type: string
        externalStoreId:
          type: string
        status:
          type: string
          enum:
          - InProgress
          - Completed
          - Cancelled
        externalStatus:
          type: string
        references:
          type: array
          items:
            type: string
        currencyCode:
          type: string
        channel:
          type: string
          enum:
          - Store
          - Ecom
          - App
          - Other
        createdAt:
          type: string
          format: date-time
        lastChangedAt:
          type: string
          format: date-time
        lineItems:
          $ref: '#/components/schemas/LineItemList'
        payments:
          $ref: '#/components/schemas/PaymentList'
        fees:
          $ref: '#/components/schemas/FeeList'
        discounts:
          $ref: '#/components/schemas/DiscountList'
        returnDetails:
          $ref: '#/components/schemas/ReturnDetails'
        delivery:
          $ref: '#/components/schemas/Delivery'
        billingAddress:
          $ref: '#/components/schemas/Address'
        deliveryAddress:
          $ref: '#/components/schemas/Address'
        totalPrice:
          type: number
          format: double
        taxes:
          $ref: '#/components/schemas/TaxListWithTotal'
        links:
          type: array
          items:
            $ref: '#/components/schemas/IHypermediaLink'
    LineItemList:
      required:
      - items
      type: object
      properties:
        items:
          type: array
          description: Breakdown of line items.
          items:
            $ref: '#/components/schemas/LineItem'
        subTotal:
          maximum: 1000000000
          minimum: 0
          type: number
          description: The total of all line items' total price values.
          format: double
    PaymentList:
      required:
      - items
      type: object
      properties:
        items:
          type: array
          description: Breakdown of payments.
          items:
            $ref: '#/components/schemas/Payment'
    FeeList:
      required:
      - items
      type: object
      properties:
        items:
          type: array
          description: Breakdown of fees.
          items:
            $ref: '#/components/schemas/Fee'
    DiscountList:
      required:
      - items
      type: object
      properties:
        items:
          type: array
          description: Breakdown of discounts.
          items:
            $ref: '#/components/schemas/Discount'
    ReturnDetails:
      required:
      - type
      type: object
      properties:
        type:
          type: string
          description: "Type of return (e.g., \"Complaint\")."
          enum:
          - Normal
          - Complaint
          - Change
        reason:
          maxLength: 255
          minLength: 0
          type: string
          description: Reason for return.
    Delivery:
      required:
      - method
      type: object
      properties:
        method:
          maxLength: 255
          minLength: 0
          type: string
          description: Method of delivery.
        trackingNumber:
          maxLength: 255
          minLength: 0
          type: string
          description: Tracking number for the delivery.
        trackingUri:
          type: string
          description: Tracking URI for the delivery.
        deliveryDate:
          type: string
          description: Datetime for delivery formatted according to ISO 8601.
          format: date-time
    Address:
      required:
      - city
      - country
      - firstname
      - lastname
      - postalCode
      - streetAddress
      type: object
      properties:
        title:
          maxLength: 255
          minLength: 0
          type: string
          description: Title of the recipient.
        firstname:
          maxLength: 255
          minLength: 0
          type: string
          description: Firstname of the recipient.
        lastname:
          maxLength: 255
          minLength: 0
          type: string
          description: Lastname of the recipient.
        streetAddress:
          maxLength: 255
          minLength: 0
          type: string
          description: Street address of the recipient.
        streetAddress2:
          maxLength: 255
          minLength: 0
          type: string
          description: Street address of the recipient.
        postalCode:
          maxLength: 255
          minLength: 0
          type: string
          description: Postal code of the recipient.
        region:
          maxLength: 255
          minLength: 0
          type: string
          description: Region of the recipient.
        city:
          maxLength: 255
          minLength: 0
          type: string
          description: City of the recipient.
        country:
          maxLength: 255
          minLength: 0
          type: string
          description: Country of the recipient.
        email:
          type: string
          description: Email of the recipient.
        phone:
          maxLength: 255
          minLength: 0
          type: string
          description: Phone number of the recipient.
    TaxListWithTotal:
      required:
      - items
      type: object
      properties:
        items:
          type: array
          description: Breakdown of taxes.
          items:
            $ref: '#/components/schemas/Tax'
        totalTax:
          maximum: 1000000000
          minimum: 0
          type: number
          description: The total of all tax amounts.
          format: double
    IHypermediaLink:
      type: object
      properties:
        href:
          type: string
        method:
          type: string
        rel:
          type: string
    LineItem:
      required:
      - article
      - quantity
      - totalPrice
      type: object
      properties:
        id:
          maxLength: 255
          minLength: 0
          type: string
          description: Unique line item identifier by client.
        type:
          type: string
          description: Type of line item. Defaults to Purchase if omitted.
          enum:
          - Purchase
          - Return
        externalStatus:
          maxLength: 255
          minLength: 0
          type: string
          description: "Current status of the line item in external systems (e.g.,\
            \ \"Reserved\", \"Picked\")"
        quantity:
          maximum: 1000000000
          minimum: 0
          type: number
          description: Quantity of units in line item.
          format: double
        article:
          $ref: '#/components/schemas/Article'
        discounts:
          $ref: '#/components/schemas/DiscountList'
        returnDetails:
          $ref: '#/components/schemas/ReturnDetails'
        pricePerUnit:
          maximum: 1000000000
          minimum: 0
          type: number
          description: "Net amount per unit, discounts applied, taxes included."
          format: double
        originalPricePerUnit:
          maximum: 1000000000
          minimum: 0
          type: number
          description: "Net amount per unit before discounts were applied, taxes included."
          format: double
        totalPrice:
          maximum: 1000000000
          minimum: 0
          type: number
          description: "Total net amount, discounts applied, taxes included."
          format: double
        originalTotalPrice:
          maximum: 1000000000
          minimum: 0
          type: number
          description: "Total net amount before discounts were applied, taxes included."
          format: double
        taxes:
          $ref: '#/components/schemas/TaxList'
        group:
          maxLength: 255
          minLength: 0
          type: string
          description: Group label to categorize line item.
    Payment:
      required:
      - amount
      - method
      - paidAt
      type: object
      properties:
        paidAt:
          type: string
          description: The time the payment was made formatted according to ISO 8601.
          format: date-time
        method:
          type: string
          description: The payment method used.
          enum:
          - Cash
          - CreditDebit
          - Mobile
          - Voucher
          - Coupon
          - GiftCard
          - OnlinePayment
          - HouseAccount
          - Invoice
          - Installment
          - Other
        amount:
          maximum: 1000000000
          minimum: 0
          type: number
          description: The amount of the payment.
          format: double
        description:
          maxLength: 10000
          minLength: 0
          type: string
          description: The description of the payment.
    Fee:
      required:
      - amount
      - type
      type: object
      properties:
        type:
          type: string
          description: "The type of fee (e.g., \"Shipping\")."
          enum:
          - Shipping
          - Service
          - Administration
          - Other
        description:
          maxLength: 10000
          minLength: 0
          type: string
          description: The description of the fee.
        amount:
          maximum: 1000000000
          minimum: 0
          type: number
          description: The amount of the fee.
          format: double
        taxes:
          $ref: '#/components/schemas/TaxList'
    Discount:
      required:
      - amount
      - type
      type: object
      properties:
        type:
          type: string
          description: "The type of discount (e.g., \"Member\")."
          enum:
          - Member
          - Personal
          - Seasonal
          - Voucher
          - Coupon
          - Employee
          - Other
        description:
          maxLength: 10000
          minLength: 0
          type: string
          description: The description of the discount.
        amount:
          maximum: 1000000000
          minimum: 0
          type: number
          description: The amount of the discount.
          format: double
        code:
          maxLength: 255
          minLength: 0
          type: string
          description: The code of the discount.
    Tax:
      required:
      - amount
      - percent
      type: object
      properties:
        amount:
          maximum: 1000000000
          minimum: 0
          type: number
          description: Amount of tax.
          format: double
        percent:
          maximum: 100
          minimum: 0
          type: number
          description: Percent of tax.
          format: double
        description:
          maxLength: 10000
          minLength: 0
          type: string
          description: "Description of tax (e.g, \"VAT\")."
    Article:
      required:
      - sku
      type: object
      properties:
        sku:
          maxLength: 255
          minLength: 0
          type: string
          description: Stock Keeping Unit. The referred SKU should be registered in
            advance in the Article register for the segmentation on order data to
            work.
        name:
          maxLength: 255
          minLength: 0
          type: string
        description:
          maxLength: 255
          minLength: 0
          type: string
        imageUri:
          type: string
          description: URI pointing to an product image of the item.
        targetUri:
          type: string
          description: URI pointing to an external page with more information about
            the item.
    TaxList:
      required:
      - items
      type: object
      properties:
        items:
          type: array
          description: Breakdown of taxes.
          items:
            $ref: '#/components/schemas/Tax'
    ReplaceOrderRequest:
      required:
      - currencyCode
      - status
      - totalPrice
      type: object
      properties:
        externalStoreId:
          maxLength: 255
          minLength: 0
          type: string
          description: External store identifier.
        status:
          type: string
          description: "Current status of the order (e.g., \"InProgress\")."
          enum:
          - InProgress
          - Completed
          - Cancelled
        externalStatus:
          maxLength: 255
          minLength: 0
          type: string
          description: "Current status of the order in external systems (e.g., \"\
            Reserved\", \"Picked\")."
        references:
          type: array
          description: A list of orderId's that relate to the current order.
          items:
            type: string
        currencyCode:
          type: string
          description: The currency code according to ISO 4217.
        channel:
          type: string
          description: Channel where the order was created. Defaults to Store if omitted.
          enum:
          - Store
          - Ecom
          - App
          - Other
        createdAt:
          type: string
          description: Datetime when this order was created formatted according to
            ISO 8601.
          format: date-time
        lastChangedAt:
          type: string
          description: Datetime when this order was last changed formatted according
            to ISO 8601.
          format: date-time
        lineItems:
          $ref: '#/components/schemas/LineItemList'
        payments:
          $ref: '#/components/schemas/PaymentList'
        fees:
          $ref: '#/components/schemas/FeeList'
        discounts:
          $ref: '#/components/schemas/DiscountList'
        returnDetails:
          $ref: '#/components/schemas/ReturnDetails'
        delivery:
          $ref: '#/components/schemas/Delivery'
        billingAddress:
          $ref: '#/components/schemas/Address'
        deliveryAddress:
          $ref: '#/components/schemas/Address'
        totalPrice:
          maximum: 1000000000
          minimum: 0
          type: number
          description: "Total net amount, discounts applied, fees and taxes included."
          format: double
        taxes:
          $ref: '#/components/schemas/TaxListWithTotal'
      example:
        externalStoreId: Ecom-Europe
        status: InProgress
        externalStatus: Picked
        references:
        - order-123
        currencyCode: EUR
        channel: Ecom
        createdAt: 2025-07-28T20:21:18+02:00
        lastChangedAt: 2025-07-28T20:22:18+02:00
        lineItems:
          items:
          - id: item-1
            type: Purchase
            externalStatus: Reserved
            quantity: 1
            article:
              sku: 1978-abc80-1
              name: ABC 80
              description: Advanced Basic Computer for the 1980s
              imageUri: https://placehold.co/600x420
              targetUri: https://example.com/abc80
            discounts:
              items:
              - type: Voucher
                description: Reward voucher
                amount: 100
                code: reward
            pricePerUnit: 1199
            originalPricePerUnit: 1299
            totalPrice: 1199
            originalTotalPrice: 1299
            taxes:
              items:
              - amount: 299.75
                percent: 25
                description: VAT
            group: group-1
          - id: item-2
            type: Purchase
            externalStatus: Picked
            quantity: 2
            article:
              sku: 1978-abc80-2
              name: Power Supply
              description: Advanced Basic Computer for the 1980s
              imageUri: https://placehold.co/600x420
              targetUri: https://example.com/abc80
            discounts:
              items:
              - type: Voucher
                description: Reward voucher
                amount: 100
                code: reward
            pricePerUnit: 199
            originalPricePerUnit: 299
            totalPrice: 398
            originalTotalPrice: 598
            taxes:
              items:
              - amount: 99.5
                percent: 25
                description: VAT
            group: group-2
          subTotal: 1597
        payments:
          items:
          - paidAt: 2025-07-28T20:22:18.6994076+02:00
            method: CreditDebit
            amount: 1647
            description: MasterCard payment
        fees:
          items:
          - type: Shipping
            description: DHL
            amount: 100
            taxes:
              items:
              - amount: 25
                percent: 25
                description: VAT
          - type: Administration
            description: Administration fee
            amount: 50
            taxes:
              items:
              - amount: 12.5
                percent: 25
                description: VAT
        discounts:
          items:
          - type: Seasonal
            description: Vintage Days campaign
            amount: 100
            code: vintagedays
        delivery:
          method: DHL
          trackingNumber: "1234567890"
          trackingUri: https://dhl.com/track/1234567890
          deliveryDate: 2025-07-31T20:22:18+02:00
        billingAddress:
          title: Mr
          firstname: John
          lastname: Doe
          streetAddress: Main Street 1
          postalCode: "12345"
          city: Springfield
          country: US
          email: john@example.com
          phone: "+1234567890"
        deliveryAddress:
          title: Mr
          firstname: John
          lastname: Doe
          streetAddress: Main Street 1
          postalCode: "12345"
          city: Springfield
          country: US
          email: john@example.com
          phone: "+1234567890"
        totalPrice: 1647
        taxes:
          items:
          - amount: 411.75
            percent: 25
            description: VAT
          totalTax: 411.75
    PagedOrderResponses:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/OrderResponse'
        totalCount:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
        count:
          type: integer
          format: int32
        links:
          type: array
          items:
            $ref: '#/components/schemas/IHypermediaLink'
    CreateOrderRequest:
      required:
      - contact
      - currencyCode
      - orderId
      - status
      - totalPrice
      type: object
      properties:
        orderId:
          maxLength: 64
          minLength: 0
          type: string
          description: Unique order identifier by client.
        contact:
          $ref: '#/components/schemas/ContactKey'
        externalStoreId:
          maxLength: 255
          minLength: 0
          type: string
          description: External store identifier.
        status:
          type: string
          description: "Current status of the order (e.g., \"InProgress\")."
          enum:
          - InProgress
          - Completed
          - Cancelled
        externalStatus:
          maxLength: 255
          minLength: 0
          type: string
          description: "Current status of the order in external systems (e.g., \"\
            Reserved\", \"Picked\")."
        references:
          type: array
          description: A list of orderId's that relate to the current order.
          items:
            type: string
        currencyCode:
          type: string
          description: The currency code according to ISO 4217.
        channel:
          type: string
          description: Channel where the order was created. Defaults to Store if omitted.
          enum:
          - Store
          - Ecom
          - App
          - Other
        createdAt:
          type: string
          description: Datetime when this order was created formatted according to
            ISO 8601.
          format: date-time
        lastChangedAt:
          type: string
          description: Datetime when this order was last changed formatted according
            to ISO 8601.
          format: date-time
        lineItems:
          $ref: '#/components/schemas/LineItemList'
        payments:
          $ref: '#/components/schemas/PaymentList'
        fees:
          $ref: '#/components/schemas/FeeList'
        discounts:
          $ref: '#/components/schemas/DiscountList'
        returnDetails:
          $ref: '#/components/schemas/ReturnDetails'
        delivery:
          $ref: '#/components/schemas/Delivery'
        billingAddress:
          $ref: '#/components/schemas/Address'
        deliveryAddress:
          $ref: '#/components/schemas/Address'
        totalPrice:
          maximum: 1000000000
          minimum: 0
          type: number
          description: "Total net amount, discounts applied, fees and taxes included."
          format: double
        taxes:
          $ref: '#/components/schemas/TaxListWithTotal'
      example:
        orderId: order-1753726938
        contact:
          matchKey: john@example.com
          matchKeyType: Email
        externalStoreId: Ecom-Europe
        status: InProgress
        externalStatus: Picked
        references:
        - order-123
        currencyCode: EUR
        channel: Ecom
        createdAt: 2025-07-28T20:21:18+02:00
        lastChangedAt: 2025-07-28T20:22:18+02:00
        lineItems:
          items:
          - id: item-1
            type: Purchase
            externalStatus: Reserved
            quantity: 1
            article:
              sku: 1978-abc80-1
              name: ABC 80
              description: Advanced Basic Computer for the 1980s
              imageUri: https://placehold.co/600x420
              targetUri: https://example.com/abc80
            discounts:
              items:
              - type: Voucher
                description: Reward voucher
                amount: 100
                code: reward
            pricePerUnit: 1199
            originalPricePerUnit: 1299
            totalPrice: 1199
            originalTotalPrice: 1299
            taxes:
              items:
              - amount: 299.75
                percent: 25
                description: VAT
            group: group-1
          - id: item-2
            type: Purchase
            externalStatus: Picked
            quantity: 2
            article:
              sku: 1978-abc80-2
              name: Power Supply
              description: Advanced Basic Computer for the 1980s
              imageUri: https://placehold.co/600x420
              targetUri: https://example.com/abc80
            discounts:
              items:
              - type: Voucher
                description: Reward voucher
                amount: 100
                code: reward
            pricePerUnit: 199
            originalPricePerUnit: 299
            totalPrice: 398
            originalTotalPrice: 598
            taxes:
              items:
              - amount: 99.5
                percent: 25
                description: VAT
            group: group-2
          subTotal: 1597
        payments:
          items:
          - paidAt: 2025-07-28T20:22:18.7306613+02:00
            method: CreditDebit
            amount: 1647
            description: MasterCard payment
        fees:
          items:
          - type: Shipping
            description: DHL
            amount: 100
            taxes:
              items:
              - amount: 25
                percent: 25
                description: VAT
          - type: Administration
            description: Administration fee
            amount: 50
            taxes:
              items:
              - amount: 12.5
                percent: 25
                description: VAT
        discounts:
          items:
          - type: Seasonal
            description: Vintage Days campaign
            amount: 100
            code: vintagedays
        delivery:
          method: DHL
          trackingNumber: "1234567890"
          trackingUri: https://dhl.com/track/1234567890
          deliveryDate: 2025-07-31T20:22:18+02:00
        billingAddress:
          title: Mr
          firstname: John
          lastname: Doe
          streetAddress: Main Street 1
          postalCode: "12345"
          city: Springfield
          country: US
          email: john@example.com
          phone: "+1234567890"
        deliveryAddress:
          title: Mr
          firstname: John
          lastname: Doe
          streetAddress: Main Street 1
          postalCode: "12345"
          city: Springfield
          country: US
          email: john@example.com
          phone: "+1234567890"
        totalPrice: 1647
        taxes:
          items:
          - amount: 411.75
            percent: 25
            description: VAT
          totalTax: 411.75
    ContactKey:
      required:
      - matchKey
      - matchKeyType
      type: object
      properties:
        matchKey:
          maxLength: 255
          minLength: 0
          type: string
        matchKeyType:
          type: string
          enum:
          - Email
          - SocialSecurityNumber
          - MobilePhone
          - CardId
          - ExternalId
          - MemberNumber
          - ContactId
          - MemberNumberWithCardNumberAsFallback
    OrderActionRequest:
      required:
      - action
      - versionTag
      type: object
      properties:
        action:
          type: string
          description: "Order action to perform (e.g., \"ConfirmOrder\", \"ConfirmDelivery\"\
            )."
          enum:
          - ConfirmOrder
          - ConfirmDelivery
          - ConfirmShipment
          - ConfirmCancellation
          - ConfirmCompletion
          - Custom
        versionTag:
          maxLength: 255
          minLength: 0
          type: string
          description: Version tag of the order to perform the action on.
        language:
          type: string
          description: "Language tag for the order action (e.g, \"sv-SE\", \"en-US\"\
            )."
        data:
          type: object
          properties: {}
          description: "Additional data for the order action, that can be used for\
            \ personalization in transactional communication."
      example:
        action: ConfirmOrder
        versionTag: roifado5xmcvk5clyli6aewmx4
        language: en-US
        data:
          custom: data
          list:
          - data1
          - data2
    ChangeOrderStatusRequest:
      required:
      - status
      type: object
      properties:
        status:
          type: string
          description: "Current status of the order (e.g., \"InProgress\")."
          enum:
          - InProgress
          - Completed
          - Cancelled
        externalStatus:
          maxLength: 255
          minLength: 0
          type: string
          description: "Current status of the order in external systems (e.g., \"\
            Reserved\", \"Picked\")."
        lastChangedAt:
          type: string
          description: Datetime when this order was last changed formatted according
            to ISO 8601.
          format: date-time
      example:
        status: InProgress
        externalStatus: Picked
        lastChangedAt: 2025-07-28T20:22:18+02:00
    ChangeOrderDeliveryRequest:
      required:
      - method
      type: object
      properties:
        method:
          maxLength: 255
          minLength: 0
          type: string
          description: Method of delivery.
        trackingNumber:
          maxLength: 255
          minLength: 0
          type: string
          description: Tracking number for the delivery.
        trackingUri:
          type: string
          description: Tracking URI for the delivery.
        deliveryDate:
          type: string
          description: Datetime for delivery formatted according to ISO 8601.
          format: date-time
        lastChangedAt:
          type: string
          description: Datetime when this order was last changed formatted according
            to ISO 8601.
          format: date-time
      example:
        method: DHL
        trackingNumber: "1234567890"
        trackingUri: https://dhl.com/track/1234567890
        deliveryDate: 2025-07-31T20:22:18+02:00
        lastChangedAt: 2025-07-28T20:22:18+02:00
    ContactSearchResult:
      type: object
      properties:
        firstName:
          type: string
        lastName:
          type: string
        careOf:
          type: string
        street:
          type: string
        zipCode:
          type: string
        city:
          type: string
        birthDay:
          type: string
          format: date-time
        status:
          type: string
        country:
          type: string
        phoneNumber:
          type: string
        mobilePhoneNumber:
          type: string
        gender:
          type: string
        searchKey:
          type: string
          enum:
          - MobilePhone
          - SocialSecurityNumber
        unregisteredFromOnlineRegisterInformation:
          $ref: '#/components/schemas/UnregisteredFromOnlineRegisterInformation'
    UnregisteredFromOnlineRegisterInformation:
      type: object
      properties:
        reason:
          type: string
        date:
          type: string
        newSocialSecurityNumber:
          type: string
    PointAccountModelV3:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        balance:
          type: number
          format: double
        balanceExpires:
          type: string
          format: date-time
        contactId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        definitionId:
          type: integer
          format: int32
        pendingPoints:
          type: number
          format: double
        pointsWillExpireDueToInactivity:
          type: string
          format: date-time
        links:
          type: array
          items:
            $ref: '#/components/schemas/IHypermediaLink'
      example:
        id: a2d2426c-a726-455d-a067-f20bfed120d8
        balance: 110
        balanceExpires: 2025-09-28T20:22:18.7462815+02:00
        contactId: 2c4c1530-4e5b-49c7-b48b-a70801129e67
        definitionId: 1
        pendingPoints: 0
        pointsWillExpireDueToInactivity: 2025-09-28T20:22:18.7462815+02:00
        links:
        - href: https://mytenant.voyado.com/api/v3/point-accounts/a2d2426c-a726-455d-a067-f20bfed120d8/transactions
          method: GET
          rel: transactions
    PointTransactionDto:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        accountId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        description:
          type: string
        source:
          type: string
        amount:
          type: number
          format: double
        type:
          type: string
        transactionDate:
          type: string
          format: date-time
        createdOn:
          type: string
          format: date-time
        modifiedOn:
          type: string
          format: date-time
        validFrom:
          type: string
          format: date-time
        validTo:
          type: string
          format: date-time
        expireAfterMonthsInactive:
          type: integer
          format: int32
        retailTransactionLineItemId:
          type: string
        automationPointsAdjustmentReason:
          type: string
    CreatePointAccountModel:
      required:
      - contactId
      - pointAccountDefinitionId
      type: object
      properties:
        contactId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        pointAccountDefinitionId:
          type: integer
          format: int32
    PointTransactionDtoResult:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/PointTransactionDto'
        totalCount:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
        count:
          type: integer
          format: int32
        links:
          type: array
          items:
            $ref: '#/components/schemas/IHypermediaLink'
      example:
        items:
        - id: d7511a12-2f91-4de9-bcec-a9628de634d8
          accountId: dd6c23fb-f9c3-4864-abc5-cc5848eb606c
          description: Test
          source: Automation
          amount: 100
          type: Addition
          transactionDate: 2025-07-28T20:22:18.7619067+02:00
          createdOn: 2025-07-28T20:22:18.7619067+02:00
          modifiedOn: 2025-07-28T20:22:18.7619067+02:00
          validFrom: 2025-07-23T20:22:18.7619067+02:00
          validTo: 2025-08-02T20:22:18.7619067+02:00
          expireAfterMonthsInactive: 6
          retailTransactionLineItemId: b2130f53-ba0e-44a4-8da9-8157d3ea34ee
          automationPointsAdjustmentReason: From automation
        totalCount: 1
        offset: 0
        count: 1
        links:
        - href: "https://mytenant.voyado.com/api/v{x}/point-accounts/0e0e9f81-8977-4c90-b3b3-a6d60086c034/transactions?offset=0&count=5"
          method: GET
          rel: previous
        - href: "https://mytenant.voyado.com/api/v{x}/point-accounts/0e0e9f81-8977-4c90-b3b3-a6d60086c034/transactions?offset=5&count=5"
          method: GET
          rel: next
    AddPointTransactionRequestModel:
      type: object
      properties:
        accountId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        transactionId:
          type: string
          description: The unique identifier of the transaction. This is used to prevent
            duplicate transactions.
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        transactionType:
          type: string
          enum:
          - Addition
          - Deduction
          - Expiry
          - Cancellation
        amount:
          type: number
          description: "Non negative number. If you want to deduct points, use PointType\
            \ Deduction."
          format: double
        description:
          type: string
        source:
          type: string
          enum:
          - Automation
          - Purchase
          - Manual
          - Return
          - ReceiptAdjustment
          - BonusPromotion
          - BonusPromotionReturn
          - RewardVoucher
          - Adjustment
          - BonusBalanceAdjustment
          - UpdateBalance
          - PointTransactionCancellation
          - ResetBalance
        transactionDate:
          type: string
          format: date-time
        validFrom:
          type: string
          format: date-time
        validTo:
          type: string
          format: date-time
        expireAfterMonthsInactive:
          type: integer
          format: int32
    PointTransactionToAccount:
      type: object
      properties:
        contactId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        amount:
          type: number
          format: double
        definitionId:
          type: integer
          format: int32
        timeStamp:
          type: string
          format: date-time
        source:
          type: string
        description:
          type: string
        validFrom:
          type: string
          format: date-time
        validTo:
          type: string
          format: date-time
        expireAfterMonthsInactive:
          type: integer
          format: int32
    PointTransactionToAccountResultModel:
      type: object
      properties:
        notAccepted:
          type: array
          items:
            $ref: '#/components/schemas/PointTransactionToAccount'
        errorMessages:
          type: array
          items:
            type: string
        missingDefinitionIds:
          type: array
          items:
            type: integer
            format: int32
        missingContactIds:
          type: array
          items:
            type: string
            format: uuid
            example: 00000000-0000-0000-0000-000000000000
    ApiExceptionResponse:
      type: object
      properties:
        errorCode:
          type: string
          readOnly: true
        messageDetails:
          type: object
          properties: {}
          readOnly: true
        message:
          type: string
        requestId:
          type: string
          readOnly: true
    MultichannelPromotionModel:
      required:
      - id
      - name
      type: object
      properties:
        id:
          type: string
          description: Internal Id in Voyado
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        status:
          type: string
          description: Current status of the promotion
          readOnly: true
          enum:
          - Ended
          - Active
          - Temporary
          - Draft
          - Scheduled
        externalId:
          type: string
          description: External id generated from system outside of Voyado
        name:
          type: string
          description: "Name of promtion.\r\nFollowing field is required and don't\
            \ allows to be left out or set to null or empty string"
        validity:
          $ref: '#/components/schemas/PromotionValidityModel'
        presentation:
          $ref: '#/components/schemas/PromotionBasicPresentationModel'
        redemptionChannels:
          type: array
          description: "Redemption channels\r\nValid channels: POS, ECOM and OTHER"
          items:
            $ref: '#/components/schemas/MultichannelPromotionRedemptionChannelModel'
      example:
        id: 13aea8ec-1c08-43b4-a969-2657a9355211
        status: Draft
        externalId: externalIdentifier
        name: Promotion Name
        validity:
          startDate: 2025-07-29T20:22:18.7775333+02:00
          assignedValidity:
            unit: Months
            amount: 3
        presentation:
          heading: Promotion presentation title
          description: Promotion presentation description
          link: http://www.example.com
        redemptionChannels:
        - type: POS
          valueType: EXTERNALOFFER
          value: PromotionCode
          instruction: POS Instruction
        - type: ECOM
          valueType: MONEY
          value: "20.5"
    PromotionValidityModel:
      required:
      - startDate
      type: object
      properties:
        startDate:
          type: string
          description: Start date when the promotion going to be active
          format: date-time
        endDate:
          type: string
          description: End date when the promotion not longer active
          format: date-time
        assignedValidity:
          $ref: '#/components/schemas/AssignDateRange'
      description: "Following class holds the duration information for a promotion.\r\
        \nThe this object uses to set and get the duration of a promotion."
    PromotionBasicPresentationModel:
      type: object
      properties:
        heading:
          type: string
          description: "Heading for the promotion.\r\nUses to show up in different\
            \ kind of views."
        description:
          type: string
          description: "Description for the promotion.\r\nUses to show up in different\
            \ kind of views."
        link:
          type: string
          description: "A external link for the promotion.\r\nUses to show up in different\
            \ kind of views."
      description: "Following object is for get/set the presentational side of the\
        \ promotion.\r\nThis data uses to displey in different kind of views, for\
        \ an example in Email messages etc.\r\n            \r\nThis fields populates\
        \ the \"Presentation\" section in the admin UI."
    MultichannelPromotionRedemptionChannelModel:
      type: object
      properties:
        type:
          type: string
          enum:
          - POS
          - ECOM
          - OTHER
        valueType:
          type: string
          enum:
          - PERCENT
          - MONEY
          - EXTERNALOFFER
          - MANUAL
          - SWIPE
        value:
          type: string
          description: "The type of \"Value\" depends on \"ValueType\".\r\n\"MONEY\"\
            \ expects a decimal as a string (\"20.5\"). \"SWIPE\", \"EXTERNALOFFER\"\
            \ and \"MANUAL\" expects a string (\"Promotion\"). \"PERCENT\" expects\
            \ an integer as a string (\"20\")."
        localValues:
          type: array
          items:
            required:
            - amount
            - currency
            type: object
            properties:
              amount:
                type: number
                format: double
              currency:
                type: string
            example:
              amount: 123.45
              currency: EUR
        instruction:
          type: string
    AssignDateRange:
      required:
      - amount
      - unit
      type: object
      properties:
        unit:
          type: string
          enum:
          - Months
          - Days
        amount:
          maximum: 2147483647
          minimum: 1
          type: integer
          format: int32
      description: The validity time of the promotion set when assignment occured
    BadRequestMessageSwaggerModel:
      type: object
      properties:
        message:
          type: string
          readOnly: true
      description: Only used for Swagger example model
    ExceptionResponseContent:
      type: object
      properties:
        message:
          type: string
        requestId:
          type: string
          readOnly: true
    StatusCodeResult:
      type: object
      properties:
        statusCode:
          type: string
          readOnly: true
          enum:
          - Continue
          - SwitchingProtocols
          - OK
          - Created
          - Accepted
          - NonAuthoritativeInformation
          - NoContent
          - ResetContent
          - PartialContent
          - MultipleChoices
          - Ambiguous
          - MovedPermanently
          - Moved
          - Found
          - Redirect
          - SeeOther
          - RedirectMethod
          - NotModified
          - UseProxy
          - Unused
          - TemporaryRedirect
          - RedirectKeepVerb
          - BadRequest
          - Unauthorized
          - PaymentRequired
          - Forbidden
          - NotFound
          - MethodNotAllowed
          - NotAcceptable
          - ProxyAuthenticationRequired
          - RequestTimeout
          - Conflict
          - Gone
          - LengthRequired
          - PreconditionFailed
          - RequestEntityTooLarge
          - RequestUriTooLong
          - UnsupportedMediaType
          - RequestedRangeNotSatisfiable
          - ExpectationFailed
          - UpgradeRequired
          - InternalServerError
          - NotImplemented
          - BadGateway
          - ServiceUnavailable
          - GatewayTimeout
          - HttpVersionNotSupported
        request:
          type: object
          properties: {}
          readOnly: true
    MultichannelBasePromotionModel:
      required:
      - name
      type: object
      properties:
        externalId:
          type: string
          description: External id generated from system outside of Voyado
        name:
          type: string
          description: "Name of promtion.\r\nFollowing field is required and don't\
            \ allows to be left out or set to null or empty string"
        validity:
          $ref: '#/components/schemas/PromotionValidityModel'
        presentation:
          $ref: '#/components/schemas/PromotionBasicPresentationModel'
        redemptionChannels:
          type: array
          description: "Redemption channels\r\nValid channels: POS, ECOM and OTHER"
          items:
            $ref: '#/components/schemas/MultichannelPromotionRedemptionChannelModel'
      example:
        externalId: externalIdentifier
        name: Promotion Name
        validity:
          startDate: 2025-07-29T20:22:18.7931561+02:00
          assignedValidity:
            unit: Months
            amount: 3
        presentation:
          heading: Promotion presentation title
          description: Promotion presentation description
          link: http://www.example.com
        redemptionChannels:
        - type: POS
          valueType: EXTERNALOFFER
          value: PromotionCode
          instruction: POS Instruction
        - type: ECOM
          valueType: MONEY
          value: "20.5"
    InvalidModelStateSwaggerModel:
      type: object
      properties:
        message:
          type: string
          readOnly: true
        modelState:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ModelState'
          readOnly: true
    ModelState:
      type: object
      properties:
        value:
          $ref: '#/components/schemas/ValueProviderResult'
        errors:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/ModelError'
    ValueProviderResult:
      type: object
      properties:
        attemptedValue:
          type: string
          readOnly: true
        culture:
          type: string
          readOnly: true
        rawValue:
          type: object
          properties: {}
          readOnly: true
    ModelError:
      type: object
      properties:
        exception:
          type: object
          properties: {}
          readOnly: true
        errorMessage:
          type: string
          readOnly: true
    ApiPromotionModel:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        promotionId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        externalId:
          type: string
        type:
          type: string
        name:
          type: string
        expiresOn:
          type: string
          format: date-time
        heading:
          type: string
        description:
          type: string
        redeemed:
          type: boolean
        redeemedOn:
          type: string
          format: date-time
        imageUrl:
          type: string
        link:
          type: string
        redemptionChannels:
          type: array
          items:
            $ref: '#/components/schemas/ApiPromotionRedemptionChannelModel'
    AnyValue:
      type: object
      description: "Can be anything: string, number, array, object, etc. (except `null`).\
        \ See specific API for details"
      example: ""
    ApiPromotionRedemptionChannelModel:
      type: object
      properties:
        type:
          type: string
          enum:
          - POS
          - ECOM
          - OTHER
        valueType:
          type: string
          enum:
          - PERCENT
          - MONEY
          - EXTERNALOFFER
          - MANUAL
          - SWIPE
        localValues:
          type: array
          items:
            required:
            - amount
            - currency
            type: object
            properties:
              amount:
                type: number
                format: double
              currency:
                type: string
            example:
              amount: 123.45
              currency: EUR
        instruction:
          type: string
    AssignPromotionModel:
      required:
      - contactId
      - promotionId
      type: object
      properties:
        contactId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        promotionId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
    RedeemBodyModel:
      type: object
      properties:
        redemptionChannel:
          type: string
    PagedResultOfAllRewardVoucherModel:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/AllRewardVoucherModel'
        totalCount:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
        count:
          type: integer
          format: int32
    AllRewardVoucherModel:
      type: object
      properties:
        redeemedOn:
          type: string
          format: date-time
        redeemed:
          type: boolean
        expiresOn:
          type: string
          format: date-time
        id:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        voucherNumber:
          type: string
        name:
          type: string
        value:
          required:
          - amount
          - currency
          type: object
          properties:
            amount:
              type: number
              format: double
            currency:
              type: string
          example:
            amount: 123.45
            currency: EUR
        localValues:
          type: array
          items:
            required:
            - amount
            - currency
            type: object
            properties:
              amount:
                type: number
                format: double
              currency:
                type: string
            example:
              amount: 123.45
              currency: EUR
        points:
          type: number
          format: double
    PagedResultOfRedeemedRewardVoucherModel:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/RedeemedRewardVoucherModel'
        totalCount:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
        count:
          type: integer
          format: int32
    RedeemedRewardVoucherModel:
      type: object
      properties:
        redeemedOn:
          type: string
          format: date-time
        id:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        voucherNumber:
          type: string
        name:
          type: string
        value:
          required:
          - amount
          - currency
          type: object
          properties:
            amount:
              type: number
              format: double
            currency:
              type: string
          example:
            amount: 123.45
            currency: EUR
        localValues:
          type: array
          items:
            required:
            - amount
            - currency
            type: object
            properties:
              amount:
                type: number
                format: double
              currency:
                type: string
            example:
              amount: 123.45
              currency: EUR
        points:
          type: number
          format: double
    PagedResultOfAvailableRewardVoucherModel:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/AvailableRewardVoucherModel'
        totalCount:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
        count:
          type: integer
          format: int32
    AvailableRewardVoucherModel:
      type: object
      properties:
        expiresOn:
          type: string
          format: date-time
        id:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        voucherNumber:
          type: string
        name:
          type: string
        value:
          required:
          - amount
          - currency
          type: object
          properties:
            amount:
              type: number
              format: double
            currency:
              type: string
          example:
            amount: 123.45
            currency: EUR
        localValues:
          type: array
          items:
            required:
            - amount
            - currency
            type: object
            properties:
              amount:
                type: number
                format: double
              currency:
                type: string
            example:
              amount: 123.45
              currency: EUR
        points:
          type: number
          format: double
    ReactivatedRewardVoucherModel:
      type: object
      properties:
        reactivationCount:
          type: integer
          format: int32
        id:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        voucherNumber:
          type: string
        name:
          type: string
        value:
          required:
          - amount
          - currency
          type: object
          properties:
            amount:
              type: number
              format: double
            currency:
              type: string
          example:
            amount: 123.45
            currency: EUR
        localValues:
          type: array
          items:
            required:
            - amount
            - currency
            type: object
            properties:
              amount:
                type: number
                format: double
              currency:
                type: string
            example:
              amount: 123.45
              currency: EUR
        points:
          type: number
          format: double
    SendSmsRequest:
      type: object
      properties:
        description:
          type: string
        invoiceReference:
          type: string
        message:
          type: string
        phoneNumbers:
          type: array
          items:
            type: string
        sender:
          type: string
    SendSmsResponse:
      type: object
      properties:
        success:
          type: boolean
    ApiStore:
      type: object
      properties:
        name:
          type: string
        city:
          type: string
        countryCode:
          type: string
        county:
          type: string
        email:
          type: string
        adjacentZipCodes:
          type: string
        emailUnsubscribeText:
          type: string
        emailViewOnlineText:
          type: string
        externalId:
          type: string
        footerHtml:
          type: string
        headerHtml:
          type: string
        homepage:
          type: string
        phoneNumber:
          type: string
        region:
          type: string
        senderAddress:
          type: string
        senderName:
          type: string
        street:
          type: string
        type:
          type: string
        zipCode:
          type: string
        active:
          type: boolean
        timeZone:
          type: string
      example:
        name: string
        city: string
        countryCode: string
        county: string
        email: string
        adjacentZipCodes: string
        emailUnsubscribeText: string
        emailViewOnlineText: string
        externalId: string
        footerHtml: string
        headerHtml: string
        homepage: string
        phoneNumber: string
        region: string
        senderAddress: string
        senderName: string
        street: string
        type: string
        zipCode: string
        active: boolean
        timeZone: string
        nps: string
        member: string
        reward: string
        contact: string
        btext: string
        ftext: string
        membercontent: string
        locale: string
    IdName:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        name:
          type: string
    Cart:
      type: object
      properties:
        cartReference:
          type: string
          description: Unique cart reference
        time:
          type: string
          description: Last change date
          format: date-time
        contactId:
          type: string
          description: Contact identifier (GUID or short GUID)
        sessionId:
          type: string
          description: Unique identifier of the session
        language:
          type: string
          description: Language
        url:
          type: string
          description: Url to cart
        items:
          type: array
          description: Cart items
          items:
            $ref: '#/components/schemas/CartItem'
      description: Cart model
      example:
        CartReference: 70a363f6-4540-4ab3-a314-dc6e91797a60
        Time: 2025-07-28T18:22:18.840034+00:00
        ContactId: 31603e36-ef01-4a28-9f86-7046c8e119a3
        SessionId: 0b071455-2b18-4245-98c0-628b9c15d259
        Language: sv-SE
        Url: https://www.voyado.com
        Items:
        - Sku: "7322514826390"
          Quantity: 2
        - Sku: "5713729040206"
          Quantity: 4
    CartItem:
      type: object
      properties:
        sku:
          type: string
          description: Stock keeping unit (article number)
        quantity:
          type: integer
          description: Quantity
          format: int32
      description: Cart item model
    InvalidModelStateResult:
      type: object
      properties:
        modelState:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ModelState'
          readOnly: true
        includeErrorDetail:
          type: boolean
          readOnly: true
        contentNegotiator:
          $ref: '#/components/schemas/IContentNegotiator'
        request:
          type: object
          properties: {}
          readOnly: true
        formatters:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/MediaTypeFormatter'
    IContentNegotiator:
      type: object
    MediaTypeFormatter:
      type: object
      properties:
        supportedMediaTypes:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/MediaTypeHeaderValue'
        supportedEncodings:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/Encoding'
        mediaTypeMappings:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/MediaTypeMapping'
        requiredMemberSelector:
          $ref: '#/components/schemas/IRequiredMemberSelector'
    MediaTypeHeaderValue:
      type: object
      properties:
        charSet:
          type: string
        parameters:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/NameValueHeaderValue'
        mediaType:
          type: string
    Encoding:
      type: object
      properties:
        bodyName:
          type: string
          readOnly: true
        encodingName:
          type: string
          readOnly: true
        headerName:
          type: string
          readOnly: true
        webName:
          type: string
          readOnly: true
        windowsCodePage:
          type: integer
          format: int32
          readOnly: true
        isBrowserDisplay:
          type: boolean
          readOnly: true
        isBrowserSave:
          type: boolean
          readOnly: true
        isMailNewsDisplay:
          type: boolean
          readOnly: true
        isMailNewsSave:
          type: boolean
          readOnly: true
        isSingleByte:
          type: boolean
          readOnly: true
        encoderFallback:
          $ref: '#/components/schemas/EncoderFallback'
        decoderFallback:
          $ref: '#/components/schemas/DecoderFallback'
        isReadOnly:
          type: boolean
          readOnly: true
        codePage:
          type: integer
          format: int32
          readOnly: true
    MediaTypeMapping:
      type: object
      properties:
        mediaType:
          $ref: '#/components/schemas/MediaTypeHeaderValue'
    IRequiredMemberSelector:
      type: object
    NameValueHeaderValue:
      type: object
      properties:
        name:
          type: string
          readOnly: true
        value:
          type: string
    EncoderFallback:
      type: object
      properties:
        maxCharCount:
          type: integer
          format: int32
          readOnly: true
    DecoderFallback:
      type: object
      properties:
        maxCharCount:
          type: integer
          format: int32
          readOnly: true
    ProductView:
      type: object
      properties:
        itemId:
          type: string
        category:
          type: string
        time:
          type: string
          format: date-time
        contactId:
          type: string
        sessionId:
          type: string
        newSession:
          type: boolean
        language:
          type: string
        url:
          type: string
        externalReferrer:
          type: string
        utm:
          type: array
          items:
            $ref: '#/components/schemas/Utm'
      example:
        ItemId: 123XYZ
        Category: Women / Sweaters / Cardigan
        Time: 2025-07-28T18:22:18.8556589+00:00
        ContactId: 76ea6a12-767c-4dc3-87f1-2f9cdb4d67af
        SessionId: 2b3c336b-8fda-445c-bd2b-19acf74be98f
        NewSession: false
        Language: sv-SE
        Url: https://www.voyado.com?sku=eu901-011-v10
        ExternalReferrer: https://www.google.com
        Utm:
        - key: utm_campaign
          value: my-campaign
        - key: utm_medium
          value: xyz
    Utm:
      type: object
      properties:
        key:
          type: string
        value:
          type: string
    PagedResultOfTransactionItemWithArticlesResponse:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/TransactionItemWithArticlesResponse'
        totalCount:
          type: integer
          format: int32
        offset:
          type: integer
          format: int32
        count:
          type: integer
          format: int32
    TransactionItemWithArticlesResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
          readOnly: true
          example: 00000000-0000-0000-0000-000000000000
        externalId:
          type: string
        transactionNumber:
          type: string
          readOnly: true
        createdDate:
          type: string
          format: date-time
          readOnly: true
        storeName:
          type: string
          readOnly: true
        numberOfItems:
          type: integer
          format: int32
          readOnly: true
        netPriceSum:
          type: number
          format: double
          readOnly: true
        localNetPriceSum:
          type: number
          format: double
          readOnly: true
        localCurrency:
          type: string
          readOnly: true
        groupCurrency:
          type: string
          readOnly: true
        storeType:
          type: string
          readOnly: true
        lineItems:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/TransactionLineItemWithArticleResponse'
    TransactionLineItemWithArticleResponse:
      type: object
      properties:
        invoiceItemId:
          type: string
          format: uuid
          example: 00000000-0000-0000-0000-000000000000
        type:
          type: string
        isReturned:
          type: boolean
        quantity:
          type: integer
          format: int32
        price:
          type: number
          format: double
        netPrice:
          type: number
          format: double
        localPrice:
          type: number
          format: double
        article:
          $ref: '#/components/schemas/ArticleResponse'
    ArticleResponse:
      type: object
      properties:
        name:
          type: string
        number:
          type: string
        sku:
          type: string
        itemNumber:
          type: string
        brand:
          type: string
        color:
          type: string
        size:
          type: string
        mainCategory:
          type: string
        productCategory:
          type: string
        subCategory:
          type: string
        ageGroup:
          type: string
        gender:
          type: string
        description:
          type: string
        season:
          type: string
        gtin:
          type: string
    ImportReceiptRequest:
      required:
      - contact
      - createdDate
      - currency
      - items
      - paymentMethods
      - receiptNumber
      - storeExternalId
      - totalGrossPrice
      - uniqueReceiptId
      type: object
      properties:
        contact:
          $ref: '#/components/schemas/ReceiptContactRequest'
        uniqueReceiptId:
          type: string
        receiptNumber:
          type: string
        createdDate:
          type: string
        storeExternalId:
          type: string
        currency:
          type: string
        exchangeRateToGroupCurrency:
          minimum: 0
          type: number
          format: double
        totalGrossPrice:
          type: number
          format: double
        paymentMethods:
          type: array
          items:
            $ref: '#/components/schemas/ReceiptPaymentMethodRequest'
        items:
          type: array
          items:
            $ref: '#/components/schemas/ReceiptItemRequest'
        usedRewardVouchers:
          type: array
          items:
            $ref: '#/components/schemas/ReceiptUsedRewardVoucherRequest'
        usedPromotions:
          type: array
          items:
            $ref: '#/components/schemas/ReceiptUsedPromotionRequest'
        extraData:
          type: array
          items:
            $ref: '#/components/schemas/ReceiptExtraDataItemRequest'
      example:
        contact:
          matchKey: someone@example.com
          matchKeyType: Email
          contactType: member
        uniqueReceiptId: "2018468464468"
        receiptNumber: "468464468"
        createdDate: 2025-07-28T20:22:18.8712848+02:00
        storeExternalId: "010"
        currency: EUR
        exchangeRateToGroupCurrency: 8.7
        totalGrossPrice: 75
        paymentMethods:
        - type: card
          description: Debit Card
          value: 75
          extraData:
          - name: cardNumber
            value: 4545*
          - name: cardIssuer
            value: The Bank
        items:
        - type: PURCHASE
          sku: "21345589"
          quantity: 2
          packQuantity: 150
          grossPaidPrice: 75
          taxAmount: 15
          taxPercent: 25
          extraData:
          - name: category
            value: category_Value
          - name: brand
            value: brand_Value
          - name: color
            value: color_Value
          - name: discountType
            value: discountType_Value
          - name: subCategory
            value: subCategory_Value
          - name: rewardsBonus
            value: rewardsBonus_Value
          - name: discounted
            value: discounted_Value
          - name: pointsRewarded
            value: pointsRewarded_Value
          - name: paymentMethodd
            value: paymentMethodd_Value
          - name: shoppingDays
            value: shoppingDays_Value
          articleNumber: ER-358132134
          articleName: T-shirt
          articleGroup: Shirts
          marginPercent: 29.7
          awardsPoints: true
          discounts:
          - value: -30
            type: Sale
            description: 30% sale
          - value: -25
            type: Voucher
            description: Voucher 25 SEK
        usedRewardVouchers:
        - voucherNumber: "2342"
        usedPromotions:
        - couponId: d9ef022d-9579-4baa-970c-0746f9c7f123
        - promotionId: 6374dfaa-31c5-4e34-bb88-7ccfc5fe8bf7
        extraData: []
    ReceiptContactRequest:
      required:
      - matchKey
      - matchKeyType
      type: object
      properties:
        matchKey:
          type: string
        matchKeyType:
          type: string
          enum:
          - Email
          - SocialSecurityNumber
          - MobilePhone
          - CardId
          - ExternalId
          - MemberNumber
          - ContactId
          - MemberNumberWithCardNumberAsFallback
        contactType:
          type: string
    ReceiptPaymentMethodRequest:
      required:
      - type
      - value
      type: object
      properties:
        type:
          type: string
        description:
          type: string
        value:
          type: number
          format: double
        extraData:
          type: array
          items:
            $ref: '#/components/schemas/ReceiptExtraDataItemRequest'
    ReceiptItemRequest:
      required:
      - articleName
      - articleNumber
      - grossPaidPrice
      - quantity
      - sku
      - taxAmount
      - taxPercent
      - type
      type: object
      properties:
        type:
          type: string
          enum:
          - PURCHASE
          - RETURN
          - ADJUSTMENT
        sku:
          type: string
        quantity:
          type: integer
          format: int32
        packQuantity:
          type: number
          format: double
        grossPaidPrice:
          type: number
          format: double
        taxAmount:
          type: number
          format: double
        taxPercent:
          type: number
          format: double
        extraData:
          type: array
          items:
            $ref: '#/components/schemas/ReceiptExtraDataItemRequest'
        articleNumber:
          type: string
        articleName:
          type: string
        articleGroup:
          type: string
        marginPercent:
          type: number
          format: double
        awardsPoints:
          type: boolean
        discounts:
          type: array
          items:
            $ref: '#/components/schemas/ReceiptItemDiscountRequest'
    ReceiptUsedRewardVoucherRequest:
      type: object
      properties:
        voucherNumber:
          type: string
    ReceiptUsedPromotionRequest:
      type: object
      properties:
        promotionId:
          type: string
        couponId:
          type: string
    ReceiptExtraDataItemRequest:
      type: object
      properties:
        name:
          type: string
        value:
          type: string
    ReceiptItemDiscountRequest:
      required:
      - value
      type: object
      properties:
        value:
          type: number
          format: double
        type:
          type: string
        description:
          type: string
    BadRequestResult:
      type: object
      properties:
        request:
          type: object
          properties: {}
          readOnly: true
  securitySchemes:
    apikey:
      type: apiKey
      description: API Key Authentication
      name: apikey
      in: header
x-original-swagger-version: "2.0"
