openapi: "3.0.3"
info:
version: 0.7.0
title: Aeris IoT Watchtower™ 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.
The Watchtower API is based on the RESTful interface.
This document covers the following topics:
- Overview of the API
- Detailed description of all available operations
- Access, authentication, and rate limiting
**Supported operations:**
The Aeris IoT Watchtower API delivers security and management functionality based on your subscription package:
- Watchtower Analysis - this subscription package provides API access to the following operations:
- Events - Search, retrieve, update (single or bulk), export, metrics
- Event configuration - Retrieve event configs, create/update/delete suppression configs
- Event policies - Create, update, delete, search, view details, export (CSV), and search/export activity logs
- Device - Retrieve the last IMEI changes for devices and the IMEI change history of a device
- Device groups - Create, update, delete, search, retrieve details, export groups and group devices
- IP flows/Blocked flows/Allowed traffic - Search and export blocked or allowed IP flows
- Security reports - Export full PDF, retrieve summary, details, device location, endpoint location, appendix search/export
- Scheduled reports - Retrieves the status and download link of a scheduled report
- Activity logs - Retrieve activity logs for device groups, events, event configurations, event policies, and event policies activity logs
Note: The WT Analysis permission is required to enable Watchtower Analysis API functionality. Watchtower Analysis only provides access to Reporting device groups.
- Watchtower Protection - this subscription package provides API access to the following operations:
- Device groups - Create, update, delete, search, retrieve details, export groups and group devices
- IP flows/Blocked flows/Allowed traffic - Search and export blocked or allowed IP flows
- Scheduled reports - Retrieves the status and download link of a scheduled report
- Activity logs - Retrieve activity logs for device groups, events, event configurations, location lists, and location lists activity logs
- Applications - Create, update, delete, search, and view details of applications
- Protection policies - Create, update, delete, search, and view details of allow or block protection policies
- Enforcement rules - Create, update, delete, search, retrieve details, activate/deactivate enforcement rules
- Location lists - Create, update, delete, search, suggest entries, and view details of location lists
Note: The WT Protection permission is required to enable Watchtower Protection API functionality. Watchtower Protection only provides access to Enforcement device groups. The WT Complete permission provides access to both Reporting and Enforcement device groups.
- Watchtower Complete - this subscription package provides API access to all capabilities from both the Analysis and Protection packages.
- Watchtower Monitoring - this subscription package does not include API access.
- Watchtower Control - this subscription package does not include API access.
## Access, Authentication and Rate Limiting
The Watchtower API uses Keycloak for authentication and authorization, with OAuth 2.0 Client Credentials Flow.
#### Obtaining Credentials
The credentials are generated manually through a request procedure and transmitted securely to users.
For Enterprise customers requesting Watchtower API access, an Aeris representative must open a Support ticket (CSP ticket) on behalf of the customer Administrator. The Support ticket must specify:
- The Enterprise name.
- The name and email address of the requestor (customer Administrator).
- The list of Enterprises for which the request is being issued.
Once the Support ticket is processed by Aeris, the credentials (`clientId` and `clientSecret`) will be securely provided to the requestor.
Access to specific resources is determined by the roles associated with each `client_id`.
#### Rate Limits
The API enforces a rate limit of 10 requests per minute per `client_id` and per `accountId`. Exceeding this limit returns a `429 Too Many Requests` error.
#### Data Retrieval Limits
There is a maximum limit of 10,000 objects per request (downloading events, IP flows, or other resources). Exceeding this limit returns a `413 Request Entity Too Large` error and directs the user towards the relevant export endpoint.
## Scheduled Reports
All `../export` endpoints start the generation of a Scheduled Report with a unique `reportId`. Use the `reportId` to query the dedicated endpoint for download. Reports are available for 10 minutes after generation. After they expire, a new request must be sent to the export endpoint to regenerate the report.
## Activity Logs
The Activity Logs API provides detailed records of all actions performed within the Watchtower platform. Queries to the `../export` endpoints for activity logs start the generation of an export file with a unique `reportId`. Use the `reportId` to query the dedicated endpoint for download. Reports are available for 10 minutes after generation. After they expire, a new request must be sent to the export endpoint to regenerate the report.
## Support
Each API error response includes a `traceId`. When submitting an incident report to Aeris, include the associated `traceId` for troubleshooting.
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
tags:
- name: Token
description: Endpoint to Acquire and Revoke Token
- name: Events
description: Endpoints for Awareness Security Events
- name: Events Configuration
description: Endpoints for configuring Security Events
- name: Event Policies
description: Endpoints for Awareness Event Policies
- name: Devices
description: >-
Endpoints for Devices (IMEI changes) and per-device deep forensics analytics:
Data Transactions, Data Volume, DNS Queries, Destination Endpoints, IP Flow Metrics.
- name: Device Groups
description: Endpoints for Device Groups
- name: Flows
description: Endpoints for flows - IP flows/Blocked flows/Allowed traffic
- name: Security Report
description: Endpoints for Security Reports
- name: Scheduled Reports
description: Endpoints for downloading Scheduled Reports
- name: Activity Logs
description: Endpoints for Activity Logs
- name: Applications
description: Endpoints for Enforcement Applications
- name: Protection Policies
description: Endpoints for Enforcement Protection Policies
- name: Enforcement Rules
description: Endpoints for Enforcement Rules
- name: Rate Limiters
description: Endpoints for Rate Limiters
- name: Location Lists
description: Endpoints for Location Lists
- name: Gateway
description: Watchtower Configuration APIs for Gateway management
security:
- oAuth2ClientCredentials: [ ]
servers:
- url: https://watchtower-api-prd.aeriscloud.com
paths:
########################## Token ################################################
/watchtower/v1/auth/token:
post:
tags:
- Token
summary: Acquire Access token
description: Endpoint to obtain an access token using Client Credentials flow
operationId: getToken
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
type: object
required:
- grant_type
- client_id
- client_secret
properties:
grant_type:
type: string
enum: [ client_credentials ]
default: client_credentials
client_id:
type: string
example: "operator1.enterprise1.application1"
client_secret:
type: string
format: password
example: "tg69jPfKPtBEMzoPP1gNfI2HrCOZylpO"
responses:
'200':
description: Successful token acquisition
content:
application/json:
schema:
type: object
properties:
access_token:
type: string
example: "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ..."
expires_in:
type: integer
example: 35998
refresh_expires_in:
type: integer
example: 0
token_type:
type: string
example: "Bearer"
not-before-policy:
type: integer
example: 0
scope:
type: string
example: "profile email"
authorized_account_ids:
type: array
items:
type: integer
example: [ 100000001, 100000002, 100000003 ]
authorized_account_id_pattern:
type: string
description: >-
Wildcard pattern for CSP Partner Admin credentials.
Present only for wildcard credentials; authorized_account_ids is absent in this case.
example: "020*"
'400':
description: "Missing required parameter: ..."
'401':
description: Invalid client credentials
/watchtower/v1/auth/accounts:
get:
tags:
- Token
summary: Resolve wildcard account pattern to paginated account list
description: >-
Returns a paginated list of managed enterprise accounts (ID and name) for the CSP
identified by the X-Watchtower-Account-Id header. Requires a Bearer token
with the authorized_account_id_pattern claim (wildcard credentials).
By default, returns only direct managed accounts. Use includeSubAccounts=true
to return the full hierarchy of managed accounts.
operationId: getAuthorizedAccounts
parameters:
- $ref: '#/components/parameters/authorization'
- name: X-Watchtower-Account-Id
in: header
description: CSP Partner Admin's own account ID
required: true
schema:
type: integer
format: int64
example: 10200000
- name: limit
in: query
description: Number of results per page
schema:
type: integer
default: 20
minimum: 1
maximum: 500
- name: offset
in: query
description: Zero-based offset for pagination
schema:
type: integer
default: 0
minimum: 0
- name: sort
in: query
description: >-
Sort field and direction. Format: field,direction.
Allowed fields: accountId, accountName. Directions: asc, desc.
schema:
type: string
default: "accountId,asc"
example: "accountName,desc"
- name: includeSubAccounts
in: query
description: >-
When false (default), returns only direct managed accounts.
When true, returns the full hierarchy of managed accounts.
schema:
type: boolean
default: false
responses:
'200':
description: Paginated list of managed enterprise accounts
content:
application/json:
schema:
$ref: '#/components/schemas/AuthorizedAccountsResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
########################## Generic ##############################################
/watchtower/v1/scheduled-reports/{reportId}:
get:
summary: Get Report Status
description: Returns the status of the scheduled report, and the download link if the report is ready
operationId: getScheduledReport
tags:
- Scheduled Reports
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/reportId'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ScheduledReportStatus'
'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'
########################## [Awareness] Events ###################################
/watchtower/v1/events:
put:
summary: Update multiple Events
description: |
This endpoint allows to update the status of one or more Events.
operationId: updateEvents
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
tags:
- Events
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EventsBulkUpdateRequest'
responses:
'200':
description: 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'
/watchtower/v1/events/search:
post:
summary: Search/Get Events
description: This endpoint returns the list of Events.
operationId: getEvents
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'
- $ref: '#/components/parameters/sort'
tags:
- Events
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EventsQueryRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedEventsTable'
'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/events/{eventId}:
get:
summary: Get details of an Event
description: This endpoint retrieves details about an Event.
operationId: getEvent
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/eventId'
tags:
- Events
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Event'
'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 a single Event (Lifecycle operation)
description: >
This endpoint allows to update the status of an Event and provide a comment.
operationId: updateEvent
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/eventId'
tags:
- Events
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EventsUpdateRequest'
responses:
'200':
description: 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'
/watchtower/v1/events/export:
post:
summary: Export Events
description: Use this endpoint to export the Events report as CSV.
operationId: exportEvents
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/startTime'
- $ref: '#/components/parameters/endTime'
- $ref: '#/components/parameters/sort'
tags:
- Events
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EventsQueryRequest'
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/events/metrics/search:
post:
summary: Get Events Metrics
description: >
This endpoint returns metrics about Events. Allows you to retrieve arbitrary metrics
by supplying dimensions, metrics and filters.
operationId: getEventsMetrics
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'
- $ref: '#/components/parameters/sort'
tags:
- Events
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EventsMetricsRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedSummaryTable'
example:
total: 4
limit: 10
offset: 0
schema:
fields:
- name: status
type: STRING
- name: cnt__event_id
type: INTEGER
data:
- - "New"
- 15
- - "Saved For Review"
- 5
- - "Dismissed"
- 6
- - "Completed"
- 10
'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'
# Next release: Events: also Devices
# Aggregated Events
/watchtower/v1/aggregate-events/metrics/search:
post:
summary: Get Aggregated Events Metrics
description: This endpoint returns metrics about Aggregates events.
operationId: getAggregatedEventsMetrics
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'
- $ref: '#/components/parameters/sort'
tags:
- Events
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AggregatedEventsQueryRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedSummaryTable'
example:
total: 4
limit: 10
offset: 0
lastEvaluatedDate: "2025-10-10"
schema:
fields:
- name: status
type: STRING
- name: cnt__event_id
type: INTEGER
data:
- - "New"
- 15
- - "Saved For Review"
- 5
- - "Dismissed"
- 6
- - "Completed"
- 10
'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'
# Next release: Origin & Destination Matrix
# Events suppression configs
/watchtower/v1/events/configs:
get:
summary: Get Event Configs
description: |
This endpoint returns the list of Event configs.
operationId: getEventConfigs
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
tags:
- Events Configuration
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedEventConfigsTable'
'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/events/configs/{eventConfigId}/suppression-configs:
post:
summary: Create an Event suppression configuration
description: |
This endpoint allows to create a new Event suppression configuration.
operationId: createEventSuppressionConfig
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/eventConfigId'
tags:
- Events Configuration
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EventSuppressionConfigCreateRequest'
responses:
'201':
description: Created.
'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/events/configs/{eventConfigId}/suppression-configs/{suppressionConfigId}:
get:
summary: Get Event Suppression Configs
description: |
This endpoint returns detail of event suppression configs.
operationId: getEventSuppressionConfigs
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/eventConfigId'
- $ref: '#/components/parameters/suppressionConfigId'
tags:
- Events Configuration
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/EventSuppressionConfig'
'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'
put:
summary: Update Event Suppression Configs
description: |
This endpoint update existing event suppression configs.
operationId: updateEventSuppressionConfigs
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/eventConfigId'
- $ref: '#/components/parameters/suppressionConfigId'
tags:
- Events Configuration
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EventSuppressionConfigUpdateRequest'
responses:
'200':
description: 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 Event Suppression Configs
description: |
This endpoint deletes existing event suppression configs.
operationId: deleteEventSuppressionConfigs
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/eventConfigId'
- $ref: '#/components/parameters/suppressionConfigId'
- $ref: '#/components/parameters/undoDismissedEvents'
tags:
- Events Configuration
responses:
'200':
description: 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'
########################## [Awareness] Event Policies ###########################
/watchtower/v1/event-policies:
post:
summary: Create an Event Policy
operationId: createEventPolicy
tags:
- Event Policies
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EventPolicyCreateRequest'
responses:
'201':
description: Event policy created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/EventPolicyCreateResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'409':
description: Conflict — an event policy with this name already exists for the account.
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
/watchtower/v1/event-policies/search:
post:
summary: Search Event Policies
operationId: searchEventPolicies
tags:
- Event Policies
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EventPolicySearchRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedEventPoliciesTable'
'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/event-policies/{policyId}:
get:
summary: Get an Event Policy
operationId: getEventPolicy
tags:
- Event Policies
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/policyId'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/EventPolicyResponse'
'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 Event Policy
operationId: updateEventPolicy
tags:
- Event Policies
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/policyId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EventPolicyUpdateRequest'
responses:
'200':
description: Successfully updated.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'409':
description: Conflict — an event policy with this name already exists for the account.
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
delete:
summary: Delete an Event Policy
operationId: deleteEventPolicy
tags:
- Event Policies
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/policyId'
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'
'404':
$ref: '#/components/responses/404'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
/watchtower/v1/event-policies/export:
post:
summary: Export Event Policies
description: Use this endpoint to export Event Policies as CSV.
operationId: exportEventPolicies
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
tags:
- Event Policies
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EventPolicySearchRequest'
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'
########################## [Awareness] SRS ######################################
# IP Flows
/watchtower/v1/ip-flows/search:
post:
summary: Search IP Flows (Account-level)
description: >
Retrieves structured IP flow records (BLOCKED or ALLOWED) across all devices in
the account. Requires a `flowType` discriminator (`BLOCKED` or `ALLOWED`) in the
request body to select the appropriate filter schema.
**Distinct from `POST /watchtower/v1/devices/ip-flows/search`:**
- This endpoint is **account-scoped** — it searches across all devices and returns
structured `BLOCKED`/`ALLOWED` flow DTOs with enforcement policy context.
- The device-scoped `/devices/ip-flows/search` is **device-scoped** via `iccid` and
returns raw per-flow metric records (timing, data volume, source/destination detail)
without enforcement context.
operationId: getIPFlows
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'
- $ref: '#/components/parameters/sort'
tags:
- Flows
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/BlockedIPFlowsSearchRequest'
- $ref: '#/components/schemas/AllowedIPFlowsSearchRequest'
discriminator:
propertyName: flowType
mapping:
BLOCKED: '#/components/schemas/BlockedIPFlowsSearchRequest'
ALLOWED: '#/components/schemas/AllowedIPFlowsSearchRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedFlows'
'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/ip-flows/export:
post:
summary: API for exporting IP Flows
description: This endpoint exports IP Flows as scheduled report
operationId: exportIPFlows
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/startTime'
- $ref: '#/components/parameters/endTime'
- $ref: '#/components/parameters/sort'
tags:
- Flows
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/BlockedIPFlowsSearchRequest'
- $ref: '#/components/schemas/AllowedIPFlowsSearchRequest'
discriminator:
propertyName: flowType
mapping:
BLOCKED: '#/components/schemas/BlockedIPFlowsSearchRequest'
ALLOWED: '#/components/schemas/AllowedIPFlowsSearchRequest'
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'
# Blocked Flows
/watchtower/v1/blocked-flows/search:
post:
summary: API to get Blocked Flows
description: This endpoint retrieves Blocked Flows
operationId: searchBlockedFlows
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'
- $ref: '#/components/parameters/sort'
tags:
- Flows
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BlockedFlowsSearchRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedBlockedFlows'
'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/blocked-flows/export:
post:
summary: API to export Blocked Flows
description: This endpoint exports Blocked Flows as CSV with Scheduled Report
operationId: exportBlockedFlows
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'
- $ref: '#/components/parameters/sort'
tags:
- Flows
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BlockedFlowsSearchRequest'
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'
'413':
$ref: '#/components/responses/413'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
# Allowed Traffic
/watchtower/v1/allowed-traffic/search:
post:
summary: API to get Allowed Traffic
description: This endpoint retrieves Allowed Traffic
operationId: searchAllowedTraffic
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'
- $ref: '#/components/parameters/sort'
tags:
- Flows
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AllowedTrafficSearchRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedAllowedTraffic'
'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/allowed-traffic/export:
post:
summary: API to export Allowed Traffic
description: This endpoint exports Allowed Traffic as CSV with Scheduled Report
operationId: exportAllowedTraffic
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'
- $ref: '#/components/parameters/sort'
tags:
- Flows
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AllowedTrafficSearchRequest'
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'
'413':
$ref: '#/components/responses/413'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
# Next release:
# /v2.0/security/accounts/{accountId}/endpoints/search
# /v2.0/security/accounts/{accountId}/endpoints/export
# /v2.0/security/accounts/{accountId}/devices/search
# /v2.0/security/accounts/{accountId}/devices/export
# Device Changes
/watchtower/v1/devices/imei-change:
get:
summary: Retrieve Devices' Last IMEI changes.
description: >
This endpoint provides a list of Devices' last IMEI changes within the
time range.
operationId: getDevicesChanges
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'
tags:
- Devices
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedDeviceImeiChanges'
'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/devices/{deviceId}/imei-change:
get:
summary: Retrieve IMEI change history of a device.
description: >
This endpoint provides IMEI change history for a device within the time
range.
operationId: getDeviceChanges
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/deviceId'
- $ref: '#/components/parameters/startTime'
- $ref: '#/components/parameters/endTime'
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
tags:
- Devices
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedDeviceImeiChanges'
'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'
########################## [Awareness] DeviceGroups #############################
/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'
########################## [Awareness] TAC Codes #################################
/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'
# TAC Codes Metrics — summary distribution across types, brands, models
/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'
# Next release: we can add support for more Query filters (e.g. SPs, APNs, ...)
########################## [Awareness] Security Report ##########################
/watchtower/v1/security-report/export:
get:
tags:
- Security Report
summary: Get Monthly Security Report PDF
description: Get Monthly Security Report PDF
operationId: getSecurityReportPDF
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/year'
- $ref: '#/components/parameters/month'
responses:
'200':
description: Successful Response
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/security-report/summary:
get:
tags:
- Security Report
summary: Get Security Report Summary
description: Get Summary section from Security Report
operationId: getSecurityReportSummary
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/year'
- $ref: '#/components/parameters/month'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/SecurityReportSummary'
example:
total_low: 19
total_medium: 3
total_high: 3
overall_severity: High
summary_text: During the month of April 2025, Aeris IoT Watchtower™ conducted a security assessment of your 105,899 provisioned devices, of which 5 were active, on the Aeris network. We encountered a total of 25 issues with 3 considered to be high risk, 3 medium risk, and 19 low risks across the categories below. In this summary, we list only the most important in each category.
disclaimer: The results presented in this report are a point-in-time risk assessment and represent the state of security on the date it was produced. Aeris makes no representation on the completeness of the risks assessed. The risks analyzed in the section titled Security Risk Assessment Details constitute the entire analysis performed. This report is prepared for the intended recipient only and no other parties may rely on it for any purposes.
disclaimer_no2: ICMP, DNS and NTP protocols are excluded from endpoint locations map.
sections:
application_security:
high: 1
medium: 1
low: 0
highest_severity: High
recommended_action: Verify the legitimacy of traffic for devices communicating in non-designated / OFAC countries.
data_protection:
high: 2
medium: 0
low: 2
highest_severity: High
recommended_action: We recommend configuring your IoT devices to use encrypted protocols (HTTPS and SFTP) rather than unencrypted protocols (HTTP and FTP).
device_security:
high: 0
medium: 0
low: 15
highest_severity: Low
recommended_action: No action required at this time.
inventory_control_devices:
high: 0
medium: 0
low: 2
highest_severity: Low
recommended_action: No action required at this time.
net_work_security:
high: 0
medium: 2
low: 0
highest_severity: Medium
recommended_action: We recommend an end-to-end encrypted channel to be used for data flow between IOT devices and the customer’s application server.
device_activated_summary:
- - Unknown
- 5
- 462612618
trend_low:
content: +18.75%
direction: trend_up
current_value: 19
previous_value: 16
trend_medium:
content: 0%
direction: trend_flat
current_value: 3
previous_value: 3
trend_high:
content: '-50%'
direction: trend_down
current_value: 3
previous_value: 6
'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/security-report/detail:
get:
tags:
- Security Report
summary: Get Security Report Detail
description: Get Details section from Security Report
operationId: getSecurityReportDetail
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/year'
- $ref: '#/components/parameters/month'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/SecurityReportDetail'
example:
sections:
inventory_control_devices:
- sec_no: '90'
tds:
- content: 1.1 Devices located according to expectations
column: security_item
- content: Number of devices outside their designated home location
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices outside of designated home country: Low < 5%; Medium 5% to 10%; High > 10%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '95'
tds:
- content: 1.2 Non-IoT devices in use
column: security_item
- content: Use of Non-IoT devices
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% of non-IoT devices: Low < 5%; Medium 5% to 10%; High > 10%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
data_protection:
- sec_no: '100'
tds:
- content: 2.1 Encrypt Data flow to private applications
column: security_item
- content: Number of enterprise cellular connections towards applications deployed in the enterprise’s private network not using encrypted channels (ex- https or TLS)?
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% of devices using unencrypted channels: Low < 5%; Medium 5% to 10%; High > 10%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '105'
tds:
- content: 2.2 Encrypt Data flow to public applications
column: security_item
- content: Number of enterprise cellular connections towards applications deployed in the enterprise’s public network not using encrypted channels (ex- https or TLS)?
column: description
- content: '+100%'
direction: trend_up
current_value: 1
previous_value: 0
column: trend
- content: '1'
column: occurrence_count
- content: '1'
column: device_impacted
- content: '% of devices using unencrypted channels: Low < 5%; Medium 5% to 10%; High > 10%'
column: assessment_criteria
- content: High
column: assessed_severity
- content: We recommend configuring your IoT devices to use encrypted protocols (HTTPS and SFTP) rather than unencrypted protocols (HTTP and FTP).
column: recommended_action
- sec_no: '110'
tds:
- content: 2.3 Use of untrusted DNS servers
column: security_item
- content: Number of devices connecting to a recursive DNS that is public or untrusted
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% of devices using a public recursive DNS: Low < 5%; Medium 5% to 10%; High > 10%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '115'
tds:
- content: 2.4 Data Sovereignty
column: security_item
- content: Number of devices communicating with applications located outside the home country
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% of devices communicating with applications outside their home country: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
net_work_security:
- sec_no: '120'
tds:
- content: 3.1 Devices utilizing a secure connection
column: security_item
- content: Devices utilizing VPN to connect to enterprise’s servers
column: description
- content: '+100%'
direction: trend_up
current_value: 1
previous_value: 0
column: trend
- content: '1'
column: occurrence_count
- content: '1'
column: device_impacted
- content: |-
% devices use VPN:
Low > 30%
Medium Otherwise
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '160'
tds:
- content: 3.2 Devices utilizing private APN
column: security_item
- content: The devices are using a private APN to connect to private applications, private cloud hosted applications or to internet.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices utilizing private APN: Low ≥ 0%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '165'
tds:
- content: 3.3 Devices utilizing internet APN
column: security_item
- content: The devices are using an Internet APN to connect to public cloud hosted applications or to internet.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices utilizing internet APN: Low ≥ 0%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '1200'
tds:
- content: 3.4 Manage security access controls
column: security_item
- content: Number of enforcement security policies for device traffic
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: Low if any network policy configured, Medium otherwise
column: assessment_criteria
- content: Medium
column: assessed_severity
- content: No action required at this time.
column: recommended_action
application_security:
- sec_no: '125'
tds:
- content: '4.1 Non-compliant communications: OFAC'
column: security_item
- content: Devices communicating to endpoints in OFAC countries.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: 'Devices communicating to endpoints in OFAC countries: Low = 0; High > 0'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '130'
tds:
- content: 4.2 Public applications
column: security_item
- content: Applications reachable via the public Internet
column: description
- content: '+100%'
direction: trend_up
current_value: 54
previous_value: 0
column: trend
- content: '54'
column: occurrence_count
- content: '0'
column: device_impacted
- content: 'Number of applications reachable on the public Internet: Low = 0; Medium > 0'
column: assessment_criteria
- content: Medium
column: assessed_severity
- content: We recommend secure VPN communication instead of public internet for application communication.
column: recommended_action
device_security:
- sec_no: '55'
tds:
- content: 5.1 Malicious Endpoint
column: security_item
- content: Devices communicating with well-known malicious endpoints identified by their IP address
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% of devices communicating with Malicious endpoints by IP: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '60'
tds:
- content: 5.2 Botnet and C&C
column: security_item
- content: Devices communicated with an endpoint related to a malicious bot, infecting the hosts and connecting them to a central server or servers that act as a command and control (C&C) center.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices showing Botnet and C&C: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '65'
tds:
- content: 5.3 Cryptocurrency
column: security_item
- content: Devices communicated with an endpoint related to cryptocurrencies.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices showing Cryptocurrency: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '70'
tds:
- content: 5.4 Data Exfiltration
column: security_item
- content: Devices communicated with an endpoint participating in data exfiltration.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices showing Data Exfiltration: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '80'
tds:
- content: 5.5 Phishing
column: security_item
- content: Devices communicated with email messages that look like they are from a trusted business but are actually connected to phishing websites.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices showing Phishing: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '85'
tds:
- content: 5.6 Ransomware
column: security_item
- content: Devices communicated with an endpoint known to have ransomware.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices showing Ransomware: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '10'
tds:
- content: 5.7 Suspicious device behavior - Address Scan
column: security_item
- content: Devices scanning the addresses of other devices in their subnet
column: description
- content: '+100%'
direction: trend_up
current_value: 1
previous_value: 0
column: trend
- content: '1'
column: occurrence_count
- content: '1'
column: device_impacted
- content: '% devices showing address scan events: Low = 0%; Medium 0% to 0.1%; High > 0.1%'
column: assessment_criteria
- content: High
column: assessed_severity
- content: Verify the integrity of these devices that have been performing unusual address scans.
column: recommended_action
- sec_no: '30'
tds:
- content: 5.8 Suspicious device behavior - Port Scan
column: security_item
- content: Devices scanning ports beyond their normal connection to the endpoint
column: description
- content: '+100%'
direction: trend_up
current_value: 1
previous_value: 0
column: trend
- content: '1'
column: occurrence_count
- content: '1'
column: device_impacted
- content: '% devices showing port scan events: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: High
column: assessed_severity
- content: Verify the integrity of these devices that have been performing unusual port scans.
column: recommended_action
- sec_no: '35'
tds:
- content: 5.9 Suspicious Behavior - SIM misuse
column: security_item
- content: Devices having their SIM swapped
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices showing SIM misuse alarm: Low = 0%; Medium 0% to 0.1%; High > 0.1%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '75'
tds:
- content: 5.10 Suspicious Endpoint
column: security_item
- content: Devices communicated with a domain that has not been established and is serving temporary content on its base page (a parked domain).
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices showing Suspicious Endpoint: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '20'
tds:
- content: 5.11 Anomalous Behavior - New destination IPs
column: security_item
- content: Devices attached to unexpected new destination IP addresses on the network
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices showing new IP addresses: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '40'
tds:
- content: 5.12 Anomalous Behavior - TCP Bad Flags
column: security_item
- content: Devices having unexpected use of TCP flags.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: 'Frequency of TCP bad flag events per week: Low < 10; Medium 10 to 100; High > 100'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '45'
tds:
- content: 5.13 Anomalous Behavior - TCP large flow count
column: security_item
- content: Devices having unexpected large count of TCP flows.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices showing large TCP flow count: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '50'
tds:
- content: 5.14 Anomalous Behavior - Traffic Spike
column: security_item
- content: Devices having unexpected large occurrence of traffic spike.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% devices showing traffic spike: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '175'
tds:
- content: 5.15 Anomalous Mobility Event - Moving Outside a Location List
column: security_item
- content: The device has been identified outside the location list associated with one of the device groups this device belongs to.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% anomalous mobility events - moving outside location list: Low < 0.1%; Medium 0.1% to 0.5%; Critical > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '180'
tds:
- content: 5.16 Anomalous Mobility Event - Impossible Mobility
column: security_item
- content: The device has been moving across different locations at a speed that is beyond reasonable (900 km/h).
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% anomalous mobility events - impossible mobility: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
- sec_no: '140'
tds:
- content: 5.17 Blocked Flows
column: security_item
- content: Blocked Flows by a security policy.
column: description
- content: '0%'
direction: trend_flat
current_value: 0
previous_value: 0
column: trend
- content: '0'
column: occurrence_count
- content: '0'
column: device_impacted
- content: '% showing Blocked Flows: Low < 0.1%; Medium 0.1% to 0.5%; High > 0.5%'
column: assessment_criteria
- content: Low
column: assessed_severity
- content: No action required at this time.
column: recommended_action
category:
inventory_control_devices: 1. Inventory and Control of Devices
data_protection: 2. Data Protection
net_work_security: 3. Network Security
application_security: 4. Application Security
device_security: 5. Device Security
'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/security-report/device-location:
get:
tags:
- Security Report
summary: Get Security Report Device Location Tables
description: Get Device Location section from Security Report
operationId: getSecurityReportDevice
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/year'
- $ref: '#/components/parameters/month'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/SecurityReportDeviceUsage'
example:
total: 1
data:
- - active_devices: 0
device_country: string
data_usage_bytes: 0
'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/security-report/endpoint-location:
get:
tags:
- Security Report
summary: Get Security Report Endpoint Location Tables
description: Get Endpoint Location section from Security Report
operationId: getSecurityReportEndpoint
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/year'
- $ref: '#/components/parameters/month'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/SecurityReportEndpoint'
example:
total: 1
data:
- - endpoint_country: United States
device_count: 5
endpoint_count: 385
data_usage_bytes: 12131923
ip_flows: 8320
'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/security-report/appendix/search:
post:
tags:
- Security Report
summary: Get Security Report Appendix
description: Get Appendix report of an account for a specific month
operationId: getSecurityReportAppendix
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/year'
- $ref: '#/components/parameters/month'
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SecurityReportAppendixRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PagedSecurityReportAppendix'
'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/security-report/appendix/export:
post:
summary: Export Security Report Appendix
description: Export Security Report Appendix
tags:
- Security Report
operationId: exportSecurityReportAppendix
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/year'
- $ref: '#/components/parameters/month'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SecurityReportAppendixTrigger'
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'
########################## Activity Logs ########################################
/watchtower/v1/activity-logs/device-groups/search:
post:
summary: Get device group activity logs
description: Get activity logs of a device group
operationId: getActivityLogsDeviceGroups
tags:
- Activity Logs
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeviceGroupActivityLogQuery'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedDeviceGroupActivityLog'
'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/activity-logs/events/search:
post:
summary: Get events activity logs
description: Get events life cycle activity logs
operationId: getActivityLogsEvents
tags:
- Activity Logs
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EventActivityLogQuery'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedEventActivityLog'
'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/activity-logs/events/configs/search:
post:
summary: Get event configs activity logs
description: Get event configs activity logs
operationId: getActivityLogsEventConfigs
tags:
- Activity Logs
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EventConfigActivityLogQuery'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedEventConfigActivityLog'
'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/activity-logs/event-policies/search:
post:
summary: Get event policy activity logs
description: Search activity logs for event policies
operationId: getActivityLogsEventPolicies
tags:
- Activity Logs
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EventPolicyActivityLogQuery'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedEventPolicyActivityLog'
'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/activity-logs/event-policies/export:
post:
summary: Export Event Policy Activity Logs
description: Use this endpoint to export Event Policy Activity Logs as CSV.
operationId: exportActivityLogsEventPolicies
tags:
- Activity Logs
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/EventPolicyActivityLogQuery'
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/activity-logs/applications/search:
post:
summary: Get applications activity logs
description: Get applications activity logs
operationId: getActivityLogsApplications
tags:
- Activity Logs
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ApplicationActivityLogQuery'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedApplicationActivityLog'
'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/activity-logs/protection-policies/search:
post:
summary: Get protection policies activity logs
description: Get protection policies activity logs
operationId: getActivityLogsProtectionPolicies
tags:
- Activity Logs
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProtectionPolicyActivityLogQuery'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedProtectionPolicyActivityLog'
'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/activity-logs/enforcement-rules/search:
post:
summary: Get enforcement rules activity logs
description: Get enforcement rules activity logs
operationId: getActivityLogsEnforcementRules
tags:
- Activity Logs
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EnforcementRuleActivityLogQuery'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedEnforcementRuleActivityLog'
'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/activity-logs/location-lists/search:
post:
description: Get location lists activity logs
operationId: getActivityLogsLocationLists
tags:
- Activity Logs
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LocationListActivityLogQuery'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedLocationListActivityLog'
'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'
########################## [Enforcement] Applications ###################################
/watchtower/v1/activity-logs/service-configurations/search:
post:
summary: Get service configuration activity logs
description: Get service configuration activity logs
operationId: getActivityLogsServiceConfigurations
tags:
- Activity Logs
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'
- $ref: '#/components/parameters/sort'
- name: serviceConfigurationType
in: query
required: false
schema:
type: string
description: Filter by service configuration type (e.g. SPLIT_BILLING, RATE_LIMIT).
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceConfigurationActivityLogQuery'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedServiceConfigurationActivityLog'
'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/applications:
post:
summary: Create an application
operationId: createApplication
tags:
- Applications
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ApplicationCreateRequest'
responses:
'201':
description: Application created successfully
content:
application/json:
schema:
type: integer
format: int64
'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/applications/search:
post:
summary: Search applications
operationId: searchApplications
tags:
- Applications
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ApplicationsQueryRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedApplications'
'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/applications/{applicationId}:
get:
summary: Get an application
operationId: getApplication
tags:
- Applications
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: '#/components/parameters/applicationId'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Application'
'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'
put:
summary: Update an existing application
operationId: updateApplication
tags:
- Applications
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: "#/components/parameters/applicationId"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ApplicationUpdateRequest'
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 an application
operationId: deleteApplication
tags:
- Applications
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: "#/components/parameters/applicationId"
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'
########################## [Enforcement] Protection Policies ###################################
/watchtower/v1/protection-policies:
post:
summary: Create a protection policy
operationId: createProtectionPolicy
tags:
- Protection Policies
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProtectionPolicyCreateRequest'
responses:
'201':
description: Protection policy created successfully
content:
application/json:
schema:
type: integer
format: int64
'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/protection-policies/search:
post:
summary: Search protection policies
operationId: searchProtectionPolicies
tags:
- Protection Policies
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProtectionPoliciesQueryRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedProtectionPolicies'
'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/protection-policies/{protectionPolicyId}:
get:
summary: Get a protection policy
operationId: getProtectionPolicy
tags:
- Protection Policies
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: '#/components/parameters/protectionPolicyId'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ProtectionPolicy'
'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'
put:
summary: Update an existing protection policy
operationId: updateProtectionPolicy
tags:
- Protection Policies
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: "#/components/parameters/protectionPolicyId"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProtectionPolicyUpdateRequest'
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 protection policy
operationId: deleteProtectionPolicy
tags:
- Protection Policies
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: "#/components/parameters/protectionPolicyId"
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'
########################## [Enforcement] Enforcement Rules ###################################
/watchtower/v1/enforcement-rules:
post:
summary: Create an enforcement rule
operationId: createEnforcementRule
tags:
- Enforcement Rules
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EnforcementRuleCreateRequest'
responses:
'201':
description: Enforcement rule created successfully
content:
application/json:
schema:
type: integer
format: int64
'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/enforcement-rules/search:
post:
summary: Search enforcement rules
operationId: searchEnforcementRules
tags:
- Enforcement Rules
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EnforcementRulesQueryRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedEnforcementRules'
'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/enforcement-rules/{enforcementRuleId}:
get:
summary: Get an enforcement rule
operationId: getEnforcementRule
tags:
- Enforcement Rules
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: '#/components/parameters/enforcementRuleId'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/EnforcementRule'
'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'
put:
summary: Update an existing enforcement rule
operationId: updateEnforcementRule
tags:
- Enforcement Rules
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: "#/components/parameters/enforcementRuleId"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EnforcementRuleUpdateRequest'
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 an enforcement rule
operationId: deleteEnforcementRule
tags:
- Enforcement Rules
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: "#/components/parameters/enforcementRuleId"
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/enforcement-rules/{enforcementRuleId}/activate:
post:
summary: Activate an enforcement rule
operationId: activateEnforcementRule
tags:
- Enforcement Rules
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/enforcementRuleId'
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'
/watchtower/v1/enforcement-rules/{enforcementRuleId}/deactivate:
post:
summary: Deactivate an enforcement rule
operationId: deactivateEnforcementRule
tags:
- Enforcement Rules
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/enforcementRuleId'
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'
########################## [Enforcement] Rate Limiters ###################################
/watchtower/v1/rate-limiters:
post:
summary: Create rate limiter definitions
description: Creates rate limiters (one per config entry) for the given account under a shared name.
operationId: createRateLimiter
tags:
- Rate Limiters
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ExternalRateLimiterCreateRequest'
responses:
'201':
description: Rate limiters created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ExternalRateLimiterListResponse'
'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/rate-limiters/search:
post:
summary: Search rate limiters
description: Retrieves rate limiters for the given account, with optional filtering.
operationId: searchRateLimiters
tags:
- Rate Limiters
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ExternalRateLimitersQueryRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedRateLimiters'
'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/rate-limiters/{rateLimiterId}:
get:
summary: Get a rate limiter by ID
operationId: getRateLimiter
tags:
- Rate Limiters
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: '#/components/parameters/rateLimiterId'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/RateLimiter'
'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'
put:
summary: Update a rate limiter definition
operationId: updateRateLimiter
tags:
- Rate Limiters
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: "#/components/parameters/rateLimiterId"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ExternalRateLimiterUpdateRequest'
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 rate limiter definition
operationId: deleteRateLimiter
tags:
- Rate Limiters
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: "#/components/parameters/rateLimiterId"
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'
########################## Location Lists ###################################
/watchtower/v1/location-lists:
post:
summary: Create a location list
operationId: createLocationList
tags:
- Location Lists
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LocationListCreateRequest'
responses:
'201':
description: Location list created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/LocationList'
'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/location-lists/search:
post:
summary: Search location lists
operationId: searchLocationLists
tags:
- Location Lists
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LocationListQueryRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedLocationLists'
'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/location-lists/suggest-entries:
post:
summary: Suggest entries for a location list
operationId: suggestLocationListEntries
tags:
- Location Lists
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LocationListSuggestionRequest'
responses:
'200':
description: Suggested entries
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/LocationListEntry'
'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/location-lists/{locationListId}:
get:
summary: Get location list details
operationId: getLocationList
tags:
- Location Lists
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/locationListId'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/LocationList'
'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 location list
operationId: updateLocationList
tags:
- Location Lists
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: "#/components/parameters/locationListId"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LocationListUpdateRequest'
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 location list
operationId: deleteLocationList
tags:
- Location Lists
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: "#/components/parameters/accountId"
- $ref: "#/components/parameters/locationListId"
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'
########################## [Awareness] Flow Aggregates Metrics #################
/watchtower/v1/flow-aggregates/metrics/search:
post:
summary: Get Account Flow Aggregates Metrics
description: |
Returns daily aggregated security metrics for an account across a date range.
Supported metrics: unique_endpoint_ip_count, unique_endpoint_fqdn_count,
avg_mo_data_bytes_per_transaction, avg_mt_data_bytes_per_transaction,
imei_change_event_count, public_dns_query_count, private_dns_query_count,
total_mo_data_bytes, total_mt_data_bytes.
The maximum allowed period between `startDate` and `endDate` is 90 days. Requests exceeding this limit return `400 Bad Request`.
operationId: getFlowAggregatesMetrics
tags:
- Flows
parameters:
- $ref: '#/components/parameters/authorization'
- $ref: '#/components/parameters/accountId'
- $ref: '#/components/parameters/startDate'
- $ref: '#/components/parameters/endDate'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AccountDailyMetricsRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedSummaryTableData'
'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'
########################## [Awareness] Device Deep Forensics ####################
# Device Flow Aggregates Metrics Chart (merged: data-transactions, destination-endpoints, dns-queries)
/watchtower/v1/devices/flow-aggregates/metrics/search:
post:
summary: Get Device Metrics Chart
description: >
Returns hourly time-series of device network metrics for a single device.
Use `metricGroup` to select which group of metrics to retrieve:
- `DATA_TRANSACTIONS` — average data per transaction
(`avgMoDataBytes`, `avgMtDataBytes`).
- `DATA_VOLUME` — total data volume
(`sumMoDataBytes`, `sumMtDataBytes`).
- `DNS_QUERIES` — DNS activity metrics
(`privateOccurrences`, `publicOccurrences`).
Optional DNS filter fields: `isPublicDns`, `domainHosts`, `domainHostsOperation`.
- `DESTINATION_ENDPOINTS` — unique destination count
(`uniqueServerIpCount`).
- `IP_FLOWS` — IP flow event count (`occurrences`).
Optional IP-flow filter fields: `sourceIp`, `sourcePort`, `destinationPort`.
Only metric fields belonging to the requested group are populated in the response;
all other metric fields are `null`. A `400` is returned if group-specific filter
fields are used with the wrong group.
operationId: getDeviceFlowAggregatesMetrics
tags:
- Devices
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/DeviceMetricsChartRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/DeviceMetricsChartResponse'
'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'
# Flow Aggregates Table (merged: data-transactions + destination-endpoints)
/watchtower/v1/devices/flow-aggregates/search:
post:
summary: Get Flow Aggregates Table
description: >
Returns a paginated breakdown of network flow aggregates for a specific device,
grouped by destination endpoint (server FQDN, IP, protocol, port), including
occurrence counts and total MO/MT/combined byte volumes per group. Scope the
query to a device via `iccid` in the request body and apply optional filters
by destination FQDN, IP, application protocol, or port.
operationId: getDeviceFlowAggregatesTable
tags:
- Devices
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeviceFlowTableRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedFlowAggregatesTable'
'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'
# DNS Queries Table
/watchtower/v1/devices/dns-queries/search:
post:
summary: Get DNS Queries Table
description: >
Returns a paginated breakdown of DNS Queries for a specific device,
grouped by DNS server (FQDN, IP, protocol, port, public/private type).
Scope to a device via `iccid`, optionally filter by DNS FQDN/IP, protocol,
port, or public/private type. Use `domainHosts` with `domainHostsOperation`
to include or exclude specific DNS servers (max 1000 entries);
`domainHostsOperation` defaults to `in` when omitted.
operationId: getDeviceDnsQueriesTable
tags:
- Devices
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DnsQueriesTableRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedDnsQueriesTable'
'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'
# Device IP Flows Table
/watchtower/v1/devices/ip-flows/search:
post:
summary: Search Device IP Flows
description: >
Returns a paginated list of raw IP flow records for a specific device, with
per-flow timing, source/destination endpoint, and data volume detail. Scope
to a device via `iccid` and filter optionally by destination/source FQDN,
IP, protocol, or port. Default sort: `startTime:asc`.
**Distinct from `POST /watchtower/v1/ip-flows/search`:**
- This endpoint is **device-scoped** via `iccid` and returns raw per-flow
metric records (timing, bytes, source/destination) without enforcement context.
- The account-level `/ip-flows/search` searches across all devices and returns
structured `BLOCKED`/`ALLOWED` flow DTOs with policy enforcement detail.
operationId: getDeviceIpFlows
tags:
- Devices
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'
- $ref: '#/components/parameters/sort'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeviceIpFlowFilter'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PagedIpFlowMetricsTable'
'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'
########################## Gateway ###########################################
/watchtower/v1/gateways:
get:
tags:
- Gateway
summary: List gateways by company
operationId: listGateways
parameters:
- name: companyId
in: query
required: true
schema:
type: string
- name: status
in: query
required: false
schema:
type: string
description: Filter by device status (Active, Suspended, Terminated)
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/GatewayResponse'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'400':
$ref: '#/components/responses/400Configuration'
'500':
$ref: '#/components/responses/500'
post:
tags:
- Gateway
summary: Provision a gateway
operationId: provisionGateway
parameters:
- name: Idempotency-Key
in: header
required: false
schema:
type: string
description: Client-supplied idempotency key (UUID). Same key replays the cached response.
- name: X-Watchtower-Trace-Id
in: header
required: false
schema:
type: string
description: Correlation ID propagated through all downstream calls and stored in BigQuery.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GatewayProvisionRequest'
responses:
'201':
description: Gateway provisioned successfully
content:
application/json:
schema:
$ref: '#/components/schemas/GatewayResponse'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'409':
$ref: '#/components/responses/409Configuration'
'400':
$ref: '#/components/responses/400Configuration'
'503':
$ref: '#/components/responses/503Configuration'
'500':
$ref: '#/components/responses/500'
/watchtower/v1/gateways/{gatewayId}:
get:
tags:
- Gateway
summary: Get gateway by ID
operationId: getGateway
parameters:
- name: gatewayId
in: path
required: true
schema:
type: string
- name: companyId
in: query
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/GatewayResponse'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'400':
$ref: '#/components/responses/400Configuration'
'500':
$ref: '#/components/responses/500'
put:
tags:
- Gateway
summary: Update gateway fields
operationId: updateGateway
parameters:
- name: gatewayId
in: path
required: true
schema:
type: string
- name: companyId
in: query
required: true
schema:
type: string
- name: Idempotency-Key
in: header
required: false
schema:
type: string
description: Client-supplied idempotency key (UUID). Same key replays the cached response.
- name: X-Watchtower-Trace-Id
in: header
required: false
schema:
type: string
description: Correlation ID propagated through all downstream calls.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GatewayUpdateRequest'
responses:
'204':
description: Gateway updated successfully
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'400':
$ref: '#/components/responses/400Configuration'
'500':
$ref: '#/components/responses/500'
delete:
tags:
- Gateway
summary: Deprovision a gateway
operationId: deprovisionGateway
parameters:
- name: gatewayId
in: path
required: true
schema:
type: string
- name: companyId
in: query
required: true
schema:
type: string
- name: Idempotency-Key
in: header
required: false
schema:
type: string
description: Client-supplied idempotency key (UUID). Same key replays the cached response.
- name: X-Watchtower-Trace-Id
in: header
required: false
schema:
type: string
responses:
'204':
description: Gateway deprovisioned successfully
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'409':
$ref: '#/components/responses/409Configuration'
'400':
$ref: '#/components/responses/400Configuration'
'503':
$ref: '#/components/responses/503Configuration'
'500':
$ref: '#/components/responses/500'
/watchtower/v1/gateways/{gatewayId}/history:
get:
tags:
- Gateway
summary: Get gateway state-change history
operationId: getGatewayHistory
parameters:
- name: gatewayId
in: path
required: true
schema:
type: string
- name: companyId
in: query
required: true
schema:
type: string
- name: from
in: query
required: false
schema:
type: string
format: date-time
description: Start of time window (ISO 8601). Defaults to 31 days ago.
- name: to
in: query
required: false
schema:
type: string
format: date-time
description: End of time window (ISO 8601). Defaults to now.
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/GatewayHistoryResponse'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/watchtower/v1/batch/gateways:
post:
tags:
- Gateway
summary: Batch provision gateways
operationId: batchProvisionGateways
parameters:
- name: Idempotency-Key
in: header
required: false
schema:
type: string
description: Client-supplied idempotency key (UUID). Same key replays the cached response.
- name: X-Watchtower-Trace-Id
in: header
required: false
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchGatewayProvisionRequest'
responses:
'202':
description: Batch accepted — partial failures listed in the response
content:
application/json:
schema:
$ref: '#/components/schemas/BatchGatewayProvisionResponse'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'400':
$ref: '#/components/responses/400Configuration'
'500':
$ref: '#/components/responses/500'
delete:
tags:
- Gateway
summary: Batch deprovision gateways
operationId: batchDeprovisionGateways
parameters:
- name: X-Watchtower-Trace-Id
in: header
required: false
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchGatewayDeprovisionRequest'
responses:
'202':
description: Batch accepted — partial failures listed in the response
content:
application/json:
schema:
$ref: '#/components/schemas/BatchGatewayDeprovisionResponse'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'400':
$ref: '#/components/responses/400Configuration'
'500':
$ref: '#/components/responses/500'
########################## components ###########################################
components:
securitySchemes:
oAuth2ClientCredentials:
type: oauth2
description: This API uses OAuth 2 with the Client Credentials flow.
flows:
clientCredentials:
tokenUrl: /watchtower/v1/auth/token
scopes: { }
parameters:
authorization:
name: Authorization
in: header
description: Bearer Token for authentication
required: true
schema:
type: string
pattern: '^Bearer [A-Za-z0-9-._~+/]+=*$'
example: 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ...'
accountId:
name: X-Watchtower-Account-Id
in: header
description: Account Id
required: true
schema:
$ref: '#/components/schemas/accountId'
example: 1002000010
startTime:
name: startTime
in: query
required: true
description: The start timestamp. (inclusive)
example: '2021-07-01T06:30:00Z'
schema:
$ref: '#/components/schemas/dateTime'
endTime:
name: endTime
in: query
required: true
description: The end timestamp. (exclusive)
example: '2021-07-05T06:30:00Z'
schema:
$ref: '#/components/schemas/dateTime'
startDate:
name: startDate
in: query
required: true
description: The inclusive start date (UTC), format YYYY-MM-DD. Maximum period between startDate and endDate is 90 days.
example: '2026-05-29'
schema:
type: string
format: date
endDate:
name: endDate
in: query
required: true
description: The inclusive end date (UTC), format YYYY-MM-DD. Maximum period between startDate and endDate is 90 days.
example: '2026-06-05'
schema:
type: string
format: date
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.
Search parameters must be consistent across pages.
schema:
$ref: '#/components/schemas/offset'
limit:
name: limit
in: query
description: The number of items to retrieve per page (10000 max).
schema:
$ref: '#/components/schemas/limit'
sort:
name: sort
in: query
description: Use sort=comma-separated-fields[:asc|desc] to sort the result.
example: deviceId,updateTime:desc
schema:
type: string
reportId:
name: reportId
in: path
description: Report Id
required: true
schema:
type: string
example: b7e72bb3-b2fd-4265-a28b-9a279418fdb9
deviceId:
name: deviceId
in: path
required: true
schema:
$ref: '#/components/schemas/deviceId'
year:
name: year
description: Year
in: query
required: true
schema:
type: integer
maximum: 2099
minimum: 2000
month:
name: month
description: Month
in: query
required: true
schema:
type: integer
maximum: 12
minimum: 1
# Events
eventId:
name: eventId
in: path
description: Event Id
required: true
schema:
$ref: '#/components/schemas/EventId'
eventConfigId:
name: eventConfigId
in: path
description: Event Configuration Id
required: true
schema:
type: integer
suppressionConfigId:
name: suppressionConfigId
in: path
description: Event Suppression Configuration Id
required: true
schema:
type: integer
format: int64
undoDismissedEvents:
name: undoDismissedEvents
in: query
description: Whether to undo past events dismissed by this suppression config or not
required: true
schema:
type: boolean
default: false
# DeviceGroups
deviceGroupId:
name: deviceGroupId
in: path
required: true
description: The ID of the device group
schema:
type: integer
# Applications
applicationId:
name: applicationId
in: path
required: true
schema:
$ref: '#/components/schemas/applicationId'
# ProtectionPolicies
protectionPolicyId:
name: protectionPolicyId
in: path
required: true
schema:
$ref: '#/components/schemas/protectionPolicyId'
# EnforcementRules
enforcementRuleId:
name: enforcementRuleId
in: path
required: true
schema:
$ref: '#/components/schemas/enforcementRuleId'
# RateLimiters
rateLimiterId:
name: rateLimiterId
in: path
required: true
description: The ID of the rate limiter
schema:
type: integer
format: int64
# EventPolicies
policyId:
name: policyId
in: path
required: true
description: The ID of the event policy
schema:
type: integer
format: int64
# LocationLists
locationListId:
name: locationListId
in: path
required: true
description: The ID of the location list
schema:
type: integer
format: int64
schemas:
GatewayUpdateRequest:
type: object
description: Partial update for a gateway. Only provided fields are updated.
properties:
serialNumber:
type: string
nullable: true
deviceType:
type: string
nullable: true
firmwareVersion:
type: string
nullable: true
imei:
type: string
nullable: true
pattern: '^\d{15}$'
mcc:
type: string
nullable: true
pattern: '^\d{3}$'
mnc:
type: string
nullable: true
pattern: '^\d{2,3}$'
attributes:
type: object
additionalProperties:
type: string
nullable: true
billing:
type: object
nullable: true
properties:
billingStatus:
type: string
GatewayProvisionRequest:
type: object
required:
- gatewayId
- companyId
properties:
gatewayId:
type: string
description: Gateway device identifier — 15-digit IMSI
pattern: '^\d{15}$'
companyId:
type: string
description: FK → Company; must already exist in the company registry
mcc:
type: string
description: Mobile Country Code — 3-digit numeric string
pattern: '^\d{3}$'
nullable: true
mnc:
type: string
description: Mobile Network Code — 2–3 digit numeric string
pattern: '^\d{2,3}$'
nullable: true
iccid:
type: string
description: Integrated Circuit Card Identifier — 18–22 digit numeric string
pattern: '^\d{18,22}$'
nullable: true
imei:
type: string
description: International Mobile Equipment Identity — exactly 15 digits
pattern: '^\d{15}$'
nullable: true
serialNumber:
type: string
description: Device serial number (e.g. MR40-QA-00050001)
nullable: true
deviceType:
type: string
description: Device type classification (e.g. CAT20)
nullable: true
firmwareVersion:
type: string
description: Firmware version string
nullable: true
billing:
type: object
nullable: true
description: Billing information
properties:
plan:
type: string
nullable: true
usedDataMb:
type: number
format: double
nullable: true
usedDataGb:
type: number
format: double
nullable: true
billingStatus:
type: string
nullable: true
attributes:
type: object
additionalProperties:
type: string
description: Optional custom key-value attributes stored as device custom_field entries
nullable: true
apn:
type: string
description: APN hint from caller — always overridden by server-side configuration
nullable: true
GatewayHistoryResponse:
type: object
properties:
id:
type: string
description: Unique event ID (UUID)
gatewayId:
type: string
description: Gateway device identifier (IMSI)
fromStatus:
type: string
nullable: true
description: Previous status — null for initial PROVISION event
toStatus:
type: string
description: Status after transition
reason:
type: string
description: "Transition reason: PROVISION / TERMINATION"
traceId:
type: string
nullable: true
description: X-Watchtower-Trace-Id from the originating request
occurredAt:
type: string
format: date-time
description: Wall-clock time of the transition
BatchGatewayProvisionRequest:
type: object
required:
- gateways
properties:
gateways:
type: array
maxItems: 5000
items:
$ref: '#/components/schemas/GatewayProvisionRequest'
BatchGatewayProvisionResponse:
type: object
properties:
total:
type: integer
description: Total records received
provisioned:
type: integer
description: Successfully provisioned
updated:
type: integer
description: Already existed and were idempotently returned
rejected:
type: integer
description: Failed validation or enrichment
failures:
type: array
items:
$ref: '#/components/schemas/BatchFailureRecord'
BatchFailureRecord:
type: object
properties:
gatewayId:
type: string
description: Gateway ID from the original request (may be invalid)
failureCategory:
type: string
description: "High-level category: validation / company_not_found / ip_enrichment"
failureReason:
type: string
description: Specific reason code (e.g. MISSING_GATEWAY_ID, IPAM_NON_2XX)
BatchGatewayDeprovisionRequest:
type: object
required:
- gateways
properties:
gateways:
type: array
maxItems: 5000
items:
$ref: '#/components/schemas/GatewayDeprovisionItem'
GatewayDeprovisionItem:
type: object
required:
- gatewayId
- companyId
properties:
gatewayId:
type: string
description: IMSI of the gateway to deprovision
companyId:
type: string
description: Company owning the gateway
BatchGatewayDeprovisionResponse:
type: object
properties:
total:
type: integer
description: Total records received
terminated:
type: integer
description: Successfully terminated
skipped:
type: integer
description: Skipped (already terminated or not found)
rejected:
type: integer
description: Failed validation or IPAM release
failures:
type: array
items:
$ref: '#/components/schemas/BatchDeprovisionFailureRecord'
BatchDeprovisionFailureRecord:
type: object
properties:
gatewayId:
type: string
description: Gateway ID from the original request
failureCategory:
type: string
description: "High-level category: validation / ipam_failed / not_found / already_terminated"
failureReason:
type: string
description: Specific reason code
ConfigurationErrorResponse:
type: object
description: RFC 7807 error envelope (FS section 4.7)
properties:
title:
type: string
description: Human-readable error summary
example: "Payload validation failed"
status:
type: integer
description: HTTP status code
example: 422
correlationId:
type: string
description: Trace / correlation ID (X-Watchtower-Trace-Id or auto-generated UUID)
example: "c7f5a8b2-1234-5678-abcd-ef0123456789"
errors:
type: array
items:
$ref: '#/components/schemas/ConfigurationErrorDetail'
ConfigurationErrorDetail:
type: object
properties:
field:
type: string
nullable: true
description: Field name that caused the error (null for non-field errors)
example: "gatewayId"
code:
type: string
description: Machine-readable error code
example: "VALIDATION_ERROR"
message:
type: string
description: Human-readable error message
example: "must be exactly 15 digits"
CompanyResponse:
type: object
properties:
companyId:
type: string
description: Primary key — unique company identifier
name:
type: string
description: Human-readable display name
parentCompanyId:
type: string
nullable: true
description: Parent company in the hierarchy; null = root account
companyType:
type: string
description: Company type classification
carrierId:
type: string
nullable: true
description: FK → Carrier (operator id)
CompanyUpsertRequest:
type: object
required:
- companyId
- name
properties:
companyId:
type: string
description: Primary key — must match an entry in the company hierarchy
name:
type: string
description: Human-readable display name
parentCompanyId:
type: string
nullable: true
description: Parent company in the hierarchy; null = root account
GatewayResponse:
type: object
properties:
deviceId:
type: string
description: Internal BigQuery entity_id for the device
gatewayId:
type: string
description: Gateway device identifier (IMSI)
companyId:
type: string
description: FK → Company
status:
type: string
description: Device lifecycle status (Active, Suspended, Terminated)
carrierId:
type: string
description: FK → Carrier (operator id)
imei:
type: string
nullable: true
description: International Mobile Equipment Identity — exactly 15 digits
iccid:
type: string
nullable: true
description: Integrated Circuit Card Identifier
mcc:
type: string
nullable: true
description: Mobile Country Code — 3-digit numeric string
mnc:
type: string
nullable: true
description: Mobile Network Code — 2–3 digit numeric string
serialNumber:
type: string
nullable: true
description: Device serial number
deviceType:
type: string
nullable: true
description: Device type classification
firmwareVersion:
type: string
nullable: true
description: Firmware version string
billingStatus:
type: string
nullable: true
description: Billing / SIM subscription state
assignedIp:
type: string
nullable: true
description: IP address assigned by IPAM
apn:
type: string
nullable: true
description: APN (Access Point Name) assigned to this gateway
correlationId:
type: string
nullable: true
description: Correlation / trace ID
createdAt:
type: string
format: date-time
nullable: true
description: Creation timestamp
attributes:
type: object
additionalProperties:
type: string
description: Custom attributes
nullable: true
AuthorizedAccountsResponse:
type: object
description: Paginated list of managed enterprise accounts
properties:
data:
type: array
items:
$ref: '#/components/schemas/ManagedAccount'
description: List of managed enterprise accounts
offset:
type: integer
description: Current offset
example: 0
limit:
type: integer
description: Page size
example: 20
total:
type: integer
format: int64
description: Total number of managed accounts
example: 1847
ManagedAccount:
type: object
description: A managed enterprise account
properties:
accountId:
type: integer
format: int64
description: Enterprise account ID
example: 10200001
accountName:
type: string
description: Account display name
example: "Swisscom Enterprise AG"
accountId:
description: Account Id.
type: integer
format: int32
example: 10407
minimum: 0
dateTime:
description: ISO 8601 date time
type: string
format: date-time
example: '2021-07-04T17:36:47Z'
offset:
description: Position in pagination.
type: integer
format: int32
default: 0
minimum: 0
limit:
type: integer
format: int32
description: Number of items to retrieve (10000 max).
minimum: 1
maximum: 10000
default: 20
total:
type: integer
format: int64
description: Total number of items available.
example: 1
minimum: 0
iccid:
description: Integrated Circuit Card Identifier.
type: string
minLength: 18
maxLength: 22
example: '891004234814455936'
imei:
description: IMEI (International Mobile Equipment Identity) of the device.
type: string
minLength: 14
maxLength: 15
example: '86715704097269'
imsi:
description: International Mobile Subscriber Identifier of the device.
type: string
maxLength: 15
example: '310009133100012'
msisdn:
description: Mobile Station International Subscriber Directory Number.
type: string
maxLength: 15
example: '8801500121121'
deviceProfileId:
description: Device Profile ID assigned to the device.
type: string
maxLength: 30
example: AER0000007087071
ip:
type: string
description: IP Address
example: 172.16.1.3
port:
type: integer
description: Port number
minimum: 0
maximum: 65536
example: 8080
domain:
description: FQDN
type: string
example: abc.xyz.com
endpointFQDN:
description: Fully qualified domain name of the endpoint
type: string
maxLength: 253
minLength: 1
##### Generic
ReportStatus:
description: Report status
type: string
example: Processing
enum:
- Success
- Processing
- Error
- NotStarted
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
ScheduledReportStatus:
type: object
properties:
message:
type: string
example: Report processed successfully.
error:
type: boolean
example: false
status:
$ref: '#/components/schemas/ReportStatus'
signedUrl:
description: Report URL
type: string
example: https://storage.googleapis.com/watchtower-reports/7ae9e22d-8ad4-4a69-950a-6b13d75f0c74?X-Goog-Algorithm=GOOG4-RSA-SHA
createdAt:
description: Creation date
type: string
example: 2025-06-11T14:04:59Z
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
Pagination:
type: object
properties:
total:
$ref: '#/components/schemas/total'
offset:
$ref: '#/components/schemas/offset'
limit:
$ref: '#/components/schemas/limit'
##### Events
EventId:
type: string
description: Event Id
example: v1_1652823856823_6b71e284b63a527caa6296a66e9fdd0c
maxLength: 128
minLength: 1
EventSeverity:
description: Severity of the Event
type: string
example: Critical
enum:
- Critical
- High
- Medium
- Low
x-enum-varnames:
- Critical
- High
- Medium
- Low
EventStatus:
description: Status of the Event
type: string
example: Saved For Review
enum:
- New
- Saved For Review
- In Process
- Resolved
- Dismissed
x-enum-varnames:
- New
- SavedForReview
- InProcess
- Resolved
- Dismissed
EventType:
type: string
description: Type of the Event
example: Malicious Endpoint
enum:
- Address Scan
- Botnet and C&C
- Cryptocurrency
- Data Exfiltration
- Malicious Endpoint
- New IP
- New Port
- Phishing
- Port Scan
- Ransomware
- SIM Misuse
- Suspicious Endpoint
- TCP Bad Flags
- TCP Max Flows
- Traffic Spike
- Unclassified
- "Anomalous Mobility: Moving Outside Location List"
- "Anomalous Mobility: Impossible Mobility"
- High Frequency Reconnect
- High Cell Disconnect Rate
x-enum-varnames:
- AddressScan
- BotnetAndCnC
- Cryptocurrency
- DataExfiltration
- MaliciousEndpoint
- NewIP
- NewPort
- Phishing
- PortScan
- Ransomware
- SIMMisuse
- SuspiciousEndpoint
- TCPBadFlags
- TCPMaxFlows
- TrafficSpike
- Unclassified
- AnomalousMobilityMovingOutsideLocationList
- AnomalousMobilityImpossibleMobility
- HighFrequencyReconnect
- HighCellDisconnectRate
EventCategory:
type: string
description: Category of the Event
example: Malicious
enum:
- Malicious
- Suspicious
- Anomalous
EventConfigSuppressionPeriodType:
type: string
enum:
- ALWAYS
- DURING_TIME_PERIOD
EventDeviceGroup:
type: object
properties:
id:
type: integer
format: int32
name:
type: string
example: Group1
colorCode:
type: string
example: '#123aaff'
Event:
type: object
properties:
eventId:
$ref: '#/components/schemas/EventId'
eventTime:
$ref: '#/components/schemas/dateTime'
category:
description: Category of the Event (example, Billing Events, Security Events etc)
type: string
example: Security
type:
description: Type of the Event
type: string
example: Sim Fraud
severity:
$ref: '#/components/schemas/EventSeverity'
status:
$ref: '#/components/schemas/EventStatus'
statusReason:
type: string
description: Additional Reasoning about status/status change.
description:
description: Description about the Event
type: string
example: IMEI change, TAC change, minimal change in data consumption.
eventTypeDescription:
description: Description about the Event type.
type: string
example: Detected anomalous communication(s).
notes:
description: Notes entered by a human user while taking an action on Event.
type: string
iccid:
$ref: '#/components/schemas/iccid'
imsi:
$ref: '#/components/schemas/imsi'
deviceProfileId:
$ref: '#/components/schemas/deviceProfileId'
productId:
description: Product Id associated with the device.
type: integer
format: int32
example: 41
eventConfigId:
type: integer
description: Event Config Id
example: 134242
lastActionTime:
$ref: '#/components/schemas/dateTime'
lastActionUser:
description: User who took some action on this Event.
type: string
format: email
example: john.doe@example.com
eventSource:
type: string
description: Source system of this Event
example: Security Center
context:
type: object
description: Context of Event. This is specific to each type of Event.
additionalProperties: true
deviceIp:
$ref: '#/components/schemas/ip'
devicePort:
$ref: '#/components/schemas/port'
serverIp:
$ref: '#/components/schemas/ip'
serverPort:
$ref: '#/components/schemas/port'
serverFqdn:
$ref: '#/components/schemas/domain'
deviceName:
description: Name of the device.
type: string
maxLength: 30
example: Lawn Mower 007
eventTypeId:
description: Event Type Id
type: integer
example: 5
severityId:
description: Severity Id. Lower values means higher severity.
type: integer
example: 5
confidenceLevel:
description: >-
Indicates the system's certainty about the accuracy of the detected
event.
type: string
example: 85
threatClass:
description: Categorizes the type of threat.
type: string
example: APT
threatLevel:
description: Shows the severity of the identified threat.
type: integer
example: 100
threatDiagnostic:
description: Provides detailed analysis and detection information of the threat.
type: string
example: >-
The threat diagnostic identifies unusual login attempts from
multiple locations.
protectionLevel:
description: This column will store the protection level with possible values.
type: string
example: Essential, Aggressive, Comprehensive.
requestId:
description: This column will store the request ID.
type: string
example: REQ201043380628
deviceGroups:
type: array
items:
$ref: '#/components/schemas/EventDeviceGroup'
apnNames:
type: array
items:
type: string
description: Access Point Names (APN) associated with this event.
example: [ "apn1", "apn2" ]
apnTypes:
type: array
items:
type: string
description: Types of Access Point Names (APN) associated with this event.
example: [ "type2", "type1" ]
imei:
type: string
description: Current International Mobile Equipment Identity of the device.
example: "867157040972691"
prevImei:
type: string
description: Previous International Mobile Equipment Identity of the device (sim misuse).
example: "867157040972690"
deviceType:
type: string
description: Type of the device.
example: "smartphone"
country:
type: string
description: Country associated with the device location.
example: "US"
postalCode:
type: string
description: Postal code associated with the device location.
example: "94105"
postalTown:
type: string
description: Postal town associated with the device location.
example: "San Francisco"
EventConfig:
type: object
properties:
id:
type: integer
description: Event Config Id
example: 134242
eventTypeId:
description: Event Type Id
type: integer
example: 10
type:
description: Event Type
type: string
example: Traffic Spike
detectionState:
type: string
enum:
- DISMISSING
- ACTIVE_FOR_ALL_DEVICES
- MULTIPLE_STATES
suppressionConfig:
type: array
items:
$ref: '#/components/schemas/EventSuppressionConfig'
lastModifiedBy:
description: Last modified user
type: string
example: abc.xyz@aeris.com
lastModifiedTime:
$ref: '#/components/schemas/dateTime'
EventConfigActivityLog:
allOf:
- $ref: '#/components/schemas/BaseActivityLog'
- type: object
properties:
suppressionPeriodType:
$ref: '#/components/schemas/EventConfigSuppressionPeriodType'
suppressionPeriodStart:
$ref: '#/components/schemas/dateTime'
suppressionPeriodEnd:
$ref: '#/components/schemas/dateTime'
EventActivityLog:
allOf:
- $ref: '#/components/schemas/BaseActivityLog'
- type: object
properties:
occurrence:
type: integer
format: int64
EventSuppressionConfig:
allOf:
- type: object
properties:
id:
description: Event suppression config Id
type: integer
format: int64
- $ref: '#/components/schemas/EventSuppressionConfigBase'
- type: object
properties:
eventConfigId:
type: integer
description: Event config Id
example: 134242
detectionState:
type: string
dismissPastEvents:
type: boolean
lastModifiedBy:
description: Last modified user
type: string
example: abc.xyz@aeris.com
lastModifiedTime:
$ref: '#/components/schemas/dateTime'
EventSuppressionConfigCreateRequest:
allOf:
- $ref: '#/components/schemas/EventSuppressionConfigBase'
- type: object
properties:
dismissPastEvents:
type: boolean
EventSuppressionConfigUpdateRequest:
allOf:
- $ref: '#/components/schemas/EventSuppressionConfigBase'
EventSuppressionConfigBase:
type: object
properties:
name:
description: Name of the event suppression config
type: string
example: Dismiss Truck events
description:
description: Description of the event suppression config
type: string
example: This config is for dismissing all truck events
config:
type: array
items:
$ref: '#/components/schemas/ConfigItem'
suppressionTargetDevices:
$ref: '#/components/schemas/EventSuppressionTargetDevices'
suppressionMatchingTraffic:
type: array
items:
$ref: '#/components/schemas/EventSuppressionMatchingTraffic'
suppressionPeriodType:
$ref: '#/components/schemas/EventConfigSuppressionPeriodType'
suppressionPeriodStart:
$ref: '#/components/schemas/dateTime'
suppressionPeriodEnd:
$ref: '#/components/schemas/dateTime'
comment:
description: Comment for the suppression config
type: string
example: Just for truck
ConfigItem:
type: object
properties:
name:
type: string
description: Name of the configuration field.
example: Minimum Threshold
value:
type: string
description: Value of the configuration field.
example: 1024
EventSuppressionTargetDevices:
type: object
properties:
iccid:
type: array
description: List of Integrated Circuit Card Identifier of the device.
items:
type: string
example:
- 891004234814455936
- 891004234814455937
required:
- iccid
EventSuppressionMatchingTraffic:
type: object
properties:
serverIp:
type: array
description: List of IP Addresses
items:
type: string
example:
- 172.16.1.2
- 172.16.1.3
serverPort:
type: array
description: List of Port numbers
items:
type: string
example:
- 8080
- 9922
serverFqdn:
type: array
description: List of server fqdn
items:
type: string
example:
- example.com
- anotherexample.com
imei:
type: array
description: List of International Mobile Equipment Identity of the device, only applicable to SIM Misuse
items:
type: string
example:
- 86715704097269
- 86715704097260
numberOfPortsScanned:
type: array
description: Number of ports scanned, only applicable to Port Scan
items:
type: string
example:
- 6
- 10
targetScannedHosts:
type: array
description: IP subnet of scanned hosts, only applicable to Address Scan
items:
type: string
example:
- 10.0.2.0/24
EventActivityLogQuery:
allOf:
- $ref: '#/components/schemas/BaseActivityLogQueryRequest'
- type: object
properties:
occurrence:
type: integer
format: int64
EventConfigActivityLogQuery:
allOf:
- $ref: '#/components/schemas/BaseActivityLogQueryRequest'
EventPolicyActivityLogQuery:
allOf:
- $ref: '#/components/schemas/BaseActivityLogQueryRequest'
EventPolicyActivityLog:
allOf:
- $ref: '#/components/schemas/BaseActivityLog'
PagedEventPolicyActivityLog:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/EventPolicyActivityLog'
PagedEventsTable:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Event'
PagedEventConfigsTable:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/EventConfig'
PagedEventConfigActivityLog:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/EventConfigActivityLog"
PagedEventActivityLog:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/EventActivityLog"
EventsQueryRequest:
type: object
properties:
imsi:
$ref: '#/components/schemas/imsi'
iccid:
$ref: '#/components/schemas/iccid'
msisdn:
$ref: '#/components/schemas/msisdn'
statuses:
type: array
items:
$ref: '#/components/schemas/EventStatus'
types:
type: array
items:
$ref: '#/components/schemas/EventType'
categories:
type: array
items:
$ref: '#/components/schemas/EventCategory'
confidentLevel:
type: integer
threatLevel:
type: integer
threatClass:
type: string
threatDiagnostic:
type: string
deviceIp:
$ref: '#/components/schemas/ip'
endpointIp:
$ref: '#/components/schemas/ip'
endpointPort:
$ref: '#/components/schemas/port'
matchingProtectionLevels:
type: array
items:
$ref: '#/components/schemas/malwareProtectionLevel'
fqdn:
$ref: '#/components/schemas/endpointFQDN'
requestId:
type: string
deviceGroupIds:
type: array
items:
type: integer
format: int32
description: Device Group Ids
apnNames:
type: array
items:
type: string
description: Filter by APN names. All specified values must match (AND logic).
example: [ "apn1", "apn2" ]
apnTypes:
type: array
items:
type: string
description: Filter by APN types. All specified values must match (AND logic).
example: [ "type1", "type2" ]
imei:
type: string
description: Filter by device IMEI.
example: "867157040972691"
deviceType:
type: string
description: Filter by device type.
example: "smartphone"
countries:
type: array
items:
type: string
description: Country name.
example: "United States"
description: Filter by countries of device location (multi-value, OR logic).
example: [ "United States", "Germany" ]
postalCode:
type: string
description: Filter by postal code of device location.
example: "94105"
postalTown:
type: string
description: Filter by postal town of device location.
example: "San Francisco"
EventsMetricsRequest:
allOf:
- $ref: '#/components/schemas/EventsQueryRequest'
- type: object
properties:
interval:
type: string
description: Time interval in ISO8601 duration format (e.g. P1D for daily, PT1H for hourly)
example: PT1H
dimensions:
type: string
description: Comma-separated list of dimensions
example: type,status
metrics:
type: string
description: >-
Comma-separated list of metrics. use cnt__ to get count
aggregate.
example: cnt__event_id
EventsUpdateRequest:
type: object
description: Object representing an event update request.
properties:
status:
description: Status of the Event
type: string
example: Saved For Review
enum:
- New
- Saved For Review
- In Process
- Resolved
- Dismissed
x-enum-varnames:
- New
- SavedForReview
- InProcess
- Resolved
- Dismissed
notes:
description: Notes entered by a human user while taking an action on event.
type: string
example: Acknowledging the event. Starting investigation of IMEI change.
reason:
description: Additional Reasoning about status/status change.
type: string
example: False Positive
email:
type: string
format: email
description: Email id of the user
requestId:
description: This column will store the request ID.
type: string
example: REQ201043380628
EventsBulkUpdateRequest:
allOf:
- type: object
properties:
eventIds:
type: array
items:
type: string
description: Event Id
example: v1_1652823856823_6b71e284b63a527caa6296a66e9fdd0c
maxLength: 128
minLength: 1
- $ref: '#/components/schemas/EventsUpdateRequest'
AggregateEventSecurityItem:
description: Aggregate Event Security Item
type: string
example: Malicious Endpoint
enum:
- Unclassified
- Address Scan
- Malicious IP
- New IP
- New Port
- Port Scan
- SIM Misuse
- TCP Bad Flags
- TCP Max Flows
- Traffic Spike
- Malicious Endpoint
- Botnet and C&C
- Cryptocurrency
- Data Exfiltration
- Suspicious Endpoint
- Phishing
- Ransomware
- Devices located according to expectations
- Non IoT devices in use
- Unencrypted data flow to private apps
- Unencrypted data flow to public apps
- Use of untrusted DNS servers
- Data Sovereignty
- Devices communicating using VPN
- Non compliant communication - OFAC
- Public applications
- Removable devices in use
- Blocked Flows
- Devices utilizing private APN
- Devices utilizing internet APN
- "Anomalous Mobility Event: Moving Outside a Location List"
- "Anomalous Mobility Event: Impossible Mobility"
- High Frequency Reconnect
- High Cell Disconnect Rate
x-enum-varnames:
- Unclassified
- AddressScan
- MaliciousIP
- NewIP
- NewPort
- PortScan
- SIMMisuse
- TCPBadFlags
- TCPMaxFlows
- TrafficSpike
- MaliciousEndpoint
- BotnetAndCnC
- Cryptocurrency
- DataExfiltration
- SuspiciousEndpoint
- Phishing
- Ransomware
- DevicesLocatedAccordingToExpectations
- NonIoTDevicesInUse
- UnencryptedDataFlowToPrivateApps
- UnencryptedDataFlowToPublicApps
- UseOfUntrustedDNSServers
- DataSovereignty
- DevicesCommunicatingUsingVPN
- NonCompliantCommunicationOFAC
- PublicApplications
- RemovableDevicesInUse
- BlockedFlows
- DevicesUtilizingPrivateAPN
- DevicesUtilizingInternetAPN
- AnomalousMobilityEventMovingOutsideLocationList
- AnomalousMobilityEventImpossibleMobility
- HighFrequencyReconnect
- HighCellDisconnectRate
AggregateEventAssessedSeverity:
description: Aggregate Event Severity
type: string
example: High
enum:
- Critical
- High
- Medium
- Low
AggregateEventRiskCategory:
description: Aggregate Event Category
type: string
example: "Device Security: Anomalous"
enum:
- "Device Security: Anomalous"
- "Device Security: Suspicious"
- "Device Security: Malicious"
- "Inventory and Control of Devices"
- "Data Protection"
- "Network Security"
- "Application Security"
- "Device Security: Traffic"
AggregatedEventsQueryRequest:
type: object
properties:
securityItems:
type: array
items:
$ref: '#/components/schemas/AggregateEventSecurityItem'
assessedSeverities:
type: array
items:
$ref: '#/components/schemas/AggregateEventAssessedSeverity'
riskCategories:
type: array
items:
$ref: '#/components/schemas/AggregateEventRiskCategory'
##### Summary/Metrics
Field:
type: object
properties:
name:
description: The field name.
type: string
type:
description: The data type of the field.
type: string
enum:
- BOOLEAN
- DATE
- TIMESTAMP
- STRING
- INTEGER
- FLOAT
- DOUBLE
- ARRAY
required:
- name
- type
PagedSummaryTable:
allOf:
- type: object
properties:
lastEvaluatedDate:
type: string
- $ref: '#/components/schemas/Pagination'
- $ref: '#/components/schemas/PagedSummaryTableData'
PagedSummaryTableData:
type: object
properties:
schema:
$ref: '#/components/schemas/SummaryDataSchema'
data:
$ref: '#/components/schemas/SummaryDataRows'
SummaryDataSchema:
type: object
properties:
fields:
type: array
items:
$ref: '#/components/schemas/Field'
SummaryDataRows:
type: array
items:
type: array
items: { }
##### Flow Aggregate Metrics (Data Transactions / Data Volume / DNS / Destination Endpoints / IP Flows)
AccountDailyMetric:
type: string
description: Supported daily metric names.
enum:
- unique_endpoint_ip_count
- unique_endpoint_fqdn_count
- avg_mo_data_bytes_per_transaction
- avg_mt_data_bytes_per_transaction
- imei_change_event_count
- public_dns_query_count
- private_dns_query_count
- total_mo_data_bytes
- total_mt_data_bytes
AccountDailyMetricsRequest:
type: object
required:
- metrics
properties:
metrics:
type: array
minItems: 1
items:
$ref: '#/components/schemas/AccountDailyMetric'
example:
- unique_endpoint_ip_count
- public_dns_query_count
- total_mo_data_bytes
- total_mt_data_bytes
##### Deep Forensics — request schemas
DeviceFlowFilter:
type: object
description: >-
Filter parameters for device-scoped flow aggregate queries.
`iccid` is required to scope the query to a single device.
required:
- iccid
properties:
iccid:
type: string
description: ICCID of the device to scope this query to.
example: '99987240680301008462'
destinationFqdn:
type: string
description: Filter by destination server FQDN (partial match).
example: 'eicar.host'
destinationIp:
type: string
description: Filter by destination server IP address.
example: '103.126.211.51'
applicationProtocol:
type: string
description: Filter by application-layer protocol (e.g. HTTPS, DNS, ICMP).
example: 'HTTPS'
serverPort:
type: integer
description: Filter by destination server port number.
example: 443
networkProtocol:
type: array
description: Filter by one or more network transport protocols.
items:
type: string
enum: [ TCP, UDP, ICMP ]
example: [ TCP, UDP ]
DeviceFlowTableRequest:
$ref: '#/components/schemas/DeviceFlowFilter'
DeviceDnsFilter:
allOf:
- $ref: '#/components/schemas/DeviceFlowFilter'
- type: object
properties:
isPublicDns:
type: boolean
description: >-
When `true`, returns only public DNS queries. When `false`,
returns only private DNS queries. Omit to return both.
domainHosts:
type: array
maxItems: 1000
items:
type: string
description: >-
List of DNS server FQDNs or IPs to match against. When
`domainHostsOperation` is omitted, defaults to `in` (include).
example: [ 'dns.google', '1.1.1.1', '8.8.8.8' ]
domainHostsOperation:
type: string
enum: [ in, ni ]
default: in
description: >-
`in` — return only queries to hosts in the `domainHosts` list.
`ni` — exclude queries to those hosts. Defaults to `in` when
omitted.
MetricGroup:
type: string
description: >-
Selects which group of metrics to retrieve for the `/devices/flow-aggregates/metrics/search` endpoint.
Each group maps to a fixed set of response fields:
`DATA_TRANSACTIONS` — `avgMoDataBytes`, `avgMtDataBytes`.
`DATA_VOLUME` — `sumMoDataBytes`, `sumMtDataBytes`.
`DNS_QUERIES` — `privateOccurrences`, `publicOccurrences`.
DNS filter fields apply.
`DESTINATION_ENDPOINTS` — `uniqueServerIpCount`.
`IP_FLOWS` — `occurrences`.
IP-flow filter fields apply.
enum:
- DATA_TRANSACTIONS
- DATA_VOLUME
- DNS_QUERIES
- DESTINATION_ENDPOINTS
- IP_FLOWS
DeviceMetricsChartRequest:
allOf:
- $ref: '#/components/schemas/DeviceDnsFilter'
- type: object
required:
- interval
- metricGroup
properties:
interval:
type: string
description: Time bucket size in ISO 8601 duration format. Only `PT1H` is currently supported.
example: PT1H
metricGroup:
$ref: '#/components/schemas/MetricGroup'
sourceIp:
type: string
description: >-
Filter by source (device) IP address.
Valid only for the `IP_FLOWS` metric group; a `400` is returned if
used with any other group.
sourcePort:
type: integer
description: >-
Filter by source (device) port number.
Valid only for the `IP_FLOWS` metric group; a `400` is returned if
used with any other group.
destinationPort:
type: integer
description: >-
Filter by destination server port number.
Valid only for the `IP_FLOWS` metric group; a `400` is returned if
used with any other group.
DnsQueriesTableRequest:
$ref: '#/components/schemas/DeviceDnsFilter'
DeviceIpFlowFilter:
type: object
description: >-
Filter parameters for device-scoped IP Flow Metrics queries.
`iccid` is required to scope the query to a single device.
required:
- iccid
properties:
iccid:
type: string
description: ICCID of the device to scope this query to.
example: '99987240680301008462'
destinationFqdn:
type: string
description: Filter by destination server FQDN.
destinationIp:
type: string
description: Filter by destination server IP address.
sourceIp:
type: string
description: Filter by source (device) IP address.
sourcePort:
type: integer
description: Filter by source (device) port number.
applicationProtocol:
type: string
description: Filter by application-layer protocol.
destinationPort:
type: integer
description: Filter by destination server port number.
networkProtocol:
type: array
description: Filter by one or more network transport protocols.
items:
type: string
enum: [ TCP, UDP, ICMP ]
example: [ TCP, UDP ]
##### Deep Forensics — response schemas
DeepForensicsPagedBase:
type: object
properties:
total:
type: integer
description: Total number of matching records across all pages.
offset:
type: integer
limit:
type: integer
DeviceMetricsChartResponse:
type: object
description: Response for the device metrics chart endpoint. Contains all matching time-series rows; no pagination.
properties:
data:
type: array
items:
$ref: '#/components/schemas/DeviceMetricsChartRow'
DeviceMetricsChartRow:
type: object
description: >-
One time-bucket row in the device metrics chart response. Only the fields
corresponding to the requested `metrics` are populated; others are omitted.
properties:
eventHour:
type: string
format: date-time
description: Start of the time bucket (UTC).
avgMoDataBytes:
type: number
format: double
nullable: true
description: Average mobile-originated data bytes per transaction.
avgMtDataBytes:
type: number
format: double
nullable: true
description: Average mobile-terminated data bytes per transaction.
sumMoDataBytes:
type: integer
format: int64
nullable: true
description: Total mobile-originated data bytes in the time bucket.
sumMtDataBytes:
type: integer
format: int64
nullable: true
description: Total mobile-terminated data bytes in the time bucket.
uniqueServerIpCount:
type: integer
nullable: true
description: Count of unique destination server IPs in the time bucket.
privateOccurrences:
type: integer
nullable: true
description: Count of private DNS queries in the time bucket.
publicOccurrences:
type: integer
nullable: true
description: Count of public DNS queries in the time bucket.
occurrences:
type: integer
nullable: true
description: Count of IP flow events in the time bucket.
FlowAggregatesTableRow:
type: object
description: >-
Per-destination endpoint aggregate row, used by the Flow Aggregates table.
properties:
serverFqdn:
type: string
nullable: true
serverIp:
type: string
applicationProtocol:
type: string
serverPort:
type: integer
nullable: true
networkProtocol:
type: string
occurrences:
type: integer
format: int64
description: Number of unique connection occurrences to this destination endpoint.
sumMoDataBytes:
type: integer
format: int64
sumMtDataBytes:
type: integer
format: int64
sumDataBytes:
type: integer
format: int64
PagedFlowAggregatesTable:
allOf:
- $ref: '#/components/schemas/DeepForensicsPagedBase'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/FlowAggregatesTableRow'
DnsQueriesTableRow:
type: object
properties:
serverFqdn:
type: string
nullable: true
serverIp:
type: string
applicationProtocol:
type: string
serverPort:
type: integer
nullable: true
isPrivateIp:
type: boolean
description: True when the DNS server IP is a private/RFC-1918 address.
networkProtocol:
type: string
occurrences:
type: integer
format: int64
sumMoDataBytes:
type: integer
format: int64
sumMtDataBytes:
type: integer
format: int64
sumDataBytes:
type: integer
format: int64
PagedDnsQueriesTable:
allOf:
- $ref: '#/components/schemas/DeepForensicsPagedBase'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/DnsQueriesTableRow'
IpFlowMetricsTableRow:
type: object
properties:
startTime:
type: string
format: date-time
endTime:
type: string
format: date-time
serverFqdn:
type: string
nullable: true
serverIp:
type: string
deviceIp:
type: string
devicePort:
type: integer
nullable: true
serverPort:
type: integer
nullable: true
networkProtocol:
type: string
applicationProtocol:
type: string
sumMoDataBytes:
type: integer
format: int64
sumMtDataBytes:
type: integer
format: int64
sumDataBytes:
type: integer
format: int64
occurrences:
type: integer
PagedIpFlowMetricsTable:
allOf:
- $ref: '#/components/schemas/DeepForensicsPagedBase'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/IpFlowMetricsTableRow'
##### Devices & DeviceGroups
deviceGroupId:
description: Device Group ID.
type: integer
format: int64
deviceId:
description: Internal Device ID.
type: integer
format: int32
example: 10407778
minimum: 0
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
DeviceImeiChange:
type: object
properties:
deviceId:
$ref: '#/components/schemas/deviceId'
iccid:
$ref: '#/components/schemas/iccid'
imei:
$ref: '#/components/schemas/imei'
previousImei:
$ref: '#/components/schemas/imei'
changeTime:
$ref: '#/components/schemas/dateTime'
deviceType:
description: Device type info derived from IMEI/TAC.
type: string
example: Modem
deviceBrand:
description: Device brand info derived from IMEI/TAC.
type: string
example: Apple
deviceModel:
description: Device model derived info from IMEI/TAC.
type: string
example: iPhone 7
required:
- iccid
- imei
- previousImei
- changeTime
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
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'
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
DeviceGroupType:
type: string
enum:
- REPORTING
- ENFORCEMENT
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
DeviceGroupInfo:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
colorCode:
type: string
deviceGroupType:
type: string
DeviceGroup:
allOf:
- type: object
properties:
id:
type: integer
- $ref: '#/components/schemas/DeviceGroupBase'
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
DeviceGroupCreateRequest:
allOf:
- $ref: '#/components/schemas/DeviceGroupResourceBase'
- type: object
properties:
deviceGroupType:
$ref: "#/components/schemas/DeviceGroupType"
DeviceGroupUpdateRequest:
allOf:
- $ref: '#/components/schemas/DeviceGroupResourceBase'
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
DeviceGroupActivityLog:
type: object
properties:
timestamp:
type: string
format: date-time
userId:
type: string
activity:
type: string
target:
type: string
deviceGroups:
type: array
items:
$ref: "#/components/schemas/DeviceGroupInfo"
PagedDeviceGroupTable:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/DeviceGroup'
PagedDeviceImeiChanges:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
description: Array of IMEI change events
items:
$ref: '#/components/schemas/DeviceImeiChange'
PagedDeviceGroupActivityLog:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/DeviceGroupActivityLog"
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' ]
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
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'
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
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'
DeviceGroupActivityLogQuery:
allOf:
- $ref: '#/components/schemas/BaseActivityLogQueryRequest'
##### Activity Logs
BaseActivityLogQueryRequest:
type: object
properties:
activity:
type: string
target:
type: string
userId:
type: string
BaseActivityLog:
type: object
properties:
timestamp:
$ref: '#/components/schemas/dateTime'
activity:
type: string
target:
type: string
userId:
type: string
##### Enforcement (Applications/Protection Policies/Enforcement Rules)
applicationId:
description: Application identifier
type: integer
format: int64
example: 10407
ApplicationBase:
type: object
properties:
name:
type: string
description:
type: string
protocols:
type: array
items:
type: string
example: TCP
example: [ TCP, UDP ]
endpoints:
type: array
items:
type: string
example: "10.104.17.101"
endpointFQDNs:
type: array
items:
$ref: "#/components/schemas/endpointFQDN"
ports:
type: array
items:
type: string
example: 8080
ApplicationCreateRequest:
allOf:
- $ref: '#/components/schemas/ApplicationBase'
ApplicationUpdateRequest:
allOf:
- $ref: '#/components/schemas/ApplicationBase'
ApplicationsQueryRequest:
type: object
properties:
name:
type: string
maxLength: 180
endpoints:
type: array
items:
type: string
endpointFQDN:
$ref: "#/components/schemas/endpointFQDN"
ports:
type: array
items:
type: string
protocols:
type: array
items:
type: string
enforcementRuleId:
type: integer
enforcementRuleName:
type: string
PagedApplications:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Application'
Application:
allOf:
- $ref: '#/components/schemas/ApplicationBase'
- type: object
properties:
id:
$ref: '#/components/schemas/applicationId'
status:
type: string
createdBy:
type: string
createdTime:
type: string
format: date-time
updatedBy:
type: string
updatedTime:
type: string
format: date-time
ApplicationActivityLogQuery:
allOf:
- $ref: '#/components/schemas/BaseActivityLogQueryRequest'
ApplicationActivityLog:
allOf:
- $ref: '#/components/schemas/BaseActivityLog'
PagedApplicationActivityLog:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/ApplicationActivityLog"
protectionPolicyId:
description: Protection Policy identifier
type: integer
format: int64
example: 21091
ProtectionPolicyBase:
type: object
properties:
name:
type: string
description:
type: string
enforcementType:
type: string
description: "Enforcement type applied to this protection policy, can be ALLOWED_TRAFFIC or BLOCKED_TRAFFIC"
enum:
- ALLOWED_TRAFFIC
- BLOCKED_TRAFFIC
example: "ALLOWED_TRAFFIC"
protocols:
type: array
items:
type: string
example: TCP
example: [ TCP, UDP ]
endpoints:
type: array
items:
type: string
example: "10.104.17.101"
endpointFQDNs:
type: array
items:
$ref: "#/components/schemas/endpointFQDN"
ports:
type: array
items:
type: string
example: 8080
ProtectionPolicyCreateRequest:
allOf:
- $ref: '#/components/schemas/ProtectionPolicyBase'
ProtectionPolicyUpdateRequest:
allOf:
- $ref: '#/components/schemas/ProtectionPolicyBase'
ProtectionPoliciesQueryRequest:
type: object
properties:
name:
type: string
maxLength: 180
endpoints:
type: array
items:
type: string
enforcementType:
type: string
endpointFQDN:
$ref: "#/components/schemas/endpointFQDN"
ports:
type: array
items:
type: string
protocols:
type: array
items:
type: string
enforcementRuleId:
type: integer
enforcementRuleName:
type: string
PagedProtectionPolicies:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/ProtectionPolicy'
ProtectionPolicy:
allOf:
- $ref: '#/components/schemas/ProtectionPolicyBase'
- type: object
properties:
id:
$ref: '#/components/schemas/protectionPolicyId'
status:
type: string
createdBy:
type: string
createdTime:
type: string
format: date-time
updatedBy:
type: string
updatedTime:
type: string
format: date-time
ProtectionPolicyActivityLogQuery:
allOf:
- $ref: '#/components/schemas/BaseActivityLogQueryRequest'
ProtectionPolicyActivityLog:
allOf:
- $ref: '#/components/schemas/BaseActivityLog'
PagedProtectionPolicyActivityLog:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/ProtectionPolicyActivityLog"
##### Event Policies
EventPolicyCreateResponse:
type: object
properties:
id:
type: integer
format: int64
description: ID of the newly created event policy
example: 42
EventPolicyCreateRequest:
type: object
required:
- name
- deviceGroupIds
- eventTypeIds
properties:
name:
type: string
maxLength: 255
description: Name of the event policy
example: My Fleet Policy
description:
type: string
description: Optional description
example: Policy for monitoring anomalous mobility on fleet devices
deviceGroupIds:
type: array
minItems: 1
description: IDs of the device groups this policy applies to. At least one device group is required.
items:
type: integer
format: int64
eventTypeIds:
type: array
minItems: 1
description: IDs of the event types (alert_types) to watch. At least one event type is required.
items:
type: integer
EventPolicyUpdateRequest:
type: object
required:
- name
- deviceGroupIds
- eventTypeIds
properties:
name:
type: string
maxLength: 255
description: Name of the event policy
example: My Fleet Policy
description:
type: string
description: Optional description
deviceGroupIds:
type: array
minItems: 1
description: IDs of the device groups this policy applies to. At least one device group is required.
items:
type: integer
format: int64
eventTypeIds:
type: array
minItems: 1
description: IDs of the event types to watch. At least one event type is required.
items:
type: integer
EventPolicySearchRequest:
type: object
properties:
name:
type: string
description: Filter by policy name (partial match, case-insensitive)
example: fleet
deviceGroupIds:
type: array
description: Filter — return policies that include ANY of these device group IDs
items:
type: integer
format: int64
eventTypeIds:
type: array
description: Filter — return policies that include ANY of these event type IDs
items:
type: integer
EventPolicyResponse:
type: object
properties:
id:
type: integer
format: int64
description: Event policy ID
example: 1
accountId:
type: integer
format: int32
description: Account ID
example: 10407
name:
type: string
description: Name of the event policy
example: My Fleet Policy
description:
type: string
description: Optional description
deviceGroupIds:
type: array
description: IDs of the associated device groups
items:
type: integer
format: int64
eventTypeIds:
type: array
description: IDs of the watched event types
items:
type: integer
createdBy:
type: string
description: User who created the policy
example: john.doe@example.com
createdTime:
$ref: '#/components/schemas/dateTime'
lastModifiedBy:
type: string
description: User who last modified the policy
example: jane.doe@example.com
lastModifiedTime:
$ref: '#/components/schemas/dateTime'
EventPolicySummaryResponse:
type: object
properties:
id:
type: integer
format: int64
description: Event policy ID
example: 1
accountId:
type: integer
format: int32
description: Account ID
example: 10407
name:
type: string
description: Name of the event policy
example: My Fleet Policy
description:
type: string
description: Optional description
deviceGroupIds:
type: array
description: IDs of the associated device groups
items:
type: integer
format: int64
eventTypeIds:
type: array
description: IDs of the watched event types
items:
type: integer
createdBy:
type: string
example: john.doe@example.com
createdTime:
$ref: '#/components/schemas/dateTime'
lastModifiedBy:
type: string
example: jane.doe@example.com
lastModifiedTime:
$ref: '#/components/schemas/dateTime'
PagedEventPoliciesTable:
type: object
properties:
page:
type: integer
example: 0
description: Current page number (0-based)
size:
type: integer
example: 20
description: Page size
totalPages:
type: integer
example: 5
description: Total number of pages
totalElements:
type: integer
format: int64
example: 100
description: Total number of elements
content:
type: array
items:
$ref: '#/components/schemas/EventPolicySummaryResponse'
enforcementRuleId:
description: Enforcement Rule identifier
type: integer
format: int64
example: 5102010
malwareProtectionLevel:
type: string
enum:
- NONE
- ESSENTIAL
- AGGRESSIVE
- COMPREHENSIVE
enforcementRuleStatus:
type: string
enum:
- ACTIVATED
- DEACTIVATED
EnforcementRuleUpdateRequest:
type: object
properties:
name:
type: string
description:
type: string
apn:
type: string
malwareProtectionLevel:
$ref: '#/components/schemas/malwareProtectionLevel'
applications:
type: array
items:
$ref: '#/components/schemas/applicationId'
protectionPolicies:
type: array
items:
$ref: '#/components/schemas/protectionPolicyId'
deviceGroupId:
$ref: '#/components/schemas/deviceGroupId'
forceReconnect:
type: boolean
description: Force devices reconnect - Kill switch
default: false
serviceConfigurations:
type: array
items:
$ref: '#/components/schemas/ServiceConfigurationRequest'
editMode:
type: boolean
description: >-
When this flag is on, user could edit the policy related fields such as (Applications, Protection Policies, Malware Protection)
for ACTIVE/ENFORCED Enforcement Rules
default: false
required:
- name
- apn
- malwareProtectionLevel
- applications
- protectionPolicies
EnforcementRuleCreateRequest:
allOf:
- $ref: '#/components/schemas/EnforcementRuleUpdateRequest'
- type: object
properties:
enforce:
type: boolean
description: The enforcement rule should be enforced immediately after creation
default: false
EnforcementRulesQueryRequest:
properties:
name:
type: string
description:
type: string
deviceGroups:
type: array
items:
$ref: '#/components/schemas/deviceGroupId'
apns:
type: array
items:
type: string
malwareProtectionLevel:
type: array
items:
$ref: '#/components/schemas/malwareProtectionLevel'
status:
type: array
items:
$ref: '#/components/schemas/enforcementRuleStatus'
applications:
type: array
items:
$ref: '#/components/schemas/applicationId'
protectionPolicies:
type: array
items:
$ref: '#/components/schemas/protectionPolicyId'
EnforcementRuleBase:
type: object
properties:
id:
$ref: '#/components/schemas/enforcementRuleId'
name:
type: string
status:
type: string
apn:
type: string
PagedEnforcementRules:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/EnforcementRule'
EnforcementRule:
allOf:
- $ref: '#/components/schemas/EnforcementRuleBase'
- type: object
properties:
malwareProtectionLevel:
$ref: '#/components/schemas/malwareProtectionLevel'
applications:
type: array
items:
$ref: '#/components/schemas/applicationId'
protectionPolicies:
type: array
items:
$ref: '#/components/schemas/protectionPolicyId'
deviceGroupId:
$ref: '#/components/schemas/deviceGroupId'
forceReconnect:
type: boolean
description: Force devices reconnect - Kill switch
serviceConfigurations:
type: array
items:
$ref: '#/components/schemas/ServiceConfiguration'
createdBy:
type: string
createdTime:
type: string
format: date-time
updatedBy:
type: string
updatedTime:
type: string
format: date-time
EnforcementRuleActivityLogQuery:
allOf:
- $ref: '#/components/schemas/BaseActivityLogQueryRequest'
EnforcementRuleActivityLog:
allOf:
- $ref: '#/components/schemas/BaseActivityLog'
- type: object
properties:
error:
type: string
ServiceConfigurationRequest:
type: object
description: Service configuration input for create/update
properties:
serviceConfigurationId:
type: integer
format: int64
description: Present only on update to identify an existing config. Null/absent for new.
serviceConfigurationType:
type: string
description: Type of configuration e.g. SPLIT_BILLING, RATE_LIMIT
name:
type: string
description:
type: string
maxLength: 500
description: Optional details/description for this service configuration.
config:
type: object
additionalProperties: true
description: Type-specific configuration payload (generic JSON)
applicationIds:
type: array
items:
type: integer
format: int64
description: Application IDs this configuration is bound to
required:
- serviceConfigurationType
- name
- config
ServiceConfiguration:
type: object
description: Service configuration in responses (includes server-generated fields)
properties:
serviceConfigurationId:
type: integer
format: int64
serviceConfigurationType:
type: string
name:
type: string
description:
type: string
status:
type: string
config:
type: object
additionalProperties: true
applicationIds:
type: array
items:
type: integer
format: int64
PagedEnforcementRuleActivityLog:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/EnforcementRuleActivityLog"
##### Location Lists
LocationListType:
description: Type of the location list
type: string
enum:
- GENERAL
- PER_IMSI
LocationListEntry:
type: object
properties:
id:
type: integer
format: int64
nullable: true
imsi:
$ref: '#/components/schemas/imsi'
apn:
type: string
description: Access Point Name
maxLength: 100
example: internet.provider.com
cellId:
type: string
description: Cell identifier
maxLength: 50
example: "12345"
country:
type: string
description: Country name
maxLength: 100
example: United States
postalTown:
type: string
description: Postal town
maxLength: 100
example: San Jose
postalCode:
type: string
description: Postal code
maxLength: 20
example: "95134"
latitude:
type: number
description: Latitude coordinate
example: 37.38748
longitude:
type: number
description: Longitude coordinate
example: -121.92978
mcc:
type: integer
description: Mobile Country Code
example: 310
mnc:
type: integer
description: Mobile Network Code
example: 260
lac:
type: integer
description: Location Area Code
example: 1234
effectiveStartTs:
type: string
description: Effective start timestamp
example: "2025-01-01T00:00:00Z"
LocationListResourceBase:
type: object
properties:
name:
type: string
description: Name of the location list
maxLength: 255
minLength: 1
example: "Allowed Cell Towers"
description:
type: string
description: Description of the location list
maxLength: 2048
example: "Cell towers authorized for fleet vehicles"
listType:
$ref: "#/components/schemas/LocationListType"
entries:
type: array
items:
$ref: "#/components/schemas/LocationListEntry"
deviceGroupIds:
type: array
description: IDs of device groups associated with this location list
items:
type: integer
LocationListCreateRequest:
allOf:
- $ref: '#/components/schemas/LocationListResourceBase'
- type: object
required:
- name
- listType
LocationListUpdateRequest:
allOf:
- $ref: '#/components/schemas/LocationListResourceBase'
- type: object
required:
- name
- listType
LocationList:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
description:
type: string
listType:
$ref: "#/components/schemas/LocationListType"
entries:
type: array
items:
$ref: "#/components/schemas/LocationListEntry"
entryCount:
type: integer
description: Total number of entries in the location list
deviceGroupIds:
type: array
items:
type: integer
createdBy:
type: string
createdTime:
type: string
format: date-time
updatedBy:
type: string
updatedTime:
type: string
format: date-time
LocationListSummary:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
listType:
$ref: "#/components/schemas/LocationListType"
entryCount:
type: integer
deviceGroupIds:
type: array
items:
type: integer
createdBy:
type: string
createdTime:
type: string
format: date-time
updatedBy:
type: string
updatedTime:
type: string
format: date-time
LocationListQueryRequest:
type: object
properties:
name:
type: string
description: Filter by location list name (partial match)
listTypes:
type: array
description: Filter by location list types
items:
$ref: "#/components/schemas/LocationListType"
deviceGroupIds:
type: array
description: Filter by associated device group IDs
items:
type: integer
PagedLocationLists:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/LocationListSummary'
LocationListActivityLogQuery:
allOf:
- $ref: '#/components/schemas/BaseActivityLogQueryRequest'
LocationListActivityLog:
allOf:
- $ref: '#/components/schemas/BaseActivityLog'
PagedLocationListActivityLog:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/LocationListActivityLog"
ServiceConfigurationActivityLogQuery:
allOf:
- $ref: '#/components/schemas/BaseActivityLogQueryRequest'
ServiceConfigurationActivityLog:
allOf:
- $ref: '#/components/schemas/BaseActivityLog'
PagedServiceConfigurationActivityLog:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/ServiceConfigurationActivityLog"
LocationListSuggestionRequest:
type: object
required:
- deviceGroupIds
- listType
- effectiveStartTs
properties:
deviceGroupIds:
type: array
items:
type: integer
listType:
$ref: '#/components/schemas/LocationListType'
effectiveStartTs:
type: object
properties:
start:
type: string
format: date-time
end:
type: string
format: date-time
country:
type: string
description: Optional filter by country
postalTown:
type: string
description: Optional filter by city/town
##### Flows
BlockedIPFlowsSearchRequest:
type: object
properties:
flowType:
type: string
blockTypes:
type: array
items:
type: string
blockedBy:
type: string
description: Name of the enforcement rule that blocked the flow
destinationIp:
type: string
destinationPorts:
type: array
items:
type: string
networkProtocols:
type: array
items:
type: string
protocols:
type: array
items:
type: string
enforcementRule:
type: string
iccid:
type: string
imsi:
type: string
msisdn:
type: string
sourceIp:
type: string
sourcePorts:
type: array
items:
type: string
destinationFQDN:
type: string
confidenceLevel:
type: integer
threatLevel:
type: integer
threatType:
type: string
threatClass:
type: string
threatDiagnostic:
type: string
deviceGroup:
type: string
servicePlan:
type: string
servicePlanId:
type: string
countryOfDevice:
type: string
mccMnc:
type: string
deviceType:
type: string
AllowedIPFlowsSearchRequest:
type: object
properties:
flowType:
type: string
allowedBy:
type: string
description: Name of the application
destinationIp:
type: string
destinationPorts:
type: array
items:
type: string
networkProtocols:
type: array
items:
type: string
protocols:
type: array
items:
type: string
enforcementRule:
type: string
iccid:
$ref: "#/components/schemas/iccid"
imsi:
$ref: "#/components/schemas/imsi"
msisdn:
$ref: "#/components/schemas/msisdn"
sourceIp:
type: string
sourcePorts:
type: array
items:
type: string
destinationFQDN:
type: string
deviceGroup:
type: string
allowedTypes:
type: array
items:
type: string
servicePlan:
type: string
servicePlanId:
type: string
countryOfDevice:
type: string
mccMnc:
type: string
deviceType:
type: string
BlockedFlowsSearchRequest:
type: object
properties:
blockTypes:
type: array
items:
type: string
blockedBy:
type: string
description: Name of the enforcement rule that blocked the flow
destinationIp:
type: string
startDate:
type: string
format: date-time
endDate:
type: string
format: date-time
destinationPorts:
type: array
items:
type: string
networkProtocols:
type: array
items:
type: string
protocols:
type: array
items:
type: string
enforcementRule:
type: string
iccid:
$ref: "#/components/schemas/iccid"
imsi:
$ref: "#/components/schemas/imsi"
msisdn:
$ref: "#/components/schemas/msisdn"
sourceIp:
type: string
sourcePorts:
type: array
items:
type: string
destinationFQDN:
type: string
confidenceLevel:
type: integer
threatLevel:
type: integer
threatType:
type: string
threatClass:
type: string
threatDiagnostic:
type: string
deviceGroup:
type: string
servicePlan:
type: string
servicePlanId:
type: string
countryOfDevice:
type: string
mccMnc:
type: string
deviceType:
type: string
AllowedTrafficSearchRequest:
type: object
properties:
allowedBy:
type: string
description: Name of the application
destinationIp:
type: string
startDate:
type: string
format: date-time
endDate:
type: string
format: date-time
destinationPorts:
type: array
items:
type: string
networkProtocols:
type: array
items:
type: string
protocols:
type: array
items:
type: string
enforcementRule:
type: string
iccid:
$ref: "#/components/schemas/iccid"
imsi:
$ref: "#/components/schemas/imsi"
msisdn:
$ref: "#/components/schemas/msisdn"
sourceIp:
type: string
sourcePorts:
type: array
items:
type: string
destinationFQDN:
type: string
deviceGroup:
type: string
allowedTypes:
type: array
items:
type: string
servicePlan:
type: string
servicePlanId:
type: string
countryOfDevice:
type: string
mccMnc:
type: string
deviceType:
type: string
BlockedIPFlowData:
type: object
properties:
flowType:
type: string
startTime:
type: string
format: date-time
endTime:
type: string
format: date-time
destinationIp:
type: string
destinationFQDN:
type: string
blockedBy:
type: string
description: Name of the enforcement rule that blocked the flow
blockedById:
type: integer
format: int64
blockType:
type: string
destinationPort:
type: string
networkProtocol:
type: string
protocol:
type: string
enforcementRuleName:
type: string
enforcementRuleId:
type: integer
format: int64
deviceGroup:
$ref: "#/components/schemas/DeviceGroupInfo"
iccid:
$ref: "#/components/schemas/iccid"
imsi:
$ref: "#/components/schemas/imsi"
msisdn:
$ref: "#/components/schemas/msisdn"
sourceIp:
type: string
sourcePort:
type: string
confidenceLevel:
type: integer
threatLevel:
type: integer
threatClass:
type: string
threatDiagnostic:
type: string
servicePlan:
type: string
servicePlanId:
type: string
countryOfDevice:
type: string
mccMnc:
type: integer
format: int64
deviceType:
type: string
AllowedIPFlowData:
type: object
properties:
flowType:
type: string
startTime:
type: string
format: date-time
endTime:
type: string
format: date-time
allowedBy:
type: string
allowedType:
type: string
applicationId:
type: integer
format: int64
destinationIp:
type: string
destinationFQDN:
type: string
destinationPort:
type: string
networkProtocol:
type: string
protocol:
type: string
enforcementRuleName:
type: string
enforcementRuleId:
type: integer
format: int64
deviceGroup:
$ref: "#/components/schemas/DeviceGroupInfo"
iccid:
$ref: "#/components/schemas/iccid"
imsi:
$ref: "#/components/schemas/imsi"
msisdn:
$ref: "#/components/schemas/msisdn"
sourceIp:
type: string
sourcePort:
type: string
servicePlan:
type: string
servicePlanId:
type: string
countryOfDevice:
type: string
mccMnc:
type: integer
format: int64
deviceType:
type: string
PagedFlows:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
oneOf:
- $ref: '#/components/schemas/BlockedIPFlowData'
- $ref: '#/components/schemas/AllowedIPFlowData'
discriminator:
propertyName: flowType
mapping:
BLOCKED: '#/components/schemas/BlockedIPFlowData'
ALLOWED: '#/components/schemas/AllowedIPFlowData'
PagedAllowedTraffic:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/AllowedTrafficData'
AllowedTrafficData:
type: object
properties:
isParentComponent:
type: boolean
parentAccountId:
type: integer
format: int64
allowedBy:
type: string
allowedType:
type: string
applicationId:
type: integer
format: int64
enforcementRules:
type: integer
format: int64
lastActivity:
type: string
format: date-time
totalFqdn:
type: integer
format: int64
totalIp:
type: integer
format: int64
totalEnforcementRule:
type: integer
format: int64
flowCount:
type: integer
format: int64
deviceCount:
type: integer
format: int64
fromDevices:
type: integer
format: int64
toDevices:
type: integer
format: int64
flowsFromDevices:
type: integer
format: int64
flowsToDevices:
type: integer
format: int64
totalData:
type: number
usages:
type: array
items:
$ref: '#/components/schemas/AllowedTrafficUsageDetail'
AllowedTrafficUsageDetail:
type: object
properties:
destinationIp:
type: string
destinationFQDN:
type: string
networkProtocol:
type: string
protocol:
type: string
port:
type: string
flowCount:
type: integer
format: int64
deviceCount:
type: integer
format: int64
fromDevices:
type: integer
format: int64
toDevices:
type: integer
format: int64
flowsToDevices:
type: integer
format: int64
flowsFromDevices:
type: integer
format: int64
totalData:
type: number
PagedBlockedFlows:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/BlockedFlowData'
BlockedFlowData:
type: object
properties:
isParentComponent:
type: boolean
parentAccountId:
type: integer
format: int64
blockedById:
type: integer
format: int64
enforcementRuleId:
type: array
items:
type: integer
format: int4
blockedBy:
type: string
blockedType:
type: string
totalIp:
type: integer
format: int64
totalFQDN:
type: integer
format: int64
sessionAttempts:
type: integer
format: int64
devicesCount:
type: integer
format: int64
attemptsFromDevices:
type: integer
format: int64
attemptsToDevices:
type: integer
format: int64
totalFlowsUp:
type: integer
format: int64
totalFlowsDown:
type: integer
format: int64
blockedFlows:
type: array
items:
$ref: '#/components/schemas/BlockedFlowDetail'
BlockedFlowDetail:
type: object
properties:
destinationFQDN:
type: string
example: dns.google
ipAddresses:
type: array
items:
type: string
example: 1.1.1.1
networkProtocol:
type: string
example: TCP
protocol:
type: string
example: HTTPS
port:
type: string
example: '80'
sessionAttempts:
type: integer
example: 53
blockedDevices:
type: integer
example: 222
attemptTime:
type: string
format: date-time
example: '2025-10-01T23:59:02Z'
enforcementRule:
type: string
totalFlowsUp:
type: integer
format: int64
totalFlowsDown:
type: integer
format: int64
attemptsFromDevices:
type: integer
format: int64
attemptsToDevices:
type: integer
format: int64
confidenceLevel:
type: integer
threatLevel:
type: integer
threatClass:
type: string
threatDiagnostic:
type: string
##### Security Reports
SecurityReportAppendixRequest:
title: SecurityReportAppendixRequest
type: object
required:
- year
- month
properties:
year:
type: integer
title: Year
month:
type: integer
title: Month
category:
type: string
title: Category
security_item:
type: string
title: Security Item
iccid:
type: string
title: Iccid
imsi:
type: string
title: Imsi
start_ts:
type: string
title: Start Ts
end_ts:
type: string
title: End Ts
device_location:
type: string
title: Device Location
device_type:
type: string
title: Device Type
network_protocol:
type: string
title: Network Protocol
protocol:
type: string
title: Protocol
unencrypted_protocol:
type: string
title: Unencrypted Protocol
server_port:
type: string
title: Server Port
endpoint_location:
type: string
title: Endpoint Location
fqdn:
type: string
title: Fqdn
dns_server_ip:
type: string
title: Dns Server Ip
scanned_subnet_port:
type: string
title: Scanned Subnet Port
apn:
type: array
title: Apn
items:
type: string
apn_type:
type: array
title: Apn Type
items:
type: string
device_group_id:
items:
type: string
type: array
title: Device Group Id
SecurityReportAppendixTrigger:
properties:
request_by:
type: string
title: Request By
account_name:
type: string
title: Account Name
type: object
title: SecurityReportAppendixTrigger
PagedSecurityReportAppendix:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/SecurityEventData'
SecurityReportSummary:
properties:
total_low:
type: integer
title: Total Low
total_medium:
type: integer
title: Total Medium
total_high:
type: integer
title: Total High
overall_severity:
$ref: '#/components/schemas/Severity'
summary_text:
type: string
title: Summary Text
disclaimer:
type: string
title: Disclaimer
disclaimer_no2:
type: string
title: Disclaimer No2
sections:
$ref: '#/components/schemas/SectionsSummary'
device_activated_summary:
title: Device Activated Summary
type: array
items:
type: array
minItems: 3
maxItems: 3
items: { }
trend_low:
$ref: '#/components/schemas/TrendData'
trend_medium:
$ref: '#/components/schemas/TrendData'
trend_high:
$ref: '#/components/schemas/TrendData'
type: object
required:
- total_low
- total_medium
- total_high
- overall_severity
- summary_text
- disclaimer
- disclaimer_no2
- sections
- device_activated_summary
- trend_low
- trend_medium
- trend_high
title: SecurityReportSummary
SecurityReportDetail:
properties:
sections:
$ref: '#/components/schemas/SecurityReportSections'
category:
$ref: '#/components/schemas/SecurityReportCategory'
type: object
required:
- sections
- category
title: SecurityReportDetail
SecurityReportCategory:
properties:
inventory_control_devices:
type: string
title: Inventory Control Devices
data_protection:
type: string
title: Data Protection
net_work_security:
type: string
title: Net Work Security
application_security:
type: string
title: Application Security
device_security:
type: string
title: Device Security
type: object
required:
- inventory_control_devices
- data_protection
- net_work_security
- application_security
- device_security
title: Category
SecurityReportSections:
properties:
inventory_control_devices:
items:
$ref: '#/components/schemas/SecurityReportSectionItem'
type: array
title: Inventory Control Devices
data_protection:
items:
$ref: '#/components/schemas/SecurityReportSectionItem'
type: array
title: Data Protection
net_work_security:
items:
$ref: '#/components/schemas/SecurityReportSectionItem'
type: array
title: Net Work Security
application_security:
items:
$ref: '#/components/schemas/SecurityReportSectionItem'
type: array
title: Application Security
device_security:
items:
$ref: '#/components/schemas/SecurityReportSectionItem'
type: array
title: Device Security
type: object
required:
- inventory_control_devices
- data_protection
- net_work_security
- application_security
- device_security
title: Sections
SecurityReportSectionItem:
properties:
sec_no:
type: string
title: Sec No
tds:
items:
$ref: '#/components/schemas/TdsItem'
type: array
title: Tds
alert_type:
type: string
title: Event Type
type: object
required:
- sec_no
- tds
title: SectionItem
SecurityReportDeviceUsage:
properties:
total:
type: integer
title: Total
data:
items:
items:
$ref: '#/components/schemas/DeviceUsageData'
type: array
type: array
title: Rows
type: object
required:
- total
- data
title: DeviceUsageResponse
SecurityReportEndpoint:
properties:
total:
type: integer
title: Total
data:
items:
items:
$ref: '#/components/schemas/EndpointData'
type: array
type: array
title: Data
type: object
required:
- total
- data
title: EndpointResponse
SecurityEventData:
type: object
title: SecurityEventData
properties:
account_id:
type: string
title: Account Id
report_date:
type: string
format: date
title: Report Date
security_item:
type: string
title: Security Item
iccid:
type: string
title: Iccid
category:
type: string
title: Category
current_ts:
type: string
format: date-time
title: Current Ts
imsi:
type: string
title: Imsi
device_location:
type: string
title: Device Location
device_type:
type: string
title: Device Type
network_protocol:
type: string
title: Network Protocol
protocol:
type: string
title: Protocol
server_port:
type: string
title: Server Port
endpoint_location:
type: string
title: Endpoint Location
fqdn:
type: string
title: Fqdn
dns_server_ip:
type: string
title: Dns Server Ip
scanned_subnet_port:
type: string
title: Scanned Subnet Port
unencrypted_protocol:
type: string
title: Unencrypted Protocol
occurrence_count:
type: integer
title: Occurrence Count
apn:
type: array
title: Apn
items:
type: string
apn_type:
type: array
title: Apn Type
items:
type: string
device_groups:
type: array
title: Device Groups
items:
type: object
properties:
group_id:
type: string
title: Group Id
name:
type: string
title: Name
color_code:
type: string
title: Color Code
device_assigning_type:
type: string
title: Device Assigning Type
required:
- account_id
- report_date
- security_item
- iccid
- category
- current_ts
- imsi
- device_location
- device_type
- network_protocol
- protocol
- server_port
- endpoint_location
- fqdn
- dns_server_ip
- scanned_subnet_port
- unencrypted_protocol
- device_groups
EndpointData:
properties:
endpoint_country:
type: string
title: Endpoint Country
device_count:
type: integer
title: Device Count
endpoint_count:
type: integer
title: Endpoint Count
data_usage_bytes:
type: integer
title: Data Usage Bytes
ip_flows:
type: integer
title: Ip Flows
type: object
required:
- endpoint_country
- device_count
- endpoint_count
- data_usage_bytes
- ip_flows
title: EndpointData
DeviceUsageData:
properties:
active_devices:
type: integer
title: Active Devices
device_country:
type: string
title: Device Country
data_usage_bytes:
type: integer
title: Data Usage Bytes
type: object
required:
- active_devices
- device_country
- data_usage_bytes
title: DeviceUsageData
Severity:
type: string
enum:
- High
- Medium
- Low
title: Severity
example: High
SectionsSummary:
properties:
application_security:
$ref: '#/components/schemas/SectionSummary'
data_protection:
$ref: '#/components/schemas/SectionSummary'
device_security:
$ref: '#/components/schemas/SectionSummary'
inventory_control_devices:
$ref: '#/components/schemas/SectionSummary'
net_work_security:
$ref: '#/components/schemas/SectionSummary'
type: object
required:
- application_security
- data_protection
- device_security
- inventory_control_devices
- net_work_security
title: SectionsSummary
SectionSummary:
properties:
high:
type: integer
title: High
medium:
type: integer
title: Medium
low:
type: integer
title: Low
highest_severity:
$ref: '#/components/schemas/Severity'
recommended_action:
type: string
title: Recommended Action
type: object
required:
- high
- medium
- low
- highest_severity
- recommended_action
title: SectionSummary
TdsItem:
properties:
content:
type: string
title: Content
column:
type: string
title: Column
direction:
type: string
title: Direction
current_value:
type: number
title: Current Value
previous_value:
type: number
title: Previous Value
type: object
required:
- content
- column
title: TdsItem
TrendData:
properties:
content:
type: string
title: Content
direction:
$ref: '#/components/schemas/TrendDirection'
current_value:
type: integer
title: Current Value
previous_value:
type: integer
title: Previous Value
type: object
required:
- content
- direction
- current_value
- previous_value
title: TrendData
description: Schema for a trend object.
TrendDirection:
type: string
enum:
- trend_up
- trend_down
- trend_flat
title: TrendDirection
##### Rate Limiters
ExternalRateLimiterCreateRequest:
type: object
required:
- name
- configs
properties:
name:
type: string
maxLength: 100
description: Name of the rate limiter group.
configs:
type: array
description: List of rate limiter configurations to create (one per limit type).
items:
$ref: '#/components/schemas/ExternalRateLimiterConfig'
ExternalRateLimiterConfig:
type: object
required:
- limitType
- upstreamRate
- upstreamBurstSize
- downstreamRate
- downstreamBurstSize
properties:
limitType:
type: string
description: The limit type.
enum:
- SESSION_LEVEL
- AGGREGATE
upstreamRate:
type: integer
format: int64
description: Upstream rate in kbps.
upstreamBurstSize:
type: integer
format: int64
description: Upstream burst size in kbps.
downstreamRate:
type: integer
format: int64
description: Downstream rate in kbps.
downstreamBurstSize:
type: integer
format: int64
description: Downstream burst size in kbps.
ExternalRateLimiterUpdateRequest:
type: object
required:
- upstreamRate
- upstreamBurstSize
- downstreamRate
- downstreamBurstSize
properties:
name:
type: string
maxLength: 100
description: Name of the rate limiter.
upstreamRate:
type: integer
format: int64
description: Upstream rate in kbps.
upstreamBurstSize:
type: integer
format: int64
description: Upstream burst size in kbps.
downstreamRate:
type: integer
format: int64
description: Downstream rate in kbps.
downstreamBurstSize:
type: integer
format: int64
description: Downstream burst size in kbps.
ExternalRateLimitersQueryRequest:
type: object
properties:
name:
type: string
maxLength: 100
description: Filter by name of the rate limiter.
limitTypes:
type: array
items:
type: string
description: Filter by the limit type.
PagedRateLimiters:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/RateLimiter'
ExternalRateLimiterListResponse:
type: object
properties:
rateLimiters:
type: array
items:
$ref: '#/components/schemas/RateLimiter'
RateLimiter:
type: object
properties:
id:
type: integer
format: int64
description: The rate limiter ID.
serviceConfigurationId:
type: integer
format: int64
description: The linked service configuration ID.
name:
type: string
description: Name of the rate limiter.
limitType:
type: string
description: The limit type.
enum:
- SESSION_LEVEL
- AGGREGATE
upstreamRate:
$ref: '#/components/schemas/upstreamRate'
upstreamBurstSize:
$ref: '#/components/schemas/upstreamBurstSize'
downstreamRate:
$ref: '#/components/schemas/downstreamRate'
downstreamBurstSize:
$ref: '#/components/schemas/downstreamBurstSize'
createdBy:
type: string
description: The user who created the rate limiter.
createdTime:
type: string
format: date-time
updatedBy:
type: string
description: The user who last updated the rate limiter.
updatedTime:
type: string
format: date-time
upstreamRate:
type: integer
format: int64
minimum: 0
description: Upstream rate in kbps.
upstreamBurstSize:
type: integer
format: int64
minimum: 0
description: Upstream burst size in kbps.
downstreamRate:
type: integer
format: int64
minimum: 0
description: Downstream rate in kbps.
downstreamBurstSize:
type: integer
format: int64
minimum: 0
description: Downstream burst size in kbps.
responses:
'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.967
path: /watchtower/v1/...
traceId: c3db9d7a432317363c8bc5ddb5aadf4b
'401':
description: Not authorized.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 401
message: Unauthorized
timestamp: 2025-06-01 13:28:03.967
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.967
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.967
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.967
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.967
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.967
path: /watchtower/v1/...
traceId: c3db9d7a432317363c8bc5ddb5aadf4b
'409Configuration':
description: Conflict — resource already exists or invalid state transition
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigurationErrorResponse'
'400Configuration':
description: Bad Request — validation failure (RFC 7807)
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigurationErrorResponse'
example:
title: "Payload validation failed"
status: 400
correlationId: "c7f5a8b2-1234-5678-abcd-ef0123456789"
errors:
- field: "gatewayId"
code: "VALIDATION_ERROR"
message: "must be exactly 15 digits"
'503Configuration':
description: Service Unavailable — downstream dependency failed
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigurationErrorResponse'