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 Secure Shuffling on (`true`) or of (`false`). txPower: type: - integer - 'null' minimum: 0 maximum: 7 description: Bluetooth transmission power level. Possible values are integers from 0 to 7 (nRF51-based devices), 1 to 7 (nRF52-based devices), and 1 or 6 (Card Tag CT16-2). interval: type: - integer - 'null' minimum: 100 maximum: 10240 description: Advertising interval in milliseconds for iBeacon and Eddystone packets. kontaktFrameInterval: type: - integer - 'null' minimum: 20 maximum: 10240 description: Advertising interval in milliseconds for Kontakt.io Secure Profile packet (Kontakt Packet). telemetryInterval: type: - integer - 'null' minimum: 20 maximum: 10240 description: Advertising interval in milliseconds for Kontakt.io Telemetry packet. locationFrameInterval: type: - integer - 'null' minimum: 100 maximum: 10240 description: Advertising interval in milliseconds for Kontakt.io Location packet. telemetryFields: type: - array - 'null' description: 'Bitmask-based configuration of fields included in the Kontakt.io Telemetry packet. Each value enables a specific telemetry field. Available fields depend on device hardware capabilities. | Value | Description | |-------|-------------| | AIR_PRESSURE | Air pressure in Pa, as a float32 number | | AIR_QUALITY | Air-Quality-Index (AQI) in units 0-254, 255 meaning invalid | | BATTERY | Battery percentage, from 0% to 100%, with 255 meaning externally-powered | | BLE_CHANNEL | BLE channel on which it is advertising: 0 - 40 | | BLE_SCAN_RESULT | BLE scan results | | BUTTON_CLICK | Seconds since the last button click, saturating at 0xFFFF | | BUTTON_DOUBLE_CLICK | Seconds since the last double click, saturating at 0xFFFF | | DOUBLE_TAP_EVENT | Seconds since the last double tap, saturating at 0xFFFF | | GAS_SENSOR | Gas sensor reading | | GPIO | GPIO state as a telemetry, not implemented | | HUMIDITY | Relative humidity percentage 0-100, 255 meaning invalid | | IDENTIFIED_BUTTON_CLICK | Click 8-bit counter, and seconds since the last button click, saturating at 0xFFFF | | INOUT_COUNTER | In/out people counter | | IR_STATS | IR scan statistics | | LIGHT_LEVEL | Light level as a percentage: 0 - dark, 100 - sunny environment, 255 - invalid | | LIGHT_LEVEL_LUX | Light level in lux, as an uint16 | | LOGGING_ENABLED | Show if logging is enabled and if data is available for download | | MOVEMENT_EVENT | Movement 8-bit counter, and seconds since the last movement click, saturating at 0xFFFF | | MOVEMENT_THRESHOLD_EVENT | Seconds since the last movement, saturating at 0xFFFF | | OCCUPANCY | Number of people measured by the detector: 0 - 254, 255 - invalid | | PEOPLE_DETECTION | People detection | | PIR_DETECTION | Seconds since the last PIR movement, saturating at 0xFFFF | | PROXIMITY_REPORT | Proximity report | | ROOM_NUMBER | Room number, either measured, or configured. Uint16 | | RSSI_SCAN | RSSI scan results | | SOAP_DISPENSER | Soap dispenser event | | TAP_EVENT | Seconds since the last tap, saturating at 0xFFFF | | TEMPERATURE | Temperature as signed 8-bit integer, from -128 to 127C | | TEMPERATURE_16_BITS | Temperature as an FP8.8 signed fixed-point number | | TWO_BUTTON_INFO | 2x click 8-bit counters, and seconds since the any button click, saturating at 0xFFFF | | UTC_TIME | Unix timestamp, UTC time from 1970 in seconds | | RAW_ACCELEROMETER | Sensitivity: 1/1000 of a g; X, Y, Z values in units of the sensitivity | ' items: type: string enum: - AIR_PRESSURE - AIR_QUALITY - BATTERY - BLE_CHANNEL - BLE_SCAN_RESULT - BUTTON_CLICK - BUTTON_DOUBLE_CLICK - DOUBLE_TAP_EVENT - GAS_SENSOR - GPIO - HUMIDITY - IDENTIFIED_BUTTON_CLICK - INOUT_COUNTER - IR_STATS - LIGHT_LEVEL - LIGHT_LEVEL_LUX - LOGGING_ENABLED - MOVEMENT_EVENT - MOVEMENT_THRESHOLD_EVENT - OCCUPANCY - PEOPLE_DETECTION - PIR_DETECTION - PROXIMITY_REPORT - ROOM_NUMBER - RSSI_SCAN - SOAP_DISPENSER - TAP_EVENT - TEMPERATURE - TEMPERATURE_16_BITS - TWO_BUTTON_INFO - UTC_TIME - RAW_ACCELEROMETER locationFrameChannel: type: - integer - 'null' description: BLE broadcasting channel used for Kontakt.io Location packet broadcasts. 0 means randomized channel broadcasting. enum: - 0 - 37 - 38 - 39 LowBatterySettings: type: object description: Device low battery settings. properties: alertLevel: type: integer description: The battery level threshold (percentage) below which a low battery alert is triggered. example: 10 minimum: 1 maximum: 100 alertEnabled: type: boolean description: Indicates whether the low battery alert is enabled. example: true LocationInfo: type: object description: Information about device location. properties: campusId: type: number description: Campus identifier example: 100 campusName: type: string description: Campus name buildingId: type: number description: Building identifier example: 100 buildingName: type: string description: Building name floorId: type: number description: Floor identifier example: 100 floorName: type: string description: Floor name roomId: type: number description: Room identifier example: 100 roomName: type: string description: Room name IrTransmitterSettings: type: object description: IR Transmitter setting. properties: dutyCycle: type: integer minimum: 0 maximum: 100 description: Duty cycle used for the IR emission as a percentage intensity: type: integer minimum: 0 maximum: 100 description: Power intensity for the IR emission as a percentage protoV2: type: boolean description: Flag that enables IR Protocol V2 EditableGatewayConfig: description: Gateway (e.g. Portal Light) settings that can be changed via API type: object properties: applications: type: object properties: system: type: object properties: wifiSsid: type: string description: Name of the WiFi network a gateway should connect to minLength: 2 maxLength: 32 wifiProtocol: type: string description: WiFi authentication protocol that a gateway should use enum: - WPA_PSK - WPA_EAP - OPEN wifiUserName: type: string description: When `wifiProtocol` is set to `WPA_EAP` this parameter represents PEAP MSCHAPv2 username. If `WPA_PSK` is used, this value will be ignored by a gateway. maxLength: 256 wifiPassword: type: string description: When `wifiProtocol` is set to `WPA_EAP` this parameter represents PEAP MSCHAPv2 password. If `WPA_PSK` is used, this value will be ignored by a gateway. maxLength: 63 apiHost: type: string description: DM API host URL. format: uri minLength: 1 apiKey: type: string description: API key for DM API (alphanumeric) minLength: 1 dataHost: type: string description: Data host URL format: uri dataApiKey: type: string description: API key for Data host (alphanumeric) otaUrl: type: string description: OTA update URL format: uri maxLength: 64 proxyURL: type: string description: Proxy URL for the gateway to connect to. Empty value disables proxying. minLength: 0 maxLength: 64 default: '' proxyPort: type: integer description: Proxy port for the gateway to connect to minimum: 0 maximum: 65535 default: 80 eapType: type: string description: Extensible Authentication Protocol (EAP) for network access enum: - DEFAULT - TLS - TTLS - PEAP default: DEFAULT ibeaconUUID: type: string format: uuid description: "iBeacon UUID to broadcast. \n Broadcasting the iBeacon is disabled by default. To enable, the ibeaconUUID need to be set." minLength: 36 maxLength: 36 default: 00000000-0000-0000-0000-000000000000 ibeacon_major: type: integer description: Major to use when broadcasting iBeacon frames. default: 0 ibeacon_minor: type: integer description: Minor to use when broadcasting iBeacon frames. default: 0 roomID: type: integer description: Room ID used in location frame default: 0 tx_power: type: integer description: Tx power used by the gateway (allowed values are defined in documentation) filtration_mask: type: integer description: "Filtration mask is the second stage of frame filtration implemented in Portal light. Each bit in that mask defines whether to process a specific type of frames or omit them. \n Bit order is as follows: Mac filtration, Eddystone,iBeacon, Kontakt. \n The default value is 0b1111 (15 decimal), meaning that Kontakt frames, iBeacon, Eddystone and devices with Kontakt MAC will be sent to the cloud. It is possible to set this mask to process only selected types of frames/devices." default: 15 rssi_threshold: type: integer description: Rssi threshold filtration is the first stage of frame filtration implemented in Portal light. It means that if rssi filtration is on and set to desired value then all scans with lower rssi will be rejected. default: -127 bleAdvChannel: type: integer description: "BLE advertising channel.\nAll channels advertising (0) is set as a default. Possibility to advertise only on one of three channels was added for Location Engine needs: 37, 38, 39 \n Other values such as 10,35 etc… will be treated as 0 - it means all channels advertising." enum: - 0 - 37 - 38 - 39 bleScanChannel: type: integer description: "BLE scanning channel.\nAll channels scanning (0) is set as a default. Possibility to scan only on one of three channels was added for Location Engine needs: 37, 38, 39 \n Other values such as 10,35 etc… will be treated as 0 - it means all channels scanning." enum: - 0 - 37 - 38 - 39 dm_poll_interval_s: type: integer description: DM poll interval in seconds. defaultNTP: type: string description: Default NTP server URL. format: uri minLength: 1 secondNTP: type: string description: Secondary NTP server URL. format: uri minLength: 1 apiCACertificate: type: string description: API CA certificate. minLength: 1 wpa2Certificate: type: string description: "Enterprise WiFi. Base64-encoded P12 certificate. \n Keystore in p12/pfx format (with certificate and private key)" wpa2CertificatePassword: type: string description: "Enterprise WiFi. Certificate password. \n Password to the keystore" wpa2PrivateKeyAlias: type: string description: "Enterprise WiFi. Alias for private key. \n Private key alias specified by --name param in openssl utility" default: '1' wpa2CACertificate: type: string description: "Enterprise WiFi. For deployment and client-specific requirement there was a need to add CA certificates to validate the server. \n Sent as a string in .pem format with header -----BEGIN CERTIFICATE----- and footer ----END CERTIFICATE-----" beacon_packets_mask: type: integer description: Beacon packets mask. led_intensity: type: integer description: LED brightness can be adjusted from 0% (completely off) to 100% - maximum brightness. minimum: 0 maximum: 100 default: 10 blink_interval_s: type: integer description: Blink interval in seconds. minimum: 0 maximum: 3600 ir_duty_cycle: type: integer description: IR duty cycle (0-100%). minimum: 0 maximum: 100 ir_intensity: type: integer description: IR intensity (0-100%). minimum: 0 maximum: 100 device_name: type: string description: Device name. minLength: 1 adv_int: type: integer description: Advertising interval. Must be between 160 and 16384. minimum: 160 maximum: 16384 debug_features_mask: type: integer description: Debug features mask. bound_device: type: string description: 'Bound device must be a lowercase MAC address. Only both bound_device and bound_device_password can be set to a non-blank string at the same time or both be set to blank.' bound_device_password: type: string description: Bound device password. Must be provided together with bound_device. relay_mode: type: integer description: Relay mode. mqtt_auth: type: string description: MQTT authentication credentials. ir_config_mask: type: integer description: IR configuration mask. minimum: 0 maximum: 255 data_interval_ms: type: integer description: Target interval between scans uploads, in ms. 0 means as fast as possible. minimum: 0 maximum: 65535 default: 2000 ConfigButton: type: object description: Button settings. properties: buttonFeatures: type: array description: 'Bitmask-based hardware button configuration. Each value in the list enables a specific flag. An empty list `[]` corresponds to a mask of `0b000` (all flags unset) which is the default: click and long-press are enabled, triple-click is disabled. Send an empty list to restore defaults. Note: `CLICK_OFF` and `LONG_PRESS_OFF` are inverted flags — setting them **disables** a behavior that is on by default. `TRIPLE_CLICK` is a normal flag — setting it **enables** a behavior that is off by default. | Value | Description | |-------|-------------| | CLICK_OFF | Disable single-click detection. On by default — set this flag to turn it off | | LONG_PRESS_OFF | Disable long-press detection. On by default — set this flag to turn it off | | TRIPLE_CLICK | Require a triple-click to trigger a panic event instead of a single click. Off by default | | MULTI_CLICK | Enable multi-click detection. Mutually exclusive with TRIPLE_CLICK. Off by default | ' items: type: string enum: - CLICK_OFF - LONG_PRESS_OFF - TRIPLE_CLICK - MULTI_CLICK multiClickCount: type: integer description: 'Number of clicks required for multi-click detection (1–10). Only applicable when MULTI_CLICK is set in buttonFeatures. ' minimum: 1 maximum: 10 panicDuration: type: integer minimum: 0 maximum: 65535 description: Number of second the `BUTTON_IBEACON` packet should be broadcast after a button press. ConfigIBeacon: type: object description: iBeacon settings. properties: proximity: type: - string - 'null' format: UUID description: iBeacon Proximity UUID. major: type: - integer - 'null' format: uint16 minimum: 0 maximum: 65535 description: iBeacon Major. minor: type: - integer - 'null' format: uint16 minimum: 0 maximum: 65535 description: iBeacon Minor. rssi1m: type: - array - 'null' description: List of new Calibrated RSSI@1m values (iBeacon) for each TX power level the Device can use. items: type: integer example: - -115 - -84 - -81 - -77 - -72 - -69 - -65 - -59 TemperatureProbe: type: object description: Settings for a temperature probe. properties: alertMaxEnabled: type: boolean description: Indicates if the maximum temperature alert is enabled. example: true alertMaxLevel: type: number format: float description: The maximum temperature level (in Celsius) to trigger an alert. example: 40.5 minimum: -273 maximum: 1000 alertMinEnabled: type: boolean description: Indicates if the minimum temperature alert is enabled. example: true alertMinLevel: type: number format: float description: The minimum temperature level (in Celsius) to trigger an alert. example: -100.5 minimum: -273 maximum: 1000 sensorEnabled: type: boolean description: Indicates if the temperature sensor is enabled. example: true HumidityProbe: type: object description: Settings for a humidity probe. properties: alertMaxEnabled: type: boolean description: Indicates if the maximum humidity alert is enabled. example: true alertMaxLevel: type: integer description: The maximum humidity level (in %) to trigger an alert. example: 80 minimum: 0 maximum: 100 alertMinEnabled: type: boolean description: Indicates if the minimum humidity alert is enabled. example: true alertMinLevel: type: integer description: The minimum humidity level (in %) to trigger an alert. example: 20 minimum: 0 maximum: 100 sensorEnabled: type: boolean description: Indicates if the humidity sensor is enabled. example: true Device: type: object allOf: - type: object properties: id: type: string format: UUID description: Device object ID used internally in Kontakt.io API. uniqueId: type: string description: Unique ID of the device. deviceType: $ref: '#/components/schemas/DeviceType' category: $ref: '#/components/schemas/DeviceCategory' model: description: Kontakt.io internal model name of the device. Multiple products may have the same model name. Managed 3rd party devices will all have `PARTNER_DEVICE`. For differentiating specific products please use `productCode`. Product display name can be found in `product`. allOf: - $ref: '#/components/schemas/DeviceModel' product: type: string description: Official display name of the product. May be changed by Kontakt.io. productCode: type: string x-stoplight: id: rb6av1sof48ve description: Unique identifier of the product. Immutable. macs: $ref: '#/components/schemas/DeviceMacs' specification: type: string deprecated: true managerId: type: string format: UUID description: ID of the Device's assigned manager. ownerId: type: string format: UUID description: ID of the Device's actual owner. If a Device was assigned to its current Manager by a Supervisor or shared with the Manager, this property will indicate a Manager that is an actual owner of this particular Device. shortCompanyId: type: string description: Short identifier of the company that the device belongs to. access: $ref: '#/components/schemas/DeviceDataRole' venue: type: object deprecated: true shares: description: List of Share objects describing how and with whom the Device has been shared type: array items: type: object properties: managerMail: type: string format: email description: Email address of a Manager that received access to this Device access: $ref: '#/components/schemas/DeviceDataRole' expirationDate: type: - integer - 'null' description: Unix epoch timestamp indicating when a share will be revoked. If a Device was shared indefinitely, this value will be `null`. firmware: type: string description: Version of the firmware on the device. orderId: type: string description: Associated Order ID this device belongs to. batteryLevel: type: - integer - 'null' format: int32 deprecated: true description: Battery level percentage. Deprecated; use status.batteryLevel. Returns -1 when device is externally powered. lastSeen: type: - integer - 'null' format: int64 deprecated: true description: Unix epoch timestamp (seconds) of the last online moment. Deprecated; use status.lastOnlineTimestamp. status: type: - object - 'null' description: Device status details. properties: online: type: - boolean - 'null' description: Whether the device is currently online. offlineReason: type: - string - 'null' description: Reason reported when the device is offline. externalPower: type: - boolean - 'null' description: Whether the device is externally powered. batteryLevel: type: - integer - 'null' format: int32 description: Battery level percentage. batteryLevelTimestamp: type: - string - 'null' format: date-time description: Timestamp of the last battery level update (ISO 8601 format). example: '2025-12-29T13:45:17.079Z' firstOnlineTimestamp: type: - string - 'null' format: date-time description: First time the device was seen online (ISO 8601 format). example: '2025-12-29T13:45:17.079Z' lastOnlineTimestamp: type: - string - 'null' format: date-time description: Most recent online timestamp (ISO 8601 format). If online, current time truncated to minutes. example: 2026-01-06T09:44Z federation: type: object description: Information about device's federation. required: - federated properties: id: type: string description: ID of related DeviceFederation. `null` if not federated. example: 500ff1ed-0000-4000-9003-000200400001 source: type: string description: Cloud ID of Source Device Management. `null` if not federated. example: prod-im-api federated: type: boolean description: Whether the device is federated or not. lastSync: type: string format: date-time description: Last synchronization of the device with Source Device Management. `null` if not federated (ISO 8601 format). example: 1985-04-12T23:20:50.246+0000 deployment: $ref: '#/components/schemas/DeploymentInfo' pendingConfig: oneOf: - $ref: '#/components/schemas/PendingBeaconConfig' - $ref: '#/components/schemas/PendingGatewayConfig' firmwareInfo: $ref: '#/components/schemas/FirmwareInfo' currentLocation: $ref: '#/components/schemas/LocationInfo' displaySettings: $ref: '#/components/schemas/DisplaySettings' lowBatterySettings: $ref: '#/components/schemas/LowBatterySettings' sensorSettings: $ref: '#/components/schemas/SensorSettings' localAlertingSettings: $ref: '#/components/schemas/LocalAlertingSettings' buzzerSnoozing: $ref: '#/components/schemas/BuzzerSnoozing' dispenser: $ref: '#/components/schemas/Dispenser' systemTime: type: string format: date-time description: Device system time in ISO 8601 format (UTC). Maps to PID h_system_time (0xA004). Available on nrf52 devices with firmware >= 1.20. example: '2024-03-30T12:00:00Z' desiredConfig: type: object x-sl-internally-excluded: true x-sl-error-message: You do not have permission to view this reference required: - uniqueId - deviceType - category - model - product - productCode - federation - deployment - firmwareInfo - $ref: '#/components/schemas/DeviceEditableVirtualAttributes' - $ref: '#/components/schemas/BeaconConfig' - $ref: '#/components/schemas/EditableGatewayConfig' - type: object description: Some schema overrides. properties: occupancy: $ref: '#/components/schemas/OccupancyAllSettings' UpdateDeviceVirtualAttributesRequest: description: Device Update Virtual Attributes x-stoplight: id: i59cs9vye4tsv allOf: - type: object description: Device selector. properties: uniqueId: description: List of Unique IDs of Devices that should be updated. type: array items: type: string deviceType: $ref: '#/components/schemas/DeviceType' required: - uniqueId - deviceType - $ref: '#/components/schemas/DeviceEditableVirtualAttributes' - type: object description: Other updatable virtual properties. properties: exclusions: $ref: '#/components/schemas/OccupancyExclusionZones' inclusions: $ref: '#/components/schemas/OccupancyInclusionZones' deployment.status: $ref: '#/components/schemas/DeploymentStatus' deployment.deploymentDate: type: string format: date-time description: Timestamp of when the device was deployed (ISO 8601 format). Defaults to the current time if not provided when updating deployment info. example: '2026-04-10T12:00:00Z' deployment.installerEmail: type: string description: Email address of the person who deployed the device. example: john.doe@example.com deployment.installerName: type: string description: First and last name of the person who deployed the device. example: John Doe desiredConfig: type: object x-sl-internally-excluded: true x-sl-error-message: You do not have permission to view this reference protocol: type: string description: 'Selects the communication protocol used by the gateway to exchange data with the Kontakt.io platform. This is the recommended way to configure protocol-related settings on a gateway; the platform automatically derives the corresponding `desiredConfig.apiHost`, `desiredConfig.dataHost`, and `desiredConfig.mqttAuth` values. Applicable to gateway devices only. ' enum: - MQTT - HTTP title: Update Device Virtual Attributes DeviceEditableVirtualAttributes: type: object description: Set of read-write editable virtual attributes. properties: alias: type: - string - 'null' description: Alternative description for the Device, stored only on Kontakt.io backend - it's not possible to read this value via Bluetooth directly from the Device itself. In Device Management App represented as a Notes. tags: description: Comma-separated list of maximum 20 user-defined labels (no longer than 32 characters). type: array maxItems: 20 uniqueItems: true items: type: string maxLength: 32 metadata: type: - object - 'null' description: 'Object containing arbitrary key-value pairs that can be defined by a Device''s Manager. Danger: may be overwritten by other API clients.' lat: type: - number - 'null' format: float deprecated: true lng: type: - number - 'null' format: float deprecated: true deployedlat: type: - number - 'null' format: float deprecated: true deployedlng: type: - number - 'null' format: float deprecated: true PowerSavingSettings: description: Power Saving settings x-stoplight: id: 10t53bq8hl1v2 type: object properties: mode: type: - string - 'null' enum: - LIGHT_SENSOR - RTC - MOTION_DETECTION - BURST_MODE description: 'Currently enabled power saving mode. In all modes except BURST_MODE, nonconnectable packets (iBeacon, Eddystone, etc.) are switched off, Kontakt packet interval is reduced (at least every 2s, at most every 10s), and Kontakt TLM is off. | Value | Description | |-------|-------------| | MOTION_DETECTION | Enter power saving when no motion is detected (requires accelerometer). Configure via `moveSuspendTimeout` | | LIGHT_SENSOR | Enter power saving based on ambient light level (requires light sensor). Configure via `lightSensorThreshold` and `lightSensorHysteresis` | | RTC | Enter power saving on a weekly schedule using the real-time clock. Configure days and hours via the `rtc` property | | BURST_MODE | Device advertises all configured frames for a set duration, then sleeps. Configure via `burstOnTime` and `burstOffTime`. Cannot be combined with other power saving modes. Panic Button Frame is advertised independently. Button press prolongs advertising. Sleep time is randomized (±10%). During sleep, accelerometer events are still detected, RTC keeps time, and shuffling works normally | ' features: type: array items: type: string enum: - LIGHT_SENSOR - RTC - MOTION_DETECTION - BURST_MODE deprecated: true description: Deprecated! Please use the mode parameter instead. Currently enabled power saving mode. Possible values are `LIGHT_SENSOR` (Beacon Pro BP16-3 only) and `MOTION_DETECTION`, `RTC`, `BURST_MODE` or an empty list. moveSuspendTimeout: type: - integer - 'null' minimum: 60 maximum: 3600 description: Time (in seconds) after which a Card Tag CT16-2 engages power saving mode. Possible values are in range between 60 (1 minute) and 3600 (1 hour). powerSaverAdvertiseInterval: deprecated: true type: - integer - 'null' description: Bluetooth Advertising interval that a Card Tag CT16-2 should use when in the Power Saving mode. Available only on Card Tags CT16-2 with firmware 4.2 or newer. rtc: description: A list of object representing days of a week and hours during that day when a power saving mode should be engaged. Available only on Devices equipped with a Real-Time Clock (RTC). type: - array - 'null' items: type: object properties: day: type: string enum: - MON - TUE - WED - THU - FRI - SAT - SUN description: Indicates a day of a week. hours: type: array items: type: integer minimum: 0 maximum: 23 description: List of hours (in UTC, using 24h clock) from a day specified in the `day` parameter, during which Power Saving should be enabled, e.g. 17 means Power Saving will be enabled from 17:00 until 17:59 UTC. lightSensorThreshold: type: - integer - 'null' minimum: 0 maximum: 100 description: Threshold of ambient light intensity, expressed in percents, below which a Device enters the power saving mode. Applicable only to Devices equipped with a light sensor. lightSensorHysteresis: type: - integer - 'null' description: Light sensor's [hysteresis](https://en.wikipedia.org/wiki/Hysteresis#In_engineering), expressed in percent points. More details in Power Saving guide. Applicable only to Devices equipped with a light sensor. burstOnTime: type: - integer - 'null' minimum: 15 maximum: 65535 description: Number of *seconds* a beacon should broadcast when `BURST_MODE` is active burstOffTime: type: - integer - 'null' minimum: 1 maximum: 10080 description: Number of *minutes* between each broadcasts when `BURST_MODE` is active DeviceType: type: string enum: - BEACON - GATEWAY - EXTERNAL description: General type of device. DeviceDataRole: type: string enum: - OWNER - SUPERVISOR - EDITOR - VIEWER description: Type of access granted to this device. DeviceModel: type: string enum: - SMART_BEACON - USB_BEACON - SENSOR_BEACON - CARD_BEACON - GATEWAY - BEACON_PRO - TAG_BEACON - SMART_BEACON_3 - HEAVY_DUTY_BEACON - CARD_BEACON_2 - TOUGH_BEACON_2 - BRACELET_TAG - UNIVERSAL_TAG - BRACELET_TAG_2 - LANYARD_TAG - NANO_TAG - STICKER_TAG - PUCK_TAG - PORTAL_LIGHT - SMART_BADGE - SMART_BADGE_3_MINI - PORTAL_BEAM - NANO_SERIES - NANO_TAG_IR - ASSET_TAG_2 - ANCHOR_BEACON_2 - BEAM_MINI - PORTAL_BEAM_IR - DISPENSER_BEACON - ES10_DISPENSER_BEACON - UNIVERSAL_DISPENSER_BEACON - PORTAL_LIGHT_2S - PORTAL_LIGHT_2 - ASSET_TAG_2_MINI - PARTNER_DEVICE - EXTERNAL description: Kontakt.io internal model name of the device. Multiple products may have the same model name. Managed 3rd party devices will all have `PARTNER_DEVICE`. UpdateDeviceSecureResponseRequest: title: Device Update via Secure Response x-stoplight: id: z42p6ny4h5b5y properties: uniqueId: description: List of Unique IDs of Devices that should be updated type: array items: type: string response: description: List of Base64-encoded Secure Responses from Kontakt.io devices that were configured. A position on this list corresponds to a position of a Unique ID in the `uniqueId` list. type: array items: type: string format: byte updated: description: List of Unix epoch timestamps (seconds) that represent a time and date when a Kontakt.io Device were 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 BeaconConfig: description: Full beacon-type configuration. allOf: - $ref: '#/components/schemas/ConfigBle' - $ref: '#/components/schemas/ConfigIBeacon' - $ref: '#/components/schemas/ConfigEddystone' - $ref: '#/components/schemas/ConfigButton' - $ref: '#/components/schemas/ConfigEid' - type: object properties: powerSaving: $ref: '#/components/schemas/PowerSavingSettings' accelerometer: $ref: '#/components/schemas/AccelerometerSettings' occupancy: $ref: '#/components/schemas/OccupancyPhysicalSettings' irReceiver: $ref: '#/components/schemas/IrReceiverSettings' irTransmitter: $ref: '#/components/schemas/IrTransmitterSettings' bleScan: $ref: '#/components/schemas/BleScanSettings' fingerprinting: type: object description: Alias for bleScan, same fields. Deprecated. deprecated: true irRoomNumber: type: integer minimum: 0 maximum: 4095 default: 65535 description: Static room number to broadcast over BLE, and transmit over IR. Up to 12 bits. Default 0xFFFF (disabled) irBlinkInterval: type: integer minimum: 0 maximum: 999 default: 2 description: Time between IR transmissions, encoded as u16. 0 - disabled, 1 - 10 seconds, 11 - 999 milliseconds irSlotDuration: type: integer minimum: 0 maximum: 65535 default: 0 description: Time between IR slots in the same transmission window, in ms. Available for IR room emitters and IR receivers. irSlotCount: type: integer minimum: 0 maximum: 8 default: 0 description: 'IR slot count. 0 - disabled, 1-4: 2 bits for slots, 5-8: 3 bits for slots. No other values allowed' irDetectionParams: type: string pattern: ^[0-9A-Fa-f]{20}$ description: Opaque 10-byte struct for IR detection tuning. example: '01020301000001145403' pirEnabled: type: boolean description: Turn PIR sensor on/off. airQualityInterval: type: integer description: Interval at which the air quality is measured. Unit is seconds. 0 to disable air quality probing. enum: - 0 - 3 - 300 lightSensorSamplingInterval: type: integer minimum: 0 maximum: 1800000 description: Interval at which the ambient light level is measured. Unit is milliseconds (i.e. 1800000 = 30 minutes). temperatureOffset: type: integer description: Calibration parameter for devices equipped with dedicated thermometer and broadcasting temperature values in `KONTAKT_TLM` packet. This offset does not affect values reported in Eddystone Telemetry packets. displaySettings: $ref: '#/components/schemas/DisplaySettings' lowBatterySettings: $ref: '#/components/schemas/LowBatterySettings' sensorSettings: $ref: '#/components/schemas/SensorSettings' localAlertingSettings: $ref: '#/components/schemas/LocalAlertingSettings' buzzerSnoozing: $ref: '#/components/schemas/BuzzerSnoozing' dispenser: $ref: '#/components/schemas/Dispenser' timeSync: type: boolean description: Synchronizes the device's internal clock systemTime: type: string format: date-time description: Device system time in ISO 8601 format (UTC). Maps to PID h_system_time (0xA004). Available on nrf52 devices with firmware >= 1.20. example: '2024-03-30T12:00:00Z' DeviceAccessResponse: type: object properties: managerId: description: Identifier of the managers account example: 4dd811db-dbc4-4eb5-9dff-463f553bef04 email: description: Email of the managers account example: manager@example.com firstName: description: Managers first name example: John lastName: description: Managers last name example: Doe role: type: string example: VIEWER description: Role that the manager should have for the device enum: - VIEWER - EDITOR expirationDate: type: string description: The expiration date for assigned role example: 2024-12-25T11:58:12.246+0000 DisplaySettings: type: object description: Device display settings. properties: ledIntensity: type: number description: LED light intensity, ranging from 0% (completely off) to 100% (maximum brightness). minimum: 0 maximum: 100 ledBlinkInterval: type: number description: The number of seconds between LED blinks. minimum: 1 maximum: 255 ledBlinkEnabled: type: boolean description: Indicates whether the LED light is enabled. example: true temperatureUnit: type: string description: The unit for displaying temperature. enum: - CELSIUS - FAHRENHEIT JobStatus: type: string description: Job status. enum: - IN_PROGRESS - COMPLETED - NOT_FOUND - FAILED ConfigLocksResponse: type: object properties: locks: type: object properties: roomNumber: $ref: '#/components/schemas/LockDetails' temperatureMonitor: $ref: '#/components/schemas/LockDetails' AccelerometerSettings: type: object x-stoplight: id: q22ra4lowsp5r description: Accelerometer settings. properties: features: description: List of Accelerometer features that are enabled type: array items: type: string enum: - ACCELEROMETER - X_AXIS - Y_AXIS - Z_AXIS - MOVE_DETECTION - DOUBLE_TAP_DETECTION sensitivity: description: Accelerometer sensitivity type: integer enum: - 16 - 32 - 64 - 128 preset: description: Preset for Accelerometer configuration type: string enum: - MOVEMENT - FREE_FALL - DOUBLE_TAP - DOUBLE_TAP_AND_MOVEMENT - DOUBLE_TAP_AND_FREE_FALL move: description: Movement detection parameters type: object properties: threshold: description: Value (in m*g*) that an acceleration needs to exceeds in order to trigger movement detection type: integer duration: description: Time (in ms) than an acceleration needs to stay above threshold value in order to trigger movement detection type: integer detectionFlags: type: array items: type: string enum: - X_POSITIVE - Y_POSITIVE - Z_POSITIVE - X_NEGATIVE - Y_NEGATIVE - Z_NEGATIVE detectionFlagsJunction: type: string enum: - AND - OR doubleTap: description: Double tap detection parameters type: object properties: threshold: description: Value ( in m*g*) that an acceleration needs to exceeds in order to trigger movement detection type: integer timeLimit: description: Maximum duration (in ms) of a single tap type: integer timeLatency: description: Minimum time gap (in ms) between two taps type: integer timeWindow: description: Maximum duration (in ms) of the whole event type: integer detectionFlags: description: List of accelerometer axes that are monitored for double tap events type: array items: type: string enum: - X_AXIS - Y_AXIS - Z_AXIS highPass: description: High-pass filter parameters type: object properties: accelerometerData: type: boolean description: Flag indicating whether the high-pass filter should be applied to raw accelerometer data moveDetection: type: boolean description: Flag indicating whether the high-pass filter should be applied when movement detection is enabled doubleTapDetection: type: boolean description: Flag indicating whether the high-pass filter should be applied when double tap detection is enabled mode: description: High-pass filter mode type: string enum: - NORMAL - NORMAL_RESET - AUTORESET - REFERENCE cutOffFrequency: description: High-pass filter cut-off frequency type: number enum: - 0.05 - 0.1 - 0.2 - 0.5 reference: description: High-pass filter reference type: integer TemperatureProbesSettings: type: object description: Settings for temperature probes. properties: probe0: $ref: '#/components/schemas/TemperatureProbe' probe1: $ref: '#/components/schemas/TemperatureProbe' probe2: $ref: '#/components/schemas/TemperatureProbe' UpdatedDate: description: Informs when the object has been updated. type: string format: date-time example: 2023‐09‐18T15:33:00Z BuzzerSnoozing: type: object description: Buzzer snoozing settings for Temperature Monitor Pro devices. Maps to PID buzzer_snooze_duration_m (0x917D). properties: state: type: string description: Snooze state. INACTIVE means snoozing is disabled, INFINITE snoozes indefinitely. Device mapping uses 0 for INACTIVE and -1 for INFINITE. enum: - ACTIVE - INACTIVE - INFINITE duration: type: integer description: Snooze duration in minutes for ACTIVE. Ignored for INACTIVE and INFINITE states. Device mapping uses 0/-1 for inactive/infinite, so minimum is 1. minimum: 1 maximum: 32767 HumidityProbesSettings: type: object description: Settings for humidity probes. properties: probe0: $ref: '#/components/schemas/HumidityProbe' IrReceiverSettings: type: object description: IR Receiver setting. properties: wakeUpInterval: type: integer minimum: 0 maximum: 255 description: 'Interval between detection attempts, encoded as u8. 0 - disabled. Encodes time using 2-bit scale + 6-bit mantissa: 0b00=seconds, 0b01=ms, 0b10=ms*10, 0b11=ms*100. Max 63 per scale (e.g. max 63 seconds, or 6300ms, or 63000ms)' maxListenInterval: type: integer minimum: 0 maximum: 255 description: 'Maximum duration to try and detect IR signal, encoded as u8. Encodes time using 2-bit scale + 6-bit mantissa: 0b00=seconds, 0b01=ms, 0b10=ms*10, 0b11=ms*100. Max 63 per scale (e.g. max 63 seconds, or 6300ms, or 63000ms)' disableOnNoMotion: type: boolean description: Whether or not to disable IR receiver when the beacon is stationary. ConfigEddystone: type: object description: Eddystone settings. properties: namespace: type: - string - 'null' description: Eddystone UID Namespace. maxLength: 20 minLength: 20 instanceId: type: - string - 'null' description: Eddystone UID Instance ID. maxLength: 12 minLength: 12 url: type: - string - 'null' description: Eddystone URL address. Hex-encoded according to Eddystone specification. decodedUrl: type: - string - 'null' description: Eddystone URL address. Alias for `url` but in decoded format. `decodedUrl` takes precedence. rssi0m: type: - array - 'null' description: List of new Calibrated RSSI@0m values (Eddystone) for each TX power level the Device can use. deprecated: true items: type: integer BleScanSettings: type: object description: BLE scanning setting. Can be used for fingerprinting. properties: interval: type: integer minimum: 1 maximum: 604800 default: 82800 description: 'The interval between BLE scans. Unit is seconds. 0: disabled. Default: 23h = 82800 seconds' duration: type: integer minimum: 100 maximum: 65535 default: 10000 description: Duration of each BLE scan. Unit is milliseconds. models: type: string default: 090e1c1d1f22 description: Allowed models array for scanning, expressed as hexadecimal string. force: type: boolean default: false description: Force the BLE scan. size: type: integer minimum: 0 maximum: 255 default: 20 description: Maximum number of scanned items reported per scan. Requires nrf52 firmware >= 2.5.88. OccupancyExclusionZones: description: Exclusion zones. Areas excluded from occupancy counting like windows, heaters, etc. Applicable only in static room occupancy. **It's a virtual attribute.** type: array items: $ref: '#/components/schemas/Polygon' StitchingPose: type: object required: - pivotLocal - pivotWorld - rotationDeg properties: pivotLocal: $ref: '#/components/schemas/StitchingPivotLocal' pivotWorld: $ref: '#/components/schemas/StitchingPivotWorld' rotationDeg: type: number format: decimal description: Clockwise rotation in degrees around pivot point. example: 25 DeviceAccessBulkJobResponse: type: object properties: jobKey: type: string description: Identifier of the job example: grant-device-access_b4dfa2ed-4ac9-4b36-b662-be6be3925193 status: $ref: '#/components/schemas/JobStatus' progress: type: integer minimum: 0 maximum: 100 description: Progress of the device access bulk process example: 55 result: type: object properties: devicesRequested: type: number description: Number of devices requested with the BQL example: 100 accessGranted: type: number description: Number of devices that the access has been granted for example: 50 accessGrantFailed: type: number description: Number of devices that the access grant failed for example: 10 accessRevoked: type: number description: Number of devices that the access has been revoked for example: 10 accessRevokeFailed: type: number description: Number of devices that the access revoke failed for example: 20 devicesInaccessible: type: number description: Number of devices that are inaccessible with provided BQL, e.g. insufficient permissions example: 10 errors: type: array items: type: object properties: type: type: string enum: - VALIDATION_FAILED - OBJECT_DOES_NOT_EXIST - UNKNOWN_ERROR fieldName: type: string description: Name of the field with error example: error errorMessage: description: Error message example: Manager doesn't exist LockDetails: type: object properties: confirmationId: $ref: '#/components/schemas/LockDetailsConfirmationId' DeviceAccessGrantRequest: type: object properties: managerEmails: type: array example: - manager@example.com description: List of manager emails that the permission should be granted for items: type: string role: type: string example: VIEWER description: Role that the manager should have for the device enum: - VIEWER - EDITOR expirationDate: type: string description: The expiration date for assigned role example: 2024-12-25T11:58:12.246+0000 PendingGatewayConfig: description: Pending Gateway (e.g. Portal Light) Configuration. x-stoplight: id: 5bcdyhznq27sa allOf: - $ref: '#/components/schemas/EditableGatewayConfig' - type: object properties: created: $ref: '#/components/schemas/CreatedDate' updated: $ref: '#/components/schemas/UpdatedDate' uniqueId: $ref: '#/components/schemas/UniqueId' - $ref: '#/components/schemas/ConfigLocksResponse' ConfigEid: type: object description: Eddystone-EID settings. properties: eidIdentityKey: description: Eddystone-EID Identity Key. type: - string - 'null' eidRotationPeriodExponent: description: Eddystone-EID rotation period exponent. type: - integer - 'null' minimum: 0 maximum: 15 DeviceAccessRevokeRequest: type: object properties: managerEmails: type: array example: - manager@example.com description: List of manager emails that the permission should be revoked from items: type: string DeviceMacs: type: object description: Collection of MAC addresses associated with the device. properties: mainMac: type: string description: Primary MAC address used to identify the device. example: AA:BB:CC:DD:EE:FF bleMac: type: - string - 'null' description: Bluetooth Low Energy interface MAC address. example: AA:BB:CC:DD:EE:01 wifiMac: type: - string - 'null' description: Wi-Fi interface MAC address. example: AA:BB:CC:DD:EE:02 eddystoneMac: type: - string - 'null' description: MAC address used for Eddystone advertising. example: AA:BB:CC:DD:EE:03 ibeaconMac: type: - string - 'null' description: MAC address used for iBeacon advertising. example: AA:BB:CC:DD:EE:04 OccupancyAllSettings: description: Occupancy settings. Only applicable to devices with occupancy capability. allOf: - $ref: '#/components/schemas/OccupancyPhysicalSettings' - type: object properties: inclusions: $ref: '#/components/schemas/OccupancyInclusionZones' exclusions: $ref: '#/components/schemas/OccupancyExclusionZones' stitching: type: object description: Stitching configuration (no images in device responses). properties: intersections: type: array items: $ref: '#/components/schemas/StitchingPairMinimal' DeviceCategory: type: string enum: - TAG - INFRASTRUCTURE description: Category of the device, whether it's a moving (TAG) or static (INFRASTRUCTURE) device. StitchingPivotWorld: description: 'Pivot (rotation point) of the image in the world coordinates that are shared between stitched devices. Origin is top left corner.' type: object required: - x - y properties: x: description: X coordinate in world coordinates. type: integer example: 420 y: description: Y coordinate in world coordinates. type: integer example: 160 FirmwareInfo: type: object description: Details about device's firmware. required: - firmwareName - firmwareVersion - upgrade properties: firmwareName: type: string description: Identifier of the firmware. example: portal-beam firmwareVersion: type: string description: Version of the firmware. example: 2.8.1 upgrade: type: object description: Details about next firmware upgrade. properties: nextAvailableVersion: type: - string - 'null' description: Latest firmware version device can be upgraded to, if any. example: 2.10.1 scheduledVersion: type: - string - 'null' description: Firmware version that was scheduled for upgrade. example: 2.10.0 onDemand: type: boolean description: Whether firmware upgrade should be scheduled immediately. releaseChannel: type: string description: Name of the release channel that is used to find firmware upgrades example: regular scheduledBy: type: - object - 'null' description: User who scheduled firmware upgrade. required: - id - email - fullName properties: id: type: string format: uuid description: User id. email: type: string format: email description: User email. fullName: type: string description: Full user name. lastError: type: - object - 'null' description: Last recorded firmware upgrade error. properties: message: type: string description: Error message. timestamp: type: string format: date-time description: Error timestamp. example: 2023‐09‐18T15:33:00Z StitchingPairMinimal: type: object required: - otherDeviceUniqueId - pose properties: otherDeviceUniqueId: type: string description: Unique ID of the other device in the stitched pair. pose: $ref: '#/components/schemas/StitchingPose' SensorSettings: type: object description: Device sensor settings. properties: samplingInterval: type: integer description: Interval (in seconds) at which sensor data is sampled. example: 60 minimum: 1 maximum: 3600 loggingFactor: type: integer description: Factor used to determine how often sensor data is logged. example: 15 minimum: 1 maximum: 65535 SearchMeta: type: object title: Search Metadata description: Additional information, pagination and metadata about an API response externalDocs: description: Pagination model description url: /backend/management/pagination/ properties: filter: type: string description: Filter query used in the API call startIndex: type: integer description: Start index for the results array maxResult: type: integer description: Maximum numbers of results in a single response prevResults: type: string description: URL for the previous page of results format: URL count: type: - integer - 'null' description: Number of results. Not `null` only when the `queryType` is set to `COUNTED` or `SEARCH_META`. orderBy: type: string enum: - CREATED nextResults: type: string format: URL description: URL for the next page of results queryType: description: Query type. `COUNTED` - returns a number of results in the `count` field. `SEARCH_META` - returns only the `searchMeta` object, but with a number of results in the `count` field. type: string enum: - NORMAL - COUNTED - SEARCH_META default: NORMAL order: type: string description: Sorting order - `ASC`ending (default) or `DESC`ending enum: - ASC - DESC default: ASC CreatedDate: description: Informs when the object has been created. type: string format: date-time example: 2023‐09‐18T15:33:00Z parameters: QueryStartIndex: in: query name: startIndex required: false description: Starting row index for pagination. Start index should be equal to `pageNumber * maxResult`. schema: type: integer default: 0 minimum: 0 accept: name: Accept in: header required: true schema: type: string default: application/vnd.com.kontakt+json;version=10 description: Accept header is required. QueryType: in: query name: queryType required: false description: '`COUNTED` returns a number of all items (not just on the current page) in the `searchMeta` object. ' schema: type: string enum: - NORMAL - COUNTED - SEARCH_META default: NORMAL BulkDeviceAccessJobKeyPathParam: name: jobKey in: path required: true description: Name of the job schema: type: string example: grant-device-access_b4dfa2ed-4ac9-4b36-b662-be6be3925193 UniqueIdList: name: uniqueId in: query description: List of devices' unique ids required: true schema: type: array items: type: string example: - 11P10AvW - 11S13AhY QueryDeviceType: name: deviceType in: query description: Limits the response only to devices with a given type required: false schema: $ref: '#/components/schemas/DeviceType' QueryMaxResult: in: query name: maxResult required: false description: Maximum number of results schema: type: integer default: 50 minimum: 0 maximum: 500 QueryDeviceSelector: in: query name: selector required: false style: form description: "Limit returned response to the specified fields. Comma separated. Handy in reducing payload sizes.\n\n`uniqueId` and `queriedBy` fields will always be included in the response.\n
\n
\n**Applicable fields:**\n- accelerometer \n- access \n- alias \n- batteryLevel \n- bleScanSettings \n- category \n- currentLocation \n- deployedLat \n- deployedLng \n- deployment.status \n- deviceType \n- displaySettings \n- firmware \n- futureId \n- id \n- instanceId \n- interval \n- irReceiverSettings \n- irTransmitterSettings \n- lastErrorTimestamp \n- lastSeen \n- lat \n- lng \n- localAlertingSettings \n- lowBatterySettings \n- mac \n- major \n- managerId \n- metadata \n- minor \n- model \n- name \n- namespace \n- occupancySettings \n- orderId \n- ownerId \n- packets \n- pendingConfig \n- powerSaving \n- product \n- productCode \n- profiles \n- proximity \n- role \n- rssi0m \n- rssi1m \n- scheduledVersion \n- secureNamespace \n- secureProximity \n- sensorSettings \n- shares \n- shuffled \n- status \n- tags \n- telemetryFields \n- txPower \n- url\n- vendor" schema: type: string example: uniqueId,product,deployment.status QueryDeviceOrderBy: in: query name: orderBy required: false description: "Order results by selected field. In case the resulting order is non-unique, entries with duplicate values are sorted by device id.\n
\n
\n**Applicable fields:**\n- alias \n- batteryLevel \n- created \n- deployment.status \n- deviceType \n- id \n- instanceId \n- interval \n- lastErrorTimestamp \n- lastSeen \n- major \n- manager.lastName \n- minor \n- model \n- name \n- namespace \n- orderId \n- pendingConfig \n- product \n- profiles \n- proximity \n- role \n- scheduledVersion \n- txPower \n- uniqueId \n- updated \n- vendor" schema: type: string securitySchemes: bearer_token: type: http scheme: bearer bearerFormat: JWT description: 'Provide a JWT in the `Authorization: Bearer ` header. This is the standard authentication method for all API requests. Obtain a token via the OAuth2 Client Credentials flow from the Kontakt.io Keycloak identity provider.' api_key: type: apiKey name: Api-Key in: header description: '**Deprecated — do not use for new integrations.** This method exists solely for backward compatibility and will be removed in a future release. Use JWT Bearer token authentication instead. If you still need an API Key: sign in to **Kio Cloud** > select **Users** > select **Security** > copy your **Server API Key**.' management_api_key: name: Api-Key type: apiKey in: header description: Special management API Key with additional privileges used by authorized users. externalDocs: url: https://developer.kontakt.io