Aeris TAC Codes API

The TAC Codes API from Aeris — 2 operation(s) for tac codes.

Operations 2

POST /watchtower/v1/tac-codes/search Search TAC Codes #
GET /watchtower/v1/tac-codes/summary Get TAC Codes Metrics #

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-tac-codes-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-tac-codes-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 0.7.0
  title: Aeris IoT Watchtower™ TAC Codes 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: TAC Codes
paths:
  /watchtower/v1/tac-codes/search:
    post:
      summary: Search TAC Codes
      description: 'Returns a paginated list of TAC codes (Type Allocation Codes) observed across all devices in the account, including the device type, brand, model, and the total number of devices sharing that TAC.

        Sort by `totalDevices:DESC` (default) or any other response field in `asc`/`desc` order.'
      operationId: searchTACCodes
      tags:
      - TAC Codes
      parameters:
      - $ref: '#/components/parameters/authorization'
      - $ref: '#/components/parameters/accountId'
      - $ref: '#/components/parameters/offset'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/sort'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TACCodeSearchFilter'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedTACCodeList'
        '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/tac-codes/summary:
    get:
      summary: Get TAC Codes Metrics
      description: 'Returns a full summary of TAC code distributions across all devices in the account: device type breakdown (`summaryOfTypes`), manufacturer brand breakdown (`summaryOfBrands`), and model breakdown (`summaryOfModels`), plus the total device count with a recognised TAC (`totalTacCodeDevices`).

        No pagination — returns the complete result set in a single response.'
      operationId: getTACCodesSummary
      tags:
      - TAC Codes
      parameters:
      - $ref: '#/components/parameters/authorization'
      - $ref: '#/components/parameters/accountId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TACCodeMetrics'
        '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
    '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
  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'
    sort:
      name: sort
      in: query
      description: Use <b>sort=comma-separated-fields[:asc|desc]</b> to sort the result.
      example: deviceId,updateTime:desc
      schema:
        type: string
    authorization:
      name: Authorization
      in: header
      description: Bearer Token for authentication
      required: true
      schema:
        type: string
        pattern: ^Bearer [A-Za-z0-9-._~+/]+=*$
      example: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ...
  schemas:
    Pagination:
      type: object
      properties:
        total:
          $ref: '#/components/schemas/total'
        offset:
          $ref: '#/components/schemas/offset'
        limit:
          $ref: '#/components/schemas/limit'
    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
    TACCodeSearchFilter:
      type: object
      description: Optional filter body for searching TAC codes. All filters are optional; omit the body or send `{}` to retrieve all TAC codes for the account.
      properties:
        tac:
          type: array
          description: Filter by one or more exact TAC codes.
          items:
            type: string
          example:
          - '86471806'
          - '35691411'
        type:
          type: array
          description: Filter by device type (case-insensitive).
          items:
            type: string
          example:
          - Modem
          - IoT Device
        brand:
          type: array
          description: Filter by device brand/manufacturer (case-insensitive).
          items:
            type: string
          example:
          - Quectel
          - Fibocom
        model:
          type: array
          description: Filter by device model (case-insensitive).
          items:
            type: string
          example:
          - EC21
          - MA510-GL
    total:
      type: integer
      format: int64
      description: Total number of items available.
      example: 1
      minimum: 0
    PagedTACCodeList:
      allOf:
      - $ref: '#/components/schemas/Pagination'
      - type: object
        properties:
          data:
            type: array
            description: List of TAC code entries observed in the account.
            items:
              $ref: '#/components/schemas/TACCodeEntry'
    accountId:
      description: Account Id.
      type: integer
      format: int32
      example: 10407
      minimum: 0
    TACCodeMetrics:
      type: object
      description: Full TAC code distribution summary for the account.
      properties:
        totalTacCodeDevices:
          type: integer
          description: Total number of devices with a recognised TAC in the account.
          example: 478
        summaryOfTypes:
          type: array
          description: Distribution of devices by device type (e.g. Modem, IoT Device).
          items:
            $ref: '#/components/schemas/TACCodeSummaryEntry'
        summaryOfBrands:
          type: array
          description: Distribution of devices by manufacturer brand.
          items:
            $ref: '#/components/schemas/TACCodeSummaryEntry'
        summaryOfModels:
          type: array
          description: Distribution of devices by model name.
          items:
            $ref: '#/components/schemas/TACCodeSummaryEntry'
    TACCodeSummaryEntry:
      type: object
      description: A name/count pair representing one category in a TAC code metric summary.
      properties:
        name:
          type: string
          description: Category label (device type, brand name, or model name).
          example: Modem
        total:
          type: integer
          description: Number of devices in this category.
          example: 405
    TACCodeEntry:
      type: object
      description: TAC code entry with device type metadata and total device count.
      properties:
        tac:
          type: string
          description: TAC (Type Allocation Code) — first 8 digits of the IMEI.
          example: '86471806'
        type:
          type: string
          description: Device category derived from the TAC.
          example: Modem
        brand:
          type: string
          description: Device manufacturer derived from the TAC.
          example: Fibocom
        model:
          type: string
          description: Device model derived from the TAC.
          example: MA510-GL
        totalDevices:
          type: integer
          description: Number of devices in the account that share this TAC.
          example: 113
    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
  securitySchemes:
    oAuth2ClientCredentials:
      type: oauth2
      description: This API uses OAuth 2 with the Client Credentials flow.
      flows:
        clientCredentials:
          tokenUrl: /watchtower/v1/auth/token
          scopes: {}