Device Offline Notifications
Device offline notifications are sent when a Ring device goes offline and is no longer reachable. These real-time notifications enable partners to handle device unavailability gracefully and inform users.
Webhook Delivery
Ring delivers all webhook notifications with an HMAC-SHA256 signature in the X-Signature header. Partners must verify this signature before processing the payload. See Notifications for signature verification details.
Webhook Payload
{
"meta": {
"version": "1.1",
"time": "2026-02-13T23:26:49.710448203Z",
"request_id": "343385ae-1de8-4b29-85aa-07bd4b7112fd",
"account_id": "ava1.ring.account.XXXYYY"
},
"data": {
"id": "<device_id>_device_offline_<timestamp>",
"type": "device_offline",
"attributes": {
"source": "<device_id>",
"source_type": "devices",
"timestamp": 1771025206000
},
"relationships": {
"devices": {
"links": {
"self": "/v1/devices/<device_id>"
}
}
}
}
}
When Device Offline Occurs
Device offline notifications are triggered when:
- A device loses network connectivity
- A device powers off or runs out of battery
- A device experiences a hardware or firmware issue preventing communication
Processing Device Offline Events
def handle_device_offline(payload):
device_id = payload['data']['attributes']['source']
account_id = payload['meta']['account_id']
offline_timestamp = payload['data']['attributes']['timestamp']
update_device_status(device_id, account_id, 'offline', offline_timestamp)
terminate_active_streams(device_id)
pause_device_operations(device_id)
return {'status': 'processed'}
Best Practices
- Verify HMAC signature: Always verify the
X-Signatureheader before processing - Use account_id: Associate events with the correct Ring user via
meta.account_id - Update status tracking: Mark the device as offline in your system
- Terminate active sessions: Close any active video streams for the device
- Pause operations: Suspend scheduled operations until the device comes back online
- Handle duplicates: Implement idempotency using
request_idor eventid - Respond quickly: Return HTTP 200 within 5 seconds to avoid timeout

