Skip to main content

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

  1. Use the table of contents to find the domain you are changing.
  2. Confirm the version history before assuming schema or field stability.
  3. Check the roadmap alignment note to see whether the behavior is implemented or planned.
  4. 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


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 dnsAssistanceConfiguration supporting AUTO and MANUAL modes. Manual mode allows specifying up to 2 failover DNS servers.
  • Local LAG — New LAG type LOCAL added alongside existing SWITCH_STACK and MULTI_CHASSIS types. Represented by IntegrationLocalLagGlobalDto and IntegrationLocalLagLocalDto schemas.
  • IntegrationLagMemberDto — New unified LAG member schema replacing the removed abstract hierarchy.
Changed
  • WiFi Broadcasts — IntegrationStandardWifiBroadcastCreateUpdateDto and IntegrationStandardWifiBroadcastDetailDto now include dnsAssistanceConfiguration.
  • Open Security Configuration — IntegrationWifiOpenSecurityConfigurationDetailDto gained an encryption enum field supporting ENHANCED_OPEN and ENHANCED_OPEN_WITH_TRANSITION.
  • LAG Details — Discriminator now includes LOCAL mapping.
  • Switching Feature Overview — Renamed from Switch feature overview.
Removed
  • AbstractIntegrationLagMemberDto (replaced by IntegrationLagMemberDto)
  • 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):
Local API:

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

  1. Be Specific: Include exact values (IP addresses, port numbers, VLAN IDs)
  2. Use Context: Reference existing configurations (“the Guest WiFi”, “my main switch”)
  3. Request Confirmation: Ask the AI to explain changes before applying them
  4. Combine Operations: Chain related tasks in a single conversational flow
  5. Ask for Validation: Request health checks or impact analysis before major changes
  6. Leverage Dry-Run: Ask the AI to show what would happen without actually making changes
Example Multi-Step Conversation:

Filtering

Explains how to use the filter query parameter for advanced querying across list endpoints. Some GET 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 if id is equal to 123
  • name.isNotNull() - checks if name is not null
  • createdAt.in(2025-01-01, 2025-01-05) - checks if createdAt is either 2025-01-01 or 2025-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 if name is null and createdAt is greater than 2025-01-01
  • or(name.isNull(), expired.isNull(), expiresAt.isNull()) - checks if any of name, expired, or expiresAt is null

3. Negation Expressions

Negate any other expressions using the form not(<expression>). Example:
  • not(name.like('guest*')) - matches all values except those that start with guest

Filterable Property Types

Filtering Functions

Pattern Matching (like Function)

  • . matches any single character. Example: type.like('type.') matches type1, but not type100
  • * matches any number of characters. Example: name.like('guest*') matches guest1 and guest100
  • \ 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
Example Response:

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
Query Parameters: Response: 200 OK

UniFi Devices

Endpoints to list, inspect, and interact with UniFi devices.

List Devices Pending Adoption

  • Method: GET
  • Endpoint: /v1/pending-devices
Query Parameters: Response: 200 OK

List Adopted Devices

Retrieve a paginated list of all adopted devices on a site.
  • Method: GET
  • Endpoint: /v1/sites/{siteId}/devices
Path Parameters: Query Parameters: Response: 200 OK

Adopt Device

Adopt a device to a site.
  • Method: POST
  • Endpoint: /v1/sites/{siteId}/devices
Path Parameters: Request Body: Example Request:
Response: 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}
Path Parameters: Response: 200 OK Response Fields:
  • id, macAddress, ipAddress, name, model, supported, state
  • firmwareVersion, firmwareUpdatable
  • adoptedAt, provisionedAt
  • configurationId, uplink.deviceId
  • features.switching, features.accessPoint
  • interfaces.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
Response: 200 OK

Execute Adopted Device Action

Perform an action on a specific adopted device.
  • Method: POST
  • Endpoint: /v1/sites/{siteId}/devices/{deviceId}/actions
Path Parameters: 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
Path Parameters: 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}
Path Parameters: 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()
  • site is the target site’s 24-hex _id, which only the legacy /api/self/sites listing returns. The tool resolves it from a short name, UI description, or _id.
Migrate to another controller
  • 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 migrate the device appears on the new controller as pending adoption.
Verification: unit-tested against mocked responses; not yet exercised on live hardware.

Clients

Endpoints for viewing and managing connected clients (wired, wireless, VPN, and guest).

