Webhooks

Event catalog.

Every event type CHeKT can deliver — 11 in total. Each entry shows the required permission scope and the exact payload your endpoint will receive.

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:read

Fires when a new alarm is triggered at a site — motion, panic, door-forced, glass-break, or any custom trigger.

payload
{
  "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:read

An operator (human or app) acknowledged the alarm. Includes the reason text and operator ID.

payload
{
  "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:read

A responder was dispatched to the alarm location. Includes ETA and live tracking URL.

payload
{
  "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:read

The alarm was closed. The resolution field describes the outcome (handled, false-positive, escalated).

payload
{
  "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:read

A device came back online. Includes how long it was offline.

payload
{
  "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:read

A device stopped responding. Fires after a 60-second debounce to avoid flapping notifications.

payload
{
  "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:read

A new snapshot is available. URL expires 24 hours after creation.

payload
{
  "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:read

An alarm needs verification. The deadline field tells you how long you have before CHeKT escalates.

payload
{
  "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:read

A partition was armed. The by field tells you whether by user, schedule, or remote.

payload
{
  "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:read

A partition was disarmed. Operator ID present if disarmed manually.

payload
{
  "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:read

A relay was triggered by an alarm, schedule, or manual action.

payload
{
  "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"
  }
}

Next steps