Motion Detection Notifications
Motion detection notifications are sent when Ring devices detect movement in their field of view. These real-time notifications enable partners to respond immediately to motion events.
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-13T13:39:57.200155525Z",
"request_id": "2ad45ade-1818-4154-813b-afdd8bcd8085",
"account_id": "ava1.ring.account.XXXYYY"
},
"data": {
"id": "<device_id>_human_<timestamp>",
"type": "motion_detected",
"subType": "human",
"attributes": {
"source": "<device_id>",
"source_type": "devices",
"timestamp": 1770989995231
},
"relationships": {
"devices": {
"links": {
"self": "/v1/devices/<device_id>"
}
}
}
}
}
Payload Fields
Meta Information
- version: Webhook payload version (
1.1includesaccount_id) - time: ISO 8601 timestamp when Ring sent the webhook
- request_id: Unique identifier for this webhook request (use for idempotency)
- account_id: The Account ID of the Ring user associated with this event
Event Data
- id: Unique identifier for this specific motion event (format:
<device_id>_<subType>_<timestamp>) - type: Always
motion_detectedfor motion events - subType: Classification of the motion detected (e.g.,
human) - source: Device ID that detected the motion
- source_type: Always
devicesfor device-originated events - timestamp: Epoch milliseconds when motion was detected
Processing Motion Events
def handle_motion_detection(payload):
device_id = payload['data']['attributes']['source']
account_id = payload['meta']['account_id']
motion_timestamp = payload['data']['attributes']['timestamp']
event_id = payload['data']['id']
sub_type = payload['data'].get('subType', 'unknown')
log_motion_event(device_id, account_id, motion_timestamp, event_id, sub_type)
trigger_motion_response(device_id, account_id, motion_timestamp, sub_type)
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 - Handle subType: Use
subType(e.g.,human) to differentiate motion classifications - Handle duplicates: Implement idempotency using
request_idor eventid - Respond quickly: Return HTTP 200 within 5 seconds to avoid timeout
- Respect configuration: Check device motion detection settings