List Connected Clients

  • Method: GET
  • Endpoint: /v1/sites/{siteId}/clients
Path Parameters: Query Parameters: Response: 200 OK

Get Connected Client Details

  • Method: GET
  • Endpoint: /v1/sites/{siteId}/clients/{clientId}
Path Parameters: Response: 200 OK Response Fields:
  • type – one of WIRED, WIRELESS, VPN, TELEPORT
  • id, name, connectedAt
  • ipAddress, macAddress
  • access.type
  • uplinkDeviceId

Execute Client Action

Perform an action on a specific connected client.
  • Method: POST
  • Endpoint: /v1/sites/{siteId}/clients/{clientId}/actions
Request Body: 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, and dhcpGuarding. 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) but purpose is immutable after creation.
  • Network-level client isolation (“Isolate Network” in the UI) is not available through any documented API. Use clientIsolationEnabled on 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
Path Parameters: Query Parameters: Response: 200 OK

Create Network

  • Method: POST
  • Endpoint: /v1/sites/{siteId}/networks
  • Response: 201 Created
Request Body:

Get Network Details

  • Method: GET
  • Endpoint: /v1/sites/{siteId}/networks/{networkId}
Response: 200 OK Response Fields:
  • management – UNMANAGED, GATEWAY, or SWITCH
  • id, name, enabled
  • vlanId (2–4000)
  • metadata.origin
  • dhcpGuarding.trustedDhcpServerIpAddresses[...]

Update Network

  • Method: PUT
  • Endpoint: /v1/sites/{siteId}/networks/{networkId}
Request Body: Response: 200 OK

Delete Network

  • Method: DELETE
  • Endpoint: /v1/sites/{siteId}/networks/{networkId}
Query Parameters: Response: 200 OK

Get Network References

  • Method: GET
  • Endpoint: /v1/sites/{siteId}/networks/{networkId}/references
Response: 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
Path Parameters: Query Parameters: Response: 200 OK

Create Wifi Broadcast

  • Method: POST
  • Endpoint: /v1/sites/{siteId}/wifi/broadcasts
  • Response: 201 Created
Request Body Fields:

Get Wifi Broadcast Details

  • Method: GET
  • Endpoint: /v1/sites/{siteId}/wifi/broadcasts/{wifiBroadcastId}
Response: 200 OK Response Fields:
  • type – STANDARD or IOT_OPTIMIZED
  • id, name, enabled
  • metadata.origin
  • network.type
  • securityConfiguration.type, securityConfiguration.radiusConfiguration
  • broadcastingDeviceFilter.type
  • mdnsProxyConfiguration.mode
  • multicastFilteringPolicy.action
  • multicastToUnicastConversionEnabled
  • clientIsolationEnabled
  • hideName, uapsdEnabled
  • basicDataRateKbpsByFrequencyGHz
  • clientFilteringPolicy.action, clientFilteringPolicy.macAddressFilter[...]
  • blackoutScheduleConfiguration.days[...]
  • broadcastingFrequenciesGHz
  • hotspotConfiguration.type
  • mloEnabled, bandSteeringEnabled, arpProxyEnabled, bssTransitionEnabled, advertiseDeviceName
  • dtimPeriodByFrequencyGHzOverride
  • dnsAssistanceConfiguration.mode, dnsAssistanceConfiguration.servers

Update Wifi Broadcast

  • Method: PUT
  • Endpoint: /v1/sites/{siteId}/wifi/broadcasts/{wifiBroadcastId}
Request Body: Same schema as Create Wifi Broadcast. Response: 200 OK

Delete Wifi Broadcast

  • Method: DELETE
  • Endpoint: /v1/sites/{siteId}/wifi/broadcasts/{wifiBroadcastId}
Query Parameters: Response: 200 OK

Hotspot

Endpoints for managing guest access via Hotspot vouchers.

List Vouchers

  • Method: GET
  • Endpoint: /v1/sites/{siteId}/hotspot/vouchers
Query Parameters: Response: 200 OK

Generate Vouchers

Create one or more Hotspot vouchers.
  • Method: POST
  • Endpoint: /v1/sites/{siteId}/hotspot/vouchers
  • Response: 201 Created
Request Body:

Delete Vouchers

Remove Hotspot vouchers based on the specified filter criteria.
  • Method: DELETE
  • Endpoint: /v1/sites/{siteId}/hotspot/vouchers
Query Parameters: Response: 200 OK

Get Voucher Details

