Alerts API Guide
Alert rules define the conditions which when meet results in generation of alerts. The type of alert rules for each analytic module (FOV, Tripwire, ROI) varies. Please refer to the analytics module specific API guide for the same.
In this section we will cover how to retrieve alerts.
Retrieve all alerts for a sensor for time range
Retrieve the alerts for a given sensor and a given time range.
HTTP GET
/api/alerts?sensorId=Amcrest_1&fromTimestamp=2021-09-16T06:06:00.000Z&toTimestamp=2021-09-16T06:07:00.000Z
Mandatory query parameters
sensorId
description: Sensors for which alerts need to be returned.
type: string.
example: sensorId=Amcrest_1
fromTimestamp
description: lower bound of the timestamp for which alerts needs to be returned
type: UTC / GMT timestamp string
example: 2020-10-30T20:00:00.000Z
toTimestamp
description: Upper bound of timestamp for which alert needs to be returned. If Not specified defaults to UTC.NOW on the server
type: UTC / GMT timestamp string
example: 2020-10-30T20:05:00.000Z
limit
description: max number of alerts to be returned
type: integer
example: 100
It follows Time based simple pagination. Get latest 10 (limit) alerts which occurred between 2021-09-16T06:06:00.000Z (fromTimestamp) and 2021-09-16T06:07:00.000Z (endTimestamp). Criteria is that endTimestamp > fromTimestamp
Example 1: All alerts between a given time range
Get all alerts between 2021-09-16T06:06:00.000Z (fromTimestamp) and 2021-09-16T06:07:00.000Z (toTimestamp).
/api/alerts?sensorId=Amcrest_3&fromTimestamp=2021-09-16T06:06:00.000Z&toTimestamp=2021-09-16T06:07:00.000Z
Response:
{ "alerts": [ { "count": 10, "description": "10 people entered fov", "duration": 0.734, "endTimestamp": "2021-09-16T06:07:00.534Z", "id": "unique-alert-id", "rule_type": "increment", "sensorId": "Amcrest_3", "startTimestamp": "2021-09-16T06:06:59.800Z", "type": "fov", "direction": "entry", "attributes": [ { "name": "objects", "value": [ { "id": "1186", "type": "Person" } ] } ] }, { "count": 1, "description": "more than 1 ppl continuously present in FOV for longer than 10 seconds", "duration": 10.734, "endTimestamp": "2021-09-16T06:07:00.534Z", "id": "unique-alert-id", "rule_type": "occupancy", "sensorId": "Amcrest_3", "startTimestamp": "2021-09-16T06:06:59.800Z", "type": "fov", "attributes": [ { "name": "objects", "value": [ { "id": "1186", "type": "Person" } ] } ] }, { "count": 5, "description": "FOV occupancy count greater than 5", "duration": 10.734, "endTimestamp": "2021-09-16T06:07:00.534Z", "id": "unique-alert-id", "rule_type": "occupancy_threshold_switch", "sensorId": "Amcrest_3", "startTimestamp": "2021-09-16T06:06:59.800Z", "type": "fov", "direction": "up", "attributes": [] } ] }
Response body attributes
Alerts of type increment and occupancy also has in it’s attributes section the list of objects which resulted in those alerts. Each object is represented by it’s id and type. e.g id=100, type=Person.
"attributes": [ { "objects": [ { "id": 100, "type": "Person" }, { "id": 200, "type": "Person" } ] } ]
Example 2: Get latest 10 alert which occurred before a given timestamp
Get latest 10 alerts (limit=10) which occurred before 2021-09-16T06:07:00.000Z (toTimestamp).
/api/alerts?sensorId=Amcrest_3&toTimestamp=2021-09-16T06:07:00.000Z&limit=10
Example 3: Get latest 10 alert which occurred after timestamp
Get latest 10 alerts (limit=10) which occurred after 2021-09-16T06:07:00.000Z (fromTimestamp).
/api/alerts?sensorId=Amcrest_3&fromTimestamp=2021-09-16T06:07:00.000Z&limit=10
Error Response
Response body: See Error response body definition at the end of the page.
HTTP Status codes:
422: No behavior found for the requested sensorId and time range 500: Internal server error
Error Response body
Error response for all API is JSON object with following attributes.
{
"detail": "#Detailed error string",
"status": "#http-status-code",
"title": "Unprocessable Entity",
"type": "about:blank"
}
Retrieve count of historical alerts for a sensor for time range
HTTP GET
/api/alerts/count?sensorId=Amcrest_1&fromTimestamp=2021-09-16T06:06:00.000Z&toTimestamp=2021-09-16T06:07:00.000Z
Mandatory query parameters
sensorId
description: Sensors for which alerts need to be returned.
type: string.
example: sensorId=Amcrest_1
fromTimestamp
description: lower bound of the timestamp for which alerts needs to be returned
type: UTC / GMT timestamp string
example: 2020-10-30T20:00:00.000Z
toTimestamp
description: Upper bound of timestamp for which alert needs to be returned. If Not specified defaults to UTC.NOW on the server
type: UTC / GMT timestamp string
example: 2020-10-30T20:05:00.000Z
limit
description: max number of alerts to be returned
type: integer
example: 100
It follows Time based simple pagination. Get latest 10 (limit) alerts which occurred between 2021-09-16T06:06:00.000Z (fromTimestamp) and 2021-09-16T06:07:00.000Z (endTimestamp). Criteria is that endTimestamp > fromTimestamp
Example
Get alerts count between 2021-09-16T06:06:00.000Z (fromTimestamp) and 2021-09-16T06:07:00.000Z (toTimestamp).
Response:
/api/alerts/count?sensorId=Amcrest_3&fromTimestamp=2021-09-16T06:06:00.000Z&toTimestamp=2021-09-16T06:07:00.000Z
{ "alerts": [ { "sensorId": "Amcrest_3", "type": "fov", "rule_type": "increment", "rule_id": "78956", "rule_name": "lobby entry/exits", "direction": "enter", "count": 11, "attributes": [] }, { "sensorId": "Amcrest_3", "type": "tripwire", "rule_type": "increment", "rule_id": "12345", "rule_name": "main door crossings", "count": 5, "direction": "enter", "attributes": [] }, { "sensorId": "Amcrest_3", "type": "tripwire", "rule_type": "increment", "rule_id": "12345", "rule_name": "ain door crossings", "count": 2, "direction": "exit", "attributes": [] } ] }
Response body attributes
Alerts of type increment and occupancy also has in it’s attributes section the list of objects which resulted in those alerts. Each object is represented by it’s id and type. e.g id=100, type=Person.
Error Response
Response body: See Error response body definition at the end of the page.
HTTP Status codes:
422: No behavior found for the requested sensorId and time range 500: Internal server error
Error Response body
Error response for all API is JSON object with following attributes.
{
"detail": "#Detailed error string",
"status": "#http-status-code",
"title": "Unprocessable Entity",
"type": "about:blank"
}
Notification of alerts via WebSocket endpoint
In addition the the ability to query historical alerts via the REST API /alerts there is also a websocket endpoint to get the realtime notification of alerts as they occur.
Alerts WebSocket Endpoint
Analytics Web API is exposed via Ingress Controller.
The URL prefix is http://<INGRESS-HOST-IP>:<INGRESS-PORT>/ws-emdx/api/alerts/ws
.
Replace the INGRESS-HOST-IP with the Jetson device IP. Replace the INGRESS-PORT with 30080 or the last value defined in Ingress configuration.
While connecting to websocket the client can specify filter criteria for alerts which it wishes to receive. Filter criteria can be specified in a hiearchial manner as follows:
Top level filteration by specific sensorId
Second level filteration for a specific tripwireId or and roiId
Third level filteration for a specific type of alert rule.
At all levels the value of ‘*’ can be specified for a wildcard match (i.e all possible values)
[ { "sensorId": "Amcrest_1", "tripwires": [ { "tripwireId": "TW1", "alertRuleTypes": [ "increment", "flowrate" ] }, { "tripwireId": "TW2", "alertRuleTypes": [ "flowrate" ] } ], "rois": [ { "roiId": "cc1", "alertRuleTypes": [ "increment" ] }, { "roiId": "cc2", "alertRuleTypes": [ "occupancy" ] } ], "fov": { "alertRuleTypes": [ "occupancy" ] } }, { "sensorId": "Amcrest_2", "tripwires": [ { "tripwireId": "TW4", "alertRuleTypes": [ "increment", "flowrate" ] } ], "rois": [], "fov": { "alertRuleTypes": [] } } ]
Example 1: Requesting all the alerts
For each sensor notify all fov, tripwire and roi alerts.
[ { "sensorId": "*", "tripwires": [ { "tripwireId": "*", "alertRuleTypes": ["*"] } ], "rois": [ { "roiId": "*", "alertRuleTypes": ["*"] } ], "fov": { "alertRuleTypes": ["*"] } } ]
Example 2: Requesting specific alerts
For sesnor=Amcrest_1 push all tripwire and roi alerts of type increment
[ { "sensorId": "Amcrest_1", "tripwires": [ { "tripwireId": "*", "alertRuleTypes": ["increment"] } ], "rois": [ { "roiId": "*", "alertRuleTypes": ["increment"] } ], "fov": { "alertRuleTypes": [] } } ]
WebSocket Response:
The websocket response body is same the what one would receive when calling the REST API /alerts
{ "alerts": [ { "count": 10, "description": "10 people entered fov", "duration": 0.734, "endTimestamp": "2021-09-16T06:07:00.534Z", "id": "unique-alert-id", "rule_type": "increment", "sensorId": "Amcrest_3", "startTimestamp": "2021-09-16T06:06:59.800Z", "type": "fov", "direction": "entry", "attributes": [ { "name": "objects", "value": [ { "id": "1186", "type": "Person" } ] } ] }, { "count": 10, "description": "more than 5 ppl continuously present in FOV for longer than 10 seconds", "duration": 10.734, "endTimestamp": "2021-09-16T06:07:00.534Z", "id": "unique-alert-id", "rule_type": "occupancy", "sensorId": "Amcrest_3", "startTimestamp": "2021-09-16T06:06:59.800Z", "type": "fov", "attributes": [ { "name": "objects", "value": [ { "id": "1186", "type": "Person" } ] } ] }, { "count": 5, "description": "FOV occupancy count greater than 5", "duration": 10.734, "endTimestamp": "2021-09-16T06:07:00.534Z", "id": "unique-alert-id", "rule_type": "occupancy_threshold_switch", "sensorId": "Amcrest_3", "startTimestamp": "2021-09-16T06:06:59.800Z", "type": "fov", "direction": "up", "attributes": [] } ] }
Response body attributes
Alerts of type increment and occupancy also has in it’s attributes section the list of objects which resulted in those alerts. Each object is represented by it’s id and type. e.g id=100, type=Person.