Kontakt.io Config API

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.

Business capability
IT Infrastructure Management BC-600.50

Operations 8

GET /config Get Configs
POST /config/create Create a Config
GET /config/encrypt Encrypt a Config
POST /config/delete Delete a Config
POST /config/export Export Configs
POST /config/import Import Configs
GET /config/readall Read raw device configuration
GET /config/{fileName}/csv Download CSV file with exported devices

Documentation

Specifications

Other Resources

Work with this as data

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

MCP server

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

https://apis.io/mcp

Tools for apis

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

Call it yourself

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

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

Get an API key

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

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

OpenAPI Specification

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


    ## Authentication


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


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


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

    '
  contact:
    name: Support
    url: https://support.kontakt.io
    email: support@kontakt.io
  termsOfService: https://kontakt.io/legal-documents/terms-of-sale-and-service/
servers:
- url: https://dm-api.cloud.us.kontakt.io
  description: Kio Cloud US region
- url: https://dm-api.cloud.uk.kontakt.io
  description: Kio Cloud UK region
security:
- bearer_token: []
- api_key: []
tags:
- name: 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.
paths:
  /config:
    get:
      tags:
      - Config
      summary: Get Configs
      description: "Returns all pending configurations for the specified Devices or device type. \n\nIf 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. \n\nIf 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.\n\nImports a CSV file with configuration parameters, virtual or physical, and applies them to the devices\nas pointed in that file.\n\nVirtual parameters are modified instantly upon successful response, whereas for physical parameters a pending\nconfiguration is created.\n\nThis endpoint can take in a file generated by the POST /config/export without any modifications or modified as needed,\nbut also any valid CSV file.        \n\n#### 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**.\n#### 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.\n\n\n## File format \n\nBelow is a comma-separated text file rendered as a table:\n\n|  uniqueId  | parameter 1 | ... | parameter N |\n|------------|-------------|-----|-------------|\n|  11P10AvW  |      1      | ... | abctexttext |\n|  11S13AhY  |      42     | ... |  textvalue  |\n| .......... |     ...     | ... |     ...     |\n| uniqueId N |             | ... |     abd     |\n\nIn other words, each row is a *uniqueId* of a device followed by configuration properties we want to change in it.\n\nLack of value in a cell means no change to that value, with some exceptions:\n* alias: lack of value resets it to an empty string\n* tags: lack of value resets it to an empty list\n\n| Supported parameters |\n|----------------------|\n|deployment.status|\n|alias|\n|tags|\n|url|\n|namespace|\n|instanceId|\n|name|\n|password|\n|proximity|\n|major|\n|minor|\n|txPower|\n|interval|\n|shuffled|\n|lightSensorSamplingInterval|\n|eidRotationPeriodExponent|\n|profiles|\n|packets|\n|rssi0m|\n|rssi1m|\n|powerSaving.mode|\n|powerSaving.moveSuspendTimeout|\n|powerSaving.lightSensorHysteresis|\n|powerSaving.lightSensorThreshold|\n|powerSaving.rtc.MON|\n|powerSaving.rtc.TUE|\n|powerSaving.rtc.WED|\n|powerSaving.rtc.THU|\n|powerSaving.rtc.FRI|\n|powerSaving.rtc.SAT|\n|powerSaving.rtc.SUN|\n|accelerometer.features|\n|accelerometer.sensitivity|\n|accelerometer.preset|\n|accelerometer.move.threshold|\n|accelerometer.move.duration|\n|accelerometer.move.detectionFlags|\n|accelerometer.move.detectionFlagsJunction|\n|accelerometer.doubleTap.threshold|\n|accelerometer.doubleTap.timeLimit|\n|accelerometer.doubleTap.timeLatency|\n|accelerometer.doubleTap.timeWindow|\n|accelerometer.doubleTap.detectionFlags|\n|accelerometer.highPass.mode|\n|accelerometer.highPass.cutoffFrequency|\n|accelerometer.highPass.moveDetection|\n|accelerometer.highPass.doubleTapDetection|\n|accelerometer.highPass.accelerometerData|\n|accelerometer.highPass.reference|\n|occupancy.sleepInterval|\n|occupancy.minInterval|\n|occupancy.model|\n|occupancy.footfallLine|\n|occupancy.calibration|\n|irReceiver.wakeUpInterval|\n|irReceiver.maxListenInterval|\n|irReceiver.disableOnNoMotio|\n|irTransmitter.intensity|\n|irTransmitter.dutyCycle|\n|irTransmitter.protoV2|\n|irDetectionParams|\n|irBlinkInterval|\n|roomNumber|\n|temperatureOffset|\n|telemetryInterval|\n|telemetryFields|\n|eidIdentityKey|\n|kontaktFrameInterval|\n|locationFrameChannel|\n|locationFrameInterval|\n|buttonFeatures|\n|multiClickCount|\n|panicDuration|\n|bleScan.duration|\n|bleScan.models|\n|bleScan.force|\n|bleScan.interval|\n|bleScan.size|\n|wifiSsid|\n|wifiUserName|\n|wifiProtocol|\n|wifiPassword|\n|ibeaconUUID|\n|rssi_threshold|\n|filtration_mask|\n|apiHost|\n|dataHost|\n|otaUrl|\n|proxyURL|\n|proxyPort|\n|eapType|\n|bleScanChannel|\n\n| Ignored parameters (due to them being read-only) |\n|----------------------|\n|mac|\n|orderId|\n|batteryLevel|\n|lastSeen|\n|category|\n|firmware|\n|product|\n|productCode|\n|secureProximity|\n|vendor|\n|secureNamespace|\n|fallbackSsid|\n|fallbackPass|\n|fallbackServer|\n"
      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: []