Retrieve details of a specific Hotspot voucher.
  • Method: GET
  • Endpoint: /v1/sites/{siteId}/hotspot/vouchers/{voucherId}
Response Fields:

Delete Voucher

Remove a specific Hotspot voucher.
  • Method: DELETE
  • Endpoint: /v1/sites/{siteId}/hotspot/vouchers/{voucherId}
Response: 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
Response Fields:

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
Request Body: 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
Response Fields:

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
Request Body:

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
Response Fields:

Configure Guest Portal

Customize guest portal settings.
  • Method: PATCH
  • Endpoint: /v1/sites/{siteId}/guest-portal/config
  • Response: 200 OK
  • Requires Confirmation: confirm=true
Request Body (all fields optional):

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
Response Fields:

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
Request Body: 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
Query Parameters: 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
Request Body: Example Request:

Get Firewall Zone

Get a firewall zone on a site.
  • Method: GET
  • Endpoint: /v1/sites/{siteId}/firewall/zones/{firewallZoneId}
Response Fields:

Update Firewall Zone

Update a firewall zone on a site.
  • Method: PUT
  • Endpoint: /v1/sites/{siteId}/firewall/zones/{firewallZoneId}
Request Body: Response: 200 OK

Delete Custom Firewall Zone

  • Method: DELETE
  • Endpoint: /v1/sites/{siteId}/firewall/zones/{firewallZoneId}
Response: 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
Path Parameters: 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
Request Body: 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}
Path Parameters: Response: 200 OK Response Fields:
  • id, enabled, name, description, index
  • action.type
  • source.firewallZoneId, source.trafficFilter
  • destination.firewallZoneId, destination.trafficFilter
  • ipProtocolScope.ipVersion
  • connectionStateFilter (array: NEW, INVALID, ESTABLISHED, RELATED)
  • ipsecFilter (MATCH_ENCRYPTED, MATCH_NOT_ENCRYPTED)
  • loggingEnabled
  • schedule.mode
  • metadata.origin

Update Firewall Policy

Update an existing firewall policy on a site.
  • Method: PUT
  • Endpoint: /v1/sites/{siteId}/firewall/policies/{firewallPolicyId}
Request Body: Same schema as Create Firewall Policy. Response: 200 OK

Patch Firewall Policy

Patch an existing firewall policy on a site.
  • Method: PATCH
  • Endpoint: /v1/sites/{siteId}/firewall/policies/{firewallPolicyId}
Path Parameters: Request Body: Partial policy object with only the fields to update. Example Request:
Response: 200 OK

Delete Firewall Policy

Delete an existing firewall policy on a site.
  • Method: DELETE
  • Endpoint: /v1/sites/{siteId}/firewall/policies/{firewallPolicyId}
Path Parameters: 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
Path Parameters: 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
Path Parameters: Query Parameters: Request Body: Example Request:
Response: 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
Query Parameters: Response: 200 OK

Create ACL Rule

Create a new user defined ACL rule.
  • Method: POST
  • Endpoint: /v1/sites/{siteId}/acl-rules
  • Response: 201 Created
Request Body:

Get ACL Rule

  • Method: GET
  • Endpoint: /v1/sites/{siteId}/acl-rules/{aclRuleId}
Response Fields:

Update ACL Rule

Update an existing user defined ACL rule.
  • Method: PUT
  • Endpoint: /v1/sites/{siteId}/acl-rules/{aclRuleId}
Request Body: Same schema as Create ACL Rule. Response: 200 OK

Delete ACL Rule

  • Method: DELETE
  • Endpoint: /v1/sites/{siteId}/acl-rules/{aclRuleId}
Response: 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
Path Parameters: 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
Path Parameters: Request Body: Example Request:
Response: 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 from Switch 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
Path Parameters: Query Parameters: Response: 200 OK — paginated list

Get Switch Stack

Retrieve Switch Stack details.
  • Method: GET
  • Endpoint: /v1/sites/{siteId}/switching/switch-stacks/{switchStackId}
Path Parameters: 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
Path Parameters: 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}
Path Parameters: 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
Path Parameters: Query Parameters: Response: 200 OK — paginated list

Get LAG Details

Retrieve LAG details.
  • Method: GET
  • Endpoint: /v1/sites/{siteId}/switching/lags/{lagId}
