Skip to main content
Version: 1.0

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.
info

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"
}
PropertyTypeDescription
idStringThe webhook ID.
nameStringThe webhook name.
urlStringThe URL that will receive POST requests when events occur.
scopeString 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"]
authenticationObjectAn object describing the authentication mechanism.
authentication.typeStringThe authentication type. Possible values include None and Basic.
authentication.userStringThe authentication user. This only applies if authentication.type is set to Basic.
authentication.passwordStringThe authentication password. This only applies if authentication.type is set to Basic.
eventsString[]A list of organization events or panel events that trigger the webhook. Event types may not be mixed.
activeBooleanWhether the webhook is active.
sslVerificationBooleanWhether the SSL certificate of the target host will be checked.
secrecyLevelIntegerThe 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).
expiresAtStringAn ISO 8601 timestamp representing the time at which this hook's active status will be set to false.
userIdStringThe ID of the user that created the webhook.
odometerIntegerThe total number of times the webhook has been triggered.
secretStringThe 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"
]
}
ParameterLocationTypeRequiredDescription
organization_idPathStringYesThe organization ID.
id_tokenHeaderStringYesA valid ID token.
nameBodyStringYesThe webhook name. The maximum length is 70 characters.
urlBodyStringYesThe URL that will receive POST requests when events occur. HTTPS protocol is required.
scopeBodyString or String[]YesThe 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"]
authenticationBodyObjectYesAn object describing the authentication mechanism.
authentication.typeBodyStringYesThe authentication type. Possible values include None and Basic.
authentication.userBodyStringSometimesThe authentication user. This is required if authentication.type is set to Basic.
authentication.passwordBodyStringSometimesThe authentication password. This is required if authentication.type is set to Basic.
eventsBodyString[]YesA list of organization events or panel events that trigger the webhook. Event types may not be mixed.
activeBodyBooleanNoWhether the webhook should be active. The default value is true.
sslVerificationBodyBooleanNoWhether 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.
secrecyLevelBodyIntegerNoThe 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.
expiresAtBodyStringNoAn 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.
secretBodyStringNoThe 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}}
ParameterLocationTypeRequiredDescription
organization_idPathStringYesThe organization ID.
webhook_idPathStringYesThe webhook ID.
id_tokenHeaderStringYesA 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
}
ParameterLocationTypeRequiredDescription
organization_idPathStringYesThe organization ID.
webhook_idPathIntegerYesThe webhook ID.
id_tokenHeaderStringYesA valid ID token.
nameBodyStringYesThe webhook name. The maximum length is 70 characters.
urlBodyStringYesThe URL that will receive POST requests when events occur. HTTPS protocol is required.
scopeBodyString or String[]YesThe 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"]
authenticationBodyObjectYesAn object describing the authentication mechanism.
authentication.typeBodyStringYesThe authentication type. Possible values include None and Basic.
authentication.userBodyStringSometimesThe authentication user. This is required if authentication.type is set to Basic.
authentication.passwordBodyStringSometimesThe authentication password. This is required if authentication.type is set to Basic.
eventsBodyString[]YesA list of organization events or panel events that trigger the webhook. Event types may not be mixed.
activeBodyBooleanYesWhether the webhook should be active. The default value is true.
sslVerificationBodyBooleanYesWhether 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.
secrecyLevelBodyIntegerYesThe 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.
expiresAtBodyStringNoAn 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.
secretBodyStringNoThe 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}}
ParameterLocationTypeRequiredDescription
organization_idPathStringYesThe organization ID.
webhook_idPathIntegerYesThe webhook ID.
id_tokenHeaderStringYesA 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}}
ParameterLocationTypeRequiredDescription
organization_idPathStringYesThe organization ID.
id_tokenHeaderStringYesA 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"
}