How to subscribe
Webhook subscriptions are configured per-app in the dealer portal under Settings → CHeKT Apps → [your app] → Events. Pick only the events your app needs — unsubscribed events never cross the wire.
Each event requires a matching permission scope on the app. If your app doesn't have the scope, the event won't fire even if you subscribe. See the permissions reference.
Event families
Alarms
The alarm lifecycle — new alarms, operator actions, and resolution. Most apps subscribe to at least one of these.
alarm.createdrequires events:readFires when a new alarm is triggered at a site — motion, panic, door-forced, glass-break, or any custom trigger.
{
"id": "evt_2hKqx9",
"type": "alarm.created",
"created_at": "2026-05-26T10:21:34Z",
"data": {
"alarm_id": "A-10293",
"site_id": "site_29snd",
"device_id": "dev_8h2j3kfm",
"priority": "HIGH",
"trigger": "motion",
"location": "Main Entrance",
"snapshot_url": "https://media.chekt.com/snap/snap_91kxl2"
}
}alarm.acknowledgedrequires events:readAn operator (human or app) acknowledged the alarm. Includes the reason text and operator ID.
{
"id": "evt_2hKqxA",
"type": "alarm.acknowledged",
"created_at": "2026-05-26T10:22:15Z",
"data": {
"alarm_id": "A-10293",
"operator_id": "op_jsmith",
"reason": "AI verified, confidence=0.92"
}
}alarm.dispatchedrequires events:readA responder was dispatched to the alarm location. Includes ETA and live tracking URL.
{
"id": "evt_2hKqxB",
"type": "alarm.dispatched",
"created_at": "2026-05-26T10:23:02Z",
"data": {
"alarm_id": "A-10293",
"responder_id": "rsp_8x2k",
"responder_type": "guard",
"eta_seconds": 240,
"tracking_url": "https://dispatch.chekt.com/d/dxxx"
}
}alarm.resolvedrequires events:readThe alarm was closed. The resolution field describes the outcome (handled, false-positive, escalated).
{
"id": "evt_2hKqxC",
"type": "alarm.resolved",
"created_at": "2026-05-26T10:27:48Z",
"data": {
"alarm_id": "A-10293",
"resolution": "false-positive",
"notes": "Cleaning crew"
}
}Devices
Hardware coming online, going offline, or changing firmware. Critical for fleet-health dashboards.
device.onlinerequires devices:readA device came back online. Includes how long it was offline.
{
"id": "evt_5kxlm0",
"type": "device.online",
"created_at": "2026-05-26T08:01:11Z",
"data": {
"device_id": "dev_8h2j3kfm",
"site_id": "site_29snd",
"previous_status": "offline",
"downtime_seconds": 142
}
}device.offlinerequires devices:readA device stopped responding. Fires after a 60-second debounce to avoid flapping notifications.
{
"id": "evt_5kxlm1",
"type": "device.offline",
"created_at": "2026-05-26T07:58:49Z",
"data": {
"device_id": "dev_8h2j3kfm",
"site_id": "site_29snd",
"last_seen_at": "2026-05-26T07:58:48Z"
}
}Snapshots
Image and video captures tied to events. Subscribe if your app does AI verification or operator-assist.
snapshot.createdrequires snapshots:readA new snapshot is available. URL expires 24 hours after creation.
{
"id": "evt_91kxl3",
"type": "snapshot.created",
"created_at": "2026-05-26T10:21:34Z",
"data": {
"snapshot_id": "snap_91kxl2",
"device_id": "dev_8h2j3kfm",
"alarm_id": "A-10293",
"url": "https://media.chekt.com/snap/snap_91kxl2",
"expires_at": "2026-05-27T10:21:34Z"
}
}Verification
The video-verification workflow. Lets you build AI or human-in-the-loop verifiers as CHeKT Apps.
verification.requestedrequires events:readAn alarm needs verification. The deadline field tells you how long you have before CHeKT escalates.
{
"id": "evt_2hKqxD",
"type": "verification.requested",
"created_at": "2026-05-26T10:21:40Z",
"data": {
"alarm_id": "A-10293",
"requested_by": "operator",
"deadline_seconds": 90
}
}Sites & Partitions
Arm/disarm state changes. Useful for schedules, attendance, and access-control integrations.
partition.armedrequires sites:readA partition was armed. The by field tells you whether by user, schedule, or remote.
{
"id": "evt_par123",
"type": "partition.armed",
"created_at": "2026-05-26T22:00:00Z",
"data": {
"partition_id": "p_abc",
"site_id": "site_29snd",
"mode": "away",
"by": "schedule"
}
}partition.disarmedrequires sites:readA partition was disarmed. Operator ID present if disarmed manually.
{
"id": "evt_par124",
"type": "partition.disarmed",
"created_at": "2026-05-26T06:30:11Z",
"data": {
"partition_id": "p_abc",
"site_id": "site_29snd",
"by": "user",
"operator_id": "op_jsmith"
}
}Relays
Hardware relay activations. Tie events to physical actions — sirens, strobes, gate locks.
relay.activatedrequires events:readA relay was triggered by an alarm, schedule, or manual action.
{
"id": "evt_rel001",
"type": "relay.activated",
"created_at": "2026-05-26T10:21:36Z",
"data": {
"relay_id": "rel_4kj",
"device_id": "dev_8h2j3kfm",
"duration_seconds": 30,
"trigger": "alarm.created:A-10293"
}
}