Path Parameters: Response: 200 OK
LAG Types: 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
Path Parameters: 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
Request Body (A_RECORD example): Supported Types: A_RECORD, AAAA_RECORD, CNAME_RECORD, MX_RECORD, TXT_RECORD, SRV_RECORD, FORWARD_DOMAIN Example Request (A_RECORD):
Response: Returns created DNS policy with id.

Get DNS Policy

Retrieve specific DNS policy.
  • Method: GET
  • Endpoint: /v1/sites/{siteId}/dns/policies/{dnsPolicyId}
Path Parameters: 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}
Path Parameters: 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}
Path Parameters: 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)
Query Parameters: 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
Request Body: 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)
Response Fields: 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)
Request Body: 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)
Response: 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)
Best Practices:
  • 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)
Query Parameters: 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)
Response: 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
Request Body: Example Request:
Response: 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
Request Body: All fields optional (only provided fields are updated) Response: 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
Response: 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)
Response: 200 OK
Available ProAV Protocols:
  • 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)
Reference Profiles:
  • 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
Request Body: Example Request:
Response: 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)
Request Body: 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’s rest/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 to purpose: "wan")
  • MCP Tool: get_smart_queue_status(site_id, wan_network_id=None)
Tool Response:
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
Tool Parameters: To disable, call with enabled=false; the rates can be omitted. Request Body sent to the controller (for download_mbps=900, upload_mbps=40):
Rate fields are only included when the matching argument is given. Tool Response: Same shape as 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.
Response: 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
Class Selectors (Backward Compatible):
  • 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)
Backup Types:
  • 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)
Best Practices:
  • 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
Request Body: Example Request:
Response: 200 OK
Note: Network backups complete in under 30 seconds, system backups may take 1-3 minutes. Note (verified live, issue #281): on a UniFi OS console the cmd/backup response carries a url naming the console’s own /dl/ tree, not the /data/backup/ path shown above:
The backup file is served from /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)
Response: 200 OK
Note (verified live): this is the shape a UniFi OS console answers with. The entries carry no per-item URL, so the download path is built from the filename — see Download Backup.

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)
Path Parameters: 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)
Note (verified live, issue #281): a UniFi OS console serves backup files from its /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/backup with {"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
Warning: This operation cannot be undone. Ensure backup is downloaded or unnecessary before deletion. Verified live on a UniFi OS console (Network 10.6.109): the command is recognised — a wrong payload key answers 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
Request Body: Safety Features:
  • Automatic pre-restore backup creation (recommended)
  • Mandatory confirmation flag
  • Rollback capability via pre-restore backup
  • Audit logging
Example Request:
Response: 200 OK
Critical Warning: Restore operations will:
  1. Restore all configuration from the backup
  2. Overwrite current settings
  3. Cause controller restart (2-5 minutes)
  4. 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)
Response: 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)
Path Parameters: Response: 200 OK
Status Values: 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)
Path Parameters: Response: 200 OK
Status Values: 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
Request Body: Example Request (Daily):
Example Request (Weekly):
Response: 201 Created
Scheduling Recommendations:
  • 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)
Response (Configured): 200 OK
Response (Not Configured): 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
Advanced Analytics:
  • Get site inventory (comprehensive resource breakdown)
  • Compare site performance (rankings and metrics)
  • Get cross-site statistics
Search & Discovery:
  • 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)
Request: No parameters required. Response: 200 OK

Get Internet Health ✅

Get internet connectivity health metrics across sites or for a specific site.
  • Method: GET
  • Endpoint: /v1/internet/health or /v1/sites/{siteId}/internet/health
  • MCP Tool: get_internet_health(site_id=None)
  • Implementation: v0.2.0 Phase 5 (93% coverage)
Request Body: Response (Aggregate): 200 OK
Response (Specific Site): 200 OK

Get Site Health Summary ✅

Get health summary for all sites or a specific site.
  • Method: GET
  • Endpoint: /v1/sites/health or /v1/sites/{siteId}/health
  • MCP Tool: get_site_health_summary(site_id=None)
  • Implementation: v0.2.0 Phase 5 (93% coverage)
Request Body: 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)
Request: No parameters required. Response: 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)
Request: No parameters required. Response: 200 OK

Get Site Inventory ✅ 🆕

Get comprehensive inventory for a site or all sites.
  • Method: GET
  • Endpoint: /v1/sites/{siteId}/inventory or /v1/sites/inventory
  • MCP Tool: get_site_inventory(site_id=None)
  • Implementation: v0.2.0 Phase 5 (93% coverage)
