Aeris Device Groups API

Endpoints for Device Groups

Operations 7

POST /watchtower/v1/device-groups Create a new device group #
POST /watchtower/v1/device-groups/search Get device groups #
GET /watchtower/v1/device-groups/{deviceGroupId} Get device group details #
PUT /watchtower/v1/device-groups/{deviceGroupId} Update an existing device group #
DELETE /watchtower/v1/device-groups/{deviceGroupId} Delete a new device group #
POST /watchtower/v1/device-groups/export Get Device Groups exported as CSV #
POST /watchtower/v1/device-groups/{deviceGroupId}/devices/export Get Device Group Devices exported as CSV #

Documentation

Specifications

Other Resources

Work with this as data

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/aeris-device-groups-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

aeris-device-groups-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 0.7.0
  title: Aeris IoT Watchtower™ Device Groups API
  description: '## Introduction


    The Aeris IoT Watchtower™ API provides access to resources such as real-time events, aggregated events, risk assessment reports, and device group operations.'
  termsOfService: https://www.aeris.com/services-terms-of-use/
  contact:
    email: support@aeris.net
    url: https://www.aeris.com/support/
  license:
    name: Aeris License
    url: https://www.aeris.com/services-terms-of-use/
  x-audience: external-public
servers:
- url: https://watchtower-api-prd.aeriscloud.com
security:
- oAuth2ClientCredentials: []
tags:
- name: Device Groups
  description: Endpoints for Device Groups
paths:
  /watchtower/v1/device-groups:
    post:
      summary: Create a new device group
      operationId: createDeviceGroup
      tags:
      - Device Groups
      parameters:
      - $ref: '#/components/parameters/authorization'
      - $ref: '#/components/parameters/accountId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceGroupCreateRequest'
      responses:
        '201':
          description: Device group created successfully
          content:
            application/json:
              schema:
                type: integer
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
  /watchtower/v1/device-groups/search:
    post:
      summary: Get device groups
      tags:
      - Device Groups
      operationId: getDeviceGroups
      parameters:
      - $ref: '#/components/parameters/authorization'
      - $ref: '#/components/parameters/accountId'
      - $ref: '#/components/parameters/startTime'
      - $ref: '#/components/parameters/endTime'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/limit'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceGroupQueryRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedDeviceGroupTable'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '413':
          $ref: '#/components/responses/413'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
  /watchtower/v1/device-groups/{deviceGroupId}:
    get:
      summary: Get device group details
      tags:
      - Device Groups
      operationId: getDeviceGroup
      parameters:
      - $ref: '#/components/parameters/authorization'
      - $ref: '#/components/parameters/accountId'
      - $ref: '#/components/parameters/deviceGroupId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceGroup'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
    put:
      summary: Update an existing device group
      operationId: updateDeviceGroup
      tags:
      - Device Groups
      parameters:
      - $ref: '#/components/parameters/authorization'
      - $ref: '#/components/parameters/accountId'
      - $ref: '#/components/parameters/deviceGroupId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceGroupUpdateRequest'
      responses:
        '204':
          description: No content, the resource was successfully updated.
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
    delete:
      summary: Delete a new device group
      operationId: deleteDeviceGroup
      tags:
      - Device Groups
      parameters:
      - $ref: '#/components/parameters/authorization'
      - $ref: '#/components/parameters/accountId'
      - $ref: '#/components/parameters/deviceGroupId'
      responses:
        '204':
          description: No content, the resource was successfully deleted.
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
  /watchtower/v1/device-groups/export:
    post:
      summary: Get Device Groups exported as CSV
      tags:
      - Device Groups
      operationId: exportDeviceGroups
      parameters:
      - $ref: '#/components/parameters/authorization'
      - $ref: '#/components/parameters/accountId'
      - $ref: '#/components/parameters/startTime'
      - $ref: '#/components/parameters/endTime'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceGroupQueryRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScheduledReport'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
  /watchtower/v1/device-groups/{deviceGroupId}/devices/export:
    post:
      summary: Get Device Group Devices exported as CSV
      tags:
      - Device Groups
      operationId: exportDeviceGroupDevices
      parameters:
      - $ref: '#/components/parameters/authorization'
      - $ref: '#/components/parameters/accountId'
      - $ref: '#/components/parameters/deviceGroupId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScheduledReport'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '429':
          $ref: '#/components/responses/429'
        '500':
          $ref: '#/components/responses/500'
