openapi: 3.1.0
info:
  title: PerfectGym Next API
  description: |-
    * Appointment, bookable appointment and slots operations
    * Class and slots operations
    * Cross studio operations
    * Get customers and contracts
    * Retrieve customer accounting details
    * Retrieve customer communication details
    * Get device information
    * Debt collection operations
    * Manage membership contracts
    * Get studio information
    * Get trial offers information
servers:
  - url: https://open-api-demo.open-api.perfectgym.com
    description: Demo tenant
security:
  - ApiKeyAuth: []
tags:
  - name: Appointments
    description: Appointment, bookable appointment and slots operations
  - name: Classes
    description: Class and slots operations
  - name: Cross Studio
    description: Cross studio operations
  - name: Customers
    description: Get customers and contracts
  - name: Customers Account
    description: Retrieve customer accounting details
  - name: Customers Communication
    description: Retrieve customer communication details
  - name: Customers Self-service
  - name: Devices
    description: Get device information
  - name: Finance
    description: Debt collection operations
  - name: Membership Self-service
    description: Manage membership contracts
  - name: Studios
    description: Get studio information
  - name: Trial Offers
    description: Get trial offers information
paths:
  /v1/customers/{customerId}/self-service/contact-data:
    get:
      tags:
        - Customers Self-service
      summary: Get customer's contact data
      description: >-
        Required Scopes: `CUSTOMER_SELF_SERVICE_READ`


        Returns customer current contact data along with requested change of
        this data
      operationId: getCustomerContactData
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/OpenApiV1CustomerDataDtoCustomerContactData
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 1
    post:
      tags:
        - Customers Self-service
      summary: Create contact data amendment
      description: |-
        Required Scopes: `CUSTOMER_SELF_SERVICE_WRITE`

        Creates request for contact data amendment for specified customerId
      operationId: createCustomerContactDataAmendment
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Requested changes for contact data
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerContactData'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/OpenApiV1CustomerDataPendingAmendmentDtoCustomerContactData
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 2
  /v1/communications/{customerId}/threads:
    post:
      tags:
        - Customers Communication
      summary: Create communication thread
      description: |-
        Required Scopes: `COMMUNICATION_WRITE`

        Creates new thread with a new communication for a customer
      operationId: createCommunicationInNewCommunicationThread
      parameters:
        - name: customerId
          in: path
          description: The ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommunicationThreadRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommunicationThreadResponse'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 1
  /v1/trial-offers/bookable-trial-offers/classes:
    get:
      tags:
        - Trial Offers
      summary: Get bookable trial offer classes
      description: |-
        Required Scopes: `TRIAL_OFFER_READ`

        Get pageable bookable trial offer classes within the next year
      operationId: getBookableTrialOfferClasses
      parameters:
        - name: offset
          in: query
          description: Offset from last request
          required: false
          schema:
            type: string
            default: '0'
        - name: sliceSize
          in: query
          description: Desired size of data chunk
          required: false
          schema:
            type: integer
            format: int32
            default: 50
            maximum: 100
            minimum: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrialOfferClassesSlicedResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 1
  /v1/studios/utilization:
    get:
      tags:
        - Studios
      summary: Get studio utilization
      description: >-
        Required Scopes: `STUDIO_READ`


        Returns information about current checkin count and maximum studio
        capacity
      operationId: getUtilization
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StudioUtilization'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 1
  /v1/memberships/{customerId}/self-service/contract-data:
    get:
      tags:
        - Membership Self-service
      summary: Get customer's contract data
      description: |-
        Required Scopes: `MEMBERSHIP_SELF_SERVICE_READ`

        Returns customer's current contract data for memberships
      operationId: getContractData
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MembershipSelfServiceContractData'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 1
  /v1/devices:
    get:
      tags:
        - Devices
      summary: Get devices
      description: |-
        Required Scopes: `DEVICE_READ`

        Returns devices for a studio
      operationId: getDevices
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Device'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 1
  /v1/customers:
    get:
      tags:
        - Customers
      summary: Get customers
      description: |-
        Required Scopes: `CUSTOMER_READ`

        Returns all customers from studio in expected slices
      operationId: getCustomers
      parameters:
        - name: cardNumberFormat
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/CardNumberFormat'
            default: DECIMAL
        - name: lastOffsetId
          in: query
          description: Last ID of customer from last chunk
          required: false
          deprecated: true
          schema:
            type: integer
            format: int64
        - name: offset
          in: query
          description: Offset from last request
          required: false
          schema:
            type: string
        - name: sliceSize
          in: query
          description: Desired size of data chunk
          required: false
          schema:
            type: integer
            format: int32
            default: 100
            maximum: 500
            minimum: 50
        - name: customerStatus
          in: query
          description: Defines status of returned customers
          required: false
          schema:
            type: string
            default: MEMBER
            enum:
              - MEMBER
              - PROSPECT
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerSlicedResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 1
  /v1/customers/{customerId}/account/balances:
    get:
      tags:
        - Customers Account
      summary: Get customer's account balance data
      description: |-
        Required Scopes: `CUSTOMER_ACCOUNT_READ`

        Returns customer's current account balance data
      operationId: getCustomersAccountBalanceData
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerAccountBalance'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 1
  /v1/cross-studio/customers/by:
    get:
      tags:
        - Cross Studio
      summary: Get customer by
      description: >-
        Required Scopes: `CUSTOMER_READ`


        Returns customer by one of the given parameters from all studios with
        activated partner integration
      operationId: getCrossStudioCustomerBy
      parameters:
        - name: cardNumber
          in: query
          description: Card number to identify the customer
          required: false
          schema:
            type: string
        - name: cardNumberFormat
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/CardNumberFormat'
        - name: debtorId
          in: query
          description: Unique ID of the debtor
          required: false
          schema:
            type: string
        - name: qrCodeUuid
          in: query
          description: QR code UUID to identify the customer
          required: false
          deprecated: true
          schema:
            type: string
            format: uuid
        - name: barcode
          in: query
          description: Barcode to identify the customer
          required: false
          schema:
            type: string
        - name: customerNumber
          in: query
          description: Customer number to identify the customer
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 1
  /v1/classes:
    get:
      tags:
        - Classes
      summary: Get classes
      description: >-
        Required Scopes: `CLASSES_READ`


        Returns classes with at least one scheduled appointment for the period
        of one day before to fourteen days ahead
      operationId: getActiveClasses
      parameters:
        - name: offset
          in: query
          description: Offset from last request
          required: false
          schema:
            type: string
            default: '0'
        - name: sliceSize
          in: query
          description: Desired size of data chunk
          required: false
          schema:
            type: integer
            format: int32
            default: 50
            maximum: 100
            minimum: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassSlicedResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 1
  /v1/appointments/bookable:
    get:
      tags:
        - Appointments
      summary: Get bookable appointments
      description: |-
        Required Scopes: `BOOKABLE_APPOINTMENTS_READ`

        Returns bookable appointments
      operationId: getBookableAppointments
      parameters:
        - name: offset
          in: query
          description: Offset from last request
          required: false
          schema:
            type: string
            default: '0'
        - name: sliceSize
          in: query
          description: Desired size of data chunk
          required: false
          schema:
            type: integer
            format: int32
            default: 50
            maximum: 100
            minimum: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookableAppointmentSlicedResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 1
  /v1/devices/{deviceId}/activate:
    put:
      tags:
        - Devices
      summary: Activate device
      description: |-
        Required Scopes: `DEVICE_WRITE`

        Activates device and returns token
      operationId: activateDevice
      parameters:
        - name: deviceId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceActivationResponse'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 2
  /v1/communications/{customerId}/threads/{threadId}:
    put:
      tags:
        - Customers Communication
      summary: Update communication thread
      description: >-
        Required Scopes: `COMMUNICATION_WRITE`


        Adds new communication for a customer to an existing communication
        thread and updates the thread
      operationId: createCommunicationInExistingCommunicationThread
      parameters:
        - name: customerId
          in: path
          description: The ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: threadId
          in: path
          description: The ID of the communication thread
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommunicationThreadRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommunicationThreadResponse'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 2
  /v1/memberships/{customerId}/self-service/ordinary-contract-cancelation:
    post:
      tags:
        - Membership Self-service
      summary: Create contract cancelation amendment
      description: |-
        Required Scopes: `MEMBERSHIP_SELF_SERVICE_WRITE`

        Creates contract cancelation amendment for specified contract id
      operationId: createContractCancelationAmendment
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/MembershipSelfServiceMainContractCancelation
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VoidResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 2
  /v1/trial-offers/bookable-trial-offers/appointments/bookable:
    get:
      tags:
        - Trial Offers
      summary: Get bookable trial offer appointments
      description: |-
        Required Scopes: `TRIAL_OFFER_READ`

        Get pageable bookable trial offer appointments within the next year
      operationId: getBookableTrialOfferAppointments
      parameters:
        - name: offset
          in: query
          description: Offset from last request
          required: false
          schema:
            type: string
            default: '0'
        - name: sliceSize
          in: query
          description: Desired size of data chunk
          required: false
          schema:
            type: integer
            format: int32
            default: 50
            maximum: 100
            minimum: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/BookableTrialOfferAppointmentsSlicedResult
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 2
  /v1/studios/information:
    get:
      tags:
        - Studios
      summary: Get studio general information
      description: |-
        Required Scopes: `STUDIO_READ`

        Returns studio's general information for authenticated subject
      operationId: getStudioInformation
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StudioInformation'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 2
  /v1/customers/{customerId}/activities/checkins:
    get:
      tags:
        - Customers
      summary: Get customer's checkin history
      description: >-
        Required Scopes: `CHECKIN_READ`


        Returns a list of studio checkins of the customer for a specific time
        span (default is one month from today) in expected slices
      operationId: getCustomersCheckinHistory
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: fromDate
          in: query
          description: The from date of the time span
          required: false
          schema:
            type: string
            format: date
        - name: toDate
          in: query
          description: >-
            The to date of the time span, should not be greater than 365 days
            from the start date.
          required: false
          schema:
            type: string
            format: date
        - name: sliceSize
          in: query
          description: Desired size of data chunk
          required: false
          schema:
            type: integer
            format: int32
            default: 10
            maximum: 50
            minimum: 1
        - name: offset
          in: query
          required: false
          schema:
            type: string
            default: '0'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerCheckinSlicedResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 2
  /v1/customers/{customerId}/account/transactions:
    get:
      tags:
        - Customers Account
      summary: Get customer's account past transactions in slices
      description: |-
        Required Scopes: `CUSTOMER_ACCOUNT_READ`

        Returns customer's account transaction data for the past excluding today
      operationId: getCustomersAccountTransactionData
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: sliceSize
          in: query
          description: Desired size of data chunk
          required: false
          schema:
            type: integer
            format: int32
            default: 10
            maximum: 50
            minimum: 1
        - name: offset
          in: query
          required: false
          schema:
            type: string
            default: '0'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingEntrySlicedResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 2
  /v1/cross-studio/customers/{customerId}:
    get:
      tags:
        - Cross Studio
      summary: Get customer by id
      description: >-
        Required Scopes: `CUSTOMER_READ`


        Returns customer by given id from all studios with activated partner
        integration
      operationId: getCrossStudioCustomerById
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: cardNumberFormat
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/CardNumberFormat'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 2
  /v1/classes/{classId}:
    get:
      tags:
        - Classes
      summary: Get class by id
      description: |-
        Required Scopes: `CLASSES_READ`

        Returns a class for specified id
      operationId: getClassById
      parameters:
        - name: classId
          in: path
          description: Id of the class.
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Class'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 2
  /v1/appointments/bookable/{bookableAppointmentId}:
    get:
      tags:
        - Appointments
      summary: Get bookable appointment
      description: |-
        Required Scopes: `BOOKABLE_APPOINTMENTS_READ`

        Returns bookable appointment
      operationId: getBookableAppointment
      parameters:
        - name: bookableAppointmentId
          in: path
          description: Id of the bookable appointment
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookableAppointment'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 2
  /v1/communications/{customerId}/communication-preferences:
    get:
      tags:
        - Customers Communication
      summary: Get communication preferences
      description: |-
        Required Scopes: `COMMUNICATION_PREFERENCES_READ`

        Get communication preferences for a customer
      operationId: getCommunicationPreferences
      parameters:
        - name: customerId
          in: path
          description: The ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CommunicationPreference'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 3
    put:
      tags:
        - Customers Communication
      summary: Update communication preferences
      description: |-
        Required Scopes: `COMMUNICATION_PREFERENCES_WRITE`

        Update communication preferences for a customer
      operationId: updateCommunicationPreferences
      parameters:
        - name: customerId
          in: path
          description: The ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CommunicationPreference'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CommunicationPreference'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 4
  /v1/studios/confirmActivation:
    post:
      tags:
        - Studios
      summary: Confirm contract activation
      description: >-
        If your integration has webhook access, then you need to activate
        webhook events via this endpoint
      operationId: confirmActivation
      responses:
        '200':
          description: OK
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 3
  /v1/customers/{customerId}/self-service/address-data:
    get:
      tags:
        - Customers Self-service
      summary: Get customer's address data
      description: >-
        Required Scopes: `CUSTOMER_SELF_SERVICE_READ`


        Returns customer current address data along with requested change of
        this data
      operationId: getCustomerAddressData
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/OpenApiV1CustomerDataDtoCustomerAddressData
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 3
    post:
      tags:
        - Customers Self-service
      summary: Create address data amendment
      description: |-
        Required Scopes: `CUSTOMER_SELF_SERVICE_WRITE`

        Creates request for address data amendment for specified customerId
      operationId: createCustomerAddressDataAmendment
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Requested changes for address data
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerAddressData'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/OpenApiV1CustomerDataPendingAmendmentDtoCustomerAddressData
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 4
  /v1/cross-studio/customers/search:
    post:
      tags:
        - Cross Studio
      summary: Search customers
      description: >-
        Required Scopes: `CUSTOMER_READ`


        Returns all customers from all studios with activated partner
        integration by given criteria
      operationId: searchCrossStudioCustomers
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerSearchRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Customer'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 3
  /v1/trial-offers/config/{configId}:
    get:
      tags:
        - Trial Offers
      summary: Get trial offer config
      description: |-
        Required Scopes: `TRIAL_OFFER_READ`

        Get trial offer config by config id
      operationId: getTrialOfferConfig
      parameters:
        - name: configId
          in: path
          description: Id of the trial offer configuration
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrialOfferConfig'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 3
  /v1/memberships/self-service/contract-cancelation-reasons:
    get:
      tags:
        - Membership Self-service
      summary: Get studio's contract cancelation reason data
      description: |-
        Required Scopes: `MEMBERSHIP_SELF_SERVICE_READ`

        Get available contract cancelation reasons for the studio
      operationId: getContractCancelationReasonData
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ContractCancelationReason'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 3
  /v1/customers/{customerId}:
    get:
      tags:
        - Customers
      summary: Get customer by id
      description: |-
        Required Scopes: `CUSTOMER_READ`

        Returns customer by given id
      operationId: getCustomerById
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: cardNumberFormat
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/CardNumberFormat'
            default: DECIMAL
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 3
  /v1/customers/{customerId}/account/transactions/upcoming:
    get:
      tags:
        - Customers Account
      summary: >-
        Get customer's account upcoming transactions in slices within the next
        year
      description: |-
        Required Scopes: `CUSTOMER_ACCOUNT_READ`

        Returns customer's account upcoming transaction data including today
      operationId: getCustomersAccountUpcomingData
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: sliceSize
          in: query
          description: Desired size of data chunk
          required: false
          schema:
            type: integer
            format: int32
            default: 10
            maximum: 50
            minimum: 1
        - name: offset
          in: query
          required: false
          schema:
            type: string
            default: '0'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookingEntrySlicedResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 3
  /v1/classes/{classId}/slots:
    get:
      tags:
        - Classes
      summary: Get class slots
      description: >-
        Required Scopes: `CLASSES_READ`


        Returns class slots for specified class id and the period of one day
        before to fourteen days ahead
      operationId: getClassSlots
      parameters:
        - name: classId
          in: path
          description: Id of the class.
          required: true
          schema:
            type: integer
            format: int64
        - name: offset
          in: query
          description: Offset from last request
          required: false
          schema:
            default: '0'
        - name: sliceSize
          in: query
          description: Desired size of data chunk
          required: false
          schema:
            type: integer
            format: int32
            default: 50
            maximum: 100
            minimum: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassSlotSlicedResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 3
  /v1/appointments/bookable/{bookableAppointmentId}/slots:
    get:
      tags:
        - Appointments
      summary: Get bookable appointment slots
      description: |-
        Required Scopes: `BOOKABLE_APPOINTMENTS_READ`

        Returns bookable appointment slots
      operationId: getBookableAppointmentSlots
      parameters:
        - name: bookableAppointmentId
          in: path
          description: Id of the bookable appointment
          required: true
          schema:
            type: integer
            format: int64
        - name: customerId
          in: query
          description: Id of the customer
          required: false
          schema:
            type: integer
            format: int64
        - name: daysAhead
          in: query
          description: Days from now on to look ahead
          required: false
          schema:
            type: integer
            format: int32
            default: 1
            maximum: 6
            minimum: 1
        - name: slotWindowStartDate
          in: query
          description: >-
            Bookable appointment slots are calculated in the window from
            slotWindowStartDate to (slotWindowStartDate + daysAhead)
          required: false
          schema:
            type: string
            format: date
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BookableAppointmentSlot'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 3
  /v1/trial-offers/lead/validate:
    post:
      tags:
        - Trial Offers
      summary: Validate for lead customer creation
      description: |-
        Required Scopes: `TRIAL_OFFER_READ`

        Validate for the creation of a new lead customer
      operationId: validateForLeadCustomerCreation
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TrialOfferLeadCustomerCreationRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/TrialOfferLeadCustomerCreationValidationResult
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 4
  /v1/memberships/{customerId}/self-service/withdraw-ordinary-contract-cancelation/{contractId}:
    post:
      tags:
        - Membership Self-service
      summary: withdraw cancelation of contract
      description: >-
        Required Scopes: `MEMBERSHIP_SELF_SERVICE_WRITE`


        Withdraws contract cancelation amendment or reverts cancelation for
        specific contract id
      operationId: withdrawContractCancelation
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: contractId
          in: path
          description: Unique ID of the contract
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VoidResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 4
  /v1/appointments/bookable/validate:
    post:
      tags:
        - Appointments
      summary: Validate for appointment booking
      description: |-
        Required Scopes: `BOOKABLE_APPOINTMENTS_READ`

        Returns validation result
      operationId: validateForAppointmentBooking
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppointmentBookingRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentBookingValidationResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 4
  /v1/customers/by:
    get:
      tags:
        - Customers
      summary: Get customer by
      description: |-
        Required Scopes: `CUSTOMER_READ`

        Returns customer by one of the given parameters
      operationId: getCustomerBy
      parameters:
        - name: cardNumber
          in: query
          description: Card number to identify the customer
          required: false
          schema:
            type: string
        - name: cardNumberFormat
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/CardNumberFormat'
            default: DECIMAL
        - name: debtorId
          in: query
          description: Unique ID of the debtor
          required: false
          schema:
            type: string
        - name: qrCodeUuid
          in: query
          description: QR code UUID to identify the customer
          required: false
          deprecated: true
          schema:
            type: string
            format: uuid
        - name: barcode
          in: query
          description: Barcode to identify the customer
          required: false
          schema:
            type: string
        - name: customerNumber
          in: query
          description: Customer number to identify the customer
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 4
  /v1/cross-studio/customers/{customerId}/activities/checkins:
    get:
      tags:
        - Cross Studio
      summary: Get customer's checkin history
      description: >-
        Required Scopes: `CHECKIN_READ`


        Returns a list of studio checkins of the customer from all studios with
        activated partner integration for a specific time span (default is one
        month from today) in expected slices
      operationId: getCrossStudioCustomersCheckinHistory
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: fromDate
          in: query
          description: The from date of the time span
          required: false
          schema:
            type: string
            format: date
        - name: toDate
          in: query
          description: >-
            The to date of the time span, should not be greater than 365 days
            from the start date.
          required: false
          schema:
            type: string
            format: date
        - name: sliceSize
          in: query
          description: Desired size of data chunk
          required: false
          schema:
            type: integer
            format: int32
            default: 10
            maximum: 50
            minimum: 1
        - name: offset
          in: query
          required: false
          schema:
            type: string
            default: '0'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerCheckinSlicedResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 4
  /v1/classes/{classId}/slots/{classSlotId}:
    get:
      tags:
        - Classes
      summary: Get class slot by id
      description: |-
        Required Scopes: `CLASSES_READ`

        Returns class slots for specified class slot id
      operationId: getClassSlotById
      parameters:
        - name: classId
          in: path
          description: Id of the class.
          required: true
          schema:
            type: integer
            format: int64
        - name: classSlotId
          in: path
          description: Unique ID of the class slot
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassSlot'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 4
  /v1/trial-offers/lead/create:
    post:
      tags:
        - Trial Offers
      summary: Create a lead customer
      description: |-
        Required Scopes: `TRIAL_OFFER_WRITE`

        Create a lead customer
      operationId: createLeadCustomer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TrialOfferLeadCustomerCreationRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrialOfferLeadCustomerCreationResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 5
  /v1/customers/{customerId}/self-service/master-data:
    get:
      tags:
        - Customers Self-service
      summary: Get customer's master data
      description: >-
        Required Scopes: `CUSTOMER_SELF_SERVICE_READ`


        Returns customer current master data along with requested change of this
        data
      operationId: getCustomerMasterData
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/OpenApiV1CustomerDataDtoCustomerMasterData
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 5
    post:
      tags:
        - Customers Self-service
      summary: Create master data amendment
      description: |-
        Required Scopes: `CUSTOMER_SELF_SERVICE_WRITE`

        Creates request for master data amendment for specified customerId
      operationId: createCustomerMasterDataAmendment
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Requested changes for master data
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerMasterData'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/OpenApiV1CustomerDataPendingAmendmentDtoCustomerMasterData
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 6
  /v1/customers/search:
    post:
      tags:
        - Customers
      summary: Search customers
      description: |-
        Required Scopes: `CUSTOMER_READ`

        Returns all customers from studio by given criteria
      operationId: searchCustomers
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerSearchRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Customer'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 5
  /v1/classes/booking/book:
    post:
      tags:
        - Classes
      summary: Book a class slot
      description: |-
        Required Scopes: `CLASSES_WRITE`

        Book a class slot for given customer
      operationId: bookClassSlot
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClassSlotBookingRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassSlotBookingResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 5
  /v1/appointments/booking/book:
    post:
      tags:
        - Appointments
      summary: Book an appointment booking
      description: |-
        Required Scopes: `APPOINTMENTS_WRITE`

        Book an appointment booking for given customer
      operationId: bookAppointmentBooking
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppointmentBookingRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentBookingResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 5
  /v1/memberships/{contractId}/self-service/idle-periods/config:
    get:
      tags:
        - Membership Self-service
      summary: Get the idle period configuration of the contract
      description: |-
        Required Scopes: `MEMBERSHIP_SELF_SERVICE_IDLE_PERIOD_CONFIG_READ`

        Get the idle period configuration of the contract
      operationId: getIdlePeriodConfig
      parameters:
        - name: contractId
          in: path
          description: Unique ID of the contract
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdlePeriodConfiguration'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 5
  /v1/memberships/{contractId}/self-service/idle-periods/validate:
    post:
      tags:
        - Membership Self-service
      summary: Validate an idle period request
      description: >-
        Required Scopes: `MEMBERSHIP_SELF_SERVICE_IDLE_PERIOD_READ`


        Validate if an idle period or idle period amendment can be created with
        the data from the idle period request
      operationId: validateIdlePeriodRequest
      parameters:
        - name: contractId
          in: path
          description: Unique ID of the contract
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IdlePeriodValidationRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdlePeriodValidationStatusResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 6
  /v1/classes/booking/validate:
    post:
      tags:
        - Classes
      summary: Validate class slot is bookable
      description: |-
        Required Scopes: `CLASSES_READ`

        Validate class slot is available to book for given customer
      operationId: validateClassSlot
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClassSlotBookingRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassSlotBookingValidationResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 6
  /v1/trial-offers/bookable-trial-offers/classes/{classId}/slots:
    get:
      tags:
        - Trial Offers
      summary: Get class slots for trial offers
      description: >-
        Required Scopes: `TRIAL_OFFER_READ`


        Returns class slots for trial offers for specified class id and the
        period of one day before to fourteen days ahead
      operationId: getClassSlotsForTrialOffers
      parameters:
        - name: classId
          in: path
          description: Id of the trial offer class
          required: true
          schema:
            type: integer
            format: int64
        - name: offset
          in: query
          description: Offset from last request
          required: false
          schema:
            default: '0'
        - name: sliceSize
          in: query
          description: Desired size of data chunk
          required: false
          schema:
            type: integer
            format: int32
            default: 50
            maximum: 100
            minimum: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassSlotSlicedResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 6
  /v1/customers/{customerId}/contracts:
    get:
      tags:
        - Customers
      summary: Get customer's contracts
      description: |-
        Required Scopes(any of): `CUSTOMER_CONTRACT_READ`, `CUSTOMER_READ`

        Returns customer's contracts
      operationId: getCustomersContracts
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: status
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/ContractStatus'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Contract'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 6
  /v1/customers/measurement/latest:
    get:
      tags:
        - Customers
      summary: Get customer's measurement
      description: |-
        Required Scopes(any of): `CUSTOMER_MEASUREMENT_READ`, `CUSTOMER_READ`

        Returns customer's latest measurement for specified customer.
      operationId: getCustomerMeasurement
      parameters:
        - name: cardNumber
          in: query
          description: Card number to identify the customer
          required: false
          schema:
            type: string
        - name: cardNumberFormat
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/CardNumberFormat'
            default: DECIMAL
        - name: qrCodeUuid
          in: query
          description: QR code UUID to identify the customer
          required: false
          deprecated: true
          schema:
            type: string
            format: uuid
        - name: barcode
          in: query
          description: Barcode to identify the customer
          required: false
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Measurement'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 6
  /v1/appointments/booking/{bookingId}:
    get:
      tags:
        - Appointments
      summary: Get an appointment booking
      description: |-
        Required Scopes: `APPOINTMENTS_READ`

        Get an appointment booking by id
      operationId: getAppointmentBooking
      parameters:
        - name: bookingId
          in: path
          description: Id of the appointment booking
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentBookingResultWithCustomerId'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 6
    delete:
      tags:
        - Appointments
      summary: Delete an appointment booking
      description: |-
        Required Scopes: `APPOINTMENTS_WRITE`

        Delete an appointment booking by id
      operationId: deleteAppointmentBooking
      parameters:
        - name: bookingId
          in: path
          description: Id of the appointment booking
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VoidResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 7
  /v1/memberships/{contractId}/self-service/idle-periods:
    get:
      tags:
        - Membership Self-service
      summary: Get the idle periods of the contract
      description: >-
        Required Scopes: `MEMBERSHIP_SELF_SERVICE_IDLE_PERIOD_READ`


        Get contract idle periods. Amendments are returned, when a idle period
        is in status pending verification
      operationId: getIdlePeriods
      parameters:
        - name: contractId
          in: path
          description: Unique ID of the contract
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdlePeriodLists'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 7
    post:
      tags:
        - Membership Self-service
      summary: Create a contract idle period amendment
      description: >-
        Required Scopes: `MEMBERSHIP_SELF_SERVICE_IDLE_PERIOD_WRITE`


        Create a contract idle period amendment. When the Amendment is accepted,
        it will become an idle period. ATTENTION: Please see
        https://developer.magicline.com/apis/openapi/general-information#multipartform-data-requests
      operationId: createIdlePeriodAmendment
      parameters:
        - name: contractId
          in: path
          description: Unique ID of the contract
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                data:
                  $ref: '#/components/schemas/IdlePeriodRequest'
                document:
                  type: string
                  format: binary
                  description: Idle period proposal document (jpeg, png, pdf, heic)
              required:
                - data
            encoding:
              data:
                contentType: application/json
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdlePeriod'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 8
  /v1/customers/{customerId}/self-service/payment-data:
    get:
      tags:
        - Customers Self-service
      summary: Get customer's payment data
      description: >-
        Required Scopes: `CUSTOMER_SELF_SERVICE_READ`


        Returns customer current payment data along with requested change of
        this data
      operationId: getCustomerPaymentData
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/OpenApiV1CustomerDataDtoCustomerPaymentData
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 7
    post:
      tags:
        - Customers Self-service
      summary: Create payment data amendment
      description: |-
        Required Scopes: `CUSTOMER_SELF_SERVICE_WRITE`

        Creates request for payment data amendment for specified customerId
      operationId: createCustomerPaymentDataAmendment
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Requested changes for payment data
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OpenApiV1CustomerPaymentAmendment'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/OpenApiV1CustomerDataPendingAmendmentDtoCustomerPaymentData
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 8
  /v1/trial-offers/bookable-trial-offers/appointments/bookable/{bookableAppointmentId}/slots:
    get:
      tags:
        - Trial Offers
      summary: Get bookable appointment slots for trial offers
      description: |-
        Required Scopes: `TRIAL_OFFER_READ`

        Returns bookable appointment slots for trial offers
      operationId: getBookableAppointmentSlotsForTrialOffers
      parameters:
        - name: bookableAppointmentId
          in: path
          description: Id of the bookable trial offer appointment
          required: true
          schema:
            type: integer
            format: int64
        - name: customerId
          in: query
          description: Id of the customer
          required: false
          schema:
            type: integer
            format: int64
        - name: daysAhead
          in: query
          description: Days from now on to look ahead
          required: false
          schema:
            type: integer
            format: int32
            default: 1
            maximum: 6
            minimum: 1
        - name: slotWindowStartDate
          in: query
          description: >-
            Bookable appointment slots are calculated in the window from
            slotWindowStartDate to (slotWindowStartDate + daysAhead)
          required: false
          schema:
            type: string
            format: date
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BookableAppointmentSlot'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 7
  /v1/customers/contracts/by:
    get:
      tags:
        - Customers
      summary: Get customer's contracts by
      description: |-
        Required Scopes(any of): `CUSTOMER_CONTRACT_READ`, `CUSTOMER_READ`

        Returns customer's contracts by one of the given parameters
      operationId: getCustomerContractsBy
      parameters:
        - name: cardNumber
          in: query
          description: Card number to identify the customer
          required: false
          schema:
            type: string
        - name: cardNumberFormat
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/CardNumberFormat'
            default: DECIMAL
        - name: debtorId
          in: query
          description: Unique ID of the debtor
          required: false
          schema:
            type: string
        - name: qrCodeUuid
          in: query
          description: QR code UUID to identify the customer
          required: false
          deprecated: true
          schema:
            type: string
            format: uuid
        - name: barcode
          in: query
          description: Barcode to identify the customer
          required: false
          schema:
            type: string
        - name: customerNumber
          in: query
          description: Customer number to identify the customer
          required: false
          schema:
            type: string
        - name: status
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/ContractStatus'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Contract'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 7
  /v1/classes/booking/{bookingId}:
    get:
      tags:
        - Classes
      summary: Get class booking by id
      description: |-
        Required Scopes: `CLASSES_READ`

        Returns class booking for specified booking id
      operationId: getClassBookingById
      parameters:
        - name: bookingId
          in: path
          description: Id of the booking
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassSlotBookingResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 7
    delete:
      tags:
        - Classes
      summary: Cancel a class booking
      description: |-
        Required Scopes: `CLASSES_WRITE`

        Cancel booking of a class slot for given bookingId
      operationId: cancelClassSlotById
      parameters:
        - name: bookingId
          in: path
          description: Unique id of the booking to be cancelled
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Booking was cancelled successfully
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 9
  /v1/trial-offers/classes/booking/validate:
    post:
      tags:
        - Trial Offers
      summary: Validate class slot is bookable for trial offers
      description: >-
        Required Scopes: `TRIAL_OFFER_READ`


        Validate class slot for trial offers is available to book for given
        customer
      operationId: validateClassSlotForTrialOffers
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClassSlotBookingRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassSlotBookingValidationResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 8
  /v1/taxadvisor/exports/create:
    post:
      tags:
        - Finance
      summary: Create tax advisor export
      description: |-
        Required Scopes: `TAX_ADVISOR_EXPORT_WRITE`

        Returns the export id
      operationId: createExport
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaxAdvisorCreateExport'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaxAdvisorExportResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 8
  /v1/customers/{customerId}/weighing:
    post:
      tags:
        - Customers
      summary: Save weighing results
      description: |-
        Required Scopes(any of): `CUSTOMER_WRITE`, `CUSTOMER_WEIGHING_WRITE`

        Saves weighing details for given customer
      operationId: createCustomerWeighing
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: benefitKey
          in: query
          description: Key of the benefit to use
          required: false
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerWeighings'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerWeighings'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 8
  /v1/appointments/booking:
    get:
      tags:
        - Appointments
      summary: Get appointment bookings for a customer
      description: >-
        Required Scopes: `APPOINTMENTS_READ`


        Get appointment bookings with a period starting and ending within a
        timeframe of +/- 2 weeks for a specific customer
      operationId: getAppointmentBookings
      parameters:
        - name: customerId
          in: query
          description: Id of the customer
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AppointmentBookingResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 8
  /v1/trial-offers/appointments/booking/validate:
    post:
      tags:
        - Trial Offers
      summary: Validate for appointment booking for trial offers
      description: |-
        Required Scopes: `TRIAL_OFFER_READ`

        Returns validation result for trial offers appointment booking
      operationId: validateForAppointmentBookingForTrialOffers
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppointmentBookingRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentBookingValidationResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 9
  /v1/taxadvisor/exports/{exportId}:
    get:
      tags:
        - Finance
      summary: Get tax advisor export by id
      description: |-
        Required Scopes: `TAX_ADVISOR_EXPORT_READ`

        Returns export download data like the download URL
      operationId: getExport
      parameters:
        - name: exportId
          in: path
          description: The exportId received from createExport
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaxAdvisorExportDownload'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 9
  /v1/customers/{customerId}/benefits:
    get:
      tags:
        - Customers
      summary: Get customer's benefits
      description: |-
        Required Scopes(any of): `CUSTOMER_BENEFIT_READ`, `CUSTOMER_READ`

        Returns all customer's benefits
      operationId: getBenefits
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: key
          in: query
          description: >-
            Benefit keys to validate, when provided, service will check only
            them
          required: false
          schema:
            type: array
            items:
              type: string
          example: FIRST_KEY&key=SECOND_KEY
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BenefitValidationDto'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 9
  /v1/memberships/{contractId}/self-service/idle-periods/{idlePeriodId}:
    delete:
      tags:
        - Membership Self-service
      summary: Withdraw a contract idle period
      description: |-
        Required Scopes: `MEMBERSHIP_SELF_SERVICE_IDLE_PERIOD_WRITE`

        Withdraw a contract idle period or amendment.
      operationId: withdrawIdlePeriod
      parameters:
        - name: contractId
          in: path
          description: Unique ID of the contract
          required: true
          schema:
            type: integer
            format: int64
        - name: idlePeriodId
          in: path
          description: Unique ID of the idle period
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VoidResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 9
  /v1/customers/{customerId}/self-service/amendment/{amendmentId}:
    delete:
      tags:
        - Customers Self-service
      summary: Withdraw customer's amendment
      description: |-
        Required Scopes: `CUSTOMER_SELF_SERVICE_WRITE`

        Withdraw customer's amendment
      operationId: withdrawAmendment
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: amendmentId
          in: path
          description: Unique ID of the amendment
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Amendment was withdrawn.
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 9
  /v1/trial-offers/classes/booking/book:
    post:
      tags:
        - Trial Offers
      summary: Book a class slot for trial offers
      description: |-
        Required Scopes: `TRIAL_OFFER_WRITE`

        Book a class slot for trial offers for given customer
      operationId: bookClassSlotForTrialOffers
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClassSlotBookingRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassSlotBookingResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 10
  /v1/memberships/self-service/additional-modules:
    get:
      tags:
        - Membership Self-service
      summary: Get additional modules
      description: |-
        Required Scopes: `MEMBERSHIP_SELF_SERVICE_ADDITIONAL_MODULE_READ`

        Get additional modules for a studio
      operationId: getAdditionalModules
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AdditionalModule'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 10
  /v1/customers/benefits:
    get:
      tags:
        - Customers
      summary: Get customer's benefits by card number
      description: |-
        Required Scopes(any of): `CUSTOMER_BENEFIT_READ`, `CUSTOMER_READ`

        Returns customer's benefits by card number
      operationId: getBenefitsByCardNumber
      parameters:
        - name: cardNumber
          in: query
          description: Card number to identify the customer
          required: true
          schema:
            type: string
        - name: cardNumberFormat
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/CardNumberFormat'
            default: DECIMAL
        - name: key
          in: query
          description: >-
            Benefit keys to validate, when provided, service will check only
            them
          required: false
          schema:
            type: array
            items:
              type: string
          example: FIRST_KEY&key=SECOND_KEY
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BenefitValidationDto'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 10
  /v1/classes/booking:
    get:
      tags:
        - Classes
      summary: Get class bookings by customer id
      description: >-
        Required Scopes: `CLASSES_READ`


        Returns class booking with a period starting and ending within a
        timeframe of +/- 2 weeks for a specific customer
      operationId: getClassBookingsByCustomerId
      parameters:
        - name: customerId
          in: query
          description: Id of the customer
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ClassSlotBookingResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 10
  /v1/trial-offers/appointments/booking/book:
    post:
      tags:
        - Trial Offers
      summary: Book an appointment for trial offers
      description: |-
        Required Scopes: `TRIAL_OFFER_WRITE`

        Book an appointment for trial offers for given customer
      operationId: bookAppointmentForTrialOffer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppointmentBookingRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentBookingResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 11
  /v1/customers/{customerId}/benefits/{benefitKey}/use:
    post:
      tags:
        - Customers
      summary: Post customer's benefit usage
      description: 'Required Scopes(any of): `CUSTOMER_WRITE`, `CUSTOMER_BENEFIT_WRITE`'
      operationId: useBenefit
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
        - name: benefitKey
          in: path
          description: Key of the benefit to use
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Benefit has been used.
        '400':
          description: Benefit could not be used or provided key is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 11
  /v1/memberships/{contractId}/self-service/additional-modules/purchasable:
    get:
      tags:
        - Membership Self-service
      summary: Get purchasable additional modules
      description: >-
        Required Scopes: `MEMBERSHIP_SELF_SERVICE_ADDITIONAL_MODULE_READ`


        Get purchasable additional modules for a studio and a customer (via main
        contract)
      operationId: getPurchasableAdditionalModules
      parameters:
        - name: contractId
          in: path
          description: Unique ID of the main contract
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AdditionalModule'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 11
  /v1/memberships/{contractId}/self-service/additional-modules/validate:
    post:
      tags:
        - Membership Self-service
      summary: Validate an additional module contract request
      description: |-
        Required Scopes: `MEMBERSHIP_SELF_SERVICE_ADDITIONAL_MODULE_READ`

        Validate an additional module contract request
      operationId: validateAdditionalModuleContractRequest
      parameters:
        - name: contractId
          in: path
          description: Unique ID of the main contract
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdditionalModuleContractRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdditionalModuleContractValidationStatus'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 12
  /v1/customers/{customerId}/access-code:
    get:
      tags:
        - Customers
      summary: Get customer's access code
      description: |-
        Required Scopes: `CUSTOMER_READ`

        Returns customer's access code
      operationId: getCustomerAccessCode
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerAccessCode'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 12
  /v1/customers/{customerId}/access-medium:
    put:
      tags:
        - Customers
      summary: Add a new access medium to a customer
      description: |-
        Required Scopes: `CUSTOMER_ACCESS_MEDIUM_WRITE`

        Returns the newly added access medium
      operationId: addAccessMedium
      parameters:
        - name: customerId
          in: path
          description: Unique ID of the customer
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccessMediumDto'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessMediumDto'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 13
  /v1/memberships/{contractId}/self-service/additional-modules/purchase:
    post:
      tags:
        - Membership Self-service
      summary: Purchase an additional module contract
      description: >-
        Required Scopes:
        `MEMBERSHIP_SELF_SERVICE_ADDITIONAL_MODULE_CONTRACT_WRITE`


        Purchase an additional module contract
      operationId: purchaseAdditionalModuleContract
      parameters:
        - name: contractId
          in: path
          description: Unique ID of the main contract
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdditionalModuleContractRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdditionalModuleContract'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 13
  /v1/memberships/{contractId}/self-service/additional-module-contracts/{additionalModuleContractId}:
    get:
      tags:
        - Membership Self-service
      summary: Get an additional module contract
      description: >-
        Required Scopes:
        `MEMBERSHIP_SELF_SERVICE_ADDITIONAL_MODULE_CONTRACT_READ`


        Get an additional module contract via additional module contract id
      operationId: getAdditionalModuleContract
      parameters:
        - name: contractId
          in: path
          description: Unique ID of the main contract
          required: true
          schema:
            type: integer
            format: int64
        - name: additionalModuleContractId
          in: path
          description: Unique ID of the additional module contract
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdditionalModuleContractExtended'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 14
  /v1/memberships/{contractId}/self-service/additional-module-contracts/{additionalModuleContractId}/ordinary-cancelation:
    post:
      tags:
        - Membership Self-service
      summary: 'Create additional module contract cancelation amendment '
      description: >-
        Required Scopes:
        `MEMBERSHIP_SELF_SERVICE_ADDITIONAL_MODULE_CONTRACT_WRITE`


        Creates additional module contract cancelation amendment for specified
        contract id and additional module contract id
      operationId: createModuleContractCancelationAmendment
      parameters:
        - name: contractId
          in: path
          description: Unique ID of the main contract
          required: true
          schema:
            type: integer
            format: int64
        - name: additionalModuleContractId
          in: path
          description: Unique ID of the additional module contract
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdditionalModuleContractCancelation'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VoidResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 15
  /v1/memberships/{contractId}/self-service/additional-module-contracts/{additionalModuleContractId}/withdraw-cancelation:
    post:
      tags:
        - Membership Self-service
      summary: withdraw cancelation of the additional module contract
      description: >-
        Required Scopes:
        `MEMBERSHIP_SELF_SERVICE_ADDITIONAL_MODULE_CONTRACT_WRITE`


        Withdraws additional module contract cancelation amendment or reverts
        cancelation for specific additional module contract id
      operationId: withdrawAdditionalModuleContractCancelation
      parameters:
        - name: contractId
          in: path
          description: Unique ID of the contract
          required: true
          schema:
            type: integer
            format: int64
        - name: additionalModuleContractId
          in: path
          description: Unique ID of the additional module contract
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VoidResult'
        '400':
          description: Validation of the request failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            Authentication failed. No api-key, wrong api-key or wrong header
            name.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Authorization failed. The caller has no privilege to the given
            resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Entity does not exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Access denied - rate limit is exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Unexpected system error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      x-redoclyOrder: 16
