Camera events. With the footage.

Connect your app to Ring, Arlo, and TP-Link Tapo. Receive motion events and retrieve the recorded clips and images behind them, with one API.

Camera events and recordings. Across brands.

Add recorded clips to activity timelines and motion alerts. Start with Ring, Arlo, and TP-Link Tapo, with more camera brands on the way.

  • Motion events and Ring doorbell presses

  • Recorded clips and thumbnail images

  • Events in a common webhook format

  • Cloud recordings and local media via Bridge

Explore Camera Events & Media

See what triggered the event. Receive motion alerts and retrieve the footage.

A moment of motion becomes a webhook, then a clip in your app. Follow the event from the camera to the recording.

Behind the scenes
  1. Next: Detect motion
  2. Next: Receive event
  3. Next: Retrieve media
Webhook listenerPOST /webhooks/seam
Listening

Illustrative camera demo with a white Ubiquiti G6 Turret. Waiting for motion.

seam media get \
  --media-id $MEDIA_ID

A few lines of code. Camera events across brands.

Find connected cameras, read their activity, and retrieve the media behind each event.

Find your cameras

List camera devices connected to your workspace, across supported providers.

Explore camera devices
1const query = new URLSearchParams({
2  device_types: JSON.stringify(["ring_camera","arlo_camera","tapo_camera"]),
3})
4const response = await fetch(`https://connect.getseam.com/devices/list?${query}`, {
5  headers: { Authorization: `Bearer ${process.env.SEAM_API_KEY}` },
6})
7if (!response.ok) throw new Error(`Seam HTTP ${response.status}`)
8const { devices } = await response.json()
9console.log(devices)

Read camera activity

Retrieve motion and Ring doorbell events, or subscribe to webhooks for updates as they happen. Events can include media IDs for the captured clips and images.

Explore camera events
1const query = new URLSearchParams({
2  device_id: "9b31d4c0-8f2a-4ce6-9d17-4a65c92e0b38",
3  event_types: JSON.stringify(["camera.activated","device.doorbell_rang"]),
4  since: new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(),
5})
6const response = await fetch(`https://connect.getseam.com/events/list?${query}`, {
7  headers: { Authorization: `Bearer ${process.env.SEAM_API_KEY}` },
8})
9if (!response.ok) throw new Error(`Seam HTTP ${response.status}`)
10const { events } = await response.json()
11console.log(events)

Webhook payload excerpt

1{
2  "event_type": "camera.activated",
3  "device_id": "9b31d4c0-8f2a-4ce6-9d17-4a65c92e0b38",
4  "activation_reason": "motion_detected",
5  "media_ids": [
6    "01a0d985-621c-7b3e-9f2d-4a5b6c7d8e9f",
7    "01a0d985-621c-7c4f-8a3e-5b6c7d8e9f0a"
8  ]
9}

Retrieve clips and images

Use a media ID from the event to request its recording or thumbnail. When available, the response includes a short-lived signed URL.

Events can arrive before a recording is ready. Retry pending media with backoff until it becomes available, unavailable, or failed.

Read the media guide
1const query = new URLSearchParams({
2  media_id: "01a0d985-621c-7b3e-9f2d-4a5b6c7d8e9f",
3})
4const response = await fetch(`https://connect.getseam.com/media/get?${query}`, {
5  headers: { Authorization: `Bearer ${process.env.SEAM_API_KEY}` },
6})
7if (!response.ok) throw new Error(`Seam HTTP ${response.status}`)
8const { media } = await response.json()
9console.log(media)

From an event to a recording. In three steps.

Build an event timeline, add clips to notifications, or bring visual context into your workflows.

  1. Connect a camera

    Let users link a supported camera account through Connect Webview. Complete the provider’s recording setup.

    Connect Webview
  2. Receive the event

    Subscribe to camera events with a webhook. Events can include media IDs for recordings and images.

    camera.activated
  3. Retrieve the recording

    Request each media ID. When the media is available, use its short-lived signed URL to play or download it.

    /media/get

Start building. The details are in the docs.

Event media guide

Follow the full flow from a camera event to a playable recording, with provider requirements and polling guidance.

Read the guide

Media API reference

Explore media types, availability states, signed URLs, and the response fields your app can use.

Explore the API

Webhooks

Subscribe to events and verify webhook signatures to receive camera activity in your application.

Set up webhooks

Bring cameras into your app. Start with Seam.

Create an API key to start building, or talk with us about your camera integration.

Smart Locks
Access Systems
Knowledge
Lock Capabilities
Thermostats
Sensors
© 2026 Seam Labs, Inc.