Provides detailed resource breakdown including device counts by type, networks, SSIDs, VPN tunnels, and firewall rules. Request Body: Response (Specific Site): 200 OK
Response (All Sites): 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)
Analyzes uptime, latency, bandwidth, and health status to identify best and worst performing sites. Request: No parameters required. Response: 200 OK
Use Cases:
  • 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)
Useful for locating resources in multi-site deployments. Supports search by name, MAC address, or IP address. Request Body: Example Request:
Response: 200 OK
Search Types:
  • device - Search devices by name or MAC address
  • client - Search clients by name, MAC, or IP address
  • network - Search networks by name
  • all - Search all resource types
Use Cases:
  • 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
Query Parameters: 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)
Query Parameters: 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)
Query Parameters: 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)
Query Parameters: 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)
Query Parameters: 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 a member_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
Query Parameters: Response: 200 OK

List DPI Applications

Lists DPI-recognized applications grouped under categories.
  • Method: GET
  • Endpoint: /v1/dpi/applications
Query Parameters: 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)
Query Parameters: 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-KEY header
  • 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-24

Version Control

Endpoints combined into Ansible Modules for customized workflows. Reference: Version Control

List Hosts

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: List Hosts

Get Host by ID

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get Host by ID

List Sites

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: List Sites

Get ISP Metrics

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get ISP Metrics

Network API - New Endpoints

Added: 2026-01-24

Connector - POST

  • Method: GET
  • Endpoint: requests
Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Connector - POST

Connector - GET

  • Method: GET
  • Endpoint: requests
Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Connector - GET

Connector - PUT

  • Method: GET
  • Endpoint: requests
Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Connector - PUT

Connector - DELETE

  • Method: GET
  • Endpoint: requests
Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Connector - DELETE

Connector - PATCH

  • Method: GET
  • Endpoint: requests
Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Connector - PATCH

Protect API - New Endpoints

Added: 2026-01-24

Protect 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
Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Connector - POST

Connector - GET

  • Method: GET
  • Endpoint: requests
Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Connector - GET

Connector - PUT

  • Method: GET
  • Endpoint: requests
Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Connector - PUT

Connector - DELETE

  • Method: GET
  • Endpoint: requests
Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Connector - DELETE

Connector - PATCH

  • Method: GET
  • Endpoint: requests
Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Connector - PATCH

Query ISP Metrics

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Query ISP Metrics

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:
Reference: List SD-WAN Configs

Get SD-WAN Config by ID

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get SD-WAN Config by ID

Get SD-WAN Config Status

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get SD-WAN Config Status

Adopt Devices

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Adopt Devices

List DPI Application Categories

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: List DPI Application Categories

Quick Start

  • Method: GET
  • Endpoint: register
Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Quick Start

Get application information

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get application information

Get viewer details

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get viewer details

Patch viewer settings

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Patch viewer settings

Get all viewers

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get all viewers

Get live view details

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get live view details

Patch live view configuration

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Patch live view configuration

Get all live views

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get all live views

Create live view

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Create live view

Get update messages about devices

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get update messages about devices

Get Protect event messages

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get Protect event messages

Start a camera PTZ patrol

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Start a camera PTZ patrol

Stop active camera PTZ patrol

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Stop active camera PTZ patrol

Move PTZ camera to preset

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Move PTZ camera to preset

Send a webhook to the alarm manager

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Send a webhook to the alarm manager

Get light details

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get light details

Patch light settings

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Patch light settings

Get all lights

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get all lights

Get camera details

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get camera details

Patch camera settings

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Patch camera settings

Get all cameras

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get all cameras

Create RTSPS streams for camera

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Create RTSPS streams for camera

Delete camera RTSPS stream

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Delete camera RTSPS stream

Get RTSPS streams for camera

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get RTSPS streams for camera

Get camera snapshot

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get camera snapshot

Permanently disable camera microphone

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Permanently disable camera microphone

Create talkback session for camera

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Create talkback session for camera

Get sensor details

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get sensor details

Patch sensor settings

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Patch sensor settings

Get all sensors

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get all sensors

Get NVR details

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get NVR details

Upload device asset file

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Upload device asset file

Get device asset files

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get device asset files

Get chime details

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get chime details

Patch chime settings

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Patch chime settings

Get all chimes

Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Get all chimes

Quick Start

  • Method: GET
  • Endpoint: register
Endpoints combined into Ansible Modules for customized workflows. Example:
Reference: Quick Start

Protect v7.3.68 — implemented (Phase 5a, 2026-09-27)