components:
  schemas:
    ErrorResponse:
      properties:
        errorMessage:
          type: string
          description: Resolved message in the context-specific default locale
        errorCode:
          type: string
          description: Key for translation files
        traceId:
          type: string
          description: Datadog trace id
        args:
          type: array
          description: >-
            Arguments referenced by format specifiers while resolving the
            message from translation files
          items: {}
        typedArgs:
          type: array
          description: Same as `args` but with type information
          items:
            $ref: '#/components/schemas/TypedArgumentDto'
      required:
        - errorMessage
    TypedArgumentDto:
      properties:
        value: {}
        type:
          type: string
          enum:
            - TIMESTAMP
            - BOOLEAN
            - DATE
            - MONTH_DAY
            - TIME
            - TERM
            - TERM_LIST
            - INTEGER
            - DECIMAL
            - STRING
            - MONEY
            - LIMITABLE_CONFIG_PROPERTY
            - I18N_KEY
            - I18N_KEY_LIST
            - PERMISSION_LIST
            - ENUM
            - AVAILABILITY_LIST
    DeviceActivationResponse:
      properties:
        id:
          type: integer
          format: int64
          description: Device id
          example: 26
        accessToken:
          type: string
          description: Device token for further communication
          example: 53cda15a-5652-4f62-9b97-508f870ff40b
    AccessMediumDto:
      description: Represents access medium of customer
      properties:
        type:
          type: string
          description: Represents a type of access medium
          enum:
            - CARD_NUMBER
            - PIN
          example: CARD_NUMBER
          x-enumDescriptions:
            PIN: Personal identification number
            CARD_NUMBER: Card number
        value:
          type: string
          description: Unique identifier for the access medium
    CommunicationThreadRequest:
      description: Communication thread request
      properties:
        communicationThreadStatus:
          type: string
          description: The status of a communication thread
          enum:
            - CREATED
            - ONGOING
            - CLOSED
          example: CREATED
          x-enumDescriptions:
            CREATED: The thread is created
            CLOSED: The thread is closed
            ONGOING: The thread is in ongoing progress
        ticketNumber:
          type: string
          description: The ticket number of the third party ticketing system
          example: A123456
        subject:
          type: string
          description: The subject of the communication
          example: Complaint
        content:
          type: string
          description: The content of the communication
          example: I received two invoices this month, but I only made one purchase.
        communicationDirection:
          type: string
          description: The direction of the communication
          enum:
            - INCOMING
            - OUTGOING
          example: INCOMING
          x-enumDescriptions:
            INCOMING: The communication is incoming from the customer
            OUTGOING: The communication is outgoing to the customer
        ticketLink:
          type: string
          description: The link to the ticket in the third party ticketing system
          example: https://ticketing-system.com/ticket/A123456
        communicationChannel:
          type: string
          description: The channel of the communication
          enum:
            - LETTER
            - EMAIL
            - TEXT_MESSAGE
            - PHONE
            - FAX
            - CONVERSATION
            - CHAT
            - OTHER
          example: LETTER
          x-enumDescriptions:
            OTHER: Communication via other means
            LETTER: Communication via letter
            TEXT_MESSAGE: Communication via text message
            PHONE: Communication via phone
            CHAT: Communication via chat
            EMAIL: Communication via email
            FAX: Communication via fax
            CONVERSATION: Communication via conversation
        agent:
          type: string
          description: The employee/agent handling the communication
          example: Peter Meyer
        communicationDateTime:
          type: string
          format: date-time
          description: >-
            When this field is not null it will be used as the date time of the
            communication instead of the current time
          example: 2022-06-22T08:00:00.000+02:00[Europe/Berlin]
      required:
        - communicationChannel
        - communicationDirection
        - communicationThreadStatus
        - content
        - subject
    CommunicationThreadResponse:
      description: Communication thread response
      properties:
        customerId:
          type: integer
          format: int64
          description: The customer's ID
          example: 1
        communicationId:
          type: integer
          format: int64
          description: The ID of the communication
          example: 1
        threadId:
          type: integer
          format: int64
          description: The ID of the communication thread
          example: 1
        communicationThreadStatus:
          type: string
          description: The status of a communication thread
          enum:
            - CREATED
            - ONGOING
            - CLOSED
          example: CREATED
          x-enumDescriptions:
            CREATED: The thread is created
            CLOSED: The thread is closed
            ONGOING: The thread is in ongoing progress
        ticketNumber:
          type: string
          description: The ticket number of the third party ticketing system
          example: A123456
        subject:
          type: string
          description: The subject of the communication
          example: Complaint
        content:
          type: string
          description: The content of the communication
          example: I received two invoices this month, but I only made one purchase.
        communicationDirection:
          type: string
          description: The direction of the communication
          enum:
            - INCOMING
            - OUTGOING
          example: INCOMING
          x-enumDescriptions:
            INCOMING: The communication is incoming from the customer
            OUTGOING: The communication is outgoing to the customer
        ticketLink:
          type: string
          description: The link to the ticket in the third party ticketing system
          example: https://ticketing-system.com/ticket/A123456
        communicationChannel:
          type: string
          description: The channel of the communication
          enum:
            - LETTER
            - EMAIL
            - TEXT_MESSAGE
            - PHONE
            - FAX
            - CONVERSATION
            - CHAT
            - OTHER
          example: LETTER
          x-enumDescriptions:
            OTHER: Communication via other means
            LETTER: Communication via letter
            TEXT_MESSAGE: Communication via text message
            PHONE: Communication via phone
            CHAT: Communication via chat
            EMAIL: Communication via email
            FAX: Communication via fax
            CONVERSATION: Communication via conversation
        agent:
          type: string
          description: The employee/agent handling the communication
          example: Peter Meyer
      required:
        - communicationChannel
        - communicationDirection
        - communicationId
        - communicationThreadStatus
        - content
        - customerId
        - subject
        - threadId
    CommunicationChannelWrapper:
      description: Communication channel wrapper
      properties:
        communicationChannel:
          type: string
          description: The communication channel
          enum:
            - LETTER
            - EMAIL
            - TEXT_MESSAGE
            - PHONE
            - FAX
            - CONVERSATION
            - CHAT
            - OTHER
          example: EMAIL
          x-enumDescriptions:
            OTHER: Communication via other means
            LETTER: Communication via letter
            TEXT_MESSAGE: Communication via text message
            PHONE: Communication via phone
            CHAT: Communication via chat
            EMAIL: Communication via email
            FAX: Communication via fax
            CONVERSATION: Communication via conversation
        customerOverridable:
          type: boolean
          description: Indicates if the customer can override the communication channel
          example: true
        active:
          type: boolean
          description: Indicates if the communication channel is active
          example: true
      required:
        - communicationChannel
    CommunicationPreference:
      description: The communication preference of a customer per message category
      properties:
        messageCategory:
          type: string
          description: The message category of the communication preference
          enum:
            - CONTRACT
            - GENERAL
            - APPOINTMENT
            - NEWSLETTER
            - LOYALTY_PROGRAM
          example: CONTRACT
          x-enumDescriptions:
            APPOINTMENT: The message category is appointment related
            NEWSLETTER: The message category is newsletter related
            CONTRACT: The message category is contract related
            LOYALTY_PROGRAM: The message category is loyalty program related
            GENERAL: The message category is general
        channels:
          type: array
          description: >-
            The communication channels related to the message category of the
            communication preference
          items:
            $ref: '#/components/schemas/CommunicationChannelWrapper'
    LeadCustomerAddressData:
      description: Lead customer address information
      properties:
        street:
          type: string
          description: Street of the lead customer
          example: Burgring
        houseNumber:
          type: string
          description: House number of the lead customer
          example: 23A
        zipCode:
          type: string
          description: Zip code of the lead customer
          example: '13000'
        city:
          type: string
          description: City name of the lead customer
          example: Berlin
      required:
        - city
        - houseNumber
        - street
        - zipCode
    LeadCustomerData:
      description: Lead customer information
      properties:
        firstname:
          type: string
          description: First name of the lead customer
          example: Max
        secondFirstname:
          type: string
          description: Second first name of the lead customer
          example: Peter
        lastname:
          type: string
          description: Last name of the lead customer
          example: Mustermann
        secondLastname:
          type: string
          description: Second last name of the lead customer
          example: Meier
        email:
          type: string
          description: Email of the lead customer
          example: MANDATORY
        gender:
          type: string
          description: Gender of the customer
          enum:
            - MALE
            - FEMALE
            - UNISEX
          example: MALE
          x-enumDescriptions:
            MALE: Male gender of the customer
            FEMALE: Female gender of the customer
            UNISEX: Unisex gender of the customer
        dateOfBirth:
          type: string
          format: date
          description: Date of birth of the lead customer
          example: '2000-10-10'
        telephone:
          type: string
          description: Telephone number of the lead customer
          example: '5006001112'
        address:
          $ref: '#/components/schemas/LeadCustomerAddressData'
      required:
        - email
        - firstname
        - lastname
    TrialOfferLeadCustomerCreationRequest:
      description: Trial offer lead customer creation request
      properties:
        leadCustomerData:
          $ref: '#/components/schemas/LeadCustomerData'
        trialOfferConfigId:
          type: integer
          format: int64
          description: The ID of the trial offer config
          example: 1
      required:
        - leadCustomerData
        - trialOfferConfigId
    TrialOfferLeadCustomerCreationValidationResult:
      description: Trial offer lead customer creation validation result
      properties:
        validationStatus:
          type: string
          description: Status of the lead customer creation validation
          enum:
            - POSSIBLE
            - INVALID_LEAD_CUSTOMER_DATA
            - DUPLICATE_CUSTOMER
          example: POSSIBLE
          x-enumDescriptions:
            POSSIBLE: Lead customer creation is possible
            INVALID_LEAD_CUSTOMER_DATA: The provided lead customer data is invalid
            DUPLICATE_CUSTOMER: A customer with provided data already exists
      required:
        - validationStatus
    TrialOfferLeadCustomerCreationResult:
      description: Result of trial offer lead customer creation
      properties:
        leadCustomerId:
          type: integer
          format: int64
          description: The ID of the created lead customer
          example: 1001
    ClassSlotBookingRequest:
      description: Represents class slot booking request
      properties:
        customerId:
          type: integer
          format: int64
          description: Unique ID of the customer
          example: 203
        classSlotId:
          type: integer
          format: int64
          description: Unique ID of the class slot
          example: 20334
      required:
        - classSlotId
        - customerId
    ClassSlotBookingValidationResult:
      description: Class slot booking validation result
      properties:
        validationStatus:
          type: string
          description: Status of the booking validation
          enum:
            - AVAILABLE
            - NO_CONTINGENT
            - BOOKING_LIMIT_REACHED
            - CUSTOMER_ALREADY_BOOKED
            - CUSTOMER_IDLE
            - CUSTOMER_IN_OTHER_BOOKING
            - DISPLAY_ONLY
            - DATE_TIME_BEFORE_EARLIEST_BOOKING_DATE_TIME
            - DATE_TIME_AFTER_LATEST_BOOKING_DATE_TIME
            - STUDIO_CLOSED
            - NOT_AVAILABLE
          example: AVAILABLE
          x-enumDescriptions:
            AVAILABLE: Booking is possible
            NO_CONTINGENT: Customer doesn't have required contingent
            BOOKING_LIMIT_REACHED: Waiting List/Max participant list exceeded
            CUSTOMER_ALREADY_BOOKED: Customer already added to class slot
            CUSTOMER_IDLE: Customer has an idle period during the time of the class slot
            STUDIO_CLOSED: Studio is closed during period
            CUSTOMER_IN_OTHER_BOOKING: Customer has other bookings in this period
            DATE_TIME_BEFORE_EARLIEST_BOOKING_DATE_TIME: Date and time are before earliest possible booking date
            NOT_AVAILABLE: Booking is not possible for other reasons
            DISPLAY_ONLY: Class is display only
            DATE_TIME_AFTER_LATEST_BOOKING_DATE_TIME: Date and time are after latest possible booking date
      required:
        - validationStatus
    ClassSlotBookingResult:
      description: Represents successful booking result
      properties:
        bookingId:
          type: integer
          format: int64
          description: Unique ID of a class booking
          example: 2033
        bookingStatus:
          type: string
          description: Status of the class slot booking
          enum:
            - BOOKED
            - WAITING_LIST
            - CANCELED
          example: BOOKED
          x-enumDescriptions:
            BOOKED: Customer is successfully booked
            CANCELED: Customer booking is canceled
            WAITING_LIST: Customer is assigned to waiting list
        classSlotId:
          type: integer
          format: int64
          description: Unique ID of a class slot
          example: 14928
        classId:
          type: integer
          format: int64
          description: Unique ID of a class
          example: 14928
        customerId:
          type: integer
          format: int64
          description: Unique ID of a customer
          example: 14925548
        classSlotStatus:
          type: string
          description: The status of a class slot
          enum:
            - PLANNED
            - CANCELED
            - COMPLETED
          example: COMPLETED
          x-enumDescriptions:
            COMPLETED: The class slot is completed.
            CANCELED: The class slot is canceled.
            PLANNED: The class slot is planned.
        participantStatus:
          type: string
          description: The status of a participant
          enum:
            - PARTICIPATING
            - NOT_PARTICIPATING
            - UNSET
          example: PARTICIPATING
          x-enumDescriptions:
            PARTICIPATING: The customer is participating.
            UNSET: The participation status is not set.
            NOT_PARTICIPATING: The customer is not participating.
      required:
        - bookingId
        - bookingStatus
        - classId
        - classSlotId
        - classSlotStatus
        - customerId
        - participantStatus
    AppointmentBookingRequest:
      description: Represents appointment booking request
      properties:
        customerId:
          type: integer
          format: int64
          description: Unique ID of the customer
          example: 203
        bookableAppointmentId:
          type: integer
          format: int64
          description: Unique ID of the bookable appointment
          example: 20334
        startDateTime:
          type: string
          format: date-time
          description: Start date time of the bookable appointment slot
          example: 2022-06-22T08:00:00.000+02:00[Europe/Berlin]
        endDateTime:
          type: string
          format: date-time
          description: End date time of the bookable appointment slot
          example: 2022-06-22T10:00:00.000+02:00[Europe/Berlin]
        instructorIds:
          type: array
          description: Instructor ID list of the bookable appointment slot
          items:
            type: integer
            format: int64
      required:
        - bookableAppointmentId
        - customerId
        - endDateTime
        - startDateTime
    AppointmentBookingValidationResult:
      description: Appointment booking validation result
      properties:
        validationStatus:
          type: string
          description: Status of the booking validation
          enum:
            - PAST_START_DATE_TIME
            - END_DATE_TIME_NOT_AFTER_START_DATE_TIME
            - PERIOD_DOES_NOT_MATCH
            - CUSTOMER_IN_OTHER_BOOKING
            - CUSTOMER_IDLE
            - NO_CONTINGENT
            - BOOKABLE_APPOINTMENT_RESTRICTIONS_NOT_FULFILLED
            - BOOKING_LIMIT_REACHED
            - DATE_TIME_BEFORE_EARLIEST_BOOKING_DATE_TIME
            - DATE_TIME_AFTER_LATEST_BOOKING_DATE_TIME
            - STUDIO_CLOSED
            - RESOURCE_NOT_AVAILABLE
            - AVAILABLE
          example: RESOURCE_NOT_AVAILABLE
          x-enumDescriptions:
            NO_CONTINGENT: Customer doesn't have required contingent
            CUSTOMER_IDLE: >-
              Customer has an idle period during the time of the bookable
              appointment slot
            BOOKABLE_APPOINTMENT_RESTRICTIONS_NOT_FULFILLED: >-
              The restriction(s) of the bookable appointment is/are not
              fulfilled
            STUDIO_CLOSED: Studio is closed during period
            AVAILABLE: Booking is possible
            PAST_START_DATE_TIME: The start date and time is in the past
            BOOKING_LIMIT_REACHED: Booking limit reached
            CUSTOMER_IN_OTHER_BOOKING: Customer has other bookings in this period
            DATE_TIME_BEFORE_EARLIEST_BOOKING_DATE_TIME: Date and time are before earliest possible booking date
            PERIOD_DOES_NOT_MATCH: >-
              The period from start date and time to end date and time does not
              match the main time of the bookable appointment
            RESOURCE_NOT_AVAILABLE: (A) resource(s) is/are not available
            END_DATE_TIME_NOT_AFTER_START_DATE_TIME: The end date and time is not after the start date and time
            DATE_TIME_AFTER_LATEST_BOOKING_DATE_TIME: Date and time are after latest possible booking date
      required:
        - validationStatus
    AppointmentBookingResult:
      description: Represents successful booking result
      properties:
        bookingId:
          type: integer
          format: int64
          description: Unique ID of the appointment booking
          example: 2033
        bookingStatus:
          type: string
          description: Status of the appointment booking
          enum:
            - BOOKED
            - CANCELED
          example: BOOKED
          x-enumDescriptions:
            BOOKED: Customer is successfully booked
            CANCELED: Customer booking is canceled
        startDateTime:
          type: string
          format: date-time
          description: Start date and time of the appointment booking
        endDateTime:
          type: string
          format: date-time
          description: End date and time of the appointment booking
        title:
          type: string
          description: Title of the appointment booking
          example: Mission Beach body
        duration:
          type: integer
          format: int32
          description: Duration of the appointment booking in minutes
          example: 45
        category:
          type: string
          description: Category of the appointment booking
          example: Fitness
        description:
          type: string
          description: Description of the appointment booking
          example: Get your body ready for beaches
        imgUrl:
          type: string
          description: Image URL assigned to display this appointment booking
        instructors:
          type: array
          description: Instructors list of the appointment booking
          items:
            $ref: '#/components/schemas/Instructor'
        appointmentStatus:
          type: string
          description: The status of an appointment
          enum:
            - PLANNED
            - CANCELED
            - COMPLETED
          example: COMPLETED
          x-enumDescriptions:
            COMPLETED: The appointment is completed.
            CANCELED: The appointment is canceled.
            PLANNED: The appointment is planned.
        participantStatus:
          type: string
          description: The status of a participant
          enum:
            - PARTICIPATING
            - NOT_PARTICIPATING
            - UNSET
          example: PARTICIPATING
          x-enumDescriptions:
            PARTICIPATING: The customer is participating.
            UNSET: The participation status is not set.
            NOT_PARTICIPATING: The customer is not participating.
      required:
        - appointmentStatus
        - bookingId
        - bookingStatus
        - endDateTime
        - participantStatus
        - startDateTime
    Instructor:
      description: Basic instructor information
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the instructor
          example: 101
        firstName:
          type: string
          description: Instructor's first name
          example: Anna
        lastName:
          type: string
          description: Instructor's last name
          example: Chodakowska
        publicName:
          type: string
          description: Public name that should be shown to customers
          example: Peter2000
      required:
        - firstName
        - id
        - lastName
    TaxAdvisorCreateExport:
      description: Export creation details
      properties:
        fromDate:
          type: string
          format: date
          description: >-
            Bookings accounting date range start. Must be in past and equal or
            before the toDate. The maximum time range is 90 days. 
          example: '2020-12-15'
        toDate:
          type: string
          format: date
          description: >-
            Bookings accounting date range end. Must be in past and equal or
            after the fromDate. The maximum time range is 90 days.
          example: '2020-12-30'
        exportFormat:
          type: string
          description: The export format of bookings
          enum:
            - SINGLE
            - AGGREGATED
          example: AGGREGATED
          x-enumDescriptions:
            SINGLE: Contains all bookings as a single unit
            AGGREGATED: Bookings are aggregated by account numbers
        exportFileFormat:
          type: string
          description: The file format of the export
          enum:
            - JSON
            - CSV
            - XLSX
          example: JSON
          x-enumDescriptions:
            XLSX: Microsoft Excel
            CSV: Comma Separated Values
            JSON: JavaScript Object Notation
        exportLocale:
          type: string
          description: The locale of the export.
          enum:
            - ENGLISH
            - GERMAN
          example: ENGLISH
          x-enumDescriptions:
            ENGLISH: English
            GERMAN: German
      required:
        - exportFileFormat
        - exportFormat
        - fromDate
        - toDate
    TaxAdvisorExportResult:
      description: Tax advisor export creation response
      properties:
        exportId:
          type: integer
          format: int64
          description: Id of created export
    VoidResult:
      properties:
        success:
          type: string
    MembershipSelfServiceMainContractCancelation:
      description: Request to cancel customers main contract
      properties:
        cancelationDate:
          type: string
          format: date
          description: Date the contract should be canceled to
          example: '2023-01-25'
        cancelationReasonId:
          type: integer
          format: int64
          description: Id of the reason why the contract is canceled
          example: 1234
        contractId:
          type: integer
          format: int64
          description: Id of the contract
          example: 1000
      required:
        - cancelationDate
        - cancelationReasonId
        - contractId
    IdlePeriodRequest:
      description: Represents an idle period request
      properties:
        startDate:
          type: string
          format: date
          description: Start date of the idle period
        temporalUnit:
          type: string
          description: 'Represents the temporal unit of an idle period '
          enum:
            - DAY
            - WEEK
            - MONTH
          example: WEEK
          x-enumDescriptions:
            MONTH: >-
              Represents a monthly temporal unit of the idle period. Can be used
              for month pickers only. Supports only full months.
            WEEK: >-
              Represents a weekly temporal unit of the idle period. Can be used
              for week pickers only. Supports only full weeks.
            DAY: >-
              Represents a daily temporal unit of the idle period. Can be used
              for day pickers only.
        termValue:
          type: integer
          format: int32
          description: >-
            Duration term of the idle period. The field is related to the
            temporal unit
          example: 1
        reasonId:
          type: integer
          format: int64
          description: ID of an idle period reason
      required:
        - reasonId
        - startDate
        - temporalUnit
        - termValue
    IdlePeriod:
      description: Represents an idle period
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the idle period
          example: 203
        startDate:
          type: string
          format: date
          description: Start date of the idle period
        endDate:
          type: string
          format: date
          description: End date of the idle period
        reason:
          type: string
          description: Reason of the idle period
          example: Vacation
        fee:
          $ref: '#/components/schemas/Money'
        documentUrl:
          type: string
          description: >-
            Temporal download-url for the idle period document, restricted to 15
            minutes
        state:
          type: string
          description: State of the idle period
          enum:
            - PENDING_VERIFICATION
            - ACCEPTED
          example: PENDING_VERIFICATION
          x-enumDescriptions:
            ACCEPTED: The idle period is accepted
            PENDING_VERIFICATION: The idle period verification is pending
      required:
        - endDate
        - fee
        - id
        - reason
        - startDate
        - state
    Money:
      description: Represents a financial data
      properties:
        amount:
          type: number
          description: Amount of the finance data tuple
          example: 20
        currency:
          type: string
          format: ISO 4217
          description: Currency of the finance data tuple
          example: EUR
      required:
        - amount
        - currency
    IdlePeriodValidationRequest:
      description: Represents an idle period validation request
      properties:
        startDate:
          type: string
          format: date
          description: Start date of the idle period
        temporalUnit:
          type: string
          description: 'Represents the temporal unit of an idle period '
          enum:
            - DAY
            - WEEK
            - MONTH
          example: WEEK
          x-enumDescriptions:
            MONTH: >-
              Represents a monthly temporal unit of the idle period. Can be used
              for month pickers only. Supports only full months.
            WEEK: >-
              Represents a weekly temporal unit of the idle period. Can be used
              for week pickers only. Supports only full weeks.
            DAY: >-
              Represents a daily temporal unit of the idle period. Can be used
              for day pickers only.
        termValue:
          type: integer
          format: int32
          description: >-
            Duration term of the idle period. The field is related to the
            temporal unit
          example: 1
      required:
        - startDate
        - temporalUnit
        - termValue
    IdlePeriodValidationStatusResult:
      description: Idle period validation status
      properties:
        validationStatus:
          type: string
          description: Status of the idle period validation
          enum:
            - IDLEPERIOD_DEACTIVATED_FOR_CONTRACT
            - IDLEPERIOD_PENDING_VERIFICATION
            - IDLEPERIOD_DATE_NOT_FIRSTDAY_OF_TEMPORALUNIT
            - IDLEPERIOD_DEADLINE_VIOLATED
            - IDLEPERIOD_EXPECTED_STARTDATE_MISMATCH
            - IDLEPERIOD_MAXIMUM_YEARS_VIOLATED
            - IDLEPERIOD_OVERLAPPING
            - IDLEPERIOD_TEMPORALUNIT_INVALID
            - IDLEPERIOD_MAXIMUM_TERMS_VIOLATED
            - IDLEPERIOD_CREATABLE
          example: IDLEPERIOD_DEACTIVATED_FOR_CONTRACT
          x-enumDescriptions:
            IDLEPERIOD_MAXIMUM_TERMS_VIOLATED: The idle period violates the maximum terms value.
            IDLEPERIOD_DEACTIVATED_FOR_CONTRACT: Idle periods are deactivated for the contract.
            IDLEPERIOD_MAXIMUM_YEARS_VIOLATED: 5 years is a hard limit for the length of the idle period.
            IDLEPERIOD_EXPECTED_STARTDATE_MISMATCH: The idle period start date does not match the expected start date.
            IDLEPERIOD_DATE_NOT_FIRSTDAY_OF_TEMPORALUNIT: >-
              The idle period start date must be the first day of the period,
              defined by the temporal unit (DAY -> same day, WEEK -> start day
              of the week, MONTH -> start date of the month).
            IDLEPERIOD_DEADLINE_VIOLATED: The start date violates the submission deadline.
            IDLEPERIOD_TEMPORALUNIT_INVALID: The temporal unit must match the temporal unit of the config.
            IDLEPERIOD_CREATABLE: The idle period can be created.
            IDLEPERIOD_OVERLAPPING: The idle period is overlapping existing idle periods.
            IDLEPERIOD_PENDING_VERIFICATION: >-
              Idle periods cannot be created if a pending verification for an
              amendment exists.
      required:
        - validationStatus
    AdditionalModuleContractRequest:
      description: Represents an additional module contract request
      properties:
        additionalModuleId:
          type: integer
          format: int64
          description: Unique ID of the additional module
          example: 203
        paymentFrequencyId:
          type: integer
          format: int64
          description: Unique ID of the payment frequency of the additional module
          example: 203
        bookTrialPeriod:
          type: boolean
          description: >-
            Describes whether a trial period should be booked. The additional
            module must contain a valid trial period configuration, if set to
            true
          example: true
      required:
        - additionalModuleId
        - bookTrialPeriod
        - paymentFrequencyId
    AdditionalModuleContractValidationStatus:
      description: >-
        Represents the validation status of an additional module contract
        request
      properties:
        validationStatus:
          type: string
          description: Status of the addtional module validation
          enum:
            - ADDITIONAL_MODULE_CONTRACT_ALREADY_PURCHASED
            - ADDITIONAL_MODULE_CONTRACT_INVALID_STATUS
            - ADDITIONAL_MODULE_NOT_FOUND
            - ADDITIONAL_MODULE_NOT_ONLINE_PURCHASABLE
            - ADDITIONAL_MODULE_TRIAL_PERIOD_NOT_BOOKABLE
            - ADDITIONAL_MODULE_PURCHASABLE
          example: ADDITIONAL_MODULE_CONTRACT_ALREADY_PURCHASED
          x-enumDescriptions:
            ADDITIONAL_MODULE_NOT_FOUND: The additional module could not be found.
            ADDITIONAL_MODULE_CONTRACT_INVALID_STATUS,: The additional module contract is in an invalid status.
            ADDITIONAL_MODULE_NOT_ONLINE_PURCHASABLE: The additional module is not purchasable online.
            ADDITIONAL_MODULE_CONTRACT_ALREADY_PURCHASED: The additional module contract has already been purchased.
            ADDITIONAL_MODULE_PURCHASABLE: The additional module is purchasable.
            ADDITIONAL_MODULE_TRIAL_PERIOD_NOT_BOOKABLE: The additional module trial period cannot be booked.
      required:
        - validationStatus
    AdditionalModuleContract:
      description: Represents an additional module contract
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the additional module contract
          example: 1001
    AdditionalModuleContractCancelation:
      description: Request to cancel an additional module contract
      properties:
        cancelationDate:
          type: string
          format: date
          description: Date the contract should be canceled to
          example: '2023-01-25'
        cancelationReasonId:
          type: integer
          format: int64
          description: Id of the reason why the contract is canceled
          example: 1234
      required:
        - cancelationDate
        - cancelationReasonId
    CustomerWeighings:
      description: Customer weighing details
      properties:
        databaseId:
          type: integer
          format: int64
          description: Database id of the weighing
        basalMetabolicRate:
          type: number
          description: Basal metabolic rate
        bodyFatMass:
          type: number
          description: Body fat mass in kg
        bodyMassIndex:
          type: number
          description: Body mass index in kg/m^2
        fatFreeMass:
          type: number
          description: Total fat free mass (aka Lean Body Mass) in kg
        percentBodyFat:
          type: number
          description: Body fat in percent
        percentSkeletalMuscleMass:
          type: number
          description: Skeletal muscle mass in percent
        skeletalMuscleMass:
          type: number
          description: Skeletal muscle mass in kg
        totalBodyWater:
          type: number
          description: Total body water in liters
        visceralFatLevel:
          type: integer
          format: int32
          description: Visceral fat level (1-9)
        weight:
          type: number
          description: Body weight in kg
        height:
          type: number
          description: Body height in cm
        bfmLeftArm:
          type: number
          description: Body Fat Mass of the left arm in kg
        bfmLeftLeg:
          type: number
          description: Body Fat Mass of the left leg in kg
        bfmPercentLeftArm:
          type: number
          description: Body Fat Mass of the left arm in percent
        bfmPercentLeftLeg:
          type: number
          description: Body Fat Mass of the left leg in percent
        bfmPercentRightArm:
          type: number
          description: Body Fat Mass of the right arm in percent
        bfmPercentRightLeg:
          type: number
          description: Body Fat Mass of the right leg in percent
        bfmPercentTrunk:
          type: number
          description: Body Fat Mass of the trunk in percent
        bfmRightArm:
          type: number
          description: Body Fat Mass of the right arm in kg
        bfmRightLeg:
          type: number
          description: Body Fat Mass of the right leg in kg
        bfmTrunk:
          type: number
          description: Body Fat Mass of the trunk in kg
        ffmLeftArm:
          type: number
          description: Fat Free Mass of the left arm in kg
        ffmLeftLeg:
          type: number
          description: Fat Free Mass of the left leg in kg
        ffmPercentLeftArm:
          type: number
          description: Fat Free Mass of the left arm in percent
        ffmPercentLeftLeg:
          type: number
          description: Fat Free Mass of the left leg in percent
        ffmPercentRightArm:
          type: number
          description: Fat Free Mass of the right arm in percent
        ffmPercentRightLeg:
          type: number
          description: Fat Free Mass of the right leg in percent
        ffmPercentTrunk:
          type: number
          description: Fat Free Mass of the trunk in percent
        ffmRightArm:
          type: number
          description: Fat Free Mass of the right arm in kg
        ffmRightLeg:
          type: number
          description: Fat Free Mass of the right leg in kg
        ffmTrunk:
          type: number
          description: Fat Free Mass of the trunk in kg
        rawResults:
          type: string
          description: The raw results. Might be passed back to partner-provided widgets
      required:
        - rawResults
    OpenApiV1CustomerPaymentAmendment:
      properties:
        accountHolder:
          type: string
          description: The account holder of the bank account
          example: Sven Hannawald
        bankName:
          type: string
          description: Name of the bank
          example: Deutsche Bank
        iban:
          type: string
          description: Iban of the clients account
          example: DE91 1000 0000 0123 4567 89
        bic:
          type: string
          description: Bic of the clients account
          example: DEUTDEFFXXX
        signature:
          $ref: '#/components/schemas/Signature'
      required:
        - accountHolder
        - bankName
        - bic
        - iban
    Signature:
      description: Representing customer signature
      properties:
        base64SvgSignature:
          type: string
          description: Customer confirmation signature SVG value as base 64 string
      required:
        - base64SvgSignature
    OpenApiV1CustomerDataPendingAmendmentDtoCustomerPaymentData:
      properties:
        id:
          type: integer
          format: int64
          description: Amendment proposal id
        accountHolder:
          type: string
          description: The account holder of the bank account
          example: Sven Hannawald
        bankName:
          type: string
          description: Name of the bank
          example: Deutsche Bank
        iban:
          type: string
          description: Iban of the clients account
          example: DE91 1000 0000 0123 4567 89
        bic:
          type: string
          description: Bic of the clients account
          example: DEUTDEFFXXX
        requireSignature:
          type: boolean
          description: Is customer signature required to make amendment
          example: true
    CustomerMasterData:
      description: Representing customer master data
      properties:
        firstName:
          type: string
          description: First name of the customer
          example: Edgar
        lastName:
          type: string
          description: Surname of the customer
          example: Bullock
        gender:
          type: string
          description: Gender of the customer
          enum:
            - MALE
            - FEMALE
            - UNISEX
          example: MALE
          x-enumDescriptions:
            MALE: Male gender of the customer
            FEMALE: Female gender of the customer
            UNISEX: Unisex gender of the customer
        dateOfBirth:
          type: string
          format: date
          description: Birthday of the customer
          example: '1952-05-04'
        countryOfBirth:
          type: string
          format: ISO 3166-1
          description: Birth country of the customer
          example: DE
        customerTitle:
          type: string
          description: Title of the customer
          enum:
            - NONE
            - DR
            - PROF
          example: DR
          x-enumDescriptions:
            NONE: No title
            PROF: Professor title
            DR: Ph.D. title
      required:
        - customerTitle
        - dateOfBirth
        - firstName
        - gender
        - lastName
    OpenApiV1CustomerDataPendingAmendmentDtoCustomerMasterData:
      properties:
        id:
          type: integer
          format: int64
          description: Amendment proposal id
        firstName:
          type: string
          description: First name of the customer
          example: Edgar
        lastName:
          type: string
          description: Surname of the customer
          example: Bullock
        gender:
          type: string
          description: Gender of the customer
          enum:
            - MALE
            - FEMALE
            - UNISEX
          example: MALE
          x-enumDescriptions:
            MALE: Male gender of the customer
            FEMALE: Female gender of the customer
            UNISEX: Unisex gender of the customer
        dateOfBirth:
          type: string
          format: date
          description: Birthday of the customer
          example: '1952-05-04'
        countryOfBirth:
          type: string
          format: ISO 3166-1
          description: Birth country of the customer
          example: DE
        customerTitle:
          type: string
          description: Title of the customer
          enum:
            - NONE
            - DR
            - PROF
          example: DR
          x-enumDescriptions:
            NONE: No title
            PROF: Professor title
            DR: Ph.D. title
      required:
        - customerTitle
        - dateOfBirth
        - firstName
        - gender
        - lastName
    CustomerContactData:
      description: Representing customer contact data
      properties:
        email:
          type: string
          description: Email address of the customer
          example: email@example.com
        phonePrivate:
          type: string
          description: Private phone number of the customer
          example: +49 00000000
        phonePrivateMobile:
          type: string
          description: Private mobile phone number of the customer
          example: +49 00000000000
        phoneBusiness:
          type: string
          description: Business phone number of the customer
          example: +49 00000000
        phoneBusinessMobile:
          type: string
          description: Business mobile phone number of the customer
          example: +49 00000000000
    OpenApiV1CustomerDataPendingAmendmentDtoCustomerContactData:
      properties:
        id:
          type: integer
          format: int64
          description: Amendment proposal id
        email:
          type: string
          description: Email address of the customer
          example: email@example.com
        phonePrivate:
          type: string
          description: Private phone number of the customer
          example: +49 00000000
        phonePrivateMobile:
          type: string
          description: Private mobile phone number of the customer
          example: +49 00000000000
        phoneBusiness:
          type: string
          description: Business phone number of the customer
          example: +49 00000000
        phoneBusinessMobile:
          type: string
          description: Business mobile phone number of the customer
          example: +49 00000000000
    CustomerAddressData:
      description: Representing customer address data
      properties:
        street:
          type: string
          description: Street of the customer
          example: Am Bahnhof
        houseNumber:
          type: string
          description: Number of the customer's house
          example: '90'
        zipCode:
          type: string
          description: Zip code of the customer
          example: '12133'
        city:
          type: string
          description: City of the customer
          example: Munich
        countryCode:
          type: string
          format: ISO 3166-1
          description: Country of the customer
          example: DE
      required:
        - city
        - countryCode
        - houseNumber
        - street
        - zipCode
    OpenApiV1CustomerDataPendingAmendmentDtoCustomerAddressData:
      properties:
        id:
          type: integer
          format: int64
          description: Amendment proposal id
        street:
          type: string
          description: Street of the customer
          example: Am Bahnhof
        houseNumber:
          type: string
          description: Number of the customer's house
          example: '90'
        zipCode:
          type: string
          description: Zip code of the customer
          example: '12133'
        city:
          type: string
          description: City of the customer
          example: Munich
        countryCode:
          type: string
          format: ISO 3166-1
          description: Country of the customer
          example: DE
      required:
        - city
        - countryCode
        - houseNumber
        - street
        - zipCode
    CardNumberFormat:
      type: string
      default: DECIMAL
      description: Defines how card numbers are interpreted
      enum:
        - DECIMAL
        - HEX_MSB
        - HEX_LSB
    CustomerSearchRequest:
      description: Customer search request
      properties:
        firstName:
          type: string
          description: Substring of customer first name starts from beginning
          example: Edga
        lastName:
          type: string
          description: Substring of customer last name starts from beginning
          example: Bull
        email:
          type: string
          description: Customer email
          example: example@email.com
        dateOfBirth:
          type: string
          format: date
          description: Customer date of birth
          example: '1952-05-04'
        cardNumberFormat:
          $ref: '#/components/schemas/CardNumberFormat'
          default: DECIMAL
    BankAccount:
      description: Customer's bank account information
      properties:
        accountHolder:
          type: string
          description: The account holder of the bank account
          example: Sven Hannawald
        bankName:
          type: string
          description: Bank name of the customers
          example: Deutsche Bank
        bic:
          type: string
          description: Bic of the customers account
          example: DEUTDEFFXXX
        iban:
          type: string
          description: Iban of the customers account
          example: DE91 1000 0000 0123 4567 89
    Customer:
      description: Customer information
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the customer
          example: 1001
        customerNumber:
          type: string
          description: Customer number
          example: 1-12345
        firstName:
          type: string
          description: First name of the customer
          example: Edgar
        lastName:
          type: string
          description: Surname of the customer
          example: Bullock
        dateOfBirth:
          type: string
          format: date
          description: Birthday of the customer
          example: '1952-05-04'
        email:
          type: string
          description: Email address of the customer
          example: example@email.com
        gender:
          type: string
          description: Gender of the customer
          enum:
            - MALE
            - FEMALE
            - UNISEX
          example: MALE
          x-enumDescriptions:
            MALE: Male gender of the customer
            FEMALE: Female gender of the customer
            UNISEX: Unisex gender of the customer
        street:
          type: string
          description: Street of the customer
          example: Am Bahnhof
        houseNumber:
          type: string
          description: Number of the customer's house
          example: 89
        zipCode:
          type: string
          description: Zip code of the customer
          example: '12133'
        city:
          type: string
          description: City of the customer
          example: Munich
        country:
          type: string
          format: ISO 3166-1
          description: Country of the customer
          example: DE
        status:
          type: string
          description: Status of customer
          enum:
            - MEMBER
            - PROSPECT
            - FORMER_MEMBER
          example: MEMBER
          x-enumDescriptions:
            FORMER_MEMBER: Customer is a former member
            PROSPECT: Customer without contracts
            MEMBER: Customer with contracts attached
        cardNumbers:
          type: array
          deprecated: true
          description: >-
            UID list of the customer card numbers in expected format. (The new
            property to use is accessMediums)
          example:
            - '1290158199'
          items:
            type: string
        imageUrl:
          type: string
          description: Url with an image to download. It will expire after 15 minutes
          example: https://example.com
        phonePrivate:
          type: string
          description: Private phone number of the customer
          example: +49 30901820
        phonePrivateMobile:
          type: string
          description: Private mobile phone number of the customer
          example: +49 15223433333
        phoneBusiness:
          type: string
          description: Business phone number of the customer
          example: +49 30901820
        phoneBusinessMobile:
          type: string
          description: Business mobile phone number of the customer
          example: +49 15223433333
        idlePeriods:
          type: array
          description: List of customer's idle periods
          items:
            $ref: '#/components/schemas/CustomerIdlePeriod'
        bankAccount:
          $ref: '#/components/schemas/BankAccount'
        accessRefusal:
          type: boolean
          description: Indicates whether the customer has an access block currently
        uuid:
          type: string
          description: Customer's UUID
          example: 7be3932c-825b-4401-abff-29e9f9410bc7
        referralCode:
          type: string
          description: Customer's referral code
          example: 20J6N
        studioId:
          type: integer
          format: int64
          description: Studio ID of the customer
          example: 1238735970
        preferredLanguage:
          $ref: '#/components/schemas/Language'
        accessMediums:
          type: array
          description: List of access mediums of the customer
          items:
            $ref: '#/components/schemas/AccessMediumDto'
      required:
        - accessRefusal
        - id
        - status
    CustomerIdlePeriod:
      description: Idle period information
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the idle period
          example: 1000
        startDate:
          type: string
          format: date
          description: Start date of the idle period
          example: '2022-01-01'
        endDate:
          type: string
          format: date
          description: End date of the idle period
          example: '2022-10-01'
        reason:
          type: string
          description: Reason of the idle period
          example: Illness
        contract:
          $ref: '#/components/schemas/SimpleContract'
      required:
        - endDate
        - id
        - startDate
    Language:
      description: Basic language information
      properties:
        languageCode:
          type: string
          format: ISO 639-1
          description: The language code
          example: de
        countryCode:
          type: string
          format: ISO 3166-1
          description: The country code
          example: DE
      required:
        - languageCode
    SimpleContract:
      description: Contract information
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the contract
          example: 1000
        rateName:
          type: string
          description: Rate name for the contract
          example: Premium
      required:
        - id
        - rateName
    Term:
      description: Represents a term
      properties:
        value:
          type: integer
          format: int32
          description: The value of the term
          example: 2
        unit:
          type: string
          description: Represents a temporal unit
          enum:
            - DAY
            - WEEK
            - MONTH
            - YEAR
          example: WEEK
          x-enumDescriptions:
            MONTH: Represents month unit
            YEAR: Represents year unit
            WEEK: Represents a week unit
            DAY: Represents a day unit
      required:
        - unit
        - value
    TermWithMinutes:
      description: Represents a term with minutes
      properties:
        value:
          type: integer
          format: int32
          description: The value of the term with minutes
          example: 2
        unit:
          type: string
          description: Represents a temporal unit with minutes
          enum:
            - MINUTES
            - HOURS
            - DAY
            - WEEK
            - MONTH
            - YEAR
          example: WEEK
          x-enumDescriptions:
            MONTH: Represents month unit
            HOURS: Represents a hours unit
            YEAR: Represents year unit
            MINUTES: Represents a minutes unit
            WEEK: Represents week unit
            DAY: Represents day unit
      required:
        - unit
        - value
    TrialOfferConfig:
      description: The trial offer configuration
      properties:
        id:
          type: integer
          format: int64
          description: The id of the trial offer config
          example: 1
        name:
          type: string
          description: The name of the trial offer config
          example: Probeangebot
        preventMultipleBookingsTerm:
          $ref: '#/components/schemas/Term'
        contingent:
          type: integer
          format: int32
          description: How often a lead can book the trial offer
          example: 2
        confirmationOfBookingTerm:
          $ref: '#/components/schemas/TermWithMinutes'
        allowBookingForLeads:
          type: boolean
          description: Whether booking is allowed for leads
          example: true
        leadDataConfig:
          $ref: '#/components/schemas/TrialOfferLeadDataConfig'
      required:
        - allowBookingForLeads
        - contingent
        - id
        - leadDataConfig
        - name
        - preventMultipleBookingsTerm
    TrialOfferLeadDataConfig:
      description: The trial offer lead data configuration
      properties:
        trialOfferLeadDataConfigId:
          type: integer
          format: int64
          description: The ID of the trial offer lead data config
          example: 1
        genderMode:
          type: string
          description: Represents the mode of an input field
          enum:
            - INACTIVE
            - OPTIONAL
            - MANDATORY
          example: INACTIVE
          x-enumDescriptions:
            OPTIONAL: The input is optional
            INACTIVE: The input is disabled
            MANDATORY: The input is mandatory
        dateOfBirthMode:
          type: string
          description: Represents the mode of an input field
          enum:
            - INACTIVE
            - OPTIONAL
            - MANDATORY
          example: INACTIVE
          x-enumDescriptions:
            OPTIONAL: The input is optional
            INACTIVE: The input is disabled
            MANDATORY: The input is mandatory
        telephoneMode:
          type: string
          description: Represents the mode of an input field
          enum:
            - INACTIVE
            - OPTIONAL
            - MANDATORY
          example: INACTIVE
          x-enumDescriptions:
            OPTIONAL: The input is optional
            INACTIVE: The input is disabled
            MANDATORY: The input is mandatory
        addressMode:
          type: string
          description: Represents the mode of an input field
          enum:
            - INACTIVE
            - OPTIONAL
            - MANDATORY
          example: INACTIVE
          x-enumDescriptions:
            OPTIONAL: The input is optional
            INACTIVE: The input is disabled
            MANDATORY: The input is mandatory
      required:
        - addressMode
        - dateOfBirthMode
        - genderMode
        - telephoneMode
        - trialOfferLeadDataConfigId
    Class:
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the class
          example: 1001
        title:
          type: string
          description: Title of the class
          example: Mission Beach body
        type:
          type: string
          description: Defines whether a class is held in the studio or virtually
          enum:
            - STUDIO
            - STREAM
          example: STUDIO
        duration:
          type: integer
          format: int32
          description: Duration of the class in minutes
          example: 45
        category:
          type: string
          description: Category of the class
          example: Fitness
        description:
          type: string
          description: Description of the class
          example: Get your body ready for beaches
        imgUrl:
          type: string
          description: Image URL assigned to display this class
        bookable:
          type: boolean
          description: Whether this class can be booked
      required:
        - bookable
        - id
    TrialOfferClass:
      properties:
        trialOfferConfigId:
          type: integer
          format: int64
          description: Unique ID of the trial offer class
          example: 1
        trialOfferClass:
          $ref: '#/components/schemas/Class'
          description: Trial offer class
        id:
          type: integer
          format: int64
      required:
        - trialOfferClass
        - trialOfferConfigId
    TrialOfferClassesSlicedResult:
      properties:
        result:
          type: array
          description: List of trial offer classes
          items:
            $ref: '#/components/schemas/TrialOfferClass'
        hasNext:
          type: boolean
          description: True if there exists next data slice
          example: true
        offset:
          type: string
          description: Offset for next query
          example: '100'
      required:
        - hasNext
        - offset
        - result
    ClassSlot:
      description: Basic class slot information
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of a class slot
          example: 1001
        startDateTime:
          type: string
          format: date-time
          description: Class slot start date and time with zone
          example: 2022-06-22T08:00:00.000+02:00[Europe/Berlin]
        endDateTime:
          type: string
          format: date-time
          description: Class slot end date and time with zone
          example: 2022-06-22T09:00:00.000+02:00[Europe/Berlin]
        instructors:
          type: array
          description: List of instructors
          items:
            $ref: '#/components/schemas/Instructor'
        location:
          $ref: '#/components/schemas/Location'
        earliestBookingDateTime:
          type: string
          format: date-time
          description: Class slot earliest booking date and time with zone
          example: 2022-06-15T00:00:00.000+02:00[Europe/Berlin]
        latestBookingDateTime:
          type: string
          format: date-time
          description: Class slot latest booking date and time with zone
          example: 2022-06-15T23:59:59.999+02:00[Europe/Berlin]
        maxParticipants:
          type: integer
          format: int32
          description: Maximum participants allowed for a class slot
          example: 25
        maxWaitingListParticipants:
          type: integer
          format: int32
          description: Maximum number of waiting list participants allowed for a class slot
          example: 5
        bookedParticipants:
          type: integer
          format: int32
          description: Current number of booked participants of a class slot
          example: 25
        additionalParticipants:
          type: integer
          format: int32
          description: Additional participants added by the operator
          example: 5
        waitingListParticipants:
          type: integer
          format: int32
          description: Current number of waiting list participants of a class slot
          example: 2
      required:
        - additionalParticipants
        - id
    ClassSlotSlicedResult:
      properties:
        result:
          type: array
          description: List of class slots
          items:
            $ref: '#/components/schemas/ClassSlot'
        hasNext:
          type: boolean
          description: True if there exists next data slice
          example: true
        offset:
          type: string
          description: Offset for next query
          example: '100'
      required:
        - hasNext
        - offset
        - result
    Location:
      description: Represents location data
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the location
          example: 203
        name:
          type: string
          description: Name of the location
          example: Room 1
        description:
          type: string
          description: Description of the location
          example: Room located behind reception
      required:
        - id
        - name
    BookableAppointment:
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the bookable appointment
          example: 1001
        title:
          type: string
          description: Title of the bookable appointment
          example: Mission Beach body
        duration:
          type: integer
          format: int32
          description: Duration of the bookable appointment in minutes
          example: 45
        category:
          type: string
          description: Category of the bookable appointment
          example: Fitness
        description:
          type: string
          description: Description of the bookable appointment
          example: Get your body ready for beaches
        imgUrl:
          type: string
          description: Image URL assigned to display this bookable appointment
      required:
        - id
    BookableTrialOfferAppointment:
      properties:
        trialOfferConfigId:
          type: integer
          format: int64
          description: >-
            Unique ID of the trial offer configuration containing the bookable
            trial offer appointment
          example: 1
        trialOfferBookableAppointment:
          $ref: '#/components/schemas/BookableAppointment'
          description: Trial offer bookable appointment
        id:
          type: integer
          format: int64
      required:
        - trialOfferBookableAppointment
        - trialOfferConfigId
    BookableTrialOfferAppointmentsSlicedResult:
      properties:
        result:
          type: array
          description: List of bookable trial offer appointments
          items:
            $ref: '#/components/schemas/BookableTrialOfferAppointment'
        hasNext:
          type: boolean
          description: True if there exists next data slice
          example: true
        offset:
          type: string
          description: Offset for next query
          example: '100'
      required:
        - hasNext
        - offset
        - result
    BookableAppointmentSlot:
      properties:
        startDateTime:
          type: string
          format: date-time
          description: Start date time of the bookable appointment slot
          example: 2022-06-22T08:00:00.000+02:00[Europe/Berlin]
        endDateTime:
          type: string
          format: date-time
          description: End date time of the bookable appointment slot
          example: 2022-06-22T10:00:00.000+02:00[Europe/Berlin]
        instructors:
          type: array
          description: List of instructors
          items:
            $ref: '#/components/schemas/Instructor'
    TaxAdvisorExportDownload:
      description: Meta data about the tax advisor export like the download URL
      properties:
        fromDate:
          type: string
          format: date
          description: Bookings accounting date range start
          example: '2020-12-15'
        toDate:
          type: string
          format: date
          description: Bookings accounting date range end
          example: '2020-12-30'
        exportFileFormat:
          type: string
          description: The file format of the export
          enum:
            - JSON
            - CSV
            - XLSX
          example: JSON
          x-enumDescriptions:
            XLSX: Microsoft Excel
            CSV: Comma Separated Values
            JSON: JavaScript Object Notation
        exportFormat:
          type: string
          description: The export format of bookings
          enum:
            - SINGLE
            - AGGREGATED
          example: AGGREGATED
          x-enumDescriptions:
            SINGLE: Contains all bookings as a single unit
            AGGREGATED: Bookings are aggregated by account numbers
        exportLocale:
          type: string
          description: The locale of the export.
          enum:
            - ENGLISH
            - GERMAN
          example: ENGLISH
          x-enumDescriptions:
            ENGLISH: English
            GERMAN: German
        downloadUrl:
          type: string
          description: >-
            The download file URL of the export. It will expire after 15
            minutes.
      required:
        - downloadUrl
        - exportFileFormat
        - exportFormat
        - fromDate
        - toDate
    StudioUtilization:
      description: Studio utilization details
      properties:
        capacity:
          type: integer
          format: int32
          description: >-
            Maximum customers allowed into a facility, if set to null there is
            no capacity restriction
          example: 100
        count:
          type: integer
          format: int32
          description: >-
            Number of currently checked in customers of a facility, count can be
            higher than capacity
          example: 10
      required:
        - count
    LocalTime:
      properties:
        hour:
          type: integer
          format: int32
        minute:
          type: integer
          format: int32
        second:
          type: integer
          format: int32
        nano:
          type: integer
          format: int32
    StudioAccessCodeConfiguration:
      description: Studio access code configurations
      properties:
        enabled:
          type: boolean
          description: Whether or not the access code is enabled
    StudioInformation:
      description: General studio information visible for user
      properties:
        name:
          type: string
          description: Studio name
          example: Example studio
        description:
          type: string
          description: Studio description
          example: Example studio description
        email:
          type: string
          description: Studio email address
          example: operator@example.com
        logoUrl:
          type: string
          description: Url to studio logo
          example: https://example.com
        telephone:
          type: string
          description: Studio telephone
          example: 0831/6901234-10
        website:
          type: string
          description: Studio website url
          example: https://example.com
        openingHours:
          type: array
          description: Studio opening hours
          items:
            $ref: '#/components/schemas/StudioOpeningHours'
        street:
          type: string
          description: Studio address' street
          example: Kastanienallee
        houseNumber:
          type: string
          description: Studio address' house number
          example: '83'
        zip:
          type: string
          description: Studio address' zip code
          example: '84439'
        city:
          type: string
          description: Studio address' city
          example: Berlin
        country:
          type: string
          description: Studio address' country
          example: Germany
        countryCode:
          type: string
          format: ISO 3166-1
          description: Studio address' country code
          example: DE
        studioId:
          type: integer
          format: int64
          description: Studio Id
          example: 123
        accessCodeConfiguration:
          $ref: '#/components/schemas/StudioAccessCodeConfiguration'
      required:
        - accessCodeConfiguration
        - studioId
    StudioOpeningHours:
      properties:
        dayOfWeekFrom:
          type: string
          description: Start day of given range opening hours
          enum:
            - MONDAY
            - TUESDAY
            - WEDNESDAY
            - THURSDAY
            - FRIDAY
            - SATURDAY
            - SUNDAY
        dayOfWeekTo:
          type: string
          description: End day of given range opening hours
          enum:
            - MONDAY
            - TUESDAY
            - WEDNESDAY
            - THURSDAY
            - FRIDAY
            - SATURDAY
            - SUNDAY
        timeFrom:
          $ref: '#/components/schemas/LocalTime'
          description: Start hour of the range opening hours
        timeTo:
          $ref: '#/components/schemas/LocalTime'
          description: End hour of the range opening hours
    ContractMonthDayToPrice:
      description: >-
        Represents a mapping from a month day to a price for a contract (that
        month day).
      properties:
        monthDay:
          description: The month day of the month day to price mapping
          properties:
            month:
              type: string
              enum:
                - JANUARY
                - FEBRUARY
                - MARCH
                - APRIL
                - MAY
                - JUNE
                - JULY
                - AUGUST
                - SEPTEMBER
                - OCTOBER
                - NOVEMBER
                - DECEMBER
            monthValue:
              type: integer
              format: int32
            dayOfMonth:
              type: integer
              format: int32
        price:
          $ref: '#/components/schemas/Money'
      required:
        - monthDay
        - price
    ContractPaymentFrequency:
      description: Represents the payment frequency of a contract
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the payment frequency of a contract
          example: 203
        type:
          type: string
          description: Payment frequency type of a contract
          enum:
            - FREE
            - NON_RECURRING
            - RECURRING
            - MONTH_DAY
            - TERM_BASED
          example: FREE
          x-enumDescriptions:
            TERM_BASED: >-
              Represents that the contract payment frequency is based on terms,
              with a possibly individual price per term.
            NON_RECURRING: >-
              Represents that the contract payment frequency is non recurring,
              meaning only one payment is necessary here.
            FREE: Represents that the contract payment frequency is free of charge.
            RECURRING: >-
              Represents that the contract payment frequency is recurring,
              meaning that the payment will take place every term.
            MONTH_DAY: >-
              Represents that the contract payment frequency is based on month
              days, with a possibly individual price per month day.
        term:
          $ref: '#/components/schemas/Term'
        price:
          $ref: '#/components/schemas/Money'
          description: Base price, used only for payment frequencies of type RECURRING
        monthDaysToPrices:
          type: array
          description: >-
            Month day to prices list, used for contract payment frequency type
            MONTH_DAY
          items:
            $ref: '#/components/schemas/ContractMonthDayToPrice'
        termsToPrices:
          type: array
          description: >-
            Terms to prices list, used for contract payment frequency type
            TERM_BASED. Note that the price will become active AFTER the
            respective term has passed
          items:
            $ref: '#/components/schemas/ContractTermToPrice'
      required:
        - type
    ContractStatus:
      type: string
      description: The contracts desired or current status
      enum:
        - ACTIVE
        - INACTIVE
      example: ACTIVE
      x-enumDescriptions:
        ACTIVE: Identifies active contracts
        INACTIVE: Identifies inactive contracts
    ContractTermToPrice:
      description: Represents a mapping from a term to a price for a contract.
      properties:
        term:
          $ref: '#/components/schemas/Term'
        price:
          $ref: '#/components/schemas/Money'
      required:
        - price
        - term
    MembershipSelfServiceContractData:
      description: Contract information for customers main contracts
      properties:
        id:
          type: integer
          format: int64
          description: Id of the contract
          example: 1000
        startDate:
          type: string
          format: date
          description: Start date of the contract
          example: '2022-01-15'
        endDate:
          type: string
          format: date
          description: End date of the contract
          example: '2025-10-15'
        rateName:
          type: string
          description: Name of the contract rate
          example: Premium
        contractStatus:
          $ref: '#/components/schemas/ContractStatus'
        cancelationPeriod:
          $ref: '#/components/schemas/TimePeriod'
        cancelationStatus:
          type: string
          description: Cancelation status of the contract cancelation
          enum:
            - CANCELED
            - PENDING_VERIFICATION
          example: PENDING_VERIFICATION
        cancelationDate:
          type: string
          format: date
          description: Date the cancelation of the contract was or will be canceled
          example: '2023-01-25'
        cancelationReason:
          type: string
          description: Name of the reason why the contract was canceled
          example: Officially ordered studio closure
        price:
          type: number
          deprecated: true
          description: Base price of the contract
          example: 19.9
        priceDetails:
          $ref: '#/components/schemas/PriceDetails'
          description: Price details of the contract
        lastPossibleCancelationDate:
          type: string
          format: date
          description: Latest date the contract can be canceled
          example: '2023-01-25'
        availableCancelationDates:
          type: array
          description: dates the contract can be canceled to
          example:
            - '2023-01-25'
            - '2023-02-25'
          items:
            type: string
            format: date
      required:
        - cancelationStatus
        - contractStatus
        - endDate
        - id
        - price
        - priceDetails
        - rateName
        - startDate
    PriceDetails:
      description: Price details of the contract
      properties:
        basePrice:
          $ref: '#/components/schemas/Money'
          description: Base price of the contract
        currentPrice:
          $ref: '#/components/schemas/Money'
          description: >-
            Current price of the contract. This price takes into account any
            adjustments that have been made to the base price
        paymentFrequency:
          $ref: '#/components/schemas/ContractPaymentFrequency'
          description: Payment frequency of the contract
      required:
        - basePrice
        - currentPrice
        - paymentFrequency
    TimePeriod:
      description: Represents a time period
      properties:
        periodValue:
          type: integer
          format: int32
          description: Defines how many units a given period lasts
          example: 10
        periodUnit:
          type: string
          description: Unit of the period
          enum:
            - DAY
            - WEEK
            - MONTH
            - YEAR
          example: DAY
          x-enumDescriptions:
            MONTH: Represents month unit
            YEAR: Represents year unit
            WEEK: Represents a week unit
            DAY: Represents a day unit
      required:
        - periodUnit
        - periodValue
    IdlePeriodLists:
      description: Past idle period list or current and upcoming idle period list
      properties:
        pastIdlePeriods:
          type: array
          description: Past idle period list
          items:
            $ref: '#/components/schemas/IdlePeriod'
        currentAndUpcomingIdlePeriods:
          type: array
          description: Current and upcoming idle period list
          items:
            $ref: '#/components/schemas/IdlePeriod'
      required:
        - currentAndUpcomingIdlePeriods
        - pastIdlePeriods
    IdlePeriodConfiguration:
      description: Represents the configuration of an idle period
      properties:
        temporalUnit:
          type: string
          description: 'Represents the temporal unit of an idle period '
          enum:
            - DAY
            - WEEK
            - MONTH
          example: WEEK
          x-enumDescriptions:
            MONTH: >-
              Represents a monthly temporal unit of the idle period. Can be used
              for month pickers only. Supports only full months.
            WEEK: >-
              Represents a weekly temporal unit of the idle period. Can be used
              for week pickers only. Supports only full weeks.
            DAY: >-
              Represents a daily temporal unit of the idle period. Can be used
              for day pickers only.
        maxTerms:
          type: integer
          format: int32
          description: Maximum count of idle period terms
          example: 6
        firstPossibleStartDate:
          type: string
          format: date
          description: The first possible start date of the idle period
          example: '2023-08-01'
        nextPossibleStartDateOnly:
          type: boolean
          description: >-
            Whether the given first possible start date of the idle period is
            the only allowed start date
        idlePeriodFee:
          $ref: '#/components/schemas/Money'
        accessRefusal:
          type: boolean
          description: >-
            Whether the studio access is refused for the customer during the
            idle period
        idlePeriodReasons:
          type: array
          description: List of idle period reasons
          items:
            $ref: '#/components/schemas/IdlePeriodReason'
        idlePeriodCreationStatus:
          type: string
          description: Status of the amendment configuration.
          enum:
            - READ
            - CHANGES_REQUIRE_VERIFICATION
            - CHANGES_WITHOUT_VERIFICATION
          example: CHANGES_REQUIRE_VERIFICATION
          x-enumDescriptions:
            READ: No changes to data are possible.
            CHANGES_REQUIRE_VERIFICATION: >-
              Data can be changed, but needs verification to be applied to the
              customer.
            CHANGES_WITHOUT_VERIFICATION: >-
              Data can be changed, will be applied to the customer with
              immediate effect.
        contractHasExtension:
          type: boolean
          description: Whether the idle period extends the original contract end date
      required:
        - accessRefusal
        - contractHasExtension
        - firstPossibleStartDate
        - idlePeriodCreationStatus
        - idlePeriodFee
        - idlePeriodReasons
        - maxTerms
        - nextPossibleStartDateOnly
        - temporalUnit
    IdlePeriodReason:
      description: Represents the reason of an idle period
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the idle period reason
          example: 203
        name:
          type: string
          description: Name of the idle period reason
          example: Vacation
        documentRequired:
          type: boolean
          description: Whether the idle period reason requires a document of proof
      required:
        - documentRequired
        - id
        - name
    AdditionalModule:
      description: Represents an additional module
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the additional module
          example: 203
        name:
          type: string
          description: Name of the additional module rate
          example: drink flat
        description:
          type: string
          description: Description of the additional module rate
          example: drink flat
        imageUrl:
          type: string
          description: Image url of the additional module
          example: https://www.image.com
        paymentFrequencies:
          type: array
          description: Payment frequencies of the additional module
          items:
            $ref: '#/components/schemas/AdditionalModulePaymentFrequency'
        termInformation:
          $ref: '#/components/schemas/TermInformation'
        trialPeriodConfig:
          $ref: '#/components/schemas/AdditionalModuleTrialPeriodConfig'
      required:
        - id
        - imageUrl
        - name
        - paymentFrequencies
        - termInformation
    AdditionalModuleExtension:
      description: Represents an additional module extension
      properties:
        extensionType:
          type: string
          description: Extension type of an additional module
          enum:
            - TERM_EXTENSION
            - NEW
          example: NEW
          x-enumDescriptions:
            TERM_EXTENSION: >-
              Represents that the additional module will be extended
              automatically as soon as cancelation period is over
            NEW: >-
              Represents that a new additional module will be created
              automatically as soon as cancelation period is over
        termExtension:
          $ref: '#/components/schemas/Term'
        extensionCancelationPeriod:
          $ref: '#/components/schemas/Term'
      required:
        - extensionType
    AdditionalModuleMonthDayToPrice:
      description: >-
        Represents a mapping from a month day to a price for an additional
        module (that month day).
      properties:
        monthDay:
          description: The month day of the month day to price mapping
          properties:
            month:
              type: string
              enum:
                - JANUARY
                - FEBRUARY
                - MARCH
                - APRIL
                - MAY
                - JUNE
                - JULY
                - AUGUST
                - SEPTEMBER
                - OCTOBER
                - NOVEMBER
                - DECEMBER
            monthValue:
              type: integer
              format: int32
            dayOfMonth:
              type: integer
              format: int32
        price:
          $ref: '#/components/schemas/Money'
      required:
        - monthDay
        - price
    AdditionalModulePaymentFrequency:
      description: Represents the payment frequency of an additional module
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the payment frequency of an additional module
          example: 203
        type:
          type: string
          description: Payment frequency type of an additional module
          enum:
            - FREE
            - NON_RECURRING
            - RECURRING
            - MONTH_DAY
            - TERM_BASED
          example: FREE
          x-enumDescriptions:
            TERM_BASED: >-
              Represents that the additional module payment frequency is based
              on terms, with a possibly individual price per term.
            NON_RECURRING: >-
              Represents that the additional module payment frequency is non
              recurring, meaning only one payment is necessary here.
            FREE: >-
              Represents that the additional module payment frequency is free of
              charge.
            RECURRING: >-
              Represents that the additional module payment frequency is
              recurring, meaning that the payment will take place every term.
            MONTH_DAY: >-
              Represents that the additional module payment frequency is based
              on month days, with a possibly individual price per month day.
        term:
          $ref: '#/components/schemas/Term'
        price:
          $ref: '#/components/schemas/Money'
          description: Base price, used only for payment frequencies of type RECURRING
        monthDaysToPrices:
          type: array
          description: >-
            Month day to prices list, used for additional module payment
            frequency type MONTH_DAY
          items:
            $ref: '#/components/schemas/AdditionalModuleMonthDayToPrice'
        termsToPrices:
          type: array
          description: >-
            Terms to prices list, used for additional module payment frequency
            type TERM_BASED. Note that the price will become active AFTER the
            respective term has passed
          items:
            $ref: '#/components/schemas/AdditionalModuleTermToPrice'
      required:
        - type
    AdditionalModuleTermToPrice:
      description: >-
        Represents a mapping from a term to a price mapping for an additional
        module
      properties:
        term:
          $ref: '#/components/schemas/Term'
        price:
          $ref: '#/components/schemas/Money'
      required:
        - price
        - term
    AdditionalModuleTrialPeriodConfig:
      description: Represents the trial period config of an additional module
      properties:
        term:
          $ref: '#/components/schemas/Term'
        description:
          type: string
          description: Description of the trial period config
          example: Test period for the drink flat
      required:
        - term
    TermInformation:
      description: Term information of the additional module
      properties:
        term:
          $ref: '#/components/schemas/Term'
        extension:
          $ref: '#/components/schemas/AdditionalModuleExtension'
        cancelationPeriod:
          $ref: '#/components/schemas/Term'
      required:
        - term
    AdditionalModuleContractExtended:
      description: Represents an additional module contract with extended data fields
      properties:
        name:
          type: string
          description: Name of the additional module contract
          example: drink flat
        price:
          $ref: '#/components/schemas/Money'
        startDate:
          type: string
          format: date
          description: Start date of the additional module contract
          example: '2022-01-15'
        endDate:
          type: string
          format: date
          description: End date of the additional module contract
          example: '2022-01-15'
        cancelationDate:
          type: string
          format: date
          description: Cancelation date of the additional module contract
          example: '2022-01-15'
        lastPossibleCancelationDate:
          type: string
          format: date
          description: Last possible cancelation date of the additional module contract
          example: '2022-01-15'
        cancelationReason:
          type: string
          description: Represents the reason of a contract cancelation
          example: Illness
        contractCancelationStatus:
          type: string
          description: Cancelation status of the contract cancelation
          enum:
            - CANCELED
            - PENDING_VERIFICATION
          example: PENDING_VERIFICATION
        contractCancelationCanBeWithdrawn:
          type: boolean
          description: >-
            Whether a contract cancelation for the additional module contract
            can be withdrawn
          example: true
        trialPeriod:
          $ref: '#/components/schemas/AdditionalModuleContractTrialPeriod'
          description: Represents the trial period of an additional module
        availableCancelationDates:
          type: array
          items:
            type: string
            format: date
      required:
        - contractCancelationCanBeWithdrawn
        - name
        - price
        - startDate
    AdditionalModuleContractTrialPeriod:
      description: Represents the trial period of an additional module contract
      properties:
        term:
          $ref: '#/components/schemas/Term'
        startDate:
          type: string
          format: date
          description: Trial period start date of an additional module contract
          example: '2022-01-15'
    ContractCancelationReason:
      description: contract cancelation reason information for studio
      properties:
        cancelationReasonId:
          type: integer
          format: int64
          description: Id of the contract cancelation reason
          example: 1000
        cancelationReasonName:
          type: string
          description: Name of the contract cancelation reason
          example: Officially ordered studio closure
      required:
        - cancelationReasonId
        - cancelationReasonName
    Device:
      properties:
        id:
          type: integer
          format: int64
          description: Device id
          example: 26
        name:
          type: string
          description: Device name
          example: Turnstile (left)
        active:
          type: boolean
          description: >-
            Device state. If the value is false then the device is inactive and
            must be activated before use
          example: false
        model:
          type: string
          description: Device model
          enum:
            - GENERIC_VENDING_READER
            - GENERIC_CARD_READER
          example: GENERIC_CARD_READER
      required:
        - active
    CustomerSlicedResult:
      properties:
        result:
          type: array
          description: List of customers
          items:
            $ref: '#/components/schemas/Customer'
        hasNext:
          type: boolean
          description: True if there exists next data slice
          example: true
        offset:
          type: string
          description: Offset for next query
          example: '100'
        lastOffsetId:
          type: integer
          format: int64
          deprecated: true
          description: Last ID of customer from last slice
          example: 100
      required:
        - hasNext
        - lastOffsetId
        - offset
        - result
    OpenApiV1CustomerDataDtoCustomerPaymentData:
      properties:
        accountHolder:
          type: string
          description: The account holder of the bank account
          example: Sven Hannawald
        bankName:
          type: string
          description: Name of the bank
          example: Deutsche Bank
        iban:
          type: string
          description: Iban of the clients account
          example: DE91 1000 0000 0123 4567 89
        bic:
          type: string
          description: Bic of the clients account
          example: DEUTDEFFXXX
        requireSignature:
          type: boolean
          description: Is customer signature required to make amendment
          example: true
        amendmentConfigurationStatus:
          type: string
          description: Status of the amendment configuration.
          enum:
            - READ
            - CHANGES_REQUIRE_VERIFICATION
            - CHANGES_WITHOUT_VERIFICATION
          example: CHANGES_REQUIRE_VERIFICATION
          x-enumDescriptions:
            READ: No changes to data are possible.
            CHANGES_REQUIRE_VERIFICATION: >-
              Data can be changed, but needs verification to be applied to the
              customer.
            CHANGES_WITHOUT_VERIFICATION: >-
              Data can be changed, will be applied to the customer with
              immediate effect.
        pendingAmendment:
          $ref: >-
            #/components/schemas/OpenApiV1CustomerDataPendingAmendmentDtoCustomerPaymentData
          description: Pending amendment
      required:
        - amendmentConfigurationStatus
    OpenApiV1CustomerDataDtoCustomerMasterData:
      properties:
        firstName:
          type: string
          description: First name of the customer
          example: Edgar
        lastName:
          type: string
          description: Surname of the customer
          example: Bullock
        gender:
          type: string
          description: Gender of the customer
          enum:
            - MALE
            - FEMALE
            - UNISEX
          example: MALE
          x-enumDescriptions:
            MALE: Male gender of the customer
            FEMALE: Female gender of the customer
            UNISEX: Unisex gender of the customer
        dateOfBirth:
          type: string
          format: date
          description: Birthday of the customer
          example: '1952-05-04'
        countryOfBirth:
          type: string
          format: ISO 3166-1
          description: Birth country of the customer
          example: DE
        customerTitle:
          type: string
          description: Title of the customer
          enum:
            - NONE
            - DR
            - PROF
          example: DR
          x-enumDescriptions:
            NONE: No title
            PROF: Professor title
            DR: Ph.D. title
        amendmentConfigurationStatus:
          type: string
          description: Status of the amendment configuration.
          enum:
            - READ
            - CHANGES_REQUIRE_VERIFICATION
            - CHANGES_WITHOUT_VERIFICATION
          example: CHANGES_REQUIRE_VERIFICATION
          x-enumDescriptions:
            READ: No changes to data are possible.
            CHANGES_REQUIRE_VERIFICATION: >-
              Data can be changed, but needs verification to be applied to the
              customer.
            CHANGES_WITHOUT_VERIFICATION: >-
              Data can be changed, will be applied to the customer with
              immediate effect.
        pendingAmendment:
          $ref: >-
            #/components/schemas/OpenApiV1CustomerDataPendingAmendmentDtoCustomerMasterData
          description: Pending amendment
      required:
        - amendmentConfigurationStatus
        - customerTitle
        - dateOfBirth
        - firstName
        - gender
        - lastName
    OpenApiV1CustomerDataDtoCustomerContactData:
      properties:
        email:
          type: string
          description: Email address of the customer
          example: email@example.com
        phonePrivate:
          type: string
          description: Private phone number of the customer
          example: +49 00000000
        phonePrivateMobile:
          type: string
          description: Private mobile phone number of the customer
          example: +49 00000000000
        phoneBusiness:
          type: string
          description: Business phone number of the customer
          example: +49 00000000
        phoneBusinessMobile:
          type: string
          description: Business mobile phone number of the customer
          example: +49 00000000000
        amendmentConfigurationStatus:
          type: string
          description: Status of the amendment configuration.
          enum:
            - READ
            - CHANGES_REQUIRE_VERIFICATION
            - CHANGES_WITHOUT_VERIFICATION
          example: CHANGES_REQUIRE_VERIFICATION
          x-enumDescriptions:
            READ: No changes to data are possible.
            CHANGES_REQUIRE_VERIFICATION: >-
              Data can be changed, but needs verification to be applied to the
              customer.
            CHANGES_WITHOUT_VERIFICATION: >-
              Data can be changed, will be applied to the customer with
              immediate effect.
        pendingAmendment:
          $ref: >-
            #/components/schemas/OpenApiV1CustomerDataPendingAmendmentDtoCustomerContactData
          description: Pending amendment
      required:
        - amendmentConfigurationStatus
    OpenApiV1CustomerDataDtoCustomerAddressData:
      properties:
        street:
          type: string
          description: Street of the customer
          example: Am Bahnhof
        houseNumber:
          type: string
          description: Number of the customer's house
          example: '90'
        zipCode:
          type: string
          description: Zip code of the customer
          example: '12133'
        city:
          type: string
          description: City of the customer
          example: Munich
        countryCode:
          type: string
          format: ISO 3166-1
          description: Country of the customer
          example: DE
        amendmentConfigurationStatus:
          type: string
          description: Status of the amendment configuration.
          enum:
            - READ
            - CHANGES_REQUIRE_VERIFICATION
            - CHANGES_WITHOUT_VERIFICATION
          example: CHANGES_REQUIRE_VERIFICATION
          x-enumDescriptions:
            READ: No changes to data are possible.
            CHANGES_REQUIRE_VERIFICATION: >-
              Data can be changed, but needs verification to be applied to the
              customer.
            CHANGES_WITHOUT_VERIFICATION: >-
              Data can be changed, will be applied to the customer with
              immediate effect.
        pendingAmendment:
          $ref: >-
            #/components/schemas/OpenApiV1CustomerDataPendingAmendmentDtoCustomerAddressData
          description: Pending amendment
      required:
        - amendmentConfigurationStatus
        - city
        - countryCode
        - houseNumber
        - street
        - zipCode
    Contract:
      description: Contract information
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the contract
          example: 1000
        createdDate:
          type: string
          format: date
          description: Creation date of the contract
          example: '2022-01-01'
        startDate:
          type: string
          format: date
          description: Start date of the contract
          example: '2022-01-01'
        endDate:
          type: string
          format: date
          description: End date of the contract
          example: '2022-10-01'
        rateName:
          type: string
          description: Rate name for the contract
          example: Premium
        contractStatus:
          $ref: '#/components/schemas/ContractStatus'
        cancellationPeriod:
          $ref: '#/components/schemas/TimePeriod'
        cancelled:
          type: boolean
          description: >-
            Defines whether or not the current active contract has been
            cancelled
        cancellationDate:
          type: string
          format: date
          description: Contract cancellation date
          example: '2022-10-10'
        cancellationReceiptDate:
          type: string
          format: date
          description: Contract cancellation receipt date
          example: '2022-10-10'
        cancellationReason:
          type: string
          description: Reason of the contract cancellation
          example: Officially ordered studio closure
        price:
          type: number
          deprecated: true
          description: Base price of the contract
          example: 19.9
        priceDetails:
          $ref: '#/components/schemas/PriceDetails'
          description: Price details of the contract
        lastPossibleCancellationDate:
          type: string
          format: date
          description: Latest date when the contract can be cancelled
        term:
          $ref: '#/components/schemas/TimePeriod'
        extensionTerm:
          $ref: '#/components/schemas/TimePeriod'
        flatFeeContracts:
          type: array
          description: List of flat fee contracts
          items:
            $ref: '#/components/schemas/SubContract'
        moduleContracts:
          type: array
          description: List of module contracts
          items:
            $ref: '#/components/schemas/SubContract'
        signedDocumentUrl:
          type: string
          description: >-
            Url to download the contract related document. It will expire after
            15 minutes
      required:
        - cancelled
        - contractStatus
        - createdDate
        - endDate
        - extensionTerm
        - id
        - lastPossibleCancellationDate
        - price
        - priceDetails
        - rateName
        - startDate
        - term
    SubContract:
      description: Subcontract of the parent contract
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the contract
        rateName:
          type: string
          description: Rate name for the contract
          example: Regular
        startDate:
          type: string
          format: date
          description: Start date of the contract
        endDate:
          type: string
          format: date
          description: End date of contract
        paymentFrequency:
          type: string
          description: Type of payment frequency
          enum:
            - NON_RECURRING
            - RECURRING
            - MONTH_DAY
            - TERM_BASED
            - FREE
        price:
          type: number
          deprecated: true
          description: Base price of the contract
          example: 19.9
        priceDetails:
          $ref: '#/components/schemas/PriceDetails'
          description: Price details of the contract
        cancelled:
          type: boolean
          description: >-
            Defines whether or not the current active contract has been
            cancelled
        cancellationDate:
          type: string
          format: date
          description: Contract cancellation date
          example: '2022-10-10'
        cancellationReceiptDate:
          type: string
          format: date
          description: Contract cancellation receipt date
          example: '2022-10-10'
        contractStatus:
          $ref: '#/components/schemas/ContractStatus'
      required:
        - cancelled
        - contractStatus
        - id
        - paymentFrequency
        - price
        - priceDetails
        - rateName
        - startDate
    BenefitValidationDto:
      description: Validation result of benefits
      properties:
        key:
          type: string
          description: Benefit key
          example: BENEFIT_KEY
        valid:
          type: boolean
          description: Validation result
          example: false
      required:
        - key
        - valid
    CustomerCheckin:
      description: Data of one checkin entry for a customer
      properties:
        checkinId:
          type: integer
          format: int64
          description: Unique ID of the studio visit
          example: 1001
        checkInDateTime:
          type: string
          format: date-time
          description: Check in time of the studio visit in ISO-8601
          example: '2023-12-03T10:15:30+01:00'
        checkOutDateTime:
          type: string
          format: date-time
          description: Check out time of the studio visit  ISO-8601
          example: '2023-12-03T10:16:30+01:00'
        studioId:
          type: integer
          format: int64
          description: Studio ID of the checkin studio
          example: 123
        studioName:
          type: string
          description: Studio name of the checkin studio
          example: Example studio
      required:
        - checkinId
    CustomerCheckinSlicedResult:
      properties:
        result:
          type: array
          description: List of checkins
          items:
            $ref: '#/components/schemas/CustomerCheckin'
        hasNext:
          type: boolean
          description: True if there exists next data slice
          example: true
        offset:
          type: string
          description: Offset for next query
          example: '100'
      required:
        - hasNext
        - offset
        - result
    BookingEntry:
      description: Data of one booking entry for a customer
      properties:
        id:
          type: integer
          format: int64
          description: The internal id of the entry
        dueDate:
          type: string
          format: date
          description: Date to booking is/was to be paid
        description:
          type: string
          description: Description of the booking
        amount:
          $ref: '#/components/schemas/Money'
        openAmount:
          $ref: '#/components/schemas/Money'
        installmentPlan:
          type: boolean
          description: Whether or not the booking was transferred into an installment plan
      required:
        - dueDate
        - id
        - installmentPlan
    BookingEntrySlicedResult:
      description: Slice of booking entries
      properties:
        result:
          type: array
          description: List of booking entries
          items:
            $ref: '#/components/schemas/BookingEntry'
        hasNext:
          type: boolean
          description: True if there exists next data slice
          example: true
        offset:
          type: string
          description: Offset for next query
          example: '100'
      required:
        - hasNext
        - offset
        - result
    CustomerAccountBalance:
      description: Account balance data of the customer
      properties:
        accountBalance:
          $ref: '#/components/schemas/Money'
        consumptionCredit:
          $ref: '#/components/schemas/Money'
        dunningLevel:
          type: string
          description: The dunning level of the customer
          example: Dunning Level 1
        inDebtCollection:
          type: boolean
          description: >-
            Whether the customers open debt claims where transferred to a debt
            collection agency
      required:
        - inDebtCollection
    CustomerAccessCode:
      description: Customer's access code
      properties:
        format:
          type: string
          description: >-
            Represents an access code format the content should be encoded into
            or decoded from
          enum:
            - QR_CODE
          example: QR_CODE
          x-enumDescriptions:
            QR_CODE: QR code format
        expiresAt:
          type: string
          format: date-time
          description: Access code expiry date and time with zone
          example: '2024-06-13T10:33:00Z'
        content:
          type: string
          description: >-
            Access code content that should be rendered in a format defined by
            the format property
          example: '0049267681211943991'
      required:
        - content
        - format
    Measurement:
      description: Measurement information
      properties:
        id:
          type: integer
          format: int64
          description: Unique ID of the customer
          example: 1001
        firstName:
          type: string
          description: First name of the customer
          example: Edgar
        lastName:
          type: string
          description: Surname of the customer
          example: Bullock
        age:
          type: integer
          format: int32
          description: Age of the customer
          example: 16
        dateOfBirth:
          type: string
          format: date
          description: Birthday of the customer
          example: '2000-01-01'
        gender:
          type: string
          description: Gender of the customer
          enum:
            - MALE
            - FEMALE
            - UNISEX
          example: MALE
          x-enumDescriptions:
            MALE: Male gender of the customer
            FEMALE: Female gender of the customer
            UNISEX: Unisex gender of the customer
        height:
          type: number
          description: Height of the customer
          example: 180.2
      required:
        - id
    ClassSlicedResult:
      properties:
        result:
          type: array
          description: List of classes
          items:
            $ref: '#/components/schemas/Class'
        hasNext:
          type: boolean
          description: True if there exists next data slice
          example: true
        offset:
          type: string
          description: Offset for next query
          example: '100'
      required:
        - hasNext
        - offset
        - result
    AppointmentBookingResultWithCustomerId:
      description: Represents successful booking, which contains an additional customer id
      properties:
        bookingId:
          type: integer
          format: int64
          description: Unique ID of the appointment booking
          example: 2033
        bookingStatus:
          type: string
          description: Status of the appointment booking
          enum:
            - BOOKED
            - CANCELED
          example: BOOKED
          x-enumDescriptions:
            BOOKED: Customer is successfully booked
            CANCELED: Customer booking is canceled
        startDateTime:
          type: string
          format: date-time
          description: Start date and time of the appointment booking
        endDateTime:
          type: string
          format: date-time
          description: End date and time of the appointment booking
        title:
          type: string
          description: Title of the appointment booking
          example: Mission Beach body
        duration:
          type: integer
          format: int32
          description: Duration of the appointment booking in minutes
          example: 45
        category:
          type: string
          description: Category of the appointment booking
          example: Fitness
        description:
          type: string
          description: Description of the appointment booking
          example: Get your body ready for beaches
        imgUrl:
          type: string
          description: Image URL assigned to display this appointment booking
        instructors:
          type: array
          description: Instructors list of the appointment booking
          items:
            $ref: '#/components/schemas/Instructor'
        appointmentStatus:
          type: string
          description: The status of an appointment
          enum:
            - PLANNED
            - CANCELED
            - COMPLETED
          example: COMPLETED
          x-enumDescriptions:
            COMPLETED: The appointment is completed.
            CANCELED: The appointment is canceled.
            PLANNED: The appointment is planned.
        participantStatus:
          type: string
          description: The status of a participant
          enum:
            - PARTICIPATING
            - NOT_PARTICIPATING
            - UNSET
          example: PARTICIPATING
          x-enumDescriptions:
            PARTICIPATING: The customer is participating.
            UNSET: The participation status is not set.
            NOT_PARTICIPATING: The customer is not participating.
        customerId:
          type: integer
          format: int64
          description: Unique ID of the customer
          example: 1234
      required:
        - appointmentStatus
        - bookingId
        - bookingStatus
        - customerId
        - endDateTime
        - participantStatus
        - startDateTime
    BookableAppointmentSlicedResult:
      properties:
        result:
          type: array
          description: List of bookable appointments
          items:
            $ref: '#/components/schemas/BookableAppointment'
        hasNext:
          type: boolean
          description: True if there exists next data slice
          example: true
        offset:
          type: string
          description: Offset for next query
          example: '100'
      required:
        - hasNext
        - offset
        - result
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      description: API key received from our team
      name: X-API-KEY
      in: header
