Skip to content
Stand with Ukraine flag

Alarm Query API

The Alarm Data Query API lets you search, filter, and subscribe to alarms in ThingsBoard. It extends the Entity Data Query format with alarm-specific filters for severity, status, type, time range, and assignee.

It is used by:

  • REST APIPOST /api/alarmsQuery/find and POST /api/alarmsQuery/count
  • WebSocket APIALARM_DATA, ALARM_COUNT, and ALARM_STATUS command types

An AlarmDataQuery has the same base fields as an entity data query plus alarm-specific filters:

FieldRequiredDescription
entityFilterYesSelects which entities to search alarms for — see entity filters
keyFiltersNoFilter by attribute or telemetry values of the alarm originator
pageLinkYesPagination, sorting, and alarm-specific filters (see below)
alarmFieldsNoAlarm fields to return
entityFieldsNoEntity fields of the alarm originator to return
latestValuesNoLatest attribute or telemetry keys of the originator to return
Query — recent critical alarms for all devices
{
"entityFilter": {
"type": "entityType",
"entityType": "DEVICE"
},
"pageLink": {
"pageSize": 10,
"page": 0,
"sortOrder": {
"key": { "type": "ALARM_FIELD", "key": "createdTime" },
"direction": "DESC"
},
"severityList": ["CRITICAL"],
"statusList": ["ACTIVE"]
},
"alarmFields": [
{ "type": "ALARM_FIELD", "key": "createdTime" },
{ "type": "ALARM_FIELD", "key": "type" },
{ "type": "ALARM_FIELD", "key": "severity" },
{ "type": "ALARM_FIELD", "key": "status" },
{ "type": "ALARM_FIELD", "key": "assignee" }
],
"entityFields": [
{ "type": "ENTITY_FIELD", "key": "name" }
],
"keyFilters": []
}
{
"data": [
{
"entityId": { "entityType": "DEVICE", "id": "784f394c-42b6-435a-983c-b7beff2784f9" },
"latest": {
"ALARM_FIELD": {
"createdTime": { "ts": 1704067200000, "value": "1704067200000" },
"type": { "ts": 0, "value": "HIGH_TEMPERATURE" },
"severity": { "ts": 0, "value": "CRITICAL" },
"status": { "ts": 0, "value": "ACTIVE_UNACK" },
"assignee": { "ts": 0, "value": "[email protected]" }
},
"ENTITY_FIELD": {
"name": { "ts": 0, "value": "Thermostat A" }
}
},
"id": { "entityType": "ALARM", "id": "alarm-uuid" },
"createdTime": 1704067200000,
"type": "HIGH_TEMPERATURE",
"originator": { "entityType": "DEVICE", "id": "784f394c-42b6-435a-983c-b7beff2784f9" },
"severity": "CRITICAL",
"acknowledged": false,
"cleared": false
}
],
"totalPages": 1,
"totalElements": 1,
"hasNext": false
}

Use the ALARM_FIELD key type to include alarm-specific properties in the response:

KeyDescription
createdTimeWhen the alarm was created
typeAlarm type string (e.g. HIGH_TEMPERATURE)
severityCRITICAL, MAJOR, MINOR, WARNING, or INDETERMINATE
statusCombined status (e.g. ACTIVE_UNACK, ACTIVE_ACK, CLEARED_UNACK, CLEARED_ACK)
assigneeEmail of the assigned user
startTsAlarm start timestamp
endTsAlarm end timestamp
ackTsAcknowledgment timestamp
clearTsClear timestamp

The alarm query’s pageLink extends the standard page link with alarm-specific filters:

FieldTypeDescription
pageSizeintResults per page (required)
pageintZero-based page number
sortOrderobjectSort by any ALARM_FIELD, ENTITY_FIELD, or telemetry key
textSearchstringFree-text search
severityListstring[]Filter by severity: CRITICAL, MAJOR, MINOR, WARNING, INDETERMINATE
statusListstring[]Filter by search status (see below)
typeListstring[]Filter by alarm type strings
searchPropagatedAlarmsbooleanInclude alarms propagated from related entities (default true)
assigneeIdstringFilter by assignee user ID
startTslongStart of time range (Unix ms)
endTslongEnd of time range (Unix ms)
timeWindowlongRolling time window in ms (alternative to startTs/endTs)
StatusMatches
ANYAll alarms
ACTIVEActive alarms (not yet cleared)
CLEAREDCleared alarms
ACKAcknowledged alarms
UNACKUnacknowledged alarms
SeverityPriority
CRITICALHighest
MAJORHigh
MINORMedium
WARNINGLow
INDETERMINATELowest

POST /api/alarmsQuery/find

Terminal window
curl -s -X POST "$TB_URL/api/alarmsQuery/find" \
-H "Content-Type: application/json" \
-H "X-Authorization: $AUTH" \
-d '{
"entityFilter": { "type": "entityType", "entityType": "DEVICE" },
"pageLink": {
"pageSize": 10, "page": 0,
"sortOrder": { "key": { "type": "ALARM_FIELD", "key": "createdTime" }, "direction": "DESC" },
"severityList": ["CRITICAL", "MAJOR"],
"statusList": ["ACTIVE"]
},
"alarmFields": [
{ "type": "ALARM_FIELD", "key": "createdTime" },
{ "type": "ALARM_FIELD", "key": "type" },
{ "type": "ALARM_FIELD", "key": "severity" },
{ "type": "ALARM_FIELD", "key": "status" }
],
"entityFields": [{ "type": "ENTITY_FIELD", "key": "name" }],
"keyFilters": []
}'

