---
title: "Create Or Update Device (saveDevice)"
method: POST
path: "/api/device"
tags: ["device-controller"]
---

# Create Or Update Device (saveDevice)

`POST /api/device`

Create or update the Device. When creating device, platform generates Device Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). Device credentials are also generated if not provided in the 'accessToken' request parameter. The newly created device id will be present in the response. Specify existing Device id to update the device. Referencing non-existing device Id will cause 'Not Found' error.

Device name is unique in the scope of tenant. Use unique identifiers like MAC or IMEI for the device names and non-unique 'label' field for user-friendly visualization purposes.Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Device entity. 

Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.

## Query parameters

- `accessToken` string
- `nameConflictPolicy` 'FAIL' | 'UNIQUIFY'
- `uniquifySeparator` string
- `uniquifyStrategy` 'RANDOM' | 'INCREMENTAL'

## Request body

- Device
  - `id` DeviceId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'DEVICE', required — string
  - `createdTime` integer — Timestamp of the device creation, in milliseconds
  - `tenantId` TenantId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'TENANT', required — string
  - `customerId` CustomerId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'CUSTOMER', required — string
  - `name` string, required — Unique Device Name in scope of Tenant
  - `type` string — Device Profile Name
  - `label` string — Label that may be used in widgets
  - `deviceProfileId` DeviceProfileId, required
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'DEVICE_PROFILE', required — string
  - `firmwareId` OtaPackageId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'OTA_PACKAGE', required — string
  - `softwareId` OtaPackageId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'OTA_PACKAGE', required — string
  - `version` integer
  - `additionalInfo` unknown
  - `deviceData` DeviceData
    - `configuration` DefaultDeviceConfiguration
      - `type` string, required
    - `transportConfiguration` union — Device transport configuration used to connect the device
      - CoapDeviceTransportConfiguration
        - `type` string, required
        - `powerMode` 'PSM' | 'DRX' | 'E_DRX'
        - `psmActivityTimer` integer
        - `edrxCycle` integer
        - `pagingTransmissionWindow` integer
      - DefaultDeviceTransportConfiguration
        - `type` string, required
      - Lwm2mDeviceTransportConfiguration
        - `type` string, required
        - `powerMode` 'PSM' | 'DRX' | 'E_DRX'
        - `psmActivityTimer` integer
        - `edrxCycle` integer
        - `pagingTransmissionWindow` integer
      - MqttDeviceTransportConfiguration
        - `type` string, required
      - SnmpDeviceTransportConfiguration
        - `type` string, required
        - `host` string
        - `port` integer
        - `protocolVersion` 'V1' | 'V2C' | 'V3'
        - `community` string
        - `username` string
        - `securityName` string
        - `contextName` string
        - `authenticationProtocol` 'SHA_1' | 'SHA_224' | 'SHA_256' | 'SHA_384' | 'SHA_512' | 'MD5'
        - `authenticationPassphrase` string
        - `privacyProtocol` 'DES' | 'AES_128' | 'AES_192' | 'AES_256'
        - `privacyPassphrase` string
        - `engineId` string

## Response `200`

OK

- Device
  - `id` DeviceId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'DEVICE', required — string
  - `createdTime` integer — Timestamp of the device creation, in milliseconds
  - `tenantId` TenantId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'TENANT', required — string
  - `customerId` CustomerId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'CUSTOMER', required — string
  - `name` string, required — Unique Device Name in scope of Tenant
  - `type` string — Device Profile Name
  - `label` string — Label that may be used in widgets
  - `deviceProfileId` DeviceProfileId, required
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'DEVICE_PROFILE', required — string
  - `firmwareId` OtaPackageId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'OTA_PACKAGE', required — string
  - `softwareId` OtaPackageId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'OTA_PACKAGE', required — string
  - `version` integer
  - `additionalInfo` unknown
  - `deviceData` DeviceData
    - `configuration` DefaultDeviceConfiguration
      - `type` string, required
    - `transportConfiguration` union — Device transport configuration used to connect the device
      - CoapDeviceTransportConfiguration
        - `type` string, required
        - `powerMode` 'PSM' | 'DRX' | 'E_DRX'
        - `psmActivityTimer` integer
        - `edrxCycle` integer
        - `pagingTransmissionWindow` integer
      - DefaultDeviceTransportConfiguration
        - `type` string, required
      - Lwm2mDeviceTransportConfiguration
        - `type` string, required
        - `powerMode` 'PSM' | 'DRX' | 'E_DRX'
        - `psmActivityTimer` integer
        - `edrxCycle` integer
        - `pagingTransmissionWindow` integer
      - MqttDeviceTransportConfiguration
        - `type` string, required
      - SnmpDeviceTransportConfiguration
        - `type` string, required
        - `host` string
        - `port` integer
        - `protocolVersion` 'V1' | 'V2C' | 'V3'
        - `community` string
        - `username` string
        - `securityName` string
        - `contextName` string
        - `authenticationProtocol` 'SHA_1' | 'SHA_224' | 'SHA_256' | 'SHA_384' | 'SHA_512' | 'MD5'
        - `authenticationPassphrase` string
        - `privacyProtocol` 'DES' | 'AES_128' | 'AES_192' | 'AES_256'
        - `privacyPassphrase` string
        - `engineId` string

---

[API](https://skmtc.net/thingsboard/apis/thingsboard-rest-api.md) · [All operations](https://skmtc.net/thingsboard/apis/thingsboard-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/thingsboard/thingsboard-rest-api/revisions/40169ccdec5c/schema)
