openapi: 3.0.0
info:
  contact:
    email: support@auerswald.de
    name: Auerswald
    url: www.auerswald.de/support
  description: This is the official api documentation for the d-serie products.
  license:
    name: License name
    url: www.auerswald.de/support/api
  termsOfService: www.auerswald.de
  title: D-Serie API
  version: 1.30.2
servers:
  - description: Hardwarename
    url: 'https://{url}:{port}/{basePath}/{apiVersion}'
    variables:
      url:
        default: 'localhost'
      basePath:
        default: api
      port:
        default: '80'
      apiVersion:
        default: v1
paths:
  /privacy:
    x-xpath: '/privacy'
    x-ref:
      name: privacy
      type: privacy
      returns: Privacy
      include: true
    get:
      tags:
        - All
        - Get
        - Privacy
      description: Fetch the telephones privacy settings
      responses:
        200:
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/privacy'
            application/xml:
              schema:
                $ref: '#/components/schemas/privacy'
    put:
      tags:
        - All
        - Put
        - Privacy
      description: Update privacy settings
      responses:
        200:
          description: Operation successful
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          description: Unauthorized
        404:
          description: Not Found
      requestBody:
        description: The privacy settings
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/privacy'
          application/xml:
            schema:
              $ref: '#/components/schemas/privacy'
    patch:
      tags:
        - All
        - Put
        - Privacy
      description: Update privacy settings
      responses:
        200:
          description: Operation successful
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          description: Unauthorized
        404:
          description: Not Found
      requestBody:
        description: The privacy settings
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/privacy'
          application/xml:
            schema:
              $ref: '#/components/schemas/privacy'

  /users:
    x-xpath: '/users'
    x-ref:
      name: users
      type: users
      returns: User
      include: true
    get:
      tags:
        - All
        - Get
        - Users
      description: Get a list of users
      responses:
        200:
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/users'
            application/xml:
              schema:
                $ref: '#/components/schemas/users'

  /users/{name}:
    x-xpath: '/users/user[@name="{name}"]'
    x-ref:
      name: user
      type: user
      returns: User
    parameters:
      - name: name
        in: path
        description: The name of the user to fetch
        required: true
        schema:
          type: string
    get:
      tags:
        - All
        - Get
        - Users
      description: Returns a single user
      responses:
        200:
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/user'
            application/xml:
              schema:
                $ref: '#/components/schemas/user'
        401:
          description: Unauthorized
        404:
          description: Not Found
    delete:
      tags:
        - All
        - Delete
        - Users
      description: Delete a user. The last user can not be deleted.
      responses:
        200:
          description: Operation successful
        401:
          description: Unauthorized
        404:
          description: Not Found
    put:
      tags:
        - All
        - Put
        - Users
      description: Update a single user
      responses:
        200:
          description: Operation successful
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          description: Unauthorized
        404:
          description: Not Found
      requestBody:
        description: The user properties to update
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/user'
          application/xml:
            schema:
              $ref: '#/components/schemas/user'
    patch:
      tags:
        - All
        - Put
        - Users
      description: Update a single user
      responses:
        200:
          description: Operation successful
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          description: Unauthorized
        404:
          description: Not Found
      requestBody:
        description: The user properties to update
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/user'
          application/xml:
            schema:
              $ref: '#/components/schemas/user'
    post:
      tags:
        - All
        - Post
        - Users
      description: Create a single user
      responses:
        200:
          description: Operation successful
        400:
          $ref: '#/components/responses/BadRequest'
        403:
          description: Forbidden
      requestBody:
        description: The user object to create
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/user'
          application/xml:
            schema:
              $ref: '#/components/schemas/user'

  /users/primary:
    x-xpath: '/users/user[role="user"][1]'
    x-ref:
      name: PrimaryUser
      type: user
      returns: User
    get:
      tags:
        - All
        - Get
        - Users
      description: Returns a single user
      responses:
        200:
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/user'
            application/xml:
              schema:
                $ref: '#/components/schemas/user'
        401:
          description: Unauthorized
        404:
          description: Not Found
    put:
      tags:
        - All
        - Put
        - Users
      description: Update a single user
      responses:
        200:
          description: Operation successful
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          description: Unauthorized
        404:
          description: Not Found
      requestBody:
        description: The user properties to update
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/user'
          application/xml:
            schema:
              $ref: '#/components/schemas/user'
    patch:
      tags:
        - All
        - Put
        - Users
      description: Update a single user
      responses:
        200:
          description: Operation successful
        400:
          $ref: '#/components/responses/BadRequest'
        401:
          description: Unauthorized
        404:
          description: Not Found
      requestBody:
        description: The user properties to update
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/user'
          application/xml:
            schema:
              $ref: '#/components/schemas/user'
  /users/useradd:
    x-xpath: '/users/user[count(*) +1]'
    x-ref:
      name: NextUser
      type: user
    post:
      tags:
        - All
        - Post
        - Users
      description: Create a single user
      responses:
        200:
          description: Operation successful
        400:
          $ref: '#/components/responses/BadRequest'
        403:
          description: Forbidden
      requestBody:
        description: The user object to create
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/user'
          application/xml:
            schema:
              $ref: '#/components/schemas/user'


  /contacts:
    x-xpath: '/contacts'
    x-ref:
      name: contacts
      type: contacts
      returns: Contacts
      include: true
    get:
      tags:
        - All
        - Get
        - Contacts
      description: Get a contacts setup
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/contacts'
            application/xml:
              schema:
                $ref: '#/components/schemas/contacts'
        '400':
          $ref: '#/components/responses/BadRequest'
    post:
      tags:
        - All
        - Post
        - Contacts
      description: Create a contacts setup
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        description: The setting values for this setup
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/contacts'
          application/xml:
            schema:
              $ref: '#/components/schemas/contacts'
    put:
      tags:
        - All
        - Put
        - Contacts
      description: Update a contacts settings
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        description: The setting values for a ldap setup
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/contacts'
          application/xml:
            schema:
              $ref: '#/components/schemas/contacts'
    patch:
      tags:
        - All
        - Put
        - Contacts
      description: Update a contacts settings
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        description: The setting values for a ldap setup
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/contacts'
          application/xml:
            schema:
              $ref: '#/components/schemas/contacts'
    delete:
      tags:
        - All
        - Delete
        - Contacts
      description: Delete a contacts setup
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound

  /keys:
    x-xpath: /keys
    x-ref:
      include: true
      name: keys
      type: keys
      returns: Keys
    get:
      tags:
        - All
        - Get
        - Keys
      description: Get all configured keys
      responses:
        '200':
          description: A list of all groups and their configured keys
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/keys'
            application/xml:
              schema:
                $ref: '#/components/schemas/keys'

  /keys/{group}:
    x-xpath: '/keys/{group}'
    x-ref:
      name: groupedKeys
      type: groupedKeys
      returns: Key
    parameters:
      - name: group
        in: path
        description: The group the key belongs to.
        required: true
        schema:
          $ref: '#/components/schemas/keyGroup'
    get:
      tags:
        - All
        - Get
        - Keys
      description: Get all keys for the specified group.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/groupedKeys'
            application/xml:
              schema:
                $ref: '#/components/schemas/groupedKeys'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound

  /keys/{group}/{keyNumber}:
    x-xpath: '/keys/{group}/key[@keyNumber={keyNumber}]'
    x-ref:
      name: key
      type: key
      returns: Key
    parameters:
      - name: group
        in: path
        description: The group the key belongs to.
        required: true
        schema:
          $ref: '#/components/schemas/keyGroup'
      - name: keyNumber
        in: path
        description: The position of the key in the specified group.
        required: true
        schema:
          type: integer
          format: int32
          minimum: 1
    get:
      tags:
        - All
        - Get
        - Keys
      description: Get the key on the specified position
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/key'
            application/xml:
              schema:
                $ref: '#/components/schemas/key'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
    post:
      tags:
        - All
        - Post
        - Keys
      description: Create a new key on the specified position
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        description: The config values for the key
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/key'
          application/xml:
            schema:
              $ref: '#/components/schemas/key'
    delete:
      tags:
        - All
        - Delete
        - Keys
      description: Delete the key on the specified position in the group
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
    put:
      tags:
        - All
        - Put
        - Keys
      description: Update the key on the specified position in the group
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        description: The updated configuration for the key
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/key'
          application/xml:
            schema:
              $ref: '#/components/schemas/key'
    patch:
      tags:
        - All
        - Put
        - Keys
      description: Update the key on the specified position in the group
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        description: The updated configuration for the key
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/key'
          application/xml:
            schema:
              $ref: '#/components/schemas/key'

  /keyLayer:
    x-xpath: '/keyLayer'
    x-ref:
      include: true
      name: 'keyLayer'
      type: 'keyLayer'
      returns: 'KeyLayer'
    get:
      tags:
        - All
        - Get
        - KeyLayer
      description: Get the keylayer settings
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/keyLayer'
           application/xml:
             schema:
               $ref: '#/components/schemas/keyLayer'
       '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - KeyLayer
      description: Set the keylayer settings
      responses:
        '200':
          description: Operation successful
      requestBody:
        description: The keyLayer values
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/keyLayer'
          application/xml:
            schema:
              $ref: '#/components/schemas/keyLayer'
    patch:
      tags:
        - All
        - Put
        - KeyLayer
      description: Set the keylayer settings
      responses:
        '200':
          description: Operation successful
      requestBody:
        description: The keyLayer values
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/keyLayer'
          application/xml:
            schema:
              $ref: '#/components/schemas/keyLayer'

  /identities:
    x-xpath: /identities
    x-ref:
      include: true
      name: identities
      type: identities
      returns: Identity
    get:
      tags:
        - All
        - Get
        - Identities
      description: Get the list of identities
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/identities'
            application/xml:
              schema:
                $ref: '#/components/schemas/identities'

  /identities/{idx}:
    x-xpath: '/identities/identity[{idx}]'
    x-ref:
      name: identity
      type: identity
      returns: Identity
    parameters:
      - name: idx
        in: path
        description: The index of the identity.
        required: true
        schema:
          type: integer
          format: int32
          minimum: 1
    get:
      tags:
        - All
        - Get
        - Identities
      description: Get the specified identity at the index.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/identity'
            application/xml:
              schema:
                $ref: '#/components/schemas/identity'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Identities
      description: Update the identity at the specified index.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/identity'
          application/xml:
            schema:
              $ref: '#/components/schemas/identity'
    patch:
      tags:
        - All
        - Put
        - Identities
      description: Update the identity at the specified index.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/identity'
          application/xml:
            schema:
              $ref: '#/components/schemas/identity'

  /telephony:
    x-xpath: /telephony
    x-ref:
      include: true
      name: telephony
      type: telephony
      returns: Telephony
    get:
      tags:
        - All
        - Get
        - Telephony
      description: Get the telephony settings.
      responses:
        '200':
          description: Operation successfull
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/telephony'
            application/xml:
              schema:
                $ref: '#/components/schemas/telephony'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Telephony
      description: Update the telephony settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/telephony'
          application/xml:
            schema:
              $ref: '#/components/schemas/telephony'
    patch:
      tags:
        - All
        - Put
        - Telephony
      description: Update the telephony settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/telephony'
          application/xml:
            schema:
              $ref: '#/components/schemas/telephony'
  /aboutPhone:
    x-xpath: /aboutPhone
    x-ref:
      include: true
      name: aboutPhone
      type: aboutPhone
      returns: AboutPhone
    get:
      tags:
        - All
        - Get
        - AboutPhone
      description: Get the aboutPhone settings.
      responses:
        '200':
          description: Operation successfull
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/aboutPhone'
            application/xml:
              schema:
                $ref: '#/components/schemas/aboutPhone'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - AboutPhone
      description: Update the aboutPhone settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/aboutPhone'
          application/xml:
            schema:
              $ref: '#/components/schemas/aboutPhone'
    patch:
      tags:
        - All
        - Put
        - AboutPhone
      description: Update the aboutPhone settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/aboutPhone'
          application/xml:
            schema:
              $ref: '#/components/schemas/aboutPhone'

  /sound:
    x-xpath: /sound
    x-ref:
      include: true
      name: sound
      type: sound
      returns: Sound
    get:
      tags:
        - All
        - Get
        - Sound
      description: Get the sound settings.
      responses:
        '200':
          description: Operation successfull
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/sound'
            application/xml:
              schema:
                $ref: '#/components/schemas/sound'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Sound
      description: Update the sound settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/sound'
          application/xml:
            schema:
              $ref: '#/components/schemas/sound'
    patch:
      tags:
        - All
        - Put
        - Sound
      description: Update the sound settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/sound'
          application/xml:
            schema:
              $ref: '#/components/schemas/sound'

  /provisioning:
    x-xpath: /provisioning
    x-ref:
      include: true
      name: provisioning
      type: provisioning
      returns: Provisioning
    get:
      tags:
        - All
        - Get
        - Provisioning
      description: Get the provisionings settings.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/provisioning'
            application/xml:
              schema:
                $ref: '#/components/schemas/provisioning'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Provisioning
      description: Update the provisioning settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/provisioning'
          application/xml:
            schema:
              $ref: '#/components/schemas/provisioning'
    patch:
      tags:
        - All
        - Put
        - Provisioning
      description: Update the provisioning settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/provisioning'
          application/xml:
            schema:
              $ref: '#/components/schemas/provisioning'

  /update:
    x-xpath: /update
    x-ref:
      include: true
      name: update
      type: update
      returns: Update
    get:
      tags:
        - All
        - Get
        - Update
      description: Get the update settings.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/update'
            application/xml:
              schema:
                $ref: '#/components/schemas/update'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Update
      description: Update the update settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update'
          application/xml:
            schema:
              $ref: '#/components/schemas/update'
    patch:
      tags:
        - All
        - Put
        - Update
      description: Update the update settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update'
          application/xml:
            schema:
              $ref: '#/components/schemas/update'

  /locales:
    x-xpath: /locales
    x-ref:
      include: true
      name: locales
      type: locales
      returns: Locales
    get:
      tags:
        - All
        - Get
        - Locales
      description: Get the locale settings.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/locales'
            application/xml:
              schema:
                $ref: '#/components/schemas/locales'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Locales
      description: Update the locale settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/locales'
          application/xml:
            schema:
              $ref: '#/components/schemas/locales'
    patch:
      tags:
        - All
        - Put
        - Locales
      description: Update the locale settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/locales'
          application/xml:
            schema:
              $ref: '#/components/schemas/locales'

  /network:
    x-xpath: /network
    x-ref:
      include: true
      name: network
      type: network
      returns: Network
    get:
      tags:
        - All
        - Get
        - Network
      description: Get the network settings.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/network'
            application/xml:
              schema:
                $ref: '#/components/schemas/network'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Network
      description: Update the network settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/network'
          application/xml:
            schema:
              $ref: '#/components/schemas/network'
    patch:
      tags:
        - All
        - Put
        - Network
      description: Update the network settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/network'
          application/xml:
            schema:
              $ref: '#/components/schemas/network'

  /network/ethernet:
    x-xpath: /network/ethernet
    x-ref:
      name: ethernet
      type: ethernet
      returns: Ethernet
    get:
      tags:
        - All
        - Get
        - Network
      description: Get the ethernet settings.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ethernet'
            application/xml:
              schema:
                $ref: '#/components/schemas/ethernet'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Network
      description: Update the ethernet settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ethernet'
          application/xml:
            schema:
              $ref: '#/components/schemas/ethernet'
    patch:
      tags:
        - All
        - Put
        - Network
      description: Update the ethernet settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ethernet'
          application/xml:
            schema:
              $ref: '#/components/schemas/ethernet'

  /network/vpn:
    x-xpath: /network/vpn
    x-ref:
      name: vpn
      type: vpn
      returns: Vpn
    get:
      tags:
        - All
        - Get
        - Network
        - VPN
      description: Get the vpn settings.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/vpn'
            application/xml:
              schema:
                $ref: '#/components/schemas/vpn'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Network
      description: Update the vpn settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/vpn'
          application/xml:
            schema:
              $ref: '#/components/schemas/vpn'
    patch:
      tags:
        - All
        - Put
        - Network
      description: Update the vpn settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/vpn'
          application/xml:
            schema:
              $ref: '#/components/schemas/vpn'

  /network/topology:
    x-xpath: /network/topology
    x-ref:
      name: topology
      type: topology
      returns: Topology
    get:
      tags:
        - All
        - Get
        - Network
      description: Get the topology settings.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topology'
            application/xml:
              schema:
                $ref: '#/components/schemas/topology'
        '400':
          $ref: '#/components/responses/BadRequest'
    post:
      tags:
        - All
        - Post
        - Network
      description: Create a Topology setup
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        description: The setting values for this setup
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/topology'
          application/xml:
            schema:
              $ref: '#/components/schemas/topology'
    put:
      tags:
        - All
        - Put
        - Network
      description: Update the topology settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/topology'
          application/xml:
            schema:
              $ref: '#/components/schemas/topology'
    patch:
      tags:
        - All
        - Put
        - Network
      description: Update the topology settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/topology'
          application/xml:
            schema:
              $ref: '#/components/schemas/topology'

  /userInterface/display:
    x-xpath: '/userInterface/display'
    x-ref:
      name: 'display'
      type: 'display'
      returns: 'Display'
    get:
      tags:
        - All
        - Get
        - Display
      description: Get the display settings.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/display'
           application/xml:
             schema:
               $ref: '#/components/schemas/display'
       '400':
          $ref: '#/components/responses/BadRequest'

  /userInterface/leds:
    x-xpath: '/userInterface/leds'
    x-ref:
      name: 'leds'
      type: 'leds'
      returns: 'Leds'
    get:
      tags:
        - All
        - Get
        - Leds
      description: Get the led-settings.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/leds'
           application/xml:
             schema:
               $ref: '#/components/schemas/leds'
       '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Display
      description: Update the led settings.
      responses:
        '200':
          description: Operation successful
      requestBody:
        description: The led values
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/leds'
          application/xml:
            schema:
              $ref: '#/components/schemas/leds'
    patch:
      tags:
        - All
        - Put
        - Display
      description: Update the led settings.
      responses:
        '200':
          description: Operation successful
      requestBody:
        description: The led values
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/leds'
          application/xml:
            schema:
              $ref: '#/components/schemas/leds'

  /userInterface/keypad:
    x-hide:
      - 'xsd'
    x-xpath: '/userInterface/keypad'
    x-ref:
      name: 'keypad'
      type: 'keypad'
      returns: 'Keypad'
    get:
      tags:
        - All
        - Get
        - Keypad
      description: Get the keypad settings.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/keypad'
           application/xml:
             schema:
               $ref: '#/components/schemas/keypad'
       '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Keypad
      description: Update the keypad settings.
      responses:
        '200':
          description: Operation successful
      requestBody:
        description: The keypad values
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/keypad'
          application/xml:
            schema:
              $ref: '#/components/schemas/keypad'
    patch:
      tags:
        - All
        - Put
        - Keypad
      description: Update the keypad settings.
      responses:
        '200':
          description: Operation successful
      requestBody:
        description: The keypad values
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/keypad'
          application/xml:
            schema:
              $ref: '#/components/schemas/keypad'

  /userInterface/messages:
    x-xpath: '/userInterface/messages'
    x-ref:
      name: 'messages'
      type: 'messages'
      returns: 'Messages'
    get:
      tags:
        - All
        - Get
        - messages
      description: Get the messages settings.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/messages'
           application/xml:
             schema:
               $ref: '#/components/schemas/messages'
       '400':
          $ref: '#/components/responses/BadRequest'

  /userInterface:
    x-xpath: '/userInterface'
    x-ref:
      include: true
      name: 'userInterface'
      type: 'userInterface'
      returns: 'UserInterface'
    get:
      tags:
        - All
        - Get
        - UserInterface
      description: Get settings for the user-interface.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/userInterface'
           application/xml:
             schema:
               $ref: '#/components/schemas/userInterface'
       '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - UserInterface
      description: Update settings for the user-interface.
      responses:
        '200':
          description: Operation successful
      requestBody:
        description: The user-interface values
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/userInterface'
          application/xml:
            schema:
              $ref: '#/components/schemas/userInterface'
    patch:
      tags:
        - All
        - Put
        - UserInterface
      description: Update settings for the user-interface.
      responses:
        '200':
          description: Operation successful
      requestBody:
        description: The user-interface values
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/userInterface'
          application/xml:
            schema:
              $ref: '#/components/schemas/userInterface'

  /templates:
    x-xpath: /templates
    x-ref:
      include: true
      name: templates
      type: templates
      returns: Template
    get:
      tags:
        - All
        - Get
        - Templates
      description: Get all templates
      responses:
        '200':
          description: A list of available key templates.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/templates'
            application/xml:
              schema:
                $ref: '#/components/schemas/templates'

  /templates/{name}:
    x-xpath: '/templates/template[@name="{name}"]'
    x-ref:
      name: template
      type: template
      returns: Template
    parameters:
      - name: name
        in: path
        description: The name of the template
        required: true
        schema:
          type: string
    get:
      tags:
        - All
        - Get
        - Templates
      description: Get the template with the specified name.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/template'
            application/xml:
              schema:
                $ref: '#/components/schemas/template'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
    put:
      tags:
        - All
        - Put
        - Templates
      description: Update the template with the specified name.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/template'
          application/xml:
            schema:
              $ref: '#/components/schemas/template'
    patch:
      tags:
        - All
        - Put
        - Templates
      description: Update the template with the specified name.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/template'
          application/xml:
            schema:
              $ref: '#/components/schemas/template'

  /remoteAccess:
    x-xpath: /remoteAccess
    x-ref:
      include: true
      name: remoteAccess
      type: remoteAccess
      returns: RemoteAccess
    get:
      tags:
        - All
        - Get
        - RemoteAccess
      description: Get the remote-access settings.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/remoteAccess'
            application/xml:
              schema:
                $ref: '#/components/schemas/remoteAccess'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - RemoteAccess
      description: Update the remote-access settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/remoteAccess'
          application/xml:
            schema:
              $ref: '#/components/schemas/remoteAccess'
    patch:
      tags:
        - All
        - Put
        - RemoteAccess
      description: Update the remote-access settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/remoteAccess'
          application/xml:
            schema:
              $ref: '#/components/schemas/remoteAccess'


  /remoteAccess/authTokens:
    x-xpath: /remoteAccess/authTokens
    x-ref:
      name: authTokens
      type: authTokens
      returns: AuthToken
    get:
      tags:
        - All
        - Get
        - AuthTokens
      description: Get the list of auth tokens
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/authTokens'
            application/xml:
              schema:
                $ref: '#/components/schemas/authTokens'

  /remoteAccess/authTokens/{idx}:
    x-xpath: '/remoteAccess/authTokens/authToken[{idx}]'
    x-ref:
      name: authToken
      type: authToken
      returns: AuthToken
    parameters:
      - name: idx
        in: path
        description: The index of the auth token.
        required: true
        schema:
          type: integer
          format: int32
          minimum: 1
    get:
      tags:
        - All
        - Get
        - AuthTokens
      description: Get the specified auth token at the index.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/authToken'
            application/xml:
              schema:
                $ref: '#/components/schemas/authToken'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - AuthTokens
      description: Update the auth token at the specified index.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/authToken'
          application/xml:
            schema:
              $ref: '#/components/schemas/authToken'
    patch:
      tags:
        - All
        - Put
        - AuthTokens
      description: Update the auth token at the specified index.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/authToken'
          application/xml:
            schema:
              $ref: '#/components/schemas/authToken'

  /apps:
    x-xpath: /apps
    x-ref:
      include: true
      name: apps
      type: apps
      returns: Apps
    get:
      tags:
        - All
        - Get
        - Apps
      description: Get the apps-settings.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/apps'
            application/xml:
              schema:
                $ref: '#/components/schemas/apps'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Apps
      description: Update the apps-settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apps'
          application/xml:
            schema:
              $ref: '#/components/schemas/apps'
    patch:
      tags:
        - All
        - Put
        - Apps
      description: Update the apps-settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apps'
          application/xml:
            schema:
              $ref: '#/components/schemas/apps'

  /timeAndDate:
    x-xpath: '/timeAndDate'
    x-ref:
      include: true
      name: 'timeAndDate'
      type: 'timeAndDate'
      returns: 'TimeAndDate'
    get:
      tags:
        - All
        - Get
        - TimeAndDate
      description: Get the timeAndDate settings.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/timeAndDate'
           application/xml:
             schema:
               $ref: '#/components/schemas/timeAndDate'
       '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - TimeAndDate
      description: Update the timeAndDate settings
      responses:
        '200':
          description: Operation successful
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/timeAndDate'
          application/xml:
            schema:
              $ref: '#/components/schemas/timeAndDate'
    patch:
      tags:
        - All
        - Put
        - TimeAndDate
      description: Update the timeAndDate settings
      responses:
        '200':
          description: Operation successful
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/timeAndDate'
          application/xml:
            schema:
              $ref: '#/components/schemas/timeAndDate'

  /logging:
    x-xpath: '/logging'
    x-ref:
      include: true
      name: 'logging'
      type: 'logging'
      returns: 'Logging'
    get:
      tags:
        - All
        - Get
        - Logging
      description: Get the logging settings.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/logging'
           application/xml:
             schema:
               $ref: '#/components/schemas/logging'
       '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - Logging
      description: Set the logging settings.
      responses:
        '200':
          description: Operation successful
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/logging'
          application/xml:
            schema:
              $ref: '#/components/schemas/logging'
    patch:
      tags:
        - All
        - Put
        - Logging
      description: Set the logging settings.
      responses:
        '200':
          description: Operation successful
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/logging'
          application/xml:
            schema:
              $ref: '#/components/schemas/logging'


  /devices:
    x-xpath: '/devices'
    x-hide: # Possible values: 'all, 'xsd', 'server', 'client', 'java', 'c'
      - 'xsd'
      - 'server'
    x-ref:
      include: false
      name: 'devices'
      type: 'devices'
      returns: 'Devices'
    get:
      tags:
        - All
        - Get
        - Devices
      description: Get the Devices settings.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/devices'
           application/xml:
             schema:
               $ref: '#/components/schemas/devices'
       '400':
          $ref: '#/components/responses/BadRequest'

    post:
      tags:
        - All
        - Post
        - Devices
      description: Create a Devices setup
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        description: The setting values for this setup
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/devices'
          application/xml:
            schema:
              $ref: '#/components/schemas/devices'
    put:
      tags:
        - All
        - Put
        - Devices
      description: Update a Devices setup.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/devices'
          application/xml:
            schema:
              $ref: '#/components/schemas/devices'
    patch:
      tags:
        - All
        - Put
        - Devices
      description: Update a Devices setup.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/devices'
          application/xml:
            schema:
              $ref: '#/components/schemas/devices'
  /devices/cameras:
    x-xpath: '/devices/cameras'
    x-ref:
      name: 'ipCameras'
      type: 'ipCameras'
      returns: 'IpCamera'
    get:
      tags:
        - All
        - Get
        - IpCameras
      description: Get the Cameras settings.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/ipCameras'
           application/xml:
             schema:
               $ref: '#/components/schemas/ipCameras'
       '400':
          $ref: '#/components/responses/BadRequest'
  /devices/cameras/{name}:
    x-xpath: '/devices/cameras/ipCamera[@name="{name}"]'
    x-ref:
      name: ipCamera
      type: ipCamera
      returns: IpCamera
    parameters:
      - name: name
        in: path
        description: The name of the camera
        required: true
        schema:
          type: string
    get:
      tags:
        - All
        - Get
        - IpCameras
      description: Get the camera with the specified name.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ipCamera'
            application/xml:
              schema:
                $ref: '#/components/schemas/ipCamera'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
    put:
      tags:
        - All
        - Put
        - IpCameras
      description: Update the camera with the specified name.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ipCamera'
          application/xml:
            schema:
              $ref: '#/components/schemas/ipCamera'
    patch:
      tags:
        - All
        - Put
        - IpCameras
      description: Update the camera with the specified name.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ipCamera'
          application/xml:
            schema:
              $ref: '#/components/schemas/ipCamera'
    post:
      tags:
        - All
        - Post
        - IpCameras
      description: Create a Camera setup
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        description: The setting values for this setup
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ipCamera'
          application/xml:
            schema:
              $ref: '#/components/schemas/ipCamera'
    delete:
      tags:
        - All
        - Delete
        - IpCameras
      description: Delete a camera by name
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound

  /telephony/callBindings:
    x-xpath: '/telephony/callBindings'
    x-ref:
      name: 'callBindings'
      type: 'callBindings'
      returns: 'CallBinding'
    get:
      tags:
        - All
        - Get
        - CallBindings
      description: Get the CallBindings settings.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/callBindings'
           application/xml:
             schema:
               $ref: '#/components/schemas/callBindings'
       '400':
          $ref: '#/components/responses/BadRequest'
  /telephony/callBindings/{name}:
    x-xpath: '/telephony/callBindings/callBinding[@name="{name}"]'
    x-ref:
      name: callBinding
      type: callBinding
      returns: CallBinding
    parameters:
      - name: name
        in: path
        description: The name of the binding
        required: true
        schema:
          type: string
    get:
      tags:
        - All
        - Get
        - CallBindings
      description: Get the binding with the specified name.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/callBinding'
            application/xml:
              schema:
                $ref: '#/components/schemas/callBinding'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
    put:
      tags:
        - All
        - Put
        - CallBindings
      description: Update the binding with the specified name.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/callBinding'
          application/xml:
            schema:
              $ref: '#/components/schemas/callBinding'
    patch:
      tags:
        - All
        - Put
        - CallBindings
      description: Update the binding with the specified name.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/callBinding'
          application/xml:
            schema:
              $ref: '#/components/schemas/callBinding'
    post:
      tags:
        - All
        - Post
        - CallBindings
      description: Create a CallBinding setup
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        description: The setting values for this setup
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/callBinding'
          application/xml:
            schema:
              $ref: '#/components/schemas/callBinding'
    delete:
      tags:
        - All
        - Delete
        - CallBindings
      description: Delete a call-binding by name
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
  /telephony/callBindings/{name}/softkey/{idx}:
    x-xpath: '/telephony/callBindings/callBinding[@name="{name}"]/softKeys/inCallKey[{idx}]'
    x-ref:
      name: inCallKey
      type: inCallKey
      returns: InCallKey
    parameters:
      - name: name
        in: path
        description: The name of the binding
        required: true
        schema:
          type: string
      - name: idx
        in: path
        description: The index of the key
        required: true
        schema:
          type: integer
          format: int32
          minimum: 1
    get:
      tags:
        - All
        - Get
        - CallBindings
      description: Get the key with the specified name.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/inCallKey'
            application/xml:
              schema:
                $ref: '#/components/schemas/inCallKey'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
    put:
      tags:
        - All
        - Put
        - inCallKeys
      description: Update the key.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/inCallKey'
          application/xml:
            schema:
              $ref: '#/components/schemas/inCallKey'
    patch:
      tags:
        - All
        - Put
        - inCallKeys
      description: Update the key.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/inCallKey'
          application/xml:
            schema:
              $ref: '#/components/schemas/inCallKey'
    post:
      tags:
        - All
        - Post
        - inCallKeys
      description: Create a inCallKey setup
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        description: The setting values for this setup
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/inCallKey'
          application/xml:
            schema:
              $ref: '#/components/schemas/inCallKey'
    delete:
      tags:
        - All
        - Delete
        - inCallKeys
      description: Delete a call-key by name
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
  /luaLibraries:
    x-xpath: '/luaLibraries'
    x-ref:
      include: true
      name: 'luaLibraries'
      type: 'luaLibraries'
      returns: 'LuaScript'
    get:
      tags:
        - All
        - Get
        - LuaLibraries
      description: Get the luaLibraries settings.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/luaLibraries'
           application/xml:
             schema:
               $ref: '#/components/schemas/luaLibraries'
       '400':
          $ref: '#/components/responses/BadRequest'
  /luaLibraries/{name}:
    x-xpath: '/luaLibraries/luaLibrary[@name="{name}"]'
    x-ref:
      name: 'luaLibrary'
      type: 'luaLibrary'
      returns: LuaScript
    parameters:
      - name: name
        in: path
        description: The name of the luaLibrary
        required: true
        schema:
          type: string
    get:
      tags:
        - All
        - Get
        - LuaLibraries
      description: Get the luaLibrary with the specified name.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/luaScript'
            application/xml:
              schema:
                $ref: '#/components/schemas/luaScript'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
    put:
      tags:
        - All
        - Put
        - LuaLibraries
      description: Update the luaLibrary with the specified name.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/luaScript'
          application/xml:
            schema:
              $ref: '#/components/schemas/luaScript'
    patch:
      tags:
        - All
        - Put
        - LuaLibraries
      description: Update the luaLibrary with the specified name.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/luaScript'
          application/xml:
            schema:
              $ref: '#/components/schemas/luaScript'
  /luaAutoStarters:
    x-xpath: '/luaAutoStarters'
    x-ref:
      include: true
      name: 'luaAutoStarters'
      type: 'luaAutoStarters'
      returns: 'LuaScript'
    get:
      tags:
        - All
        - Get
        - LuaAutoStarters
      description: Get the luaAutoStarters settings.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/luaAutoStarters'
           application/xml:
             schema:
               $ref: '#/components/schemas/luaAutoStarters'
       '400':
          $ref: '#/components/responses/BadRequest'
  /luaAutoStarters/{name}:
    x-xpath: '/luaAutoStarters/luaScript[@name="{name}"]'
    x-ref:
      name: 'luaAutostarter'
      type: 'luaAutostarter'
      returns: LuaScript
    parameters:
      - name: name
        in: path
        description: The name of the luaScript
        required: true
        schema:
          type: string
    get:
      tags:
        - All
        - Get
        - LuaAutoStarters
      description: Get the luaScript with the specified name.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/luaScript'
            application/xml:
              schema:
                $ref: '#/components/schemas/luaScript'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
    put:
      tags:
        - All
        - Put
        - LuaAutoStarters
      description: Update the luaScript with the specified name.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/luaScript'
          application/xml:
            schema:
              $ref: '#/components/schemas/luaScript'
    patch:
      tags:
        - All
        - Put
        - LuaAutoStarters
      description: Update the luaScript with the specified name.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/luaScript'
          application/xml:
            schema:
              $ref: '#/components/schemas/luaScript'
  /luaConfig:
    x-xpath: '/luaConfig'
    x-ref:
      include: true
      name: 'luaConfig'
      type: 'luaConfig'
      returns: 'LuaConfigPair'
    get:
      tags:
        - All
        - Get
        - LuaConfig
      description: Get the luaConfig settings.
      responses:
       '200':
         description: Operation successful
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/luaConfig'
           application/xml:
             schema:
               $ref: '#/components/schemas/luaConfig'
       '400':
          $ref: '#/components/responses/BadRequest'
  /luaConfig/{key}:
    x-xpath: '/luaConfig/luaConfigPair[@key="{key}"]'
    x-ref:
      name: 'luaConfigPair'
      type: 'luaConfigPair'
      returns: 'LuaConfigPair'
    parameters:
      - name: key
        in: path
        description: The name of the variable
        required: true
        schema:
          type: string
    get:
      tags:
        - All
        - Get
        - LuaConfigPair
      description: Get the luaScript with the specified name.
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/luaConfigPair'
            application/xml:
              schema:
                $ref: '#/components/schemas/luaConfigPair'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
    put:
      tags:
        - All
        - Put
        - LuaConfigPair
      description: Update the luaScript with the specified name.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/luaConfigPair'
          application/xml:
            schema:
              $ref: '#/components/schemas/luaConfigPair'
    patch:
      tags:
        - All
        - Put
        - LuaConfigPair
      description: Update the luaScript with the specified name.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: NotFound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/luaConfigPair'
          application/xml:
            schema:
              $ref: '#/components/schemas/luaConfigPair'

  /contactList:
    description: This path was only added so that the contactList schema is considered and at least the XSD is built for it.
    x-xpath: '/contactList'
    x-ref:
      name: contactList
      type: contactList
      returns: Contact
      include: true
    get:
      description: Only a dummy get for unit tests - do not use!
      tags:
        - All
        - Get
        - ContactList
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/contactList'
            application/xml:
              schema:
                $ref: '#/components/schemas/contactList'

  /resources:
    x-xpath: '/resources'
    x-ref:
      name: resources
      type: resources
      returns: Resources
      include: true
    get:
      tags:
        - All
        - Get
        - Resources
      description: Fetch the additionally provisioned resources
      responses:
        200:
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/resources'
            application/xml:
              schema:
                $ref: '#/components/schemas/resources'

  /homeScreenDesign:
    x-xpath: '/homeScreenDesign'
    x-ref:
      name: homeScreenDesign
      type: homeScreenDesign
      returns: HomeScreenDesign
      include: true
    get:
      tags:
        - All
        - Get
        - HomeScreenDesign
      description: Get the home screen design
      responses:
        200:
          description: Operation successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/homeScreenDesign'
            application/xml:
              schema:
                $ref: '#/components/schemas/homeScreenDesign'
    put:
      tags:
        - All
        - Put
        - HomeScreenDesign
      description: Update the home screen design
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/homeScreenDesign'
          application/xml:
            schema:
              $ref: '#/components/schemas/homeScreenDesign'
    patch:
      tags:
        - All
        - Put
        - HomeScreenDesign
      description: Update the home screen design
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/homeScreenDesign'
          application/xml:
            schema:
              $ref: '#/components/schemas/homeScreenDesign'

  /remoteAccess/filterSettings:
    x-xpath: /remoteAccess/filterSettings
    x-ref:
      include: true
      name: filterSettings
      type: filterSettings
      returns: FilterSettings
    get:
      tags:
        - All
        - Get
        - FilterSettings
      description: Get the 'filter settings' settings.
      responses:
        '200':
          description: Operation successfull
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/filterSettings'
            application/xml:
              schema:
                $ref: '#/components/schemas/filterSettings'
        '400':
          $ref: '#/components/responses/BadRequest'
    put:
      tags:
        - All
        - Put
        - FilterSettings
      description: Update the 'filter settings' settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/filterSettings'
          application/xml:
            schema:
              $ref: '#/components/schemas/filterSettings'
    patch:
      tags:
        - All
        - Put
        - FilterSettings
      description: Update the 'filter settings' settings.
      responses:
        '200':
          description: Operation successful
        '400':
          $ref: '#/components/responses/BadRequest'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/filterSettings'
          application/xml:
            schema:
              $ref: '#/components/schemas/filterSettings'

