openapi: 3.0.3
info:
  version: ''
  title: Continuity-Service
  description: >-
    REST service to maintain Retarus Email Continuity mailboxes and control
    failover routing
externalDocs:
  description: Find out more about Retarus Email Continuity
  url: https://www.retarus.com/services/email-infrastructure/email-continuity/
servers:
  - url: https://api.retarus.com/email/continuity/v2/
    description: Public Endpoint
tags:
  - name: Customer
    description: >-
      Bulk request, update or delete user information for all users belonging to
      the {CUSTOMER} number specified in the path of a request
  - name: Customer Flag
    description: >-
      Update or delete flag for all users belonging to the {CUSTOMER} number
      specified in the path of a request, e.g. activate the Email Continuity
      failover or access to the web mailbox for all users
  - name: User
    description: >-
      Request, update or delete user information for a single user belonging to
      the {CUSTOMER} number specified in the path of a request
  - name: User Flag
    description: >-
      Update or delete flag for a single user belonging to the {CUSTOMER} number
      specified in the path of a request, e.g. activate the Email Continuity
      failover or the access to the web mailbox
  - name: Token
    description: >-
      Request a security token required for account activation and password
      reset
  - name: Password
    description: Update user password using a security token
paths:
  /{CUSTOMER}:
    head:
      summary: >-
        Request user count information for all users belonging to the {CUSTOMER}
        specified in the URL path
      tags:
        - Customer
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
        - $ref: '#/components/parameters/activationFlag'
        - $ref: '#/components/parameters/accessFlag'
        - $ref: '#/components/parameters/failoverFlag'
        - $ref: '#/components/parameters/failoverGroups'
      responses:
        '200':
          description: OK
          headers:
            User-Count:
              description: The number of users belonging to the customer
              required: true
              schema:
                type: integer
                minimum: 0
        '400':
          description: Invalid parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
    get:
      summary: >-
        Request user information for all users belonging to the {CUSTOMER}
        specified in the URL path
      tags:
        - Customer
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
        - $ref: '#/components/parameters/activationFlag'
        - $ref: '#/components/parameters/accessFlag'
        - $ref: '#/components/parameters/failoverFlag'
        - $ref: '#/components/parameters/offset'
        - $ref: '#/components/parameters/size'
        - $ref: '#/components/parameters/failoverGroups'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - timestamp
                  - offset
                  - size
                  - filter
                  - total
                  - count
                  - users
                properties:
                  id:
                    type: string
                  timestamp:
                    type: string
                  offset:
                    type: integer
                    minimum: 0
                  size:
                    type: integer
                    minimum: 0
                  filter:
                    type: object
                    required:
                      - activation
                      - access
                      - failover
                    properties:
                      activation:
                        type: boolean
                      access:
                        type: boolean
                      failover:
                        type: boolean
                  total:
                    type: integer
                    minimum: 0
                  count:
                    type: integer
                    minimum: 0
                  users:
                    type: array
                    items:
                      type: object
                      required:
                        - customer
                        - domain
                        - user
                        - displayName
                        - givenName
                        - surName
                        - language
                        - timezone
                        - status
                      properties:
                        customer:
                          $ref: '#/components/schemas/customer'
                        domain:
                          $ref: '#/components/schemas/domain_v2'
                        user:
                          $ref: '#/components/schemas/user_v2'
                        displayName:
                          $ref: '#/components/schemas/displayName'
                        givenName:
                          $ref: '#/components/schemas/givenName'
                        surName:
                          $ref: '#/components/schemas/surName'
                        language:
                          $ref: '#/components/schemas/language'
                        timezone:
                          $ref: '#/components/schemas/timezone'
                        department:
                          $ref: '#/components/schemas/department_v2'
                        costcenter:
                          $ref: '#/components/schemas/costcenter_v2'
                        phone:
                          $ref: '#/components/schemas/phone'
                        mobile:
                          $ref: '#/components/schemas/mobile'
                        failoverGroups:
                          $ref: '#/components/schemas/failoverGroups'
                        status:
                          type: object
                          required:
                            - activation
                            - access
                            - failover
                          properties:
                            activation:
                              type: boolean
                            access:
                              type: boolean
                            failover:
                              type: boolean
        '400':
          description: Invalid parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
    put:
      summary: >-
        Create several users belonging to the {CUSTOMER} specified in the URL
        path
      tags:
        - Customer
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
        - $ref: '#/components/parameters/mailNotification'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                required:
                  - user
                  - displayName
                  - givenName
                  - surName
                additionalProperties: false
                properties:
                  user:
                    $ref: '#/components/schemas/user_v2'
                  displayName:
                    $ref: '#/components/schemas/displayName'
                  givenName:
                    $ref: '#/components/schemas/givenName'
                  surName:
                    $ref: '#/components/schemas/surName'
                  language:
                    $ref: '#/components/schemas/language'
                  timezone:
                    $ref: '#/components/schemas/timezone'
                  department:
                    $ref: '#/components/schemas/department_v2'
                  costcenter:
                    $ref: '#/components/schemas/costcenter_v2'
                  phone:
                    $ref: '#/components/schemas/phone'
                  mobile:
                    $ref: '#/components/schemas/mobile'
                  failoverGroups:
                    $ref: '#/components/schemas/failoverGroups'
              minItems: 1
              maxItems: 1000
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - timestamp
                  - count
                  - users
                properties:
                  id:
                    type: string
                  timestamp:
                    type: string
                  count:
                    type: integer
                    minimum: 0
                  users:
                    type: array
                    items:
                      $ref: '#/components/schemas/user_v2'
        '400':
          description: >-
            Unknown encoding OR Invalid JSON request OR Invalid API request OR
            Invalid user, domain {DOMAIN} does not belong to customer {CUSTOMER}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '413':
          description: Batch size too large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
    patch:
      summary: >-
        Update existing users belonging to the {CUSTOMER} specified in the URL
        path
      tags:
        - Customer
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                required:
                  - user
                minProperties: 2
                additionalProperties: false
                properties:
                  user:
                    $ref: '#/components/schemas/user_v2'
                  displayName:
                    $ref: '#/components/schemas/displayName'
                  givenName:
                    $ref: '#/components/schemas/givenName'
                  surName:
                    $ref: '#/components/schemas/surName'
                  language:
                    $ref: '#/components/schemas/language'
                  timezone:
                    $ref: '#/components/schemas/timezone'
                  department:
                    $ref: '#/components/schemas/department_v2'
                  costcenter:
                    $ref: '#/components/schemas/costcenter_v2'
                  phone:
                    $ref: '#/components/schemas/phone'
                  mobile:
                    $ref: '#/components/schemas/mobile'
                  failoverGroups:
                    $ref: '#/components/schemas/failoverGroups'
              minItems: 1
              maxItems: 1000
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - timestamp
                  - count
                  - users
                properties:
                  id:
                    type: string
                  timestamp:
                    type: string
                  count:
                    type: integer
                    minimum: 0
                  users:
                    type: array
                    items:
                      $ref: '#/components/schemas/user_v2'
        '400':
          description: >-
            Unknown encoding OR Invalid JSON request OR Invalid API request OR
            Invalid user, domain {DOMAIN} does not belong to customer {CUSTOMER}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '413':
          description: Batch size too large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
    delete:
      summary: Delete existing users
      tags:
        - Customer
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/user_v2'
              minItems: 1
              maxItems: 1000
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - timestamp
                  - count
                  - users
                properties:
                  id:
                    type: string
                  timestamp:
                    type: string
                  count:
                    type: integer
                    minimum: 0
                  users:
                    type: array
                    items:
                      $ref: '#/components/schemas/user_v2'
        '400':
          description: >-
            Unknown encoding OR Invalid JSON request OR Invalid API request OR
            Invalid user, domain {DOMAIN} does not belong to customer {CUSTOMER}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '413':
          description: Batch size too large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
  /{CUSTOMER}/{FLAG}:
    put:
      summary: >-
        Set flag for all users belonging to the {CUSTOMER} specified in the URL
        path
      tags:
        - Customer Flag
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
        - $ref: '#/components/parameters/v2_FLAG'
        - $ref: '#/components/parameters/failoverGroups'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - timestamp
                  - affectedUsers
                properties:
                  id:
                    type: string
                  timestamp:
                    type: string
                  affectedUsers:
                    type: integer
                    minimum: 0
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
    delete:
      summary: >-
        Remove flag for all users belonging to the {CUSTOMER} specified in the
        URL path
      tags:
        - Customer Flag
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
        - $ref: '#/components/parameters/v2_FLAG'
        - $ref: '#/components/parameters/failoverGroups'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - timestamp
                  - affectedUsers
                properties:
                  id:
                    type: string
                  timestamp:
                    type: string
                  affectedUsers:
                    type: integer
                    minimum: 0
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
  /{CUSTOMER}/{USER}:
    get:
      summary: Request user information
      tags:
        - User
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
        - $ref: '#/components/parameters/USER'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - timestamp
                  - user
                properties:
                  id:
                    type: string
                  timestamp:
                    type: string
                  user:
                    type: object
                    required:
                      - customer
                      - domain
                      - user
                      - displayName
                      - givenName
                      - surName
                      - language
                      - timezone
                      - status
                    properties:
                      customer:
                        $ref: '#/components/schemas/customer'
                      domain:
                        $ref: '#/components/schemas/domain_v2'
                      user:
                        $ref: '#/components/schemas/user_v2'
                      displayName:
                        $ref: '#/components/schemas/displayName'
                      givenName:
                        $ref: '#/components/schemas/givenName'
                      surName:
                        $ref: '#/components/schemas/surName'
                      language:
                        $ref: '#/components/schemas/language'
                      timezone:
                        $ref: '#/components/schemas/timezone'
                      department:
                        $ref: '#/components/schemas/department_v2'
                      costcenter:
                        $ref: '#/components/schemas/costcenter_v2'
                      phone:
                        $ref: '#/components/schemas/phone'
                      mobile:
                        $ref: '#/components/schemas/mobile'
                      failoverGroups:
                        $ref: '#/components/schemas/failoverGroups'
                      status:
                        type: object
                        required:
                          - activation
                          - access
                          - failover
                        properties:
                          activation:
                            type: boolean
                          access:
                            type: boolean
                          failover:
                            type: boolean
        '400':
          description: Invalid user, domain does not belong to customer {CUSTOMER}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
    put:
      summary: Create new user
      tags:
        - User
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
        - $ref: '#/components/parameters/USER'
        - $ref: '#/components/parameters/mailNotification'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - displayName
                - givenName
                - surName
              additionalProperties: false
              properties:
                displayName:
                  $ref: '#/components/schemas/displayName'
                givenName:
                  $ref: '#/components/schemas/givenName'
                surName:
                  $ref: '#/components/schemas/surName'
                language:
                  $ref: '#/components/schemas/language'
                timezone:
                  $ref: '#/components/schemas/timezone'
                department:
                  $ref: '#/components/schemas/department_v2'
                costcenter:
                  $ref: '#/components/schemas/costcenter_v2'
                phone:
                  $ref: '#/components/schemas/phone'
                mobile:
                  $ref: '#/components/schemas/mobile'
                failoverGroups:
                  $ref: '#/components/schemas/failoverGroups'
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - timestamp
                properties:
                  id:
                    type: string
                  timestamp:
                    type: string
        '400':
          description: >-
            Unknown encoding OR Invalid JSON request OR Invalid API request OR
            Invalid user, domain does not belong to customer {CUSTOMER} OR
            Invalid user address. Reason: address does not match pattern OR
            Invalid user address. Reason: address too long
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '409':
          description: User conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
    patch:
      summary: Update existing user
      tags:
        - User
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
        - $ref: '#/components/parameters/USER'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              minProperties: 1
              additionalProperties: false
              properties:
                displayName:
                  $ref: '#/components/schemas/displayName'
                givenName:
                  $ref: '#/components/schemas/givenName'
                surName:
                  $ref: '#/components/schemas/surName'
                language:
                  $ref: '#/components/schemas/language'
                timezone:
                  $ref: '#/components/schemas/timezone'
                department:
                  $ref: '#/components/schemas/department_v2'
                costcenter:
                  $ref: '#/components/schemas/costcenter_v2'
                phone:
                  $ref: '#/components/schemas/phone'
                mobile:
                  $ref: '#/components/schemas/mobile'
                failoverGroups:
                  $ref: '#/components/schemas/failoverGroups'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - timestamp
                properties:
                  id:
                    type: string
                  timestamp:
                    type: string
        '400':
          description: >-
            Unknown encoding OR Invalid JSON request OR Invalid API request OR
            Invalid user, domain does not belong to customer {CUSTOMER}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
    delete:
      summary: Delete existing user
      tags:
        - User
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
        - $ref: '#/components/parameters/USER'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - timestamp
                properties:
                  id:
                    type: string
                  timestamp:
                    type: string
        '400':
          description: >-
            Unknown encoding OR Invalid JSON request OR Invalid API request OR
            Invalid user, domain does not belong to customer {CUSTOMER}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
  /{CUSTOMER}/{USER}/{FLAG}:
    put:
      summary: Set flag for a single user
      tags:
        - User Flag
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
        - $ref: '#/components/parameters/USER'
        - $ref: '#/components/parameters/v2_FLAG'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - timestamp
                properties:
                  id:
                    type: string
                  timestamp:
                    type: string
        '400':
          description: >-
            Unknown encoding OR Invalid JSON request OR Invalid API request OR
            Invalid user, domain does not belong to customer {CUSTOMER} OR User
            not activated OR Access not granted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
    delete:
      summary: Remove flag for a single user
      tags:
        - User Flag
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
        - $ref: '#/components/parameters/USER'
        - $ref: '#/components/parameters/v2_FLAG'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - timestamp
                properties:
                  id:
                    type: string
                  timestamp:
                    type: string
        '400':
          description: >-
            Unknown encoding OR Invalid JSON request OR Invalid API request OR
            Invalid user, domain does not belong to customer {CUSTOMER} OR
            Failover enabled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
  /{CUSTOMER}/{USER}/token:
    post:
      summary: >-
        Create new password token for account activation or password reset. The
        response contains an URL directing the user to a web frontend where the
        user can set or reset the password. The URL consists of base part and
        token. The base part is subject to static configuration and may contain
        an individual path component for each customer
      tags:
        - Token
      parameters:
        - $ref: '#/components/parameters/CUSTOMER'
        - $ref: '#/components/parameters/USER'
        - $ref: '#/components/parameters/mailNotification'
      responses:
        '201':
          $ref: '#/components/responses/shared_token_post_201'
        '400':
          description: Invalid user, domain does not belong to customer {CUSTOMER}
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: Database request failed OR Keycloak request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
        - basicAuth: []
  /{USER}/password:
    put:
      summary: Set user password (requires no authentication)
      tags:
        - Password
      parameters:
        - $ref: '#/components/parameters/USER'
      requestBody:
        $ref: '#/components/requestBodies/shared_password_put'
      responses:
        '200':
          $ref: '#/components/responses/shared_password_put_200'
        '400':
          description: >-
            Unknown encoding OR Invalid JSON request OR Invalid API request OR
            The password does not match the following criteria
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '503':
          description: >-
            Database request failed OR Keycloak request failed OR OpenXchange
            request failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
  schemas:
    customer:
      type: string
      minLength: 5
      maxLength: 7
      pattern: '[0-9]{5}([A-Z]{2})?'
      example: '44444'
    domain_v2:
      type: string
      maxLength: 128
      pattern: >-
        ([a-zA-Z0-9]+[-]+)*[a-zA-Z0-9]+\.(([a-zA-Z0-9]+[-]+)*[a-zA-Z0-9]+\.)*[a-zA-Z0-9]+$
      example: domain.com
    user_v2:
      type: string
      maxLength: 256
      pattern: >-
        ^([!#$%&'*+/=?^_`{|}~a-zA-Z0-9-]+\.)*[!#$%&'*+/=?^_`{|}~a-zA-Z0-9-]+@([a-zA-Z0-9]+[-]+)*[a-zA-Z0-9]+\.(([a-zA-Z0-9]+[-]+)*[a-zA-Z0-9]+\.)*[a-zA-Z0-9]+$
      example: customer@domain.com
    displayName:
      type: string
      minLength: 1
      maxLength: 256
      example: R. Meyer
    givenName:
      type: string
      minLength: 1
      maxLength: 128
      example: Robert
    surName:
      type: string
      minLength: 1
      maxLength: 128
      example: Meyer
    department_v2:
      type: string
      nullable: true
      minLength: 1
      maxLength: 256
      example: Sales
    costcenter_v2:
      type: string
      nullable: true
      minLength: 1
      maxLength: 256
      example: '01'
    phone:
      type: string
      nullable: true
      minLength: 1
      maxLength: 64
      example: +49 30 67242-33
    mobile:
      type: string
      nullable: true
      minLength: 1
      maxLength: 64
      example: +49 175 424222
    failoverGroups:
      type: array
      nullable: true
      maxItems: 16
      items:
        type: string
        minLength: 1
        maxLength: 64
        pattern: ^[a-zA-Z0-9_-]*$
        example: germany
      example:
        - emea
        - germany
    language:
      type: string
      maxLength: 8
      enum:
        - cs_CZ
        - da_DK
        - de_DE
        - en_GB
        - en_US
        - es_ES
        - es_MX
        - fi_FI
        - fr_FR
        - hu_HU
        - it_IT
        - ja_JP
        - lv_LV
        - nl_NL
        - pl_PL
        - pt_BR
        - ro_RO
        - ru_RU
        - sk_SK
        - sv_SE
        - tr_TR
        - zh_CN
        - zh_TW
      example: de_DE
    timezone:
      type: string
      maxLength: 32
      enum:
        - Africa/Abidjan
        - Africa/Accra
        - Africa/Addis_Ababa
        - Africa/Algiers
        - Africa/Asmara
        - Africa/Asmera
        - Africa/Bamako
        - Africa/Bangui
        - Africa/Banjul
        - Africa/Bissau
        - Africa/Blantyre
        - Africa/Brazzaville
        - Africa/Bujumbura
        - Africa/Cairo
        - Africa/Casablanca
        - Africa/Ceuta
        - Africa/Conakry
        - Africa/Dakar
        - Africa/Dar_es_Salaam
        - Africa/Djibouti
        - Africa/Douala
        - Africa/El_Aaiun
        - Africa/Freetown
        - Africa/Gaborone
        - Africa/Harare
        - Africa/Johannesburg
        - Africa/Juba
        - Africa/Kampala
        - Africa/Khartoum
        - Africa/Kigali
        - Africa/Kinshasa
        - Africa/Lagos
        - Africa/Libreville
        - Africa/Lome
        - Africa/Luanda
        - Africa/Lubumbashi
        - Africa/Lusaka
        - Africa/Malabo
        - Africa/Maputo
        - Africa/Maseru
        - Africa/Mbabane
        - Africa/Mogadishu
        - Africa/Monrovia
        - Africa/Nairobi
        - Africa/Ndjamena
        - Africa/Niamey
        - Africa/Nouakchott
        - Africa/Ouagadougou
        - Africa/Porto-Novo
        - Africa/Sao_Tome
        - Africa/Timbuktu
        - Africa/Tripoli
        - Africa/Tunis
        - Africa/Windhoek
        - America/Adak
        - America/Anchorage
        - America/Anguilla
        - America/Antigua
        - America/Araguaina
        - America/Argentina/Buenos_Aires
        - America/Argentina/Catamarca
        - America/Argentina/ComodRivadavia
        - America/Argentina/Cordoba
        - America/Argentina/Jujuy
        - America/Argentina/La_Rioja
        - America/Argentina/Mendoza
        - America/Argentina/Rio_Gallegos
        - America/Argentina/Salta
        - America/Argentina/San_Juan
        - America/Argentina/San_Luis
        - America/Argentina/Tucuman
        - America/Argentina/Ushuaia
        - America/Aruba
        - America/Asuncion
        - America/Atikokan
        - America/Atka
        - America/Bahia
        - America/Bahia_Banderas
        - America/Barbados
        - America/Belem
        - America/Belize
        - America/Blanc-Sablon
        - America/Boa_Vista
        - America/Bogota
        - America/Boise
        - America/Buenos_Aires
        - America/Cambridge_Bay
        - America/Campo_Grande
        - America/Cancun
        - America/Caracas
        - America/Catamarca
        - America/Cayenne
        - America/Cayman
        - America/Chicago
        - America/Chihuahua
        - America/Coral_Harbour
        - America/Cordoba
        - America/Costa_Rica
        - America/Creston
        - America/Cuiaba
        - America/Curacao
        - America/Danmarkshavn
        - America/Dawson
        - America/Dawson_Creek
        - America/Denver
        - America/Detroit
        - America/Dominica
        - America/Edmonton
        - America/Eirunepe
        - America/El_Salvador
        - America/Ensenada
        - America/Fort_Nelson
        - America/Fort_Wayne
        - America/Fortaleza
        - America/Glace_Bay
        - America/Godthab
        - America/Goose_Bay
        - America/Grand_Turk
        - America/Grenada
        - America/Guadeloupe
        - America/Guatemala
        - America/Guayaquil
        - America/Guyana
        - America/Halifax
        - America/Havana
        - America/Hermosillo
        - America/Indiana/Indianapolis
        - America/Indiana/Knox
        - America/Indiana/Marengo
        - America/Indiana/Petersburg
        - America/Indiana/Tell_City
        - America/Indiana/Vevay
        - America/Indiana/Vincennes
        - America/Indiana/Winamac
        - America/Indianapolis
        - America/Inuvik
        - America/Iqaluit
        - America/Jamaica
        - America/Jujuy
        - America/Juneau
        - America/Kentucky/Louisville
        - America/Kentucky/Monticello
        - America/Knox_IN
        - America/Kralendijk
        - America/La_Paz
        - America/Lima
        - America/Los_Angeles
        - America/Louisville
        - America/Lower_Princes
        - America/Maceio
        - America/Managua
        - America/Manaus
        - America/Marigot
        - America/Martinique
        - America/Matamoros
        - America/Mazatlan
        - America/Mendoza
        - America/Menominee
        - America/Merida
        - America/Metlakatla
        - America/Mexico_City
        - America/Miquelon
        - America/Moncton
        - America/Monterrey
        - America/Montevideo
        - America/Montreal
        - America/Montserrat
        - America/Nassau
        - America/New_York
        - America/Nipigon
        - America/Nome
        - America/Noronha
        - America/North_Dakota/Beulah
        - America/North_Dakota/Center
        - America/North_Dakota/New_Salem
        - America/Ojinaga
        - America/Panama
        - America/Pangnirtung
        - America/Paramaribo
        - America/Phoenix
        - America/Port-au-Prince
        - America/Port_of_Spain
        - America/Porto_Acre
        - America/Porto_Velho
        - America/Puerto_Rico
        - America/Punta_Arenas
        - America/Rainy_River
        - America/Rankin_Inlet
        - America/Recife
        - America/Regina
        - America/Resolute
        - America/Rio_Branco
        - America/Rosario
        - America/Santa_Isabel
        - America/Santarem
        - America/Santiago
        - America/Santo_Domingo
        - America/Sao_Paulo
        - America/Scoresbysund
        - America/Shiprock
        - America/Sitka
        - America/St_Barthelemy
        - America/St_Johns
        - America/St_Kitts
        - America/St_Lucia
        - America/St_Thomas
        - America/St_Vincent
        - America/Swift_Current
        - America/Tegucigalpa
        - America/Thule
        - America/Thunder_Bay
        - America/Tijuana
        - America/Toronto
        - America/Tortola
        - America/Vancouver
        - America/Virgin
        - America/Whitehorse
        - America/Winnipeg
        - America/Yakutat
        - America/Yellowknife
        - Antarctica/Casey
        - Antarctica/Davis
        - Antarctica/DumontDUrville
        - Antarctica/Macquarie
        - Antarctica/Mawson
        - Antarctica/McMurdo
        - Antarctica/Palmer
        - Antarctica/Rothera
        - Antarctica/South_Pole
        - Antarctica/Syowa
        - Antarctica/Troll
        - Antarctica/Vostok
        - Arctic/Longyearbyen
        - Asia/Aden
        - Asia/Almaty
        - Asia/Amman
        - Asia/Anadyr
        - Asia/Aqtau
        - Asia/Aqtobe
        - Asia/Ashgabat
        - Asia/Ashkhabad
        - Asia/Atyrau
        - Asia/Baghdad
        - Asia/Bahrain
        - Asia/Baku
        - Asia/Bangkok
        - Asia/Barnaul
        - Asia/Beirut
        - Asia/Bishkek
        - Asia/Brunei
        - Asia/Calcutta
        - Asia/Chita
        - Asia/Choibalsan
        - Asia/Chongqing
        - Asia/Chungking
        - Asia/Colombo
        - Asia/Dacca
        - Asia/Damascus
        - Asia/Dhaka
        - Asia/Dili
        - Asia/Dubai
        - Asia/Dushanbe
        - Asia/Famagusta
        - Asia/Gaza
        - Asia/Harbin
        - Asia/Hebron
        - Asia/Ho_Chi_Minh
        - Asia/Hong_Kong
        - Asia/Hovd
        - Asia/Irkutsk
        - Asia/Istanbul
        - Asia/Jakarta
        - Asia/Jayapura
        - Asia/Jerusalem
        - Asia/Kabul
        - Asia/Kamchatka
        - Asia/Karachi
        - Asia/Kashgar
        - Asia/Kathmandu
        - Asia/Katmandu
        - Asia/Khandyga
        - Asia/Kolkata
        - Asia/Krasnoyarsk
        - Asia/Kuala_Lumpur
        - Asia/Kuching
        - Asia/Kuwait
        - Asia/Macao
        - Asia/Macau
        - Asia/Magadan
        - Asia/Makassar
        - Asia/Manila
        - Asia/Muscat
        - Asia/Nicosia
        - Asia/Novokuznetsk
        - Asia/Novosibirsk
        - Asia/Omsk
        - Asia/Oral
        - Asia/Phnom_Penh
        - Asia/Pontianak
        - Asia/Pyongyang
        - Asia/Qatar
        - Asia/Qostanay
        - Asia/Qyzylorda
        - Asia/Rangoon
        - Asia/Riyadh
        - Asia/Saigon
        - Asia/Sakhalin
        - Asia/Samarkand
        - Asia/Seoul
        - Asia/Shanghai
        - Asia/Singapore
        - Asia/Srednekolymsk
        - Asia/Taipei
        - Asia/Tashkent
        - Asia/Tbilisi
        - Asia/Tehran
        - Asia/Tel_Aviv
        - Asia/Thimbu
        - Asia/Thimphu
        - Asia/Tokyo
        - Asia/Tomsk
        - Asia/Ujung_Pandang
        - Asia/Ulaanbaatar
        - Asia/Ulan_Bator
        - Asia/Urumqi
        - Asia/Ust-Nera
        - Asia/Vientiane
        - Asia/Vladivostok
        - Asia/Yakutsk
        - Asia/Yangon
        - Asia/Yekaterinburg
        - Asia/Yerevan
        - Atlantic/Azores
        - Atlantic/Bermuda
        - Atlantic/Canary
        - Atlantic/Cape_Verde
        - Atlantic/Faeroe
        - Atlantic/Faroe
        - Atlantic/Jan_Mayen
        - Atlantic/Madeira
        - Atlantic/Reykjavik
        - Atlantic/South_Georgia
        - Atlantic/St_Helena
        - Atlantic/Stanley
        - Australia/ACT
        - Australia/Adelaide
        - Australia/Brisbane
        - Australia/Broken_Hill
        - Australia/Canberra
        - Australia/Currie
        - Australia/Darwin
        - Australia/Eucla
        - Australia/Hobart
        - Australia/LHI
        - Australia/Lindeman
        - Australia/Lord_Howe
        - Australia/Melbourne
        - Australia/NSW
        - Australia/North
        - Australia/Perth
        - Australia/Queensland
        - Australia/South
        - Australia/Sydney
        - Australia/Tasmania
        - Australia/Victoria
        - Australia/West
        - Australia/Yancowinna
        - Brazil/Acre
        - Brazil/DeNoronha
        - Brazil/East
        - Brazil/West
        - Canada/Atlantic
        - Canada/Central
        - Canada/Eastern
        - Canada/Mountain
        - Canada/Newfoundland
        - Canada/Pacific
        - Canada/Saskatchewan
        - Canada/Yukon
        - Chile/Continental
        - Chile/EasterIsland
        - Cuba
        - Egypt
        - Eire
        - Europe/Amsterdam
        - Europe/Andorra
        - Europe/Astrakhan
        - Europe/Athens
        - Europe/Belfast
        - Europe/Belgrade
        - Europe/Berlin
        - Europe/Bratislava
        - Europe/Brussels
        - Europe/Bucharest
        - Europe/Budapest
        - Europe/Busingen
        - Europe/Chisinau
        - Europe/Copenhagen
        - Europe/Dublin
        - Europe/Gibraltar
        - Europe/Guernsey
        - Europe/Helsinki
        - Europe/Isle_of_Man
        - Europe/Istanbul
        - Europe/Jersey
        - Europe/Kaliningrad
        - Europe/Kiev
        - Europe/Kirov
        - Europe/Lisbon
        - Europe/Ljubljana
        - Europe/London
        - Europe/Luxembourg
        - Europe/Madrid
        - Europe/Malta
        - Europe/Mariehamn
        - Europe/Minsk
        - Europe/Monaco
        - Europe/Moscow
        - Europe/Nicosia
        - Europe/Oslo
        - Europe/Paris
        - Europe/Podgorica
        - Europe/Prague
        - Europe/Riga
        - Europe/Rome
        - Europe/Samara
        - Europe/San_Marino
        - Europe/Sarajevo
        - Europe/Saratov
        - Europe/Simferopol
        - Europe/Skopje
        - Europe/Sofia
        - Europe/Stockholm
        - Europe/Tallinn
        - Europe/Tirane
        - Europe/Tiraspol
        - Europe/Ulyanovsk
        - Europe/Uzhgorod
        - Europe/Vaduz
        - Europe/Vatican
        - Europe/Vienna
        - Europe/Vilnius
        - Europe/Volgograd
        - Europe/Warsaw
        - Europe/Zagreb
        - Europe/Zaporozhye
        - Europe/Zurich
        - GB-Eire
        - GMT
        - Greenwich
        - Hongkong
        - Iceland
        - Indian/Antananarivo
        - Indian/Chagos
        - Indian/Christmas
        - Indian/Cocos
        - Indian/Comoro
        - Indian/Kerguelen
        - Indian/Mahe
        - Indian/Maldives
        - Indian/Mauritius
        - Indian/Mayotte
        - Indian/Reunion
        - Iran
        - Israel
        - Jamaica
        - Japan
        - Kwajalein
        - Libya
        - Mexico/BajaNorte
        - Mexico/BajaSur
        - Mexico/General
        - NZ-CHAT
        - Navajo
        - Pacific/Apia
        - Pacific/Auckland
        - Pacific/Bougainville
        - Pacific/Chatham
        - Pacific/Chuuk
        - Pacific/Easter
        - Pacific/Efate
        - Pacific/Enderbury
        - Pacific/Fakaofo
        - Pacific/Fiji
        - Pacific/Funafuti
        - Pacific/Galapagos
        - Pacific/Gambier
        - Pacific/Guadalcanal
        - Pacific/Guam
        - Pacific/Honolulu
        - Pacific/Johnston
        - Pacific/Kiritimati
        - Pacific/Kosrae
        - Pacific/Kwajalein
        - Pacific/Majuro
        - Pacific/Marquesas
        - Pacific/Midway
        - Pacific/Nauru
        - Pacific/Niue
        - Pacific/Norfolk
        - Pacific/Noumea
        - Pacific/Pago_Pago
        - Pacific/Palau
        - Pacific/Pitcairn
        - Pacific/Pohnpei
        - Pacific/Ponape
        - Pacific/Port_Moresby
        - Pacific/Rarotonga
        - Pacific/Saipan
        - Pacific/Samoa
        - Pacific/Tahiti
        - Pacific/Tarawa
        - Pacific/Tongatapu
        - Pacific/Truk
        - Pacific/Wake
        - Pacific/Wallis
        - Pacific/Yap
        - Poland
        - Portugal
        - Singapore
        - Turkey
        - US/Alaska
        - US/Aleutian
        - US/Arizona
        - US/Central
        - US/East-Indiana
        - US/Eastern
        - US/Hawaii
        - US/Indiana-Starke
        - US/Michigan
        - US/Mountain
        - US/Pacific
        - US/Pacific-New
        - US/Samoa
        - UTC
      example: Europe/Berlin
    password:
      type: string
      minLength: 8
      maxLength: 256
      allOf:
        - pattern: '[a-z]'
        - pattern: '[A-Z]'
        - pattern: '[0-9]'
        - pattern: '[@$!%*?&]'
        - pattern: ^[a-zA-Z0-9@$!%*?&]*$
    errorResponse:
      type: object
      required:
        - id
        - timestamp
        - status
        - message
      properties:
        id:
          type: string
        timestamp:
          type: string
        status:
          type: integer
          example: 403
        message:
          type: string
          example: Forbidden
  requestBodies:
    shared_password_put:
      required: true
      content:
        application/json:
          schema:
            type: object
            required:
              - token
              - password
            additionalProperties: false
            properties:
              token:
                type: string
              password:
                $ref: '#/components/schemas/password'
  responses:
    shared_token_post_201:
      description: OK
      content:
        application/json:
          schema:
            type: object
            required:
              - id
              - timestamp
              - token
              - expiryTimestamp
              - url
            properties:
              id:
                type: string
              timestamp:
                type: string
              token:
                type: string
              expiryTimestamp:
                type: string
              url:
                type: string
    shared_password_put_200:
      description: OK
      content:
        application/json:
          schema:
            type: object
            required:
              - id
              - timestamp
            properties:
              id:
                type: string
              timestamp:
                type: string
    shared_customernumbers_get_200:
      description: OK
      content:
        application/json:
          schema:
            type: object
            required:
              - id
              - timestamp
              - customers
            properties:
              id:
                type: string
              timestamp:
                type: string
              customers:
                type: array
                items:
                  $ref: '#/components/schemas/customer'
  parameters:
    activationFlag:
      name: activation
      in: query
      description: Filters response according to state of activation flag
      required: false
      schema:
        type: boolean
        example: false
    accessFlag:
      name: access
      in: query
      description: Filters response according to state of access flag
      required: false
      schema:
        type: boolean
        example: false
    failoverFlag:
      name: failover
      in: query
      description: Filters response according to state of failover flag
      required: false
      schema:
        type: boolean
        example: false
    offset:
      name: offset
      in: query
      description: Offset used for pagination
      required: false
      schema:
        type: integer
        minimum: 0
        default: 0
    size:
      name: size
      in: query
      description: Limits size of response
      required: false
      schema:
        type: integer
        minimum: 0
        default: 1000
    failoverGroups:
      name: group
      in: query
      description: >-
        Restricts the operation to users who are a member of at least one of the
        given failover groups. If this parameter is absent, the operation will
        be applied to all users of the customer {CUSTOMER}.
      required: false
      schema:
        $ref: '#/components/schemas/failoverGroups'
      example: group=emea&group=germany
    mailNotification:
      name: mailNotification
      in: query
      description: >-
        If set to `true` or `1`, an email notification is sent to the end user
        automatically
      required: false
      schema:
        type: string
        example: 'true'
    CUSTOMER:
      name: CUSTOMER
      in: path
      required: true
      schema:
        $ref: '#/components/schemas/customer'
    USER:
      name: USER
      in: path
      required: true
      schema:
        type: string
        pattern: '[^/]+(?:@|%40)[^/]+'
        example: customer@domain.com
    v2_FLAG:
      name: FLAG
      in: path
      required: true
      schema:
        type: string
        enum:
          - failover
          - access
