Kontakt.io Device API

The Device resource represents Kontakt.io devices assigned to a particular Kontakt.io Panel account, as well as devices shared with that account from different accounts.

Business capability
IT Infrastructure Management BC-600.50

Operations 12

GET /device Get Devices
POST /device/decrypt Decrypt READALL secure response from device
POST /device/update Update a Device
GET /device/unassigned/{managerId} Get unassigned Devices
POST /device/{uniqueId}/access Grant access to the device
GET /device/{uniqueId}/access Return managers with access to the device
DELETE /device/{uniqueId}/access/{email} Revokes access to a device
POST /bulk/device-access Bulk operation to grant or revoke access to devices
GET /bulk/device-access Returns status and details for device access bulk process started by the authorized user #
GET /bulk/device-access/{jobKey} Returns status and details for provided device access bulk process #
POST /device/sync Synchronize device
POST /device/sync/token Synchronize device token

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/kontaktio-device-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

kontaktio-device-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Management Device API
  x-logo:
    url: https://kontakt.io/wp-content/themes/kontakt/dist/img/site-header/logo.svg
    backgroundColor: '#FFFFFF'
  version: '10'
  description: 'This Kontakt.io API provides direct access to all Kio Cloud Device Management resources. It allows integrating device administration functionality into 3rd-party applications without the need to build all underlying logic from the ground up.


    ## Authentication


    All requests must include a **JWT Bearer token** in the `Authorization` header, obtained via the [OAuth2 Client Credentials flow](https://developer.kontakt.io/docs/entity-management-integration-api/0255c5646ab01-authentication-o-auth2-client-credentials-flow).


    > **Deprecated:** The `Api-Key` header is still accepted for backward compatibility but is deprecated and will be removed. Do not use it for new integrations.


    Each API call requires the `Accept` header with the API version. **By default, set to the current stable version:** `application/vnd.com.kontakt+json;version=10`

    '
  contact:
    name: Support
    url: https://support.kontakt.io
    email: support@kontakt.io
  termsOfService: https://kontakt.io/legal-documents/terms-of-sale-and-service/
servers:
- url: https://dm-api.cloud.us.kontakt.io
  description: Kio Cloud US region
- url: https://dm-api.cloud.uk.kontakt.io
  description: Kio Cloud UK region
security:
- bearer_token: []
- api_key: []
tags:
- name: Device
  description: The Device resource represents Kontakt.io devices assigned to a particular Kontakt.io Panel account, as well as devices shared with that account from different accounts.
paths:
  /device:
    parameters: []
    get:
      tags:
      - Device
      summary: Get Devices
      description: 'Returns all devices user has access to. **Some fields are applicable only to devices with specific capabilities.** Please check if you device supports given field before use.


        Results can be filtered using the query parameters specified below.


        This endpoint can also be used to decrypt shuffled devices, for example Eddystone EID packets can be resolved by providing their content in the `eid` parameter.


        Returns 200 with empty `devices` list when no devices found.

        '
      parameters:
      - name: uniqueId
        in: query
        description: Unique IDs of devices that should be returned in a response. Comma separated.
        required: false
        schema:
          type: array
          items:
            type: string
          example: 11P10AvW
        style: form
        explode: false
      - $ref: '#/components/parameters/QueryDeviceType'
      - name: managerId
        in: query
        description: Returns only devices belonging to Managers with specified IDs
        required: false
        schema:
          type: array
          items:
            type: string
      - name: bid
        in: query
        description: Returns only beacons configured to broadcast iBeacon packets with specified identifiers. Each beacon should be represented as a colon-separated tuple of Proximity UUID, Major and Minor, e.g. `3C4BDEE8-D6FA-4A33-9AB7-B327D9200D4D:433:16621` (ProximityUUID:Major:Minor).
        required: false
        schema:
          type: array
          items:
            type: string
      - name: euid
        in: query
        description: Returns only beacons configured to broadcast Eddystone UID packets with specified identifiers. Each beacon should be represented as colon-separated tuple of Namespace and Instance ID, e.g. `8c0a2a6b2d754d9ba600:736366476b70` (Namespace:InstanceID).
        required: false
        schema:
          type: array
          items:
            type: string
      - name: eid
        in: query
        description: Returns only beacons that correspond with provided Eddystone EID packets, in the same order as packets were specified in the query.
        required: false
        schema:
          type: array
          items:
            type: string
      - name: access
        in: query
        description: Limits the response body only to devices with specified access level.
        required: false
        schema:
          $ref: '#/components/schemas/DeviceDataRole'
      - $ref: '#/components/parameters/QueryMaxResult'
      - $ref: '#/components/parameters/QueryType'
      - $ref: '#/components/parameters/accept'
      - schema:
          type: string
        in: query
        name: q
        description: Filter query. Please refer to Filtering article.
      - $ref: '#/components/parameters/QueryStartIndex'
      - schema:
          type: string
        in: query
        name: mac
        description: MACs of devices that should be returned in a response. Colon format. Comma separated. Case insensitive.
        style: form
      - $ref: '#/components/parameters/QueryDeviceSelector'
      - $ref: '#/components/parameters/QueryDeviceOrderBy'
      - schema:
          type: string
          enum:
          - ASC
          - DESC
        in: query
        name: order
        description: Order direction.
      responses:
        '200':
          description: OK
          content:
            application/vnd.com.kontakt+json;version=10:
              schema:
                type: object
                properties:
                  devices:
                    type: array
                    items:
                      $ref: '#/components/schemas/Device'
                  searchMeta:
                    $ref: '#/components/schemas/SearchMeta'
                required:
                - devices
                - searchMeta
      security:
      - bearer_token: []
      - api_key: []
      x-stoplight:
        id: m7476n9utnmat
  /device/decrypt:
    post:
      tags:
      - Device
      summary: Decrypt READALL secure response from device
      description: 'Accepts a list of secure responses to READALL requests from devices, decrypts them and returns

        the information returned in those as virtual devices composed of values that the READALL responses contain.

        '
      parameters:
      - $ref: '#/components/parameters/UniqueIdList'
      - $ref: '#/components/parameters/accept'
      - name: response
        in: query
        description: Devices' secure responses to READALL requests, listed in the same order as uniqueIds
        required: true
        schema:
          type: array
          items:
            type: string
            example:
            - AAEhIgAAAAAA9THOrhkTEZIV37l03NdmMcNhblVNE2CK4RFPlo8y
            - AAEhwgAAAAAAGYJ+8PWSkE8iz7cY98/8AVZPbC3rihOGamh03Okn0UhMe364uAfGslh6xSN8dvs9kbXAqR//sQ5BSyqssrLVn1Hwon00no33h3d+gOotOYmaxTA4xCvagxSkt4XZiRKVk2S8A6LIAKxNdjV/V9LGPZAFFClhRURdVumi0jQmGxE4jPj2qx+/TL1fKlPyutOxbdcAX4xi46IAwTY2apOBTSbxoPBrfKzAhSVr57+Rkm6NcNl5YkjgVcp/u9vmLg==
      responses:
        '200':
          description: OK
          content:
            application/vnd.com.kontakt+json;version=10:
              schema:
                type: object
                properties:
                  devices:
                    type: array
                    items:
                      $ref: '#/components/schemas/Device'
                  searchMeta:
                    $ref: '#/components/schemas/SearchMeta'
                required:
                - devices
                - searchMeta
      security:
      - bearer_token: []
      - api_key: []
  /device/update:
    post:
      tags:
      - Device
      summary: Update a Device
      description: 'This endpoint allows you to perform one of two operations, depending on request''s body schema:

        * sending **Secure Response** that has been read from a device after successful application of a new configuration

        * editing **virtual attributes** of a device


        The response status code depends on which operation is performed:

        * **Virtual attributes update**: always returns `200` with a success message.

        * **Secure Response**: returns `200` with pending secure configurations if any exist, or `204` with no body if there are no pending configurations to return.

        '
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              oneOf:
              - $ref: '#/components/schemas/UpdateDeviceVirtualAttributesRequest'
              - $ref: '#/components/schemas/UpdateDeviceSecureResponseRequest'
      responses:
        '200':
          description: 'OK. Returned in two cases:

            * **Virtual attributes update** — body contains a success message.

            * **Secure Response with pending configs** — body contains the pending secure configurations for the updated devices.

            '
          content:
            application/vnd.com.kontakt+json; version=10:
              schema:
                oneOf:
                - type: object
                  title: Update success message
                  description: Returned when updating virtual attributes.
                  properties:
                    message:
                      type: string
                      description: Success message.
                      example: Update successful.
                  required:
                  - message
                - type: object
                  title: Pending secure configurations
                  description: Returned when sending a Secure Response and there are pending configurations.
                  properties:
                    configs:
                      type: array
                      items:
                        type: object
                        properties:
                          uniqueId:
                            type: string
                            description: Unique ID of the device.
                          config:
                            type: string
                            description: Base64-encoded secure configuration profile to be applied to the device.
                    searchMeta:
                      $ref: '#/components/schemas/SearchMeta'
                  required:
                  - configs
                  - searchMeta
        '204':
          description: 'No Content. Returned when sending a Secure Response and there are no pending

            secure configurations to return for the updated devices.

            '
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '404':
          description: Device not found or insufficient access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Unprocessable Entity - validation errors
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      parameters:
      - $ref: '#/components/parameters/accept'
      security:
      - bearer_token: []
      - api_key: []
  /device/unassigned/{managerId}:
    get:
      deprecated: true
      tags:
      - Device
      summary: Get unassigned Devices
      description: Returns a list of Devices belonging to a specified Manager and that Manager's Subordinate Accounts that haven't been assigned to any Venue (Location)
      parameters:
      - name: managerId
        in: path
        description: Manager ID This can be either an ID of a Manager that provides the API Key, or and ID of one of that Manager's Subordinate Manager.
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/QueryDeviceType'
      - $ref: '#/components/parameters/accept'
      responses:
        '200':
          description: OK
          content:
            application/vnd.com.kontakt+json;version=10:
              schema:
                type: object
                properties:
                  devices:
                    type: array
                    items:
                      $ref: '#/components/schemas/Device'
                  searchMeta:
                    $ref: '#/components/schemas/SearchMeta'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      operationId: ''
      security:
      - bearer_token: []
      - api_key: []
  /device/{uniqueId}/access:
    post:
      tags:
      - Device
      summary: Grant access to the device
      description: Grants user(s) access to the device with provided uniqueId. Access level is defined as Role.
      parameters:
      - name: uniqueId
        in: path
        description: The uniqueId of a device that the access should be given for
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceAccessGrantRequest'
      responses:
        '204':
          description: Access granted
        '404':
          description: Not Found, e.g. manager doesn't exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
    get:
      tags:
      - Device
      summary: Return managers with access to the device
      description: Provides a list of users that have access to the device
      parameters:
      - name: uniqueId
        in: path
        description: The uniqueId of a device
        required: true
        schema:
          type: string
      responses:
        '200':
          description: List of managers returned successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DeviceAccessResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
  /device/{uniqueId}/access/{email}:
    delete:
      tags:
      - Device
      summary: Revokes access to a device
      description: Revokes access to a device
      parameters:
      - name: uniqueId
        in: path
        description: The uniqueId of a device
        required: true
        schema:
          type: string
      - name: email
        in: path
        description: The email address of a user that access should be revoked
        required: true
        example: manager@example.com
        schema:
          type: string
      responses:
        '204':
          description: Access revoked successfully
        '404':
          description: Not Found, e.g. manager doesn't exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
  /bulk/device-access:
    post:
      tags:
      - Device
      summary: Bulk operation to grant or revoke access to devices
      description: Grants user(s) access to devices based on provided BQL. Access level is defined as Role.
      requestBody:
        content:
          application/json:
            schema:
              properties:
                q:
                  type: string
                  description: BQL query that specifies devices applicable for granting/revoking access
                  example: (federation.federated==false)
                grantAccess:
                  type: object
                  $ref: '#/components/schemas/DeviceAccessGrantRequest'
                revokeAccess:
                  type: object
                  $ref: '#/components/schemas/DeviceAccessRevokeRequest'
      responses:
        '200':
          description: Access request processed successfully
        '404':
          description: Object not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
    get:
      tags:
      - Device
      summary: Returns status and details for device access bulk process started by the authorized user
      description: Returns details about the device access bulk process triggered with the endpoint `POST /bulk/device-access`.
      operationId: getBulkDeviceAccessStatusForAuthorizedManager
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceAccessBulkJobResponse'
  /bulk/device-access/{jobKey}:
    get:
      tags:
      - Device
      summary: Returns status and details for provided device access bulk process
      description: Returns details about the specified device access bulk process triggered with the endpoint `POST /bulk/device-access`.
      operationId: getBulkDeviceAccessStatus
      parameters:
      - $ref: '#/components/parameters/BulkDeviceAccessJobKeyPathParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceAccessBulkJobResponse'
  /device/sync:
    post:
      tags:
      - Device
      summary: Synchronize device
      description: Synchronize device in API with its actual state using read-all command response.
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                uniqueId:
                  type: array
                  description: List of Unique IDs of Devices
                  items:
                    type: string
                response:
                  type: array
                  description: List of Base64-encoded Secure responses from Kontakt.io devices to read-all requests. A position on this list corresponds to a position of a Unique ID in the `uniqueId` list.
                  items:
                    type: string
                    format: byte
                updated:
                  description: List of Unix epoch timestamps (seconds) that represent a time and date when a Kontakt.io Device was updated. Mostly used for time synchronization in secure shuffling. A position on this list corresponds to a position of a Unique ID in the `uniqueId` list.
                  type: array
                  items:
                    type: integer
              required:
              - uniqueId
              - response
              - updated
      responses:
        '200':
          description: OK
          content:
            application/vnd.com.kontakt+json; version=10:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Success message
                    example: Update successful
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      parameters:
      - $ref: '#/components/parameters/accept'
      security:
      - bearer_token: []
      - api_key: []
  /device/sync/token:
    post:
      tags:
      - Device
      summary: Synchronize device token
      description: Update Secure profile token in API.
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              properties:
                uniqueId:
                  type: array
                  description: List of Unique IDs of Devices
                  items:
                    type: string
                currentToken:
                  description: Unix epoch timestamp for token. Defaults to now() if omitted.
                  type: integer
              required:
              - uniqueId
      responses:
        '200':
          description: OK
          content:
            application/vnd.com.kontakt+json; version=10:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Success message
                    example: Update successful
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      parameters:
      - $ref: '#/components/parameters/accept'
      security:
      - bearer_token: []
      - api_key: []
components:
  schemas:
    OccupancyInclusionZones:
      description: Inclusion zones. Areas included in occupancy counting. Applicable only in seat occupancy. Zone ids must match seat ids from Smart Location system. **It's a virtual attribute.**
      type: array
      items:
        $ref: '#/components/schemas/Polygon'
    Polygon:
      type: object
      properties:
        id:
          type: string
          format: uuid
        polygon:
          type: array
          items:
            type: object
            properties:
              x:
                type: integer
              y:
                type: integer
    Dispenser:
      type: object
      description: Dispenser settings for UHH dispenser beacons. Maps to PIDs dispenser_model_id (0x917E) and dispenser_detection_params (0x917F). Requires soap_dispenser capability and firmware nrf52 >= 2.16.1.
      properties:
        model:
          type: string
          description: Dispenser model the beacon is mounted on. UNSET (0xFF) disables dispense detection.
          enum:
          - ES8_GOJO
          - ES10_GOJO
          - GENERIC_UHH_MANUAL
          - GENERIC_UHH_AUTO
          - FMX12_GOJO
          - FMX20_GOJO
          - COMPACT_AUTO_ECOLAB
          - COMPACT_MANUAL_ECOLAB
          - CLASSIC_AUTO_ECOLAB
          - CLASSIC_MANUAL_ECOLAB
          - UNSET
        detectionParams:
          type: string
          description: 'Hex-encoded binary blob (0-500 bytes) with detection algorithm parameters. Structure: uint16 params_id + uint8 model_id + uint8 algorithm_id + uint8[] params_data. Valid lengths: 0, 4, or >4 bytes.'
          pattern: ^([0-9A-Fa-f]{2})*$
          maxLength: 1000
          example: '00010002030405'
    DeploymentInfo:
      type: object
      description: Information about device's deployment.
      properties:
        status:
          $ref: '#/components/schemas/DeploymentStatus'
        deploymentDate:
          type:
          - string
          - 'null'
          format: date-time
          description: Timestamp of when the device was deployed (ISO 8601 format). Defaults to the current time when deployment info is updated without an explicit date.
          example: '2026-04-10T12:00:00Z'
        installerEmail:
          type:
          - string
          - 'null'
          description: Email address of the person who deployed the device.
          example: john.doe@example.com
        installerName:
          type:
          - string
          - 'null'
          description: First and last name of the person who deployed the device.
          example: John Doe
      required:
      - status
    ApiError:
      type: object
      title: API Error
      properties:
        id:
          type: string
          description: Internal API error code
          example: API_ERROR_1693477316246
        status:
          type: number
          description: HTTP response status code
          example: 422
        cause:
          type: string
          description: General cause of the error
          example: ValidationError
        message:
          type: string
          description: Error message with an explanation of the problem
          example: Invalid value for field name
        details:
          type:
          - array
          - 'null'
          description: Optional details
          items:
            type: object
            properties:
              field:
                type: string
                example: name
              error:
                type: string
                description: Error name
                example: INVALID_VALUE
              message:
                type: string
                description: Error message
                example: Invalid value for field name
    DeploymentStatus:
      type: string
      description: 'Current deployment status of this device - e.g. whether is it deployed or not.


        `END_OF_LIFE` means the device is not going to be used anymore. Can occur for many reasons: battery dead, unserviceable device, contract with owning company was discontinued, etc.'
      enum:
      - TO_BE_DEPLOYED
      - DEPLOYED
      - END_OF_LIFE
    StitchingPivotLocal:
      description: Pivot (rotation point) of the image in the device image's local coordinates.
      type: object
      required:
      - x
      - y
      properties:
        x:
          description: X coordinate in local coordinates, between 0 and 1. Where 0 is leftmost and 1 is rightmost.
          type: number
          format: decimal
          minimum: 0
          maximum: 1
          example: 0.5
        y:
          description: Y coordinate in local coordinates, between 0 and 1. Where 0 is top and 1 is bottom.
          type: number
          format: decimal
          minimum: 0
          maximum: 1
          example: 0.5
    OccupancyPhysicalSettings:
      type: object
      x-stoplight:
        id: ri25ewp162tv9
      description: Occupancy settings. Only applicable to devices with occupancy capability.
      properties:
        sleepInterval:
          type: integer
          minimum: 0
          maximum: 65535
          default: 0
          description: Occupancy sampling interval in seconds when in power-saving mode (outside of working hours).
        minInterval:
          type: integer
          minimum: 0
          maximum: 65535
          default: 60
          description: Min sampling interval in seconds. 0 means disabled.
        calibration:
          type: integer
          minimum: -128
          maximum: 127
          default: 0
          description: Common threshold delta (all occupancy modes). Allows to fine-tune the sensitivity relative to the newest default. For example, use -5 to lower the threshold by 5 units from the default (allow more detections), or conversely setting it to 5 adds 5 to that threshold, reducing false positives. In other words, this is a linear value, not a percentage.
        sensitivity:
          type: integer
          minimum: 0
          maximum: 100
          deprecated: true
          description: Deprecated! Please use the calibration parameter instead. Percentage of sensitivity. 0-100, 0 for very strict, 100 accept everything
        model:
          type: integer
          description: "Detection model. \n\n0 - static occupancy.  \n2 - traffic footfall."
        footfallLine:
          type: string
          default: 28502800
          description: Threshold line for footfall detection. [x0, y0, x1, y1] pixel coordinates for the line. Hex encoded.
        footfallSensitivity:
          type: integer
          minimum: 0
          maximum: 100
          default: 40
          deprecated: true
          description: Deprecated! Please use the calibration parameter instead. Sensitivity for accepting footfall tracks. 0-100, 0 for very strict, 100 accept everything
    PendingBeaconConfig:
      description: Pending Beacon Configuration.
      x-stoplight:
        id: gnufpxhymraym
      allOf:
      - $ref: '#/components/schemas/BeaconConfig'
      - type: object
        properties:
          created:
            $ref: '#/components/schemas/CreatedDate'
          updated:
            $ref: '#/components/schemas/UpdatedDate'
          uniqueId:
            $ref: '#/components/schemas/UniqueId'
          model:
            $ref: '#/components/schemas/DeviceModel'
      - $ref: '#/components/schemas/ConfigLocksResponse'
    LockDetailsConfirmationId:
      type: string
      description: The value included in the DeviceChangedEvent.UPDATED to confirm that a specific configuration has been applied on a device
      example: ed26348a-e33e-428c-a343-33e0054ebdf9
    LocalAlertingSettings:
      type: object
      description: Device local alerting settings.
      properties:
        alertSamples:
          type: integer
          description: The number of samples considered for triggering alerts.
          example: 15
          minimum: 1
          maximum: 65535
        loggingFactor:
          type: integer
          description: Logging factor specifically used during alert mode.
          example: 1
          minimum: 1
          maximum: 65535
        armingState:
          type: string
          description: The current state of the device’s alert system.
          enum:
          - ARMED
          - PAUSED
          - HALTED
          example: ARMED
        armingDelay:
          type: integer
          description: Delay (in seconds) before the device transitions to the armed state.
          example: 300
          minimum: 0
          maximum: 3600
        deviceErrorSoundEnabled:
          type: boolean
          description: Indicates if the device error sound is enabled.
          example: true
        sensorErrorSoundEnabled:
          type: boolean
          description: Indicates if sensor error sound is enabled.
          example: true
        sensorOobSoundEnabled:
          type: boolean
          description: Indicates if sensor out-of-bound alert sound is enabled.
          example: true
        temperatureProbes:
          $ref: '#/components/schemas/TemperatureProbesSettings'
        humidityProbes:
          $ref: '#/components/schemas/HumidityProbesSettings'
    UniqueId:
      description: Unique identifier of a device.
      type: string
      example: 11P10AvW
    ConfigBle:
      type: object
      description: General BLE advertising settings.
      properties:
        name:
          description: Bluetooth name.
          maxLength: 15
          type: string
        profiles:
          type:
          - array
          - 'null'
          description: List of beacon profiles Device should broadcast.
          deprecated: true
          items:
            type: string
            enum:
            - IBEACON
            - EDDYSTONE
        packets:
          description: Beacon advertising packets that should be broadcasted by a device.
          type:
          - array
          - 'null'
          items:
            type: string
            enum:
            - IBEACON
            - EDDYSTONE_UID
            - EDDYSTONE_URL
            - EDDYSTONE_EID
            - EDDYSTONE_TLM
            - EDDYSTONE_ETLM
            - KONTAKT
            - KONTAKT_TLM
            - KONTAKT_LOCATION
            - BUTTON_IBEACON
            - QUUPPA
        customConfiguration:
          type:
          - string
          - 'null'
          description: 'Custom configuration parameters for special use-cases. If the solution prepared for you by Kontakt.io takes advantage of these properties, please get in touch with our Support Team for a proper documentation.


            **Note (POST /config/create):** PIDs not on the target device''s accepted list are silently filtered out before the pending-config record is persisted. The server returns `201` regardless. To detect a dropped PID, compare the `customConfiguration` keys you sent with the keys echoed back in the response for the same `uniqueId`.

            '
        shuffled:
          type:
          - boolean
          - 'null'
          description: Flag indicating whether a beacons should turn the Kontakt.io Secur

# --- truncated at 32 KB (102 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kontaktio/refs/heads/main/openapi/kontaktio-device-api-openapi.yml