openapi: 3.2.0
info:
version: 0.7.0
title: Aeris IoT Watchtowerâ„¢ Rate Limiters 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: Rate Limiters
description: Endpoints for Rate Limiters
paths:
/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'
components:
schemas:
PagedRateLimiters:
allOf:
- $ref: '#/components/schemas/Pagination'
- type: object
properties:
data:
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
total:
type: integer
format: int64
description: Total number of items available.
example: 1
minimum: 0
downstreamBurstSize:
type: integer
format: int64
minimum: 0
description: Downstream burst size in kbps.
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
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'
upstreamBurstSize:
type: integer
format: int64
minimum: 0
description: Upstream 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.
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.
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
downstreamRate:
type: integer
format: int64
minimum: 0
description: Downstream rate in kbps.
ExternalRateLimiterListResponse:
type: object
properties:
rateLimiters:
type: array
items:
$ref: '#/components/schemas/RateLimiter'
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.
Pagination:
type: object
properties:
total:
$ref: '#/components/schemas/total'
offset:
$ref: '#/components/schemas/offset'
limit:
$ref: '#/components/schemas/limit'
upstreamRate:
type: integer
format: int64
minimum: 0
description: Upstream rate in kbps.
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
parameters:
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...
rateLimiterId:
name: rateLimiterId
in: path
required: true
description: The ID of the rate limiter
schema:
type: integer
format: int64
limit:
name: limit
in: query
description: The number of items to retrieve per page (10000 max).
schema:
$ref: '#/components/schemas/limit'
securitySchemes:
oAuth2ClientCredentials:
type: oauth2
description: This API uses OAuth 2 with the Client Credentials flow.
flows:
clientCredentials:
tokenUrl: /watchtower/v1/auth/token
scopes: {}