ControlUp Devices API

Get information about devices.

OpenAPI Specification

controlup-devices-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Controlup Devices API
  version: '1.0'
  description: 'Operations tagged Devices across 2 of this provider''s published API definitions: controlup-compliance-openapi.yml, controlup-desktops-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.controlup.com/compliance
- url: https://api.controlup.com/edge/api
security:
- bearerAuth: []
tags:
- name: Devices
  description: Get information about devices.
paths:
  /devices:
    servers:
    - url: https://api.controlup.com/compliance
    get:
      summary: List all devices
      description: Returns a list of all devices managed by ControlUp for Compliance.
      operationId: getDevices
      tags:
      - Devices
      parameters:
      - $ref: '#/components/parameters/_page'
      - $ref: '#/components/parameters/_limit'
      - $ref: '#/components/parameters/_filters'
      - $ref: '#/components/parameters/_filterby'
      - $ref: '#/components/parameters/_sort'
      - $ref: '#/components/parameters/_orderby'
      - $ref: '#/components/parameters/_search'
      - name: device_id
        in: query
        description: Filter by the devive ID.
        schema:
          type: string
        example: IHAfqJoB-3oP8zTHt8c
      - name: device_name
        in: query
        description: Filter by the device name.
        required: false
        schema:
          type: string
        example: my-device-001
      - name: agent_status
        in: query
        description: Filter by agent connection status.
        required: false
        schema:
          type: string
          enum:
          - online
          - offline
        example: online
      - name: os_name
        in: query
        description: Filter by operating system name.
        required: false
        schema:
          type: string
        example: Microsoft Windows 11 Pro
      - name: mac_address
        in: query
        description: A search filter on the `mac_address` field.
        required: false
        schema:
          type: string
        example: 00:1A:2B:3C:4D:5E
      - name: score
        in: query
        description: A search filter on the `score` field.
        required: false
        schema:
          type: number
          format: float
        example: 7
      - name: score_severity
        in: query
        description: A search filter on the `score_severity` field.
        required: false
        schema:
          type: string
          enum:
          - LOW
          - MEDIUM
          - HIGH
          - CRITICAL
        example: LOW
      - name: issues_count
        in: query
        description: A search filter on the `issues_count` field.
        required: false
        schema:
          type: integer
        example: 0
      - name: device_group
        in: query
        description: A search filter on the `device_group` field.
        required: false
        schema:
          type: string
        example: SampleGroup
      - name: location
        in: query
        description: A search filter on the `location` field.
        required: false
        schema:
          type: string
        example: United States - Chicago
      - name: client_version
        in: query
        description: A search filter on the `client_version` field.
        required: false
        schema:
          type: string
        example: 1.5.2510.08
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  metadata:
                    type: object
                    allOf:
                    - $ref: '#/components/schemas/Metadata'
                    - $ref: '#/components/schemas/PaginationMetadata'
                  data:
                    type: array
                    description: List of device objects.
                    items:
                      $ref: '#/components/schemas/Device'
              examples:
                successExample:
                  value:
                    metadata:
                      cuRequestId: 7b8a89c7-172b-4a9f-9e58-24636866266d
                      orgId: 0d5157ef-eb88-4f87-905c-6823fef32f2e
                      userId: d97b8cde-8c2e-4bba-9f20-2097f9f26de4
                      total: 51
                      limitPerPage: 10
                      currentPageNumber: 1
                      currentPageSize: 10
                      remaining: 41
                    data:
                    - device_id: QYkHyYoBQ5QdJu1tiAg1
                      device_name: Oliver’S MAC MINI
                      agent_status: offline
                      os_name: macOS
                      mac_address: null
                      local_ip: null
                      public_ip: 59.52.12.248
                      security_controls: null
                      last_scan: '2025-09-11T16:44:12.613Z'
                      score: 10
                      score_severity: LOW
                      issues_count: 0
                      device_group: Ungrouped Devices
                      device_tags: []
                      location: United States - New York City
                      client_version: 1.5.001
  /devices/{device_id}:
    servers:
    - url: https://api.controlup.com/compliance
    get:
      summary: Get device details
      description: Returns details for a specific device, including a summary of the number of issues detected on the device.
      operationId: getDeviceDetails
      tags:
      - Devices
      parameters:
      - $ref: '#/components/parameters/_page'
      - $ref: '#/components/parameters/_limit'
      - $ref: '#/components/parameters/_filters'
      - $ref: '#/components/parameters/_filterby'
      - $ref: '#/components/parameters/_sort'
      - $ref: '#/components/parameters/_orderby'
      - $ref: '#/components/parameters/_search'
      - name: device_id
        in: path
        description: ID of the device to get.
        required: true
        schema:
          type: string
        example: IHAfqJoB-3oP8zTHt8c
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  metadata:
                    type: object
                    allOf:
                    - $ref: '#/components/schemas/Metadata'
                  data:
                    type: object
                    allOf:
                    - $ref: '#/components/schemas/Device'
                    - type: object
                      properties:
                        vulns_count:
                          type: string
                          description: Number of vulnerabilities.
                        available_patches_count:
                          type: string
                          description: Number of patches that have an available remediation.
                        compliance_count:
                          type: string
                          description: Number of compliance issues.
                        misconfig_count:
                          type: string
                          description: Number of misconfigurations.
  /devices/{device_id}/vulnerabilities:
    servers:
    - url: https://api.controlup.com/compliance
    get:
      summary: List device vulnerabilities
      description: Returns a list of vulnerabilities (CVEs) detected on a specific device.
      operationId: getDeviceVulnerabilities
      tags:
      - Devices
      parameters:
      - $ref: '#/components/parameters/_page'
      - $ref: '#/components/parameters/_limit'
      - $ref: '#/components/parameters/_filters'
      - $ref: '#/components/parameters/_filterby'
      - $ref: '#/components/parameters/_sort'
      - $ref: '#/components/parameters/_orderby'
      - $ref: '#/components/parameters/_search'
      - name: device_id
        in: path
        description: ID of the device.
        required: true
        schema:
          type: string
        example: IHAfqJoB-3oP8zTHt8c
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  metadata:
                    type: object
                    allOf:
                    - $ref: '#/components/schemas/Metadata'
                    - $ref: '#/components/schemas/PaginationMetadata'
                  data:
                    $ref: '#/components/schemas/VulnerabilitiesData'
  /devices/{device_id}/patches:
    servers:
    - url: https://api.controlup.com/compliance
    get:
      summary: List device patches
      description: Returns a list of missing OS and application patches detected on a specific device.
      operationId: getDevicePatches
      tags:
      - Devices
      parameters:
      - $ref: '#/components/parameters/_page'
      - $ref: '#/components/parameters/_limit'
      - $ref: '#/components/parameters/_filters'
      - $ref: '#/components/parameters/_filterby'
      - $ref: '#/components/parameters/_sort'
      - $ref: '#/components/parameters/_orderby'
      - $ref: '#/components/parameters/_search'
      - name: device_id
        in: path
        description: ID of the device.
        required: true
        schema:
          type: string
        example: IHAfqJoB-3oP8zTHt8c
      - name: title
        in: query
        description: Filter by application name or OS patch KB number.
        schema:
          type: string
        example: KB890830
      - name: severity
        in: query
        description: Filter by issue severity.
        schema:
          type: string
          enum:
          - LOW
          - MEDIUM
          - HIGH
          - CRITICAL
          example: LOW
        style: form
      - name: remediation_status
        in: query
        description: Filter by remediation availability.
        schema:
          type: string
          enum:
          - Available
          - Unavailable
          example: Available
        style: form
      - name: release_date
        in: query
        description: Filter by patch release date.
        schema:
          type: string
      - name: patch_type
        in: query
        description: Filter by patch type detection type. `patch` means that a Template detected the patch by scanning for a specific application or OS patch. `vulnerability` means that a Template detected the patch by scanning for one of the relevant CVEs.
        schema:
          type: string
          enum:
          - patch
          - vulnerability
        example: patch
      - name: is_os
        in: query
        description: Set to `true` to return OS patches and `false` to return application patches.
        schema:
          type: boolean
        example: true
      - name: current_version
        in: query
        description: Filter by currently installed version.
        schema:
          type: string
        example: 10.0.22000
      - name: vendor_name
        in: query
        description: Filter by application vendor name.
        schema:
          type: string
        example: Microsoft Corporation
      - name: last_remediation_status
        in: query
        description: A search filter on the `last_remediation_status` field.
        schema:
          type:
          - string
          - 'null'
      - name: device_action_id
        in: query
        description: A search filter on the `device_action_id` field.
        schema:
          type:
          - string
          - 'null'
          format: uuid
      - name: remediation_availability
        in: query
        description: Filter by whether a remediation for the issue is available.
        schema:
          type: string
      - name: remediation_state
        in: query
        description: A search filter on the `remediation_state` field.
        schema:
          type:
          - string
          - 'null'
      - name: last_event_action
        in: query
        description: A search filter on the `last_event_action` field.
        schema:
          type:
          - string
          - 'null'
      - name: last_event_status
        in: query
        description: A search filter on the `last_event_status` field.
        schema:
          type:
          - string
          - 'null'
      - name: last_event_metadata
        in: query
        description: A search filter on the `last_event_metadata` field.
        schema:
          type: string
      - name: last_event_created_at
        in: query
        description: A search filter on the `last_event_created_at` field.
        schema:
          type:
          - string
          - 'null'
          format: date-time
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  metadata:
                    type: object
                    allOf:
                    - $ref: '#/components/schemas/Metadata'
                    - $ref: '#/components/schemas/PaginationMetadata'
                  data:
                    $ref: '#/components/schemas/PatchesData'
  /devices/{device_id}/compliance:
    servers:
    - url: https://api.controlup.com/compliance
    get:
      summary: List device compliance issues
      description: Returns a list of issues from the compliance category detected on a specific device.
      operationId: getDeviceCompliance
      tags:
      - Devices
      parameters:
      - $ref: '#/components/parameters/_page'
      - $ref: '#/components/parameters/_limit'
      - $ref: '#/components/parameters/_filters'
      - $ref: '#/components/parameters/_filterby'
      - $ref: '#/components/parameters/_sort'
      - $ref: '#/components/parameters/_orderby'
      - $ref: '#/components/parameters/_search'
      - name: device_id
        in: path
        description: ID of the device.
        required: true
        schema:
          type: string
        example: IHAfqJoB-3oP8zTHt8c
      - name: title
        in: query
        description: Filter by the issue title.
        schema:
          type: string
        example: Disable Solicited Remote Assistance
      - name: severity
        in: query
        description: Filter by the severity level of the issue.
        schema:
          type: string
          enum:
          - LOW
          - MEDIUM
          - HIGH
          - CRITICAL
        example: LOW
      - name: last_remediation_status
        in: query
        description: Filter by the status of the last remediation attempt.
        schema:
          type:
          - string
          - 'null'
      - name: remediation_availability
        in: query
        description: Filter by whether a remediation for the issue is available.
        schema:
          type: string
          enum:
          - Available
          - Unavailable
        example: Unavailable
      - name: remediation_state
        in: query
        description: Filter by the current remediation state.
        schema:
          type:
          - string
          - 'null'
      - name: last_event_action
        in: query
        description: Filter by the last recorded action.
        schema:
          type:
          - string
          - 'null'
      - name: last_event_status
        in: query
        description: Filter by the status of the last recorded event.
        schema:
          type:
          - string
          - 'null'
      - name: last_event_metadata
        in: query
        description: Filter by metadata associated with the last event (assumes string filter for complexity).
        schema:
          type:
          - string
          - 'null'
      - name: last_event_created_at
        in: query
        description: Filter by the creation time of the last recorded event.
        schema:
          type:
          - string
          - 'null'
          format: date-time
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  metadata:
                    type: object
                    allOf:
                    - $ref: '#/components/schemas/Metadata'
                    - $ref: '#/components/schemas/Metadata'
                  data:
                    $ref: '#/components/schemas/ComplianceData'
  /devices/{device_id}/misconfig:
    servers:
    - url: https://api.controlup.com/compliance
    get:
      summary: List device misconfigurations
      description: Returns a list of misconfiguration issues detected on a specific device.
      operationId: getDeviceMisconfig
      tags:
      - Devices
      parameters:
      - $ref: '#/components/parameters/_page'
      - $ref: '#/components/parameters/_limit'
      - $ref: '#/components/parameters/_filters'
      - $ref: '#/components/parameters/_filterby'
      - $ref: '#/components/parameters/_sort'
      - $ref: '#/components/parameters/_orderby'
      - $ref: '#/components/parameters/_search'
      - name: device_id
        in: path
        description: ID of the device.
        required: true
        schema:
          type: string
        example: IHAfqJoB-3oP8zTHt8c
      - name: id
        in: query
        description: Filter by Issue ID.
        schema:
          type: string
          format: uuid
      - name: title
        in: query
        description: Filter by the issue title.
        schema:
          type: string
        example: SSH Server Service detect and remediate
      - name: severity
        in: query
        description: Filter by the severity level of the issue.
        schema:
          type: array
          items:
            type: string
            enum:
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
        style: form
        example: LOW
      - name: remediation_status
        in: query
        description: Filter by whether ControlUp can remediate the issue.
        schema:
          type: string
          enum:
          - Available
          - Unavailable
        example: Unavailable
      - name: last_remediation_status
        in: query
        description: Filter by the status of the last remediation attempt.
        schema:
          type:
          - string
          - 'null'
      - name: device_action_id
        in: query
        description: Filter by ID related to the device action.
        schema:
          type: string
          format: uuid
      - name: remediation_availability
        in: query
        description: Filter by whether a remediation for the issue is available.
        schema:
          type: string
          enum:
          - Available
          - Unavailable
      - name: remediation_state
        in: query
        description: Filter by the current remediation state.
        schema:
          type:
          - string
          - 'null'
      - name: last_event_action
        in: query
        description: Filter by the last recorded action.
        schema:
          type:
          - string
          - 'null'
      - name: last_event_status
        in: query
        description: Filter by the status of the last recorded event.
        schema:
          type:
          - string
          - 'null'
      - name: last_event_metadata
        in: query
        description: Filter by event metadata.
        schema:
          type:
          - string
          - 'null'
      - name: last_event_created_at
        in: query
        description: Filter by the creation time of the last recorded event.
        schema:
          type:
          - string
          - 'null'
          format: date-time
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  metadata:
                    type: object
                    allOf:
                    - $ref: '#/components/schemas/Metadata'
                    - $ref: '#/components/schemas/PaginationMetadata'
                  data:
                    $ref: '#/components/schemas/MisconfigData'
  /devices/delete:
    servers:
    - url: https://api.controlup.com/edge/api
    post:
      tags:
      - Devices
      summary: Delete devices
      description: Delete devices by their device ID.
      operationId: delete-devices
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                device_ids:
                  description: An array of the device IDs to delete.
                  type: array
                  items:
                    type: string
                  example:
                  - rTIBRoIBOFdS29Oi1ATq
                  - b47LRkQIB8BdS21Oi1TYh
      responses:
        '200':
          description: Devices successfully deleted.
        '400':
          description: Invalid request payload.
        '500':
          $ref: '#/components/responses/500'
  /devices/tags:
    servers:
    - url: https://api.controlup.com/edge/api
    get:
      summary: List all device tags
      tags:
      - Devices
      description: Returns a list of all device tags, including how many devices are using each tag.
      operationId: list-device-tags
      responses:
        '200':
          description: List of device tags.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      description: The name of the device tag.
                      type: string
                    device_count:
                      description: The number of devices that are using the tag.
                      type: integer
    post:
      tags:
      - Devices
      summary: Update device tags
      description: Adds or removes device tags.
      operationId: update-tags
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                ids:
                  description: An array of the IDs of the devices whose tags you want to update.
                  type: array
                  items:
                    type: string
                  example:
                  - rTIBRoIBOFdS29Oi1ATq
                  - b47LRkQIB8BdS21Oi1TYh
                action:
                  description: Set whether to `create` or `delete` tags on the selected devices.
                  type: string
                  enum:
                  - create
                  - delete
                  example: create
                tags:
                  description: An array of the tags to add or remove on the specified devices. Tags can be up to 150 characters long and contain lowercase letters, numbers, -, _, and spaces.
                  type: array
                  items:
                    type: string
                    maxLength: 150
                  example:
                  - testtag1
                  - testtag2
      responses:
        '200':
          description: Device tags successfully updated. Returns the updated device details.
        '400':
          description: Invalid request payload.
        '500':
          $ref: '#/components/responses/500'
  /devices/groups:
    servers:
    - url: https://api.controlup.com/edge/api
    get:
      summary: List all device groups
      tags:
      - Devices
      description: Returns a list of all device groups, including how many devices are in each group.
      operationId: list-device-groups
      responses:
        '200':
          description: List of device groups.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      description: The name of the device group.
                      type: string
                    device_count:
                      description: The number of devices that are in the group.
                      type: integer
  /devices/set-group:
    servers:
    - url: https://api.controlup.com/edge/api
    post:
      summary: Set device group
      tags:
      - Devices
      description: Sets the device group for the specified devices. A device can belong to only one group at a time.
      operationId: add-device-group
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                device_ids:
                  description: An array of the IDs of the devices to add to the device group.
                  type: array
                  items:
                    type: string
                  example:
                  - rTIBRoIBOFdS29Oi1ATq
                  - b47LRkQIB8BdS21Oi1TYh
                group:
                  description: The device group. This does not have to be an existing group.
                  type: string
      responses:
        '200':
          description: Device added to group successfully.
  /devices/{deviceID}/actions:
    servers:
    - url: https://api.controlup.com/edge/api
    post:
      tags:
      - Devices
      summary: Perform action on a single device
      description: Performs an action on the specified device.
      operationId: run-an-action-single
      parameters:
      - in: path
        name: deviceID
        schema:
          type: string
        required: true
        description: ID of the device on which to perform the action. You can use [GET /devices](list-devices) to see the ID for each device.
      requestBody:
        description: Select the type of action you want to perform to see the required payload. There are payload request samples for each type of action.
        required: true
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/runcmd-singledevice'
              - $ref: '#/components/schemas/runcmduser-singledevice'
              - $ref: '#/components/schemas/sendmessageallusers-singledevice'
              - $ref: '#/components/schemas/sendmessagesingleuser-singledevice'
              - $ref: '#/components/schemas/logoffuser'
              - $ref: '#/components/schemas/disconnectuser'
              - $ref: '#/components/schemas/reboot'
              - $ref: '#/components/schemas/termiateprocess'
              - $ref: '#/components/schemas/runscript-singledevice'
      responses:
        '202':
          description: Action request successfully sent.
        '400':
          description: Invalid request payload.
        '500':
          $ref: '#/components/responses/500'
  /devices/action:
    servers:
    - url: https://api.controlup.com/edge/api
    post:
      tags:
      - Devices
      summary: Perform action on multiple devices
      description: Performs an action on the specified devices. If you want to perform an action on only a single device, we recommend that you use [POST /devices/{deviceID}/action](run-an-action-single) for more options.
      operationId: run-an-action
      requestBody:
        description: Select the type of action you want to perform to see the required `action_data`. There are payload request samples for each type of action.
        required: true
        content:
          application/json:
            schema:
              oneOf:
              - $ref: '#/components/schemas/runcmd-multidevice'
              - $ref: '#/components/schemas/runcmduser-multidevice'
              - $ref: '#/components/schemas/sendmessageallusers-multidevice'
              - $ref: '#/components/schemas/sendmessagesingleuser-multidevice'
              - $ref: '#/components/schemas/runscript-multidevice'
      responses:
        '202':
          description: Action request successfully sent.
        '400':
          description: Invalid request payload.
        '500':
          $ref: '#/components/responses/500'
