Optional alarm_id: stringOptional specific alarm ID to archive. If not provided, archives all alarms
Site identifier (default: 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to true if alarm archiving was successful
When alarm archiving fails
// Archive all alarms
await statisticsAPI.archive_alarm();
// Archive specific alarm
await statisticsAPI.archive_alarm('507f1f77bcf86cd799439011');
// Archive alarms after reviewing them
const alarms = await statisticsAPI.list_alarms();
const criticalAlarms = alarms.filter(alarm => alarm.key === 'EVT_GW_WAN_Disconnected');
for (const alarm of criticalAlarms) {
await statisticsAPI.archive_alarm(alarm._id);
}
PHP: archive_alarm($alarm_id = '') -> return $this->fetch_results_boolean('/api/s/' . $this->site . '/cmd/evtmgr', $payload);
List DPI stats
Retrieves Deep Packet Inspection (DPI) statistics showing application usage and traffic patterns across the network.
Site identifier (default: 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of DPI statistics objects
When DPI statistics retrieval fails
// Get all DPI stats
const dpiStats = await statisticsAPI.list_dpi_stats();
// Find top applications by traffic
const topApps = dpiStats
.sort((a, b) => (b.tx_bytes + b.rx_bytes) - (a.tx_bytes + a.rx_bytes))
.slice(0, 10);
// Analyze social media usage
const socialApps = dpiStats.filter(app =>
app.cat && app.cat.toLowerCase().includes('social')
);
PHP: list_dpi_stats() -> return $this->fetch_results('/api/s/' . $this->site . '/stat/dpi');
List DPI stats filtered
Retrieves filtered Deep Packet Inspection (DPI) statistics with specific categorization and filtering options.
Type of DPI grouping: 'by_app' or 'by_cat' (default: 'by_app')
Optional cat_filter: stringOptional category filter to limit results
Site identifier (default: 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to filtered DPI statistics
When filtered DPI statistics retrieval fails
// Get DPI stats grouped by application
const appStats = await statisticsAPI.list_dpi_stats_filtered('by_app');
// Get DPI stats grouped by category
const catStats = await statisticsAPI.list_dpi_stats_filtered('by_cat');
// Get stats for specific category
const socialStats = await statisticsAPI.list_dpi_stats_filtered('by_app', 'Social');
// Analyze streaming usage
const streamingStats = await statisticsAPI.list_dpi_stats_filtered('by_app', 'Streaming');
const totalStreaming = streamingStats.reduce((sum, app) =>
sum + app.tx_bytes + app.rx_bytes, 0
);
PHP: list_dpi_stats_filtered($type = 'by_app', $cat_filter = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/sitedpi', $payload);
List dashboard
Retrieves dashboard statistics and metrics for the UniFi site. Can provide either standard or 5-minute interval statistics.
Whether to use 5-minute intervals instead of standard intervals (default: false)
Site identifier (default: 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to dashboard statistics object
When dashboard statistics retrieval fails
// Get standard dashboard stats
const dashboard = await statisticsAPI.list_dashboard();
console.log(`Total clients: ${dashboard.num_user}`);
console.log(`Total devices: ${dashboard.num_ap + dashboard.num_sw + dashboard.num_gw}`);
// Get high-resolution 5-minute stats
const detailedDashboard = await statisticsAPI.list_dashboard(true);
// Monitor network health
const stats = await statisticsAPI.list_dashboard();
if (stats.num_disconnected > 0) {
console.log(`Warning: ${stats.num_disconnected} devices disconnected`);
}
PHP: list_dashboard($five_minutes = false) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/dashboard', $payload);
List extension
Retrieves information about UniFi Controller extensions and add-ons. This includes installed plugins, modules, and additional functionality.
Site identifier (default: 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of extension objects
When extension listing fails
// Get all installed extensions
const extensions = await statisticsAPI.list_extension();
// Check for specific extensions
const hasProtect = extensions.some(ext => ext.name.includes('Protect'));
const hasAccess = extensions.some(ext => ext.name.includes('Access'));
// List extension details
extensions.forEach(ext => {
console.log(`${ext.name} v${ext.version} - ${ext.status}`);
});
PHP: list_extension() -> return $this->fetch_results('/api/s/' . $this->site . '/list/extension');
List fingerprint devices
Retrieves device fingerprinting information showing detected device types, operating systems, and other identifying characteristics based on network behavior.
Site identifier (default: 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of fingerprint device objects
When fingerprint device listing fails
// Get all device fingerprints
const fingerprints = await statisticsAPI.list_fingerprint_devices();
// Analyze device types
const deviceTypes = fingerprints.reduce((acc, device) => {
acc[device.dev_cat] = (acc[device.dev_cat] || 0) + 1;
return acc;
}, {});
// Find mobile devices
const mobileDevices = fingerprints.filter(device =>
device.dev_cat === 'Mobile' || device.os_name.includes('iOS') || device.os_name.includes('Android')
);
// Check for unknown devices
const unknownDevices = fingerprints.filter(device =>
device.dev_cat === 'Unknown' || !device.os_name
);
PHP: list_fingerprint_devices() -> return $this->fetch_results('/api/s/' . $this->site . '/stat/fingerprint');
Get system information and statistics from the UniFi Controller
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal for request cancellation
Promise resolving to an array of system information objects
Retrieves comprehensive system information including controller version, uptime, memory usage, CPU information, and other system statistics.
const sysInfo = await statisticsAPI.stat_sysinfo();
console.log(`Controller version: ${sysInfo[0].version}`);
console.log(`Uptime: ${sysInfo[0].uptime} seconds`);
console.log(`Memory: ${sysInfo[0].mem_total} MB total`);
1.0.0
PHP: stat_sysinfo() -> return $this->fetch_results('/api/s/' . $this->site . '/stat/sysinfo');
Protected substituteProtected makeList health metrics
Retrieves health metrics for the UniFi site including subsystem status, connectivity information, and overall site health indicators.
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of health metric objects
When health metrics retrieval fails
// Get site health metrics
const health = await statisticsAPI.list_health();
console.log(`Site health status: ${health[0].status}`);
// Check specific subsystems
const wanHealth = health.find(h => h.subsystem === 'wan');
const lanHealth = health.find(h => h.subsystem === 'lan');
const wlanHealth = health.find(h => h.subsystem === 'wlan');
// Monitor connectivity
const connectivity = health.filter(h => h.subsystem === 'connectivity');
PHP: list_health() -> return $this->fetch_results('/api/s/' . $this->site . '/stat/health');
Fetch full status information
Retrieves comprehensive status information from the UniFi Controller. This includes detailed system status, configuration, and operational data.
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to full status object
When full status retrieval fails
// Get comprehensive status
const status = await statisticsAPI.stat_full_status();
console.log('Full system status:', status);
// Check specific status components
if (status.meta && status.meta.rc === 'ok') {
console.log('System is operating normally');
}
PHP: stat_full_status() -> $this->fetch_results_boolean('/status', null, $this->is_unifi_os); return json_decode($this->get_last_results_raw());
Check for controller updates
Checks for available UniFi Controller software updates. Returns information about the latest available controller version.
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to controller update information
When update check fails
// Check for controller updates
const updateInfo = await statisticsAPI.check_controller_update();
if (updateInfo.latest_version !== updateInfo.current_version) {
console.log(`Update available: ${updateInfo.latest_version}`);
}
PHP: check_controller_update() -> return $this->fetch_results('/api/s/' . $this->site . '/stat/fwupdate/latest-version');
Check for firmware updates
Initiates a check for available firmware updates for all UniFi devices in the site. This triggers the controller to query for new firmware versions.
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to true if firmware update check was initiated successfully
When firmware update check fails
// Check for firmware updates
await statisticsAPI.check_firmware_update();
// Then list devices to see available updates
const devices = await deviceAPI.list_devices();
const devicesWithUpdates = devices.filter(device => device.upgradable);
PHP: check_firmware_update() -> return $this->fetch_results_boolean('/api/s/' . $this->site . '/cmd/devmgr', $payload);
List events
Retrieves system events from the UniFi Controller with optional time filtering. Events include device connections, disconnections, configuration changes, and system alerts.
Number of hours of history to retrieve (default: 720 = 30 days)
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Maximum number of events to return (default: 3000)
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of event objects
When events retrieval fails
// Get last 24 hours of events
const events = await statisticsAPI.list_events(24);
// Get events for specific time range
const start = Date.now() - (7 * 24 * 60 * 60 * 1000); // 7 days ago
const end = Date.now();
const weekEvents = await statisticsAPI.list_events(undefined, start, end);
// Get recent events with limit
const recentEvents = await statisticsAPI.list_events(1, undefined, undefined, 100);
// Filter events by type
const allEvents = await statisticsAPI.list_events(24);
const deviceEvents = allEvents.filter(event => event.key === 'EVT_AP_Connected');
const userEvents = allEvents.filter(event => event.key === 'EVT_LU_Connected');
PHP: list_events($historyhours = 720, $start = null, $end = null, $limit = 3000) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/event', $payload);
List alarms
Retrieves system alarms from the UniFi Controller. Alarms represent significant events that require attention.
Optional filter payload for alarm retrieval
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of alarm objects
When alarms retrieval fails
// Get all alarms
const alarms = await statisticsAPI.list_alarms();
console.log(`Found ${alarms.length} alarms`);
// Get alarms with specific filter
const criticalAlarms = await statisticsAPI.list_alarms({
archived: false,
severity: 'critical'
});
// Filter alarms by type
const allAlarms = await statisticsAPI.list_alarms();
const deviceAlarms = allAlarms.filter(alarm => alarm.key.includes('device'));
const networkAlarms = allAlarms.filter(alarm => alarm.key.includes('network'));
PHP: list_alarms($payload = []) -> return $this->fetch_results('/api/s/' . $this->site . '/list/alarm', $payload);
Count alarms
Retrieves the count of alarms, optionally filtered by archived status.
Optional archived: booleanOptional filter for archived alarms (undefined = all, false = active only)
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to alarm count information
When alarm count retrieval fails
// Get total alarm count
const totalCount = await statisticsAPI.count_alarms();
// Get active alarms count only
const activeCount = await statisticsAPI.count_alarms(false);
console.log(`Active alarms: ${activeCount.count}`);
list_alarms to get detailed alarm information
PHP: count_alarms($archived = null) -> return $this->fetch_results('/api/s/' . $this->site . '/cnt/alarm' . $path_suffix);
Fetch 5-minute site statistics
Retrieves 5-minute interval statistics for the entire site. Provides detailed metrics about network usage, performance, and activity.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of 5-minute site statistics
When statistics retrieval fails
// Get last 12 hours of 5-minute stats
const stats = await statisticsAPI.stat_5minutes_site();
// Get stats for specific time range
const start = Date.now() - (24 * 60 * 60 * 1000); // 24 hours ago
const end = Date.now();
const stats = await statisticsAPI.stat_5minutes_site(start, end);
// Get specific attributes only
const stats = await statisticsAPI.stat_5minutes_site(
undefined,
undefined,
['bytes', 'num_sta', 'time']
);
PHP: stat_5minutes_site($start = null, $end = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/5minutes.site', $payload);
Fetch 5-minute access point statistics
Retrieves 5-minute interval statistics for access points. Can get stats for all APs or filter by specific MAC address.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional mac: stringOptional AP MAC address to filter results
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of 5-minute AP statistics
When statistics retrieval fails
// Get 5-minute stats for all APs
const allApStats = await statisticsAPI.stat_5minutes_aps();
// Get stats for specific AP
const apStats = await statisticsAPI.stat_5minutes_aps(
undefined, undefined, 'aa:bb:cc:dd:ee:ff'
);
// Get specific metrics for time range
const start = Date.now() - (6 * 60 * 60 * 1000); // 6 hours ago
const stats = await statisticsAPI.stat_5minutes_aps(
start, Date.now(), undefined, ['bytes', 'num_sta']
);
PHP: stat_5minutes_aps($start = null, $end = null, $mac = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/5minutes.ap', $payload);
Fetch 5-minute gateway statistics
Retrieves 5-minute interval statistics for the gateway/router. Provides metrics about WAN/LAN traffic, routing, and gateway performance.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of 5-minute gateway statistics
When statistics retrieval fails
// Get recent gateway stats
const gwStats = await statisticsAPI.stat_5minutes_gateway();
// Get gateway stats for specific time range
const start = Date.now() - (12 * 60 * 60 * 1000); // 12 hours ago
const stats = await statisticsAPI.stat_5minutes_gateway(start, Date.now());
// Get specific gateway metrics
const stats = await statisticsAPI.stat_5minutes_gateway(
undefined, undefined, ['wan-tx_bytes', 'wan-rx_bytes', 'lan-tx_bytes']
);
PHP: stat_5minutes_gateway($start = null, $end = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/5minutes.gw', $payload);
Fetch 5-minute user statistics
Retrieves 5-minute interval statistics for users/clients. Can get stats for all users or filter by specific MAC address.
Optional mac: stringOptional client MAC address to filter results
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of 5-minute user statistics
When statistics retrieval fails
// Get 5-minute stats for all users
const allUserStats = await statisticsAPI.stat_5minutes_user();
// Get stats for specific user
const userStats = await statisticsAPI.stat_5minutes_user('aa:bb:cc:dd:ee:ff');
// Get user stats for time range with specific metrics
const start = Date.now() - (4 * 60 * 60 * 1000); // 4 hours ago
const stats = await statisticsAPI.stat_5minutes_user(
'aa:bb:cc:dd:ee:ff', start, Date.now(), ['tx_bytes', 'rx_bytes']
);
PHP: stat_5minutes_user($mac = null, $start = null, $end = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/5minutes.user', $payload);
Fetch hourly stats for a single access point or all access points
Retrieves hourly statistics for access points with optional filtering by MAC address.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional mac: stringOptional AP MAC address to filter results
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of hourly AP statistics
When statistics retrieval fails
// Get hourly stats for all APs
const allApStats = await statisticsAPI.stat_hourly_aps();
// Get stats for specific AP over last week
const start = Date.now() - (7 * 24 * 60 * 60 * 1000);
const apStats = await statisticsAPI.stat_hourly_aps(
start, Date.now(), 'aa:bb:cc:dd:ee:ff'
);
PHP: stat_hourly_aps($start = null, $end = null, $mac = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/hourly.ap', $payload);
Fetch hourly gateway stats
Retrieves hourly statistics for the gateway/router.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of hourly gateway statistics
When statistics retrieval fails
// Get hourly gateway stats
const gwStats = await statisticsAPI.stat_hourly_gateway();
// Get gateway stats for specific time range
const start = Date.now() - (48 * 60 * 60 * 1000); // 48 hours ago
const stats = await statisticsAPI.stat_hourly_gateway(start, Date.now());
PHP: stat_hourly_gateway($start = null, $end = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/hourly.gw', $payload);
Fetch hourly site stats
Retrieves hourly statistics for the entire site.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of hourly site statistics
When statistics retrieval fails
// Get hourly site stats
const siteStats = await statisticsAPI.stat_hourly_site();
// Get site stats for last 3 days
const start = Date.now() - (3 * 24 * 60 * 60 * 1000);
const stats = await statisticsAPI.stat_hourly_site(start, Date.now());
PHP: stat_hourly_site($start = null, $end = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/hourly.site', $payload);
Fetch hourly user stats
Retrieves hourly statistics for users/clients.
Optional mac: stringOptional client MAC address to filter results
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of hourly user statistics
When statistics retrieval fails
// Get hourly stats for all users
const allUserStats = await statisticsAPI.stat_hourly_user();
// Get stats for specific user over last 2 days
const start = Date.now() - (2 * 24 * 60 * 60 * 1000);
const userStats = await statisticsAPI.stat_hourly_user(
'aa:bb:cc:dd:ee:ff', start, Date.now()
);
PHP: stat_hourly_user($mac = null, $start = null, $end = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/hourly.user', $payload);
Fetch daily stats for a single access point or all access points
Retrieves daily statistics for access points with optional filtering by MAC address.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional mac: stringOptional AP MAC address to filter results
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of daily AP statistics
When statistics retrieval fails
// Get daily stats for all APs
const allApStats = await statisticsAPI.stat_daily_aps();
// Get stats for specific AP over last month
const start = Date.now() - (30 * 24 * 60 * 60 * 1000);
const apStats = await statisticsAPI.stat_daily_aps(
start, Date.now(), 'aa:bb:cc:dd:ee:ff'
);
PHP: stat_daily_aps($start = null, $end = null, $mac = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/daily.ap', $payload);
Fetch daily gateway stats
Retrieves daily statistics for the gateway/router.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of daily gateway statistics
When statistics retrieval fails
// Get daily gateway stats
const gwStats = await statisticsAPI.stat_daily_gateway();
// Get gateway stats for last 2 weeks
const start = Date.now() - (14 * 24 * 60 * 60 * 1000);
const stats = await statisticsAPI.stat_daily_gateway(start, Date.now());
PHP: stat_daily_gateway($start = null, $end = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/daily.gw', $payload);
Fetch daily site stats
Retrieves daily statistics for the entire site.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of daily site statistics
When statistics retrieval fails
// Get daily site stats
const siteStats = await statisticsAPI.stat_daily_site();
// Get site stats for last month
const start = Date.now() - (30 * 24 * 60 * 60 * 1000);
const stats = await statisticsAPI.stat_daily_site(start, Date.now());
PHP: stat_daily_site($start = null, $end = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/daily.site', $payload);
Fetch daily stats for a single user/client device or all user/client devices
Retrieves daily statistics for users/clients with optional filtering by MAC address.
Optional mac: stringOptional client MAC address to filter results
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of daily user statistics
When statistics retrieval fails
// Get daily stats for all users
const allUserStats = await statisticsAPI.stat_daily_user();
// Get stats for specific user over last month
const start = Date.now() - (30 * 24 * 60 * 60 * 1000);
const userStats = await statisticsAPI.stat_daily_user(
'aa:bb:cc:dd:ee:ff', start, Date.now()
);
PHP: stat_daily_user($mac = null, $start = null, $end = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/daily.user', $payload);
Fetch monthly stats for a single access point or all access points
Retrieves monthly statistics for access points with optional filtering by MAC address.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional mac: stringOptional AP MAC address to filter results
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of monthly AP statistics
When statistics retrieval fails
// Get monthly stats for all APs
const allApStats = await statisticsAPI.stat_monthly_aps();
// Get stats for specific AP over last year
const start = Date.now() - (365 * 24 * 60 * 60 * 1000);
const apStats = await statisticsAPI.stat_monthly_aps(
start, Date.now(), 'aa:bb:cc:dd:ee:ff'
);
PHP: stat_monthly_aps($start = null, $end = null, $mac = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/monthly.ap', $payload);
Fetch monthly gateway stats
Retrieves monthly statistics for the gateway/router.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of monthly gateway statistics
When statistics retrieval fails
// Get monthly gateway stats
const gwStats = await statisticsAPI.stat_monthly_gateway();
// Get gateway stats for last 6 months
const start = Date.now() - (6 * 30 * 24 * 60 * 60 * 1000);
const stats = await statisticsAPI.stat_monthly_gateway(start, Date.now());
PHP: stat_monthly_gateway($start = null, $end = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/monthly.gw', $payload);
Fetch monthly site stats
Retrieves monthly statistics for the entire site.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of monthly site statistics
When statistics retrieval fails
// Get monthly site stats
const siteStats = await statisticsAPI.stat_monthly_site();
// Get site stats for last year
const start = Date.now() - (365 * 24 * 60 * 60 * 1000);
const stats = await statisticsAPI.stat_monthly_site(start, Date.now());
PHP: stat_monthly_site($start = null, $end = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/monthly.site', $payload);
Fetch monthly user stats
Retrieves monthly statistics for users/clients with optional filtering by MAC address.
Optional mac: stringOptional client MAC address to filter results
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional attribs: string[]Optional array of specific attributes to retrieve
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of monthly user statistics
When statistics retrieval fails
// Get monthly stats for all users
const allUserStats = await statisticsAPI.stat_monthly_user();
// Get stats for specific user over last year
const start = Date.now() - (365 * 24 * 60 * 60 * 1000);
const userStats = await statisticsAPI.stat_monthly_user(
'aa:bb:cc:dd:ee:ff', start, Date.now()
);
PHP: stat_monthly_user($mac = null, $start = null, $end = null, $attribs = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/monthly.user', $payload);
Fetch all users statistics
Retrieves comprehensive statistics for all users/clients over a specified time period.
Number of hours of history to retrieve (default: 8760 = 1 year)
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of all user statistics
When statistics retrieval fails
// Get all user stats for last month
const monthlyStats = await statisticsAPI.stat_allusers(720); // 30 days
// Get all user stats for last week
const weeklyStats = await statisticsAPI.stat_allusers(168); // 7 days
// Get comprehensive yearly stats
const yearlyStats = await statisticsAPI.stat_allusers(); // Default 1 year
PHP: stat_allusers($historyhours = 8760) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/alluser', $payload);
Fetch details for a single client device
Retrieves detailed statistics and information for a specific client device.
Required MAC address of the client device
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to client device statistics
When MAC address is invalid
When client statistics retrieval fails
// Get detailed stats for specific client
const clientStats = await statisticsAPI.stat_client('aa:bb:cc:dd:ee:ff');
console.log(`Client: ${clientStats.hostname || clientStats.mac}`);
console.log(`Total bytes: ${clientStats.tx_bytes + clientStats.rx_bytes}`);
PHP: stat_client($mac) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/user/' . strtolower(trim($mac)));
Fetch authorization events
Retrieves authentication and authorization events for the site.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of authorization events
When authorization events retrieval fails
// Get recent authorization events
const authEvents = await statisticsAPI.stat_auths();
// Get auth events for specific time range
const start = Date.now() - (24 * 60 * 60 * 1000); // 24 hours ago
const dayAuthEvents = await statisticsAPI.stat_auths(start, Date.now());
PHP: stat_auths($start = null, $end = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/authorization', $payload);
Fetch sessions
Retrieves user session information with optional filtering.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional mac: stringOptional client MAC address to filter sessions
Session type filter: 'all', 'guest', or 'user' (default: 'all')
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of session objects
When sessions retrieval fails
// Get all recent sessions
const allSessions = await statisticsAPI.stat_sessions();
// Get guest sessions only
const guestSessions = await statisticsAPI.stat_sessions(
undefined, undefined, undefined, 'guest'
);
// Get sessions for specific client
const clientSessions = await statisticsAPI.stat_sessions(
undefined, undefined, 'aa:bb:cc:dd:ee:ff'
);
PHP: stat_sessions($start = null, $end = null, $mac = null, $type = 'all') -> return $this->fetch_results('/api/s/' . $this->site . '/stat/session', $payload);
Fetch IPS events
Retrieves Intrusion Prevention System (IPS) security events.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Optional limit: numberOptional maximum number of events to return
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of IPS event objects
When IPS events retrieval fails
// Get recent IPS events
const ipsEvents = await statisticsAPI.stat_ips_events();
// Get IPS events for last 24 hours with limit
const start = Date.now() - (24 * 60 * 60 * 1000);
const recentEvents = await statisticsAPI.stat_ips_events(start, Date.now(), 100);
// Analyze security threats
const events = await statisticsAPI.stat_ips_events();
const threats = events.filter(event => event.severity === 'high');
PHP: stat_ips_events($start = null, $end = null, $limit = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/ips/event', $payload);
Fetch speed test results
Retrieves network speed test results performed by the UniFi system.
Optional start: numberOptional start timestamp (Unix timestamp in milliseconds)
Optional end: numberOptional end timestamp (Unix timestamp in milliseconds)
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of speed test result objects
When speed test results retrieval fails
// Get recent speed test results
const speedTests = await statisticsAPI.stat_speedtest_results();
// Get speed tests for last month
const start = Date.now() - (30 * 24 * 60 * 60 * 1000);
const monthlyTests = await statisticsAPI.stat_speedtest_results(start, Date.now());
// Analyze network performance
const tests = await statisticsAPI.stat_speedtest_results();
const avgDownload = tests.reduce((sum, test) => sum + test.download, 0) / tests.length;
const avgUpload = tests.reduce((sum, test) => sum + test.upload, 0) / tests.length;
PHP: stat_speedtest_results($start = null, $end = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/report/archive.speedtest', $payload);
Fetch payments
Retrieves payment information for guest access or hotspot services.
Optional within: numberOptional time period in hours to retrieve payments for
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of payment objects
When payments retrieval fails
// Get all payments
const allPayments = await statisticsAPI.stat_payment();
// Get payments from last 24 hours
const recentPayments = await statisticsAPI.stat_payment(24);
// Analyze payment trends
const payments = await statisticsAPI.stat_payment(720); // Last 30 days
const totalRevenue = payments.reduce((sum, payment) => sum + payment.amount, 0);
PHP: stat_payment($within = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/payment' . $path_suffix);
Fetch voucher stats
Retrieves statistics about guest access vouchers.
Optional create_time: numberOptional creation time filter (Unix timestamp)
Site name (defaults to 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of voucher statistics
When voucher statistics retrieval fails
// Get all voucher stats
const voucherStats = await statisticsAPI.stat_voucher();
// Get vouchers created after specific time
const recentTime = Date.now() - (7 * 24 * 60 * 60 * 1000); // 7 days ago
const recentVouchers = await statisticsAPI.stat_voucher(recentTime);
// Analyze voucher usage
const vouchers = await statisticsAPI.stat_voucher();
const usedVouchers = vouchers.filter(v => v.used > 0);
const unusedVouchers = vouchers.filter(v => v.used === 0);
PHP: stat_voucher($create_time = null) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/voucher', $payload);
List rogue APs
Retrieves a list of rogue (unauthorized) access points detected within the specified time period. Helps identify potential security threats.
Time period in hours to search for rogue APs (default: 24)
Site identifier (default: 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of rogue access point objects
When rogue AP listing fails
// Get rogue APs from last 24 hours
const rogueAPs = await statisticsAPI.list_rogueaps();
// Get rogue APs from last week
const weeklyRogues = await statisticsAPI.list_rogueaps(168); // 7 days
// Analyze security threats
const rogues = await statisticsAPI.list_rogueaps();
const strongSignalRogues = rogues.filter(ap => ap.signal > -50);
const suspiciousNames = rogues.filter(ap =>
ap.essid && ap.essid.toLowerCase().includes('free')
);
// Check for known rogue APs
const knownRogues = await statisticsAPI.list_known_rogueaps();
const newRogues = rogues.filter(rogue =>
!knownRogues.some(known => known.bssid === rogue.bssid)
);
PHP: list_rogueaps($within = 24) -> return $this->fetch_results('/api/s/' . $this->site . '/stat/rogueap', $payload);
List known rogue APs
Retrieves a list of known (whitelisted) rogue access points that have been marked as safe or authorized. These APs won't trigger security alerts.
Site identifier (default: 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of known rogue access point objects
When known rogue AP listing fails
// Get all known/whitelisted rogue APs
const knownRogues = await statisticsAPI.list_known_rogueaps();
// Check if specific AP is whitelisted
const targetBSSID = 'aa:bb:cc:dd:ee:ff';
const isWhitelisted = knownRogues.some(ap => ap.bssid === targetBSSID);
// Review whitelisted APs
console.log(`${knownRogues.length} APs are whitelisted`);
knownRogues.forEach(ap => {
console.log(`${ap.essid} (${ap.bssid}) - ${ap.note || 'No note'}`);
});
PHP: list_known_rogueaps() -> return $this->fetch_results('/api/s/' . $this->site . '/rest/rogueknown');
Execute command statistics
Executes specific system commands for statistics management. Currently supports DPI (Deep Packet Inspection) reset operations.
Required Command to execute (currently only 'reset-dpi' is supported)
Site identifier (default: 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to true if command execution was successful
When command is invalid or not supported
When command execution fails
// Reset DPI statistics
await statisticsAPI.cmd_stat('reset-dpi');
// This will clear all DPI data and start fresh collection
This command will reset DPI statistics permanently
PHP: cmd_stat($command) -> return $this->fetch_results_boolean('/api/s/' . $this->site . '/cmd/stat', $payload);
Get system log
Retrieves system log entries from the UniFi Controller. Provides access to system events, errors, and operational messages.
Site identifier (default: 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to array of system log entries
When system log retrieval fails
// Get system logs
const logs = await statisticsAPI.get_system_log();
// Filter error messages
const errors = logs.filter(log =>
log.level === 'error' || log.msg.toLowerCase().includes('error')
);
// Find recent critical events
const recentCritical = logs.filter(log =>
log.level === 'critical' &&
Date.now() - log.datetime < (24 * 60 * 60 * 1000) // Last 24 hours
);
// Monitor device events
const deviceEvents = logs.filter(log =>
log.msg.includes('device') || log.msg.includes('AP')
);
PHP: get_system_log() -> return $this->fetch_results('/api/s/' . $this->site . '/stat/log');
Stat status
Retrieves comprehensive status information for the UniFi site including device states, network health, and system performance metrics.
Site identifier (default: 'default')
Optional options: { Optional request configuration
Optional signal?: AbortSignalOptional AbortSignal to cancel the request
Promise resolving to system status information
When status retrieval fails
// Get comprehensive system status
const status = await statisticsAPI.stat_status();
console.log(`Controller version: ${status.version}`);
console.log(`Uptime: ${status.uptime} seconds`);
// Check for issues
if (status.num_disconnected > 0) {
console.log(`${status.num_disconnected} devices are disconnected`);
}
// Monitor performance
console.log(`Memory usage: ${status.mem_used}/${status.mem_total} MB`);
console.log(`CPU load: ${status.loadavg_1}%`);
PHP: stat_status() -> return $this->fetch_results('/api/s/' . $this->site . '/stat/status');
Archive alarms
Archives (dismisses) alarms in the UniFi Controller. Can archive a specific alarm by ID or archive all current alarms.