Read-only monitoring for Eero mesh networks
Complete reference for eeroVista API endpoints.
All API endpoints are relative to your eeroVista instance:
http://localhost:8080
Currently, all endpoints are unauthenticated. Future versions may add API key authentication.
GET /
Returns the main dashboard HTML page with network overview, graphs, and statistics.
GET /devices
Returns HTML page with table of all connected and historical devices.
GET /network
Returns HTML page visualizing the mesh network topology.
GET /speedtest
Returns HTML page with historical speedtest results and graphs.
GET /settings
Returns HTML page displaying current configuration (read-only).
GET /api/health
Response (200 OK):
{
"status": "healthy",
"version": "1.0.0",
"uptime_seconds": 86400,
"database": "connected",
"eero_api": "authenticated",
"last_collection": "2025-10-19T14:30:00Z"
}
GET /api/devices
Query Parameters:
online (boolean): Filter by connection statuslimit (int): Limit number of results (default: 100)offset (int): Pagination offset (default: 0)Response (200 OK):
{
"total": 15,
"devices": [
{
"mac_address": "AA:BB:CC:DD:EE:FF",
"hostname": "Johns-iPhone",
"nickname": "John's Phone",
"device_type": "mobile",
"is_connected": true,
"connection_type": "wireless",
"connected_to_node": "Living Room",
"signal_strength": -45,
"ip_address": "192.168.1.100",
"bandwidth_down_mbps": 125.3,
"bandwidth_up_mbps": 12.8,
"first_seen": "2025-10-01T10:00:00Z",
"last_seen": "2025-10-19T14:30:15Z"
}
]
}
GET /api/devices/{mac_address}
Path Parameters:
mac_address: MAC address (URL-encoded, e.g., AA:BB:CC:DD:EE:FF)Query Parameters:
history_hours (int): Hours of history to return (default: 24)Response (200 OK):
{
"device": {
"mac_address": "AA:BB:CC:DD:EE:FF",
"hostname": "Johns-iPhone",
"nickname": "John's Phone",
"device_type": "mobile",
"first_seen": "2025-10-01T10:00:00Z",
"last_seen": "2025-10-19T14:30:15Z"
},
"current_connection": {
"is_connected": true,
"connection_type": "wireless",
"connected_to_node": "Living Room",
"signal_strength": -45,
"ip_address": "192.168.1.100",
"bandwidth_down_mbps": 125.3,
"bandwidth_up_mbps": 12.8
},
"history": [
{
"timestamp": "2025-10-19T14:30:00Z",
"is_connected": true,
"signal_strength": -45,
"bandwidth_down_mbps": 125.3,
"bandwidth_up_mbps": 12.8
}
]
}
GET /api/network/summary
Response (200 OK):
{
"timestamp": "2025-10-19T14:30:00Z",
"total_devices": 15,
"devices_online": 12,
"guest_network_enabled": false,
"wan_status": "connected",
"nodes": [
{
"eero_id": "12345",
"location": "Living Room",
"model": "eero Pro 6E",
"is_gateway": true,
"status": "online",
"connected_devices": 5,
"uptime_seconds": 604800
}
]
}
GET /metrics
Returns Prometheus-formatted metrics for scraping.
Response (200 OK, text/plain):
# HELP eero_device_connected Device connection status (1=connected, 0=disconnected)
# TYPE eero_device_connected gauge
eero_device_connected{mac="AA:BB:CC:DD:EE:FF",hostname="Johns-iPhone",node="Living Room"} 1
# HELP eero_device_signal_strength WiFi signal strength in dBm
# TYPE eero_device_signal_strength gauge
eero_device_signal_strength{mac="AA:BB:CC:DD:EE:FF",hostname="Johns-iPhone",node="Living Room"} -45
# HELP eero_device_bandwidth_mbps Device bandwidth in Mbps
# TYPE eero_device_bandwidth_mbps gauge
eero_device_bandwidth_mbps{mac="AA:BB:CC:DD:EE:FF",hostname="Johns-iPhone",direction="download"} 125.3
eero_device_bandwidth_mbps{mac="AA:BB:CC:DD:EE:FF",hostname="Johns-iPhone",direction="upload"} 12.8
# HELP eero_network_devices_total Total number of known devices
# TYPE eero_network_devices_total gauge
eero_network_devices_total 15
# HELP eero_network_devices_online Number of currently connected devices
# TYPE eero_network_devices_online gauge
eero_network_devices_online 12
# HELP eero_node_status Eero node status (1=online, 0=offline)
# TYPE eero_node_status gauge
eero_node_status{node="Living Room",location="Living Room",gateway="true"} 1
# HELP eero_node_connected_devices Number of devices connected to this node
# TYPE eero_node_connected_devices gauge
eero_node_connected_devices{node="Living Room"} 5
# HELP eero_speedtest_download_mbps Latest speedtest download speed
# TYPE eero_speedtest_download_mbps gauge
eero_speedtest_download_mbps 950.2
# HELP eero_speedtest_upload_mbps Latest speedtest upload speed
# TYPE eero_speedtest_upload_mbps gauge
eero_speedtest_upload_mbps 45.8
# HELP eero_speedtest_latency_ms Latest speedtest latency
# TYPE eero_speedtest_latency_ms gauge
eero_speedtest_latency_ms 12.4
See Prometheus Integration for scrape configuration.
GET /api/zabbix/discovery/devices
Response (200 OK):
{
"data": [
{
"{#MAC}": "AA:BB:CC:DD:EE:FF",
"{#HOSTNAME}": "Johns-iPhone",
"{#NICKNAME}": "John's Phone",
"{#TYPE}": "mobile"
}
]
}
GET /api/zabbix/discovery/nodes
Response (200 OK):
{
"data": [
{
"{#NODE_ID}": "12345",
"{#NODE_NAME}": "Living Room",
"{#NODE_MODEL}": "eero Pro 6E",
"{#IS_GATEWAY}": "true"
}
]
}
GET /api/zabbix/data
Query Parameters (one required):
item=device.connected[MAC] - Device connection status (0 or 1)item=device.signal[MAC] - Signal strength in dBmitem=device.bandwidth.down[MAC] - Download bandwidth in Mbpsitem=device.bandwidth.up[MAC] - Upload bandwidth in Mbpsitem=network.devices.total - Total devicesitem=network.devices.online - Online devicesitem=speedtest.download - Latest speedtest download (Mbps)item=speedtest.upload - Latest speedtest upload (Mbps)item=speedtest.latency - Latest speedtest latency (ms)Example:
GET /api/zabbix/data?item=device.connected[AA:BB:CC:DD:EE:FF]
Response (200 OK):
{
"value": 1,
"timestamp": "2025-10-19T14:30:00Z"
}
See Zabbix Integration for template setup.
All endpoints may return the following error responses:
{
"error": "Invalid parameter",
"message": "MAC address must be in format AA:BB:CC:DD:EE:FF"
}
{
"error": "Device not found",
"message": "No device with MAC address AA:BB:CC:DD:EE:FF"
}
{
"error": "Database error",
"message": "Failed to query database"
}
{
"error": "Eero API unavailable",
"message": "Authentication failed or API rate limited"
}
eeroVista does not currently implement rate limiting on its API endpoints. However, the underlying Eero API has rate limits that may affect data collection frequency.
Recommendations:
Planned for future releases:
GET /api/export/devices.csv
GET /api/export/speedtests.csv
POST /api/webhooks
GET /api/devices?node=Living+Room&type=mobile&since=2025-10-01