Kontakt.io · Schema
PendingBeaconConfig
Pending Beacon Configuration.
CompanyIoTRTLSHealthcareAsset TrackingLocationOccupancyBluetoothDevice ManagementTelemetrySensorsStreaming
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/kontaktio/main/json-schema/kontaktio-pending-beacon-config-schema.json",
"title": "PendingBeaconConfig",
"description": "Pending Beacon Configuration.",
"x-generated": "2026-10-12",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/kontaktio-config-api-openapi.yml#/components/schemas/PendingBeaconConfig",
"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"
}
],
"$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"
},
"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`."
},
"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"
]
}
}
},
"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,
"m
# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kontaktio/refs/heads/main/json-schema/kontaktio-pending-beacon-config-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/kontaktio-pending-beacon-config"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.