

# Bridge Events

Bridge devices send webhook notifications for two kinds of events: events the Bridge generates automatically on its own, and events triggered by a job you sent to the Bridge (see [Lock Jobs](/home/api_jobs#lock-jobs) and [Bridge Jobs](/home/api_jobs#bridge-jobs)).

All webhook requests are signed — see [Webhook Security](/home/webhook-security) for how to validate them.

## Bridge Automated Events

These events are caused by the Bridge device itself and occur automatically, without user intervention.

| Event Type | Number Mapping |
| --- | --- |
| Job Complete | 3 |
| Activity Log Received | 5 |
| Bridge Connection | 10 |

### Job Complete Event

```json
{
  "payload": {
    "event": {
      "id": "string",
      "type": 3,
      "data": {
        "jobId": "string",
        "jobStatus": 0
      },
      "date": "ISODATE",
      "proxyTransportMethod": 2,
      "proxyId": "string"
    },
    "product": {
      "id": "string",
      "type": 1
    }
  }
}
```

`type` is always `3` for Job Complete events. `data` also carries job-specific fields — see [Job Result Payloads](/home/job-result-payloads). `proxyId` is the Bridge device ID that relayed the command; `product.id` is the target lock device ID.

**Job Status Codes**

| Code | Status | Description |
| --- | --- | --- |
| 0 | Success | Job completed successfully |
| 1 | Generic Error | Job failed due to generic error |
| 2 | Operation In Progress | Another operation is currently running on the device |

**Supported Job Types**

The following job types trigger Job Complete Event webhooks:

| Job Type ID | Operation Name | Description |
| --- | --- | --- |
| 1 | Lock | Engage the lock mechanism |
| 2 | Unlock | Disengage the lock mechanism |
| 4 | Create PIN | Add a new custom PIN code to the device |
| 5 | Delete PIN | Remove an existing custom PIN code |
| 9 | Get Battery Level | Retrieve current battery percentage |
| 10 | Get Status | Fetch current lock state and diagnostics |
| 15 | Get Logs | Get device activity logs |

### Activity Log Received Event

```json
{
  "payload": {
    "event": {
      "id": "string",
      "type": 5,
      "data": {
        "activityLogs": [
          {
            "logType": 0,
            "entryDate": 0,
            "operationId": 0,
            "keyId": 0,
            "pin": "string",
            "newPin": "string",
            "pinType": 0,
            "value1": 0,
            "value2": 0,
            "value3": 0,
            "value4": 0,
            "value5": 0,
            "time1": 0,
            "time2": 0
          }
        ]
      },
      "date": "ISODATE",
      "proxyTransportMethod": 2,
      "proxyId": "string"
    },
    "product": {
      "id": "string",
      "type": 1
    }
  }
}
```

`activityLogs` is an array of lock activity objects. Fields on each activity object other than `pin`, `newPin`, `pinType`, and `value1`-`value5`/`time1`-`time2` are always present; those are populated only for the log types that use them.

Every lock activity object has these common fields:

| Common Field | Description |
| --- | --- |
| logType | An integer indicating the type of event |
| entryDate | The time since UNIX epoch in seconds that the event occurred |
| keyId | Identifier of the eKey used for guest operations, or 0 if it was an event initiated via a Bluetooth Admin key or via the lock's keypad |
| operationId | An identifier of the Bluetooth command operation that generated this activity log, or undefined if there was no operationId defined for that particular command |

Some log types are populated with additional fields:

| Log Type | Translation | Additional Fields | Description |
| --- | --- | --- | --- |
| 11 | Bluetooth unlock | N/A | N/A |
| 13 | Bluetooth set time | time1 | The time the clock was set to |
| 14 | Change volume via keypad | value1, value2 | Previous volume, new volume |
| 15 | Change volume via Bluetooth | value1, value2 | Previous volume, new volume |
| 16 | Wrong PIN | pin | The wrong PIN that was attempted |
| 17 | PIN exceeded maximum length | pin | The PIN that was attempted |
| 18 | Unlock with master PIN | pin | The master PIN |
| 19 | Unlock with generated PIN previously used at least once (permanent, duration, weekly etc) | pin | The PIN used to unlock |
| 20 | Use a one-time PIN | pin | The PIN that was used |
| 21 | Use a permanent PIN for the first time | pin | The PIN that was used |
| 22 | Use a duration PIN for the first time | pin | The PIN that was used |
| 23 | Use a weekly PIN for the first time | pin | The PIN that was used |
| 24 | Use a monthly PIN for the first time | pin | The PIN that was used |
| 25 | Use a weekday PIN for the first time | pin | The PIN that was used |
| 26 | Use a weekend PIN for the first time | pin | The PIN that was used |
| 27 | Create a new PIN via Bluetooth | pin, time1, time2, pinType | The PIN that was used; start time if sent via Bluetooth; end time if sent via Bluetooth; the type of PIN used |
| 28 | Change PIN via keypad | pin, newPin | The original PIN; the new PIN it is changed to |
| 29 | Change PIN via Bluetooth | pin, newPin, time1, time2, pinType | The original PIN; the new PIN, if sent via Bluetooth; start/end time if sent via Bluetooth; the PIN type if sent via Bluetooth |
| 30 | Delete PIN via keypad | pin | The PIN that was deleted |
| 31 | Delete PIN via Bluetooth | pin | The PIN that was deleted |
| 32 | Change Master PIN | pin, newPin | The old master PIN; the new master PIN |
| 33 | Change auto-relock via keypad | value1, value2 | Time of timer autorelock in seconds; time of sensor autorelock in seconds |
| 34 | Change auto-relock via Bluetooth | value1 | Time of sensor autorelock in seconds, or 0 if disabled |
| 35 | Change incorrect PIN lockout count via keypad | value1, value2 | Previous value of incorrect PIN lockout count; new value |
| 36 | Change incorrect PIN lockout count via Bluetooth | value1, value2 | Previous value, or 0 if disabled; new value, or 0 if disabled |
| 37 | Bluetooth lock | N/A | N/A |
| 38 | Enable auto-unlock | value1, value2 | 1 if enabled, 0 if disabled; minimum RSSI to unlock when touched, actual RSSI value = value2 + 256 |
| 39 | Blacklist eKey | value3 | eKey ID |
| 40 | Unblacklist eKey | value3 | eKey ID |
| 41 | Change daylight savings time | N/A | N/A |
| 42 | Add key card | value5 | Card UID |
| 43 | Key card unlock | value5 | Card UID |
| 44 | Delete key card | value5 | Card UID |
| 45 | Set LED brightness | value1 | Brightness |
| 46 | Set relock alarm | value1 | Time before alarm sounds after opening in seconds, or 0 if disabled |
| 47 | Auto-relock lock (after opening and closing the lock) | N/A | N/A |
| 48 | Auto-relock lock (without first opening the lock) | N/A | N/A |
| 49 | Lock via keypad/button | N/A | N/A |
| 50 | Unlock via button | N/A | N/A |
| 51 | Lock with key/thumbturn | N/A | N/A |
| 52 | Unlock with key/thumbturn | N/A | N/A |
| 53 | Attempted break-in | N/A | N/A |
| 54 | Add fingerprint | value2 | Fingerprint UID |
| 55 | Delete fingerprint | value2 | Fingerprint UID |
| 56 | Fingerprint unlock | value1, value2 | 0 if unlock was successful, else a Bluetooth command result code; fingerprint UID (null if unsuccessful) |
| 57 | Invalid key card unlock attempt | value5 | Card UID |

### Bridge Connection Event

Sent when a Bridge (EB1X) connects to or disconnects from the server. Use it to update device status, trigger alerts, or drive automation when connectivity changes.

```json
{
  "payload": {
    "event": {
      "id": "string",
      "type": 10,
      "data": {
        "isOnline": true
      },
      "date": "ISODATE",
      "proxyTransportMethod": 2
    },
    "product": {
      "id": "string",
      "type": 1
    }
  }
}
```

`type` is always `10` for Bridge Connection events. `data.isOnline` is `true` when the bridge is online (connected), `false` when offline (disconnected). `product.id` is the Bridge device ID.

## Bridge Targeted Events

Bridge Targeted Events are sent when a Bridge device processes a job that targets the Bridge itself (see [Bridge Jobs](/home/api_jobs#bridge-jobs)).

| Event Type | Number Mapping |
| --- | --- |
| Job Processed | 3 |

### Get Device Status

```json
{
  "payload": {
    "event": {
      "id": "string",
      "type": 3,
      "data": {
        "jobId": "string",
        "jobStatus": 0,
        "wifiNetworkStatus": 0,
        "wifiNetworkSsid": "string",
        "wifiNetworkIpaddr": "string",
        "wifiNetworkDns": "string",
        "wifiNetworkChannel": 0,
        "wifiNetworkBand": 0,
        "wifiNetworkRssi": 0,
        "lockRssiList": [0],
        "locksMaxCapacity": 0,
        "locksCurrentAdded": 0
      },
      "date": "ISODATE",
      "proxyTransportMethod": 0
    },
    "product": {
      "id": "string",
      "type": 2
    }
  }
}
```

**Job Status**

| Job Status | Number Mapping |
| --- | --- |
| Success | 0 |
| Generic failure | 1 |
| Another operation is in progress | 2 |

**WiFi Network Status**

| WiFi Network Status | Number Mapping |
| --- | --- |
| Connected | 0 |
| Disconnected/SSID not found/Invalid Password | 2 |
| No Internet Connectivity | 5 |
