Fix UniFi OS (UDM-SE) API endpoints for client/device queries

UDM-SE uses UniFi OS which requires /proxy/network prefix for Network
application API endpoints. The legacy controller endpoints (/api/s/...)
return 404 on UniFi OS devices.

Changes:
- Updated get_clients() to use /proxy/network/api/s/{site}/stat/sta
- Updated get_devices() to use /proxy/network/api/s/{site}/stat/device
- Added comments explaining UniFi OS API structure

Fixes 404 errors when querying UniFi controller for devices

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Mike Geppert 2026-01-04 06:16:40 -06:00
parent c157595ee3
commit 0267b1712b

View File

@ -122,25 +122,26 @@ class UnifiClient:
def get_clients(self) -> List[Dict]:
"""
Get all clients from the UniFi controller.
Returns:
list: List of client dictionaries
Raises:
UniFiDataError: If request fails
"""
endpoint = f'/api/s/{self.site_id}/stat/sta'
# UniFi OS (UDM-SE) uses /proxy/network prefix for Network application API
endpoint = f'/proxy/network/api/s/{self.site_id}/stat/sta'
try:
response = self._request_json(endpoint)
if isinstance(response, dict) and 'data' in response:
clients = response['data']
self.logger.debug(f"Retrieved {len(clients)} clients from UniFi controller")
return clients
else:
raise UniFiDataError("Unexpected response format from UniFi controller")
except UniFiDataError as e:
self.logger.error(f"Failed to get clients: {e}")
raise
@ -148,25 +149,26 @@ class UnifiClient:
def get_devices(self) -> List[Dict]:
"""
Get all devices (APs, switches, etc.) from the UniFi controller.
Returns:
list: List of device dictionaries
Raises:
UniFiDataError: If request fails
"""
endpoint = f'/api/s/{self.site_id}/stat/device'
# UniFi OS (UDM-SE) uses /proxy/network prefix for Network application API
endpoint = f'/proxy/network/api/s/{self.site_id}/stat/device'
try:
response = self._request_json(endpoint)
if isinstance(response, dict) and 'data' in response:
devices = response['data']
self.logger.debug(f"Retrieved {len(devices)} devices from UniFi controller")
return devices
else:
raise UniFiDataError("Unexpected response format from UniFi controller")
except UniFiDataError as e:
self.logger.error(f"Failed to get devices: {e}")
raise