Features Verticals Cameras Conferences Pricing Contact Log In Get Started
Integration Guide

Connect Arlo Cameras to AgenticEye

Integrate Arlo Pro 4, Pro 5, Ultra 2, and Essential series cameras through the Arlo Cloud API for intelligent event-based monitoring and AI-powered analytics.

Cloud API REST API RTSP ONVIF

Important: Arlo cameras do not support RTSP or ONVIF protocols. All integration is performed through Arlo's cloud API. An active Arlo Secure subscription is required to access video recordings and cloud features. Battery-powered models may have intermittent connectivity during sleep cycles.

Compatible Arlo Cameras

AgenticEye supports event-driven integration with the following Arlo camera families through the Arlo Cloud API.

Arlo Pro 4
2K HDR, Wire-Free, Spotlight
Arlo Pro 5
2K HDR, Dual-Band Wi-Fi, Color Night Vision
Arlo Ultra 2
4K UHD, 180° View, Spotlight
Arlo Essential
Indoor, Outdoor, Spotlight, XL

Prerequisites

Requirements

  • Active Arlo account with Arlo Secure subscription (required for cloud recordings)
  • Arlo cameras set up and online via the Arlo app
  • Arlo SmartHub or base station connected and online (required for older models)
  • Two-factor authentication (2FA) configured on your Arlo account
  • AgenticEye platform account with API integration tier or higher
  • Python 3.8+ for running the integration scripts
  • Stable internet connection for cloud API communication

Battery Camera Considerations: Arlo's battery-powered cameras enter a sleep state between events to preserve battery life. They only wake and transmit when motion is detected. This means continuous streaming is not available — integration is event-driven by design. Wired power adapters are recommended for cameras requiring frequent monitoring.

Step-by-Step Integration Guide

Follow these steps to connect your Arlo cameras to AgenticEye through the Arlo Cloud API.

Install the Arlo API Client

Install the Python library for accessing the Arlo cloud API. This handles authentication, session management, and device communication.

Terminal — Install Dependencies # Install the pyaarlo library for Arlo API access pip install pyaarlo # Alternative: install the arlo-connector package pip install arlo-connector # Required dependency for 2FA email-based tokens pip install imapclient

Authenticate with Arlo Cloud

Arlo requires 2FA for API access. You can use email-based or app-based 2FA. The library handles IMAP-based email token retrieval automatically if configured.

Python — Arlo Authentication import pyaarlo # Initialize with email-based 2FA arlo = pyaarlo.PyArlo( username="[email protected]", password="your-arlo-password", tfa_type="email", tfa_source="imap", tfa_host="imap.gmail.com", tfa_username="[email protected]", tfa_password="your-email-app-password", synchronous_mode=True, save_state=True, state_file="/config/aarlo-state.json" ) print(f"Connected. Found {len(arlo.cameras)} cameras")

Gmail Users: If using Gmail for email-based 2FA, you need to create an App Password in your Google Account settings. Standard passwords will not work due to Google's security policies.

Retrieve Camera Streams and Device Info

Once authenticated, enumerate all cameras on your account and retrieve their current status, capabilities, and last known snapshot URL.

Python — List Cameras and Properties # List all cameras with their properties for camera in arlo.cameras: print(f"Camera: {camera.name}") print(f" Device ID: {camera.device_id}") print(f" Model: {camera.model_id}") print(f" Battery: {camera.battery_level}%") print(f" Signal: {camera.signal_strength}") print(f" State: {camera.state}") print(f" Last Image: {camera.last_image}") # Get base station info for base in arlo.base_stations: print(f"Base Station: {base.name}") print(f" Model: {base.model_id}") print(f" Mode: {base.mode}")
API Response — Camera Object { "deviceId": "48B02D1A12345", "deviceName": "Backyard Camera", "deviceType": "camera", "modelId": "VMC4060P", "state": "provisioned", "properties": { "hwVersion": "H19", "swVersion": "1.300.28.4", "batteryLevel": 87, "signalStrength": 4, "brightness": 0, "motionSensitivity": 80 } }

Configure Event-Triggered Snapshot Capture

Set up event listeners that capture snapshots when motion is detected. Arlo generates events that include a pre-signed URL for the video clip and a snapshot image.

Python — Event-Based Snapshot Capture import requests import time # Request a fresh snapshot from a specific camera camera = arlo.cameras[0] snapshot_url = camera.last_image # Force a new snapshot (wakes battery cameras) camera.request_snapshot() time.sleep(5) # Allow time for camera to wake and capture snapshot_url = camera.last_image # Download the snapshot if snapshot_url: response = requests.get(snapshot_url) with open("arlo_snapshot.jpg", "wb") as f: f.write(response.content) # Get recent recordings (requires Arlo Secure plan) recordings = camera.last_n_videos(count=10) for recording in recordings: print(f"Recording: {recording.created_at}") print(f" URL: {recording.video_url}") print(f" Duration: {recording.duration}s")

