Cumulocity Device Bootstrap API

Zero-touch device onboarding flow. A factory-bootstrapped device authenticates with a shared bootstrap user, polls /devicecontrol/deviceCredentials with its external ID, and receives back tenant-scoped credentials once an admin accepts the registration request in the Device Management UI.

Cumulocity Device Bootstrap API is one of 19 APIs that Cumulocity publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include IoT, Device Onboarding, Bootstrap, and Registration. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

cumulocity-device-bootstrap-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Cumulocity Device Bootstrap API
  version: 10.20.0
  description: |
    Zero-touch device onboarding flow. A factory-bootstrapped device authenticates with a shared bootstrap
    user, polls /devicecontrol/deviceCredentials with its external ID, and receives back tenant-scoped
    credentials once an admin accepts the registration request in the Device Management UI.
servers:
- url: https://{tenant}.cumulocity.com
  variables:
    tenant:
      default: example
security:
- bootstrapAuth: []
- basicAuth: []
tags:
- name: Device Credentials
- name: New Device Requests
paths:
  /devicecontrol/deviceCredentials:
    post:
      tags: [Device Credentials]
      summary: Request Device Credentials
      operationId: requestDeviceCredentials
      description: Called by an unprovisioned device (authenticated as bootstrap user) to poll for credentials.
      requestBody:
        required: true
        content:
          application/vnd.com.nsn.cumulocity.deviceCredentials+json:
            schema:
              $ref: '#/components/schemas/DeviceCredentialsRequest'
      responses:
        '201':
          description: Credentials issued (device registration was accepted).
          content:
            application/vnd.com.nsn.cumulocity.deviceCredentials+json:
              schema:
                $ref: '#/components/schemas/DeviceCredentials'
        '404':
          description: No accepted registration yet — device should retry.
  /devicecontrol/newDeviceRequests:
    get:
      tags: [New Device Requests]
      summary: List New Device Requests
      operationId: listNewDeviceRequests
      responses:
        '200':
          description: A collection of pending registration requests.
    post:
      tags: [New Device Requests]
      summary: Create a New Device Request
      operationId: createNewDeviceRequest
      requestBody:
        required: true
        content:
          application/vnd.com.nsn.cumulocity.newDeviceRequest+json:
            schema:
              $ref: '#/components/schemas/NewDeviceRequest'
      responses:
        '201':
          description: Registration request created.
  /devicecontrol/newDeviceRequests/{id}:
    parameters:
    - name: id
      in: path
      required: true
      schema: {type: string}
    get:
      tags: [New Device Requests]
      summary: Retrieve a New Device Request
      operationId: getNewDeviceRequest
      responses:
        '200':
          description: A single registration request.
    put:
      tags: [New Device Requests]
      summary: Accept or Reject a New Device Request
      operationId: updateNewDeviceRequest
      requestBody:
        required: true
        content:
          application/vnd.com.nsn.cumulocity.newDeviceRequest+json:
            schema:
              $ref: '#/components/schemas/NewDeviceRequest'
      responses:
        '200':
          description: Registration request updated.
    delete:
      tags: [New Device Requests]
      summary: Delete a New Device Request
      operationId: deleteNewDeviceRequest
      responses:
        '204':
          description: Registration request deleted.
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
    bootstrapAuth:
      type: http
      scheme: basic
      description: HTTP Basic with the tenant-wide bootstrap user (devicebootstrap).
  schemas:
    DeviceCredentialsRequest:
      type: object
      required: [id]
      properties:
        id: {type: string, description: External ID of the device.}
    DeviceCredentials:
      type: object
      properties:
        id: {type: string}
        tenantId: {type: string}
        username: {type: string}
        password: {type: string}
        self: {type: string, format: uri}
    NewDeviceRequest:
      type: object
      properties:
        id: {type: string}
        status:
          type: string
          enum: [WAITING_FOR_CONNECTION, PENDING_ACCEPTANCE, ACCEPTED]
        self: {type: string, format: uri}
        creationTime: {type: string, format: date-time}