UniFi Network API Documentation (v11.0.97)
Overview
This document provides comprehensive reference documentation for the UniFi Network API version 11.0.97. Each UniFi Application has its own API endpoints running locally on each site, offering detailed analytics and control related to that specific application. For a single endpoint with high-level insights across all your UniFi sites, refer to the UniFi Site Manager API.Operator usage
Objective
Treat this as the source of truth for Network API shape when verifying endpoint coverage, creating mocks, or checking drift against implementation.Prerequisites
- You know the controller type and the applicable API base path.
- You know whether you are validating a read path, write path, or model/schema change.
- You have the current roadmap and phase docs available for cross-checking.
Procedure
- Use the table of contents to find the domain you are changing.
- Confirm the version history before assuming schema or field stability.
- Check the roadmap alignment note to see whether the behavior is implemented or planned.
- Use the relevant endpoint details to build tests, runbooks, or operational checks.
Verification
- The endpoint surface in this doc matches the code and fixtures.
- New fields or schemas are reflected in tests and runbooks.
- The doc does not describe future phase work as already shipped.
Rollback
- If drift is detected, revert the doc claim to the last known-good surface and log the discrepancy for the next phase update.
Common failure modes
- Copying upstream API details without checking whether the repo supports them yet.
- Missing a schema drift when the version history changes.
- Using this reference without checking the phase-specific runbooks for operator procedure.
Table of Contents
- Getting Started
- Example Prompts for MCP Interaction
- Filtering
- Error Handling
- Application Info
- Sites
- UniFi Devices
- Clients
- Networks
- WiFi Broadcasts
- Hotspot
- RADIUS & Guest Portal
- Firewall
- Firewall Policies
- Access Control (ACL Rules)
- Switching
- DNS Policies
- Traffic Matching Lists
- Quality of Service (QoS)
- Backup and Restore
- Site Manager API
- Supporting Resources
- Version History
Version History
v11.0.97 (October 2026)
Verified against the canonical OpenAPI spec snapshot (scripts/scraped-api-spec-v11.0.97.json, audit 2026-10-27). Endpoint count unchanged (73 total, 44 paths) — the Integration API surface has been stable since v10.3.55; all 73 operations confirmed covered by this document. Two optional fields were added to the live spec: reportFlowEnabled (boolean) on the firewall-policy create/read/patch schemas, and a DISABLED enum value on the read-only Wireless radio overview schema’s txPowerMode field. Neither reaches this server’s current implementation: firewall policy CRUD and AP radio configuration both call the v2 local API / legacy rest/device endpoints rather than the public Integration API paths these fields belong to (/v1/sites/{siteId}/firewall/policies/*), per the existing architecture documented in DEVELOPMENT_PLAN.md §2.1. Recorded as a documented, not-yet-implemented capability rather than acted on, since confirming the v2/legacy endpoints’ own field support needs a live controller. Also reconfirmed Protect unchanged at v7.3.70 against the pinned v7.3.68 snapshot (same 74 operations, 55 paths, 302 schemas, zero property changes). See DEVELOPMENT_PLAN.md §2.3 for the full audit findings.
v10.6.106 (September 2026)
Verified against the canonical OpenAPI spec snapshot (scripts/scraped-api-spec-v10.6.106.json, audit 2026-09-26). Endpoint count unchanged (73 total, 44 paths) — the Integration API surface has been stable since v10.3.55; all 73 operations confirmed covered by this document. Cleanup: embedded v10.1.68 example payloads and reference links updated to v10.6.106. See DEVELOPMENT_PLAN.md §2.3 for the full audit findings.
v10.3.55 (April 2026)
Updated from OpenAPI spec extracted from UniFi Network 10.3.55. Endpoint count unchanged (73 total). Key schema changes: Added- DNS Assistance Configuration — New WiFi broadcast field
dnsAssistanceConfigurationsupportingAUTOandMANUALmodes. Manual mode allows specifying up to 2 failover DNS servers. - Local LAG — New LAG type
LOCALadded alongside existingSWITCH_STACKandMULTI_CHASSIStypes. Represented byIntegrationLocalLagGlobalDtoandIntegrationLocalLagLocalDtoschemas. - IntegrationLagMemberDto — New unified LAG member schema replacing the removed abstract hierarchy.
- WiFi Broadcasts —
IntegrationStandardWifiBroadcastCreateUpdateDtoandIntegrationStandardWifiBroadcastDetailDtonow includednsAssistanceConfiguration. - Open Security Configuration —
IntegrationWifiOpenSecurityConfigurationDetailDtogained anencryptionenum field supportingENHANCED_OPENandENHANCED_OPEN_WITH_TRANSITION. - LAG Details — Discriminator now includes
LOCALmapping. - Switching Feature Overview — Renamed from
Switch feature overview.
AbstractIntegrationLagMemberDto(replaced byIntegrationLagMemberDto)IntegrationMcLagMemberDto(replaced by unified member schema)IntegrationSwitchStackLagMemberDto(replaced by unified member schema)
v10.2.105 (Prior)
Previous baseline. Added Switching section (Switch Stacks, MC-LAG Domains, LAGs), WiFi broadcast parity, and firewall zone/policy endpoints.Roadmap alignment
This reference currently covers the Network API surface (verified against v10.6.106) plus the Phase 3 Protect read surfaces (cameras, NVRs, devices, views, and events) at their v6-era versions. The Protect v7.3.68 additions are documented below as a planned, not-yet-implemented surface. The broader product roadmap still adds Mobility, InnerSpace, and Carrier Fabric coverage (Phase 6), multi-controller orchestration, dry-run controls, metrics, audit logging, and webhook/event-bus documentation in separate phase-specific docs. Access remains blocked upstream (no official spec published as of 2026-09-26).Getting Started
Introduction
Each UniFi Application has its own API endpoints running locally on each site, offering detailed analytics and control related to that specific application. For a single endpoint with high-level insights across all your UniFi sites, refer to the UniFi Site Manager API.Authentication and Request Format
An API Key is a unique identifier used to authenticate API requests. To generate API Keys and view an example of the API Request Format, visit the Integrations section of your UniFi application. Authentication Header:Base URL
All API endpoints are relative to your UniFi controller: Integration API (Recommended):Example Prompts for MCP Interaction
When using an AI assistant with the UniFi MCP Server, you can use natural language prompts to accomplish complex network management tasks. Here are example prompts organized by category:Network Discovery & Monitoring
QoS & Traffic Management
Firewall & Security
WiFi & Guest Access
Network Configuration
RADIUS & Guest Portal
Site Management & Health
Backups & Recovery
Advanced Workflows
Troubleshooting & Diagnostics
Batch Operations
Best Practices for Effective Prompts
- Be Specific: Include exact values (IP addresses, port numbers, VLAN IDs)
- Use Context: Reference existing configurations (“the Guest WiFi”, “my main switch”)
- Request Confirmation: Ask the AI to explain changes before applying them
- Combine Operations: Chain related tasks in a single conversational flow
- Ask for Validation: Request health checks or impact analysis before major changes
- Leverage Dry-Run: Ask the AI to show what would happen without actually making changes
Filtering
Explains how to use the filter query parameter for advanced querying across list endpoints. SomeGET and DELETE endpoints support filtering using the filter query parameter. Each endpoint supporting filtering will have a detailed list of filterable properties, their types, and allowed functions.
Filtering Syntax
Filtering follows a structured, URL-safe syntax with three types of expressions.1. Property Expressions
Apply functions to an individual property using the form<property>.<function>(<arguments>), where argument values are separated by commas.
Examples:
id.eq(123)- checks ifidis equal to123name.isNotNull()- checks ifnameis not nullcreatedAt.in(2025-01-01, 2025-01-05)- checks ifcreatedAtis either2025-01-01or2025-01-05
2. Compound Expressions
Combine two or more expressions with logical operators using the form<logical-operator>(<expressions>), where expressions are separated by commas.
Examples:
and(name.isNull(), createdAt.gt(2025-01-01))- checks ifnameis null andcreatedAtis greater than2025-01-01or(name.isNull(), expired.isNull(), expiresAt.isNull())- checks if any ofname,expired, orexpiresAtis null
3. Negation Expressions
Negate any other expressions using the formnot(<expression>).
Example:
not(name.like('guest*'))- matches all values except those that start withguest
Filterable Property Types
Filtering Functions
Pattern Matching (like Function)
.matches any single character. Example:type.like('type.')matchestype1, but nottype100*matches any number of characters. Example:name.like('guest*')matchesguest1andguest100\is used to escape.and*
Error Handling
Describes the standard API error response structure.Error Message Schema
Example Response:
Application Info
Returns general details about the UniFi Network application.Get Application Info
Retrieve general information about the UniFi Network application.- Method:
GET - Endpoint:
/v1/info - Response:
200 OK
Sites
Endpoints for listing and managing UniFi sites. Site ID is required for most other API requests.List Local Sites
Retrieve a paginated list of local sites managed by this Network application.- Method:
GET - Endpoint:
/v1/sites
Response:
200 OK
UniFi Devices
Endpoints to list, inspect, and interact with UniFi devices.List Devices Pending Adoption
- Method:
GET - Endpoint:
/v1/pending-devices
Response:
200 OK
List Adopted Devices
Retrieve a paginated list of all adopted devices on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/devices
Query Parameters:
Response:
200 OK
Adopt Device
Adopt a device to a site.- Method:
POST - Endpoint:
/v1/sites/{siteId}/devices
Request Body:
Example Request:
200 OK
Returns device details including IDs, MAC/IP, firmware, features, and interface lists.
Get Adopted Device Details
Retrieve detailed information about a specific adopted device.- Method:
GET - Endpoint:
/v1/sites/{siteId}/devices/{deviceId}
Response:
200 OK
Response Fields:
id,macAddress,ipAddress,name,model,supported,statefirmwareVersion,firmwareUpdatableadoptedAt,provisionedAtconfigurationId,uplink.deviceIdfeatures.switching,features.accessPointinterfaces.ports[...],interfaces.radios[...]
Get Latest Adopted Device Statistics
Retrieve real-time statistics including uptime, CPU, memory utilization.- Method:
GET - Endpoint:
/v1/sites/{siteId}/devices/{deviceId}/statistics/latest
200 OK
Execute Adopted Device Action
Perform an action on a specific adopted device.- Method:
POST - Endpoint:
/v1/sites/{siteId}/devices/{deviceId}/actions
Request Body:
Response:
200 OK
Execute Port Action
Perform an action on a specific device port.- Method:
POST - Endpoint:
/v1/sites/{siteId}/devices/{deviceId}/interfaces/ports/{portIdx}/actions
Request Body:
Response:
200 OK
Remove (Unadopt) Device
Removes (unadopts) an adopted device from the site. If the device is online, it will be reset to factory defaults.- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/devices/{deviceId}
Response:
200 OK
Device Migration (legacy commands)
Local gateway only. Both commands key on the device MAC and are sent to the site the device is in now. Move to another site on this controller- Method:
POST - Endpoint:
/api/s/{site}/cmd/sitemgr - Body:
{"cmd": "move-device", "site": "<target site _id>", "mac": "<mac>"} - MCP Tool:
move_device_to_site() siteis the target site’s 24-hex_id, which only the legacy/api/self/siteslisting returns. The tool resolves it from a short name, UI description, or_id.
- Method:
POST - Endpoint:
/api/s/{site}/cmd/devmgr - Body:
{"cmd": "migrate", "mac": "<mac>", "inform_url": "http://<host>:8080/inform"};{"cmd": "cancel-migrate", "mac": "<mac>"}aborts - MCP Tools:
migrate_device(),cancel_device_migration() - After
migratethe device appears on the new controller as pending adoption.
Clients
Endpoints for viewing and managing connected clients (wired, wireless, VPN, and guest).List Connected Clients
- Method:
GET - Endpoint:
/v1/sites/{siteId}/clients
Query Parameters:
Response:
200 OK
Get Connected Client Details
- Method:
GET - Endpoint:
/v1/sites/{siteId}/clients/{clientId}
Response:
200 OK
Response Fields:
type– one ofWIRED,WIRELESS,VPN,TELEPORTid,name,connectedAtipAddress,macAddressaccess.typeuplinkDeviceId
Execute Client Action
Perform an action on a specific connected client.- Method:
POST - Endpoint:
/v1/sites/{siteId}/clients/{clientId}/actions
Response:
200 OK
Networks
Endpoints for creating, updating, deleting, and inspecting network configurations including VLANs, DHCP, NAT, and IPv4/IPv6 settings.API Limitations (verified 2026-04-13):
- The v1 Network API only exposes
management,name,enabled,vlanId, anddhcpGuarding. DHCP range, subnet, purpose, and isolation settings are NOT available through the v1 API.- The legacy REST API (
/rest/networkconf) exposes more fields (DHCP, subnet, purpose) butpurposeis immutable after creation.- Network-level client isolation (“Isolate Network” in the UI) is not available through any documented API. Use
clientIsolationEnabledon WiFi Broadcasts for SSID-level isolation instead.- The legacy REST API uses
"vlan"(not"vlan_id") for the VLAN number field.
List Networks
- Method:
GET - Endpoint:
/v1/sites/{siteId}/networks
Query Parameters:
Response:
200 OK
Create Network
- Method:
POST - Endpoint:
/v1/sites/{siteId}/networks - Response:
201 Created
Get Network Details
- Method:
GET - Endpoint:
/v1/sites/{siteId}/networks/{networkId}
200 OK
Response Fields:
management–UNMANAGED,GATEWAY, orSWITCHid,name,enabledvlanId(2–4000)metadata.origindhcpGuarding.trustedDhcpServerIpAddresses[...]
Update Network
- Method:
PUT - Endpoint:
/v1/sites/{siteId}/networks/{networkId}
Response:
200 OK
Delete Network
- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/networks/{networkId}
Response:
200 OK
Get Network References
- Method:
GET - Endpoint:
/v1/sites/{siteId}/networks/{networkId}/references
200 OK
WiFi Broadcasts
Endpoints to create, update, or remove WiFi networks (SSIDs). Supports configuration of security, band steering, multicast filtering, and captive portals.List Wifi Broadcasts
- Method:
GET - Endpoint:
/v1/sites/{siteId}/wifi/broadcasts
Query Parameters:
Response:
200 OK
Create Wifi Broadcast
- Method:
POST - Endpoint:
/v1/sites/{siteId}/wifi/broadcasts - Response:
201 Created
Get Wifi Broadcast Details
- Method:
GET - Endpoint:
/v1/sites/{siteId}/wifi/broadcasts/{wifiBroadcastId}
200 OK
Response Fields:
type–STANDARDorIOT_OPTIMIZEDid,name,enabledmetadata.originnetwork.typesecurityConfiguration.type,securityConfiguration.radiusConfigurationbroadcastingDeviceFilter.typemdnsProxyConfiguration.modemulticastFilteringPolicy.actionmulticastToUnicastConversionEnabledclientIsolationEnabledhideName,uapsdEnabledbasicDataRateKbpsByFrequencyGHzclientFilteringPolicy.action,clientFilteringPolicy.macAddressFilter[...]blackoutScheduleConfiguration.days[...]broadcastingFrequenciesGHzhotspotConfiguration.typemloEnabled,bandSteeringEnabled,arpProxyEnabled,bssTransitionEnabled,advertiseDeviceNamedtimPeriodByFrequencyGHzOverridednsAssistanceConfiguration.mode,dnsAssistanceConfiguration.servers
Update Wifi Broadcast
- Method:
PUT - Endpoint:
/v1/sites/{siteId}/wifi/broadcasts/{wifiBroadcastId}
200 OK
Delete Wifi Broadcast
- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/wifi/broadcasts/{wifiBroadcastId}
Response:
200 OK
Hotspot
Endpoints for managing guest access via Hotspot vouchers.List Vouchers
- Method:
GET - Endpoint:
/v1/sites/{siteId}/hotspot/vouchers
Response:
200 OK
Generate Vouchers
Create one or more Hotspot vouchers.- Method:
POST - Endpoint:
/v1/sites/{siteId}/hotspot/vouchers - Response:
201 Created
Delete Vouchers
Remove Hotspot vouchers based on the specified filter criteria.- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/hotspot/vouchers
Response:
200 OK
Get Voucher Details
Retrieve details of a specific Hotspot voucher.- Method:
GET - Endpoint:
/v1/sites/{siteId}/hotspot/vouchers/{voucherId}
Delete Voucher
Remove a specific Hotspot voucher.- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/hotspot/vouchers/{voucherId}
200 OK
RADIUS & Guest Portal
Endpoints for managing RADIUS authentication profiles, guest portal configuration, and hotspot packages.RADIUS Profile Management
List RADIUS Profiles
List all RADIUS authentication profiles for a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/radius/profiles - Response:
200 OK
Get RADIUS Profile
Retrieve a specific RADIUS profile.- Method:
GET - Endpoint:
/v1/sites/{siteId}/radius/profiles/{profileId} - Response:
200 OK
Create RADIUS Profile
Create a new RADIUS authentication profile for WPA2-Enterprise.- Method:
POST - Endpoint:
/v1/sites/{siteId}/radius/profiles - Response:
201 Created - Requires Confirmation:
confirm=true
Example Request:
Update RADIUS Profile
Modify an existing RADIUS profile.- Method:
PATCH - Endpoint:
/v1/sites/{siteId}/radius/profiles/{profileId} - Response:
200 OK - Requires Confirmation:
confirm=true
Delete RADIUS Profile
Remove a RADIUS profile.- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/radius/profiles/{profileId} - Response:
200 OK - Requires Confirmation:
confirm=true
RADIUS Account Management
List RADIUS Accounts
List all RADIUS user accounts (passwords redacted).- Method:
GET - Endpoint:
/v1/sites/{siteId}/radius/accounts - Response:
200 OK
Create RADIUS Account
Create a new RADIUS user account for guest access.- Method:
POST - Endpoint:
/v1/sites/{siteId}/radius/accounts - Response:
201 Created - Requires Confirmation:
confirm=true
Delete RADIUS Account
Remove a RADIUS user account.- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/radius/accounts/{accountId} - Response:
200 OK - Requires Confirmation:
confirm=true
Guest Portal Configuration
Get Guest Portal Config
Retrieve the current guest portal configuration.- Method:
GET - Endpoint:
/v1/sites/{siteId}/guest-portal/config - Response:
200 OK
Configure Guest Portal
Customize guest portal settings.- Method:
PATCH - Endpoint:
/v1/sites/{siteId}/guest-portal/config - Response:
200 OK - Requires Confirmation:
confirm=true
Hotspot Package Management
List Hotspot Packages
List all available hotspot packages with time and bandwidth limits.- Method:
GET - Endpoint:
/v1/sites/{siteId}/hotspot/packages - Response:
200 OK
Create Hotspot Package
Create a new hotspot package with pricing.- Method:
POST - Endpoint:
/v1/sites/{siteId}/hotspot/packages - Response:
201 Created - Requires Confirmation:
confirm=true
Example Request:
Delete Hotspot Package
Remove a hotspot package.- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/hotspot/packages/{packageId} - Response:
200 OK - Requires Confirmation:
confirm=true
Firewall
Endpoints for managing custom firewall zones within a site.List Firewall Zones
Retrieve a list of all firewall zones on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/firewall/zones
Response:
200 OK
Create Custom Firewall Zone
Create a new custom firewall zone on a site.- Method:
POST - Endpoint:
/v1/sites/{siteId}/firewall/zones - Response:
201 Created
Example Request:
Get Firewall Zone
Get a firewall zone on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/firewall/zones/{firewallZoneId}
Update Firewall Zone
Update a firewall zone on a site.- Method:
PUT - Endpoint:
/v1/sites/{siteId}/firewall/zones/{firewallZoneId}
Response:
200 OK
Delete Custom Firewall Zone
- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/firewall/zones/{firewallZoneId}
200 OK
Firewall Policies
Endpoints for managing firewall policies within a site. Define or update network segmentation and security boundaries.List Firewall Policies
Retrieve a list of all firewall policies on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/firewall/policies
Query Parameters:
Response:
200 OK
Create Firewall Policy
Create a new firewall policy on a site.- Method:
POST - Endpoint:
/v1/sites/{siteId}/firewall/policies - Response:
201 Created
Response: Returns created policy with all fields including
id, index, and metadata.
Get Firewall Policy
Retrieve specific firewall policy.- Method:
GET - Endpoint:
/v1/sites/{siteId}/firewall/policies/{firewallPolicyId}
Response:
200 OK
Response Fields:
id,enabled,name,description,indexaction.typesource.firewallZoneId,source.trafficFilterdestination.firewallZoneId,destination.trafficFilteripProtocolScope.ipVersionconnectionStateFilter(array:NEW,INVALID,ESTABLISHED,RELATED)ipsecFilter(MATCH_ENCRYPTED,MATCH_NOT_ENCRYPTED)loggingEnabledschedule.modemetadata.origin
Update Firewall Policy
Update an existing firewall policy on a site.- Method:
PUT - Endpoint:
/v1/sites/{siteId}/firewall/policies/{firewallPolicyId}
200 OK
Patch Firewall Policy
Patch an existing firewall policy on a site.- Method:
PATCH - Endpoint:
/v1/sites/{siteId}/firewall/policies/{firewallPolicyId}
Request Body:
Partial policy object with only the fields to update.
Example Request:
200 OK
Delete Firewall Policy
Delete an existing firewall policy on a site.- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/firewall/policies/{firewallPolicyId}
Response:
200 OK
Get User-Defined Firewall Policy Ordering
Retrieve user-defined firewall policy ordering for a specific source/destination zone pair.- Method:
GET - Endpoint:
/v1/sites/{siteId}/firewall/policies/ordering
Query Parameters:
Response:
200 OK
Reorder User-Defined Firewall Policies
Reorder user-defined firewall policies for a specific source/destination zone pair.- Method:
PUT - Endpoint:
/v1/sites/{siteId}/firewall/policies/ordering
Query Parameters:
Request Body:
Example Request:
200 OK
Access Control (ACL Rules)
Endpoints for creating, listing, and managing ACL rules that enforce traffic filtering across devices and networks.List ACL Rules
Retrieve a paginated list of all ACL rules on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/acl-rules
Response:
200 OK
Create ACL Rule
Create a new user defined ACL rule.- Method:
POST - Endpoint:
/v1/sites/{siteId}/acl-rules - Response:
201 Created
Get ACL Rule
- Method:
GET - Endpoint:
/v1/sites/{siteId}/acl-rules/{aclRuleId}
Update ACL Rule
Update an existing user defined ACL rule.- Method:
PUT - Endpoint:
/v1/sites/{siteId}/acl-rules/{aclRuleId}
200 OK
Delete ACL Rule
- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/acl-rules/{aclRuleId}
200 OK
Get User-Defined ACL Rule Ordering
Retrieve user-defined ACL rule ordering on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/acl-rules/ordering
Response:
200 OK
Reorder User-Defined ACL Rules
Reorder user-defined ACL rules on a site.- Method:
PUT - Endpoint:
/v1/sites/{siteId}/acl-rules/ordering
Request Body:
Example Request:
200 OK
Switching
Endpoints for managing switching features like Switch Stacking, MC-LAG Domains, and LAG (Link Aggregation Groups). The switching feature overview schema was renamed fromSwitch feature overview to Switching feature overview in v10.3.55.
List Switch Stacks
Retrieve a paginated list of all Switch Stacks on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/switching/switch-stacks
Query Parameters:
Response:
200 OK — paginated list
Get Switch Stack
Retrieve Switch Stack details.- Method:
GET - Endpoint:
/v1/sites/{siteId}/switching/switch-stacks/{switchStackId}
Response:
200 OK
List MC-LAG Domains
Retrieve a paginated list of all MC-LAG Domains on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/switching/mc-lag-domains
Query Parameters:
Response:
200 OK — paginated list
Get MC-LAG Domain
Retrieve MC-LAG Domain details.- Method:
GET - Endpoint:
/v1/sites/{siteId}/switching/mc-lag-domains/{mcLagDomainId}
Response:
200 OK
List LAGs
Retrieve a paginated list of all LAGs (Link Aggregation Groups) on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/switching/lags
Query Parameters:
Response:
200 OK — paginated list
Get LAG Details
Retrieve LAG details.- Method:
GET - Endpoint:
/v1/sites/{siteId}/switching/lags/{lagId}
Response:
200 OK
Member Schema: LAG members use the unified
IntegrationLagMemberDto schema (replaced AbstractIntegrationLagMemberDto and its subclasses in v10.3.55). Each member requires deviceId (UUID) and portIdxs (array of port indices).
DNS Policies
Endpoints for managing DNS Policies within a site. Supports A, AAAA, CNAME, MX, TXT, SRV records, and domain forwarding.List DNS Policies
Retrieve a paginated list of all DNS policies on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/dns/policies
Query Parameters:
Response:
200 OK
Create DNS Policy
Create a new DNS policy on a site.- Method:
POST - Endpoint:
/v1/sites/{siteId}/dns/policies - Response:
201 Created
Supported Types:
A_RECORD, AAAA_RECORD, CNAME_RECORD, MX_RECORD, TXT_RECORD, SRV_RECORD, FORWARD_DOMAIN
Example Request (A_RECORD):
id.
Get DNS Policy
Retrieve specific DNS policy.- Method:
GET - Endpoint:
/v1/sites/{siteId}/dns/policies/{dnsPolicyId}
Response:
200 OK
Example Response (A_RECORD):
Update DNS Policy
Update an existing DNS policy on a site.- Method:
PUT - Endpoint:
/v1/sites/{siteId}/dns/policies/{dnsPolicyId}
Request Body: Same schema as Create DNS Policy for the appropriate record type.
Response:
200 OK
Delete DNS Policy
Delete an existing DNS policy on a site.- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/dns/policies/{dnsPolicyId}
Response:
200 OK
Traffic Matching Lists
Endpoints for managing port and IP address lists used across firewall policy configurations.List Traffic Matching Lists ✅
Retrieve all traffic matching lists on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/traffic-matching-lists - MCP Tool:
list_traffic_matching_lists() - Implementation: Batch 1 (92.47% coverage)
Response:
200 OK
Create Traffic Matching List ✅
Create a new traffic matching list on a site.- Method:
POST - Endpoint:
/v1/sites/{siteId}/traffic-matching-lists - MCP Tool:
create_traffic_matching_list() - Implementation: Batch 1 (92.47% coverage)
- Response:
201 Created
Item shape (issue #282). Each entry is an object carrying a
type
discriminator, not a bare string — the API rejects a string with “Missing
$.items[0].type value”. The MCP tools accept plain values ("80",
"192.168.3.0/24") and map them onto the right object for the list type,
or accept the objects directly:
Get Traffic Matching List ✅
Get an existing traffic matching list on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/traffic-matching-lists/{trafficMatchingListId} - MCP Tool:
get_traffic_matching_list() - Implementation: Batch 1 (92.47% coverage)
Example Response (PORTS type):
Update Traffic Matching List ✅
- Method:
PUT - Endpoint:
/v1/sites/{siteId}/traffic-matching-lists/{trafficMatchingListId} - MCP Tool:
update_traffic_matching_list() - Implementation: Batch 1 (92.47% coverage)
Response:
200 OK
Delete Traffic Matching List ✅
- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/traffic-matching-lists/{trafficMatchingListId} - MCP Tool:
delete_traffic_matching_list() - Implementation: Batch 1 (92.47% coverage)
200 OK
Quality of Service (QoS)
Manage Quality of Service profiles, ProAV (Professional Audio/Video) protocols, Smart Queue Management (bufferbloat mitigation), and policy-based traffic routing rules.Overview
UniFi’s QoS system provides comprehensive traffic prioritization and shaping capabilities:- QoS Profiles: Define traffic priority levels (0-7) with DSCP marking (0-63) for bandwidth guarantees
- ProAV Protocols: Pre-configured templates for professional audio/video standards (Dante, Q-SYS, SDVoE, AVB, RAVENNA, NDI, SMPTE 2110)
- Smart Queue Management (SQM): Bufferbloat mitigation using fq_codel on the WAN
- Traffic Routes: Policy-based routing rules with match criteria (IP, port, protocol, VLAN) and actions (allow, deny, mark, shape)
- Use priority levels 5-7 for real-time traffic (voice, video conferencing)
- Apply DSCP marking EF (46) for voice, AF41 (34) for high-quality video
- Enable SQM on WAN interfaces under 300 Mbps for best bufferbloat mitigation
- Use reference profiles (voice-first, video-conferencing, cloud-gaming) as starting points
- Test QoS rules during peak hours to validate bandwidth guarantees
List QoS Profiles ✅
Retrieve all QoS profiles configured for traffic prioritization and bandwidth shaping.- Method:
GET - Endpoint:
/v1/sites/{siteId}/qos/profiles - MCP Tool:
list_qos_profiles() - Implementation: v0.2.0 Phase 3 (82% coverage)
Response:
200 OK
Get QoS Profile ✅
Retrieve detailed information about a specific QoS profile.- Method:
GET - Endpoint:
/v1/sites/{siteId}/qos/profiles/{profileId} - MCP Tool:
get_qos_profile() - Implementation: v0.2.0 Phase 3 (82% coverage)
200 OK
Create QoS Profile ✅
Create a new QoS profile with comprehensive traffic shaping configuration.- Method:
POST - Endpoint:
/v1/sites/{siteId}/qos/profiles - MCP Tool:
create_qos_profile() - Implementation: v0.2.0 Phase 3 (82% coverage)
- Requires:
confirm=true - Supports:
dry_run=true
Example Request:
201 Created
Update QoS Profile ✅
Update an existing QoS profile’s configuration.- Method:
PATCH - Endpoint:
/v1/sites/{siteId}/qos/profiles/{profileId} - MCP Tool:
update_qos_profile() - Implementation: v0.2.0 Phase 3 (82% coverage)
- Requires:
confirm=true - Supports:
dry_run=true
200 OK
Delete QoS Profile ✅
Delete a QoS profile from the site.- Method:
DELETE - Endpoint:
/v1/sites/{siteId}/qos/profiles/{profileId} - MCP Tool:
delete_qos_profile() - Implementation: v0.2.0 Phase 3 (82% coverage)
- Requires:
confirm=true
200 OK
List ProAV Templates ✅
List available Professional Audio/Video protocol templates and reference QoS profiles.- Method:
GET - Endpoint:
/v1/sites/{siteId}/qos/proav/templates - MCP Tool:
list_proav_templates() - Implementation: v0.2.0 Phase 3 (82% coverage)
200 OK
- dante: Audinate Dante (100 Mbps, 5ms latency, DSCP 46)
- q-sys: Q-SYS by QSC (50 Mbps, 10ms latency, DSCP 34)
- sdvoe: SDVoE (10 Gbps, 100µs latency, DSCP 46)
- avb: Audio Video Bridging (100 Mbps, 2ms latency, DSCP 46)
- ravenna: RAVENNA (100 Mbps, 1ms latency, DSCP 46)
- ndi: NDI (Network Device Interface) (100 Mbps, 16ms latency, DSCP 34)
- smpte-2110: SMPTE 2110 (10 Gbps, 1ms latency, DSCP 46)
- voice-first: Voice-optimized (128 Kbps guaranteed, DSCP 46)
- video-conferencing: Balanced video conferencing (5 Mbps guaranteed, DSCP 34)
- cloud-gaming: Low-latency gaming (10 Mbps guaranteed, DSCP 28)
- streaming-media: High-bandwidth streaming (25 Mbps guaranteed, DSCP 26)
- bulk-backup: Bulk data transfer (no guarantee, DSCP 8)
- guest-best-effort: Guest network (throttled to 10 Mbps, DSCP 0)
Create ProAV Profile ✅
Create a QoS profile from a ProAV or reference template with optional customizations.- Method:
POST - Endpoint:
/v1/sites/{siteId}/qos/proav/profiles - MCP Tool:
create_proav_profile() - Implementation: v0.2.0 Phase 3 (82% coverage)
- Requires:
confirm=true
Example Request:
201 Created
Validate ProAV Profile ✅
Validate that network infrastructure meets ProAV protocol requirements.- Method:
POST - Endpoint:
/v1/sites/{siteId}/qos/proav/validate - MCP Tool:
validate_proav_profile() - Implementation: v0.2.0 Phase 3 (82% coverage)
Response:
200 OK
Smart Queues (WAN fq_codel)
Smart Queues are not a separate API resource. They are three fields on the WAN network record served by the Local API’srest/networkconf collection:
Units: the controller stores both rates in kbps, even though the UniFi UI
displays them in Mbps. The MCP tools take and return Mbps and convert on
both read and write. Writing a Mbps-scale value straight to the field shapes the
line to about a thousandth of the intended rate (verified live: writing
840
capped a ~940 Mbps line at 0.84 Mbps).
WAN selection: both tools accept an optional wan_network_id (the WAN
record’s _id). If it is omitted, they use the first networkconf record with
purpose: "wan".
Get Smart Queue Status ✅
Read the Smart Queue configuration of a WAN.- Method:
GET - Endpoint:
/api/s/{site}/rest/networkconf(filtered topurpose: "wan") - MCP Tool:
get_smart_queue_status(site_id, wan_network_id=None)
download_mbps and upload_mbps are null if the controller has no rate
stored.
Configure Smart Queue ✅
Enable, retune, or disable Smart Queues on a WAN.- Method:
PUT - Endpoint:
/api/s/{site}/rest/networkconf/{networkId} - MCP Tool:
configure_smart_queue(site_id, enabled=True, download_mbps=None, upload_mbps=None, wan_network_id=None, confirm=False, dry_run=False) - Requires:
confirm=true - Supports:
dry_run=true
To disable, call with
enabled=false; the rates can be omitted.
Request Body sent to the controller (for download_mbps=900, upload_mbps=40):
get_smart_queue_status. The values are read
back from the controller after the write, so they show what was stored rather
than what was requested. With dry_run=true, the tool returns
{"dry_run": true, "wan_network_id": ..., "payload": {...}} and sends nothing.
Warning: Applying the change reprovisions the gateway, which can briefly
interrupt WAN traffic.
Performance Note: Smart Queues work best on connections below ~300 Mbps.
Above that, gateway CPU overhead may limit throughput.
List Traffic Routes ✅
List UniFi Traffic Routes (policy-based routing rules, e.g. sending selected clients or domains through a VPN client network).- Method:
GET - Endpoint:
/proxy/network/v2/api/site/{site}/trafficroutes(local gateway only) - MCP Tool:
list_traffic_routes(site_id, limit=100, offset=0) - Note: Earlier versions read
/api/s/{site}/rest/routing, which serves static routes, so this tool always returned[](issue #171). An unexpected response shape now raises an error instead of being reported as an empty list.
200 OK, a bare JSON array (keys verbatim, values illustrative)
matching_target is one of INTERNET, DOMAIN, IP or REGION; the matching domains, ip_addresses, ip_ranges or regions list holds the criteria. network_id is the interface traffic egresses through.
Create / Update / Delete Traffic Route ❌ (removed)
create_traffic_route, update_traffic_route and delete_traffic_route were removed (issue #171). They posted a document (action, match_criteria, dscp_marking, priority, …) matching no UniFi resource to rest/routing. They will return once the v2 write path (POST /trafficroutes, PUT / DELETE /trafficroutes/{id}) has been verified against real hardware.
DSCP Marking Reference
Common DSCP values for traffic classification (RFC 4594):
Assured Forwarding Classes:
- AF4x (32-34): High priority, low drop precedence
- AF3x (26-28): Medium priority
- AF2x (18-20): Normal priority
- AF1x (10-12): Low priority
- CS7 (56): Network control
- CS6 (48): Internetwork control
- CS5 (40): Voice/video
- CS4 (32): Real-time interactive
- CS3 (24): Broadcast video
- CS2 (16): High-throughput data
- CS1 (8): Low-priority data
Backup and Restore
Comprehensive backup and restore operations for disaster recovery, configuration migration, and system maintenance.Overview
UniFi’s Backup and Restore system provides critical disaster recovery capabilities:- Backup Creation: Create network or system backups on-demand or on schedule
- Backup Management: List, download, validate, and delete backup files
- Restore Operations: Restore from backups with automatic pre-restore safety backups
- Automated Scheduling: Configure daily, weekly, or monthly automated backups
- Operation Monitoring: Track backup and restore progress in real-time
- Cloud Sync: Optionally sync backups to UniFi Cloud (requires account)
- Network Backups (under 10 MB): Network settings, device configurations, WiFi networks, firewall rules (fastest, recommended for frequent backups)
- System Backups (10-100+ MB): Complete OS, application, and device configurations (comprehensive, recommended for major changes)
- Always create a pre-restore backup before restoring (enabled by default)
- Schedule automated daily network backups for production environments
- Keep at least 7-30 days of backup retention
- Download critical backups to external storage before major changes
- Test backup validation before restore operations
- Monitor controller connectivity during restore (controller may restart)
Trigger Backup ✅
Create a new backup of the specified type.- Method:
POST - Endpoint:
/api/cmd/backup - MCP Tool:
trigger_backup() - Implementation: v0.2.0 Phase 4 (86% coverage)
- Requires:
confirm=true - Supports:
dry_run=true
Example Request:
200 OK
cmd/backup
response carries a url naming the console’s own /dl/ tree, not the
/data/backup/ path shown above:
/proxy/network/dl/backup/{filename}, and
an automatic backup from /proxy/network/dl/autobackup/{filename}. A
manual backup is named for the version it was taken from (10.6.109.unf),
not the backup_YYYY-MM-DD_HH-MM-SS.unf pattern shown above. The
/proxy/network/data/backup/{filename} path answers 404 for both.
List Backups ✅
Retrieve metadata for all available backup files.- Method:
GET - Endpoint:
/api/backup/list-backups - MCP Tool:
list_backups() - Implementation: v0.2.0 Phase 4 (86% coverage)
200 OK
Get Backup Details ✅
Retrieve detailed information about a specific backup.- Method:
GET - Endpoint:
/api/backup/details/{filename} - MCP Tool:
get_backup_details() - Implementation: v0.2.0 Phase 4 (86% coverage)
Response:
200 OK
Download Backup ✅
Download a backup file to local storage.- Method:
GET - Endpoint:
/proxy/network/dl/autobackup/{filename}(automatic backup) or/proxy/network/dl/backup/{filename}(manual backup) - MCP Tool:
download_backup() - Implementation: v0.2.0 Phase 4 (86% coverage)
/dl/ tree, one directory per kind. The filename goes in
the path verbatim, and the directory follows the kind of backup:
The
/api/backup/download/{filename} route below is the legacy Network
Application Server surface, not the console’s; on a console it does not
answer. The console’s own cmd/backup response names the same tree
({"url": "/dl/backup/10.6.109.unf"}).
Parameters:
Example Usage:
Delete Backup ✅
Permanently delete a backup file from controller storage.- Method:
POST - Endpoint:
/proxy/network/api/s/{site}/cmd/backupwith{"cmd": "delete-backup", "filename": "..."}(local) —/ea/sites/{site}/backups/{filename}(cloud) - MCP Tool:
delete_backup() - Implementation: v0.2.0 Phase 4 (86% coverage)
- Requires:
confirm=true - Supports:
dry_run=true
400 api.err.Invalid, an unknown filename answers 404 api.err.NotFound — and the server reports the backup it cannot find. The route the tool used before, DELETE /proxy/network/api/backup/delete-backup/{filename}, answers 401 api.err.NoSiteContext on a console: it needs a site context it never carried. A console-level manual backup is not in the Network application’s backup manager, so the console’s own backup API (/api/backup/*, which answers 401 to the Network API key) is the only surface that reaches it.
Restore Backup ✅
Restore the controller from a backup file (DESTRUCTIVE).- Method:
POST - Endpoint:
/api/backup/restore - MCP Tool:
restore_backup() - Implementation: v0.2.0 Phase 4 (86% coverage)
- Requires:
confirm=true - Supports:
dry_run=true
Safety Features:
- Automatic pre-restore backup creation (recommended)
- Mandatory confirmation flag
- Rollback capability via pre-restore backup
- Audit logging
200 OK
- Restore all configuration from the backup
- Overwrite current settings
- Cause controller restart (2-5 minutes)
- Temporarily disconnect devices
Validate Backup ✅
Validate a backup file before restore.- Method:
POST - Endpoint:
/api/backup/validate - MCP Tool:
validate_backup() - Implementation: v0.2.0 Phase 4 (86% coverage)
200 OK
Get Backup Status ✅
Monitor the progress of an ongoing or completed backup operation.- Method:
GET - Endpoint:
/api/backup/status/{operationId} - MCP Tool:
get_backup_status() - Implementation: v0.2.0 Phase 4 (86% coverage)
Response:
200 OK
pending, in_progress, completed, failed
Note: Most backups complete quickly. This tool is primarily useful for large system backups.
Get Restore Status ✅
Monitor the progress of an ongoing or completed restore operation.- Method:
GET - Endpoint:
/api/restore/status/{operationId} - MCP Tool:
get_restore_status() - Implementation: v0.2.0 Phase 4 (86% coverage)
Response:
200 OK
pending, in_progress, completed, failed, rolled_back
Note: Expect connection errors during restore as controller restarts. Monitor controller connectivity to determine completion.
Schedule Backups ✅
Configure automated backup schedule for recurring backups.- Method:
POST - Endpoint:
/api/backup/schedule - MCP Tool:
schedule_backups() - Implementation: v0.2.0 Phase 4 (86% coverage)
- Requires:
confirm=true - Supports:
dry_run=true
Example Request (Daily):
201 Created
- Daily network backups: Production environments (3 AM recommended)
- Weekly system backups: Most use cases (Sunday 2 AM recommended)
- Monthly backups: Only for static environments
Get Backup Schedule ✅
Retrieve the configured automated backup schedule for a site.- Method:
GET - Endpoint:
/api/backup/schedule - MCP Tool:
get_backup_schedule() - Implementation: v0.2.0 Phase 4 (86% coverage)
200 OK
200 OK
Site Manager API
Implementation: v0.2.0 Phase 5 (~60% complete) Coverage: 92.95% (33 tests passing) Status: Multi-site aggregation complete, OAuth/SSO pending The Site Manager API provides centralized management and monitoring capabilities across multiple UniFi sites. These tools enable comprehensive oversight of distributed network deployments through unified health metrics, performance comparisons, inventory management, and cross-site search functionality. ⚠️ Configuration Required:Overview
The Site Manager API consists of 8 tools organized into three categories: Basic Aggregation:- List all sites with aggregated statistics
- Get internet health metrics
- Get site health summaries
- List Vantage Points
- Get site inventory (comprehensive resource breakdown)
- Compare site performance (rankings and metrics)
- Get cross-site statistics
- Search across sites (devices, clients, networks)
Example Prompts for Site Manager
List All Sites Aggregated ✅
List all managed sites with aggregated statistics from the Site Manager API.- Method:
GET - Endpoint:
/v1/sites - MCP Tool:
list_all_sites_aggregated() - Implementation: v0.2.0 Phase 5 (93% coverage)
200 OK
Get Internet Health ✅
Get internet connectivity health metrics across sites or for a specific site.- Method:
GET - Endpoint:
/v1/internet/healthor/v1/sites/{siteId}/internet/health - MCP Tool:
get_internet_health(site_id=None) - Implementation: v0.2.0 Phase 5 (93% coverage)
Response (Aggregate):
200 OK
200 OK
Get Site Health Summary ✅
Get health summary for all sites or a specific site.- Method:
GET - Endpoint:
/v1/sites/healthor/v1/sites/{siteId}/health - MCP Tool:
get_site_health_summary(site_id=None) - Implementation: v0.2.0 Phase 5 (93% coverage)
Response (All Sites):
200 OK
Get Cross-Site Statistics ✅
Get aggregated statistics across all managed sites.- Method:
GET - Endpoint:
/v1/sites/statistics - MCP Tool:
get_cross_site_statistics() - Implementation: v0.2.0 Phase 5 (93% coverage)
200 OK
List Vantage Points ✅
List all Vantage Points for network monitoring and testing.- Method:
GET - Endpoint:
/v1/vantage-points - MCP Tool:
list_vantage_points() - Implementation: v0.2.0 Phase 5 (93% coverage)
200 OK
Get Site Inventory ✅ 🆕
Get comprehensive inventory for a site or all sites.- Method:
GET - Endpoint:
/v1/sites/{siteId}/inventoryor/v1/sites/inventory - MCP Tool:
get_site_inventory(site_id=None) - Implementation: v0.2.0 Phase 5 (93% coverage)
Response (Specific Site):
200 OK
200 OK
Returns an array of inventory objects for each site.
Compare Site Performance ✅ 🆕
Compare performance metrics across all sites with rankings.- Method:
GET - Endpoint:
/v1/sites/performance/compare - MCP Tool:
compare_site_performance() - Implementation: v0.2.0 Phase 5 (93% coverage)
200 OK
- Identify sites needing infrastructure upgrades
- Compare performance across geographic regions
- Track improvement over time
- SLA compliance monitoring
Search Across Sites ✅ 🆕
Search for devices, clients, or networks across all managed sites.- Method:
GET - Endpoint:
/v1/sites/search - MCP Tool:
search_across_sites(query, search_type='all') - Implementation: v0.2.0 Phase 5 (93% coverage)
Example Request:
200 OK
device- Search devices by name or MAC addressclient- Search clients by name, MAC, or IP addressnetwork- Search networks by nameall- Search all resource types
- Locate specific device across multiple locations
- Find all instances of a client device
- Identify which site has a particular resource
- MAC address tracking for security investigations
Supporting Resources
Contains read-only reference endpoints used to retrieve supporting data such as WAN interfaces, DPI categories, country codes, RADIUS profiles, and device tags.List WAN Interfaces
Returns available WAN interface definitions for a given site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/wans
Response:
200 OK
List Site-To-Site VPN Tunnels ✅
Retrieve a paginated list of all site-to-site VPN tunnels on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/vpn/site-to-site-tunnels - MCP Tool:
list_vpn_tunnels() - Implementation: Batch 2 (100% coverage)
Response:
200 OK
List VPN Servers ✅
Retrieve a paginated list of all VPN servers on a site.- Method:
GET - Endpoint:
/v1/sites/{siteId}/vpn/servers - MCP Tool:
list_vpn_servers() - Implementation: Batch 2 (100% coverage)
Response:
200 OK
List Radius Profiles ✅
Returns available RADIUS authentication profiles.- Method:
GET - Endpoint:
/v1/sites/{siteId}/radius/profiles - MCP Tool:
list_radius_profiles() - Implementation: Batch 3 (100% coverage)
Response:
200 OK
List Device Tags ✅
Returns all device tags defined within a site (used for WiFi Broadcast assignments).- Method:
GET - Endpoint:
/v1/sites/{siteId}/device-tags - MCP Tool:
list_device_tags() - Implementation: Batch 3 (100% coverage)
Response:
200 OK
MAC Tags (legacy, writable)
The Integration API only lists device tags. Tags are created and edited on the local gateway’s legacy REST collection, where each tag is a name plus amember_table of device MAC addresses.
- Endpoint:
/api/s/{site}/rest/tag(GET,POST) and/api/s/{site}/rest/tag/{tagId}(GET,PUT,DELETE) - Body:
{"name": "Lobby APs", "member_table": ["aa:bb:cc:dd:ee:01"]} - MCP Tools:
list_mac_tags(),get_mac_tag(),create_mac_tag(),update_mac_tag(),delete_mac_tag() - API mode: local only
- Verification: unit-tested against mocked responses; not yet exercised on live hardware. Writes re-read the tag when the controller does not echo it, and report any member difference as a warning.
List DPI Categories
Returns predefined Deep Packet Inspection (DPI) categories used for traffic identification and filtering.- Method:
GET - Endpoint:
/v1/dpi/categories
Response:
200 OK
List DPI Applications
Lists DPI-recognized applications grouped under categories.- Method:
GET - Endpoint:
/v1/dpi/applications
Response:
200 OK
List Countries ✅
Returns ISO-standard country codes and names.- Method:
GET - Endpoint:
/v1/countries - MCP Tool:
list_countries()(enhanced with pagination) - Implementation: Batch 3 (100% coverage)
Response:
200 OK
Common Response Format (Paginated Lists)
All list endpoints return a standard paginated response:Notes
- All timestamps use ISO 8601 format
- All endpoints require valid API key authentication via
X-API-KEYheader - Rate limiting applies per API key
- Mutating operations should implement confirmation flags in MCP server implementations
- The API is under active development; check changelog for updates
Documentation Version: v10.0.160 Last Updated: January 23, 2026 Source: UniFi Network API v10.0.160 (Merged Update)
Site Manager API - New Endpoints
Added: 2026-01-24Version Control
Endpoints combined into Ansible Modules for customized workflows. Reference: Version ControlList Hosts
Endpoints combined into Ansible Modules for customized workflows. Example:Get Host by ID
Endpoints combined into Ansible Modules for customized workflows. Example:List Sites
Endpoints combined into Ansible Modules for customized workflows. Example:Get ISP Metrics
Endpoints combined into Ansible Modules for customized workflows. Example:Network API - New Endpoints
Added: 2026-01-24Connector - POST
- Method:
GET - Endpoint:
requests
Connector - GET
- Method:
GET - Endpoint:
requests
Connector - PUT
- Method:
GET - Endpoint:
requests
Connector - DELETE
- Method:
GET - Endpoint:
requests
Connector - PATCH
- Method:
GET - Endpoint:
requests
Protect API - New Endpoints
Added: 2026-01-24Protect Phase 3 implemented surfaces
These tools are currently wired for local Protect integration via the/proxy/protect/integration/v1/... path family and are available in the
dedicated protect profile.
Snapshot helpers, media streams, talkback, and PTZ endpoints are still planned and should not be treated as live MCP tools yet.
Connector - POST
- Method:
GET - Endpoint:
requests
Connector - GET
- Method:
GET - Endpoint:
requests
Connector - PUT
- Method:
GET - Endpoint:
requests
Connector - DELETE
- Method:
GET - Endpoint:
requests
Connector - PATCH
- Method:
GET - Endpoint:
requests
Query ISP Metrics
Endpoints combined into Ansible Modules for customized workflows. Example:List SD-WAN Configs
Implementation reconciliation (2026-11-08,311fce7): The official Site Manager v1.0.0 OpenAPI at https://developer.ui.com/site-manager/v1.0.0/openapi.json defines GET /v1/sd-wan-configs, GET /v1/sd-wan-configs/{id}, and GET /v1/sd-wan-configs/{id}/status against https://api.ui.com. The repository client formerly used /v1/sdwan/configs, while this document already had the official paths. The list returns {data: [{id, name, type}], httpStatusCode, traceId} and declares no pagination. Detail includes settings/hubs/spokes; status includes generation/application and tunnel records, not a single fabricated deployment health. This is config/status read coverage only, not typed destination/performance policy support or policy authoring. Local mocks do not prove account-level interoperability.
Endpoints combined into Ansible Modules for customized workflows.
Example:
Get SD-WAN Config by ID
Endpoints combined into Ansible Modules for customized workflows. Example:Get SD-WAN Config Status
Endpoints combined into Ansible Modules for customized workflows. Example:Adopt Devices
Endpoints combined into Ansible Modules for customized workflows. Example:List DPI Application Categories
Endpoints combined into Ansible Modules for customized workflows. Example:Quick Start
- Method:
GET - Endpoint:
register
Get application information
Endpoints combined into Ansible Modules for customized workflows. Example:Get viewer details
Endpoints combined into Ansible Modules for customized workflows. Example:Patch viewer settings
Endpoints combined into Ansible Modules for customized workflows. Example:Get all viewers
Endpoints combined into Ansible Modules for customized workflows. Example:Get live view details
Endpoints combined into Ansible Modules for customized workflows. Example:Patch live view configuration
Endpoints combined into Ansible Modules for customized workflows. Example:Get all live views
Endpoints combined into Ansible Modules for customized workflows. Example:Create live view
Endpoints combined into Ansible Modules for customized workflows. Example:Get update messages about devices
Endpoints combined into Ansible Modules for customized workflows. Example:Get Protect event messages
Endpoints combined into Ansible Modules for customized workflows. Example:Start a camera PTZ patrol
Endpoints combined into Ansible Modules for customized workflows. Example:Stop active camera PTZ patrol
Endpoints combined into Ansible Modules for customized workflows. Example:Move PTZ camera to preset
Endpoints combined into Ansible Modules for customized workflows. Example:Send a webhook to the alarm manager
Endpoints combined into Ansible Modules for customized workflows. Example:Get light details
Endpoints combined into Ansible Modules for customized workflows. Example:Patch light settings
Endpoints combined into Ansible Modules for customized workflows. Example:Get all lights
Endpoints combined into Ansible Modules for customized workflows. Example:Get camera details
Endpoints combined into Ansible Modules for customized workflows. Example:Patch camera settings
Endpoints combined into Ansible Modules for customized workflows. Example:Get all cameras
Endpoints combined into Ansible Modules for customized workflows. Example:Create RTSPS streams for camera
Endpoints combined into Ansible Modules for customized workflows. Example:Delete camera RTSPS stream
Endpoints combined into Ansible Modules for customized workflows. Example:Get RTSPS streams for camera
Endpoints combined into Ansible Modules for customized workflows. Example:Get camera snapshot
Endpoints combined into Ansible Modules for customized workflows. Example:Permanently disable camera microphone
Endpoints combined into Ansible Modules for customized workflows. Example:Create talkback session for camera
Endpoints combined into Ansible Modules for customized workflows. Example:Get sensor details
Endpoints combined into Ansible Modules for customized workflows. Example:Patch sensor settings
Endpoints combined into Ansible Modules for customized workflows. Example:Get all sensors
Endpoints combined into Ansible Modules for customized workflows. Example:Get NVR details
Endpoints combined into Ansible Modules for customized workflows. Example:Upload device asset file
Endpoints combined into Ansible Modules for customized workflows. Example:Get device asset files
Endpoints combined into Ansible Modules for customized workflows. Example:Get chime details
Endpoints combined into Ansible Modules for customized workflows. Example:Patch chime settings
Endpoints combined into Ansible Modules for customized workflows. Example:Get all chimes
Endpoints combined into Ansible Modules for customized workflows. Example:Quick Start
- Method:
GET - Endpoint:
register
Protect v7.3.68 — implemented (Phase 5a, 2026-09-27)
Verified against the canonical spec snapshotArm profiles / alarm control (7)scripts/protect-api-spec-v7.3.68.json(audit 2026-09-26). These 39 operations shipped in Protect v7 and are now implemented as MCP tools across 10 modules (sirens, alarm/arm-profiles, speakers, fobs, relays, bridges, link stations, alarm hubs, users, POS). Mock-tested only — verify against live Protect hardware before relying on write paths (same caveat as the F1–F3 Integration API findings: mocked tests assert the code’s assumptions, not controller behavior). All writes requireconfirm=Trueand supportdry_run.
GET /v1/arm-profiles— list arm profilesPOST /v1/arm-profiles— create arm profilePATCH /v1/arm-profiles/{id}— update arm profileDELETE /v1/arm-profiles/{id}— delete arm profilePATCH /v1/arm-profiles/settings— set current arm profilePOST /v1/arm-profiles/enable— enable alarmPOST /v1/arm-profiles/disable— disable alarm
GET /v1/sirens,GET /v1/sirens/{id}— list / detailsPATCH /v1/sirens/{id}— update settingsPOST /v1/sirens/{id}/play,POST /v1/sirens/{id}/stop— controlPOST /v1/sirens/{id}/test-sound
GET /v1/speakers,GET /v1/speakers/{id},PATCH /v1/speakers/{id}POST /v1/speakers/{id}/test-sound
GET /v1/fobs, GET /v1/fobs/{id}, PATCH /v1/fobs/{id}
Relays (4)
GET /v1/relays,GET /v1/relays/{id},PATCH /v1/relays/{id}POST /v1/relays/{id}/outputs/{outputId}/activate
GET /v1/bridges, GET /v1/bridges/{id}, PATCH /v1/bridges/{id}
Link stations (3) — GET /v1/link-stations, GET /v1/link-stations/{id}, PATCH /v1/link-stations/{id}
Alarm hubs (4)
GET /v1/alarm-hubs,GET /v1/alarm-hubs/{id},PATCH /v1/alarm-hubs/{id}POST /v1/alarm-hubs/{id}/outputs/{outputId}/trigger
GET /v1/users,GET /v1/users/{id}— Protect usersGET /v1/ulp-users,GET /v1/ulp-users/{id}— UniFi Identity users
POST /v1/pos/cameras/{id}/transactions— ingest POS transaction
/v1/connector/consoles/{consoleId}/proxy/protect/integration. Write operations (arm profile CRUD, alarm enable/disable, siren/speaker/relay/alarm-hub triggers and patches, POS ingestion) ship behind UNIFI_READ_ONLY (mutating tools are not registered in read-only mode), confirm=True, dry_run preview, and are covered by mocked unit tests. Tool names map as: list_protect_arm_profiles / get_protect_arm_profile / create_protect_arm_profile / update_protect_arm_profile / delete_protect_arm_profile / set_current_protect_arm_profile / enable_protect_alarm / disable_protect_alarm, list_protect_sirens / get_protect_siren / update_protect_siren / play_protect_siren / stop_protect_siren / test_protect_siren_sound, list_protect_speakers / get_protect_speaker / update_protect_speaker / test_protect_speaker_sound, list_protect_fobs / get_protect_fob / update_protect_fob, list_protect_relays / get_protect_relay / update_protect_relay / activate_protect_relay_output, list_protect_bridges / get_protect_bridge / update_protect_bridge, list_protect_link_stations / get_protect_link_station / update_protect_link_station, list_protect_alarm_hubs / get_protect_alarm_hub / update_protect_alarm_hub / trigger_protect_alarm_hub_output, list_protect_users / get_protect_user, list_protect_ulp_users / get_protect_ulp_user, and ingest_pos_transaction.
Phase 6 — Mobility, InnerSpace, Carrier Fabric (implemented 2026-09-27)
Verified against the canonical spec snapshotsMobility v1.0.0 (8) — cloud API onscripts/mobility-api-spec-v1.0.0.json,scripts/innerspace-api-spec-v1.3.23.json, andscripts/carrier-fabric-api-spec-v1.0.0.json. All 25 operations implemented. Mock-tested only — verify against live Ubiquiti cloud access (Mobility/Carrier require a UniFi API key with cloud scope; InnerSpace requires a console with the InnerSpace integration).
api.ui.com/v1/mobility, same API-key transport as
Site Manager (tools reuse SiteManagerClient; require UNIFI_SITE_MANAGER_ENABLED=true):
GET /v1/mobility/workspaces→list_mobility_workspacesGET /v1/mobility/workspaces/{id}/admins→list_mobility_workspace_adminsGET /v1/mobility/workspaces/{id}/devices(limit 1–200, offset) →list_mobility_devicesGET /v1/mobility/workspaces/{id}/devices/{id}→get_mobility_devicePUT /v1/mobility/workspaces/{id}/devices/{id}(name 1–32) →update_mobility_deviceGET /v1/mobility/workspaces/{id}/devices/{id}/clients→list_mobility_device_clientsPUT /v1/mobility/workspaces/{id}/devices/{id}/network(snake_case DHCP body:host_address,dhcp_modedhcp|none,dhcp_range_start/stop,dhcp_lease_time) →update_mobility_device_networkPUT /v1/mobility/workspaces/{id}/devices/{id}/wireless(ssid,passwordrequired) →update_mobility_device_wireless
/v1/connector/consoles/{consoleId}/proxy/innerspace/integration/...), console_id
parameter per tool (from list_hosts), no writes:
GET v1/access_points→list_innerspace_access_pointsGET v1/floor_plans→list_innerspace_floor_plansGET v1/inventory→list_innerspace_inventoryGET v1/project→get_innerspace_projectGET v1/switches(optionalsiteIdquery) →list_innerspace_switchesGET v1/assets/{planId}/{filename}→download_innerspace_asset
api.ui.com/v1/carrier, highest blast radius
(subscriber lifecycle); all writes confirm-gated with dry-run:
GET /v1/carrier/service-plans→list_carrier_service_plansGET /v1/carrier/service-plans/{id}→get_carrier_service_planGET /v1/carrier/subscribers(limit/offset/planId/suspended) →list_carrier_subscribersPOST /v1/carrier/subscribers(subscriberNumberrequired 1–32; optional camelCasename,email,notes,serviceAddress,planId,hostId,metadata) →create_carrier_subscriberGET /v1/carrier/subscribers/{id}→get_carrier_subscriberPATCH /v1/carrier/subscribers/{id}(only provided fields; spec semantics: absent = unchanged, explicit null = clears — this tool only sends provided fields) →update_carrier_subscriberPUT /v1/carrier/subscribers/{id}/host(hostId) →attach_carrier_subscriber_hostDELETE /v1/carrier/subscribers/{id}/host→detach_carrier_subscriber_hostPUT /v1/carrier/subscribers/{id}/plan(planId) →assign_carrier_subscriber_planPOST /v1/carrier/subscribers/{id}/resume→resume_carrier_subscriberPOST /v1/carrier/subscribers/{id}/suspend(optionalreason) →suspend_carrier_subscriber
mobility, innerspace, carrier (via UNIFI_PROFILE).