Which UniFi resources are reachable through the Internal API, the Official API, or both.
This is an exhaustive map of every UniFi resource the library exposes across its two client
surfaces — the Legacy Internal API (c.Internal(), unifi.InternalClient) and the Official
OpenAPI (c.Official(), official.Client). Every legacy resource type and every official resource
surface (except the Supporting enum/lookup helper) appears below — either as its own row or merged with
its counterpart when both surfaces model the same real-world resource.
Use it to decide which surface to reach for a given resource. New to the split? Start with
Choosing a surface.
This table reflects the live accessors in unifi/official/client.generated.go and the resource types in
unifi/*.generated.go at the time of last regeneration. It is maintained with the unifi-coverage-matrix
skill and refreshed when the surfaces change.
Official API exposes these as "DNS Policies", whose union variants are A/AAAA/CNAME/etc. records — the same entries the legacy DNS Records resource manages; only the naming differs.
Legacy FirewallZonePolicy provides zone-based policies with full CRUD (the direct counterpart of Official Firewall.Policy); Official additionally exposes policy ordering and patch operations absent from the legacy surface.
Firewall Rules
❌
✅
Legacy rule-based firewall model (pre-zone); superseded by zone-based Firewall Policies on the Official side.
Official API exposes RADIUS profiles read-only via the excluded Supporting lookup helper, not as a managed resource.
User Groups
❌
✅
Users (Network Clients)
⚠️
✅
Legacy User manages known client devices with full CRUD (aliases, fixed IPs, WLAN groups); Official Clients covers connected-client listing and network actions only.
Official provides a dedicated controller info endpoint (Info.Get); legacy has no equivalent resource.
Dashboard
❌
✅
Schedule Tasks
❌
✅
Sites
✅
✅
Both surfaces cover sites; Legacy InternalClient provides full Sites CRUD (CreateSite, DeleteSite, GetSite, ListSites, UpdateSite). Official uses UUIDs as identifiers while Legacy uses site names; use Sites().ResolveID to map name→UUID when working across both surfaces.
These are singleton configuration endpoints exposed by the legacy InternalClient as GetSetting* /
UpdateSetting* (Get + Update — the full natural scope of a singleton). The Official API exposes no settings
endpoints. See the Settings catalogue for the typed accessors.