as

Settings
Sign out
Notifications
Alexa
Amazon Appstore
Ring
AWS
Documentation
Support
Contact Us
My Cases
Ring

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.1 includes account_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_detected for motion events
  • subType: Classification of the motion detected (e.g., human)
  • source: Device ID that detected the motion
  • source_type: Always devices for 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

  1. Verify HMAC signature: Always verify the X-Signature header before processing
  2. Use account_id: Associate events with the correct Ring user via meta.account_id
  3. Handle subType: Use subType (e.g., human) to differentiate motion classifications
  4. Handle duplicates: Implement idempotency using request_id or event id
  5. Respond quickly: Return HTTP 200 within 5 seconds to avoid timeout
  6. Respect configuration: Check device motion detection settings