openapi: 3.0.0 info: title: Device Management 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/' externalDocs: url: 'https://developer.kontakt.io' 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: Account description: User account management - name: Command description: 'Commands are a special type of Configs used for initiating some management tasks, e.g. entering bootloader mode' - name: Config description: Pending configs represent new values for beacon settings that should be applied to actual devices via e.g. Kontakt.io Administration Apps. Creating a new config does not automatically change anything on a real beacon. - 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.' - name: Device tags description: The device tags - name: Device (3rd party) description: | NOTE: this set of endpoints has been superseded by External Devices functionality. These endpoints provide a way to integrate 3rd party Bluetooth-enabled scanning devices into Kontakt.io platform. As of Summer 2018, Kontakt.io is working with manufacturers of enterprise-level networking devices, like Cassia, Ruckus and Meraki, to seamlessly incorporate data collected by their routers and/or WiFi access points into Kontakt.io Data Streams, and to improve Infrastructure Management capabilities. Users wanting to take advantage of this feature, first need to provide proper authentication and integrate Kontakt.io Panel account with a 3rd party vendor. Only after that, devices from that vendor can be added into Kontakt.io platform. At any given moment a Company can have **only one** integration per 3rd party Vendor, i.e. you can have **one** Cassia *and* **one** Meraki integration, but you can't have e.g. two Meraki integrations. - name: Device (Portal Beam) description: | These endpoints are designed to assist with storing metadata associated with Portal Beams - name: External Device description: 'External Device feature is a method of adding arbitrary external devices to the system. Such devices have MAC, unique id, and other virtual attributes, but they cannot be managed (configured).' - name: Device Federation description: Device Federation feature is a method of addding devices to the account by synchronization with an account in different Device Management (source). - name: Eddystone description: Helper resources for working with Eddystone beacons - name: Firmware description: Firmware resources - name: Firmware Upgrade description: Firmware upgrade resources - name: GDPR description: General Data Protection Regulation compliance resources - name: Manager description: 'Managers represent user accounts that can manage Kontakt.io Devices. Everyone can freely create an account on [Kontakt.io Web Panel](https://panel.kontakt.io) and then use it to work with this API.' - name: Namespaces description: List of Eddystone UID Namespaces used on beacons belonging to a Manager - name: Order description: 'An Order represents all devices that have been purchased in Kontakt.io Web Store in a single transaction. Before these devices can be used with Kontakt.io platform, they need to be added to Kontakt.io Manager Account.' - name: Provisioning description: Device provisioning for connectivity setup - name: Proximities description: List of iBeacon Proximity UUIDs used on beacons belonging to a Manager - name: Venue description: | NOTE: this functionality is deprecated. Venues help with organising beacons into groups. They may represent physical locations, but not necessarily. Currently in the Kontakt.io Web Panel Venues are called *Locations*, but in order to provide backward compatibility, API still uses the original name. - name: Sharing description: Endpoints related to sharing devices with other users or moving devices between accounts - name: Internal description: Internal management endpoints with elevated access. - name: LoRaWAN description: Endpoints for provisioning LoRa gateways in ChirpStack (OTAA activation). paths: /command/encrypt: get: tags: - Command summary: Create Encrypted Commands description: Returns a list of Base64-encoded configs with encrypted commands for each of devices specified in a request parameters: - $ref: '#/components/parameters/UniqueIdList' - name: command in: query required: true description: | A Command that should be encrypted in configs for each of devices specified in a request * `RESET` - Reboots the device * `NONCONNECTABLE` - Connectable BLE packets will be non-connectable until a next reboot * `SLEEP` - Device enters a sleep mode (stops broadcasting all packets) * `BLINK_10S` - Primary LED blinks for 10 seconds or LED blinks with the primary colour for 10 seconds * `BLINK_30S` - Primary LED blinks for 30 seconds or LED blinks with the primary colour for 30 seconds * `BLINK2_10S` - Secondary LED blinks for 10 seconds or LED blinks with the secondary colour for 10 seconds * `BLINK2_30S` - Secondary LED blinks for 30 seconds or LED blinks with the secondary colour for 30 seconds Please keep in mind that not all devices can support all of these commands. Refer to device specification to learn more. schema: type: string enum: - RESET - NONCONNECTBLE - SLEEP - BLINK_10S - BLINK_30S - BLINK2_10S - BLINK2_30S - $ref: '#/components/parameters/accept' responses: '200': description: OK content: application/vnd.com.kontakt+json;version=10: schema: type: object properties: commands: type: array items: $ref: '#/components/schemas/EncryptedConfig' searchMeta: $ref: '#/components/schemas/SearchMeta' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ApiError' '422': description: Unprocessable Entity content: application/json: schema: $ref: '#/components/schemas/ApiError' security: - bearer_token: [] - api_key: [] /config: get: tags: - Config summary: Get Configs description: |- Returns all pending configurations for the specified Devices or device type. If no query parameters are provided, this endpoint returns all pending configurations that can be applied to Devices that the user has access to. parameters: - name: uniqueId in: query description: List of Unique IDs of Devices which pending configurations should be returned required: false schema: type: array items: type: string - name: deviceType in: query description: Device type. Only pending configurations for devices of this type will be returned required: false schema: type: string enum: - BEACON - GATEWAY default: BEACON - $ref: '#/components/parameters/QueryMaxResult' - $ref: '#/components/parameters/QueryType' - $ref: '#/components/parameters/accept' - $ref: '#/components/parameters/QueryStartIndex' responses: '200': description: OK content: application/vnd.com.kontakt+json;version=10: schema: type: object properties: configs: type: array items: oneOf: - $ref: '#/components/schemas/PendingBeaconConfig' - $ref: '#/components/schemas/PendingGatewayConfig' searchMeta: $ref: '#/components/schemas/SearchMeta' security: - bearer_token: [] - api_key: [] /config/create: post: tags: - Config summary: Create a Config description: |- Create or update a *pending configuration* for one or more devices. Please be aware that doing this alone *will not make any changes on actual, physical beacons*, unless these beacons are in range of a Kontakt.io gateway (Portal Light). Otherwise, this config has to be encrypted, downloaded, and then applied to a device via a Bluetooth connection. Applying the config over a Bluetooth connection is usually done from the Kio Setup Manager app or a 3rd-party custom app that implements one of Kontakt.io mobile SDKs. **Not all device models accept all configuration parameters available.** Please check first if device is capable of accepting given configuration parameter. Except for `uniqueId` and `deviceType` which are mandatory you only need to provide configuration parameters you wish to change. requestBody: content: application/x-www-form-urlencoded: schema: oneOf: - $ref: '#/components/schemas/NewBeaconConfig' - $ref: '#/components/schemas/NewGatewayConfig' required: - uniqueId - deviceType responses: '201': description: |- Created. The request was processed by the server. This does not mean the device has received or applied the config yet — devices pull pending configs asynchronously. The response body is an array of pending-config records and shows exactly what was created. How to read it: - If the response array does not contain a requested `uniqueId`, the config was not created for that device. The device was unknown to the server, or your API key does not have access to it. - For `deviceType=BEACON`, keys in `customConfiguration` that the device model does not accept are silently dropped. - For `deviceType=GATEWAY`, unknown `applications.system.*` keys cause the request to be rejected with HTTP 422 (no `201` is returned in that case). To check what is pending on the server side later, call `GET /config?uniqueId=...`. content: application/vnd.com.kontakt+json;version=10: schema: type: array items: oneOf: - $ref: '#/components/schemas/PendingBeaconConfig' - $ref: '#/components/schemas/PendingGatewayConfig' examples: full-success: summary: Full success — every uniqueId and field persisted value: - uniqueId: AAAA model: SMART_BADGE_3_MINI created: '2026-05-04T12:00:00.000Z' updated: '2026-05-04T12:00:00.000Z' txPower: 6 no-devices-resolved: summary: 201 with empty array — no submitted uniqueId was visible to the caller value: [] custom-pid-stripped: summary: 201 with a customConfiguration PID silently dropped (unsupported by device) value: - uniqueId: AAAA model: SMART_BADGE_3_MINI created: '2026-05-04T12:00:00.000Z' updated: '2026-05-04T12:00:00.000Z' customConfiguration: {} '401': description: Unauthorized — the request did not present valid authentication. '403': description: Forbidden — the caller authenticated but lacks the `CONFIG_CREATE` permission. Note that missing per-device access does not produce 403; it produces a 201 with the affected `uniqueId`s filtered out of the response array (see the 201 response description). content: application/json: schema: $ref: '#/components/schemas/ApiError' '409': description: 'Conflict — a config-level rule was violated. Examples include a concurrent create for the same `uniqueId` (duplicate key), the resulting configuration exceeding the device''s storage budget, or violating power-saving / lock constraints.' content: application/json: schema: $ref: '#/components/schemas/ApiError' '422': description: 'Unprocessable Entity — a hard validation error. Examples include invalid types or ranges, malformed `customConfiguration` PIDs (non-hex value, dotted name, value longer than 32 characters), interval below the chip''s minimum, invalid enum values, or `deviceType` mismatch.' content: application/json: schema: $ref: '#/components/schemas/ApiError' parameters: - $ref: '#/components/parameters/accept' security: - bearer_token: [] - api_key: [] /config/encrypt: get: tags: - Config summary: Encrypt a Config description: |- Returns a list of Base64-encoded configs with encrypted pending configurations for each Device or Device types specified in a request. This payload can be sent directly via Bluetooth to a device to change its settings. If no query parameters are provided, this endpoint returns encrypted versions of all pending configurations. parameters: - name: uniqueId in: query description: List of Unique IDs with existing pending configurations required: false schema: type: array items: type: string - name: clientType in: query required: false schema: type: string enum: - MANAGER - GATEWAY default: MANAGER - $ref: '#/components/parameters/accept' responses: '200': description: OK content: application/vnd.com.kontakt+json;version=10: schema: type: object properties: configs: type: array items: $ref: '#/components/schemas/EncryptedConfig' searchMeta: $ref: '#/components/schemas/SearchMeta' security: - bearer_token: [] - api_key: [] /config/delete: post: tags: - Config summary: Delete a Config description: Deletes pending configurations as specified by devices' unique IDs. parameters: - $ref: '#/components/parameters/UniqueIdList' - $ref: '#/components/parameters/accept' responses: '200': description: OK content: application/vnd.com.kontakt+json; version=10: schema: type: object properties: message: type: string description: Success message example: Delete 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' security: - bearer_token: [] - api_key: [] /config/export: post: tags: - Config summary: Export Configs description: | #### Note: this endpoint requires a user to have permission to call POST /config/create endpoint. Writes pending configurations merged with the current state of devices into a CSV file. The link to this file will be returned in the response. Merging algorithm works as follows - for any given device's parameter: * if it's a virtual parameter OR a physical one but no pending config exists which aims to change its value - the current value of this parameter is used. * if it's a physical parameter with a pending config changing its value - the value from that pending config is used. List of parameters contained in the resulting CSV file: | Parameter | Comment | |-----------|---------| |uniqueId| | |mac| | |alias| | |tags| | |currentLocation.campusId| | |currentLocation.campusName| | |currentLocation.buildingId| | |currentLocation.buildingName| | |currentLocation.floorId| | |currentLocation.floorName| | |currentLocation.roomId| | |currentLocation.roomName| | |packets| | |profiles| | |proximity| | |major| | |minor| | |namespace| | |instanceId| | |lightSensorSamplingInterval| | |url| | |txPower| | |shuffled| | |interval| | |name| | |rssi0m| | |rssi1m| | |powerSaving.mode| See the `powerSaving.mode` field in the `Get Devices` endpoint response for possible values and descriptions. `OFF` = empty list in API response (default configuration); empty = not applicable to the device. | |powerSaving.moveSuspendTimeout| | |powerSaving.lightSensorHysteresis| | |powerSaving.lightSensorThreshold| | |powerSaving.rtc.MON| | |powerSaving.rtc.TUE| | |powerSaving.rtc.WED| | |powerSaving.rtc.THU| | |powerSaving.rtc.FRI| | |powerSaving.rtc.SAT| | |powerSaving.rtc.SUN| | |eidRotationPeriodExponent| | |wifiSsid| | |wifiUserName| | |wifiProtocol| | |wifiPassword| | |ibeaconUUID| | |rssi_threshold| | |filtration_mask| | |fallbackSsid| | |fallbackPass| | |fallbackServer| | |apiHost| | |dataHost| | |otaUrl| | |proxyURL| | |proxyPort| | |eapType| | |bleScanChannel| | |accelerometer.features| | |accelerometer.sensitivity| | |accelerometer.preset| | |accelerometer.move.threshold| | |accelerometer.move.duration| | |accelerometer.doubleTap.threshold| | |accelerometer.doubleTap.timeLimit| | |accelerometer.doubleTap.timeLatency| | |accelerometer.doubleTap.timeWindow| | |accelerometer.move.detectionFlags| | |accelerometer.move.detectionFlagsJunction| | |accelerometer.doubleTap.detectionFlags| | |accelerometer.highPass.mode| | |accelerometer.highPass.cutoffFrequency| | |accelerometer.highPass.moveDetection| | |accelerometer.highPass.doubleTapDetection| | |accelerometer.highPass.accelerometerData| | |accelerometer.highPass.reference| | |batteryLevel| | |lastSeen| | |deployment.status| | |secureProximity| | |vendor| | |firmware| | |product| | |productCode| | |secureNamespace| | |orderId| | |category| | |roomNumber| | |temperatureOffset| | |telemetryInterval| | |telemetryFields| See the `telemetryFields` field in the `Get Devices` endpoint response for possible values and descriptions. `OFF` = empty list in API response (default configuration); empty = not applicable to the device. | |eidIdentityKey| | |kontaktFrameInterval| | |locationFrameChannel| | |locationFrameInterval| | |buttonFeatures| See the `buttonFeatures` field in the `Get Devices` endpoint response for possible values and descriptions. `OFF` = empty list in API response (default configuration); empty = not applicable to the device. | |multiClickCount| Number of clicks required for multi-click detection (1–10). | |panicDuration| | |bleScan.duration| | |bleScan.models| | |bleScan.force| | |bleScan.interval| | |bleScan.size| Maximum number of scanned items reported per scan (0–255). Requires nrf52 firmware >= 2.5.88. | |occupancy.sleepInterval| | |occupancy.minInterval| | |occupancy.footfallLine| | |occupancy.calibration| | |occupancy.model| | |irBlinkInterval| | |irReceiver.wakeUpInterval| | |irReceiver.maxListenInterval| | |irReceiver.disableOnNoMotion| | |irTransmitter.intensity| | |irTransmitter.dutyCycle| | |irTransmitter.protoV2| | |irDetectionParams| | parameters: - $ref: '#/components/parameters/UniqueIdList' - name: deviceType in: query description: 'Device type filter. If specified, only exports the devices with the type(s) specified. If not, all devices will be exported.' schema: type: array items: type: string example: - BEACON - GATEWAY - $ref: '#/components/parameters/accept' responses: '200': description: OK content: application/vnd.com.kontakt+json; version=10: schema: type: object description: 'Contains the link to exported file, plus the list of uniqueIds in it.' properties: url: type: string description: URL to download the exported file from. example: 'https://dm-api.cloud.us.kontakt.io/config/bdf5b73a-df5a-466d-89ba-f0c4b6a2148c/csv' uniqueIds: description: | Specifies the devices included in the exported file. It could differ from the requested list due to insufficient permissions. type: array items: $ref: '#/components/schemas/UniqueId' '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' security: - bearer_token: [] - api_key: [] /config/import: post: tags: - Config summary: Import Configs description: | #### Note: this endpoint requires a user to have permission to call POST /config/create endpoint. Imports a CSV file with configuration parameters, virtual or physical, and applies them to the devices as pointed in that file. Virtual parameters are modified instantly upon successful response, whereas for physical parameters a pending configuration is created. This endpoint can take in a file generated by the POST /config/export without any modifications or modified as needed, but also any valid CSV file. #### Note: All rows will be processed even if one of them contains errors - this is to aid in fixing errors in CSV files and resubmitting it.However **if one of the rows contains errors, the proper rows won't take effect**. #### The proper course of action when an error is returned for one or more of the rows is fixing errors in the file and submitting it again. ## File format Below is a comma-separated text file rendered as a table: | uniqueId | parameter 1 | ... | parameter N | |------------|-------------|-----|-------------| | 11P10AvW | 1 | ... | abctexttext | | 11S13AhY | 42 | ... | textvalue | | .......... | ... | ... | ... | | uniqueId N | | ... | abd | In other words, each row is a *uniqueId* of a device followed by configuration properties we want to change in it. Lack of value in a cell means no change to that value, with some exceptions: * alias: lack of value resets it to an empty string * tags: lack of value resets it to an empty list | Supported parameters | |----------------------| |deployment.status| |alias| |tags| |url| |namespace| |instanceId| |name| |password| |proximity| |major| |minor| |txPower| |interval| |shuffled| |lightSensorSamplingInterval| |eidRotationPeriodExponent| |profiles| |packets| |rssi0m| |rssi1m| |powerSaving.mode| |powerSaving.moveSuspendTimeout| |powerSaving.lightSensorHysteresis| |powerSaving.lightSensorThreshold| |powerSaving.rtc.MON| |powerSaving.rtc.TUE| |powerSaving.rtc.WED| |powerSaving.rtc.THU| |powerSaving.rtc.FRI| |powerSaving.rtc.SAT| |powerSaving.rtc.SUN| |accelerometer.features| |accelerometer.sensitivity| |accelerometer.preset| |accelerometer.move.threshold| |accelerometer.move.duration| |accelerometer.move.detectionFlags| |accelerometer.move.detectionFlagsJunction| |accelerometer.doubleTap.threshold| |accelerometer.doubleTap.timeLimit| |accelerometer.doubleTap.timeLatency| |accelerometer.doubleTap.timeWindow| |accelerometer.doubleTap.detectionFlags| |accelerometer.highPass.mode| |accelerometer.highPass.cutoffFrequency| |accelerometer.highPass.moveDetection| |accelerometer.highPass.doubleTapDetection| |accelerometer.highPass.accelerometerData| |accelerometer.highPass.reference| |occupancy.sleepInterval| |occupancy.minInterval| |occupancy.model| |occupancy.footfallLine| |occupancy.calibration| |irReceiver.wakeUpInterval| |irReceiver.maxListenInterval| |irReceiver.disableOnNoMotio| |irTransmitter.intensity| |irTransmitter.dutyCycle| |irTransmitter.protoV2| |irDetectionParams| |irBlinkInterval| |roomNumber| |temperatureOffset| |telemetryInterval| |telemetryFields| |eidIdentityKey| |kontaktFrameInterval| |locationFrameChannel| |locationFrameInterval| |buttonFeatures| |multiClickCount| |panicDuration| |bleScan.duration| |bleScan.models| |bleScan.force| |bleScan.interval| |bleScan.size| |wifiSsid| |wifiUserName| |wifiProtocol| |wifiPassword| |ibeaconUUID| |rssi_threshold| |filtration_mask| |apiHost| |dataHost| |otaUrl| |proxyURL| |proxyPort| |eapType| |bleScanChannel| | Ignored parameters (due to them being read-only) | |----------------------| |mac| |orderId| |batteryLevel| |lastSeen| |category| |firmware| |product| |productCode| |secureProximity| |vendor| |secureNamespace| |fallbackSsid| |fallbackPass| |fallbackServer| parameters: - $ref: '#/components/parameters/accept' requestBody: content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: 'a CSV file, structure as described in this endpoint''s documentation.' responses: '200': description: OK content: application/vnd.com.kontakt+json; version=10: schema: type: array description: Response with statuses per uniqueId items: type: object properties: message: type: string description: 'Empty if imported successfully, contains an error message otherwise' example: IBeacon UUID field is not a proper UUID status: type: string description: | ERROR means this row contained an error and needs to be fixed. ROLLED_BACK means this row is okay, but other rows contained errors so the changes won't take effect. enum: - SUCCESS - ERROR - ROLLED_BACK uniqueId: $ref: '#/components/schemas/UniqueId' '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' security: - bearer_token: [] - api_key: [] /config/readall: get: tags: - Config summary: Read raw device configuration description: Reads device configuration and returns its state in a raw form (secure response). It can be used as an input for the `POST /device/sync` endpoint to synchronize device state with the cloud. parameters: - $ref: '#/components/parameters/UniqueIdList' responses: '200': description: Device configuration returned content: application/vnd.com.kontakt+json;version=10: schema: type: object properties: configs: type: array items: $ref: '#/components/schemas/EncryptedConfig' searchMeta: $ref: '#/components/schemas/SearchMeta' '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' security: - bearer_token: [] - api_key: [] '/config/{fileName}/csv': get: tags: - Config summary: Download CSV file with exported devices description: Downloads CSV file with exported devices that has been generated by the `POST /config/export` endpoint parameters: - name: fileName in: path description: Identifier of a file to be downloaded. The value is generated dynamically and available in the response of the `POST /config/export` endpoint example: a0f49b9e-b2e7-4a5f-a94a-047014eb3958 schema: type: string required: true responses: '200': description: CSV file with devices configuration content: text/csv: schema: type: object '401': description: Unauthorized '404': description: CSV file with provided name doesn't exist security: - bearer_token: [] - api_key: [] /device: 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 parameters: [] /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: [] /device/vendor/meraki/create: post: tags: - Device (3rd party) summary: Add a Meraki Integration description: | This endpoint allows to associate your Meraki controller with Kontakt.io platform, enabling to use Meraki devices as external data sources for Data Streams requestBody: content: application/x-www-form-urlencoded: schema: properties: apiKey: type: string description: API Key used for authentication on Meraki's cloud secret: type: string description: Secret used for authentication on Meraki's backend validator: type: string description: Verification token ensuring Meraki's cloud that the endpoint is correct required: - apiKey - secret - validator responses: '200': description: OK content: application/vnd.com.kontakt+json; version=10: schema: type: object properties: apiKey: type: string description: API Key used for authentication on Meraki's cloud example: skhefgjhdfgv347fsfdv secret: type: string description: Secret used for authentication on Meraki's backend example: SuperSecretString validator: type: string description: Verification token ensuring Meraki's cloud that the endpoint is correct example: lekur8934hiu2ghebv0tbshef '204': description: No Content '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' security: - bearer_token: [] - api_key: [] parameters: - $ref: '#/components/parameters/accept' /device/vendor/meraki/update: post: tags: - Device (3rd party) summary: Update a Meraki Integration description: | This endpoint allows to update an already existing integration with a Meraki platform requestBody: content: application/x-www-form-urlencoded: schema: properties: apiKey: type: string description: API Key used for authentication on Meraki's cloud secret: type: string description: Secret used for authentication on Meraki's backend validator: type: string description: Verification token ensuring Meraki's cloud that the endpoint is correct required: - apiKey - secret - validator 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' security: - bearer_token: [] - api_key: [] parameters: - $ref: '#/components/parameters/accept' /device/vendor/meraki/delete: post: tags: - Device (3rd party) summary: Delete a Meraki Integration description: | This endpoint allows to remove a Meraki integration responses: '200': description: OK content: application/vnd.com.kontakt+json; version=10: schema: type: object properties: message: type: string description: Delete message example: Delete 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' security: - bearer_token: [] - api_key: [] parameters: - $ref: '#/components/parameters/accept' /device/delete: post: tags: - External Device summary: Delete an external device description: This endpoint allows you to delete an external device. This operation is irreversible. requestBody: content: application/x-www-form-urlencoded: schema: properties: uniqueId: description: List of external device Unique IDs to delete. type: array items: $ref: '#/components/schemas/UniqueId' 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: Delete successful required: - message '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ApiError' '404': description: Not Found 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/external: post: tags: - External Device summary: Create a single external device description: | External device represents device that exists outside the Kio Cloud platform. It can be imported to the Kio Cloud platform so the platform is aware of that device. This process is synchronous, meaning the device is ready to use as soon as the API response from this endpoint is received. requestBody: content: application/json: schema: $ref: '#/components/schemas/NewExternalDevice' required: true responses: '200': description: New external device created successfully content: application/json: schema: $ref: '#/components/schemas/Device' '422': description: 'Unable to process the request, e.g. invalid request body' content: application/json: schema: $ref: '#/components/schemas/ApiError' /device/external/import: post: tags: - External Device summary: Import external devices description: | External device represents device that exists outside the Kio Cloud platform. It can be imported to the Kio Cloud platform so the platform is aware of that device. This process is A-synchronous, so you should poll for status via `GET /device/external/import/{jobKey}` with `jobKey` taken from response. To import devices the CSV file needs to be provided with the following columns. | Value name | Description | CSV header | Required | Example | |---------------|----------------|----------------|--------------|--------------| | Unique Id | Free text value used to identify the device. If not provided, it is generated automatically. | uniqueId | No | A12dBB | | MAC address | MAC address that uniquely identifies the device. Needs to be provided in format XX:XX:XX:XX:XX:XX. MAC address is always converted to uppercase for consistency. | mac | Yes | 08:00:04:02:00:00 | | Product name | Name of the product in a human-readable way | product | Yes | External device | | Product code | Code of the product that identifies its type | productCode | No | external_device | | Tags | List of labels that can be used to group devices | tags | No | external,bulb,white | | Notes | User defined description | alias | No | White bulb | | Deployment status | Status of a device representing its point in the lifecycle. Allowed values are TO_BE_DEPLOYED, DEPLOYED, END_OF_LIFE | deployment.status | Yes | TO_BE_DEPLOYED | | Device category | Category that the device belongs to. Allowed values are TAG, INFRASTRUCTURE | category | Yes | TAG | requestBody: content: application/octet-stream: schema: type: string description: CSV file with a list of devices to be imported. format: binary responses: '200': description: Import completed with success content: application/json: schema: $ref: '#/components/schemas/ExternalDeviceImportResponse' get: tags: - External Device summary: Get status of the import process description: Returns status of external devices import process started by the `POST /device/external/import` call responses: '200': description: Import completed with success content: application/json: schema: $ref: '#/components/schemas/ExternalDeviceImportResponse' '/device/external/import/{jobKey}': delete: tags: - External Device summary: Resets status of external devices import process started by the `POST /device/external/import` call parameters: - name: jobKey in: path description: The job id to be reset required: true schema: type: string responses: '200': description: Import process canceled content: application/json: schema: $ref: '#/components/schemas/ExternalDeviceImportJobResetResponse' /tags: get: tags: - Device tags summary: Get device tags description: Returns list of tags of all devices the user has access to responses: '200': description: OK content: application/vnd.com.kontakt+json; version=10: schema: properties: tags: type: array description: List of tags example: - beacon - hospital - important items: type: string description: Tag value /portalbeam/image: post: tags: - Device (Portal Beam) summary: Store or erase Portal Beam calibration image description: |- If an empty string is sent, the calibration image associated with this Portal Beam is erased. The value sent to API is validated according to schema below before it's accepted. requestBody: content: application/x-www-form-urlencoded: schema: properties: uniqueId: type: string description: Unique ID of the Portal Beam. image: allOf: - $ref: '#/components/schemas/OccupancyImage' required: - uniqueId - image responses: '204': description: No Content '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' security: - bearer_token: [] - api_key: [] get: tags: - Device (Portal Beam) summary: List images for one or more Portal Beams description: Fetches all image data associated with a list of Portal Beams. parameters: - name: uniqueId in: query description: List of Unique IDs of Portal Beams. required: true schema: type: array items: type: string responses: '200': description: OK content: application/vnd.com.kontakt+json; version=10: schema: type: array description: Images per uniqueId items: type: object properties: uniqueId: type: string image: allOf: - $ref: '#/components/schemas/OccupancyImage' '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' security: - bearer_token: [] - api_key: [] /portalbeam/stitching: post: tags: - Device (Portal Beam) summary: Create or update stitching between two devices description: |- Creates or updates a stitching definition between two devices. The relationship is treated as undirected (order does not matter). requestBody: required: true content: application/vnd.com.kontakt+json; version=10: schema: $ref: '#/components/schemas/StitchingPair' responses: '204': description: Stitching accepted (created or updated) '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' security: - bearer_token: [] - api_key: [] get: tags: - Device (Portal Beam) summary: Get stitching by uniqueIds parameters: - name: uniqueIds in: query required: true schema: type: array items: type: string responses: '200': description: Stitching config content: application/vnd.com.kontakt+json; version=10: schema: type: array items: $ref: '#/components/schemas/StitchingConfig' '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' security: - bearer_token: [] - api_key: [] delete: tags: - Device (Portal Beam) summary: Delete stitching between two selected beams description: |- Deletes stitching between two devices identified by their uniqueIds. The pair is treated as undirected: (A,B) is the same as (B,A). parameters: - name: firstUniqueId in: query required: true schema: type: string description: Unique ID of one device in the stitched pair. - name: secondUniqueId in: query required: true schema: type: string description: Unique ID of the other device in the stitched pair. responses: '204': description: Stitching pair deleted (or did not exist) '400': description: 'Invalid request (e.g., identical IDs)' security: - bearer_token: [] - api_key: [] /eddystone: post: tags: - Eddystone summary: Decrypt Eddystone Encrypted Telemetry packet description: | Decrypts Eddystone Telemetry data from an Eddystone Encrypted Telemetry frame. This information can be extracted by specifying one of the two sets of information in the request's parameters: * Beacon's Unique ID (`uniqueId`) and its Eddystone Encrypted Telemetry frame (`frame`) * Eddystone Ephemeral ID (`eid`) and corresponding Eddystone Encrypted Telemetry frame (`frame`) requestBody: content: application/x-www-form-urlencoded: schema: properties: uniqueId: description: Unique ID. Should be used only if `eid` is not specified. type: string eid: description: Eddystone Ephemeral ID. Should be used only if `uniqueId` is not specified. type: string frame: description: Base64-encoded Eddystone Encrypted Telemetry frame payload type: string format: byte required: - frame responses: '200': description: OK content: application/vnd.com.kontakt+json;version=10: schema: $ref: '#/components/schemas/EddystoneDecrypted' security: - bearer_token: [] - api_key: [] parameters: - $ref: '#/components/parameters/accept' /firmware: get: tags: - Firmware summary: Get Firmwares description: Returns firmware for specified devices. parameters: - name: uniqueId in: query description: List of Unique IDs of device for which Firmwares should be returned. required: true schema: type: array items: type: string - name: type in: query description: 'Filtering parameter that allows to return only scheduled or not scheduled Firmwares. If not specified, both types will be returned.' required: false schema: type: string enum: - ALL - SCHEDULED - NONSCHEDULED default: ALL - $ref: '#/components/parameters/accept' responses: '200': description: OK content: application/vnd.com.kontakt+json;version=10: schema: type: object properties: firmwares: description: List of Firmwares type: array items: $ref: '#/components/schemas/Firmware' searchMeta: $ref: '#/components/schemas/SearchMeta' security: - bearer_token: [] - api_key: [] '/firmware/{firmwareVersion}': get: tags: - Firmware summary: Get a Firmware description: Returns a single Firmware version. parameters: - name: firmwareVersion in: path description: Firmware version required: true schema: type: string - name: deviceType in: query description: Device type required: true schema: type: string enum: - BEACON - GATEWAY - $ref: '#/components/parameters/accept' responses: '200': description: OK content: application/vnd.com.kontakt+json;version=10: schema: $ref: '#/components/schemas/FirmwareCore' security: - bearer_token: [] - api_key: [] deprecated: true '/firmware/{firmwareVersion}/file': get: tags: - Firmware summary: Get a Firmware file description: Redirects to a specific Firmware file parameters: - name: firmwareVersion in: path description: Firmware version required: true schema: type: string - name: deviceType in: query description: Device type required: true schema: type: string enum: - BEACON - GATEWAY - $ref: '#/components/parameters/accept' responses: '303': description: See Other security: - bearer_token: [] - api_key: [] deprecated: true /manager: get: tags: - Manager summary: Get all Managers description: Returns a list Managers. It includes the Manager that has made this API request and all Subordinate Managers for that Manager. responses: '200': description: OK content: application/vnd.com.kontakt+json;version=10: schema: type: object properties: managers: type: array items: allOf: - type: object x-sl-internally-excluded: true x-sl-error-message: You do not have permission to view this reference - type: object properties: company: $ref: '#/components/schemas/Company' searchMeta: $ref: '#/components/schemas/SearchMeta' '401': description: Unauthorized security: - bearer_token: [] - api_key: [] parameters: - $ref: '#/components/parameters/accept' /namespaces: get: tags: - Eddystone summary: Get Namespaces description: Returns a list of Eddystone UID Namespaces broadcasted by beacons assigned to the current Manager and their Subordinate Managers. parameters: - name: namespace in: query description: List of Eddystone UID Namespaces (non-Secure). Response will contain only Namespaces from this list. required: false schema: type: array items: type: string - $ref: '#/components/parameters/accept' responses: '200': description: OK content: application/vnd.com.kontakt+json;version=10: schema: type: object properties: namespaces: type: array items: type: object properties: namespace: type: string description: Eddystone UID Namespace set by a Manager of a beacon. secureNamespace: type: string description: Secure Eddystone UID Namespace advertised by a beacon. Same as `proximity` if a beacon is not shuffled. shuffled: type: boolean description: Flag indicating whether `secureNamespace` is a shuffled Eddystone UID Namespace. shared: type: boolean description: Flag indicating whether `namespace` comes from a shared beacon. searchMeta: $ref: '#/components/schemas/SearchMeta' security: - bearer_token: [] - api_key: [] /order: get: tags: - Order summary: Check Order IDs description: Returns a list of all **unassigned** devices (specifically their Unique IDs) for the Order IDs provided in the request parameter. parameters: - name: orderId in: query description: List of Order IDs to be checked required: true schema: type: array items: type: string description: Order ID - $ref: '#/components/parameters/accept' responses: '200': description: OK content: application/vnd.com.kontakt+json;version=10: schema: type: array description: List of Unique IDs of devices that are associated with provided Order IDs items: type: string description: Unique ID security: - bearer_token: [] - api_key: [] /order/claim: post: tags: - Order summary: Claim an order description: |- Assigns one or more order's devices to this account. An order has to exist in DCC and NOT be claimed elsewhere for this to work. Devices from the order that already exist in API will be skipped. Devices that didn't exist in API prior to claiming will be created from scratch. This operation is idempotent: claiming an order on the same account more than once has no effect. parameters: - name: orderId in: query description: List of Order IDs that should be claimed on this account required: true schema: type: array items: type: string description: Order ID - $ref: '#/components/parameters/accept' responses: '200': description: OK content: application/vnd.com.kontakt+json;version=10: schema: $ref: '#/components/schemas/OrderManagementResponse' security: - bearer_token: [] - api_key: [] get: tags: - Order summary: Get order status description: | After claiming/releasing the order in DCC, all subsequent device fetch/cleanup jobs in API are performed asynchronously. This endpoint allows to track the progress of those operations. parameters: - name: orderId in: query description: List of Order IDs for which the order job progress will be displayed. required: true schema: type: array items: type: string description: Order ID - $ref: '#/components/parameters/accept' responses: '200': description: OK content: application/vnd.com.kontakt+json;version=10: schema: type: object properties: orders: type: object description: Per-order job progress properties: each orderId from request: type: object description: Job progress for this order ID properties: runningJobs: type: array items: type: string description: 'Currently running jobs. ImportOrderFromDccJob imports and persists devices from DCC after order claiming, DeleteOrderDevicesJob deletes order devices after releasing.' lastImportJob: type: object description: Detailed information about each step that was performed on the last import job to date. lastDeleteJob: type: object description: Detailed information about each step that was performed on the last delete job to date. security: - bearer_token: [] - api_key: [] /proximities: get: tags: - Proximities summary: Get Proximity UUIDs description: Returns a list of iBeacon Proximity UUIDs broadcasted by beacons assigned to the current Manager and their Subordinate Managers. parameters: - name: proximity in: query description: List of iBeacon Proximity UUIDs (non-Secure). Response will contain only Proximity UUIDs from this list. required: false schema: type: array items: type: string format: uuid - $ref: '#/components/parameters/accept' responses: '200': description: OK content: application/vnd.com.kontakt+json;version=10: schema: type: object properties: proximities: type: array items: type: object properties: proximity: type: string format: uuid description: iBeacon Proximity UUID set by a Manager of a beacon. secureProximity: type: string format: uuid description: Secure iBeacon Proximity UUID advertised by a beacon. Same as `proximity` if a beacon is not shuffled. shuffled: type: boolean description: Flag indicating whether `secureProximity` is a shuffled iBeacon Proximity UUID. shared: type: boolean description: Flag indicating whether `proximity` comes from a shared beacon. searchMeta: $ref: '#/components/schemas/SearchMeta' security: - bearer_token: [] - api_key: [] components: parameters: JobKeyPathParam: name: jobKey in: path required: true schema: type: string example: schedule-firmware-upgrade_b4dfa2ed-4ac9-4b36-b662-be6be3925193_c3568e92-ad5d-4301-8420-08eefb77a1ce BulkDeviceAccessJobKeyPathParam: name: jobKey in: path required: true description: Name of the job schema: type: string example: grant-device-access_b4dfa2ed-4ac9-4b36-b662-be6be3925193 QueryDeviceType: name: deviceType in: query description: Limits the response only to devices with a given type required: false schema: $ref: '#/components/schemas/DeviceType' QueryCurrentLocationCampusIdFilter: name: currentLocation.campusId in: query description: Filter by Campus IDs. Only devices from the specified campuses will be counted. required: false schema: type: array items: type: number description: Individual campus ID QueryCurrentLocationBuildingIdFilter: name: currentLocation.buildingId in: query description: Filter by Building IDs. Only devices from the specified buildings will be counted. required: false schema: type: array items: type: number description: Individual building ID QueryCurrentLocationFloorIdFilter: name: currentLocation.floorId in: query description: Filter by Floor IDs. Only devices from the specified floors will be counted. required: false schema: type: array items: type: number description: Individual floor ID Query: in: query name: q required: false description: Filtering query schema: type: string 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 QueryMaxResult: in: query name: maxResult required: false description: Maximum number of results schema: type: integer default: 50 minimum: 0 maximum: 500 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 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.

