SmallStep Device Inventory API

Manage your device inventory

OpenAPI Specification

smallstep-device-inventory-api-openapi.yml Raw ↑
openapi: 3.1.1
info:
  contact:
    email: support@smallstep.com
    name: Smallstep Support
    url: https://support.smallstep.com
  description: '# Getting Started

    First you''ll need to get an API token from the Team Settings page of your [Smallstep dashboard](https://smallstep.com/app).


    Then you can try [listing certificates](/operations/list-certificates) for your first API call:

    ```

    set +o history

    echo "Authorization: Bearer [your API token]" > api_headers

    set -o history

    curl -H @api_headers https://gateway.smallstep.com/api/certificates

    ```


    More resources:

    * [Terraform Provider](https://github.com/smallstep/terraform-provider-smallstep)

    * [Python Client](https://github.com/smallstep/smallstep-python)

    '
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
  summary: Smallstep API
  title: Smallstep Authentication Device Inventory API
  version: '2025-01-01'
servers:
- url: https://gateway.smallstep.com/api
security:
- JWT: []
tags:
- description: Manage your device inventory
  name: Device Inventory
paths:
  /devices:
    parameters:
    - $ref: '#/components/parameters/requestID'
    - $ref: '#/components/parameters/version'
    - $ref: '#/components/parameters/accept'
    get:
      description: Get a page of devices matching the given filters.
      operationId: ListDevices
      parameters:
      - $ref: '#/components/parameters/pagination'
      - $ref: '#/components/parameters/deviceFilters'
      - $ref: '#/components/parameters/deviceSort'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/device'
                type: array
          description: 'A page of devices.

            '
          headers:
            X-Next-Cursor:
              $ref: '#/components/headers/X-Next-Cursor'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            X-Smallstep-Api-Version:
              $ref: '#/components/headers/X-Smallstep-Api-Version'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      security:
      - JWT:
        - list-devices
      summary: List Devices
      tags:
      - Device Inventory
    post:
      description: 'Add a device record. If a device with the same permanent identifier has

        been synced from an MDM, then the response will be a merged record with

        data from both the request and the MDM.

        '
      operationId: PostDevices
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/deviceRequest'
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/device'
          description: 'The added device.

            '
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            X-Smallstep-Api-Version:
              $ref: '#/components/headers/X-Smallstep-Api-Version'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '409':
          $ref: '#/components/responses/409'
        '422':
          $ref: '#/components/responses/422'
        '500':
          $ref: '#/components/responses/500'
      security:
      - JWT:
        - post-devices
      summary: Add Device
      tags:
      - Device Inventory
  /devices/{deviceID}:
    parameters:
    - $ref: '#/components/parameters/requestID'
    - $ref: '#/components/parameters/version'
    - $ref: '#/components/parameters/accept'
    - $ref: '#/components/parameters/deviceID'
    delete:
      description: Delete a device by ID.
      operationId: DeleteDevice
      responses:
        '204':
          $ref: '#/components/responses/204'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      security:
      - JWT:
        - delete-device
      summary: Delete Device
      tags:
      - Device Inventory
    get:
      description: 'Get a device by ID.

        '
      operationId: GetDevice
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/device'
          description: A device.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            X-Smallstep-Api-Version:
              $ref: '#/components/headers/X-Smallstep-Api-Version'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      security:
      - JWT:
        - get-device
      summary: Get Device
      tags:
      - Device Inventory
    patch:
      description: Update selected fields of an existing device.
      operationId: PatchDevice
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/devicePatch'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/device'
          description: 'The updated device.

            '
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            X-Smallstep-Api-Version:
              $ref: '#/components/headers/X-Smallstep-Api-Version'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      security:
      - JWT:
        - patch-device
      summary: Update Device
      tags:
      - Device Inventory
  /devices/{deviceID}/lifecycle:
    parameters:
    - $ref: '#/components/parameters/requestID'
    - $ref: '#/components/parameters/version'
    - $ref: '#/components/parameters/accept'
    - $ref: '#/components/parameters/deviceID'
    patch:
      description: 'Update a device''s lifecycle status

        '
      operationId: PatchDeviceLifecycle
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/deviceLifecyclePatch'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/device'
          description: 'The updated device.

            '
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            X-Smallstep-Api-Version:
              $ref: '#/components/headers/X-Smallstep-Api-Version'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      security:
      - JWT:
        - patch-device-lifecycle
      summary: Update Device Lifecycle
      tags:
      - Device Inventory
  /platforms:
    parameters:
    - $ref: '#/components/parameters/requestID'
    - $ref: '#/components/parameters/version'
    - $ref: '#/components/parameters/accept'
    get:
      description: 'Get a page of platforms.

        '
      operationId: GetPlatforms
      parameters:
      - $ref: '#/components/parameters/pagination'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/platform'
                type: array
          description: A page of platforms.
          headers:
            X-Next-Cursor:
              $ref: '#/components/headers/X-Next-Cursor'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            X-Smallstep-Api-Version:
              $ref: '#/components/headers/X-Smallstep-Api-Version'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      security:
      - JWT:
        - get-platforms
      summary: List Platforms
      tags:
      - Device Inventory
  /platforms/{platformSlug}:
    parameters:
    - $ref: '#/components/parameters/requestID'
    - $ref: '#/components/parameters/version'
    - $ref: '#/components/parameters/accept'
    - $ref: '#/components/parameters/platformSlug'
    put:
      description: 'Create a new platform or update an existing platform.

        '
      operationId: PutPlatform
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/newPlatform'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/platform'
          description: 'The new or updated platform.

            '
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            X-Smallstep-Api-Version:
              $ref: '#/components/headers/X-Smallstep-Api-Version'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '500':
          $ref: '#/components/responses/500'
      security:
      - JWT:
        - put-platform
      summary: Create Platform
      tags:
      - Device Inventory
components:
  parameters:
    deviceSort:
      description: 'The sorting behavior for matching devices. Example: `?sort[field]=lastSeen&sort[ascending]=true`, which after encoding would be `?sort%5Bfield%5D=lastSeen&sort%5Bascending%5D=true`

        '
      explode: true
      in: query
      name: sort
      schema:
        nullable: true
        properties:
          ascending:
            description: Indicates that devices should be sorted in ascending order.
            type: boolean
          field:
            default: enrolledAt
            description: The field used for sorting matching devices.
            enum:
            - enrolledAt
            - lastSeen
            - source
            type: string
        type: object
      style: deepObject
    deviceID:
      description: Either the UUID of the device, or a URN that uniquely identifies the device. URNs must be URL-encoded, but provided examples are shown without encoding for clarity.
      examples:
        ekPub:
          summary: The SHA-256 hash of the device's TPM Endorsement Key, in URN form.
          value: urn:ek:sha256:RO7QunjhqUqKJj7HAHCpusLZqrypC42vvpGMJvpQdrw=
        permanentId:
          summary: A URN referencing the permanent identifier of the device.
          value: urn:smallstep:device:permanent-identifier:7f358e57fb2df7c7462d9be6570ea41e
        sn:
          summary: A URN referencing the serial number of the device.
          value: urn:smallstep:device:serial:7GX359OOP
        uuid:
          summary: The UUID of the device in the Smallstep inventory.
          value: 3b415cf2-30bf-441e-aa72-82eb2f38181f
      in: path
      name: deviceID
      required: true
      schema:
        type: string
    deviceFilters:
      description: 'Filter a list of devices by specifying the critera that must be met. Example: `?filters[os]=windows&filters[assurance]=high`, which after encoding would be `?filters%5Bos%5D=windows&filters%5Bassurance%5D=high`

        '
      explode: true
      in: query
      name: filters
      schema:
        nullable: true
        properties:
          assurance:
            description: Assurance levels that devices must match.
            items:
              $ref: '#/components/schemas/deviceAssurance'
            type: array
            uniqueItems: true
          onlyManaged:
            description: Only return devices that are Smallstep-managed.
            type: boolean
          onlyPendingApproval:
            description: Only return devices that are pending approval.
            type: boolean
          onlyUnassigned:
            description: Only return devices that do not have a user binding.
            type: boolean
          operatingSystem:
            description: Operating systems that devices must match.
            items:
              $ref: '#/components/schemas/deviceOS'
            type: array
            uniqueItems: true
          ownership:
            description: Ownership values that devices must match.
            items:
              $ref: '#/components/schemas/deviceOwnership'
            type: array
            uniqueItems: true
          source:
            description: Registration sources that devices must match.
            items:
              $ref: '#/components/schemas/deviceDiscoverySource'
            type: array
            uniqueItems: true
          status:
            $ref: '#/components/schemas/deviceStatus'
        type: object
      style: deepObject
    version:
      description: The version of the Smallstep API. Required unless set in the Accept header.
      example: '2025-01-01'
      in: header
      name: X-Smallstep-Api-Version
      required: true
      schema:
        type: string
    platformSlug:
      description: slug identifying the platform
      in: path
      name: platformSlug
      required: true
      schema:
        type: string
    requestID:
      description: A request ID provided by the client. If not provided, the server will generate one. Will be reflected in responses.
      example: abcdef
      in: header
      name: X-Request-Id
      schema:
        type: string
    pagination:
      description: 'Paginate over a list of objects. Example: `?pagination[first]=30&pagination[after]=MTIzNA==`, which after encoding would be `?pagination%5Bfirst%5D=30&pagination%5Bafter%5D=MTIzNA==`

        '
      explode: true
      in: query
      name: pagination
      schema:
        nullable: true
        properties:
          after:
            description: 'Fetch a page of results other than the first page.

              Must be copied from a previously returned X-Next-Cursor header.

              '
            example: MTIzNA==
            nullable: true
            type: string
          first:
            description: 'Limits the number of results returned.

              Defaults to 100.

              '
            example: 30
            maximum: 1000
            minimum: 1
            nullable: true
            type: integer
        type: object
      style: deepObject
    accept:
      description: The content type the client is willing to accept. Also includes API version.
      example: application/vnd.smallstep.v2025-01-01+json
      in: header
      name: Accept
      schema:
        type: string
  schemas:
    error:
      example:
        message: ID must be a valid UUID
      properties:
        message:
          description: A description of the error.
          type: string
      required:
      - message
      title: Error
      type: object
    deviceSerial:
      description: 'The serial number of the device.

        This field may be populated with a value derived from data synced from your team''s MDMs.

        Setting this value explicitly will mask any MDM-derived value.

        '
      type: string
    deviceUser:
      description: 'The user that a device is assigned to. A device cannot be approved for high-assurance certificates until a user has been assigned to it.

        '
      properties:
        displayName:
          description: Full name of the user the device is assigned to. Synced from team's identity provider. Read only.
          type: string
        email:
          description: 'Email of the user the device is assigned to.

            This field may be populated with a value derived from data synced from your team''s MDMs.

            Setting this value explicitly will mask any MDM-derived value.

            '
          type: string
      required:
      - email
      type: object
    devicePatch:
      description: 'Data that can be modified on an existing device.


        Some device fields may be populated with a value derived from data synced from your team''s MDMs.

        Any data that is explicitly set by API or with the Smallstep dashboard will mask MDM-derived values.

        Use this list to specify fields that should be unset. If the device includes data synced from an MDM

        this will result in the fields being populated with values derived from the MDM data. Otherwise the

        removed fields will be empty.

        '
      example:
        displayId: null
        displayName: null
        metadata:
          department: engineering
        os: Linux
        ownership: user
        serial: 7GX359OOP
        shared: true
        tags:
        - ubuntu24
        user:
          email: patch@example.com
      properties:
        displayId:
          oneOf:
          - $ref: '#/components/schemas/deviceDisplayId'
          - {}
        displayName:
          oneOf:
          - $ref: '#/components/schemas/deviceDisplayName'
          - {}
        metadata:
          oneOf:
          - $ref: '#/components/schemas/deviceMetadata'
          - {}
        os:
          oneOf:
          - $ref: '#/components/schemas/deviceOS'
          - {}
        ownership:
          oneOf:
          - $ref: '#/components/schemas/deviceOwnership'
          - {}
        serial:
          oneOf:
          - $ref: '#/components/schemas/deviceSerial'
          - {}
        shared:
          type: boolean
        tags:
          oneOf:
          - $ref: '#/components/schemas/deviceTags'
          - {}
        user:
          $ref: '#/components/schemas/deviceUserPatch'
      type: object
    newPlatform:
      description: Configuration to create a new platform.
      properties:
        displayName:
          type: string
        platformConfiguration:
          oneOf:
          - $ref: '#/components/schemas/awsPlatform'
          - $ref: '#/components/schemas/azurePlatform'
          - $ref: '#/components/schemas/gcpPlatform'
        platformType:
          description: Determines which set of fields to use in platformConfiguration. Cannot be changed.
          enum:
          - aws
          - azure
          - gcp
          type: string
        slug:
          type: string
      required:
      - slug
      - displayName
      - platformType
      - platformConfiguration
      title: New Platform
      type: object
    deviceUserPatch:
      description: 'The user that a device is assigned to. A device cannot be approved for high-assurance certificates until it has an assigned user.

        '
      properties:
        email:
          description: 'Email of the user the device is assigned to.

            This field may be populated with a value derived from data synced from your team''s MDMs.

            Setting this value explicitly will mask any MDM-derived value.

            '
          oneOf:
          - nullable: true
            type: string
      required:
      - email
      type: object
    deviceDisplayId:
      description: 'An opaque identifier that may be used to link this device to an external inventory.

        This field may be populated with a value derived from data synced from your team''s MDMs.

        Setting this value explicitly will mask any MDM-derived value.

        '
      type: string
    platform:
      description: A platform with a list of configurations.
      properties:
        displayName:
          type: string
        platformConfigurations:
          items:
            oneOf:
            - $ref: '#/components/schemas/awsPlatform'
            - $ref: '#/components/schemas/azurePlatform'
            - $ref: '#/components/schemas/gcpPlatform'
          type: array
        platformType:
          description: The type used in platformConfiguration.
          enum:
          - aws
          - azure
          - gcp
          type: string
        slug:
          type: string
      required:
      - slug
      - displayName
      - platformType
      - platformConfigurations
      title: Platform
      type: object
    deviceOwnership:
      description: 'Whether the device is owned by the user or the company.

        This field may be populated with a value derived from data synced from your team''s MDMs.

        Setting this value explicitly will mask any MDM-derived value.

        '
      enum:
      - company
      - user
      type: string
    deviceDisplayName:
      description: 'A friendly name for the device.

        This field may be populated with a value derived from data synced from your team''s MDMs.

        Setting this value explicitly will mask any MDM-derived value.

        '
      type: string
    deviceMetadata:
      additionalProperties:
        type: string
      description: 'A map of custom key-value pairs for a device, typically used to populate certificate fields. These custom keys can be referenced in [X.509 Certificate Fields](/schemas/x509Fields) or [SSH Certificate Fields](/schemas/sshFields).


        In addition to custom keys, the following reserved keys are also available:


        - `smallstep:identity` — The device''s assigned user email.

        - `Device.ID` — The Smallstep internal UUID for the device.

        - `Device.DisplayName` — The computed display name for the device, usually sourced from the MDM or hostname.

        - `Device.PermanentIdentifier` — The permanent identifier of the device (e.g. the EK public key hash).

        - `Device.PermanentIdentifierURI` — The permanent identifier as a URI.

        - `Device.Hostname` — The reported hostname of the device.

        - `Device.HostURI` — The host identifier as a URI.

        - `Device.Serial` — The serial number of the device.


        For SSH certificates, the following additional reserved keys are available:


        - `SSH.Principals` — The SSH certificate principals.

        - `SSH.KeyID` — The SSH certificate key ID.

        - `SSH.Extensions` — The SSH certificate extensions.


        Reserved keys are populated automatically and are not stored in this map.

        '
      type: object
    deviceOS:
      description: 'The device operating system.

        This field may be populated with a value derived from data synced from your team''s MDMs.

        Setting this value explicitly will mask any MDM-derived value.

        '
      enum:
      - Linux
      - Windows
      - macOS
      - iOS
      - tvOS
      - watchOS
      - visionOS
      type: string
    deviceAssurance:
      description: 'The assurance level of the device.

        High-assurance devices are those that have a user binding, have been approved, and have performed cryptographic

        remote attestation.

        '
      enum:
      - normal
      - high
      type: string
    gcpPlatform:
      description: Google Cloud Platform
      properties:
        name:
          description: A friendly name for this GCP connection
          examples:
          - Production GCP Projects
          title: Name/Alias
          type: string
        projectIds:
          description: The project IDs where the resources are located.
          examples:
          - prod-1234
          items:
            type: string
          title: Project IDs
          type: array
        serviceAccountKey:
          description: A JSON-formatted service account key that allows the Smallstep Platform to manage resources on your behalf.
          examples:
          - '{"type": "service_acount", "private_key", ...}'
          title: Service Account Key
          type: string
        serviceAccounts:
          description: GCE service accounts that are allowed to enroll with the Smallstep Platform.
          examples:
          - dbs@myproject.iam.gserviceaccount.com
          items:
            type: string
          title: Service Accounts
          type: array
      required:
      - projectIds
      - name
      title: Google Cloud Platform
    deviceDiscoverySource:
      description: 'The source from which this device was discovered.

        '
      enum:
      - End-User
      - Smallstep API
      - Smallstep Agent
      - Jamf
      - Intune
      type: string
    deviceRequest:
      description: Data that can be added to a device record.
      example:
        displayId: '681'
        displayName: Sheldon Personal Laptop
        metadata:
          department: engineering
        os: Linux
        ownership: user
        permanentIdentifier: urn:ek:sha256:RO7QunjhqUqKJj7HAHCpusLZqrypC42vvpGMJvpQdrw=
        serial: 7GX359OOP
        tags:
        - ubuntu24
        user:
          email: sheldon@example.com
      properties:
        displayId:
          $ref: '#/components/schemas/deviceDisplayId'
        displayName:
          $ref: '#/components/schemas/deviceDisplayName'
        metadata:
          $ref: '#/components/schemas/deviceMetadata'
        os:
          $ref: '#/components/schemas/deviceOS'
        ownership:
          $ref: '#/components/schemas/deviceOwnership'
        permanentIdentifier:
          description: The cryptographic identity of the device. High-assurance devices are only issued certificates when this identifier is attested by a trusted source. All devices with the same permanent identifier appear as a single device in the Smallstep API. For Windows and Linux devices this is the hash of the TPM endorsement key and for Apple devices it is the serial number.
          type: string
        serial:
          $ref: '#/components/schemas/deviceSerial'
        tags:
          $ref: '#/components/schemas/deviceTags'
        user:
          $ref: '#/components/schemas/deviceUser'
      required:
      - permanentIdentifier
      type: object
    deviceLifecyclePatch:
      description: 'Updating a device''s lifecycle state can be used to control behavior of credential issuance, as well

        as inform authorization decisions of integrations, such as RADIUS.

        '
      example:
        status: quarantined
      properties:
        status:
          $ref: '#/components/schemas/deviceLifecycleStatus'
      required:
      - status
      type: object
    deviceTags:
      description: A set of tags that can be used to group devices.
      items:
        type: string
      type: array
    azurePlatform:
      description: Microsoft Azure
      properties:
        clientId:
          description: The client ID of an Azure Service Principal that allows the Smallstep Platform to manage resources on your behalf.
          examples:
          - a51b7be0-007c-4233-b137-00096852253e
          title: Service Principal Client ID
          type: string
        clientSecret:
          description: The client secret of an Azure Service Principal that allows the Smallstep Platform to manage resources on your behalf.
          examples:
          - 8eYbM2S@ZUrTcWHeE6Zju8m8n
          title: Service Principal Client Secret
          type: string
        name:
          description: A friendly name for this Azure connection
          examples:
          - Production Resources
          title: Name/Alias
          type: string
        resourceGroups:
          description: A list of resource groups that are allowed to enroll with the Smallstep Platform.
          examples:
          - prod
          items:
            type: string
          title: Resource Groups
          type: array
        tenantId:
          description: The Azure Entra tenant ID
          examples:
          - b17c217c-84db-43f0-babd-e06a71083cda
          title: Tenant ID
          type: string
      required:
      - tenantId
      - resourceGroups
      - name
      title: Microsoft Azure Platform
      type: object
    awsPlatform:
      description: Configuration for an AWS platform.
      properties:
        accountId:
          title: Account ID
          type: string
        name:
          description: A friendly name for this AWS account.
          title: Name/Alias
          type: string
        roleArn:
          description: A role ARN that allows the Smallstep Platform to manage resources on your behalf.
          examples:
          - arn:aws:iam::0123456789:role/smallstep
          title: Role ARN
          type: string
      required:
      - accountId
      - name
      title: Amazon Web Services
      type: object
    deviceStatus:
      description: 'The status of the device.

        '
      enum:
      - ok
      - warning
      - error
      type: string
    deviceLifecycleStatus:
      description: 'The lifecycle status of a device indicates its ongoing management

        state.

        '
      enum:
      - active
      - quarantined
      - deleted
      type: string
    device:
      allOf:
      - $ref: '#/components/schemas/deviceRequest'
      - properties:
          approvedAt:
            description: Timestamp in RFC3339 format when the device was approved to connect to company resources. Read only.
            format: date-time
            type: string
          connected:
            description: The device is currently connected to Smallstep. Read only.
            type: boolean
          enrolledAt:
            description: Timestamp in RFC3339 format when the device first connected to Smallstep. Read only.
            format: date-time
            type: string
          highAssurance:
            description: The device has been issued certificates using high assurance device attestation. Read only.
            type: boolean
          hostID:
            description: The identifier for the smallstep agent on the device.
            type: string
          id:
            description: A UUID identifying this device. Read only.
            type: string
          lastSeen:
            description: Timestamp in RFC3339 format when the device last connected to Smallstep. Read only.
            format: date-time
            type: string
          lifecycleStatus:
            $ref: '#/components/schemas/deviceLifecycleStatus'
          shared:
            description: Whether the device is shared. A shared device is not expected to have a direct user binding.
            type: boolean
        required:
        - id
        - connected
        - highAssurance
        type: object
      description: A device represents a computer that can be issued X.509 certificates for securely connecting to company resources.
      example:
        approvedAt: '2025-01-01T12:04:05'
        connected: true
        displayId: '681'
        displayName: Sheldon Personal Laptop
        enrolledAt: '2025-01-01T10:04:05'
        highAssurance: false
        lastSeen: '2025-01-01T15:04:05'
        lifecycleStatus: active
        metadata:
          department: engineering
        os: Linux
        ownership: user
        permanentIdentifier: urn:ek:sha256:RO7QunjhqUqKJj7HAHCpusLZqrypC42vvpGMJvpQdrw=
        serial: 7GX359OOP
        shared: false
        tags:
        - ubuntu24
        user:
          email: sheldon@example.com
  responses:
    '204':
      description: The resource has been deleted.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
        X-Smallstep-Api-Version:
          $ref: '#/components/headers/X-Smallstep-Api-Version'
    '403':
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
      description: Forbidden
      headers:
        X-Request-Id:
          $ref: '#/components/headers/X-Request-Id'
        X-Smallstep-Api-Version:
          $ref: '#/components/headers/X-Smallstep-Api-Version'
    '422':
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error

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