POST /api/alarmsQuery/count

Send an AlarmCountQuery — same alarm-specific filters without pagination or field selection:

Terminal window
curl -s -X POST "$TB_URL/api/alarmsQuery/count" \
-H "Content-Type: application/json" \
-H "X-Authorization: $AUTH" \
-d '{
"entityFilter": { "type": "entityType", "entityType": "DEVICE" },
"keyFilters": [],
"severityList": ["CRITICAL"],
"statusList": ["ACTIVE"]
}'

Use the same query structure inside ALARM_DATA, ALARM_COUNT, and ALARM_STATUS WebSocket commands.

{
"cmds": [
{
"cmdId": 1,
"type": "ALARM_DATA",
"query": {
"entityFilter": { "type": "entityType", "entityType": "DEVICE" },
"pageLink": {
"pageSize": 10, "page": 0,
"sortOrder": { "key": { "type": "ALARM_FIELD", "key": "createdTime" }, "direction": "DESC" },
"severityList": ["CRITICAL", "MAJOR"],
"statusList": ["ACTIVE"]
},
"alarmFields": [
{ "type": "ALARM_FIELD", "key": "createdTime" },
{ "type": "ALARM_FIELD", "key": "type" },
{ "type": "ALARM_FIELD", "key": "severity" },
{ "type": "ALARM_FIELD", "key": "status" }
],
"entityFields": [{ "type": "ENTITY_FIELD", "key": "name" }],
"keyFilters": []
}
}
]
}
{
"cmds": [
{
"cmdId": 2,
"type": "ALARM_COUNT",
"query": {
"entityFilter": { "type": "entityType", "entityType": "DEVICE" },
"keyFilters": [],
"severityList": ["CRITICAL"],
"statusList": ["ACTIVE"]
}
}
]
}

Monitor whether any active alarm matches the criteria for a specific entity. Returns a boolean active field.

{
"cmds": [
{
"cmdId": 3,
"type": "ALARM_STATUS",
"originatorId": { "entityType": "DEVICE", "id": "device-uuid" },
"typeList": ["HIGH_TEMPERATURE"],
"severityList": ["CRITICAL", "MAJOR"]
}
]
}

Pass null for typeList or severityList to match all alarm types or severities.

See the WebSocket API reference for connection, authentication, and the full message flow.

Find all unacknowledged alarms for thermostats, sorted by severity:

{
"entityFilter": {
"type": "deviceType",
"deviceTypes": ["thermostat"],
"deviceNameFilter": ""
},
"pageLink": {
"pageSize": 50,
"page": 0,
"sortOrder": {
"key": { "type": "ALARM_FIELD", "key": "severity" },
"direction": "ASC"
},
"statusList": ["UNACK"]
},
"alarmFields": [
{ "type": "ALARM_FIELD", "key": "createdTime" },
{ "type": "ALARM_FIELD", "key": "type" },
{ "type": "ALARM_FIELD", "key": "severity" },
{ "type": "ALARM_FIELD", "key": "status" },
{ "type": "ALARM_FIELD", "key": "assignee" }
],
"entityFields": [
{ "type": "ENTITY_FIELD", "key": "name" }
],
"keyFilters": []
}

Alarms in a time range with entity telemetry

Section titled “Alarms in a time range with entity telemetry”

Find critical alarms from the last 24 hours, including the originator device’s latest temperature:

{
"entityFilter": {
"type": "entityType",
"entityType": "DEVICE"
},
"pageLink": {
"pageSize": 20,
"page": 0,
"sortOrder": {
"key": { "type": "ALARM_FIELD", "key": "createdTime" },
"direction": "DESC"
},
"severityList": ["CRITICAL"],
"statusList": ["ACTIVE"],
"startTs": 1703980800000,
"endTs": 1704067200000
},
"alarmFields": [
{ "type": "ALARM_FIELD", "key": "createdTime" },
{ "type": "ALARM_FIELD", "key": "type" },
{ "type": "ALARM_FIELD", "key": "severity" }
],
"entityFields": [
{ "type": "ENTITY_FIELD", "key": "name" }
],
"latestValues": [
{ "type": "TIME_SERIES", "key": "temperature" }
],
"keyFilters": []
}

Find all active alarms for devices related to a building asset:

{
"entityFilter": {
"type": "relationsQuery",
"rootEntity": { "entityType": "ASSET", "id": "building-uuid" },
"direction": "FROM",
"maxLevel": 3,
"fetchLastLevelOnly": false,
"filters": [
{ "relationType": "Contains", "entityTypes": ["DEVICE"] }
]
},
"pageLink": {
"pageSize": 50,
"page": 0,
"sortOrder": {
"key": { "type": "ALARM_FIELD", "key": "severity" },
"direction": "ASC"
},
"statusList": ["ACTIVE"]
},
"alarmFields": [
{ "type": "ALARM_FIELD", "key": "type" },
{ "type": "ALARM_FIELD", "key": "severity" },
{ "type": "ALARM_FIELD", "key": "status" }
],
"entityFields": [
{ "type": "ENTITY_FIELD", "key": "name" },
{ "type": "ENTITY_FIELD", "key": "type" }
],
"keyFilters": []
}