**Applicable fields:** - alias - batteryLevel - created - deployment.status - deviceType - id - instanceId - interval - lastErrorTimestamp - lastSeen - major - manager.lastName - minor - model - name - namespace - orderId - pendingConfig - product - profiles - proximity - role - scheduledVersion - txPower - uniqueId - updated - vendor schema: type: string QueryDeviceSelector: in: query name: selector required: false style: form description: |- Limit returned response to the specified fields. Comma separated. Handy in reducing payload sizes. `uniqueId` and `queriedBy` fields will always be included in the response.

**Applicable fields:** - accelerometer - access - alias - batteryLevel - bleScanSettings - category - currentLocation - deployedLat - deployedLng - deployment.status - deviceType - displaySettings - firmware - futureId - id - instanceId - interval - irReceiverSettings - irTransmitterSettings - lastErrorTimestamp - lastSeen - lat - lng - localAlertingSettings - lowBatterySettings - mac - major - managerId - metadata - minor - model - name - namespace - occupancySettings - orderId - ownerId - packets - pendingConfig - powerSaving - product - productCode - profiles - proximity - role - rssi0m - rssi1m - scheduledVersion - secureNamespace - secureProximity - sensorSettings - shares - shuffled - status - tags - telemetryFields - txPower - url - vendor schema: type: string example: 'uniqueId,product,deployment.status' DeviceTypeList: name: deviceType in: query description: 'Device types, listed in the same order as the uniqueIds they correspond to.' schema: type: array items: type: string example: - BEACON - GATEWAY UniqueIdList: name: uniqueId in: query description: List of devices' unique ids required: true schema: type: array items: type: string example: - 11P10AvW - 11S13AhY UniqueId: name: uniqueId in: query description: Device's unique ID example: 11P10AvW required: true schema: type: string UniqueIdPath: name: uniqueId in: path description: 'Device''s unique ID, provided in path (URL)' example: 11P10AvW required: true schema: type: string accept: name: Accept in: header required: true schema: type: string default: application/vnd.com.kontakt+json;version=10 description: Accept header is required. FederationIdPath: name: federationId in: path description: 'Device federation''s unique identifier, provided in path (URL)' required: true schema: type: string format: uuid example: a0f49b9e-b2e7-4a5f-a94a-047014eb3958 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. schemas: LoraProvisionRequest: title: LoRa Provision Request type: object properties: devEui: type: string description: 'Device EUI (EUI64 hex string, 16 characters). IMPORTANT! We assume that the EUI64 can be mapped to the device MAC address in the following way. For base station the FFFE is placed after first 6 characters in the MAC address. For gateway the FFFF is placed after first 6 characters in the MAC address.' example: AABBCCFFFF001122 appEui: type: string description: AppEUI for OTAA activation (EUI64 hex string). Renamed to JoinEUI in LoRaWAN 1.1. example: '0000000000000001' appKey: type: string description: Application key (128-bit hex string). Maps to LoRaWAN 1.0.x nwk_key. example: 00112233445566778899AABBCCDDEEFF required: - devEui - appEui - appKey LoraProvisionStatusResponse: title: LoRa Provision Status Response type: object properties: devEui: type: string description: Device EUI example: AABBCCDDEE001122 defaultPassword: type: string description: Factory default password for initial connection example: changeme newPassword: type: string description: Device's current password from DM catalog example: abcd status: type: string description: Provisioning status enum: - PROVISIONED - NOT_PROVISIONED UniqueId: description: Unique identifier of a device. type: string example: 11P10AvW CreatedDate: description: Informs when the object has been created. type: string format: date-time example: '2023‐09‐18T15:33:00Z' UpdatedDate: description: Informs when the object has been updated. type: string format: date-time example: '2023‐09‐18T15:33:00Z' MacAddress: description: Mac address of a device. type: string example: '00:FA:B6:04:1F:97' FirmwareVersion: description: Firmware version type: string example: 2.8.8 FirmwareUrl: description: Firmware url to be used by PL to download firmware binary type: string FirmwareBinaryChecksum: description: Firmware binary checksum type: string example: fc633ab3 SecureConfigString: type: string format: byte description: Base64-encoded data with a new Config/Command for a Device with an Unique ID specified in the `uniqueId` field. TemperatureMonitorProbeCertificate: title: Temperature Monitor Probe Certificates type: object properties: expirationDate: type: string format: date-time description: Expiration date of the probe certificates url: type: string description: URL to download probe certificate TemperatureMonitorProbe: title: Temperature Monitor Probe type: object properties: uniqueId: $ref: '#/components/schemas/UniqueId' cert: $ref: '#/components/schemas/TemperatureMonitorProbeCertificate' TemperatureMonitorProbes: title: Temperature Monitor Probes type: object properties: probes: type: array items: $ref: '#/components/schemas/TemperatureMonitorProbe' DeviceCommandResponse: type: object title: Device Command Response description: 'Unified response for all device commands (alarm, get_monitor_state, read_all).' properties: id: type: string format: uuid description: Unique identifier of the command created: type: string format: date-time description: Timestamp when the command was created expirationDate: type: string format: date-time nullable: true description: The time at which command is marked as expired and not processed anymore state: type: string enum: - NEW - PENDING - APPLIED - FAILED description: Current state of the command applyingBy: type: object nullable: true properties: cloud: type: string enum: - CISCO - KONTAKT error: type: object nullable: true description: | Structured failure reason. Populated when state is FAILED. The `type` field is a stable error code (e.g. `ExternalServiceError`, `RejectedByDevice`, `NoGatewayAvailable`, `JobTimedOut`, `RejectedByGatewayRequestService`, `Unknown`) that mirrors the failure vocabulary surfaced on the `dm-device-command-changed` Kafka topic so clients can correlate REST and Kafka failures. properties: type: type: string description: Stable error code identifying the failure category. message: type: string description: 'Human-readable explanation, safe to log.' command: type: object properties: type: type: string enum: - alarm - get_monitor_state - read_all body: type: object nullable: false description: Request parameters echoed back. Empty object for commands with no request body. deviceResponse: type: object nullable: true description: Device response payload. Populated when state is APPLIED. additionalProperties: true AlarmCommandBody: type: object title: Alarm Command Body description: Request payload for creating an alarm command (commandName=alarm) additionalProperties: false required: - sensor - type - action - counter properties: sensor: type: string enum: - TEMPERATURE_0 - TEMPERATURE_1 - TEMPERATURE_2 - HUMIDITY_0 description: The sensor that triggered the alert type: type: string enum: - MEASUREMENT_OUT_OF_BOUNDS - SENSOR_ERROR - HARDWARE_ERROR description: The type of alert action: type: string enum: - ACKNOWLEDGED - RESOLVED description: The action to perform on the alert counter: type: integer description: Alert counter — matches the device's alarm sequence for the acknowledged/resolved alert. EmptyCommandBody: type: object title: Empty Command Body description: | Empty body for body-less commands (e.g. `get_monitor_state`, `read_all`). `additionalProperties: false` keeps callers from passing junk that the wire contract would silently swallow. additionalProperties: false 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 description: Optional details nullable: true 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 Company: type: object properties: id: type: string format: UUID name: type: string uniqueId: type: string countryCode: type: string nullable: true ConfigBle: type: object description: General BLE advertising settings. properties: name: description: Bluetooth name. maxLength: 15 type: string profiles: type: array description: List of beacon profiles Device should broadcast. deprecated: true nullable: true items: type: string enum: - IBEACON - EDDYSTONE packets: description: Beacon advertising packets that should be broadcasted by a device. type: array nullable: true 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 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`. nullable: true shuffled: type: boolean description: Flag indicating whether a beacons should turn the Kontakt.io Secure Shuffling on (`true`) or of (`false`). nullable: true txPower: type: integer 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).' nullable: true interval: type: integer minimum: 100 maximum: 10240 description: Advertising interval in milliseconds for iBeacon and Eddystone packets. nullable: true kontaktFrameInterval: type: integer minimum: 20 maximum: 10240 description: Advertising interval in milliseconds for Kontakt.io Secure Profile packet (Kontakt Packet). nullable: true telemetryInterval: type: integer nullable: true minimum: 20 maximum: 10240 description: Advertising interval in milliseconds for Kontakt.io Telemetry packet. locationFrameInterval: type: integer nullable: true minimum: 100 maximum: 10240 description: Advertising interval in milliseconds for Kontakt.io Location packet. telemetryFields: type: array 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 | nullable: true 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 nullable: true description: BLE broadcasting channel used for Kontakt.io Location packet broadcasts. 0 means randomized channel broadcasting. enum: - 0 - 37 - 38 - 39 ConfigIBeacon: type: object description: iBeacon settings. properties: proximity: type: string format: UUID description: iBeacon Proximity UUID. nullable: true major: type: integer format: uint16 minimum: 0 maximum: 65535 description: iBeacon Major. nullable: true minor: type: integer format: uint16 minimum: 0 maximum: 65535 description: iBeacon Minor. nullable: true rssi1m: type: array description: List of new Calibrated RSSI@1m values (iBeacon) for each TX power level the Device can use. nullable: true items: type: integer example: - -115 - -84 - -81 - -77 - -72 - -69 - -65 - -59 ConfigEddystone: type: object description: Eddystone settings. properties: namespace: type: string description: Eddystone UID Namespace. nullable: true maxLength: 20 minLength: 20 instanceId: type: string description: Eddystone UID Instance ID. nullable: true maxLength: 12 minLength: 12 url: type: string description: Eddystone URL address. Hex-encoded according to Eddystone specification. nullable: true decodedUrl: type: string description: Eddystone URL address. Alias for `url` but in decoded format. `decodedUrl` takes precedence. nullable: true rssi0m: type: array description: List of new Calibrated RSSI@0m values (Eddystone) for each TX power level the Device can use. deprecated: true nullable: true items: type: integer 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. ConfigEid: type: object description: Eddystone-EID settings. properties: eidIdentityKey: description: Eddystone-EID Identity Key. type: string nullable: true eidRotationPeriodExponent: description: Eddystone-EID rotation period exponent. type: integer nullable: true minimum: 0 maximum: 15 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. 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. Bit order is as follows: Mac filtration, Eddystone,iBeacon, Kontakt. 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. All 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 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. All 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 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. Keystore in p12/pfx format (with certificate and private key) wpa2CertificatePassword: type: string description: |- Enterprise WiFi. Certificate password. Password to the keystore wpa2PrivateKeyAlias: type: string description: |- Enterprise WiFi. Alias for private key. 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. 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 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' NewGatewayConfig: allOf: - $ref: '#/components/schemas/EditableGatewayConfig' - type: object properties: uniqueId: description: List of Gateway Unique IDs for which configs should be created. type: array items: $ref: '#/components/schemas/UniqueId' deviceType: description: Type of a device that a configuration should be created for. type: string enum: - GATEWAY - $ref: '#/components/schemas/ConfigLocksRequest' title: New Gateway Config NewBeaconConfig: allOf: - $ref: '#/components/schemas/BeaconConfig' - type: object properties: uniqueId: description: List of Beacon Unique IDs for which configs should be created. type: array items: $ref: '#/components/schemas/UniqueId' deviceType: description: Type of a device that a configuration should be created for. type: string enum: - BEACON - $ref: '#/components/schemas/ConfigLocksRequest' title: New Beacon Config 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' 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' EncryptedConfig: title: Encrypted Config/Command x-stoplight: id: yvjpgdrc5gygd type: object properties: uniqueId: type: string description: Unique ID of the device that can consume this Encrypted Config/Command. config: type: string format: byte description: Base64-encoded data with a new Config/Command for a Device with an Unique ID specified in the `uniqueId` field. 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 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 EddystoneDecrypted: title: Decrypted Eddystone-TLM packet type: object properties: advertisementCount: type: integer description: Number of Bluetooth advertising packets broadcasted since the last reboot of a beacon batteryVoltage: type: number description: Battery voltage raw: type: string format: byte description: Base64-encoded Eddystone Encrypted Telemetry frame temperature: type: number description: 'Temperature of a beacon (**not** an ambient temperature, although it might be similar) in °C' uptime: type: integer description: Number of seconds since the last reboot of a beacon FirmwareUpgradeScheduleJobResetResponse: type: object description: The status of the schedule job before and after it has been deleted properties: before: $ref: '#/components/schemas/FirmwareUpgradeScheduleResponse' after: $ref: '#/components/schemas/FirmwareUpgradeScheduleResponse' FirmwareUpgradeScheduleResponse: type: object properties: jobKey: type: string description: Identifier of the job status: type: string description: Job status enum: - IN_PROGRESS - COMPLETED - NOT_FOUND - FAILED result: type: object properties: devicesRequested: type: number description: Number of devices requested for firmware upgrade upgradeScheduled: type: number description: Number of devices that the firmware upgrade has been successfully applied to nothingToUpgrade: type: number description: Number of devices that the firmware upgrade is already up to date devicesInaccessible: type: number description: 'Number of devices that the firmware upgrade can''t be applied to, eg. devices from another account' JobStatus: type: string description: Job status. enum: - IN_PROGRESS - COMPLETED - NOT_FOUND - FAILED ExternalDeviceImportResponse: type: object properties: jobKey: type: string description: Id of the job. status: $ref: '#/components/schemas/JobStatus' result: $ref: '#/components/schemas/ExternalDeviceImportResult' required: - jobKey - status ExternalDeviceImportResult: type: object x-examples: Example 1: status: FAILURE fileUrl: 'http://api.kontakt.io/storage/file?path=external-device-import/945ac1be-a543-4dde-8e2c-2d489d4f0dac.csv' errors: deploymentStatus: Deployment status is required category: Category is required productName: Product name is required mac: MAC address is required properties: status: $ref: '#/components/schemas/ExternalDeviceImportStatus' fileUrl: type: string description: URL pointing to the CSV file with the import result errors: type: object description: List of errors related to the import process additionalProperties: type: string description: Error description description: Detailed result details of finished external devices import. ExternalDeviceImportStatus: type: string description: Status of the external device import process enum: - SUCCESS - FAILURE - PARTIAL ExternalDeviceImportJobResetResponse: type: object description: sdf properties: before: $ref: '#/components/schemas/ExternalDeviceImportResult' after: $ref: '#/components/schemas/ExternalDeviceImportResult' TimeRanges: type: array items: properties: from: type: number minimum: 0 maximum: 23 description: Starting hour for the firmware upgrade to: type: number minimum: 1 maximum: 24 description: Ending hour for the firmware upgrade FirmwareUpgradeSettingsDto: type: object properties: enabled: type: boolean description: Determines whether Firmware Upgrade feature should be enabled for the company timezone: type: string description: Specifies the timezone for the specified schedule example: Europe/Warsaw schedule: type: object description: Schedule for the firmware upgrade properties: monday: type: object properties: ranges: $ref: '#/components/schemas/TimeRanges' tuesday: type: object properties: ranges: $ref: '#/components/schemas/TimeRanges' wednesday: type: object properties: ranges: $ref: '#/components/schemas/TimeRanges' thursday: type: object properties: ranges: $ref: '#/components/schemas/TimeRanges' friday: type: object properties: ranges: $ref: '#/components/schemas/TimeRanges' saturday: type: object properties: ranges: $ref: '#/components/schemas/TimeRanges' sunday: type: object properties: ranges: $ref: '#/components/schemas/TimeRanges' rssiThreshold: type: integer format: int32 description: Rssi threshold below which firmware upgrade will not be applied FirmwareUpgradeScheduleRequest: type: object properties: q: type: string description: BQL query that specifies devices applicable for firmware upgrade example: (uniqueId==1234567) when: type: string description: |- Specifies the time-window when the firmware upgrade is executed * NOW - apply firmware upgrade in the near future * IN_UPGRADE_WINDOW - apply firmware upgrade in time-window enum: - NOW - IN_UPGRADE_WINDOW NewExternalDevice: type: object properties: uniqueId: type: string description: Unique ID of the new external device mac: type: string description: MAC address of the new external device example: 'AA:BB:12:34:18:38' bleMac: type: string description: BLE MAC address of the new external device example: 'AA:BB:12:34:18:39' wifiMac: type: string description: Wi-Fi MAC address of the new external device example: 'AA:BB:12:34:18:3A' eddystoneMac: type: string description: Eddystone MAC address of the new external device example: 'AA:BB:12:34:18:3B' iBeaconMac: type: string description: iBeacon MAC address of the new external device example: 'AA:BB:12:34:18:3C' productName: type: string description: Product name of the new external device example: Somy AB-44 productCode: type: string description: Product code of the new external device example: KNKT_product_code alias: type: string 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.' nullable: true 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 deploymentStatus: $ref: '#/components/schemas/DeploymentStatus' category: $ref: '#/components/schemas/DeviceCategory' Firmware: type: object properties: id: type: string format: UUID description: Firmware id. name: type: string description: Firmware name description: type: string description: Optional Firmware description nullable: true deviceType: type: string description: Type of a device that the Firmware applies to enum: - BEACON - GATEWAY uniqueId: type: array description: List of Unique IDs of beacons that this Firmware can be applied to items: type: string validVersions: description: List of Firmware versions from which it's possible to update to the returned Firmware type: string scheduled: type: boolean description: Flag indicating whether an optional firmware should be made available for upgrading beacons (`true`) or not (`false`) important: type: boolean description: Flag indicating whether this Firmware should be considered important (`true`) or just a minor update (`false`) optional: type: boolean description: Flag indicating whether this Firmware is optional (`true`) or not ('false') url: type: string format: URL description: Link to a binary file with the Firmware fileExtension: type: string description: Extension of the Firmware file crc32: type: string description: Checksum FirmwareCore: title: Firmware (Core Parameters) properties: id: type: string format: UUID description: Firmware identificator name: type: string description: Firmware name description: type: string description: Optional Firmware description nullable: true deviceType: type: string description: Type of a device that the Firmware applies to enum: - BEACON - GATEWAY validVersions: description: List of Firmware versions from which it's possible to update to the returned Firmware type: string important: type: boolean description: Flag indicating whether this Firmware should be considered important (`true`) or just a minor update (`false`) url: type: string format: URL description: Link to a binary file with the Firmware Polygon: type: object properties: id: type: string format: uuid polygon: type: array items: type: object properties: x: type: integer 'y': type: integer 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. 0 - static occupancy. 2 - 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' 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' 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' 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' OccupancyImage: type: object x-stoplight: id: blcpt1fqfd6zh description: Occupancy image taken from occupancy-capable device. properties: captured: type: string format: date-time description: 'Timestamp when image was captured. If present in POST request, will be accounted for, otherwise defaults to now()' raw: type: string format: byte description: Raw Base64-encoded bytes received from device. content: type: string format: byte description: Base64-encoded PNG image. calibration: type: string format: byte description: Base64-encoded calibration mask received from device. recognitionBoxes: type: array description: Objects recognized as humans by occupancy model on the device. items: allOf: - $ref: '#/components/schemas/Polygon' StitchingConfig: type: object required: - uniqueId - intersections properties: uniqueId: type: string description: Unique identifier of a beam/device. intersections: type: array items: $ref: '#/components/schemas/StitchingPair' StitchingPair: type: object required: - firstDevice - secondDevice properties: firstDevice: $ref: '#/components/schemas/StitchedDevice' secondDevice: $ref: '#/components/schemas/StitchedDevice' StitchedDevice: type: object required: - uniqueId - image - pose properties: uniqueId: type: string description: Unique identifier of a beam/device. image: $ref: '#/components/schemas/StitchingImage' pose: $ref: '#/components/schemas/StitchingPose' StitchingImage: type: object required: - captured - original - corrected properties: captured: type: string format: date-time example: '2026-01-09T12:09:30.726Z' original: type: string format: byte description: Base64-encoded image bytes (no data URL prefix). example: iVBORw0KGgoAAAANSUhEUgAAAAUA... corrected: type: string format: byte description: Base64-encoded image bytes (no data URL prefix). example: iVBORw0KGgoAAAANSUhEUgAAAAUA... 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 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 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 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' 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 nullable: true 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 DeviceEditableVirtualAttributes: type: object description: Set of read-write editable virtual attributes. properties: alias: type: string 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.' nullable: true 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 description: |- Object containing arbitrary key-value pairs that can be defined by a Device's Manager. Danger: may be overwritten by other API clients. nullable: true lat: type: number format: float deprecated: true nullable: true lng: type: number format: float deprecated: true nullable: true deployedlat: type: number format: float deprecated: true nullable: true deployedlng: type: number format: float deprecated: true nullable: true 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 nullable: true description: Bluetooth Low Energy interface MAC address. example: 'AA:BB:CC:DD:EE:01' wifiMac: type: string nullable: true description: Wi-Fi interface MAC address. example: 'AA:BB:CC:DD:EE:02' eddystoneMac: type: string nullable: true description: MAC address used for Eddystone advertising. example: 'AA:BB:CC:DD:EE:03' ibeaconMac: type: string nullable: true description: MAC address used for iBeacon advertising. example: 'AA:BB:CC:DD:EE:04' 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 description: 'Unix epoch timestamp indicating when a share will be revoked. If a Device was shared indefinitely, this value will be `null`.' nullable: true 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 format: int32 nullable: true deprecated: true description: Battery level percentage. Deprecated; use status.batteryLevel. Returns -1 when device is externally powered. lastSeen: type: integer format: int64 nullable: true deprecated: true description: Unix epoch timestamp (seconds) of the last online moment. Deprecated; use status.lastOnlineTimestamp. status: type: object nullable: true description: Device status details. properties: online: type: boolean nullable: true description: Whether the device is currently online. offlineReason: type: string nullable: true description: Reason reported when the device is offline. externalPower: type: boolean nullable: true description: Whether the device is externally powered. batteryLevel: type: integer format: int32 nullable: true description: Battery level percentage. batteryLevelTimestamp: type: string format: date-time nullable: true description: Timestamp of the last battery level update (ISO 8601 format). example: '2025-12-29T13:45:17.079Z' firstOnlineTimestamp: type: string format: date-time nullable: true description: First time the device was seen online (ISO 8601 format). example: '2025-12-29T13:45:17.079Z' lastOnlineTimestamp: type: string format: date-time nullable: true 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' 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 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. 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 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. ConfigLocksRequest: type: object properties: locks: type: object properties: roomNumber: $ref: '#/components/schemas/LockDetailsConfirmationId' temperatureMonitor: $ref: '#/components/schemas/LockDetailsConfirmationId' ConfigLocksResponse: type: object properties: locks: type: object properties: roomNumber: $ref: '#/components/schemas/LockDetails' temperatureMonitor: $ref: '#/components/schemas/LockDetails' LockDetails: type: object properties: confirmationId: $ref: '#/components/schemas/LockDetailsConfirmationId' 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 PowerSavingSettings: description: Power Saving settings x-stoplight: id: 10t53bq8hl1v2 type: object properties: mode: type: string 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 | nullable: true 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: nullable: true type: integer 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 nullable: true type: integer 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: nullable: true 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 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: nullable: true type: integer 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: nullable: true type: integer 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: nullable: true type: integer minimum: 15 maximum: 65535 description: Number of *seconds* a beacon should broadcast when `BURST_MODE` is active burstOffTime: nullable: true type: integer minimum: 1 maximum: 10080 description: Number of *minutes* between each broadcasts when `BURST_MODE` is active External: description: A representation of a 3rd party device type: object deprecated: true properties: id: type: string format: UUID description: Device object ID used internally in Kontakt.io API uniqueId: type: string description: MAC address of the registered device vendor: type: string enum: - CASSIA - MERAKI - RUCKUS alias: type: string nullable: true 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: type: array description: 'List of custom tags, defined and editable by Device''s Manager' items: type: string deviceType: type: string enum: - EXTERNAL description: Type of the Device managerId: type: string format: UUID description: ID of the Device's Manager ownerId: type: string format: UUID description: 'ID of the Device''s 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.' access: $ref: '#/components/schemas/DeviceDataRole' venue: type: object x-sl-internally-excluded: true x-sl-error-message: You do not have permission to view this reference 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 nullable: true description: 'Unix epoch timestamp indicating when a share will be revoked. If a Device was shared indefinitely, this value will be `null`.' metadata: type: object nullable: true description: Object containing arbitrary key-value pairs that can be defined by a Device's Manager properties: type: object nullable: true description: Object containing arbitrary key-value pairs that can be defined by a Device's Manager lat: type: number nullable: true description: 'Latitude of a place where the Device has been detected the last time. Can be set manually or automatically, e.g. in Kontakt.io Administration Apps.' lng: type: number nullable: true description: 'Longitude of a place where the Device has been detected the last time. Can be set manually or automatically, e.g. in Kontakt.io Administration Apps.' deployedlat: type: number nullable: true description: Latitude of a place where the Device should be installed. Can be set by placing a Device in a Location in Kontakt.io Panel. deployedlng: type: number nullable: true description: Longitude of a place where the Device should be installed. Can be set by placing a Device in a Location in Kontakt.io Panel. queriedBy: type: string nullable: true DeviceStatusesRequest: type: object properties: statuses: type: array items: type: object properties: uniqueId: type: string description: The uniqueId of a devices that the status relates to example: 12df23Df timestamp: type: string description: 'The timestamp that correlates to the status period, eg. yyyy-MM-ddThh:mm:ssZ, eg. 2023-07-25T11:58:12Z' example: '2023-07-25T11:58:12.246+0000' type: type: string description: The status to be sent to DM-API enum: - FIRMWARE_UPGRADE_ERROR - INFO - ERROR example: FIRMWARE_UPGRADE_ERROR message: type: string description: Additional information to be passed with the status example: 'Firmware upgrade failed, corrupted binary' DeviceReplaceRequest: type: object properties: sourceUniqueId: type: string description: Unique identifier of the gateway being replaced. targetUniqueId: type: string description: Unique identifier of the gateway that should receive the pending configuration. required: - sourceUniqueId - targetUniqueId OrderManagementResponse: type: object properties: orders: type: object description: Per-order claiming/releasing status properties: each orderId from request: type: object description: Claiming/releasing status for this order ID properties: status: type: string description: |- Successful statuses: CLAIMED RELEASED Failure statuses: CANNOT_CLAIM or CANNOT_RELEASE - received a non-200 response from DCC, except... NOT_FOUND - received a 404 response from DCC UNCLASSIFIED_COMMUNICATION_ERROR - unknown error when communicating with DCC. UNCLASSIFIED_SCHEDULING_ERROR - order claimed/released, but can not schedule a job for adding/removing order devices. enum: - CLAIMED - RELEASED - CANNOT_CLAIM - CANNOT_RELEASE - NOT_FOUND - UNCLASSIFIED_COMMUNICATION_ERROR - UNCLASSIFIED_SCHEDULING_ERROR details: type: string description: 'Usually error details, e.g. ''503 DCC unavailable''' totalDevices: type: number description: Number of devices in this order DeviceType: type: string enum: - BEACON - GATEWAY - EXTERNAL description: General type of device. DeviceCategory: type: string enum: - TAG - INFRASTRUCTURE description: 'Category of the device, whether it''s a moving (TAG) or static (INFRASTRUCTURE) 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`. DeploymentInfo: type: object description: Information about device's deployment. properties: status: $ref: '#/components/schemas/DeploymentStatus' deploymentDate: type: string format: date-time nullable: true 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 nullable: true description: Email address of the person who deployed the device. example: john.doe@example.com installerName: type: string nullable: true description: First and last name of the person who deployed the device. example: John Doe required: - status 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 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 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 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 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 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' 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 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' 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 TemperatureProbesSettings: type: object description: Settings for temperature probes. properties: probe0: $ref: '#/components/schemas/TemperatureProbe' probe1: $ref: '#/components/schemas/TemperatureProbe' probe2: $ref: '#/components/schemas/TemperatureProbe' HumidityProbesSettings: type: object description: Settings for humidity probes. properties: probe0: $ref: '#/components/schemas/HumidityProbe' 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 description: 'Latest firmware version device can be upgraded to, if any.' nullable: true example: 2.10.1 scheduledVersion: type: string description: Firmware version that was scheduled for upgrade. nullable: true 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 description: User who scheduled firmware upgrade. nullable: true 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 description: Last recorded firmware upgrade error. nullable: true properties: message: type: string description: Error message. timestamp: type: string format: date-time description: Error timestamp. example: '2023‐09‐18T15:33:00Z' DeviceFederationDetails: type: object x-examples: Example 1: id: 186f64ac-cd17-4a4b-8cb0-905ff2e99c01 displayName: My Federation source: edm sourceApiKey: A905ff2e99c01XL1868cb0f644a4bac created: '2023-07-25T11:58:12.246+0000' lastSync: null status: NEW properties: id: type: string format: uuid description: System-generated unique identifier. displayName: type: string description: Human-friendly display name. source: type: string description: Idntifier of Source Device Management. sourceApiKey: type: string description: Api-Key of Source Device Management user used in the synchronization requests. nullable: true created: $ref: '#/components/schemas/CreatedDate' lastSync: type: string description: Last successful full synchronization (ISO 8601 format). example: '2023-07-25T11:58:12.246+0000' nullable: true status: $ref: '#/components/schemas/DeviceFederationStatus' required: - id - displayName - source - status DeviceFederationStatus: title: DeviceFederationStatus x-stoplight: id: crnkdckhkhlyc enum: - NEW - SYNCED - SYNCING - DELETING - FAILURE description: |- Current status of Device Federation. * `NEW` - Federation newly created * `SYNCED` - Federation is ok, synchronized, no full federation synchronization is progress * `SYNCING` - A full federation synchronization is in progress * `DELETING` - Federation is being deleted * `FAILURE` - The last full federation synchronization failed NewDeviceFederationRequest: type: object x-examples: Example 1: displayName: My Federation source: edm sourceApiKey: ex9L2xd1qta67dtn12 properties: displayName: type: string description: Human-friendly display name. source: type: string description: Identifier of Source Device Management. List of available sources can be obtained with the `GET /device-federations-sources` endpoint. sourceApiKey: type: string description: Api-Key of Source Device Management user used in the synchronization requests. required: - displayName - source - sourceApiKey DevicesSynchronizationResult: type: object x-examples: Example 1: added: 1 updated: 0 failed: 0 removed: 0 errors: [] properties: added: type: integer description: How many devices were added to the target account. updated: type: integer description: How many devices were updated in the target account. failed: type: integer description: How many devices couldn't be added to the target account due to errors. removed: type: integer description: How many devices were removed from the target account due to them missing in the source account. errors: description: List of errors that occurred during the sync type: array items: type: string required: - added - updated - failed - removed - errors DeviceFederationSyncJobResponse: type: object x-examples: Example 1: added: 1 updated: 0 failed: 0 removed: 0 errors: [] properties: jobKey: type: string description: Identifier of the job status: $ref: '#/components/schemas/JobStatus' result: $ref: '#/components/schemas/DevicesSynchronizationResult' required: - jobKey - result - status DeviceFederationSyncOneDeviceResponse: type: object properties: uniqueId: type: string status: type: string enum: - UPDATED - CREATED - DELETED - FAILED DeviceDataRole: type: string enum: - OWNER - SUPERVISOR - EDITOR - VIEWER description: Type of access granted to this device. VenueDataRole: type: string enum: - OWNER - SUPERVISOR - VIEWER description: Type of access granted to this venue. 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' 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' 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 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