components:
  parameters:
    _sort:
      name: _sort
      in: query
      required: false
      description: 'URL-encoded **JSON string** containing a sort object or an array of sort objects.


        #### Sort object structure

        * **`field`** (string): The data field to sort on.

        * **`dir`** (string): Sort direction. Must be one of `asc` (ascending) or `desc` (descending).

        * **`nullsLast`** (boolean, optional): If `true`, null values appear at the end of the results.


        #### Examples

        * Single field: `{"field":"score","dir":"desc","nullsLast":true}`

        * Multi-field: `[{"field":"score","dir":"desc"},{"field":"device_name","dir":"asc"}]`

        '
      schema:
        type: string
        example: '{"field":"score","dir":"desc","nullsLast":true}'
    _filterby:
      in: query
      name: _filterby
      required: false
      description: 'A URL-encoded **comma-separated list** of filter expressions. Filters are ANDed together implicitly.


        #### Filter expression structure

        `field operator value` (e.g., `score gte 90`)

        * field: The data field to apply the filter on.

        * operator: The comparison operator (supports the same operators as the `_filters` parameter. Read the `_filters` description for details).

        * value: The value to compare against. When using the `in` and `nin` operators, the value can take a comma-separated list of values.


        You don''t need to specify field types when using this parameter. All filter expressions are sent as strings, and the server handles the conversion to the required field type.


        #### Examples:

        Note that the examples must be URL-encoded when sent.

        * Simple: `device_name contains server`

        * Multi-criteria: `device_name contains server,score gte 90`

        * List/IN operator: `tags in prod,qa`

        '
      schema:
        type: string
        example: device_name contains server
    _filters:
      in: query
      name: _filters
      required: false
      description: 'URL-encoded **JSON string** containing a single filter object or an array of filter objects. Multiple filter objects are ANDed together.


        #### Filter object structure:

        * **`field`** (string): The data field to apply the filter on.

        * **`op`** (string): The comparison operator (see below for allowed operators).

        * **`value`**: The value(s) to compare against. The type depends on the field and operator (see below for allowed operators and values).


        #### Supported operators (`op`) and values (`value`)


        **Exact comparison**

        * **`eq`** (equal to), **`ne`** (not equal to): Supported by all field types. Value can be string, number, boolean, or `null`.


        **Range & ordering**

        * **`gt`** (greater than), **`gte`** (greater than or equal to), **`lt`** (less than), **`lte`** (less than or equal to): Supported by number fields. Value must be a number.


        **List membership**

        * **`in`** (is in list), **`nin`** (is not in list): Supported by all field types. Value must be a JSON array of strings, numbers, booleans, or nulls.


        **String/text matching**

        * **`contains`**, **`startsWith`**, **`endsWith`**: Supported only by string fields. Value must be a string.


        **Presence checks**

        * **`isNull`**, **`notNull`**: Supported by all field types. No value field is required for these operators.


        #### Examples

        Note that examples must be url-encoded when sent.

        * Single filter: `{"field":"score","op":"gte","value":90}`

        * Multiple filters: `[{"field":"device_name","op":"contains","value":"vm"},{"field":"tags","op":"in","value":["prod","qa"]}]`

        '
      schema:
        type: string
        example: '{"field":"score","op":"gte","value":90}'
    _page:
      in: query
      name: _page
      required: false
      description: The page returned. Pages are 1-based.
      schema:
        type: integer
    _search:
      in: query
      name: _search
      required: false
      description: 'Free-text search across all text fields. If you add multiple values, they are ANDed together. You can submit multiple values using one of two supported formats:

        * **Comma-separated string**. F

# --- truncated at 32 KB (68 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/controlup/refs/heads/main/openapi/controlup-devices-api-openapi.yml