Webhooks
Introduction
Webhooks allow your application to be notified when events occur in the access control system. For example, if your application subscribes to the door.request.allowed
event, a POST
request will be sent to your application every time a credential holder is granted access.
There are two types of webhook events:
- Organization events are related to organization settings, permissions, and cloud node registrations.
- Panel events are related to the people, credentials, groups, and rules within a cloud node.
Event types may not be mixed within the same webhook subscription.
The subscription object
{
"id": "644ff46419a2920001769732",
"name": "Test Subscription",
"url": "https://example.com",
"scope": "ouRecursive",
"authentication": {
"type": "None"
},
"events": ["door.request.allowed", "door.request.denied", "door.request.unknown"],
"active": true,
"sslVerification": true,
"secrecyLevel": 1,
"expiresAt": null,
"userId": "644a19ba6e22d40001eec732",
"odometer": 123,
"secret": "vvHkDbPeIespEKDprlvzlstDPPhLJnxG"
}
Property | Type | Description |
---|---|---|
id | String | The webhook ID. |
name | String | The webhook name. |
url | String | The URL that will receive POST requests when events occur. |
scope | String or String[] | The scope of the webhook. Possible values include ou (this organization) and ouRecursive (this organization and its children). For panel events only, this value may also be set to an array of panel IDs representing cloud nodes associated directly with this organization (but not its children). Example: ["1234ABC"] |
authentication | Object | An object describing the authentication mechanism. |
authentication.type | String | The authentication type. Possible values include None and Basic . |
authentication.user | String | The authentication user. This only applies if authentication.type is set to Basic . |
authentication.password | String | The authentication password. This only applies if authentication.type is set to Basic . |
events | String[] | A list of organization events or panel events that trigger the webhook. Event types may not be mixed. |
active | Boolean | Whether the webhook is active. |
sslVerification | Boolean | Whether the SSL certificate of the target host will be checked. |
secrecyLevel | Integer | The level of security filtering applied to the webhook event data. Possible values include 0 (no filtering), 1 (exclude PINs and credentials), and 2 (exclude PINs, credentials, and people's names). |
expiresAt | String | An ISO 8601 timestamp representing the time at which this hook's active status will be set to false . |
userId | String | The ID of the user that created the webhook. |
odometer | Integer | The total number of times the webhook has been triggered. |
secret | String | The secret used for verifying webhook notifications. |
Verifying webhook notifications
If a webhook subscription is supplied with a secret
, an X_PDK_SIGNATURE
header will be included with each corresponding notification. This header contains a SHA-1 HMAC, which is generated by applying the secret to the response body. Most languages include functions for generating HMACs. The example below shows how webhook notifications can be verified in JavaScript.
import { createHmac } from "crypto"
// Verify an incoming webhook notification
const hmac = createHmac("sha1", secret).update(body).digest("hex")
if (hmac == request.headers.get("X-PDK-SIGNATURE")) {
// Verification passed
} else {
// Verification failed
}
Basic Endpoints
Create a subscription
Request
POST https://accounts.pdk.io/api/ous/{{organization_id}}/hooks HTTP/1.1
Authorization: Bearer {{id_token}}
Content-Type: application/json
{
"name": "Test Subscription",
"url": "https://example.com",
"scope": "ouRecursive",
"authentication": {
"type": "None"
},
"events": [
"door.request.allowed",
"door.request.denied",
"door.request.unknown"
]
}
Parameter | Location | Type | Required | Description |
---|---|---|---|---|
organization_id | Path | String | Yes | The organization ID. |
id_token | Header | String | Yes | A valid ID token. |
name | Body | String | Yes | The webhook name. The maximum length is 70 characters. |
url | Body | String | Yes | The URL that will receive POST requests when events occur. HTTPS protocol is required. |
scope | Body | String or String[] | Yes | The scope of the webhook. Possible values include ou (this organization) and ouRecursive (this organization and its children). For panel events only, this value may also be set to an array of panel IDs representing cloud nodes associated directly with this organization (but not its children). Example: ["1234ABC"] |
authentication | Body | Object | Yes | An object describing the authentication mechanism. |
authentication.type | Body | String | Yes | The authentication type. Possible values include None and Basic . |
authentication.user | Body | String | Sometimes | The authentication user. This is required if authentication.type is set to Basic . |
authentication.password | Body | String | Sometimes | The authentication password. This is required if authentication.type is set to Basic . |
events | Body | String[] | Yes | A list of organization events or panel events that trigger the webhook. Event types may not be mixed. |
active | Body | Boolean | No | Whether the webhook should be active. The default value is true . |
sslVerification | Body | Boolean | No | Whether the SSL certificate of the target host should be checked. The default value is true . Setting this to false will allow the usage of self-signed certificates. |
secrecyLevel | Body | Integer | No | The level of security filtering applied to the webhook event data. Possible values include 0 (no filtering), 1 (exclude PINs and credentials), and 2 (exclude PINs, credentials, and people's names). The default value is 1 . |
expiresAt | Body | String | No | An ISO 8601 timestamp representing the time at which this hook's active status should be set to false . This value must represent a time in the future. |
secret | Body | String | No | The secret used for verifying webhook notifications. The maximum length is 255 characters. |
Response
The response contains the ID of the newly created subscription object.
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": "644ff46419a2920001769732"
}
Retrieve a subscription
Request
GET https://accounts.pdk.io/api/ous/{{organization_id}}/hooks/{{webhook_id}} HTTP/1.1
Authorization: Bearer {{id_token}}
Parameter | Location | Type | Required | Description |
---|---|---|---|---|
organization_id | Path | String | Yes | The organization ID. |
webhook_id | Path | String | Yes | The webhook ID. |
id_token | Header | String | Yes | A valid ID token. |
Response
The response contains a subscription object.
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "644ff46419a2920001769732",
"name": "Test Subscription",
"url": "https://example.com",
"scope": "ouRecursive",
"authentication": {
"type": "None"
},
"events": [
"door.request.allowed",
"door.request.denied",
"door.request.unknown"
],
"active": true,
"sslVerification": true,
"secrecyLevel": 1,
"expiresAt": null,
"userId": "644a19ba6e22d40001eec732",
"odometer": 123,
"secret": "vvHkDbPeIespEKDprlvzlstDPPhLJnxG"
}
Update a subscription
Request
PUT https://accounts.pdk.io/api/ous/{{organization_id}}/hooks/{{webhook_id}} HTTP/1.1
Authorization: Bearer {{id_token}}
Content-Type: application/json
{
"name": "Test Subscription",
"url": "https://example.com",
"scope": "ouRecursive",
"authentication": {
"type": "None"
},
"events": [
"door.request.allowed",
"door.request.denied",
"door.request.unknown"
],
"active": true,
"sslVerification": true,
"secrecyLevel": 0
}
Parameter | Location | Type | Required | Description |
---|---|---|---|---|
organization_id | Path | String | Yes | The organization ID. |
webhook_id | Path | Integer | Yes | The webhook ID. |
id_token | Header | String | Yes | A valid ID token. |
name | Body | String | Yes | The webhook name. The maximum length is 70 characters. |
url | Body | String | Yes | The URL that will receive POST requests when events occur. HTTPS protocol is required. |
scope | Body | String or String[] | Yes | The scope of the webhook. Possible values include ou (this organization) and ouRecursive (this organization and its children). For panel events only, this value may also be set to an array of panel IDs representing cloud nodes associated directly with this organization (but not its children). Example: ["1234ABC"] |
authentication | Body | Object | Yes | An object describing the authentication mechanism. |
authentication.type | Body | String | Yes | The authentication type. Possible values include None and Basic . |
authentication.user | Body | String | Sometimes | The authentication user. This is required if authentication.type is set to Basic . |
authentication.password | Body | String | Sometimes | The authentication password. This is required if authentication.type is set to Basic . |
events | Body | String[] | Yes | A list of organization events or panel events that trigger the webhook. Event types may not be mixed. |
active | Body | Boolean | Yes | Whether the webhook should be active. The default value is true . |
sslVerification | Body | Boolean | Yes | Whether the SSL certificate of the target host should be checked. The default value is true . Setting this to false will allow the usage of self-signed certificates. |
secrecyLevel | Body | Integer | Yes | The level of security filtering applied to the webhook event data. Possible values include 0 (no filtering), 1 (exclude PINs and credentials), and 2 (exclude PINs, credentials, and people's names). The default value is 1 . |
expiresAt | Body | String | No | An ISO 8601 timestamp representing the time at which this hook's active status should be set to false . This value must represent a time in the future. |
secret | Body | String | No | The secret used for verifying webhook notifications. The maximum length is 255 characters. |
Response
HTTP/1.1 204 No Content
Delete a subscription
Request
DELETE https://accounts.pdk.io/api/ous/{{organization_id}}/hooks/{{webhook_id}} HTTP/1.1
Authorization: Bearer {{id_token}}
Parameter | Location | Type | Required | Description |
---|---|---|---|---|
organization_id | Path | String | Yes | The organization ID. |
webhook_id | Path | Integer | Yes | The webhook ID. |
id_token | Header | String | Yes | A valid ID token. |
Response
HTTP/1.1 204 No Content
List all subscriptions
Request
GET https://accounts.pdk.io/api/ous/{{organization_id}}/hooks HTTP/1.1
Authorization: Bearer {{id_token}}
Parameter | Location | Type | Required | Description |
---|---|---|---|---|
organization_id | Path | String | Yes | The organization ID. |
id_token | Header | String | Yes | A valid ID token. |
Response
The response contains an array of subscription objects.
HTTP/1.1 200 OK
Content-Type: application/json
[
{
"id": "644ff46419a2920001769732",
"name": "Test Subscription",
"url": "https://example.com",
"scope": "ouRecursive",
"authentication": {
"type": "None"
},
"events": [
"door.request.allowed",
"door.request.denied",
"door.request.unknown"
],
"active": true,
"sslVerification": true,
"secrecyLevel": 1,
"expiresAt": null,
"userId": "644a19ba6e22d40001eec732",
"odometer": 123,
"secret": "vvHkDbPeIespEKDprlvzlstDPPhLJnxG"
}
]
Organization Events
Your application can listen for the following organization events.
ou.created
This event is emitted when an organization is created.
{
"id": "6231d2e96348ca00019f7474",
"name": "Name",
"useBluetoothCredentials": false,
"useTouchMobileApp": false,
"parent": "57e50e4840ce4f00017df412",
"intercoms": [],
"user": {
"id": "5f92b1682633360001cd3a4f",
"firstName": "First Name",
"lastName": "Last Name"
},
"clientInfo": {
"ipAddress": "192.168.1.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
},
"topic": "ou.created"
}
ou.deleted
This event is emitted when an organization is deleted.
{
"id": "6231d2e96348ca00019f7474",
"name": "Name",
"useBluetoothCredentials": true,
"useTouchMobileApp": true,
"parent": "57e50e4840ce4f00017df412",
"themes": [],
"intercoms": [
{
"manufacturer": "comelit",
"phase": 1
}
],
"user": {
"id": "5f92b1682633360001cd3a4f",
"firstName": "First Name",
"lastName": "Last Name"
},
"clientInfo": {
"ipAddress": "192.168.1.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
},
"topic": "ou.deleted"
}
ou.updated
This event is emitted when an organization is updated.
{
"name": "Name",
"useBluetoothCredentials": true,
"useTouchMobileApp": true,
"themes": [],
"intercoms": [
{
"manufacturer": "comelit",
"phase": 1
}
],
"id": "6231d2e96348ca00019f7474",
"parent": "57e50e4840ce4f00017df412",
"user": {
"id": "5f92b1682633360001cd3a4f",
"firstName": "First Name",
"lastName": "Last Name"
},
"clientInfo": {
"ipAddress": "192.168.1.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
},
"topic": "ou.updated"
}
panel.created
This event is emitted when a cloud node is created.
{
"id": "1070000",
"name": "Panel Name",
"ou": "57e50e4840ce4f00017df412",
"user": {
"id": "5f92b1682633360001cd3a4f",
"firstName": "First Name",
"lastName": "Last Name"
},
"clientInfo": {
"ipAddress": "192.168.1.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
},
"topic": "panel.created"
}
panel.deleted
This event is emitted when a cloud node is deleted.
{
"id": "1070000",
"name": "Panel Name",
"ou": "57e50e4840ce4f00017df412",
"user": {
"id": "5f92b1682633360001cd3a4f",
"firstName": "First Name",
"lastName": "Last Name"
},
"clientInfo": {
"ipAddress": "192.168.1.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
},
"topic": "panel.deleted"
}
panel.updated
This event is emitted when a cloud node is updated.
{
"id": "1070000",
"name": "Panel Name",
"ou": "57e50e4840ce4f00017df412",
"user": {
"id": "5f92b1682633360001cd3a4f",
"firstName": "First Name",
"lastName": "Last Name"
},
"clientInfo": {
"ipAddress": "192.168.1.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
},
"topic": "panel.updated"
}
permission.accepted
This event is emitted when a permission invitation is accepted by the recipient.
{
"ou": "57e50e4840ce4f00017df412",
"email": "test@mail.com",
"name": "First Name Last Name",
"role": "reporter",
"userId": "6231d7816348ca00019f7476",
"user": {
"id": "6231d7816348ca00019f7476",
"firstName": "First Name",
"lastName": "Last Name"
},
"clientInfo": {
"ipAddress": "192.168.1.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
},
"topic": "permission.accepted"
}
permission.created
This event is emitted when a permission is created.
{
"ou": "57e50e4840ce4f00017df412",
"email": "test@mail.com",
"role": "reporter",
"userId": null,
"user": {
"id": "5f92b1682633360001cd3a4f",
"firstName": "First Name",
"lastName": "Last Name"
},
"clientInfo": {
"ipAddress": "192.168.1.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
},
"topic": "permission.created"
}
permission.deleted
This event is emitted when a permission is deleted.
{
"ou": "57e50e4840ce4f00017df412",
"email": "test@mail.com",
"role": "reporter",
"userId": "6231d7816348ca00019f7476",
"user": {
"id": "5f92b1682633360001cd3a4f",
"firstName": "First Name",
"lastName": "Last Name"
},
"clientInfo": {
"ipAddress": "192.168.1.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
},
"topic": "permission.deleted"
}
permission.updated
This event is emitted when a permission is updated.
{
"role": "manager",
"email": "test@mail.com",
"user": {
"id": "6231d7816348ca00019f7476",
"firstName": "First Name",
"lastName": "Last Name"
},
"clientInfo": {
"ipAddress": "192.168.1.1",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36"
},
"ou": "57e50e4840ce4f00017df412",
"userId": "610a7a279c5f57000154ce52",
"topic": "permission.updated"
}
Panel Events
Your application can listen for the following panel events.
door.alarm.forced
This event is emitted when a door or gate equipped with a door position sensor (DPS) is forced open.
{
"id": "624af2c6-fc08-403f-94c7-a2d87d0703df",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646921051104,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.alarm.forced"
}
door.alarm.forced.cleared
This event is emitted when a forced alarm has cleared.
{
"id": "624af2c6-fc08-403f-94c7-a2d87d0703df",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646921051104,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.alarm.forced.cleared"
}
door.alarm.propped.alloff
This event is emitted when prop alarms are cleared for all devices.
{
"id": "624af2c6-fc08-403f-94c7-a2d87d0703df",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646921051104,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.alarm.propped.alloff"
}
door.alarm.propped.off
This event is emitted when a prop alarm has cleared for a device.
{
"id": "624af2c6-fc08-403f-94c7-a2d87d0703df",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646921051104,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.alarm.propped.off"
}
door.alarm.propped.on
This event is emitted when a door or gate equipped with a door position sensor (DPS) is propped open.
{
"id": "624af2c6-fc08-403f-94c7-a2d87d0703df",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646921051104,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.alarm.propped.on"
}
door.autoopen.off
This event is emitted when auto open is turned off.
{
"id": "624af2c6-fc08-403f-94c7-a2d87d0703df",
"body": {
"doorId": 1,
"ruleId": 1
},
"metadata": {
"occurred": 1646921051104,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.autoopen.off"
}
door.autoopen.on
This event is emitted when auto open is turned on.
{
"id": "624af2c6-fc08-403f-94c7-a2d87d0703df",
"body": {
"doorId": 1,
"ruleId": 1,
"aoscan": false
},
"metadata": {
"occurred": 1646921051104,
"doorName": "Door Name",
"ruleName": "Rule Name"
},
"panelId": "1070000",
"topic": "door.autoopen.on"
}
door.autoopen.override.off
This event is emitted when an auto open override has cleared.
{
"id": "624af2c6-fc08-403f-94c7-a2d87d0703df",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646921051104,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.autoopen.override.off"
}
door.autoopen.override.on
This event is emitted when auto open is overridden.
{
"id": "624af2c6-fc08-403f-94c7-a2d87d0703df",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646921051104,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.autoopen.override.on"
}
door.forceclose.off
This event is emitted when a force close action has cleared.
{
"id": "5bc4ed65-7755-44e7-9026-9c88931c9717",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646914505809,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.forceclose.off"
}
door.forceclose.on
This event is emitted when a force close action has been triggered.
{
"id": "5bc4ed65-7755-44e7-9026-9c88931c9717",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646914505809,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.forceclose.on"
}
door.forceopen.off
This event is emitted when a force open action has cleared.
{
"id": "5bc4ed65-7755-44e7-9026-9c88931c9717",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646914505809,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.forceopen.off"
}
door.forceopen.on
This event is emitted when a force open action has been triggered.
{
"id": "5bc4ed65-7755-44e7-9026-9c88931c9717",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646914505809,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.forceopen.on"
}
door.input.dps.closed
This event is emitted when a door position sensor (DPS) changes to a closed state.
{
"id": "7fcb31b2-1dac-4754-9e74-ca5bae5023a1",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646913163975,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.input.dps.closed"
}
door.input.dps.opened
This event is emitted when a door position sensor (DPS) changes to an open state.
{
"id": "3222d1e4-2bdf-4dab-a21b-7883ddd3156d",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646911014614,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.input.dps.opened"
}
door.input.relay.off
This event is emitted when a device is closed.
{
"id": "8f88f40d-eee7-48b4-84ba-03c0010094d6",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646913355079,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.input.relay.off"
}
door.input.relay.on
This event is emitted when a device is opened.
{
"id": "8f88f40d-eee7-48b4-84ba-03c0010094d6",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646913355079,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.input.relay.on"
}
door.input.rex.off
This event is emitted when a request to exit (REX) button is released.
{
"id": "8f88f40d-eee7-48b4-84ba-03c0010094d6",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646913355079,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.input.rex.off"
}
door.input.rex.on
This event is emitted when a request to exit (REX) button is pressed.
{
"id": "8f88f40d-eee7-48b4-84ba-03c0010094d6",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646913355079,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.input.rex.on"
}
door.input.virtualread
This event is emitted when a credential scan is emulated on a device (e.g. when opening a device from a mobile app).
{
"body": {
"personId": 1,
"doorId": 1
},
"id": "81c55279-f936-446e-b9b5-cba6231b6001",
"panelId": "1070000",
"topic": "door.input.virtualread",
"metadata": {}
}
door.request.allowed
This event is emitted when a credential holder is granted access.
{
"id": "679521e4-c455-423f-8155-d012c98f5dcc",
"body": {
"doorId": 1,
"personId": 1,
"requestFactor": "CARD_OR_PIN"
},
"metadata": {
"occurred": 1646922708300,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.request.allowed"
}
door.request.denied
This event is emitted when a credential holder is recognized but is denied access due to a deny rule.
{
"id": "679521e4-c455-423f-8155-d012c98f5dcc",
"body": {
"doorId": 1,
"personId": 1,
"requestFactor": "CARD_OR_PIN",
"explicit": true,
"disabled": true
},
"metadata": {
"occurred": 1646922708300,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.request.denied"
}
door.request.duress
This event is emitted when a credential holder is granted access using a duress PIN.
{
"id": "679521e4-c455-423f-8155-d012c98f5dcc",
"body": {
"doorId": 1,
"personId": 1
},
"metadata": {
"occurred": 1646922708300,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.request.duress"
}
door.request.found
This event is emitted when a credential holder is recognized.
{
"id": "679521e4-c455-423f-8155-d012c98f5dcc",
"body": {
"doorId": 1,
"personId": 1,
"requestFactor": "CARD_OR_PIN"
},
"metadata": {
"occurred": 1646922708300,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.request.found"
}
door.request.multiallowed
This event is emitted when a credential holder is granted access after multiple sequential scans.
{
"id": "679521e4-c455-423f-8155-d012c98f5dcc",
"body": {
"doorId": 1,
"personId": 1,
"count": 4
},
"metadata": {
"occurred": 1646922708300,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.request.multiallowed"
}
door.request.unknown
This event is emitted when a credential is presented but the credential holder is not recognized.
{
"id": "679521e4-c455-423f-8155-d012c98f5dcc",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646922708300,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "door.request.unknown"
}
endpoint.added
This event is emitted when a new controller is added.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"ioLinkId": 1,
"port": 1,
"address": "",
"type": "primaryReader"
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.added"
}
endpoint.alarm.comloss.off
This event is emitted when communication with a controller is restored.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"ioLinkId": 1,
"address": ""
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.alarm.comloss.off"
}
endpoint.alarm.comloss.on
This event is emitted when communication with a controller is lost.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"ioLinkId": 1,
"address": ""
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.alarm.comloss.on"
}
endpoint.deleted
This event is emitted when a controller is deleted.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"ioLinkId": 1,
"port": 1,
"address": "",
"type": "primaryReader"
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.deleted"
}
endpoint.input.bh.state
This event is emitted when basic information is available about a controller's battery health.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"state": "U",
"ioLinkId": 1,
"address": ""
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.input.bh.state"
}
endpoint.input.lp.off
This event is emitted when a controller exits low power mode.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"ioLinkId": 1,
"address": ""
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.input.lp.off"
}
endpoint.input.lp.on
This event is emitted when a controller enters low power mode.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"ioLinkId": 1,
"address": ""
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.input.lp.on"
}
endpoint.input.pb.connected
This event is emitted when a battery is connected to a controller.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"ioLinkId": 1,
"address": "1017222115235210"
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.input.pb.connected"
}
endpoint.input.pb.disconnected
This event is emitted when a battery is disconnected from a controller.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"ioLinkId": 1,
"address": "1017222115235210"
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.input.pb.disconnected"
}
endpoint.input.pb.status
This event is emitted when detailed information is available about a controller's battery health.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"chargeCategory": "N",
"batteryLevel": 0,
"time": 0,
"current": 0,
"ioLinkId": 1,
"address": ""
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.input.pb.status"
}
endpoint.input.pi.off
This event is emitted when input power is disconnected from a controller.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"ioLinkId": 1,
"address": "1017222115235210"
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.input.pi.off"
}
endpoint.input.pi.on
This event is emitted when input power is connected to a controller.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"ioLinkId": 1,
"address": "1017222115235210"
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.input.pi.on"
}
endpoint.input.pi.status
This event is emitted when information is available about a controller's input power.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"voltage": 10880,
"current": 150,
"inputPowerOn": true,
"ioLinkId": 1,
"address": ""
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.input.pi.status"
}
endpoint.input.po.absent
This event is emitted when an overcurrent is no longer detected on a controller.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"ioLinkId": 1,
"address": ""
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.input.po.absent"
}
endpoint.input.po.present
This event is emitted when an overcurrent is detected on a controller.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"ioLinkId": 1,
"address": ""
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.input.po.present"
}
endpoint.input.pp.status
This event is emitted when information is available about a controller's peripheral power.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"peripheralPowerOn": false,
"voltage": 13056,
"current": 160,
"ioLinkId": 1,
"address": ""
},
"metadata": {
"occurred": 1640785537799,
"ioLinkName": "Test Connection"
},
"panelId": "1070000",
"topic": "endpoint.input.pp.status"
}
entity.added
This event is emitted when any of the following entities are created.
{
"id": "1d3e4c21-b156-4a24-825c-a66977639112",
"body": {
"occurred": 1647000459313,
"userId": "5f92b1682633360001cd3a4f",
"details": {
"personId": 1,
"entityType": "PERSON"
},
"action": "person.added"
},
"metadata": {
"occurred": 1647000459380
},
"panelId": "1070000",
"topic": "entity.added"
}
entity.modified
This event is emitted when any of the following entities are updated.
{
"id": "b9239aaf-049e-482d-b079-1239de0a1e5e",
"body": {
"occurred": 1647000563481,
"userId": "5f92b1682633360001cd3a4f",
"details": {
"personId": 1,
"entityType": "PERSON",
"groupId": 1,
"groupName": "Group Name"
},
"action": "person.modified.group.added"
},
"metadata": {
"occurred": 1647000563534
},
"panelId": "1070000",
"topic": "entity.modified"
}
entity.removed
This event is emitted when any of the following entities are deleted.
{
"id": "792a0140-23a2-4448-9b1d-f26dfb249f22",
"body": {
"occurred": 1647000679962,
"userId": "5f92b1682633360001cd3a4f",
"details": {
"personId": 1,
"entityType": "PERSON"
},
"action": "person.removed"
},
"metadata": {
"occurred": 1647000680043
},
"panelId": "1070000",
"topic": "entity.removed"
}
error.card.parse
This event is emitted when an error occurs while processing a custom card format.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"cardFormat": "Card Format Name",
"errorMessage": "Bad facility code: 1"
},
"metadata": {
"occurred": 1640785537799
},
"panelId": "1070000",
"topic": "error.card.parse"
}
error.packetized.protocol
This event is emitted when an error occurs while processing Bluetooth credentials.
{
"id": "1adab79b-7926-4289-9efb-72df01ab8447",
"body": {
"doorId": 1
},
"metadata": {
"occurred": 1646993791971,
"doorName": "Door Name"
},
"panelId": "1070000",
"topic": "error.packetized.protocol"
}
floorgroup.activated
This event is emitted when an elevator floor group is activated.
{
"id": "51bda978-3118-4298-8f7d-43c9cc4ababb",
"body": {
"elevatorId": 1,
"readerId": 1
},
"metadata": {
"occurred": 1648730636236
},
"panelId": "1070000",
"topic": "floorgroup.activated"
}
notification.client.command
This event is emitted when a command is sent via WebSocket connection.
{
"id": "d4d372dd-c994-4b84-88a0-a883b44ada10",
"body": {
"occurred": 1646914071461,
"userId": 1,
"details": {
"doorId": 1,
"doorName": "Door Name",
"personId": 1
},
"event": "door.input.virtualread",
"result": null
},
"metadata": {
"occurred": 1646914071739
},
"panelId": "1070000",
"topic": "notification.client.command"
}
notification.device.created
This event is emitted when a new device is created.
{
"id": "86fd4698-721e-4955-a76c-2c889b7dafbd",
"body": {
"port": 1,
"wirelessAddress": "",
"delay": 0,
"dwell": 30,
"dps": false,
"rex": false,
"name": "Name",
"connection": 1,
"forcedAlarm": false,
"autoOpenAfterFirstAllow": false,
"propAlarm": false,
"propDelay": 0,
"inputTypes": ["wiegand", "unencryptedOsdp", "encryptedOsdp"],
"osdpAddress": 0,
"metadata": {},
"reader": null,
"type": "primaryReader",
"publicIcon": "swingingDoor",
"readerType": "standard",
"id": 1
},
"metadata": {
"occurred": 1646998886112
},
"panelId": "1070000",
"topic": "notification.device.created"
}
notification.device.deleted
This event is emitted when a device is deleted.
{
"id": "86fd4698-721e-4955-a76c-2c889b7dafbd",
"body": {
"port": 1,
"wirelessAddress": "",
"delay": 1,
"dwell": 1,
"dps": true,
"rex": true,
"name": "1111111111111111111111111111111111111",
"connection": 1,
"forcedAlarm": true,
"autoOpenAfterFirstAllow": false,
"propAlarm": true,
"propDelay": 1,
"inputTypes": ["wiegand", "unencryptedOsdp", "encryptedOsdp"],
"osdpAddress": 1,
"metadata": {},
"reader": null,
"type": "primaryReader",
"publicIcon": "swingingGate",
"readerType": "touch",
"id": 1
},
"metadata": {
"occurred": 1646998886112
},
"panelId": "1070000",
"topic": "notification.device.deleted"
}
notification.device.updated
This event is emitted when a device is updated.
{
"id": "595878a0-4876-4315-a04b-8a80326820d9",
"body": {
"prevState": {
"delay": 1,
"dwell": 1,
"dps": false,
"propAlarm": false,
"propDelay": 1,
"rex": false,
"forcedAlarm": false,
"name": "Name",
"publicIcon": "swingingDoor",
"osdpAddress": 0
},
"newState": {
"delay": 2,
"dwell": 2,
"dps": true,
"propAlarm": true,
"propDelay": 2,
"rex": true,
"forcedAlarm": true,
"name": "New Name",
"authenticationPolicy": null,
"publicIcon": "swingingGate",
"osdpAddress": 1
},
"id": 1
},
"metadata": {
"occurred": 1646999570173
},
"panelId": "1070000",
"topic": "notification.device.updated"
}
notification.intercom.created
This event is emitted when a new intercom is created.
{
"id": "b7162645-de0d-4413-bbe0-1c7c2341493f",
"body": {
"name": "Name",
"manufacturer": "comelit",
"id": "11111111111111111111111111111111"
},
"metadata": {
"occurred": 1646995828007
},
"panelId": "1070000",
"topic": "notification.intercom.created"
}
notification.intercom.deleted
This event is emitted when an intercom is deleted.
{
"id": "96c26784-2571-437e-8324-3d038255a7ba",
"body": {
"name": "Name",
"manufacturer": "comelit",
"id": "11111111111111111111111111111111"
},
"metadata": {
"occurred": 1646996419371
},
"panelId": "1070000",
"topic": "notification.intercom.deleted"
}
notification.intercom.updated
This event is emitted when an intercom is updated.
{
"id": "96c26784-2571-437e-8324-3d038255a7ba",
"body": {
"prevState": {
"name": "Name"
},
"newState": {
"name": "New Name"
},
"id": "11111111111111111111111111111111"
},
"metadata": {
"occurred": 1646996419371
},
"panelId": "1070000",
"topic": "notification.intercom.updated"
}
notification.person.created
This event is emitted when a new person is created.
{
"id": "db642b4f-c3db-448e-8d39-9d7d934047ff",
"body": {
"enabled": true,
"partition": 0,
"metadata": {},
"id": 1
},
"metadata": {
"occurred": 1646995277820
},
"panelId": "1070000",
"topic": "notification.person.created"
}
notification.person.deleted
This event is emitted when a person is deleted.
{
"id": "b7162645-de0d-4413-bbe0-1c7c2341493f",
"body": {
"enabled": false,
"partition": 0,
"activeDate": "YYYY-MM-DDThh:mm:ss",
"expireDate": "YYYY-MM-DDThh:mm:ss",
"metadata": {},
"id": 1
},
"metadata": {
"occurred": 1646995828007
},
"panelId": "1070000",
"topic": "notification.person.deleted"
}
notification.person.updated
This event is emitted when a person is updated. Note that this does not include changes to credentials, groups, or rules. Changes to these entities can be caputured using the entity.modified
event.
{
"id": "13572d7b-5ef9-4637-b31f-1e3421115620",
"body": {
"prevState": {
"enabled": false,
"partition": 1,
"activeDate": "YYYY-MM-DDThh:mm:ss",
"expireDate": "YYYY-MM-DDThh:mm:ss"
},
"newState": {
"enabled": true,
"partition": 0,
"activeDate": "YYYY-MM-DDThh:mm:ss",
"expireDate": "YYYY-MM-DDThh:mm:ss"
},
"id": 1
},
"metadata": {
"occurred": 1646995531913
},
"panelId": "1070000",
"topic": "notification.person.updated"
}
panel.connected
This event is emitted when a cloud node is connected.
{
"ip": "100.64.78.82",
"online": true,
"timestamp": "YYYY-MM-DDThh:mm:ssZ",
"panelId": "1070000",
"topic": "panel.connected"
}
panel.disconnected
This event is emitted when a cloud node is disconnected.
{
"ip": "100.64.78.82",
"online": true,
"timestamp": "YYYY-MM-DDThh:mm:ssZ",
"panelId": "1070000",
"topic": "panel.disconnected"
}