components:
  responses:
    BadRequest:
      description: Invalid request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AppError'
    IllegalInput:
      description: Illegal input for operation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AppError'
  schemas:
    AppError:
      type: object
      properties:
        code:
          type: integer
          format: int32
          minimum: 0
          exclusiveMinimum: true
        message:
          type: string
        request_id:
          type: string

    privacy:
      description: The phones privacy settings
      type: object
      properties:
        sentry:
          $ref: '#/components/schemas/sentry'

    sentry:
      description: Settings for sentry
      type: object
      properties:
        sendErrors:
          description: |
            Whether errors in the phone should be reported with sentry
            to the developers.
            This option is subject to data protection laws in the users country.
            Activating this may require you to inform the user about this.
          type: boolean
          default: false
        permissionAsked:
          description: |
            Whether the admin has already been asked to report errors.
            If true, the administrator shouldn't be bothered anymore.
          type: boolean
          default: false

    users:
      description: A list of all users
      type: array
      items:
        $ref: '#/components/schemas/user'
      xml:
        wrapped: true

    user:
      description: A single user
      x-id-attribute: name
      type: object
      required:
        - name
        - password
        - role
      properties:
        name:
          description: |
            The name of the user used for login.
            It is at the same time the unique id.
          type: string
          pattern: ^[^:]*$
          xml:
            attribute: true
        displayName:
          description: |
            The name of the user used for display.
            If it is empty, the name will be used.
          type: string
        password:
          description: |
            The password for the user.
            If the password is provisioned, you have to
            supply a hashed password.
            You can create a compatible hash using the
            tool provided in the web interface
            at the following url:
            `https://<Your-IP>/#/generateHash`.
            Over the api, you send the password over HTTPS
            in clear text, where it gets hashed in the
            webserver.
          type: string
          format: password
          minLength: 8
        role:
          $ref: '#/components/schemas/role'
        image:
          description: |
            The image for the user, base64 encoded or as http(s) uri.
            The image should not exceed 300x300px.
          type: string
          format: byte
        changePassword:
          description: |
            Indicates whether a user has to change his password.
            This flag will only be evaluated by client side logins
            and any tool handling the login should honour it.
          type: boolean

    role:
      description: |
        The role for the user.
        an admin is allowed to do everything.
        A user is not allowed to configure anything by default,
        additional rights for the user have to be explicitly granted
      type: string
      default: user
      enum:
        - user
        - admin

    rights:
      description: |
        A list of xpath values which are supposed to
        serve as either a allow or blocklist.
      type: array
      items:
        type: string

    contacts:
      type: object
      description: Describes a contacts setup
      properties:
        ldap:
          $ref: '#/components/schemas/ldap'
        smoothSync:
          $ref: '#/components/schemas/smoothSync'
        orderBy:
          $ref: '#/components/schemas/orderNameBy'
        nameFormat:
          $ref: '#/components/schemas/nameFormat'

    ldap:
      type: object
      description: Describes a ldap setup
      required:
        - server
        - username
        - password
      properties:
        active:
          description: use this service or not
          type: boolean
          default: false
        server:
          description: ldap server address fqdn or ip address
          example: ldap.example.org
          type: string
        ldapProtocol:
          $ref: '#/components/schemas/ldapProtocol'
        port:
          description: ldap server port 389 or 636 (LDAPS)
          type: integer
          format: int32
          minimum: 1
          maximum: 65535
          default: 389
        ldapVersion:
          description: ldap protocol version 2 or 3
          $ref: '#/components/schemas/ldapVersion'
        username:
          description: username to login
          example: telephoneNumber=1234, dc=example
          type: string
        password:
          description: The password to authenticate the for the ldap server
          type: string
          format: password
        nameFilter:
          description: name filter according to RFC2254
          type: string
          default: (|(cn=%*)(cn=* %*)(sn=%*)(sn=* %*)(givenName=%*)(givenName=* %*))
        numberFilter:
          description: number filter according to RFC2254 for reverse number lookup
          type: string
          default: (|(telephoneNumber=*%)(mobile=*%)(homePhone=*%))
        dialerNumberFilter:
          description: number filter according to RFC2254 for the number suggestion list in the dialer
          type: string
          default: (|(telephoneNumber=*%*)(mobile=*%*)(homePhone=*%*))
        baseDN:
          description: scope that will be searched
          example: dc=example
          type: string
        maxHits:
          description: maximum size of a result list for a filtered search
          type: integer
          format: int32
          minimum: 1
          maximum: 32000
          default: 20
        maxEntriesOnStart:
          description: |
            Maximum size of a result list for an unfiltered search when
            starting the contacts app
          type: integer
          format: int32
          minimum: 0
          maximum: 32000
          default: 100
        nameAttributes:
          description: what names are you looking for
          type: string
          default: cn sn givenName company o
        numberAttributes:
          description: what numbers are you looking for
          type: string
          default: mobile telephoneNumber homePhone
    ldapProtocol:
      description: ldap lts modes
      type: string
      default: ldap
      enum:
        - ldap
        - ldapStartTls
        - ldaps
    ldapVersion:
      description: LDAP protocol version
      type: string
      default: three
      enum:
        - two
        - three
    smoothSync:
      type: array
      items:
        $ref: '#/components/schemas/smoothSyncConfiguration'
      description: set of smoothSync configuration parameters
      x-hide: # Possible values: 'all', 'xsd', 'server', 'client', 'java', 'c'
        - 'c'
      xml:
        wrapped: true
    smoothSyncConfiguration:
      description: a single smoothSync configuration parameter
      type: object
      x-hide: # Possible values: 'all', 'xsd', 'server', 'client', 'java', 'c'
        - 'c'
      x-id-attribute: name
      required:
        - name
      properties:
        name:
          type: string
          description: the name of this smooth Sync config
          xml:
            attribute: true
        username:
          type: string
          description: username to login on the server
        password:
          type: string
          description: password to login on the server
          format: password
          example: secretPassword
        readonly:
          type: boolean
          description: whether the services are read-only or not
          default: false
        services:
          type: array
          items:
            $ref: '#/components/schemas/smoothSyncService'
    smoothSyncService:
      type: object
      x-name: smoothSyncService
      x-hide: # Possible values: 'all', 'xsd', 'server', 'client', 'java', 'c'
        - 'c'
      properties:
        serviceType:
          $ref: '#/components/schemas/smoothSyncServiceType'
        uri:
          description: "The URL of the service"
          type: string
    smoothSyncServiceType:
      description: Type of service.
      x-hide: # Possible values: 'all', 'xsd', 'server', 'client', 'java', 'c'
        - 'c'
      type: string
      enum:
        - CalDAV
        - CardDAV
      default: CardDAV
    orderNameBy:
      description: name sorting order for contact query results
      type: string
      default: orderByFirstname
      enum:
        - orderByFirstname
        - orderByLastname
    nameFormat:
      description: name format for contact query results
      type: string
      default: givenNameFirst
      enum:
        - givenNameFirst
        - surnameFirst
    keyLayer:
      description: "3 layer of function keys"
      type: object
      properties:
        phoneXtensions:
          $ref: '#/components/schemas/xtensionKeyLayer'
        extensionModule1:
          $ref: '#/components/schemas/xtensionKeyLayer'
        extensionModule2:
          $ref: '#/components/schemas/xtensionKeyLayer'
        extensionModule3:
          $ref: '#/components/schemas/xtensionKeyLayer'
    xtensionKeyLayer:
          type: integer
          format: int32
          minimum: 1
          maximum: 3
          default: 1
    keys:
      description: "All keys that can be configured"
      type: object
      properties:
        phoneXtensions:
          type: array
          minItems: 0
          maxItems: 18
          description: "On D-100/D-200: 18 (3x6) self-labeling Xtension keys in idle-screen."
          items:
            $ref: '#/components/schemas/key'
          xml:
            wrapped: true
        extensionModule1:
          $ref: '#/components/schemas/xtensionKeys'
        extensionModule2:
          $ref: '#/components/schemas/xtensionKeys'
        extensionModule3:
          $ref: '#/components/schemas/xtensionKeys'
        homeScreen:
          $ref: '#/components/schemas/softKeys'
    xtensionKeys:
      description: "60 Xtension keys on an extension module."
      type: array
      minItems: 0
      maxItems: 60
      items:
        $ref: '#/components/schemas/key'
      xml:
        wrapped: true
    softKeys:
      description: 4 keys below the display
      type: array
      minItems: 0
      maxItems: 4
      items:
        $ref: '#/components/schemas/key'
      xml:
        wrapped: true
    groupedKeys:
      description: abstracted version of a collection of keys without any upper bound
      type: array
      items:
        $ref: '#/components/schemas/key'
      xml:
        wrapped: true
    keyGroup:
      description: The group a key belongs to
      x-name: keyGroupEnum
      type: string
      enum:
        - mainModule # not available in provisioning, only in here to keep index in sync wth c-code
        - phoneXtensions
        - extensionModule1
        - extensionModule2
        - extensionModule3
        - homeScreen
    key:
      type: object
      description: |
        Describes a single functionkey.
      x-id-attribute: keyNumber
      required:
        - keyNumber
      properties:
        keyNumber:
          description: The number of the key. Uniquely identifies a key within a module.
          type: integer
          format: int32
          minimum: 1
          exclusiveMinimum: false
          xml:
            attribute: true
        label:
          description: |
            The name of the key.
            If starting with @string/ an android resource is used.
          type: string
          xml:
            attribute: true
        info:
          description: |
            Detail info of the key mostly displayed on a second line
            If starting with @string/ an android resource is used.
          type: string
          xml:
            attribute: true
        icon:
          description: |
            The icon of the key, base64 encoded.
            The icon is scaled to fit the display container.
            If starting with @drawable/ an android resource is used.
          type: string
          format: byte
          xml:
            attribute: true
        keyConfiguration:
          $ref: '#/components/schemas/keyConfiguration'
        templateName:
          description: |
            Reference to the text element of the template name.
          type: string
        parameters:
          description: |
            List of parameters.
          type: array
          items:
            $ref: '#/components/schemas/keyParam'
          xml:
            wrapped: true
    keyConfiguration:
      type: object
      description: |
        Various configuration parameters for a functionkey.
        This can either be:
        - lua code
        - a line (obsolete though still used, will be replaced by lua code)
        - a list of functions assigned to the key (obsolete though still used,
          will be replaced by lua code)
      oneOf:
        - type: object
          properties:
            lua:
              $ref: '#/components/schemas/luaContent'
        - type: object
          properties:
            line:
              $ref: '#/components/schemas/line'
        - type: object
          properties:
            function:
              $ref: '#/components/schemas/keyFunction'
    keyFunction:
      type: object
      description: |
        Describes a single function for a functionkey.
        This can any one (or both) of:
        - a reaction to something
        - invoking an action
      anyOf:
        - $ref: '#/components/schemas/keyReactions'
        - $ref: '#/components/schemas/keyInvocations'
    keyReactions:
      type: array
      description: An array of possible reactions for a functionkey
      minItems: 0
      items:
        $ref: '#/components/schemas/keyReaction'
      xml:
        name: reactions
        wrapped: true
    keyReaction:
      type: object
      xml:
        name: reaction
      description: A reaction for a functionkey
      oneOf:
        - type: object
          properties:
            ledSetting:
              $ref: '#/components/schemas/ledSetting'
        - type: object
          properties:
            presence:
              $ref: '#/components/schemas/presence'
    presence:
      type: object
      required:
        - subscribe
      properties:
        subscribe:
          $ref: '#/components/schemas/subscribe'
        enabled:
          description: Enable subscription
          type: boolean
          default: true
          xml:
            attribute: true
        withCalllog:
          description: Signal missed call via green LED
          type: boolean
          default: true
          xml:
            attribute: true
    subscribe:
      type: object
      required:
        - uri
        - type
      properties:
        uri:
          $ref: '#/components/schemas/uri'
        line:
          description: |
            If left out, the first available line is used.
          $ref: '#/components/schemas/line'
        listenFor:
          type: string
          description: |
            If the subscribeType is dialog, you can specify here
            what to listen for. In every other case, this option
            is ignored.
        type:
          $ref: '#/components/schemas/subscribeType'
          xml:
            attribute: true
    subscribeType:
      type: string
      description: The type of the subscription
      default: dialog
      enum:
        - dialog
        - message-summary
    ledSetting:
      type: object
      description: LED reactions for a key
      properties:
        ledColor:
          $ref: '#/components/schemas/ledColor'
          xml:
            attribute: true
        ledBlinking:
          $ref: '#/components/schemas/ledBlinking'
          xml:
            attribute: true
    keyInvocations:
      type: array
      description: An array of possible actions for a functionkey
      minItems: 1
      items:
        $ref: '#/components/schemas/keyInvocation'
      xml:
        name: invocations
        wrapped: true
    keyInvocation:
      xml:
        name: invocation
      type: object
      description: |
        An action for a functionkey.
        This can either be:
        - A HTTP request
        - A dialogMessage
      oneOf:
        - type: object
          properties:
            http:
              $ref: '#/components/schemas/keyHttpRequest'
        - type: object
          properties:
            setting:
              $ref: '#/components/schemas/keySetting'
        - type: object
          properties:
            dialog:
              $ref: '#/components/schemas/dialogMessage'
        - type: object
          properties:
            invite:
              $ref: '#/components/schemas/keyInvite'
        - type: object
          properties:
            intent:
              $ref: '#/components/schemas/keyIntent'
    keyInvite:
      type: object
      required:
        - uri
      properties:
        uri:
          $ref: '#/components/schemas/uri'
        line:
          $ref: '#/components/schemas/line'
        hidden:
          description: do invisible call
          type: boolean
          default: false
          xml:
             attribute: true
        doPickup:
          description: Try pickup before starting speed dial
          type: boolean
          default: true
          xml:
             attribute: true
        autoAnswer:
          description: |
            When calling via speed dial -> also add a sip-header that marks
            the call as auto-answetr so the call connects immediately without
            ringing first.
          type: boolean
          default: false
          xml:
             attribute: true
    keyIntent:
      type: object
      required:
        - action
      properties:
        action:
          type: string
        data:
          $ref: '#/components/schemas/uri'
        component:
          $ref: '#/components/schemas/component'
        extras:
          $ref: '#/components/schemas/bundle'
    component:
      type: string
    bundle:
      type: array
      description: |
        A map of `'string': bool | int | string`
      items:
        oneOf:
          - type: object
            allOf:
              - $ref: '#/components/schemas/bundle_key'
              - type: object
                properties:
                  value:
                    type: boolean
                    xml:
                      attribute: true
            xml:
              name: booleanExtra
          - type: object
            allOf:
              - $ref: '#/components/schemas/bundle_key'
              - type: object
                properties:
                  value:
                    type: integer
                    format: int64
                    xml:
                      attribute: true
            xml:
              name: intExtra
          - type: object
            allOf:
              - $ref: '#/components/schemas/bundle_key'
              - type: object
                properties:
                  value:
                    type: string
                    xml:
                      attribute: true
            xml:
              name: stringExtra

    bundle_key:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          xml:
            attribute: true
      xml:
        wrapped: true
    keySetting:
      type: object
      required:
        - path
        - value
      properties:
        path:
          $ref: '#/components/schemas/uri'
          xml:
            attribute: true
        values:
          type: array
          minItems: 1
          items:
            type: object
            allOf:
              - type: object
                properties:
                  value:
                    type: string
              - type: object
                properties:
                  led:
                    $ref: '#/components/schemas/ledSetting'
        other:
          $ref: '#/components/schemas/ledSetting'
    line:
      type: object
      required:
        - id
      properties:
        id:
          type: string
        component:
          $ref: '#/components/schemas/component'
    dialogMessage:
      type: string
      description: Creates a message dialog on the screen.
    keyHttpRequest:
      type: object
      x-JMembersCapsuled: true
      description: |
        A HTTP request action that can be triggered by pressing a functionkey.
      allOf:
        - type: object
          properties:
            request:
              $ref: '#/components/schemas/httpRequest'
        - type: object
          properties:
            httpReactions:
              $ref: '#/components/schemas/httpReactions'

    httpReactions:
      type: array
      xml:
        wrapped: true
      minItems: 1
      items:
        oneOf:
          - $ref: '#/components/schemas/httpReactionResponseCode'
          - $ref: '#/components/schemas/httpReactionResponseHeader'
    httpReactionResponseCode:
      type: object
      x-JMembersCapsuled: true
      x-JMembersInsertRefs: true
      xml:
        name: responseCode
      allOf:
        - type: object
          properties:
            responseCode:
              type: integer
              format: int32
              minimum: 0
            dialogMessage:
              $ref: '#/components/schemas/dialogMessage'
              xml:
                attribute: true
        - $ref: '#/components/schemas/ledSetting'
    httpReactionResponseHeader:
      type: object
      x-JMembersCapsuled: true
      x-JMembersInsertRefs: true
      xml:
        name: responseHeader
      allOf:
        - type: object
          properties:
            dialogMessage:
              $ref: '#/components/schemas/dialogMessage'
              xml:
                attribute: true
        - $ref: '#/components/schemas/ledSetting'
        - $ref: '#/components/schemas/httpHeader'
    httpRequest:
      type: object
      description: A HTTP Request
      required:
        - httpMethod
      properties:
        httpHeader:
          $ref: '#/components/schemas/httpHeader'
        httpMethod:
          $ref: '#/components/schemas/httpMethod'
          xml:
            attribute: true
        uri:
          $ref: '#/components/schemas/uri'
        httpContent:
          $ref: '#/components/schemas/httpContent'
    httpContent:
      description: The content of an HTTP request
      type: string
    uri:
      type: string
    httpMethod:
      description: Possible HTTP Methods like `GET` or `POST`
      type: string
      default: get
      enum:
        - get
        - post
        - delete
        - put
        - patch
    ledBlinking:
      type: boolean
      description: Whether the LED should blink or not.
      default: false
    luaContent:
      type: object
      required:
        - code
      properties:
        code:
          $ref: '#/components/schemas/luaCode'
        params:
          type: array
          items:
            $ref: '#/components/schemas/luaParam'
          xml:
            wrapped: true
    keyParam:
      xml:
        name: parameter
      type: object
      properties:
        name:
          description: |
            Name of the parameter, has to be unique.
            Often starts with "@string/" which enables to show the translated
            name in WUI and PUI.
          type: string
          xml:
            attribute: true
        value:
          type: string
          xml:
            attribute: true
      required:
        - name
    luaParam:
      xml:
        name: param
      description: A parameter for lua scripts to be set by the template.
      type: object
      properties:
        name:
          type: string
          xml:
            attribute: true
        value:
          type: string
      required:
        - name
    luaCode:
      description: a lua-script
      type: string
    callBindings:
      type: array
      xml:
        wrapped: true
      items:
        $ref: '#/components/schemas/callBinding'
    callBinding:
      description: |
        Define custom softkeys and/or a camera to be used when in-call with a certain party.
      type: object
      required:
       - name
       - remoteParty
      x-id-attribute: name
      properties:
        name:
          description: uniquely identifies this callBinding
          type: string
          xml:
            attribute: true
        remoteParty:
          description: |
            A regular expression that is matched against the sip-uri (username@host)
            of a remote party
          type: string
          example: ^555@.*$
        camera:
          description: |
            name of one of the cameras to be shown when in-call with the
            specified remote party
          type: string
        softKeys:
          xml:
            wrapped: true
          description: define custom softkeys to be displayed - up to two during a certain call-state.
          type: array
          items:
            $ref: '#/components/schemas/inCallKey'
    inCallKey:
      type: object
      description: define a custom softkey to be displayed during certain call-states.
      properties:
        key:
          $ref: '#/components/schemas/key'
          x-id-attribute: ""
        callStates:
          type: array
          description: 'List of call-states in which the key should appear.'
          default:
            - calling
            - ringing
            - holding
            - connected
            - disconnected
          items:
            $ref: '#/components/schemas/callState'
    callState:
      x-name: "callState"
      description: |
        State of a call. E.g.: a new outgoing call starts with ringing and
        when accepted becomes connected.
        Note: When you press hold on your device, the call's state will be
              holding. But when instead the other party holds you, the state
              will stay connected.
      type: string
      enum:
        - calling # outgoing
        - ringing # incoming
        - holding
        - connected
        - disconnected

    devices:
      description: cameras and stuff
      type: object
      x-hide: # Possible values: 'all', 'xsd', 'server', 'client', 'java', 'c'
        - 'xsd'
      properties:
        cameras:
          $ref: '#/components/schemas/ipCameras'
    ipCameras:
      x-hide:
        - 'xsd'
      type: array
      xml:
        wrapped: true
      items:
        $ref: '#/components/schemas/ipCamera'
    ipCamera:
      x-hide:
        - 'xsd'
      description: |
        A camera that can deliver images-files via http-get requests.
        Can be listed in our Camera App. See devices-setting if
        you want to use a Camara in calls.
      type: object
      required:
       - name
      x-id-attribute: name
      properties:
        name:
          description: uniquely identifies this camera
          type: string
          xml:
            attribute: true
        url:
          description: the url to use for inquiring images
          $ref: '#/components/schemas/uri'
        refreshRateInMs:
          description: how often to update the image.
          type: integer
          default: 1000
          minimum: 100
        user:
          description: User in case http-request need authorization.
          type: string
        password:
          description: Password in case http-request need authorization.
          type: string
        privacyProtected:
          description: |
            Protected cameras can only be watched, when they are attached to
            an incoming call. This is intended for door-intercoms so
            passers-by don't get spyed on.http-request need authorization.
          type: boolean
          default: false
        panTiltZoom:
          $ref: '#/components/schemas/panTiltZoom'
    panTiltZoom:
      x-hide:
        - 'all'
      description: |
        Not used yet!
        Url's to control the PTZ-features. When set they change the default-
        behaviour of certain Keys in a Video-call. E.g. volume-control is no
        longer available in favor for of access to the camera zoom.
      type: object
      properties:
        up:
          description: Tilt up. Accessed in Call-Screens via up navi-key.
          $ref: '#/components/schemas/uri'
        down:
          description: Tilt down. Accessed in Call-Screens via down navi-key.
          $ref: '#/components/schemas/uri'
        left:
          description: Pan left. Accessed in Call-Screens via left navi-key.
          $ref: '#/components/schemas/uri'
        right:
          description: Pan right. Accessed in Call-Screens via right navi-key.
          $ref: '#/components/schemas/uri'
        zoomIn:
          description: Zoom in. Accessed in Call-Screens via Volume-up-key.
          $ref: '#/components/schemas/uri'
        zoomOut:
          description: Zoom out. Accessed in Call-Screens via Volume-down-key.
          $ref: '#/components/schemas/uri'
        reset:
          description: Assume default zoom and/or center. Accessed in Call-Screens via OK-key.
          $ref: '#/components/schemas/uri'

    ledColor:
      description: |
        The possible values a LED can have.
        These are probably not supported on all LEDs.
      type: string
      default: 'off'
      enum:
        - 'off'
        - red
        - orange
        - green
    httpHeader:
      description: |
        A key/value map of a HTTP header
        ``` json
        {
          'Accept': 'application/json'
        }
        ```
      type: object
      properties:
        header:
          type: string
          xml:
            attribute: true
        value:
          type: string
          xml:
            attribute: true
    identities:
      description: Identities
      type: array
      minItems: 6
      maxItems: 6
      items:
        $ref: '#/components/schemas/identity'
      xml:
        wrapped: true
    identity:
      type: object
      description: Describes a single identity
      properties:
        active:
          description: enables the identity for registration
          type: boolean
          default: false
        username:
          description: The user part of a SIP URI to register the identity
          type: string
          example: 5551234
        password:
          description: The password to authenticate the identity register
          type: string
          format: password
          example: secretPassword
        displayname:
          description: The display name of the identity
          type: string
        registrar:
          description: The SIP registrar hostname/address
          type: string
          example: sip.example.org
        registrarPort:
          description: The SIP registrar port
          type: integer
          format: int32
          minimum: 1
          maximum: 65535
          default: 5060
        dtmfMethod:
          $ref: '#/components/schemas/dtmfType'
          default: rtpPayload
        domain:
          description: |
            The domain of the identity (may differ from registrar).
            There are scenarios, where the registrar is a specific host e.g
            sip.example.com but the sip participants are using a different
            domain e.g alice@example.org. In thisve example, the domain
            would be example.org.
          type: string
        registerInterval:
          description: Timeout of registration in minutes
          type: integer
          format: int32
          minimum: 5
          maximum: 60
          default: 30
        subscriptionInterval:
          description: |
            Timeout of subscriptions in minutes. Shorter values can produce
            a significant performance impact.
          type: integer
          format: int32
          minimum: 1
          maximum: 120
          default: 45
        subscriptionFailureHandling:
          $ref: '#/components/schemas/subscrFailureHandling'
        registrationFailureHandling:
          $ref: '#/components/schemas/regFailureHandling'
        nat:
          $ref: '#/components/schemas/nat'
        outboundProxy:
          $ref: '#/components/schemas/outboundProxy'
        dialplan:
          $ref: '#/components/schemas/dialplan'
        useDialplanInCallLog:
          description: |
            Use the dialplan when starting a call from the CallLog.
          type: boolean
          default: false
        isLoggedInRoamer:
          description: |
            for roaming users this setting marks wether or not a roaming user
            is logged in. Whenever a roaming user loggs out we clear the
            callists and other sensitive data. Though this setting is
            identity-based we do global clearing of all sensitive data.
          type: boolean
          default: false
        sendUserImage:
          description: |
            When primary user (first <role>user</role> in <users>) has set
            an url as image -> use it in calls so other side may see that
            picture.
            Is send via Call-Info header.
            Image will not be send when telephony/clir is active.
          type: boolean
          default: true
        audiocodecs:
          $ref: '#/components/schemas/audiocodeclist'
        messagesAlertWithSound:
          description: |
            When a sip-Message (an instant text-message) is received and
            shown: also sound an alert tone or not.
          type: boolean
          default: true
        clir:
          default: displayAnonymous
          $ref: '#/components/schemas/clirType'
        pAssertedMightBeTransfer:
          description: |
            Pbx sometimes uses P-Asserted-Identity headers to signal a
            transfer. This is usually not the case except for Auerswald
            PBXes. When set to true: phone re-interprets those headers as
            transfers if the target number is sufficiently different from
            the original number.
          type: boolean
          default: true
        vmb:
          description: |
            The sip-username where the phone should subscribe to to get
            information about voice-messages. It is also used to make the
            call when trying to access these messages.
          type: string
        vmbAction:
          $ref: '#/components/schemas/vmbAction'
        localmoh:
          description: |
            plays local music on hold if a call of this identity is set on
            hold. When enabled, held calls will take away one audio-channel.
            Since our phones only have 2 channels, this will limit the
            number of simultaneous calls to two.
          type: boolean
          default: false
        secureConnection:
          description: |
            Activates sips (SIP over TLS) on connections with this identity.
            Most likely you have to provide a certificate for the host you
            provided to be able to connect safely and successfully.
          type: boolean
          default: false
        useIce:
          description: |
            Use ICE to determine audio-connection. Disable this when ICE is
            not needed/used, this helps our SipStack to add the correct IP
            in sdp-offers, especially in VPN-scenarios.
          type: boolean
          default: false
        sdpNatRewriteUse:
          description: |
            This option controls whether the IP address in SDP should be
            replaced with the IP address found in Via header of the REGISTER
            response, ONLY when STUN and ICE are not used. If the value is
            FALSE (the original behavior), then the local IP address will be
            used. If TRUE, and when STUN and ICE are disabled, then the IP
            address found in registration response will be used.
          type: boolean
          default: true
        sdpInterfaceDetection:
          description: |
            This option controls whether the IP address in SDP should be
            determined by resolving the interface by the registar address.
            this can be useful if an registar is only available on a not
            primarily routed network, for example vpn
          default: false
          type: boolean
        srtp:
          $ref: '#/components/schemas/srtpMode'
        Peer2PeerTls:
          description: |
            SIPS scheme is used if activated. Means the whole SIP path must
            be encrypted by TLS
          type: boolean
          default: false
        certificate:
          description: |
            Root certificate used as a trust anchor for the host. Text in
            PEM format.
          $ref: '#/components/schemas/pemCert'
        pickupCode:
          description: |
            used as pre code for the user part in an invite URI in case of a
            pickup szenario. e.g. '##06'
          type: string
        dialTone:
          description: |
            When set, overwrites the country-specific dial-tone you hear when
            lifting the handset. Uses an internal tone-generator-syntax
            called CPT. e.g. 425@-6;(*/0/1).
            See http://wiki.auerswald.de/doku.php?id=en:products:comfortel-d-series:developer:callProgressTones
          type: string
        ipVersion:
          description: ip version (v4, v6 or automatic) for communication with the host
          $ref: '#/components/schemas/ipVersion'
        authenticationUsername:
          description: optional authentication username used by some of the providers
          type: string
        protocolType:
          $ref: '#/components/schemas/networkProtocol'
          default: tcp
        sessionTimerActive:
          description: use timeout for SIP sessions
          type: boolean
          default: true
        sessionTimerValue:
          description: timeout for SIP sessions in minutes
          type: integer
          format: int32
          minimum: 2
          default: 15
          maximum: 255
        fallbackFor:
          description: |
            the identity which this one is the fallback for (if the actual
            one cannot register) 0 := this is not a fallback identity
          type: integer
          format: int32
          minimum: 0
          default: 0
          maximum: 6
        ringtone:
          description: ringtone assigned to this identity
          default: SystemDefaultRingtone
          type: string
        startEarlyMediaMuted:
          description: |
            when a party wants two way early media, this setting sets the
            mic to muted. The mute will be released automatically when the
            call is connected.
          type: boolean
          default: false
        conferenceBridge:
          description: |
            The sip-uri or number of an conference bridge. When configured
            conferences will be started in that bridge instead of locally.
          type: string
          example: 3344
        startDialscreenAlphanumeric:
          description: |
            when the dialscreen is opened, and a call will be created for
            this identity the input method will be set accoring to this
            setting
          type: boolean
          default: false
        rewriteContact:
          description: |
            PjSip-option contactRewriteUse (google for more details).
            Controls how often the send contact-header gets changed. Defaults
            to 2 (lots), set to 0 to have it all but fixed or 1 for an
            intermediate state.
          type: integer
          format: int32
          minimum: 0
          maximum: 2
          default: 2
        earlyRefreshRegOffset:
          description: |
            Specify the number of seconds to refresh the client registration
            before the registration expires.
            The value should be lower than the configured registration time.
            This setting is ignored when useHalvedExpiry is enabled.
          type: integer
          format: int32
          minimum: 5
          maximum: 3600
          default: 5
        useHalvedExpiry:
          description: Send re-register after the halved expiry duration elapsed
          type: boolean
          default: false
        nameSources:
          $ref: '#/components/schemas/nameSourceList'
        nrSources:
          $ref: '#/components/schemas/nrSourceList'
        auerWebApiUser:
          description: The user name for accessing the pbx WebApi. Provisioning only.
          type: string
        auerWebApiPasswd:
          description: The user password for accessing the pbx WebApi. Provisioning only.
          type: string
        auerWebApiPort:
          description: The HTTPS port for accessing the pbx WebApi. Provisioning only.
          type: integer
          format: int32
          minimum: 0
          maximum: 65535
          default: 443

    subscrFailureHandling:
      description:  What to do when a subscription fails.
      type: object
      properties:
        retryType:
          $ref: '#/components/schemas/retryType'
          default: linear
        retryInterval:
          description: |
            Interval in seconds until a subscription is retried after it got
            terminated by remote. Different subscripton-failures use this
            setting differently. E.g. a notify with
            `Subscription-State: terminated` follows this setting 1:1 while
            a subscription-request that gets answered with
            `500 Server Internal Error` multiplies this setting by 10.
          type: integer
          format: int32
          minimum: 10
          default: 180

    regFailureHandling:
      description:  What to do when a registration fails.
      type: object
      properties:
        retryType:
          $ref: '#/components/schemas/retryType'
          default: linear
        retryInterval:
          description: |
            Interval in seconds until a registration is retried after it failed.
          type: integer
          format: int32
          minimum: 1
          default: 10

    retryType:
      description: |
        When to retry: either never, or every xy seconds (linear) or
        quadratic (i.e. first wait xy seconds, if that retry fails wait 2
        times xy seconds, if that fails wait 4 times as long until another
        attempt).
      type: string
      enum:
        - never
        - linear
        - quadratic

    networkInterface:
      type: string
      default: network
      enum:
        - network
        - vpn

    networkProtocol:
      description: protocol used for network traffic
      type: string
      enum:
        - udp
        - tcp

    srtpMode:
      type: string
      default: disabled
      enum:
        - mandatory
        - optional
        - disabled
    ipVersion:
      type: string
      default: IpAuto
      enum:
        - IpV4
        - IpV6
        - IpAuto
    nat:
      description: |
        Settings that are needed for networks where a network address
        translation is active
      type: object
      xml:
        name: nat
      properties:
        useStunSip:
          $ref: '#/components/schemas/useStun'
        useStunRtp:
          $ref: '#/components/schemas/useStun'
        keepaliveInterval:
          description: |
            interval in which keepalive packets are send. Value in seconds.
            Used to ensure that every network component in use is reminded,
            that our connection is still active.
          type: integer
          format: int32
          minimum: 15
          default: 45
          maximum: 255
    useStun:
      type: string
      default: inactive
      enum:
          - inactive
          - active
    outboundProxy:
      type: object
      xml:
        name: outboundProxy
      properties:
        mode:
          $ref: '#/components/schemas/outboundProxyMode'
        url:
          type: string
        port:
          type: integer
          format: int32
          minimum: 1
          maximum: 65535
          default: 5060
        url2:
          type: string
        port2:
          type: integer
          format: int32
          minimum: 1
          maximum: 65535
          default: 5060
    outboundProxyMode:
      type: string
      default: inactive
      enum:
        - inactive
        - automatic
        - manual
    dialplan:
      description: |
        a set of rules, that are applied on outgoing calls and can modify
        the number, so that this number can be routed on the outside network.
        The order of the rules is important. The first matching rule is used.
      type: array
      minItems: 1
      items:
        $ref: '#/components/schemas/rule'
      xml:
        wrapped: true
    rule:
      description: |
        if the pattern matches, the replace string is used. (...) defines
        blocks, that can be reused with $NUMBER. If three blocks are used in
        the pattern, we can use $1 $2 and $3 in the replace.
      type: object
      required:
       - pattern
       - replace
      properties:
        pattern:
          description: a regular expression
          type: string
          example: 555-(1234)
        replace:
          type: string
          example: $1
    audiocodeclist:
      description: |
        List of supported audio codecs. The order of the list is important.
        When creating a connection, the server and the client use the first
        codec, that is supported by both parties.
      type: array
      minItems: 1
      items:
        $ref: '#/components/schemas/audiocodec'
      xml:
        wrapped: true
      default:
        - G.722
        - G.711
        - G.726
        - G.729
        - iLBC
        - speex
        - opus
    audiocodec:
      x-name: audiocodec
      type: string
      example: G.722
      enum:
        - G.711
        - G.722
        - G.726
        - G.729
        - iLBC
        - speex
        - opus
    nrSourceList:
      description: |
          Prioritized list of where to get the telephone number from. The
          phone needs a number e.g. to present to the user and to look up
          names. If this list is empty or refers to a source that is not
          present in a call, then the phone defaults to using the from/to
          header.
      type: array
      minItems: 1
      items:
        $ref: '#/components/schemas/nrSource'
      xml:
        wrapped: true
      default:
        - sip_pai
        - sip_to_from
        - sip_contact
    nameSourceList:
      description: List of desired name sources. The order of the list is important.
      type: array
      minItems: 0
      items:
        $ref: '#/components/schemas/nameSource'
      xml:
        wrapped: true
      default:
        - fkeys
        - contacts
        - sip_pai
        - sip_to_from
        - sip_contact
        - ldap
    nameSource:
      description: |
          We distinguish between the following name sources in number-to-name
          searches:
          - 'fkeys' -> the phone number is searched for in all Speeddial keys
                       and (if successful) the name/label of the key is
                       delivered
          - 'contacts' -> the phone number is searched for in all contacts and
                          (if successful) the name is delivered
          - 'sip_pai' -> the name received via the P-Asserted-Identity header
          - 'sip_to_from' -> the name received via the To or From header
                             depending on direction of call
          - 'sip_contact' -> the name received via the Contact header
          - 'ldap' -> a request is made to an LDAP server with the phone
                      number (if successful) a name is delivered
      type: string
      enum:
        - fkeys
        - contacts
        - sip_pai
        - sip_to_from
        - sip_contact
        - ldap
    nrSource:
      description: |
          We distinguish between the following number sources in a call. This
          number is displayed during the call and is used for name-lookup's
          e.g. in ldap:
          - 'sip_pai' -> P-Asserted-Identity header
          - 'sip_to_from' -> To or From header depending on direction of call
          - 'sip_contact' -> Contact header
      type: string
      enum:
        - sip_pai
        - sip_to_from
        - sip_contact
    clirType:
      description: |
          When clir is enabled we set the X-Privacy-Header in outgoing calls.
          We also change the From-Header to either:
          - say the display-name is 'anonymous'
          - have the username set to anonymous, i.e. anonymous@registrar
      type: string
      default: displayAnonymous
      enum:
        - displayAnonymous
        - userAnonymous
    vmbAction:
      description: Determines whether messages for this identity are to be handled by calling the VMB or by opening the voicemail app. This action is set by the voicemail app, depending on whether the identity is configured in the app.
      type: string
      default: callVmb
      enum:
        - callVmb
        - openApp

    audioDevice:
      type: string
      enum:
        - speaker
        - headset

    sound:
      type: object
      properties:
        defaultRingtone:
          description: |
            Which ringtone shall be used by default. Defaults to "Office2"
            accepted values:
              80s
              American_Phone
              Big_A
              Classic1
              Classic2
              Classic3
              CrazyDream
              Door
              DreamTheme
              Groovy1
              Groovy2
              Groovy3
              Jazz1
              Jazz2
              Leo
              Office1
              Office2
              Office3
              Office4
              Old_Phone
              Road_Trip
              Special
              Aldebaran
              Talitha
              Selenium
              Alarm_Beep_01
              Alarm_Beep_02
              Scandium
          type: string
          ## default: "Office2" - not set here. #CFD_AP-6132 see ConfigApplication.java
        defaultNotification:
          description: |
            Which tone to use for notifications. Defaults to "Aldebaran"
            accepted values -> see defaultRingtone
          type: string
          ## default: "Aldebaran" - not set here #CFD_AP-6132 see ConfigApplication.java
        defaultAlarm:
          description: |
            Which tone to use for alarm-notifications (popup-notifications
            with sound). Defaults to "Alarm_Beep_01"
            accepted values -> see defaultRingtone
          type: string
          ## default: "Alarm_Beep_01" - not set here #CFD_AP-6132 see ConfigApplication.java
        pickupScreenNotification:
          description: |
            Which sound shall be used by pickup-screen. When not set (default)
            screen will use defaultNotification.
            accepted values -> see defaultRingtone
          type: string
          ## default: [empty]
        volumes:
          $ref: '#/components/schemas/volumes'
        useBluetoothWideband:
          description: should bluetooth connections use wideband audio
          default: true
          type: boolean
        alertInfoRingtones:
          description: |
            List of patterns and associated ringtones that can be used to
            decide which ringtone is used for which alert info.
          type: array
          items:
            $ref: '#/components/schemas/alertInfoRingtone'
          xml:
            wrapped: true

        stopSignallingByProximity:
            x-hide:
            - 'xsd'
            description: |
              Stop the signalling (ringing or call waiting) by moving in
              front of the proximity sensor. (D-600 only)
            default: true
            type: boolean

    alertInfoRingtone:
      type: object
      x-name: alertInfoRingtone
      properties:
        pattern:
          description: The pattern used to search for a match in the alert info.
          type: string
        ringtone:
          description: The ringtone to be used when this pattern is matched with the alert info
          type: string

    volumes:
      type: object
      properties:
        ringing:
          description: volume to use when phone is ringing
          type: integer
          format: int32
          minimum: 0
          maximum: 7
          default: 7
        notifying:
          description: volume to use when a notification becomes active
          type: integer
          format: int32
          minimum: 0
          maximum: 7
          default: 7
        alarming:
          description: volume to use when an alarm becomes active
          type: integer
          format: int32
          minimum: 0
          maximum: 7
          default: 7
        headset:
          description: volume-level used to play audio via headset
          type: integer
          format: int32
          minimum: 1
          maximum: 10
          default: 7
        speaker:
          description: volume-level used to play audio via speaker
          type: integer
          format: int32
          minimum: 1
          maximum: 10
          default: 7
        handset:
          description: volume-level used to play audio via handset
          type: integer
          format: int32
          minimum: 1
          maximum: 10
          default: 7

    ringtone:
      type: string
      x-no-enum: true
      enum:
        - 80s
        - American_Phone
        - Big_A
        - Champagne_Edition
        - Classic1
        - Classic2
        - Classic3
        - CrazyDream
        - Door
        - DreamTheme
        - Groovy1
        - Groovy2
        - Groovy3
        - Jazz1
        - Jazz2
        - Leo
        - Office1
        - Office2
        - Office3
        - Office4
        - Old_Phone
        - Road_Trip
        - Special
        - Aldebaran
        - Talitha
        - Selenium
        - Alarm_Beep_01
        - Alarm_Beep_02
        - Scandium

    ringtonesWithSystemRingtone:
      type: string
      x-name: ringtonesWithSystemRingtone
      x-no-enum: true
      enum:
        - SystemDefaultRingtone
        - 80s
        - American_Phone
        - Big_A
        - Champagne_Edition
        - Classic1
        - Classic2
        - Classic3
        - CrazyDream
        - Door
        - DreamTheme
        - Groovy1
        - Groovy2
        - Groovy3
        - Jazz1
        - Jazz2
        - Leo
        - Office1
        - Office2
        - Office3
        - Office4
        - Old_Phone
        - Road_Trip
        - Special
        - Aldebaran
        - Talitha
        - Selenium
        - Alarm_Beep_01
        - Alarm_Beep_02
        - Scandium

    telephony:
      description: settings for local telephony features.
      type: object
      properties:
        callWaiting:
          description: if and how a waiting call has to be signalised
          $ref: '#/components/schemas/callWaiting'
        doNotDisturb:
          description: if an incoming call shall be rejected
          $ref: '#/components/schemas/doNotDisturb'
        callForwarding:
          $ref: '#/components/schemas/callForwarding'
        clir:
          description: Tells the PBX to hide the callers identity in outgoing calls.
          $ref: '#/components/schemas/clir'
        defaultAudioDevice:
          description: default audio device in idle like headset or speaker
          default: speaker
          $ref: '#/components/schemas/audioDevice'
        activeLine:
          description: |
            line to use for unspecified outgoing calls. Uses the first defined line if not defined
          $ref: '#/components/schemas/line'
        callStartTimeout:
          type: integer
          format: int32
          description: |
            Time delay to start the call when there is no activity. Measured in milliseconds. -1 = never
          default: -1
        autoAccept:
          description: "connect incoming call automatically without user-interaction"
          $ref: '#/components/schemas/autoAccept'
        callCompletion:
          description: |
            when an outgoing call fails (busy 'CCBS', not responding 'CCNR')
            -> monitor the remote via subscription and inform the user when
               party becomes available
          $ref: '#/components/schemas/callCompletion'
        callBindings:
          $ref: '#/components/schemas/callBindings'
        callLogWithReachedTarget:
          description: |
            decide whether the reached target or the initially called target
            should be used in the calllog.
            the default will show the called target.
            Set to true, the config will lead to the reached target stated in
            the calllog, while the initially called number can be found in
            the via section of the calllog details.
          type: boolean
          default: false
        logCalls:
          description: |
            Calls received or started by the phone are logged so they are
            available in the call-log e.g. to call back a missed call or
            redial a formerly called party.
          type: boolean
          default: true
        discardObsoleteNotifies:
          description: |
            When the phone receives too many notifies to handle all at once,
            it build's up a queue. When this setting is enabled, each time the
            phone takes notifies out of that queue, it looks at all the queued
            notifies and only uses the most recent one from a subscription.
            Only works for subscriptions with event-type 'dialog'.
          type: boolean
          default: true
        directCall:
          description: "start a call to a specified number after a specified time when the dialer is opened"
          $ref: '#/components/schemas/directCall'
        pickupScreen:
          $ref: '#/components/schemas/pickupScreen'
        cleanupPhoneNumbers:
          description: |
            Convert user-input for dialing numbers from "+1 (206) 555-1234" to
            "+12065551234" before making the call. Set to false if your pbx
            actually needs the special characters.
          type: boolean
          default: true

    pickupScreen:
      type: object
      properties:
        showWhenNewPickupAvailable:
          description: |
            automatically opens the pickup-screen that list all available
            pickable calls from all participating keys. This screen will
            never open while user is in a call.
          type: boolean
          default: false
        playAlarmBeep:
          $ref: '#/components/schemas/playPickupAlarmBeepType'


    playPickupAlarmBeepType:
      type: string
      default: never
      enum:
        - never
        - onAutoPopup
        - onNewPickup

    autoAccept:
      type: object
      properties:
        immediatelyWhenRequested:
          description: |
            allow calls to automatically connect when they want to (in SIP-
            invite -> Alert-Info-header with info=alert-autoanswer)
          type: boolean
          default: false
        afterTimeout:
          type: integer
          format: int32
          description: |
            Time delay to accept an incoming call automatically. Measured in
            milliseconds. -1 = never
          default: -1
          minimum: -1
          maximum: 60000
        withAlarmBeep:
          description: "sound a short signal when a call gets auto-connected"
          type: boolean
          default: true
        interruptWhenBusy:
          description: "place ongoing calls on hold in order to connect auto-answer-call. With false just lets them knock."
          type: boolean
          default: false

    callCompletion:
      type: object
      properties:
        active:
          description: enables the function callCompletion
          type: boolean
          default: true
        timeout:
          description: time to wait for 'not responding' in seconds
          type: integer
          format: int32
          default: -1
          minimum: -1
          maximum: 60
    callWaiting:
      type: object
      properties:
        active:
          description: enables the function callWaiting
          type: boolean
          default: false
        tone:
          description: enables the signalisation of a waiting call
          type: boolean
          default: true
    doNotDisturb:
      type: object
      properties:
        active:
          description: enables the function doNotDisturb
          type: boolean
          default: false
    callForwarding:
      type: object
      properties:
        unconditional:
          $ref: '#/components/schemas/callForwardingMethod'
        busy:
          $ref: '#/components/schemas/callForwardingMethod'
        noResponse:
          $ref: '#/components/schemas/callForwardingMethod'
    callForwardingMethod:
      type: object
      required:
        - target
        - active
      properties:
        active:
          description: enables call forwarding
          type: boolean
          default: false
        target:
          description: the target to forward calls to
          $ref: '#/components/schemas/uri'
        timeout:
          description: the time [s] after which the call must be forwarded
          type: integer
          format: int32
          default: 20
    clir:
      type: object
      properties:
        active:
          type: boolean
          default: false

    directCall:
      type: object
      required:
        - target
        - timeout
      properties:
        target:
          description: the target of the direct call, if empty then the direct call deactivated
          $ref: '#/components/schemas/uri'
        timeout:
          description: the time [s] after which the call will be started
          type: integer
          format: int32
          default: 10
          minimum: 1
          maximum: 60


    provisioning:
      type: object
      properties:
        active:
          description: enables the provisioning
          type: boolean
          default: true
        dhcp:
          description: checks the dhcp fields 66 and 67 for an provisioning url
          type: boolean
          default: true
        redirect:
          description: |
            checks for a provisioning redirection on connect.redirect.auerswald.de
          type: boolean
          default: true
        pbx:
          description: |
            checks via properitary sip-multicast extension for an provisioning url
          type: boolean
          default: true
        url:
          description: the url to use when nothing else is available
          $ref: '#/components/schemas/uri'
        sip:
          description: configuration via the established sip connection
          $ref: '#/components/schemas/sipProvisioning'
        execution:
          $ref: '#/components/schemas/executionTimeProv'
    sipProvisioning:
      type: object
      properties:
        active:
          description: allows provisioning via sip
          type: boolean
        allowlist:
          description: list of valid sender hosts
          $ref: '#/components/schemas/allowlist'
    allowlist:
      type: array
      minItems: 1
      items:
        $ref: '#/components/schemas/allowlistEntry'
      xml:
        wrapped: true
    allowlistEntry:
      type: string
      example: 192.168.0.200
      xml:
        wrapped: true
        name: allowlistEntry
    executionTimeProv:
      type: object
      description: Defines when to pull current settings via provisioning.
      properties:
        mondays:
          type: boolean
          default: true
        tuesdays:
          type: boolean
          default: true
        wednesdays:
          type: boolean
          default: true
        thursdays:
          type: boolean
          default: true
        fridays:
          type: boolean
          default: true
        saturdays:
          type: boolean
          default: true
        sundays:
          type: boolean
          default: true
        time:
          description: |
            a time in HH:MM format. By default time will be a random value
            between 0:00 till 5:55
          type: string
          pattern: ^(2[0-3]|[0-1]?[0-9]):[0-5][0-9]$
        useRandomDelay:
          description: add a random delay in seconds
          type: boolean
          default: false
        minimalRandomDelay:
          description: minimal delay (in seconds) to apply to the given time
          type: integer
          format: int32
          minimum: 0
          default: 60
        maximalRandomDelay:
          description: maximum delay (in seconds) to apply to the given time
          type: integer
          format: int32
          minimum: 0
          default: 3600
    executionTime:
      type: object
      description: defines when to execute a given task.
      properties:
        mondays:
          type: boolean
        tuesdays:
          type: boolean
        wednesdays:
          type: boolean
        thursdays:
          type: boolean
        fridays:
          type: boolean
        saturdays:
          type: boolean
        sundays:
          type: boolean
        time:
          description: 'a time in HH:MM format'
          type: string
          pattern: ^(2[0-3]|[0-1]?[0-9]):[0-5][0-9]$
        useRandomDelay:
          description: add a random delay in seconds
          type: boolean
          default: false
        minimalRandomDelay:
          description: minimal delay (in seconds) to apply to the given time
          type: integer
          format: int32
          minimum: 0
          default: 60
        maximalRandomDelay:
          description: maximum delay (in seconds) to apply to the given time
          type: integer
          format: int32
          minimum: 0
          default: 3600
    update:
      type: object
      properties:
        check:
          description: check for updates
          type: boolean
          default: true
        autoInstall:
          description: automatically install updates if available
          type: boolean
        url:
          description: url for update server
          default: "https://update.auerswald.de"
          $ref: '#/components/schemas/uri'
        execution:
          $ref: '#/components/schemas/executionTime'

    aboutPhone:
      description: settings specific to the phone
      type: object
      properties:
        deviceName:
          description: the name to display for this device when no primary user is present or appropiate.
          type: string

    network:
      type: object
      properties:
        ethernet:
          $ref: '#/components/schemas/ethernet'
        vpn:
          $ref: '#/components/schemas/vpn'
        topology:
          $ref: '#/components/schemas/topology'
    vpn:
      type: object
      required:
        - name
      properties:
        active:
          type: boolean
          default: false
        vpnType:
          $ref: '#/components/schemas/vpnType'
        name:
          description: unique identifier of the Profile
          type: string
        server:
          description: server address or resolvable name
          type: string
        username:
          description: username, used for xauth
          type: string
        password:
          description: pasword, used for xauth
          type: string
          format: password
        dnsServers:
          description: multiple entries are seperated by space
          type: string
        searchDomains:
          description: multiple entries are seperated by space
          type: string
        routes:
          description: multiple entries are seperated by space, format 10.1.0.0/16
          type: string
        ipsecIdentifier:
          type: string
        ipsecSecret:
          description: preshared key, used in XauthPSK
          type: string
        ipsecUserCert:
          $ref: '#/components/schemas/pemCert'
        ipsecUserPrivateKey:
          $ref: '#/components/schemas/pemRsaKey'
        ipsecCaCert:
          $ref: '#/components/schemas/pemCert'
        ipsecServerCert:
          $ref: '#/components/schemas/pemCert'
        ipsecLockdown:
          description: |
            ensures, that traffic designated for the vpn is never routed
            except through the ipsec tunnel. Requires a ipv4 server and dns
            entry to work.
          type: boolean
          default: false
        openvpnConfig:
          description: file content of an openvpn config file
          type: string

    vpnType:
      type: string
      default: IpsecXauthPSK
      enum:
       - IpsecXauthPSK
       - IpsecXauthRSA
       - IpsecHybridRSA
       - L2TPIpsecPSK
       - L2TPIpsecRSA
       - OpenVPN
    pemCert:
      description: X509 certificate in PEM format
      type: string
    pemRsaKey:
      description: RSA key in PEM format
      type: string
    ethernet:
      type: object
      properties:
        ipv4:
          $ref: '#/components/schemas/ipv4'
        ipv6:
          $ref: '#/components/schemas/ipv6'
        vlan:
          $ref: '#/components/schemas/vlan'
    vlan:
      type: object
      required:
        - phoneMode
        - workstationMode
      properties:
        phoneActive:
          $ref: '#/components/schemas/vlanActive'
        phoneId:
          $ref: '#/components/schemas/vlanId'
        phonePriority:
          $ref: '#/components/schemas/vlanPriority'
        workstationActive:
          $ref: '#/components/schemas/vlanActive'
        workstationId:
          $ref: '#/components/schemas/vlanId'
        workstationPriority:
          $ref: '#/components/schemas/vlanPriority'
    vlanActive:
      x-name: vlanactive
      type: boolean
      default: false
    vlanId:
      x-name: vlanid
      type: integer
      format: int32
      minimum: 0
      maximum: 4095
    vlanPriority:
      x-name: vlanpriority
      type: integer
      format: int32
      minimum: 0
      maximum: 7
    ipv4mode:
      type: string
      default: dhcp
      enum:
        - dhcp
        - static
    ipv4:
      type: object
      required:
        - mode
      properties:
        mode:
          $ref: '#/components/schemas/ipv4mode'
        address:
          $ref: '#/components/schemas/ipv4address'
        netmask:
          $ref: '#/components/schemas/ipv4netmask'
        gateway:
          $ref: '#/components/schemas/ipv4address'
        dns1:
          $ref: '#/components/schemas/ipv4dns'
        dns2:
          $ref: '#/components/schemas/ipv4dns'
    ipv6mode:
      type: string
      default: disable
      enum:
        - automatic
        - disable
    ipv6:
      type: object
      required:
        - mode
      properties:
        mode:
          $ref: '#/components/schemas/ipv6mode'
        privacyExtensions:
          type: boolean
          default: false
        dns1:
          $ref: '#/components/schemas/ipv6address'
        dns2:
          $ref: '#/components/schemas/ipv6address'
    ipv4address:
      type: string
      pattern: >-
        ^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$
      example: 192.168.0.1
    ipv4dns:
      type: string
      pattern: >-
       ^(([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])|(\s*))$
      example: 192.168.0.100
    ipv4netmask:
      type: string
      pattern: >-
        ^(([012]?\d|3[012])|(((0|128|192|24[08]|25[24])\.0\.0\.0)|(255\.(0|128|192|24[08]|25[24])\.0\.0)|(255\.255\.(0|128|192|24[08]|25[24])\.0)|(255\.255\.255\.(0|128|192|24[08]|25[245]))))$
      example: 255.255.255.0
    ipv6address:
      type: string
      pattern: >-
        ^(((([0-9a-fA-F]{1,4}:){7,7}([0-9a-fA-F]{1,4}))|(([0-9a-fA-F]{1,4}:){1,7})|(([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}))|(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,6})|(:((:[0-9a-fA-F]{1,4}){1,7})|:)){0,1})$
      example: 2001:db8:1::1

    topology:
      type: object
      properties:

        frameSize:
          description: |
            rtp frame size in milliseconds (typically 10, 20 or 30 ms)
            values lower than 10 will be handled as 0, which enables codec
            specific behaviour (the default)
          type: integer
          format: int32
          minimum: 0
          maximum: 30
          default: 0
        jitterBuffer:
          $ref: '#/components/schemas/jitterBuffer'
        stunServers:
          $ref: '#/components/schemas/stunServers'
        localSipPort:
          description: outgoing port of SIP messages.
          type: integer
          format: int32
          minimum: 1024
          maximum: 65535
          default: 5060
        checkHostname:
          description: |
            Validate the hostname against the CN of the provided Certificate
            on sip tls connections.
          type: boolean
          default: true
        voiceActivityDetection:
          type: boolean
          description: |
            send rtp data only if a voice is active. This setting takes
            effect on the next start of a stream.
          default: false
        lldp:
          $ref: '#/components/schemas/lldp'
        useCompactSipHeaders:
          type: boolean
          description: |
            send sip headers in a short form. This can be used if UDP
            transports are used and the messages are to big.
          default: false
    jitterBuffer:
      type: object
      properties:
        init:
          description: |
            Initial prefetch delay in milliseconds.
            The value must be between minimumPrefetch and maximumPrefetch.
            If the value is 0 prefetch will be disabled.
          type: integer
          format: int32
          minimum: 0
          default: 0
        minimumPrefetch:
          description: |
            Minimum prefetch delay in milliseconds.
          type: integer
          format: int32
          minimum: 0
          default: 60
        maximumPrefetch:
          description: |
            Maximum prefetch delay in milliseconds.
          type: integer
          format: int32
          minimum: 0
          default: 240
        max:
          description: |
            delay that can be accommodated by the jitter buffer in milliseconds.
          type: integer
          format: int32
          minimum: 0
          default: 360

    stunServers:
      description: |
        A list of stun-server confiugurations.
      type: array
      minItems: 0
      maxItems: 8
      items:
        $ref: '#/components/schemas/stunServer'
      xml:
        wrapped: true

    stunServer:
      description: |
        A single stun-server confiuguration.
      type: object
      properties:
        stunUrl:
          description: Hostname/ip of the stun server
          type: string
        stunPort:
          description: port of the stun server
          type: integer
          format: int32
          minimum: 1
          default: 3478
          maximum: 65535
        stunRequestInterval:
          description: interval in which stun requests are issued. Value in minutes.
          type: integer
          format: int32
          minimum: 1
          default: 5
          maximum: 60
    lldp:
      type: object
      properties:
        active:
          description: send and receive lldp messages
          type: boolean
          default: true
        interval:
          description: retransmit interval in seconds
          type: integer
          format: int32
          default: 30
          minimum: 30
    templates:
      description: |
        A list of templates.
      type: array
      minItems: 0
      items:
        $ref: '#/components/schemas/template'
      xml:
        wrapped: true
    template:
      description: |
        A template describes a functionality that can be placed on a key.
        Foremost it describes how a key works, how the LED is set and what
        happens when key is pressed. It also carries a list of parameters
        that need to be filled when this function is assigned to key.
      type: object
      x-id-attribute: name
      required:
       - keyConfiguration
       - name
      properties:
        name:
          type: string
          xml:
            attribute: true
          description: |
            Text identifying the Template. Has to be unique.
            Will be referenced in key structure to store which template was used.
            Free usable text or android resource tag starting with "@string/"
        prio:
          type: integer
          format: int32
          description: |
            Priority of this template when presenting a list to choose the function-type a key.
            The higher the number, the higher this type is placed in the list.
          xml:
            attribute: true
          default: 10
        description:
          type: string
          xml:
            attribute: true
        icon:
          description: |
            The icon of the key, base64 encoded.
            The icon is scaled to fit the display container.
            If starting with @drawable/ a android resource is used
          type: string
          format: byte
          xml:
            attribute: true
        label:
          description: |
            When set this will be the default-label for a key of this type.
            Can be set to refer to a value of a specific parameter via
            "@param-@string/paramName"
          type: string
          xml:
            attribute: true
        keyConfiguration:
          $ref: '#/components/schemas/keyConfiguration'
        parameters:
          type: array
          xml:
            wrapped: true
          items:
            $ref: '#/components/schemas/parameter'
    parameter:
      type: object
      xml:
        name: parameter
      required:
       - path
      properties:
        path:
          description: |
            List of x-path within the key structure where the value of the
            parameter is to be inserted into.
          type: array
          minItems: 1
          items:
            type: string
        name:
          type: string
          xml:
            attribute: true
          description: |
            Identifies the parameter. Has to be unique.
            Free usable text or android resource tag starting with "@string/"
        type:
          description: |
            Type for this field. Defaults to "text" if unspecified.
            If set to "identity", must be a valid identity index, and will
            show an identity chooser in configuration UI.
          xml:
            attribute: true
          default: text
          $ref: '#/components/schemas/paramTypeEnum'
        min:
          description: |
             Minimum value (for type number) or length (for type text)
          type: integer
          format: int32
          xml:
            attribute: true
        max:
          description: |
             Maximum value (for type number) or length (for type text)
          type: integer
          format: int32
          xml:
            attribute: true
        description:
          type: string
          xml:
            attribute: true
        optional:
          type: boolean
          default: false
          xml:
            attribute: true
          description: |
            Optional parameters may be left empty, the save-button in PUI
            will work without them.
        choices:
          description: |
            For parameters of types text, sip_uri, web_uri, number or phoneList:
            Optionally define which values are allowed (offers combo-box in UI).
            If empty, all values are allowed.
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/paramChoice'
          xml:
            wrapped: true
    paramChoice:
      xml:
        name: choice
      type: object
      properties:
        value:
          type: string
        description:
          type: string
      required:
          - value
    paramTypeEnum:
      type: string
      enum:
        - text
        - boolean
        - identity
        - sip_uri
        - web_uri
        - number
        - phone
    display:
      type: object
      properties:
        timeout:
          type: integer
          format: int32
          description: |
            Time till lockscreen appears on no activity. Measured in
            milliseconds. -1 = never
          default: -1
        contrast:
          type: integer
          format: int32
          minimum: 1
          maximum: 7
          default: 4
        brightness:
          type: integer
          format: int32
          minimum: 57
          maximum: 255
          default: 160

    backlightMode:
      x-name: backlightMode
      type: string
      enum:
        - manual
        - ambientlight
    keypad:
      x-hide:
        - 'xsd'
      description: All these keypad-settings only work on our D600 model.
      type: object
      properties:
        backlightMode:
          default: ambientlight
          description: Mode of operation for keypad-backlight.
          $ref: '#/components/schemas/backlightMode'
        brightness:
          type: integer
          description: |
            Brightness to set keypad's backlight to. Works as maximum in
            'ambient light' mode.
          format: int32
          minimum: 0
          maximum: 255
          default: 255
        proximitySensorDistance:
          type: integer
          description: The distance (in cm) on which the proximity sensor reacts to.
          format: int32
          minimum: 0
          maximum: 25
          default: 15
        wakeByProximity:
          type: boolean
          default: false
          description: |
            Allow screen to wake up just by waving your hand (or other body-
            parts) in front of the keypad.

    userInterface:
      type: object
      properties:
        display:
          $ref: '#/components/schemas/display'
        messages:
          $ref: '#/components/schemas/messages'
        leds:
          $ref: '#/components/schemas/leds'
        keypad:
          $ref: '#/components/schemas/keypad'
        extensions:
          $ref: '#/components/schemas/extensions'
        sipMessageTimeout:
          description: |
            Define how long a received sip-message shows up as pop-up notification.
            Measured in seconds.
            0 = no timeout
            -1 = no pop-up, just normal notification without alert
            -2 = no notification at all for incoming sip-messages
          type: integer
          format: int32
          minimum: -2
          maximum: 86400
          default: 0

    extensions:
      type: object
      properties:
        showIcons:
          type: boolean
          default: true
          description: whether or not all function keys should show an icon. Ignored on D-100 to D-210

    messages:
      type: object
      properties:
        newMissedCalls:
          description: |
            title: Calls
            message: You have <X> missed call(s).
          default: blink
          $ref: '#/components/schemas/msgSignalisation'
        signalSeenMissedCalls:
          description: |
            Message appears when the missed call log has entries, none of
            which are new to the user.
            title: Calls
            message: You have missed calls.
          default: silent
          $ref: '#/components/schemas/msgSignalisation'
        newVoiceMails:
          description: |
            title: Voicemail
            message: <varies>
          default: blink
          $ref: '#/components/schemas/msgSignalisation'
        signalOldMailboxMessages:
          description: |
            Message appears when the mailbox has entries, none of which are
            new to the user.
            title: Voicemail
            message: <varies>
          default: silent
          $ref: '#/components/schemas/msgSignalisation'
        insecureWui:
          description: |
            title: Webserver insecure
            message: Admin user must change password.
          default: blink
          $ref: '#/components/schemas/msgSignalisation'
        provisioningError:
          description: |
            title: Provisioning error.
            message: <none>
          default: on
          $ref: '#/components/schemas/msgSignalisation'
        provisioningDownloadFailed:
          description: |
            title: Failed to download
            message: <varies>
          default: on
          $ref: '#/components/schemas/msgSignalisation'
        provisioningInstallFailed:
          description: |
            title: Failed to install
            message: <varies>
          default: on
          $ref: '#/components/schemas/msgSignalisation'
        provisioningXmlParseError:
          description: |
            title: Failed to parse the XML file
            message: <varies>
          default: on
          $ref: '#/components/schemas/msgSignalisation'
        updateNote:
          description: |
            title: one of [Update completed - No new firmware available. -
                   New firmware available. - Update failed - Check for
                   firmware failed. - Downloading firmware failed. - Invalid
                   firmware-image.]
            message: <varies>
          default: on
          $ref: '#/components/schemas/msgSignalisation'
        downloadManager:
          description: |
            title: one of [Download of file <X> failed. - Download of file
            <X>  was successful.]-image.]
            message: <none> or Press to install, dismiss to delete
          default: blink
          $ref: '#/components/schemas/msgSignalisation'
        sipRegistrationFailed:
          description: |
            title: <name of identity>
            message: Identity registration failed. Error: ..
          default: blink
          $ref: '#/components/schemas/msgSignalisation'
        fallbackIdentityActive:
          description: |
            title: <name of identity>
            message: Fallback identity active
          default: on
          $ref: '#/components/schemas/msgSignalisation'
        fallbackIdentityError:
          description: |
            title: <name of identity>
            message: one of [This fallback identity has an invalid destination
                     identity. - Multiple fallback identities to one main
                     identity are not allowed. - A fallback identity may only
                     refer to a non fallback identity.]
          default: blink
          $ref: '#/components/schemas/msgSignalisation'
        noRegistrationNoCalls:
          description: |
            title: one of [Telephony impaired. - Telephony disabled.]
            message: <varies>
          default: blink
          $ref: '#/components/schemas/msgSignalisation'
        automaticCallbackEnabled:
          description: |
            title: Call completion from <X> pending.
            message: Delete or click to stop waiting.
          default: on
          $ref: '#/components/schemas/msgSignalisation'
        automaticCallbackAlerting:
          description: |
            title: Call completion is now possible.
            message: Participant <X> is now available, do you want to call back?
          default: blink
          $ref: '#/components/schemas/msgSignalisation'
        ongoingCall:
          description: |
            title: Back to ongoing call
            message: <name & nr of call partner>
          default: silent
          $ref: '#/components/schemas/msgSignalisation'
        keyUsesFallbackIdentity:
          description: |
            title: <name of identity>
            message: Identity used by <X> function key not allowed
          default: blink
          $ref: '#/components/schemas/msgSignalisation'
        migrationError:
          description: |
            title: <varies>
            message: <varies>
          default: blink
          $ref: '#/components/schemas/msgSignalisation'
        luaOnNotification:
          description: |
            a notification created by any lua-script that wants the message-led
            to be on
          default: on
          $ref: '#/components/schemas/msgSignalisation'
        luaSilentNotification:
          description: |
            a notification created by any lua-script that wants to be off
          default: silent
          $ref: '#/components/schemas/msgSignalisation'
        luaBlinkingNotification:
          description: |
            a notification created by any lua-script that wants to blink
          default: blink
          $ref: '#/components/schemas/msgSignalisation'
        sipMessage:
          description: |
            a notification that pops up and shows the content of an incoming sip-MESSAGE
          default: blink
          $ref: '#/components/schemas/msgSignalisation'

    msgSignalisation:
      type: string
      description: |
            How to signal a message of a certain type.
            on = Message gets listed in messages-screen or notification drawer.
                 It will cause the Message-LED to turn on, unless there is
                 another message that overrides this with blinking.
            blink = Message gets listed in messages-screen or notification
                    drawer. It will cause the Message-LED to blink.
            silent = Message gets listed in messages-screen or notification
                      drawer, but doesn't affect the message-LED-behaviour
            off = Message never ever appears in messages-screen or notification
                   drawer, thus also doesn't affect the message-LED-behaviour
      enum:
       - on
       - blink
       - silent
       - off

    leds:
      type: object
      properties:
        enableMsgLed:
          description: When disabeled, LED of message-key will never turn on.
          type: boolean
          default: true

    authToken:
      type: object
      description: Describes a single auth token
      properties:
        token:
          description: The actual token
          type: string
          minLength: 8
          example: 933acdfe12a7bca0b6d76e61fd82a749cee59ea7

    authTokens:
      description: List of all auth-tokens.
      type: array
      maxItems: 5
      items:
        $ref: '#/components/schemas/authToken'
      xml:
        wrapped: true

    remoteAccess:
      type: object
      properties:
        webd:
          description: enable remote access via http(s) - needed for action URLs (allowCallManipulationViaHttp)
          type: boolean
          default: false
        adbd:
          description: enable remote access via adb
          type: boolean
          default: false
        allowCallManipulationViaHttp:
          description: |
            allow http(s)-get-requests that control calls on the phone
            (start/end/hold/transfer/..)
            can only be activated if remote acces via http(s) (webd) is allowed.
          type: boolean
          default: false
        actionUrlServer:
          description: server where phone sends call-events to.
          type: string
        authTokens:
          $ref: '#/components/schemas/authTokens'
        filterSettings:
          $ref: '#/components/schemas/filterSettings'


    filterSettings:
      type: object
      description: Activation switch for selective showing of menu items + List of Settings main menus
      properties:
        filterActive:
          type: boolean
          default: false
        settingsFilterList:
          $ref: '#/components/schemas/settingsFilterList'

    settingsFilterList:
      type: object
      description: List of main menus that will be shown. (true => show; false => hide)
      properties:
        network:
          type: boolean
          default: false
        identities:
          type: boolean
          default: false
        bluetooth:
          type: boolean
          default: true
        wifi:
          type: boolean
          default: false
        sound:
          type: boolean
          default: true
        language:
          type: boolean
          default: true
        display:
          type: boolean
          default: true
        telephony:
          type: boolean
          default: true
        functions:
          type: boolean
          default: true
        cameras:
          type: boolean
          default: true
        update:
          type: boolean
          default: false
        provisioning:
          type: boolean
          default: false
        remoteaccess:
          type: boolean
          default: false
        apps:
          type: boolean
          default: false
        time_date:
          type: boolean
          default: true
        ldap:
          type: boolean
          default: false
        backup:
          type: boolean
          default: false

    apps:
      type: object
      description: Configuration of pre-installed apps and store.
      properties:
        allow_install:
          description: Enables installation of additional apps.
          type: boolean
          default: false
        store_enabled:
          description: Enables access to pre-installed store 'F-Droid'.
          type: boolean
          default: true
        browser_enabled:
          description: Enables access to pre-installed browser 'Firefox Klar'.
          type: boolean
          default: true
        mail_enabled:
          description: Enables access to pre-installed mail-app 'K-9 Mail'.
          type: boolean
          default: true
    dtmfType:
      description: |
        How to signal dtmf-digits:
        - rtpPayload: use event-packages in rtp-stream
        - inband: code tone-signal right into the rtp-stream
        - sipInfo: use sip-info messages
      type: string
      enum:
       - rtpPayload
       - inband
       - sipInfo
    timeAndDate:
       type: object
       properties:
         ntpEnable:
           type: boolean
           default: true
         ntpServer:
           $ref: '#/components/schemas/uri'
           default: "pool.ntp.org"
         timezone:
           $ref: '#/components/schemas/timezone'
         timeHourFormat:
           $ref: '#/components/schemas/timeHourFormat'
    locales:
      type: object
      properties:
        deviceLanguage:
          $ref: '#/components/schemas/language'
        webserverLanguage:
          $ref: '#/components/schemas/language'
        deviceLocation:
          $ref: '#/components/schemas/locale'
    locale:
      type: string
      enum:
       - de_DE
       - de_AT
       - de_CH
       - fr_CH
       - it_CH
       - en_GB
       - fr_FR
       - el_GR
       - pl_PL
       - es_ES
       - nl_BE
       - fr_BE
       - de_BE
       - nl_NL
       - it_IT
    language:
      type: string
      enum:
       - de_DE
       - en_GB
       - fr_FR
       - el_GR
       - pl_PL
       - es_ES
       - nl_NL
       - it_IT
    timeHourFormat:
      type: string
      description: "distinguishes between 10 PM and 22:00 time representation"
      default: clock24hours
      enum:
        - clock12hours
        - clock24hours
    timezone:
      description: |
        time zone description in olsen names. Supports correct handling for summer/winter times
      type: string
      x-no-enum: true
      example: Europe/Amsterdam
      enum:
       - Pacific/Midway
       - Pacific/Honolulu
       - America/Anchorage
       - America/Los_Angeles
       - America/Tijuana
       - America/Phoenix
       - America/Chihuahua
       - America/Denver
       - America/Costa_Rica
       - America/Chicago
       - America/Mexico_City
       - America/Regina
       - America/Bogota
       - America/New_York
       - America/Caracas
       - America/Barbados
       - America/Halifax
       - America/Manaus
       - America/Santiago
       - America/St_Johns
       - America/Recife
       - America/Sao_Paulo
       - America/Buenos_Aires
       - America/Godthab
       - America/Montevideo
       - Atlantic/South_Georgia
       - Atlantic/Azores
       - Atlantic/Cape_Verde
       - Africa/Casablanca
       - Europe/London
       - Europe/Amsterdam
       - Europe/Belgrade
       - Europe/Berlin
       - Europe/Brussels
       - Europe/Madrid
       - Europe/Sarajevo
       - Africa/Windhoek
       - Africa/Brazzaville
       - Asia/Amman
       - Europe/Athens
       - Europe/Istanbul
       - Asia/Beirut
       - Africa/Cairo
       - Europe/Helsinki
       - Asia/Jerusalem
       - Europe/Minsk
       - Africa/Harare
       - Asia/Baghdad
       - Europe/Moscow
       - Asia/Kuwait
       - Africa/Nairobi
       - Asia/Tehran
       - Asia/Baku
       - Asia/Tbilisi
       - Asia/Yerevan
       - Asia/Dubai
       - Asia/Kabul
       - Asia/Karachi
       - Asia/Oral
       - Asia/Yekaterinburg
       - Asia/Calcutta
       - Asia/Colombo
       - Asia/Katmandu
       - Asia/Almaty
       - Asia/Rangoon
       - Asia/Krasnoyarsk
       - Asia/Bangkok
       - Asia/Jakarta
       - Asia/Shanghai
       - Asia/Hong_Kong
       - Asia/Irkutsk
       - Asia/Kuala_Lumpur
       - Australia/Perth
       - Asia/Taipei
       - Asia/Seoul
       - Asia/Tokyo
       - Asia/Yakutsk
       - Australia/Adelaide
       - Australia/Darwin
       - Australia/Brisbane
       - Australia/Hobart
       - Australia/Sydney
       - Asia/Vladivostok
       - Pacific/Guam
       - Asia/Magadan
       - Pacific/Noumea
       - Pacific/Majuro
       - Pacific/Auckland
       - Pacific/Fiji
       - Pacific/Tongatapu
    logging:
      type: object
      properties:
        extendedLogging:
          description: |
            on D110/210: defaults to false, log will only contain errors and warnings
            on D400/600: defaults to true, log will not be restricted
          type: boolean
          default: false
        remotes:
          type: array
          minItems: 0
          xml:
            wrapped: true
          items:
            $ref: '#/components/schemas/remoteLog'
    remoteLog:
        description: "Describes a log-server"
        type: object
        required:
            - server
            - port
            - protocol
        properties:
            server:
                $ref: '#/components/schemas/hostname'
            port:
                $ref: '#/components/schemas/port'
            protocol:
                $ref: '#/components/schemas/logProtocol'
            filter:
                $ref: '#/components/schemas/logcatFilter'

    logProtocol:
        description: "Protocol to use for logging"
        type: string
        enum:
          - udp
    hostname:
        description: "Hostname of the log server"
        type: string
        minLength: 1
        example: srv.example.org
    port:
        description: "Port of the log server"
        type: integer
        format: int32
        minimum: 1
        maximum: 65535
    logcatFilter:
        description: |
            Filter to use for logging. A space-separated list of TAG[:Priority].
            TAG can be "*" for all, Priority can be one of
            S:silent E:error W:warning I:info D:debug V:verbose.
            Default priority if omitted is [V]erbose.
        type: string
    luaLibraries:
        description: |
          Libraries can be included into other lua-code by using its name
          within a require-statement. E.g.: `require("myAwesomeLib")`
        type: array
        items:
            $ref: '#/components/schemas/luaScript'
            xml:
                name:
                    luaLibrary
        xml:
            wrapped:
                true
    luaAutoStarters:
        description: AutoStarters are lua-scripts that continously run in the background.
        type: array
        items:
            $ref: '#/components/schemas/luaScript'
        xml:
            wrapped:
                true
    luaScript:
        x-id-attribute: name
        xml:
            name:
                luaScript
        type: object
        properties:
            name:
              type: string
              xml:
                  attribute:
                      true
            code:
                $ref: '#/components/schemas/luaCode'
    luaConfig:
      type: array
      description: A list of arbitrary key-value pairs for lua-scripts that need to remember data over reboots.
      items:
        $ref: '#/components/schemas/luaConfigPair'
      xml:
        wrapped: true
    luaConfigPair:
      x-name: luaConfigPair
      x-id-attribute: key
      type: object
      required:
        - key
      properties:
        key:
          type: string
          description: |
            The key that identifies the value. Make it very very unique so
            no other lua-script might accidentally use the same one and
            overwrites your scripts data.
          xml:
            attribute: true
        value:
          type: string

    resources:
        type: object
        properties:
            strings:
                $ref: '#/components/schemas/stringResources'
            drawables:
                $ref: '#/components/schemas/drawableResources'
    drawableResources:
        type: array
        xml:
            wrapped:
                true
        items:
            $ref: '#/components/schemas/drawableResource'
    stringResources:
        description: |
          List of a additional translations that were not "baked into" the firmware.
          Can be used by templates to translate a custom parammeter-name.
        type: array
        xml:
            wrapped:
                true
        items:
            $ref: '#/components/schemas/stringResource'
    stringResource:
        xml:
            name:
                string
        type: object
        properties:
            locale:
                $ref: '#/components/schemas/locale'
                xml:
                    attribute:
                        true
            name:
                $ref: '#/components/schemas/resourceName'
                xml:
                    attribute:
                        true
            text:
                type: string
        required:
            - name
            - text
    drawableResource:
        description: |
          List of a additional icons that were not "baked into" the firmware.
        xml:
            name:
                drawable
        type: object
        properties:
            name:
                $ref: '#/components/schemas/resourceName'
                xml:
                    attribute:
                        true
            icon:
                type: string
                format: byte
        required:
            - name
            - icon
    resourceName:
        type: string
        pattern: ^([a-z_]*)$



    contactList:
        type: array
        description: List of local contacts
        items:
            $ref: '#/components/schemas/contact'

    contact:
        type: object
        description: a contact list entry
        properties:
            displayName:
                type: string
                description: The display name for the contact.
            givenName:
                type: string
                description: The given name for the contact.
            middleName:
                type: string
                description: The middle name for the contact.
            familyName:
                type: string
                description: The family name for the contact.
            nickName:
                type: string
                description: The nick name for the contact.
            namePrefix:
                type: string
                description: The contact's honorific prefix, e.g. "Sir"
            nameSuffix:
                type: string
                description: The contact's honorific suffix, e.g. "Jr"
            phoneticGivenName:
                type: string
                description: The phonetic version of the given name for the contact.
            phoneticMiddleName:
                type: string
                description: The phonetic version of the middle name for the contact.
            phoneticFamilyName:
                type: string
                description: The phonetic version of the family name for the contact.
            starred:
                type: string
                description: The contact ist starred, if it is a favorite contact (values 0 or 1)
            ringtone:
                type: string
                description: The custome ringtone of the contact
            photo:
                type: string
                description: contact photo as base64 string
            phoneNumberList:
                type: array
                xml:
                    wrapped: true
                description: List of phone numbers.
                items:
                    $ref: '#/components/schemas/phoneNumber'
            emailAddressList:
                type: array
                xml:
                    wrapped: true
                description: List of e-mail addresses.
                items:
                    $ref: '#/components/schemas/emailAddress'
            postalAddressList:
                type: array
                xml:
                    wrapped: true
                description: List of postal addresses.
                items:
                    $ref: '#/components/schemas/postalAddress'
            organizationList:
                type: array
                xml:
                    wrapped: true
                description: List of organizations.
                items:
                    $ref: '#/components/schemas/organization'
            additionalDataList:
                type: array
                xml:
                    wrapped: true
                description: List of unspecified data of the contact.
                items:
                    $ref: '#/components/schemas/additionalData'

    phoneNumber:
        type: object
        description: a phone number entry
        properties:
            isPrimary:
                type: string
                description: The number is the primary number (values 0 or 1)
            detailType:
               type: string
               description: Type of Number (like home, work, mobile, fax, etc)
            number:
               type: string
               description: The phone number as the user entered it.

    emailAddress:
        type: object
        description: an e-mail address entry
        properties:
            detailType:
                type: string
                description: Type of e-mail address (like home, work, other, mobile, etc)
            address:
                type: string
                description: The e-mail address as the user entered it.

    postalAddress:
        type: object
        description: a postal address entry
        properties:
            detailType:
                type: string
                description: Type of postal address (like home, work, other, etc)
            street:
                type: string
                description: |
                  Can be street, avenue, road, etc. This element also includes
                  the house number and room/apartment/flat/floor number.
            postcode:
                type: string
                description: |
                  Postal code. Usually country-wide, but sometimes specific to
                  the city (e.g. "2" in "Dublin 2, Ireland" addresses).
            region:
                type: string
                description: |
                  A state, province, county (in Ireland), Bundesland (in
                  Germany), departement (in France), etc.
            city:
                type: string
                description: |
                  Can be city, village, town, borough, etc. This is the postal
                  town and not necessarily the place of residence or place of
                  business.
            country:
                type: string
                description: The name or code of the country.
            neighborhood:
                type: string
                description: |
                  This is used to disambiguate a street address when a city
                  contains more than one street with the same name, or to
                  specify a small place whose mail is routed through a larger
                  postal town. In China it could be a county or a minor city.
            pobox:
                type: string
                description: |
                  Covers actual P.O. boxes, drawers, locked bags, etc. This
                  is usually but not always mutually exclusive with street.

    organization:
        type: object
        description: a organization entry
        properties:
            company:
                type: string
                description: The company as the user entered it.
            title:
                type: string
                description: The position title at this company as the user entered it.
            department:
                type: string
                description: The department at this company as the user entered it.
            jobDescription:
                type: string
                description: The job description at this company as the user entered it.


    additionalData:
        type: object
        description: an additional unspecified data entry for data that could not be assigned to any other mimetype
        properties:
            mimetype:
                type: string
            data1:
                type: string
            data2:
                type: string
            data3:
                type: string
            data4:
                type: string
            data5:
                type: string
            data6:
                type: string
            data7:
                type: string
            data8:
                type: string
            data9:
                type: string
            data10:
                type: string
            data11:
                type: string
            data12:
                type: string
            data13:
                type: string
            data14:
                type: string
            data15:
                type: string

    homeScreenDesign:
      type: object
      description: designing the home screen
      properties:
        backgroundImage:
          $ref: '#/components/schemas/backgroundImage'
        backgroundVideo:
          description: |
            Name of a configured camera. Its feed will be shown in the
            background of the homescreen. BackgroundImage will be ignored
            when there is a stream.
          type: string

    backgroundImage:
      description: |
        the wallpaper image may be the link to an image (http/https) on a
        webserver OR a base64 encoded image, should be jpg or png not bigger
        than 1MB.
      type: string
