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: 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