components:
  schemas:
    ApiError:
      type: object
      title: API Error
      properties:
        id:
          type: string
          description: Internal API error code
          example: API_ERROR_1693477316246
        status:
          type: number
          description: HTTP response status code
          example: 422
        cause:
          type: string
          description: General cause of the error
          example: ValidationError
        message:
          type: string
          description: Error message with an explanation of the problem
          example: Invalid value for field name
        details:
          type:
          - array
          - 'null'
          description: Optional details
          items:
            type: object
            properties:
              field:
                type: string
                example: name
              error:
                type: string
                description: Error name
                example: INVALID_VALUE
              message:
                type: string
                description: Error message
                example: Invalid value for field name
    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'
    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
    OccupancyPhysicalSettings:
      type: object
      x-stoplight:
        id: ri25ewp162tv9
      description: Occupancy settings. Only applicable to devices with occupancy capability.
      properties:
        sleepInterval:
          type: integer
          minimum: 0
          maximum: 65535
          default: 0
          description: Occupancy sampling interval in seconds when in power-saving mode (outside of working hours).
        minInterval:
          type: integer
          minimum: 0
          maximum: 65535
          default: 60
          description: Min sampling interval in seconds. 0 means disabled.
        calibration:
          type: integer
          minimum: -128
          maximum: 127
          default: 0
          description: Common threshold delta (all occupancy modes). Allows to fine-tune the sensitivity relative to the newest default. For example, use -5 to lower the threshold by 5 units from the default (allow more detections), or conversely setting it to 5 adds 5 to that threshold, reducing false positives. In other words, this is a linear value, not a percentage.
        sensitivity:
          type: integer
          minimum: 0
          maximum: 100
          deprecated: true
          description: Deprecated! Please use the calibration parameter instead. Percentage of sensitivity. 0-100, 0 for very strict, 100 accept everything
        model:
          type: integer
          description: "Detection model. \n\n0 - static occupancy.  \n2 - traffic footfall."
        footfallLine:
          type: string
          default: 28502800
          description: Threshold line for footfall detection. [x0, y0, x1, y1] pixel coordinates for the line. Hex encoded.
        footfallSensitivity:
          type: integer
          minimum: 0
          maximum: 100
          default: 40
          deprecated: true
          description: Deprecated! Please use the calibration parameter instead. Sensitivity for accepting footfall tracks. 0-100, 0 for very strict, 100 accept everything
    PendingBeaconConfig:
      description: Pending Beacon Configuration.
      x-stoplight:
        id: gnufpxhymraym
      allOf:
      - $ref: '#/components/schemas/BeaconConfig'
      - type: object
        properties:
          created:
            $ref: '#/components/schemas/CreatedDate'
          updated:
            $ref: '#/components/schemas/UpdatedDate'
          uniqueId:
            $ref: '#/components/schemas/UniqueId'
          model:
            $ref: '#/components/schemas/DeviceModel'
      - $ref: '#/components/schemas/ConfigLocksResponse'
    LockDetailsConfirmationId:
      type: string
      description: The value included in the DeviceChangedEvent.UPDATED to confirm that a specific configuration has been applied on a device
      example: ed26348a-e33e-428c-a343-33e0054ebdf9
    ConfigLocksRequest:
      type: object
      properties:
        locks:
          type: object
          properties:
            roomNumber:
              $ref: '#/components/schemas/LockDetailsConfirmationId'
            temperatureMonitor:
              $ref: '#/components/schemas/LockDetailsConfirmationId'
    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
          descripti

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