components:
  responses:
    '401':
      description: Not authorized.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: 401
            message: Unauthorized
            timestamp: 2025-06-01 13:28:03.967000
            path: /watchtower/v1/...
            traceId: c3db9d7a432317363c8bc5ddb5aadf4b
    '429':
      description: Too many requests.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: 429
            message: 'Rate Limit Exceeded (XX) for clientId: XXXXXX. Please retry after XXX seconds'
            timestamp: 2025-06-01 13:28:03.967000
            path: /watchtower/v1/...
            traceId: c3db9d7a432317363c8bc5ddb5aadf4b
    '403':
      description: Forbidden.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: 403
            message: Forbidden
            timestamp: 2025-06-01 13:28:03.967000
            path: /watchtower/v1/...
            traceId: c3db9d7a432317363c8bc5ddb5aadf4b
    '400':
      description: Bad Request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: 400
            message: Bad Request
            timestamp: 2025-06-01 13:28:03.967000
            path: /watchtower/v1/...
            traceId: c3db9d7a432317363c8bc5ddb5aadf4b
    '413':
      description: Requested data too large
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: 413
            message: Requested data too large. Please use /watchtower/v1/.../export for requesting larger amounts of data
            timestamp: 2025-06-01 13:28:03.967000
            path: /watchtower/v1/...
            traceId: c3db9d7a432317363c8bc5ddb5aadf4b
    '404':
      description: Not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: 404
            message: Not found
            timestamp: 2025-06-01 13:28:03.967000
            path: /watchtower/v1/...
            traceId: c3db9d7a432317363c8bc5ddb5aadf4b
    '500':
      description: Internal Server Error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: 500
            message: Internal Server Error
            timestamp: 2025-06-01 13:28:03.967000
            path: /watchtower/v1/...
            traceId: c3db9d7a432317363c8bc5ddb5aadf4b
  schemas:
    DeviceTACCodeInfo:
      type: object
      properties:
        tac:
          type: string
        type:
          type: string
        brand:
          type: string
        model:
          type: string
        totalDevices:
          type: integer
        deviceGroups:
          type: array
          items:
            $ref: '#/components/schemas/DeviceGroupInfo'
    EnforcementRuleBase:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/enforcementRuleId'
        name:
          type: string
        status:
          type: string
        apn:
          type: string
    DeviceGroupQueryRequest:
      type: object
      description: Search for name, assign type and created time range (set to null if don't want to filter)
      properties:
        name:
          type: string
          maxLength: 1024
        deviceAssigningType:
          type: array
          items:
            $ref: '#/components/schemas/DeviceGroupAssigningType'
        deviceGroupType:
          type: array
          items:
            $ref: '#/components/schemas/DeviceGroupType'
        enforcementRuleId:
          type: array
          items:
            type: integer
        enforcementRuleStatus:
          type: array
          items:
            type: string
        rankingMin:
          type: integer
        rankingMax:
          type: integer
        totalMin:
          type: integer
        totalMax:
          type: integer
        tac:
          type: array
          items:
            type: string
        brand:
          type: array
          items:
            type: string
        model:
          type: array
          items:
            type: string
        type:
          type: array
          items:
            type: string
        enforcementRuleApn:
          type: array
          items:
            type: string
        enforcementRuleApnNot:
          type: array
          items:
            type: string
        isCountingActiveOnly:
          type: boolean
          default: true
    Device:
      type: object
      required:
      - iccid
      - imsi
      properties:
        iccid:
          type: string
          description: iccid of device
          maxLength: 50
        imsi:
          type: string
          description: imsi of device
          maxLength: 50
    DeviceGroupResourceBase:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        deviceAssigningType:
          $ref: '#/components/schemas/DeviceGroupAssigningType'
        customFields:
          type: array
          items:
            $ref: '#/components/schemas/DeviceCustomField'
          description: Information about custom fields. Fill if deviceAssigningType = AUTO_BY_CUSTOM_FIELDS, empty otherwise
        devices:
          type: array
          description: Information about devices. Fill if deviceAssigningType = MANUALLY, empty otherwise
          items:
            $ref: '#/components/schemas/Device'
        tacCodes:
          type: array
          items:
            type: string
          description: Information about tac codes. Fill if deviceAssigningType = AUTO_BY_TAC_CODES, empty otherwise
        servicePlan:
          type: string
          deprecated: true
          description: Deprecated. Use servicePlans.
        servicePlans:
          type: array
          items:
            type: string
        ranking:
          type: integer
    DeviceGroupType:
      type: string
      enum:
      - REPORTING
      - ENFORCEMENT
    Pagination:
      type: object
      properties:
        total:
          $ref: '#/components/schemas/total'
        offset:
          $ref: '#/components/schemas/offset'
        limit:
          $ref: '#/components/schemas/limit'
    DeviceGroupBase:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        colorCode:
          type: string
        deviceAssigningType:
          $ref: '#/components/schemas/DeviceGroupAssigningType'
        customFields:
          type: array
          items:
            $ref: '#/components/schemas/DeviceCustomField'
        devices:
          type: array
          description: Information about devices. Fill if deviceAssigningType = MANUALLY, empty otherwise
          items:
            $ref: '#/components/schemas/Device'
        tacCodes:
          type: array
          items:
            $ref: '#/components/schemas/DeviceTACCodeInfo'
        totalDevices:
          type: integer
        createdBy:
          type: string
        createdTime:
          type: string
          format: date-time
        updatedBy:
          type: string
        updatedTime:
          type: string
          format: date-time
        ranking:
          type: integer
        deviceGroupType:
          $ref: '#/components/schemas/DeviceGroupType'
        servicePlan:
          type: string
          deprecated: true
          description: Deprecated. Use servicePlans.
        servicePlans:
          type: array
          items:
            type: string
        enforcementRules:
          type: array
          items:
            $ref: '#/components/schemas/EnforcementRuleBase'
        locationListIds:
          type: array
          items:
            type: integer
            format: int64
    DeviceGroupUpdateRequest:
      allOf:
      - $ref: '#/components/schemas/DeviceGroupResourceBase'
    Error:
      type: object
      properties:
        code:
          type: integer
          description: HTTP code
          example: 500
        message:
          type: string
          description: Error message
          example: An error encountered in processing the request
        timestamp:
          type: string
          description: ISO DateTime
          example: '2025-06-02 09:01:53.678'
        path:
          type: string
          description: Endpoint path at which the error occured
          example: /watchtower/v1/events
        traceId:
          type: string
          description: Trace Id
          example: ed81f29f-ea9b-4099-aa00-f8ed40b7a567
    enforcementRuleId:
      description: Enforcement Rule identifier
      type: integer
      format: int64
      example: 5102010
    DeviceCustomField:
      type: object
      description: Information about custom fields. Fill if deviceAssigningType = AUTO_BY_CUSTOM_FIELDS, empty otherwise
      required:
      - customFieldId
      - customFieldValue
      properties:
        customFieldId:
          type: integer
          format: int64
          description: custom field id of group
        customFieldValue:
          type: string
          description: custom field value of group
          maxLength: 256
    total:
      type: integer
      format: int64
      description: Total number of items available.
      example: 1
      minimum: 0
    DeviceGroup:
      allOf:
      - type: object
        properties:
          id:
            type: integer
      - $ref: '#/components/schemas/DeviceGroupBase'
    DeviceGroupInfo:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        colorCode:
          type: string
        deviceGroupType:
          type: string
    DeviceGroupCreateRequest:
      allOf:
      - $ref: '#/components/schemas/DeviceGroupResourceBase'
      - type: object
        properties:
          deviceGroupType:
            $ref: '#/components/schemas/DeviceGroupType'
    PagedDeviceGroupTable:
      allOf:
      - $ref: '#/components/schemas/Pagination'
      - type: object
        properties:
          data:
            type: array
            items:
              $ref: '#/components/schemas/DeviceGroup'
    accountId:
      description: Account Id.
      type: integer
      format: int32
      example: 10407
      minimum: 0
    ReportStatus:
      description: Report status
      type: string
      example: Processing
      enum:
      - Success
      - Processing
      - Error
      - NotStarted
    DeviceGroupAssigningType:
      type: string
      description: assign type
      enum:
      - AUTO_BY_TAC_CODES
      - AUTO_BY_CUSTOM_FIELDS
      - MANUALLY
      - AUTO_BY_SERVICE_PLAN
      example: AUTO_BY_TAC_CODES
    ScheduledReport:
      type: object
      properties:
        reportId:
          description: Report Id
          type: string
          example: 7ae9e22d-8ad4-4a69-950a-6b13d75f0c74
        status:
          $ref: '#/components/schemas/ReportStatus'
        statusEndpoint:
          description: Report Status URL
          type: string
          example: /watchtower/v1/scheduled-reports/7ae9e22d-8ad4-4a69-950a-6b13d75f0c74
    dateTime:
      description: ISO 8601 date time
      type: string
      format: date-time
      example: '2021-07-04T17:36:47Z'
    limit:
      type: integer
      format: int32
      description: Number of items to retrieve (10000 max).
      minimum: 1
      maximum: 10000
      default: 20
    offset:
      description: Position in pagination.
      type: integer
      format: int32
      default: 0
      minimum: 0
  parameters:
    limit:
      name: limit
      in: query
      description: The number of items to retrieve per page (10000 max).
      schema:
        $ref: '#/components/schemas/limit'
    accountId:
      name: X-Watchtower-Account-Id
      in: header
      description: Account Id
      required: true
      schema:
        $ref: '#/components/schemas/accountId'
      example: 1002000010
    offset:
      name: offset
      in: query
      description: The position in pagination. Specifies the starting row offset into the result set returned. For example, if the page size (limit) is 10, then to select the second page, pass the offset as 10 to retrieve items 11 to 20.<br><br> Search parameters must be consistent across pages.
      schema:
        $ref: '#/components/schemas/offset'
    endTime:
      name: endTime
      in: query
      required: true
      description: The end timestamp. (exclusive)
      example: '2021-07-05T06:30:00Z'
      schema:
        $ref: '#/components/schemas/dateTime'
    deviceGroupId:
      name: deviceGroupId
      in: path
      required: true
      description: The ID of the device group
      schema:
        type: integer
    authorization:
      name: Authorization
      in: header
      description: Bearer Token for authentication
      required: true
      schema:
        type: string
        pattern: ^Bearer [A-Za-z0-9-._~+/]+=*$
      example: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ...
    startTime:
      name: startTime
      in: query
      required: true
      description: The start timestamp. (inclusive)
      example: '2021-07-01T06:30:00Z'
      schema:
        $ref: '#/components/schemas/dateTime'
  securitySchemes:
    oAuth2ClientCredentials:
      type: oauth2
      description: This API uses OAuth 2 with the Client Credentials flow.
      flows:
        clientCredentials:
          tokenUrl: /watchtower/v1/auth/token
          scopes: {}