Set Up Continuous Event Monitoring

Configure a persistent event listener that forwards motion events and snapshots to AgenticEye in real-time as they occur.

Python — Event Listener with AgenticEye Push import json import requests AGENTICEYE_API = "https://api.agenticeye.com/v1" API_KEY = "your-agenticeye-api-key" def on_motion(camera, event): """Handle motion event from Arlo camera""" print(f"Motion on {camera.name} at {event.timestamp}") # Get snapshot from the event snapshot_url = camera.last_image # Forward to AgenticEye payload = { "source_id": camera.device_id, "source_type": "arlo_cloud", "event_type": "motion", "timestamp": event.timestamp, "snapshot_url": snapshot_url, "metadata": { "camera_name": camera.name, "battery_level": camera.battery_level, "model": camera.model_id } } headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } response = requests.post( f"{AGENTICEYE_API}/ingest/event", headers=headers, data=json.dumps(payload) ) print(f"Sent to AgenticEye: {response.status_code}") # Register event callbacks for all cameras for camera in arlo.cameras: camera.add_motion_callback(on_motion) # Keep the event loop running print("Listening for Arlo events... Press Ctrl+C to stop.") try: while True: time.sleep(1) except KeyboardInterrupt: print("Stopped.")

Arlo Cloud API Endpoints

Key API endpoints used by the integration. These are called internally by the pyaarlo library but are documented here for reference.

Arlo REST API — Key Endpoints # Base URL https://myapi.arlo.com/hmsweb # Authenticate and get session token POST /login/v2 Content-Type: application/json Body: {"email": "...", "password": "..."} # Complete 2FA verification POST /users/device/auth/validate Authorization: {auth_token} Body: {"code": "123456"} # Get all devices GET /users/devices Authorization: {auth_token} # Get library (recordings) for date range POST /users/library Authorization: {auth_token} Body: {"dateFrom": "20260101", "dateTo": "20260312"} # Get last snapshot URL for a camera GET /users/devices/{deviceId}/snapshot Authorization: {auth_token} # Start stream (returns pre-signed streaming URL) POST /users/devices/startStream Authorization: {auth_token} Body: {"deviceId": "...", "parentId": "..."} # Set camera motion sensitivity PUT /users/devices/{deviceId}/settings Authorization: {auth_token} Body: {"motionSensitivity": 80}

Common Issues

Battery Cameras — Intermittent Connectivity

Arlo's battery-powered cameras sleep between events to conserve power. Snapshot requests may fail if the camera is in deep sleep. The wake-up process can take 3-8 seconds. For more reliable integration, use a wired power adapter or solar panel to keep cameras always-on. You can also reduce the camera's motionSensitivity to reduce false wakes while keeping it responsive.

Cloud API Latency

All Arlo data flows through their cloud servers. Expect 2-8 seconds of latency between a motion event occurring and the snapshot becoming available via the API. This is inherent to the cloud-based architecture and cannot be eliminated. Configure AgenticEye's event processing pipeline with appropriate timeout values (minimum 10 seconds).

Arlo Secure Subscription Required

Without an active Arlo Secure subscription, recorded video clips are not available through the API. Only live snapshots will work. The last_n_videos() method will return empty results. Verify your subscription status at my.arlo.com under Plan settings.

Authentication Errors After Token Expiry

Arlo sessions expire after extended periods of inactivity. If you receive 401 Unauthorized errors, the session token has expired. Enable save_state=True in the pyaarlo configuration to persist session state. Implement automatic re-authentication in your integration script to handle token expiration gracefully.

Base Station Offline

Older Arlo cameras (Pro 2, Pro 3) require a SmartHub or base station. If the base station goes offline, all connected cameras become unreachable. Check the base station's Ethernet connection and power supply. Newer models (Pro 4, Pro 5, Essential) connect directly to Wi-Fi and do not require a base station.

Rate Limiting on Library Requests

The Arlo API limits library (recording history) requests. Avoid querying large date ranges or making requests more frequently than once per minute. Use pagination and cache results locally. If you receive 429 errors, implement exponential backoff starting at 30 seconds.

Need Help with Your Arlo Integration?

Our integration team can help you set up cloud-based Arlo camera connections and optimize event-driven monitoring for battery-powered devices.

Contact Our Integration Team