openapi: 3.2.0
info:
version: 0.7.0
title: Aeris IoT Watchtowerâ„¢ Protection Policies API
description: '## Introduction
The Aeris IoT Watchtowerâ„¢ API provides access to resources such as real-time events, aggregated events, risk assessment reports, and device group operations.'
termsOfService: https://www.aeris.com/services-terms-of-use/
contact:
email: support@aeris.net
url: https://www.aeris.com/support/
license:
name: Aeris License
url: https://www.aeris.com/services-terms-of-use/
x-audience: external-public
servers:
- url: https://watchtower-api-prd.aeriscloud.com
security:
- oAuth2ClientCredentials: []
tags:
- name: Protection Policies
description: Endpoints for Enforcement Protection Policies
paths:
/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'
components:
parameters:
startTime:
name: startTime
in: query
required: true
description: The start timestamp. (inclusive)
example: '2021-07-01T06:30:00Z'
schema:
$ref: '#/components/schemas/dateTime'
protectionPolicyId:
name: protectionPolicyId
in: path
required: true
schema:
$ref: '#/components/schemas/protectionPolicyId'
endTime:
name: endTime
in: query
required: true
description: The end timestamp. (exclusive)
example: '2021-07-05T06:30:00Z'
schema:
$ref: '#/components/schemas/dateTime'
sort:
name: sort
in: query
description: Use sort=comma-separated-fields[:asc|desc] to sort the result.
example: deviceId,updateTime:desc
schema:
type: string
accountId:
name: X-Watchtower-Account-Id
in: header
description: Account Id
required: true
schema:
$ref: '#/components/schemas/accountId'
example: 1002000010
offset:
name: offset
in: query
description: The position in pagination. Specifies the starting row offset into the result set returned. For example, if the page size (limit) is 10, then to select the second page, pass the offset as 10 to retrieve items 11 to 20.
Search parameters must be consistent across pages.
schema:
$ref: '#/components/schemas/offset'
authorization:
name: Authorization
in: header
description: Bearer Token for authentication
required: true
schema:
type: string
pattern: ^Bearer [A-Za-z0-9-._~+/]+=*$
example: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ...
limit:
name: limit
in: query
description: The number of items to retrieve per page (10000 max).
schema:
$ref: '#/components/schemas/limit'
responses:
'429':
description: Too many requests.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 429
message: 'Rate Limit Exceeded (XX) for clientId: XXXXXX. Please retry after XXX seconds'
timestamp: 2025-06-01 13:28:03.967000
path: /watchtower/v1/...
traceId: c3db9d7a432317363c8bc5ddb5aadf4b
'401':
description: Not authorized.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 401
message: Unauthorized
timestamp: 2025-06-01 13:28:03.967000
path: /watchtower/v1/...
traceId: c3db9d7a432317363c8bc5ddb5aadf4b
'403':
description: Forbidden.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 403
message: Forbidden
timestamp: 2025-06-01 13:28:03.967000
path: /watchtower/v1/...
traceId: c3db9d7a432317363c8bc5ddb5aadf4b
'400':
description: Bad Request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 400
message: Bad Request
timestamp: 2025-06-01 13:28:03.967000
path: /watchtower/v1/...
traceId: c3db9d7a432317363c8bc5ddb5aadf4b
'500':
description: Internal Server Error.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
code: 500
message: Internal Server Error
timestamp: 2025-06-01 13:28:03.967000
path: /watchtower/v1/...
traceId: c3db9d7a432317363c8bc5ddb5aadf4b
schemas:
total:
type: integer
format: int64
description: Total number of items available.
example: 1
minimum: 0
ProtectionPolicyCreateRequest:
allOf:
- $ref: '#/components/schemas/ProtectionPolicyBase'
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
accountId:
description: Account Id.
type: integer
format: int32
example: 10407
minimum: 0
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
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
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
ProtectionPolicyUpdateRequest:
allOf:
- $ref: '#/components/schemas/ProtectionPolicyBase'
PagedProtectionPolicies:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/ProtectionPolicy'
protectionPolicyId:
description: Protection Policy identifier
type: integer
format: int64
example: 21091
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
dateTime:
description: ISO 8601 date time
type: string
format: date-time
example: '2021-07-04T17:36:47Z'
Pagination:
type: object
properties:
total:
$ref: '#/components/schemas/total'
offset:
$ref: '#/components/schemas/offset'
limit:
$ref: '#/components/schemas/limit'
endpointFQDN:
description: Fully qualified domain name of the endpoint
type: string
maxLength: 253
minLength: 1
securitySchemes:
oAuth2ClientCredentials:
type: oauth2
description: This API uses OAuth 2 with the Client Credentials flow.
flows:
clientCredentials:
tokenUrl: /watchtower/v1/auth/token
scopes: {}