Kontakt.io Device Management API

REST API for managing Kontakt.io devices in Kio Cloud — devices, configs, firmware, firmware upgrade schedules, commands, orders, managers, namespaces, proximity UUIDs, venues, device sharing and third-party (Meraki) device integrations. Versioned through the Accept header (application/vnd.com.kontakt+json;version=10).

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-device-management-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 email required.

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

OpenAPI Specification

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

    ## Authentication

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

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

    Each API call requires the `Accept` header with the API version. **By default, set to the current stable version:** `application/vnd.com.kontakt+json;version=10`
  contact:
    name: Support
    url: 'https://support.kontakt.io'
    email: support@kontakt.io
  termsOfService: 'https://kontakt.io/legal-documents/terms-of-sale-and-service/'
externalDocs:
  url: 'https://developer.kontakt.io'
servers:
  - url: 'https://dm-api.cloud.us.kontakt.io'
    description: Kio Cloud US region
  - url: 'https://dm-api.cloud.uk.kontakt.io'
    description: Kio Cloud UK region
security:
  - bearer_token: []
  - api_key: []
tags:
  - name: Account
    description: User account management
  - name: Command
    description: 'Commands are a special type of Configs used for initiating some management tasks, e.g. entering bootloader mode'
  - name: Config
    description: Pending configs represent new values for beacon settings that should be applied to actual devices via e.g. Kontakt.io Administration Apps. Creating a new config does not automatically change anything on a real beacon.
  - name: Device
    description: 'The Device resource represents Kontakt.io devices assigned to a particular Kontakt.io Panel account, as well as devices shared with that account from different accounts.'
  - name: Device tags
    description: The device tags
  - name: Device (3rd party)
    description: |
      NOTE: this set of endpoints has been superseded by External Devices functionality.

      These endpoints provide a way to integrate 3rd party Bluetooth-enabled scanning devices into Kontakt.io platform. As of Summer 2018, Kontakt.io is working with manufacturers of enterprise-level networking devices, like Cassia, Ruckus and Meraki, to seamlessly incorporate data collected by their routers and/or WiFi access points into Kontakt.io Data Streams, and to improve Infrastructure Management capabilities.

      Users wanting to take advantage of this feature, first need to provide proper authentication and integrate Kontakt.io Panel account with a 3rd party vendor. Only after that, devices from that vendor can be added into Kontakt.io platform.

      At any given moment a Company can have **only one** integration per 3rd party Vendor, i.e. you can have **one** Cassia *and* **one** Meraki integration, but you can't have e.g. two Meraki integrations.
  - name: Device (Portal Beam)
    description: |
      These endpoints are designed to assist with storing metadata associated with Portal Beams
  - name: External Device
    description: 'External Device feature is a method of adding arbitrary external devices to the system. Such devices have MAC, unique id, and other virtual attributes, but they cannot be managed (configured).'
  - name: Device Federation
    description: Device Federation feature is a method of addding devices to the account by synchronization with an account in different Device Management (source).
  - name: Eddystone
    description: Helper resources for working with Eddystone beacons
  - name: Firmware
    description: Firmware resources
  - name: Firmware Upgrade
    description: Firmware upgrade resources
  - name: GDPR
    description: General Data Protection Regulation compliance resources
  - name: Manager
    description: 'Managers represent user accounts that can manage Kontakt.io Devices. Everyone can freely create an account on [Kontakt.io Web Panel](https://panel.kontakt.io) and then use it to work with this API.'
  - name: Namespaces
    description: List of Eddystone UID Namespaces used on beacons belonging to a Manager
  - name: Order
    description: 'An Order represents all devices that have been purchased in Kontakt.io Web Store in a single transaction. Before these devices can be used with Kontakt.io platform, they need to be added to Kontakt.io Manager Account.'
  - name: Provisioning
    description: Device provisioning for connectivity setup
  - name: Proximities
    description: List of iBeacon Proximity UUIDs used on beacons belonging to a Manager
  - name: Venue
    description: |
      NOTE: this functionality is deprecated.

      Venues help with organising beacons into groups. They may represent physical locations, but not necessarily.

      Currently in the Kontakt.io Web Panel Venues are called *Locations*, but in order to provide backward compatibility, API still uses the original name.
  - name: Sharing
    description: Endpoints related to sharing devices with other users or moving devices between accounts
  - name: Internal
    description: Internal management endpoints with elevated access.
  - name: LoRaWAN
    description: Endpoints for provisioning LoRa gateways in ChirpStack (OTAA activation).
paths:
  /command/encrypt:
    get:
      tags:
        - Command
      summary: Create Encrypted Commands
      description: Returns a list of Base64-encoded configs with encrypted commands for each of devices specified in a request
      parameters:
        - $ref: '#/components/parameters/UniqueIdList'
        - name: command
          in: query
          required: true
          description: |
            A Command that should be encrypted in configs for each of devices specified in a request

            * `RESET` - Reboots the device
            * `NONCONNECTABLE` - Connectable BLE packets will be non-connectable until a next reboot
            * `SLEEP` - Device enters a sleep mode (stops broadcasting all packets)
            * `BLINK_10S` - Primary LED blinks for 10 seconds or LED blinks with the primary colour for 10 seconds
            * `BLINK_30S` - Primary LED blinks for 30 seconds or LED blinks with the primary colour for 30 seconds
            * `BLINK2_10S` - Secondary LED blinks for 10 seconds or LED blinks with the secondary colour for 10 seconds
            * `BLINK2_30S` - Secondary LED blinks for 30 seconds or LED blinks with the secondary colour for 30 seconds

            Please keep in mind that not all devices can support all of these commands. Refer to device specification to learn more.
          schema:
            type: string
            enum:
              - RESET
              - NONCONNECTBLE
              - SLEEP
              - BLINK_10S
              - BLINK_30S
              - BLINK2_10S
              - BLINK2_30S
        - $ref: '#/components/parameters/accept'
      responses:
        '200':
          description: OK
          content:
            application/vnd.com.kontakt+json;version=10:
              schema:
                type: object
                properties:
                  commands:
                    type: array
                    items:
                      $ref: '#/components/schemas/EncryptedConfig'
                  searchMeta:
                    $ref: '#/components/schemas/SearchMeta'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      security:
        - bearer_token: []
        - api_key: []
  /config:
    get:
      tags:
        - Config
      summary: Get Configs
      description: |-
        Returns all pending configurations for the specified Devices or device type. 

        If no query parameters are provided, this endpoint returns all pending configurations that can be applied to Devices that the user has access to.
      parameters:
        - name: uniqueId
          in: query
          description: List of Unique IDs of Devices which pending configurations should be returned
          required: false
          schema:
            type: array
            items:
              type: string
        - name: deviceType
          in: query
          description: Device type. Only pending configurations for devices of this type will be returned
          required: false
          schema:
            type: string
            enum:
              - BEACON
              - GATEWAY
            default: BEACON
        - $ref: '#/components/parameters/QueryMaxResult'
        - $ref: '#/components/parameters/QueryType'
        - $ref: '#/components/parameters/accept'
        - $ref: '#/components/parameters/QueryStartIndex'
      responses:
        '200':
          description: OK
          content:
            application/vnd.com.kontakt+json;version=10:
              schema:
                type: object
                properties:
                  configs:
                    type: array
                    items:
                      oneOf:
                        - $ref: '#/components/schemas/PendingBeaconConfig'
                        - $ref: '#/components/schemas/PendingGatewayConfig'
                  searchMeta:
                    $ref: '#/components/schemas/SearchMeta'
      security:
        - bearer_token: []
        - api_key: []
  /config/create:
    post:
      tags:
        - Config
      summary: Create a Config
      description: |-
        Create or update a *pending configuration* for one or more devices.

        Please be aware that doing this alone *will not make any changes on actual, physical beacons*, unless these beacons are in range of a Kontakt.io gateway (Portal Light).

        Otherwise, this config has to be encrypted, downloaded, and then applied to a device via a Bluetooth connection. Applying the config over a Bluetooth connection is usually done from the Kio Setup Manager app or a 3rd-party custom app that implements one of Kontakt.io mobile SDKs.

        **Not all device models accept all configuration parameters available.** Please check first if device is capable of accepting given configuration parameter.

        Except for `uniqueId` and `deviceType` which are mandatory you only need to provide configuration parameters you wish to change.
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              oneOf:
                - $ref: '#/components/schemas/NewBeaconConfig'
                - $ref: '#/components/schemas/NewGatewayConfig'
              required:
                - uniqueId
                - deviceType
      responses:
        '201':
          description: |-
            Created. The request was processed by the server. This does not mean the device has received or applied the config yet — devices pull pending configs asynchronously.

            The response body is an array of pending-config records and shows exactly what was created. How to read it:

            - If the response array does not contain a requested `uniqueId`, the config was not created for that device. The device was unknown to the server, or your API key does not have access to it.
            - For `deviceType=BEACON`, keys in `customConfiguration` that the device model does not accept are silently dropped.
            - For `deviceType=GATEWAY`, unknown `applications.system.*` keys cause the request to be rejected with HTTP 422 (no `201` is returned in that case).

            To check what is pending on the server side later, call `GET /config?uniqueId=...`.
          content:
            application/vnd.com.kontakt+json;version=10:
              schema:
                type: array
                items:
                  oneOf:
                    - $ref: '#/components/schemas/PendingBeaconConfig'
                    - $ref: '#/components/schemas/PendingGatewayConfig'
              examples:
                full-success:
                  summary: Full success — every uniqueId and field persisted
                  value:
                    - uniqueId: AAAA
                      model: SMART_BADGE_3_MINI
                      created: '2026-05-04T12:00:00.000Z'
                      updated: '2026-05-04T12:00:00.000Z'
                      txPower: 6
                no-devices-resolved:
                  summary: 201 with empty array — no submitted uniqueId was visible to the caller
                  value: []
                custom-pid-stripped:
                  summary: 201 with a customConfiguration PID silently dropped (unsupported by device)
                  value:
                    - uniqueId: AAAA
                      model: SMART_BADGE_3_MINI
                      created: '2026-05-04T12:00:00.000Z'
                      updated: '2026-05-04T12:00:00.000Z'
                      customConfiguration: {}
        '401':
          description: Unauthorized — the request did not present valid authentication.
        '403':
          description: Forbidden — the caller authenticated but lacks the `CONFIG_CREATE` permission. Note that missing per-device access does not produce 403; it produces a 201 with the affected `uniqueId`s filtered out of the response array (see the 201 response description).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '409':
          description: 'Conflict — a config-level rule was violated. Examples include a concurrent create for the same `uniqueId` (duplicate key), the resulting configuration exceeding the device''s storage budget, or violating power-saving / lock constraints.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: 'Unprocessable Entity — a hard validation error. Examples include invalid types or ranges, malformed `customConfiguration` PIDs (non-hex value, dotted name, value longer than 32 characters), interval below the chip''s minimum, invalid enum values, or `deviceType` mismatch.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      parameters:
        - $ref: '#/components/parameters/accept'
      security:
        - bearer_token: []
        - api_key: []
  /config/encrypt:
    get:
      tags:
        - Config
      summary: Encrypt a Config
      description: |-
        Returns a list of Base64-encoded configs with encrypted pending configurations for each   Device or Device types specified in a request. This payload can be sent directly via Bluetooth to a device to change its settings. 

        If no query parameters are provided, this endpoint returns encrypted versions of all pending configurations.
      parameters:
        - name: uniqueId
          in: query
          description: List of Unique IDs with existing pending configurations
          required: false
          schema:
            type: array
            items:
              type: string
        - name: clientType
          in: query
          required: false
          schema:
            type: string
            enum:
              - MANAGER
              - GATEWAY
            default: MANAGER
        - $ref: '#/components/parameters/accept'
      responses:
        '200':
          description: OK
          content:
            application/vnd.com.kontakt+json;version=10:
              schema:
                type: object
                properties:
                  configs:
                    type: array
                    items:
                      $ref: '#/components/schemas/EncryptedConfig'
                  searchMeta:
                    $ref: '#/components/schemas/SearchMeta'
      security:
        - bearer_token: []
        - api_key: []
  /config/delete:
    post:
      tags:
        - Config
      summary: Delete a Config
      description: Deletes pending configurations as specified by devices' unique IDs.
      parameters:
        - $ref: '#/components/parameters/UniqueIdList'
        - $ref: '#/components/parameters/accept'
      responses:
        '200':
          description: OK
          content:
            application/vnd.com.kontakt+json; version=10:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Success message
                    example: Delete successful.
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      security:
        - bearer_token: []
        - api_key: []
  /config/export:
    post:
      tags:
        - Config
      summary: Export Configs
      description: |
        #### Note: this endpoint requires a user to have permission to call POST /config/create endpoint.

        Writes pending configurations merged with the current state of devices into a CSV file. The link to this file
        will be returned in the response.

        Merging algorithm works as follows - for any given device's parameter:

        * if it's a virtual parameter OR a physical one but no pending config exists which aims to change its value - the current value of this parameter is used.
        * if it's a physical parameter with a pending config changing its value - the value from that pending config is used.

        List of parameters contained in the resulting CSV file:

        | Parameter | Comment |
        |-----------|---------|
        |uniqueId| |
        |mac| |
        |alias| |
        |tags| |
        |currentLocation.campusId| |
        |currentLocation.campusName| |
        |currentLocation.buildingId| |
        |currentLocation.buildingName| |
        |currentLocation.floorId| |
        |currentLocation.floorName| |
        |currentLocation.roomId| |
        |currentLocation.roomName| |
        |packets| |
        |profiles| |
        |proximity| |
        |major| |
        |minor| |
        |namespace| |
        |instanceId| |
        |lightSensorSamplingInterval| |
        |url| |
        |txPower| |
        |shuffled| |
        |interval| |
        |name| |
        |rssi0m| |
        |rssi1m| |
        |powerSaving.mode| See the `powerSaving.mode` field in the `Get Devices` endpoint response for possible values and descriptions. `OFF` = empty list in API response (default configuration); empty = not applicable to the device. |
        |powerSaving.moveSuspendTimeout| |
        |powerSaving.lightSensorHysteresis| |
        |powerSaving.lightSensorThreshold| |
        |powerSaving.rtc.MON| |
        |powerSaving.rtc.TUE| |
        |powerSaving.rtc.WED| |
        |powerSaving.rtc.THU| |
        |powerSaving.rtc.FRI| |
        |powerSaving.rtc.SAT| |
        |powerSaving.rtc.SUN| |
        |eidRotationPeriodExponent| |
        |wifiSsid| |
        |wifiUserName| |
        |wifiProtocol| |
        |wifiPassword| |
        |ibeaconUUID| |
        |rssi_threshold| |
        |filtration_mask| |
        |fallbackSsid| |
        |fallbackPass| |
        |fallbackServer| |
        |apiHost| |
        |dataHost| |
        |otaUrl| |
        |proxyURL| |
        |proxyPort| |
        |eapType| |
        |bleScanChannel| |
        |accelerometer.features| |
        |accelerometer.sensitivity| |
        |accelerometer.preset| |
        |accelerometer.move.threshold| |
        |accelerometer.move.duration| |
        |accelerometer.doubleTap.threshold| |
        |accelerometer.doubleTap.timeLimit| |
        |accelerometer.doubleTap.timeLatency| |
        |accelerometer.doubleTap.timeWindow| |
        |accelerometer.move.detectionFlags| |
        |accelerometer.move.detectionFlagsJunction| |
        |accelerometer.doubleTap.detectionFlags| |
        |accelerometer.highPass.mode| |
        |accelerometer.highPass.cutoffFrequency| |
        |accelerometer.highPass.moveDetection| |
        |accelerometer.highPass.doubleTapDetection| |
        |accelerometer.highPass.accelerometerData| |
        |accelerometer.highPass.reference| |
        |batteryLevel| |
        |lastSeen| |
        |deployment.status| |
        |secureProximity| |
        |vendor| |
        |firmware| |
        |product| |
        |productCode| |
        |secureNamespace| |
        |orderId| |
        |category| |
        |roomNumber| |
        |temperatureOffset| |
        |telemetryInterval| |
        |telemetryFields| See the `telemetryFields` field in the `Get Devices` endpoint response for possible values and descriptions. `OFF` = empty list in API response (default configuration); empty = not applicable to the device. |
        |eidIdentityKey| |
        |kontaktFrameInterval| |
        |locationFrameChannel| |
        |locationFrameInterval| |
        |buttonFeatures| See the `buttonFeatures` field in the `Get Devices` endpoint response for possible values and descriptions. `OFF` = empty list in API response (default configuration); empty = not applicable to the device. |
        |multiClickCount| Number of clicks required for multi-click detection (1–10). |
        |panicDuration| |
        |bleScan.duration| |
        |bleScan.models| |
        |bleScan.force| |
        |bleScan.interval| |
        |bleScan.size| Maximum number of scanned items reported per scan (0–255). Requires nrf52 firmware >= 2.5.88. |
        |occupancy.sleepInterval| |
        |occupancy.minInterval| |
        |occupancy.footfallLine| |
        |occupancy.calibration| |
        |occupancy.model| |
        |irBlinkInterval| |
        |irReceiver.wakeUpInterval| |
        |irReceiver.maxListenInterval| |
        |irReceiver.disableOnNoMotion| |
        |irTransmitter.intensity| |
        |irTransmitter.dutyCycle| |
        |irTransmitter.protoV2| |
        |irDetectionParams| |
      parameters:
        - $ref: '#/components/parameters/UniqueIdList'
        - name: deviceType
          in: query
          description: 'Device type filter. If specified, only exports the devices with the type(s) specified. If not, all devices will be exported.'
          schema:
            type: array
            items:
              type: string
              example:
                - BEACON
                - GATEWAY
        - $ref: '#/components/parameters/accept'
      responses:
        '200':
          description: OK
          content:
            application/vnd.com.kontakt+json; version=10:
              schema:
                type: object
                description: 'Contains the link to exported file, plus the list of uniqueIds in it.'
                properties:
                  url:
                    type: string
                    description: URL to download the exported file from.
                    example: 'https://dm-api.cloud.us.kontakt.io/config/bdf5b73a-df5a-466d-89ba-f0c4b6a2148c/csv'
                  uniqueIds:
                    description: |
                      Specifies the devices included in the exported file. It could differ from
                      the requested list due to insufficient permissions.
                    type: array
                    items:
                      $ref: '#/components/schemas/UniqueId'
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      security:
        - bearer_token: []
        - api_key: []
  /config/import:
    post:
      tags:
        - Config
      summary: Import Configs
      description: |
        #### Note: this endpoint requires a user to have permission to call POST /config/create endpoint.

        Imports a CSV file with configuration parameters, virtual or physical, and applies them to the devices
        as pointed in that file.

        Virtual parameters are modified instantly upon successful response, whereas for physical parameters a pending
        configuration is created.

        This endpoint can take in a file generated by the POST /config/export without any modifications or modified as needed,
        but also any valid CSV file.        

        #### Note: All rows will be processed even if one of them contains errors - this is to aid in fixing errors in CSV files and resubmitting it.However **if one of the rows contains errors, the proper rows won't take effect**.
        #### The proper course of action when an error is returned for one or more of the rows is fixing errors in the file and submitting it again.


        ## File format 

        Below is a comma-separated text file rendered as a table:

        |  uniqueId  | parameter 1 | ... | parameter N |
        |------------|-------------|-----|-------------|
        |  11P10AvW  |      1      | ... | abctexttext |
        |  11S13AhY  |      42     | ... |  textvalue  |
        | .......... |     ...     | ... |     ...     |
        | uniqueId N |             | ... |     abd     |

        In other words, each row is a *uniqueId* of a device followed by configuration properties we want to change in it.

        Lack of value in a cell means no change to that value, with some exceptions:
        * alias: lack of value resets it to an empty string
        * tags: lack of value resets it to an empty list

        | Supported parameters |
        |----------------------|
        |deployment.status|
        |alias|
        |tags|
        |url|
        |namespace|
        |instanceId|
        |name|
        |password|
        |proximity|
        |major|
        |minor|
        |txPower|
        |interval|
        |shuffled|
        |lightSensorSamplingInterval|
        |eidRotationPeriodExponent|
        |profiles|
        |packets|
        |rssi0m|
        |rssi1m|
        |powerSaving.mode|
        |powerSaving.moveSuspendTimeout|
        |powerSaving.lightSensorHysteresis|
        |powerSaving.lightSensorThreshold|
        |powerSaving.rtc.MON|
        |powerSaving.rtc.TUE|
        |powerSaving.rtc.WED|
        |powerSaving.rtc.THU|
        |powerSaving.rtc.FRI|
        |powerSaving.rtc.SAT|
        |powerSaving.rtc.SUN|
        |accelerometer.features|
        |accelerometer.sensitivity|
        |accelerometer.preset|
        |accelerometer.move.threshold|
        |accelerometer.move.duration|
        |accelerometer.move.detectionFlags|
        |accelerometer.move.detectionFlagsJunction|
        |accelerometer.doubleTap.threshold|
        |accelerometer.doubleTap.timeLimit|
        |accelerometer.doubleTap.timeLatency|
        |accelerometer.doubleTap.timeWindow|
        |accelerometer.doubleTap.detectionFlags|
        |accelerometer.highPass.mode|
        |accelerometer.highPass.cutoffFrequency|
        |accelerometer.highPass.moveDetection|
        |accelerometer.highPass.doubleTapDetection|
        |accelerometer.highPass.accelerometerData|
        |accelerometer.highPass.reference|
        |occupancy.sleepInterval|
        |occupancy.minInterval|
        |occupancy.model|
        |occupancy.footfallLine|
        |occupancy.calibration|
        |irReceiver.wakeUpInterval|
        |irReceiver.maxListenInterval|
        |irReceiver.disableOnNoMotio|
        |irTransmitter.intensity|
        |irTransmitter.dutyCycle|
        |irTransmitter.protoV2|
        |irDetectionParams|
        |irBlinkInterval|
        |roomNumber|
        |temperatureOffset|
        |telemetryInterval|
        |telemetryFields|
        |eidIdentityKey|
        |kontaktFrameInterval|
        |locationFrameChannel|
        |locationFrameInterval|
        |buttonFeatures|
        |multiClickCount|
        |panicDuration|
        |bleScan.duration|
        |bleScan.models|
        |bleScan.force|
        |bleScan.interval|
        |bleScan.size|
        |wifiSsid|
        |wifiUserName|
        |wifiProtocol|
        |wifiPassword|
        |ibeaconUUID|
        |rssi_threshold|
        |filtration_mask|
        |apiHost|
        |dataHost|
        |otaUrl|
        |proxyURL|
        |proxyPort|
        |eapType|
        |bleScanChannel|

        | Ignored parameters (due to them being read-only) |
        |----------------------|
        |mac|
        |orderId|
        |batteryLevel|
        |lastSeen|
        |category|
        |firmware|
        |product|
        |productCode|
        |secureProximity|
        |vendor|
        |secureNamespace|
        |fallbackSsid|
        |fallbackPass|
        |fallbackServer|
      parameters:
        - $ref: '#/components/parameters/accept'
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: 'a CSV file, structure as described in this endpoint''s documentation.'
      responses:
        '200':
          description: OK
          content:
            application/vnd.com.kontakt+json; version=10:
              schema:
                type: array
                description: Response with statuses per uniqueId
                items:
                  type: object
                  properties:
                    message:
                      type: string
                      description: 'Empty if imported successfully, contains an error message otherwise'
                      example: IBeacon UUID field is not a proper UUID
                    status:
                      type: string
                      description: |
                        ERROR means this row contained an error and needs to be fixed.
                        ROLLED_BACK means this row is okay, but other rows contained errors so the changes won't take effect.
                      enum:
                        - SUCCESS
                        - ERROR
                        - ROLLED_BACK
                    uniqueId:
                      $ref: '#/components/schemas/UniqueId'
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
      security:
        - bearer_token: []
        - api_key: []
  /config/readall:
    get:
      tags:
        - Config
      summary: Read raw device configuration
      description: Reads device configuration and returns its state in a raw form (secure response). It can be used as an input for the `POST /device/sync` endpoint to synchronize device state with the cloud.
      parameters:
        - $ref: '#/components/parameters/UniqueIdList'
      responses:
        '200':
          description: Device configuration returned
          content:
            application/vnd.com.kontakt+json;version=10:
              schema:
                type: object
                properties:
                  configs:
                    type: array
                    items:
                      $ref: '#/components/schemas/EncryptedConfig'
                  searchMeta:
                    $ref: '#/components/schemas/SearchMeta'
        '401':
          description: Unauthorized
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
           

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