openapi: 3.2.0 info: version: 0.7.0 title: Aeris IoT Watchtowerâ„¢ Location Lists 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: Location Lists description: Endpoints for Location Lists paths: /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' components: schemas: 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 total: type: integer format: int64 description: Total number of items available. example: 1 minimum: 0 LocationListEntry: type: object properties: id: type: - integer - 'null' format: int64 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' offset: description: Position in pagination. type: integer format: int32 default: 0 minimum: 0 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 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 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 LocationListUpdateRequest: allOf: - $ref: '#/components/schemas/LocationListResourceBase' - type: object required: - name - listType LocationListType: description: Type of the location list type: string enum: - GENERAL - PER_IMSI 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 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 LocationListCreateRequest: allOf: - $ref: '#/components/schemas/LocationListResourceBase' - type: object required: - name - listType Pagination: type: object properties: total: $ref: '#/components/schemas/total' offset: $ref: '#/components/schemas/offset' limit: $ref: '#/components/schemas/limit' imsi: description: International Mobile Subscriber Identifier of the device. type: string maxLength: 15 example: '310009133100012' PagedLocationLists: allOf: - $ref: '#/components/schemas/Pagination' - type: object properties: data: type: array items: $ref: '#/components/schemas/LocationListSummary' 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 '404': description: Not found. content: application/json: schema: $ref: '#/components/schemas/Error' example: code: 404 message: Not found timestamp: 2025-06-01 13:28:03.967000 path: /watchtower/v1/... traceId: c3db9d7a432317363c8bc5ddb5aadf4b '413': description: Requested data too large content: application/json: schema: $ref: '#/components/schemas/Error' example: code: 413 message: Requested data too large. Please use /watchtower/v1/.../export for requesting larger amounts of data timestamp: 2025-06-01 13:28:03.967000 path: /watchtower/v1/... traceId: c3db9d7a432317363c8bc5ddb5aadf4b '500': description: Internal Server Error. content: application/json: schema: $ref: '#/components/schemas/Error' example: code: 500 message: Internal Server Error timestamp: 2025-06-01 13:28:03.967000 path: /watchtower/v1/... traceId: c3db9d7a432317363c8bc5ddb5aadf4b parameters: 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' locationListId: name: locationListId in: path required: true description: The ID of the location list schema: type: integer format: int64 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' securitySchemes: oAuth2ClientCredentials: type: oauth2 description: This API uses OAuth 2 with the Client Credentials flow. flows: clientCredentials: tokenUrl: /watchtower/v1/auth/token scopes: {}