Verified against the canonical spec snapshot 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 require confirm=True and support dry_run.
Arm profiles / alarm control (7)
  • GET /v1/arm-profiles — list arm profiles
  • POST /v1/arm-profiles — create arm profile
  • PATCH /v1/arm-profiles/{id} — update arm profile
  • DELETE /v1/arm-profiles/{id} — delete arm profile
  • PATCH /v1/arm-profiles/settings — set current arm profile
  • POST /v1/arm-profiles/enable — enable alarm
  • POST /v1/arm-profiles/disable — disable alarm
Sirens (6)
  • GET /v1/sirens, GET /v1/sirens/{id} — list / details
  • PATCH /v1/sirens/{id} — update settings
  • POST /v1/sirens/{id}/play, POST /v1/sirens/{id}/stop — control
  • POST /v1/sirens/{id}/test-sound
Speakers (4)
  • GET /v1/speakers, GET /v1/speakers/{id}, PATCH /v1/speakers/{id}
  • POST /v1/speakers/{id}/test-sound
Fobs (3) — 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
Bridges (3) — 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
Users (4)
  • GET /v1/users, GET /v1/users/{id} — Protect users
  • GET /v1/ulp-users, GET /v1/ulp-users/{id} — UniFi Identity users
Point of sale (1)
  • POST /v1/pos/cameras/{id}/transactions — ingest POS transaction
All proxy through the Cloud Connector under /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 snapshots scripts/mobility-api-spec-v1.0.0.json, scripts/innerspace-api-spec-v1.3.23.json, and scripts/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).
Mobility v1.0.0 (8) — cloud API on 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_workspaces
  • GET /v1/mobility/workspaces/{id}/admins → list_mobility_workspace_admins
  • GET /v1/mobility/workspaces/{id}/devices (limit 1–200, offset) → list_mobility_devices
  • GET /v1/mobility/workspaces/{id}/devices/{id} → get_mobility_device
  • PUT /v1/mobility/workspaces/{id}/devices/{id} (name 1–32) → update_mobility_device
  • GET /v1/mobility/workspaces/{id}/devices/{id}/clients → list_mobility_device_clients
  • PUT /v1/mobility/workspaces/{id}/devices/{id}/network (snake_case DHCP body: host_address, dhcp_mode dhcp|none, dhcp_range_start/stop, dhcp_lease_time) → update_mobility_device_network
  • PUT /v1/mobility/workspaces/{id}/devices/{id}/wireless (ssid, password required) → update_mobility_device_wireless
InnerSpace v1.3.23 (6, read-only) — Cloud Connector proxy (/v1/connector/consoles/{consoleId}/proxy/innerspace/integration/...), console_id parameter per tool (from list_hosts), no writes:
  • GET v1/access_points → list_innerspace_access_points
  • GET v1/floor_plans → list_innerspace_floor_plans
  • GET v1/inventory → list_innerspace_inventory
  • GET v1/project → get_innerspace_project
  • GET v1/switches (optional siteId query) → list_innerspace_switches
  • GET v1/assets/{planId}/{filename} → download_innerspace_asset
Carrier Fabric v1.0.0 (11) — cloud API on 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_plans
  • GET /v1/carrier/service-plans/{id} → get_carrier_service_plan
  • GET /v1/carrier/subscribers (limit/offset/planId/suspended) → list_carrier_subscribers
  • POST /v1/carrier/subscribers (subscriberNumber required 1–32; optional camelCase name, email, notes, serviceAddress, planId, hostId, metadata) → create_carrier_subscriber
  • GET /v1/carrier/subscribers/{id} → get_carrier_subscriber
  • PATCH /v1/carrier/subscribers/{id} (only provided fields; spec semantics: absent = unchanged, explicit null = clears — this tool only sends provided fields) → update_carrier_subscriber
  • PUT /v1/carrier/subscribers/{id}/host (hostId) → attach_carrier_subscriber_host
  • DELETE /v1/carrier/subscribers/{id}/host → detach_carrier_subscriber_host
  • PUT /v1/carrier/subscribers/{id}/plan (planId) → assign_carrier_subscriber_plan
  • POST /v1/carrier/subscribers/{id}/resume → resume_carrier_subscriber
  • POST /v1/carrier/subscribers/{id}/suspend (optional reason) → suspend_carrier_subscriber
New tool exposure profiles mobility, innerspace, carrier (via UNIFI_PROFILE).
Last modified on November 8, 2026