{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/kontaktio/main/json-schema/kontaktio-device-schema.json", "title": "Device", "x-generated": "2026-10-12", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/kontaktio-device-api-openapi.yml#/components/schemas/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": "#/$defs/DeviceType" }, "category": { "$ref": "#/$defs/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": "#/$defs/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": "#/$defs/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": "#/$defs/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": "#/$defs/DeviceDataRole" }, "expirationDate": { "type": [ "integer", "null" ], "description": "Unix epoch timestamp indicating when a share will be revoked. If a Device was shared indefinitely, this value will be `null`." } } } }, "firmware": { "type": "string", "description": "Version of the firmware on the device." }, "orderId": { "type": "string", "description": "Associated Order ID this device belongs to." }, "batteryLevel": { "type": [ "integer", "null" ], "format": "int32", "deprecated": true, "description": "Battery level percentage. Deprecated; use status.batteryLevel. Returns -1 when device is externally powered." }, "lastSeen": { "type": [ "integer", "null" ], "format": "int64", "deprecated": true, "description": "Unix epoch timestamp (seconds) of the last online moment. Deprecated; use status.lastOnlineTimestamp." }, "status": { "type": [ "object", "null" ], "description": "Device status details.", "properties": { "online": { "type": [ "boolean", "null" ], "description": "Whether the device is currently online." }, "offlineReason": { "type": [ "string", "null" ], "description": "Reason reported when the device is offline." }, "externalPower": { "type": [ "boolean", "null" ], "description": "Whether the device is externally powered." }, "batteryLevel": { "type": [ "integer", "null" ], "format": "int32", "description": "Battery level percentage." }, "batteryLevelTimestamp": { "type": [ "string", "null" ], "format": "date-time", "description": "Timestamp of the last battery level update (ISO 8601 format)." }, "firstOnlineTimestamp": { "type": [ "string", "null" ], "format": "date-time", "description": "First time the device was seen online (ISO 8601 format)." }, "lastOnlineTimestamp": { "type": [ "string", "null" ], "format": "date-time", "description": "Most recent online timestamp (ISO 8601 format). If online, current time truncated to minutes." } } }, "federation": { "type": "object", "description": "Information about device's federation.", "required": [ "federated" ], "properties": { "id": { "type": "string", "description": "ID of related DeviceFederation. `null` if not federated." }, "source": { "type": "string", "description": "Cloud ID of Source Device Management. `null` if not federated." }, "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)." } } }, "deployment": { "$ref": "#/$defs/DeploymentInfo" }, "pendingConfig": { "oneOf": [ { "$ref": "#/$defs/PendingBeaconConfig" }, { "$ref": "#/$defs/PendingGatewayConfig" } ] }, "firmwareInfo": { "$ref": "#/$defs/FirmwareInfo" }, "currentLocation": { "$ref": "#/$defs/LocationInfo" }, "displaySettings": { "$ref": "#/$defs/DisplaySettings" }, "lowBatterySettings": { "$ref": "#/$defs/LowBatterySettings" }, "sensorSettings": { "$ref": "#/$defs/SensorSettings" }, "localAlertingSettings": { "$ref": "#/$defs/LocalAlertingSettings" }, "buzzerSnoozing": { "$ref": "#/$defs/BuzzerSnoozing" }, "dispenser": { "$ref": "#/$defs/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." }, "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": "#/$defs/DeviceEditableVirtualAttributes" }, { "$ref": "#/$defs/BeaconConfig" }, { "$ref": "#/$defs/EditableGatewayConfig" }, { "type": "object", "description": "Some schema overrides.", "properties": { "occupancy": { "$ref": "#/$defs/OccupancyAllSettings" } } } ], "$defs": { "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" } } } } }, "BeaconConfig": { "description": "Full beacon-type configuration.", "allOf": [ { "$ref": "#/$defs/ConfigBle" }, { "$ref": "#/$defs/ConfigIBeacon" }, { "$ref": "#/$defs/ConfigEddystone" }, { "$ref": "#/$defs/ConfigButton" }, { "$ref": "#/$defs/ConfigEid" }, { "type": "object", "properties": { "powerSaving": { "$ref": "#/$defs/PowerSavingSettings" }, "accelerometer": { "$ref": "#/$defs/AccelerometerSettings" }, "occupancy": { "$ref": "#/$defs/OccupancyPhysicalSettings" }, "irReceiver": { "$ref": "#/$defs/IrReceiverSettings" }, "irTransmitter": { "$ref": "#/$defs/IrTransmitterSettings" }, "bleScan": { "$ref": "#/$defs/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." }, "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": "#/$defs/DisplaySettings" }, "lowBatterySettings": { "$ref": "#/$defs/LowBatterySettings" }, "sensorSettings": { "$ref": "#/$defs/SensorSettings" }, "localAlertingSettings": { "$ref": "#/$defs/LocalAlertingSettings" }, "buzzerSnoozing": { "$ref": "#/$defs/BuzzerSnoozing" }, "dispenser": { "$ref": "#/$defs/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." } } } ] }, "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." } } }, "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 } } }, "ConfigBle": { "type": "object", "description": "General BLE advertising settings.", "properties": { "name": { "description": "Bluetooth name.", "maxLength": 15, "type": "string" }, "profiles": { "type": [ "array", "null" ], "description": "List of beacon profiles Device should broadcast.", "deprecated": true, "items": { "type": "string", "enum": [ "IBEACON", "EDDYSTONE" ] } }, "packets": { "description": "Beacon advertising packets that should be broadcasted by a device.", "type": [ "array", "null" ], "items": { "type": "string", "enum": [ "IBEACON", "EDDYSTONE_UID", "EDDYSTONE_URL", "EDDYSTONE_EID", "EDDYSTONE_TLM", "EDDYSTONE_ETLM", "KONTAKT", "KONTAKT_TLM", "KONTAKT_LOCATION", "BUTTON_IBEACON", "QUUPPA" ] } }, "customConfiguration": { "type": [ "string", "null" ], "description": "Custom configuration parameters for special use-cases. If the solution prepared for you by Kontakt.io takes advantage of these properties, please get in touch with our Support Team for a proper documentation.\n\n**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`.\n" }, "shuffled": { "type": [ "boolean", "null" ], "description": "Flag indicating whether a beacons should turn the Kontakt.io Secure Shuffling on (`true`) or of (`false`)." }, "txPower": { "type": [ "integer", "null" ], "minimum": 0, "maximum": 7, "description": "Bluetooth transmission power level. Possible values are integers from 0 to 7 (nRF51-based devices), 1 to 7 (nRF52-based devices), and 1 or 6 (Card Tag CT16-2)." }, "interval": { "type": [ "integer", "null" ], "minimum": 100, "maximum": 10240, "description": "Advertising interval in milliseconds for iBeacon and Eddystone packets." }, "kontaktFrameInterval": { "type": [ "integer", "null" ], "minimum": 20, "maximum": 10240, "description": "Advertising interval in milliseconds for Kontakt.io Secure Profile packet (Kontakt Packet)." }, "telemetryInterval": { "type": [ "integer", "null" ], "minimum": 20, "maximum": 10240, "description": "Advertising interval in milliseconds for Kontakt.io Telemetry packet." }, "locationFrameInterval": { "type": [ "integer", "null" ], "minimum": 100, "maximum": 10240, "description": "Advertising interval in milliseconds for Kontakt.io Location packet." }, "telemetryFields": { "type": [ "array", "null" ], "description": "Bitmask-based configuration of fields included in the Kontakt.io Telemetry packet.\nEach value enables a specific telemetry field. Available fields depend on device hardware capabilities.\n\n| Value | Description |\n|-------|-------------|\n| AIR_PRESSURE | Air pressure in Pa, as a float32 number |\n| AIR_QUALITY | Air-Quality-Index (AQI) in units 0-254, 255 meaning invalid |\n| BATTERY | Battery percentage, from 0% to 100%, with 255 meaning externally-powered |\n| BLE_CHANNEL | BLE channel on which it is advertising: 0 - 40 |\n| BLE_SCAN_RESULT | BLE scan results |\n| BUTTON_CLICK | Seconds since the last button click, saturating at 0xFFFF |\n| BUTTON_DOUBLE_CLICK | Seconds since the last double click, saturating at 0xFFFF |\n| DOUBLE_TAP_EVENT | Seconds since the last double tap, saturating at 0xFFFF |\n| GAS_SENSOR | Gas sensor reading |\n| GPIO | GPIO state as a telemetry, not implemented |\n| HUMIDITY | Relative humidity percentage 0-100, 255 meaning invalid |\n| IDENTIFIED_BUTTON_CLICK | Click 8-bit counter, and seconds since the last button click, saturating at 0xFFFF |\n| INOUT_COUNTER | In/out people counter |\n| IR_STATS | IR scan statistics |\n| LIGHT_LEVEL | Light level as a percentage: 0 - dark, 100 - sunny environment, 255 - invalid |\n| LIGHT_LEVEL_LUX | Light level in lux, as an uint16 |\n| LOGGING_ENABLED | Show if logging is enabled and if data is available for download |\n| MOVEMENT_EVENT | Movement 8-bit counter, and seconds since the last movement click, saturating at 0xFFFF |\n| MOVEMENT_THRESHOLD_EVENT | Seconds since the last movement, saturating at 0xFFFF |\n| OCCUPANCY | Number of people measured by the detector: 0 - 254, 255 - invalid |\n| PEOPLE_DETECTION | People detection |\n| PIR_DETECTION | Seconds since the last PIR movement, saturating at 0xFFFF |\n| PROXIMITY_REPORT | Proximity report |\n| ROOM_NUMBER | Room number, either measured, or configured. Uint16 |\n| RSSI_SCAN | RSSI scan results |\n| SOAP_DISPENSER | Soap dispenser event |\n| TAP_EVENT | Seconds since the last tap, saturating at 0xFFFF |\n| TEMPERATURE | Temperature as signed 8-bit integer, from -128 to 127C |\n| TEMPERATURE_16_BITS | Temperature as an FP8.8 signed fixed-point number |\n| TWO_BUTTON_INFO | 2x click 8-bit counters, and seconds since the any button click, saturating at 0xFFFF |\n| UTC_TIME | Unix timestamp, UTC time from 1970 in seconds |\n| RAW_ACCELEROMETER | Sensitivity: 1/1000 of a g; X, Y, Z values in units of the sensitivity |\n", "items": { "type": "string", "enum": [ "AIR_PRESSURE", "AIR_QUALITY", "BATTERY", "BLE_CHANNEL", "BLE_SCAN_RESULT", "BUTTON_CLICK", "BUTTON_DOUBLE_CLICK", "DOUBLE_TAP_EVENT", "GAS_SENSOR", "GPIO", "HUMIDITY", "IDENTIFIED_BUTTON_CLICK", "INOUT_COUNTER", "IR_STATS", "LIGHT_LEVEL", "LIGHT_LEVEL_LUX", "LOGGING_ENABLED", "MOVEMENT_EVENT", "MOVEMENT_THRESHOLD_EVENT", "OCCUPANCY", "PEOPLE_DETECTION", "PIR_DETECTION", "PROXIMITY_REPORT", "ROOM_NUMBER", "RSSI_SCAN", "SOAP_DISPENSER", "TAP_EVENT", "TEMPERATURE", "TEMPERATURE_16_BITS", "TWO_BUTTON_INFO", "UTC_TIME", "RAW_ACCELEROMETER" ] } }, "locationFrameChannel": { "type": [ "integer", "null" ], "description": "BLE broadcasting channel used for Kontakt.io Location packet broadcasts. 0 means randomized channel broadcasting.", "enum": [ 0, 37, 38, 39 ] } } }, "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.\nAn empty list `[]` corresponds to a mask of `0b000` (all flags unset) which is the default:\nclick and long-press are enabled, triple-click is disabled.\nSend an empty list to restore defaults.\n\nNote: `CLICK_OFF` and `LONG_PRESS_OFF` are inverted flags — setting them **disables** a behavior\nthat is on by default. `TRIPLE_CLICK` is a normal flag — setting it **enables** a behavior\nthat is off by default.\n\n| Value | Description |\n|-------|-------------|\n| CLICK_OFF | Disable single-click detection. On by default — set this flag to turn it off |\n| LONG_PRESS_OFF | Disable long-press detection. On by default — set this flag to turn it off |\n| TRIPLE_CLICK | Require a triple-click to trigger a panic event instead of a single click. Off by default |\n| MULTI_CLICK | Enable multi-click detection. Mutually exclusive with TRIPLE_CLICK. Off by default |\n", "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.\n", "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." } } }, "ConfigEddystone": { "type": "object", "description": "Eddystone settings.", "properties": { "namespace": { "type": [ "string", "null" ], "description": "Eddystone UID Namespace.", "maxLength": 20, "minLength": 20 }, "instanceId": { "type": [ "string", "null" ], "description": "Eddystone UID Instance ID.", "maxLength": 12, "minLength": 12 }, "url": { "type": [ "string", "null" ], "description": "Eddystone URL address. Hex-encoded according to Eddystone specification." }, "decodedUrl": { "type": [ "string", "null" ], "description": "Eddystone URL address. Alias for `url` but in decoded format. `decodedUrl` takes precedence." }, "rssi0m": { "type": [ "array", "null" ], "description": "List of new Calibrated RSSI@0m values (Eddystone) for each TX power level the Device can use.", "deprecated": true, "items": { "type": "integer" } } } }, "ConfigEid": { "type": "object", "description": "Eddystone-EID settings.", "properties": { "eidIdentityKey": { "description": "Eddystone-EID Identity Key.", "type": [ "string", "null" ] }, "eidRotationPeriodExponent": { "description": "Eddystone-EID rotation period exponent.", "type": [ "integer", "null" ], "minimum": 0, "maximum": 15 } } }, "ConfigIBeacon": { "type": "object", "description": "iBeacon settings.", "properties": { "proximity": { "type": [ "string", "null" ], "format": "UUID", "description": "iBeacon Proximity UUID." }, "major": { "type": [ "integer", "null" ], "format": "uint16", "minimum": 0, "maximum": 65535, "description": "iBeacon Major." }, "minor": { "type": [ "integer", "null" ], "format": "uint16", "minimum": 0, "maximum": 65535, "description": "iBeacon Minor." }, "rssi1m": { "type": [ "array", "null" ], "description": "List of new Calibrated RSSI@1m values (iBeacon) for each TX power level the Device can use.", "items": { "type": "integer" } } } }, "ConfigLocksResponse": { "type": "object", "properties": { "locks": { "type": "object", "properties": { "roomNumber": { "$ref": "#/$defs/LockDetails" }, "temperatureMonitor": { "$ref": "#/$defs/LockDetails" } } } } }, "CreatedDate": { "description": "Informs when the object has been created.", "type": "string", "format": "date-time" }, "DeploymentInfo": { "type": "object", "description": "Information about device's deployment.", "properties": { "status": { "$ref": "#/$defs/DeploymentStatus" }, "deploymentDate": { "type": [ "string", "null" ], "format": "date-time", "description": "Timestamp of when the device was deployed (ISO 8601 format). Defaults to the current time when deployment info is updated without an explicit date." }, "installerEmail": { "type": [ "string", "null" ], "description": "Email address of the person who deployed the device." }, "installerName": { "type": [ "string", "null" ], "description": "First and last name of the person who deployed the device." } }, "required": [ "status" ] }, "DeploymentStatus": { "type": "string", "description": "Current deployment status of this device - e.g. whether is it deployed or not.\n\n`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" ] }, "DeviceCategory": { "type": "string", "enum": [ "TAG", "INFRASTRUCTURE" ], "description": "Category of the device, whether it's a moving (TAG) or static (INFRASTRUCTURE) device." }, "DeviceDataRole": { "type": "string", "enum": [ "OWNER", "SUPERVISOR", "EDITOR", "VIEWER" ], "description": "Type of access granted to this device." }, "DeviceEditableVirtualAttributes": { "type": "object", "description": "Set of read-write editable virtual attributes.", "properties": { "alias": { "type": [ "string", "null" ], "description": "Alternative description for the Device, stored only on Kontakt.io backend - it's not possible to read this value via Bluetooth directly from the Device itself. In Device Management App represented as a Notes." }, "tags": { "description": "Comma-separated list of maximum 20 user-defined labels (no longer than 32 characters).", "type": "array", "maxItems": 20, "uniqueItems": true, "items": { "type": "string", "maxLength": 32 } }, "metadata": { "type": [ "object", "null" ], "description": "Object containing arbitrary key-value pairs that can be defined by a Device's Manager.\n\nDanger: may be overwritten by other API clients." }, "lat": { "type": [ "number", "null" ], "format": "float", "deprecated": true }, "lng": { "type": [ "number", "null" ], "format": "float", "deprecated": true }, "deployedlat": { "type": [ "number", "null" ], "format": "float", "deprecated": true }, "deployedlng": { "type": [ "number", "null" ], "format": "float", "deprecated": true } } }, "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." }, "bleMac": { "type": [ "string", "null" ], "description": "Bluetooth Low Energy interface MAC address." }, "wifiMac": { "type": [ "string", "null" ], "description": "Wi-Fi interface MAC address." }, "eddystoneMac": { "type": [ "string", "null" ], "description": "MAC address used for Eddystone advertising." }, "ibeaconMac": { "type": [ "string", "null" ], "description": "MAC address used for iBeacon advertising." } } }, "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`." }, "DeviceType": { "type": "string", "enum": [ "BEACON", "GATEWAY", "EXTERNAL" ], "description": "General type of device." }, "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 } } }, "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." }, "temperatureUnit": { "type": "string", "description": "The unit for displaying temperature.", "enum": [ "CELSIUS", "FAHRENHEIT" ] } } }, "EditableGatewayConfig": { "description": "Gateway (e.g. Portal Light) settings that can be changed via API", "type": "object", "properties": { "applications": { "type": "object", "properties": { "system": { "type": "object", "properties": { "wifiSsid": { "type": "string", "description": "Name of the WiFi network a gateway should connect to", "minLength": 2, "maxLength": 32 }, "wifiProtocol": { "type": "string", "description": "WiFi authentication protocol that a gateway should use", "enum": [ "WPA_PSK", "WPA_EAP", "OPEN" ] }, "wifiUserName": { "type": "string", "description": "When `wifiProtocol` is set to `WPA_EAP` this parameter represents PEAP MSCHAPv2 username. If `WPA_PSK` is used, this value will be ignored by a gateway.", "maxLength": 256 }, "wifiPassword": { "type": "string", "description": "When `wifiProtocol` is set to `WPA_EAP` this parameter represents PEAP MSCHAPv2 password. If `WPA_PSK` is used, this value will be ignored by a gateway.", "maxLength": 63 }, "apiHost": { "type": "string", "description": "DM API host URL.", "format": "uri", "minLength": 1 }, "apiKey": { "type": "string", "description": "API key for DM API (alphanumeric)", "minLength": 1 }, "dataHost": { "type": "string", "description": "Data host URL", "format": "uri" }, "dataApiKey": { "type": "string", "description": "API key for Data host (alphanumeric)" }, "otaUrl": { "type": "string", "description": "OTA update URL", "format": "uri", "maxLength": 64 }, "proxyURL": { "type": "string", "description": "Proxy URL for the gateway to connect to. Empty value disables proxying.", "minLength": 0, "maxLength": 64, "default": "" }, "proxyPort": { "type": "integer", "description": "Proxy port for the gateway to connect to", "minimum": 0, "maximum": 65535, "default": 80 }, "eapType": { "type": "string", "description": "Extensible Authentication Protocol (EAP) for network access", "enum": [ "DEFAULT", "TLS", "TTLS", "PEAP" ], "default": "DEFAULT" }, "ibeaconUUID": { "type": "string", "format": "uuid", "description": "iBeacon UUID to broadcast. \n Broadcasting the iBeacon is disabled by default. To enable, the ibeaconUUID need to be set.", "minLength": 36, "maxLength": 36, "default": "00000000-0000-0000-0000-000000000000" }, "ibeacon_major": { "type": "integer", "description": "Major to use when broadcasting iBeacon frames.", "default": 0 }, "ibeacon_minor": { "type": "integer", "description": "Minor to use when broadcasting iBeacon frames.", "default": 0 }, "roomID": { "type": "integer", "description": "Room ID used in location frame", "default": 0 }, "tx_power": { "type": "integer", "description": "Tx power used by the gateway (allowed values are defined in documentation)" }, "filtration_mask": { "type": "integer", "description": "Filtration mask is the second stage of frame filtration implemented in Portal light. Each bit in that mask defines whether to process a specific type of frames or omit them. \n Bit order is as follows: Mac filtration, Eddystone,iBeacon, Kontakt. \n The default value is 0b1111 (15 decimal), meaning that Kontakt frames, iBeacon, Eddystone and devices with Kontakt MAC will be sent to the cloud. It is possible to set this mask to process only selected types of frames/devices.", "default": 15 }, "rssi_threshold": { "type": "integer", "description": "Rssi threshold filtration is the first stage of frame filtration implemented in Portal light. It means that if rssi filtration is on and set to desired value then all scans with lower rssi will be rejected.", "default": -127 }, "bleAdvChannel": { "type": "integer", "description": "BLE advertising channel.\nAll channels advertising (0) is set as a default. Possibility to advertise only on one of three channels was added for Location Engine needs: 37, 38, 39 \n Other values such as 10,35 etc… will be treated as 0 - it means all channels advertising.", "enum": [ 0, 37, 38, 39 ] }, "bleScanChannel": { "type": "integer", "description": "BLE scanning channel.\nAll channels scanning (0) is set as a default. Possibility to scan only on one of three channels was added for Location Engine needs: 37, 38, 39 \n Other values such as 10,35 etc… will be treated as 0 - it means all channels scanning.", "enum": [ 0, 37, 38, 39 ] }, "dm_poll_interval_s": { "type": "integer", "description": "DM poll interval in seconds." }, "defaultNTP": { "type": "string", "description": "Default NTP server URL.", "format": "uri", "minLength": 1 }, "secondNTP": { "type": "string", "description": "Secondary NTP server URL.", "format": "uri", "minLength": 1 }, "apiCACertificate": { "type": "string", "description": "API CA certificate.", "minLength": 1 }, "wpa2Certificate": { "type": "string", "description": "Enterprise WiFi. Base64-encoded P12 certificate. \n Keystore in p12/pfx format (with certificate and private key)" }, "wpa2CertificatePassword": { "type": "string", "description": "Enterprise WiFi. Certificate password. \n Password to the keystore" }, "wpa2PrivateKeyAlias": { "type": "string", "description": "Enterprise WiFi. Alias for private key. \n Private key alias specified by --name param in openssl utility", "default": "1" }, "wpa2CACertificate": { "type": "string", "description": "Enterprise WiFi. For deployment and client-specific requirement there was a need to add CA certificates to validate the server. \n Sent as a string in .pem format with header -----BEGIN CERTIFICATE----- and footer ----END CERTIFICATE-----" }, "beacon_packets_mask": { "type": "integer", "description": "Beacon packets mask." }, "led_intensity": { "type": "integer", "description": "LED brightness can be adjusted from 0% (completely off) to 100% - maximum brightness.", "minimum": 0, "maximum": 100, "default": 10 }, "blink_interval_s": { "type": "integer", "description": "Blink interval in seconds.", "minimum": 0, "maximum": 3600 }, "ir_duty_cycle": { "type": "integer", "description": "IR duty cycle (0-100%).", "minimum": 0, "maximum": 100 }, "ir_intensity": { "type": "integer", "description": "IR intensity (0-100%).", "minimum": 0, "maximum": 100 }, "device_name": { "type": "string", "description": "Device name.", "minLength": 1 }, "adv_int": { "type": "integer", "description": "Advertising interval. Must be between 160 and 16384.", "minimum": 160, "maximum": 16384 }, "debug_features_mask": { "type": "integer", "description": "Debug features mask." }, "bound_device": { "type": "string", "description": "Bound device must be a lowercase MAC address.\nOnly 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 } } } } } } }, "FirmwareInfo": { "type": "object", "description": "Details about device's firmware.", "required": [ "firmwareName", "firmwareVersion", "upgrade" ], "properties": { "firmwareName": { "type": "string", "description": "Identifier of the firmware." }, "firmwareVersion": { "type": "string", "description": "Version of the firmware." }, "upgrade": { "type": "object", "description": "Details about next firmware upgrade.", "properties": { "nextAvailableVersion": { "type": [ "string", "null" ], "description": "Latest firmware version device can be upgraded to, if any." }, "scheduledVersion": { "type": [ "string", "null" ], "description": "Firmware version that was scheduled for upgrade." }, "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" }, "scheduledBy": { "type": [ "object", "null" ], "description": "User who scheduled firmware upgrade.", "required": [ "id", "email", "fullName" ], "properties": { "id": { "type": "string", "format": "uuid", "description": "User id." }, "email": { "type": "string", "format": "email", "description": "User email." }, "fullName": { "type": "string", "description": "Full user name." } } }, "lastError": { "type": [ "object", "null" ], "description": "Last recorded firmware upgrade error.", "properties": { "message": { "type": "string", "description": "Error message." }, "timestamp": { "type": "string", "format": "date-time", "description": "Error timestamp." } } } } } } }, "HumidityProbe": { "type": "object", "description": "Settings for a humidity probe.", "properties": { "alertMaxEnabled": { "type": "boolean", "description": "Indicates if the maximum humidity alert is enabled." }, "alertMaxLevel": { "type": "integer", "description": "The maximum humidity level (in %) to trigger an alert.", "minimum": 0, "maximum": 100 }, "alertMinEnabled": { "type": "boolean", "description": "Indicates if the minimum humidity alert is enabled." }, "alertMinLevel": { "type": "integer", "description": "The minimum humidity level (in %) to trigger an alert.", "minimum": 0, "maximum": 100 }, "sensorEnabled": { "type": "boolean", "description": "Indicates if the humidity sensor is enabled." } } }, "HumidityProbesSettings": { "type": "object", "description": "Settings for humidity probes.", "properties": { "probe0": { "$ref": "#/$defs/HumidityProbe" } } }, "IrReceiverSettings": { "type": "object", "description": "IR Receiver setting.", "properties": { "wakeUpInterval": { "type": "integer", "minimum": 0, "maximum": 255, "description": "Interval between detection attempts, encoded as u8. 0 - disabled. Encodes time using 2-bit scale + 6-bit mantissa: 0b00=seconds, 0b01=ms, 0b10=ms*10, 0b11=ms*100. Max 63 per scale (e.g. max 63 seconds, or 6300ms, or 63000ms)" }, "maxListenInterval": { "type": "integer", "minimum": 0, "maximum": 255, "description": "Maximum duration to try and detect IR signal, encoded as u8. Encodes time using 2-bit scale + 6-bit mantissa: 0b00=seconds, 0b01=ms, 0b10=ms*10, 0b11=ms*100. Max 63 per scale (e.g. max 63 seconds, or 6300ms, or 63000ms)" }, "disableOnNoMotion": { "type": "boolean", "description": "Whether or not to disable IR receiver when the beacon is stationary." } } }, "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" } } }, "LocalAlertingSettings": { "type": "object", "description": "Device local alerting settings.", "properties": { "alertSamples": { "type": "integer", "description": "The number of samples considered for triggering alerts.", "minimum": 1, "maximum": 65535 }, "loggingFactor": { "type": "integer", "description": "Logging factor specifically used during alert mode.", "minimum": 1, "maximum": 65535 }, "armingState": { "type": "string", "description": "The current state of the device’s alert system.", "enum": [ "ARMED", "PAUSED", "HALTED" ] }, "armingDelay": { "type": "integer", "description": "Delay (in seconds) before the device transitions to the armed state.", "minimum": 0, "maximum": 3600 }, "deviceErrorSoundEnabled": { "type": "boolean", "description": "Indicates if the device error sound is enabled." }, "sensorErrorSoundEnabled": { "type": "boolean", "description": "Indicates if sensor error sound is enabled." }, "sensorOobSoundEnabled": { "type": "boolean", "description": "Indicates if sensor out-of-bound alert sound is enabled." }, "temperatureProbes": { "$ref": "#/$defs/TemperatureProbesSettings" }, "humidityProbes": { "$ref": "#/$defs/HumidityProbesSettings" } } }, "LocationInfo": { "type": "object", "description": "Information about device location.", "properties": { "campusId": { "type": "number", "description": "Campus identifier" }, "campusName": { "type": "string", "description": "Campus name" }, "buildingId": { "type": "number", "description": "Building identifier" }, "buildingName": { "type": "string", "description": "Building name" }, "floorId": { "type": "number", "description": "Floor identifier" }, "floorName": { "type": "string", "description": "Floor name" }, "roomId": { "type": "number", "description": "Room identifier" }, "roomName": { "type": "string", "description": "Room name" } } }, "LockDetails": { "type": "object", "properties": { "confirmationId": { "$ref": "#/$defs/LockDetailsConfirmationId" } } }, "LockDetailsConfirmationId": { "type": "string", "description": "The value included in the DeviceChangedEvent.UPDATED to confirm that a specific configuration has been applied on a device" }, "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.", "minimum": 1, "maximum": 100 }, "alertEnabled": { "type": "boolean", "description": "Indicates whether the low battery alert is enabled." } } }, "OccupancyAllSettings": { "description": "Occupancy settings. Only applicable to devices with occupancy capability.", "allOf": [ { "$ref": "#/$defs/OccupancyPhysicalSettings" }, { "type": "object", "properties": { "inclusions": { "$ref": "#/$defs/OccupancyInclusionZones" }, "exclusions": { "$ref": "#/$defs/OccupancyExclusionZones" }, "stitching": { "type": "object", "description": "Stitching configuration (no images in device responses).", "properties": { "intersections": { "type": "array", "items": { "$ref": "#/$defs/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": "#/$defs/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": "#/$defs/Polygon" } }, "OccupancyPhysicalSettings": { "type": "object", "x-stoplight": { "id": "ri25ewp162tv9" }, "description": "Occupancy settings. Only applicable to devices with occupancy capability.", "properties": { "sleepInterval": { "type": "integer", "minimum": 0, "maximum": 65535, "default": 0, "description": "Occupancy sampling interval in seconds when in power-saving mode (outside of working hours)." }, "minInterval": { "type": "integer", "minimum": 0, "maximum": 65535, "default": 60, "description": "Min sampling interval in seconds. 0 means disabled." }, "calibration": { "type": "integer", "minimum": -128, "maximum": 127, "default": 0, "description": "Common threshold delta (all occupancy modes). Allows to fine-tune the sensitivity relative to the newest default. For example, use -5 to lower the threshold by 5 units from the default (allow more detections), or conversely setting it to 5 adds 5 to that threshold, reducing false positives. In other words, this is a linear value, not a percentage." }, "sensitivity": { "type": "integer", "minimum": 0, "maximum": 100, "deprecated": true, "description": "Deprecated! Please use the calibration parameter instead. Percentage of sensitivity. 0-100, 0 for very strict, 100 accept everything" }, "model": { "type": "integer", "description": "Detection model. \n\n0 - static occupancy. \n2 - traffic footfall." }, "footfallLine": { "type": "string", "default": 28502800, "description": "Threshold line for footfall detection. [x0, y0, x1, y1] pixel coordinates for the line. Hex encoded." }, "footfallSensitivity": { "type": "integer", "minimum": 0, "maximum": 100, "default": 40, "deprecated": true, "description": "Deprecated! Please use the calibration parameter instead. Sensitivity for accepting footfall tracks. 0-100, 0 for very strict, 100 accept everything" } } }, "PendingBeaconConfig": { "description": "Pending Beacon Configuration.", "x-stoplight": { "id": "gnufpxhymraym" }, "allOf": [ { "$ref": "#/$defs/BeaconConfig" }, { "type": "object", "properties": { "created": { "$ref": "#/$defs/CreatedDate" }, "updated": { "$ref": "#/$defs/UpdatedDate" }, "uniqueId": { "$ref": "#/$defs/UniqueId" }, "model": { "$ref": "#/$defs/DeviceModel" } } }, { "$ref": "#/$defs/ConfigLocksResponse" } ] }, "PendingGatewayConfig": { "description": "Pending Gateway (e.g. Portal Light) Configuration.", "x-stoplight": { "id": "5bcdyhznq27sa" }, "allOf": [ { "$ref": "#/$defs/EditableGatewayConfig" }, { "type": "object", "properties": { "created": { "$ref": "#/$defs/CreatedDate" }, "updated": { "$ref": "#/$defs/UpdatedDate" }, "uniqueId": { "$ref": "#/$defs/UniqueId" } } }, { "$ref": "#/$defs/ConfigLocksResponse" } ] }, "Polygon": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "polygon": { "type": "array", "items": { "type": "object", "properties": { "x": { "type": "integer" }, "y": { "type": "integer" } } } } } }, "PowerSavingSettings": { "description": "Power Saving settings", "x-stoplight": { "id": "10t53bq8hl1v2" }, "type": "object", "properties": { "mode": { "type": [ "string", "null" ], "enum": [ "LIGHT_SENSOR", "RTC", "MOTION_DETECTION", "BURST_MODE" ], "description": "Currently enabled power saving mode. In all modes except BURST_MODE,\nnonconnectable packets (iBeacon, Eddystone, etc.) are switched off,\nKontakt packet interval is reduced (at least every 2s, at most every 10s),\nand Kontakt TLM is off.\n\n| Value | Description |\n|-------|-------------|\n| MOTION_DETECTION | Enter power saving when no motion is detected (requires accelerometer). Configure via `moveSuspendTimeout` |\n| LIGHT_SENSOR | Enter power saving based on ambient light level (requires light sensor). Configure via `lightSensorThreshold` and `lightSensorHysteresis` |\n| RTC | Enter power saving on a weekly schedule using the real-time clock. Configure days and hours via the `rtc` property |\n| 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 |\n" }, "features": { "type": "array", "items": { "type": "string", "enum": [ "LIGHT_SENSOR", "RTC", "MOTION_DETECTION", "BURST_MODE" ] }, "deprecated": true, "description": "Deprecated! Please use the mode parameter instead. Currently enabled power saving mode. Possible values are `LIGHT_SENSOR` (Beacon Pro BP16-3 only) and `MOTION_DETECTION`, `RTC`, `BURST_MODE` or an empty list." }, "moveSuspendTimeout": { "type": [ "integer", "null" ], "minimum": 60, "maximum": 3600, "description": "Time (in seconds) after which a Card Tag CT16-2 engages power saving mode. Possible values are in range between 60 (1 minute) and 3600 (1 hour)." }, "powerSaverAdvertiseInterval": { "deprecated": true, "type": [ "integer", "null" ], "description": "Bluetooth Advertising interval that a Card Tag CT16-2 should use when in the Power Saving mode. Available only on Card Tags CT16-2 with firmware 4.2 or newer." }, "rtc": { "description": "A list of object representing days of a week and hours during that day when a power saving mode should be engaged. Available only on Devices equipped with a Real-Time Clock (RTC).", "type": [ "array", "null" ], "items": { "type": "object", "properties": { "day": { "type": "string", "enum": [ "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" ], "description": "Indicates a day of a week." }, "hours": { "type": "array", "items": { "type": "integer", "minimum": 0, "maximum": 23 } } }, "description": "List of hours (in UTC, using 24h clock) from a day specified in the `day` parameter, during which Power Saving should be enabled, e.g. 17 means Power Saving will be enabled from 17:00 until 17:59 UTC." } }, "lightSensorThreshold": { "type": [ "integer", "null" ], "minimum": 0, "maximum": 100, "description": "Threshold of ambient light intensity, expressed in percents, below which a Device enters the power saving mode. Applicable only to Devices equipped with a light sensor." }, "lightSensorHysteresis": { "type": [ "integer", "null" ], "description": "Light sensor's [hysteresis](https://en.wikipedia.org/wiki/Hysteresis#In_engineering), expressed in percent points. More details in Power Saving guide. Applicable only to Devices equipped with a light sensor." }, "burstOnTime": { "type": [ "integer", "null" ], "minimum": 15, "maximum": 65535, "description": "Number of *seconds* a beacon should broadcast when `BURST_MODE` is active" }, "burstOffTime": { "type": [ "integer", "null" ], "minimum": 1, "maximum": 10080, "description": "Number of *minutes* between each broadcasts when `BURST_MODE` is active" } } }, "SensorSettings": { "type": "object", "description": "Device sensor settings.", "properties": { "samplingInterval": { "type": "integer", "description": "Interval (in seconds) at which sensor data is sampled.", "minimum": 1, "maximum": 3600 }, "loggingFactor": { "type": "integer", "description": "Factor used to determine how often sensor data is logged.", "minimum": 1, "maximum": 65535 } } }, "StitchingPairMinimal": { "type": "object", "required": [ "otherDeviceUniqueId", "pose" ], "properties": { "otherDeviceUniqueId": { "type": "string", "description": "Unique ID of the other device in the stitched pair." }, "pose": { "$ref": "#/$defs/StitchingPose" } } }, "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 }, "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 } } }, "StitchingPivotWorld": { "description": "Pivot (rotation point) of the image in the world coordinates that are shared between stitched devices.\nOrigin is top left corner.", "type": "object", "required": [ "x", "y" ], "properties": { "x": { "description": "X coordinate in world coordinates.", "type": "integer" }, "y": { "description": "Y coordinate in world coordinates.", "type": "integer" } } }, "StitchingPose": { "type": "object", "required": [ "pivotLocal", "pivotWorld", "rotationDeg" ], "properties": { "pivotLocal": { "$ref": "#/$defs/StitchingPivotLocal" }, "pivotWorld": { "$ref": "#/$defs/StitchingPivotWorld" }, "rotationDeg": { "type": "number", "format": "decimal", "description": "Clockwise rotation in degrees around pivot point." } } }, "TemperatureProbe": { "type": "object", "description": "Settings for a temperature probe.", "properties": { "alertMaxEnabled": { "type": "boolean", "description": "Indicates if the maximum temperature alert is enabled." }, "alertMaxLevel": { "type": "number", "format": "float", "description": "The maximum temperature level (in Celsius) to trigger an alert.", "minimum": -273, "maximum": 1000 }, "alertMinEnabled": { "type": "boolean", "description": "Indicates if the minimum temperature alert is enabled." }, "alertMinLevel": { "type": "number", "format": "float", "description": "The minimum temperature level (in Celsius) to trigger an alert.", "minimum": -273, "maximum": 1000 }, "sensorEnabled": { "type": "boolean", "description": "Indicates if the temperature sensor is enabled." } } }, "TemperatureProbesSettings": { "type": "object", "description": "Settings for temperature probes.", "properties": { "probe0": { "$ref": "#/$defs/TemperatureProbe" }, "probe1": { "$ref": "#/$defs/TemperatureProbe" }, "probe2": { "$ref": "#/$defs/TemperatureProbe" } } }, "UniqueId": { "description": "Unique identifier of a device.", "type": "string" }, "UpdatedDate": { "description": "Informs when the object has been updated.", "type": "string", "format": "date-time" } } }