Everything here applies to console mode only — direct connection does not involve Apollo at all. This page preserves the findings from #4, which is the most complete public record of how Apollo provisioning works.
Apollois Ubiquiti's internal name for the UniFi Play product line and for the console application that watches it. In UniFi OS the section is labelled Apollo, not "UniFi Play" — only the hardware is branded Play. It serves the/proxy/apollo/api/v1/API this integration's console mode uses.- You never install it yourself. It is a separately versioned package that the console
downloads and installs automatically when it discovers Play hardware —
apollois the only application in UniFi OS's catalogue flaggedinstallOnDeviceDiscovery: true. - Even where it runs, Apollo is a passive observer. On a working console its
/deviceslist reports speakers asMANAGED_BY_OTHERwith empty runtime state, and its own device database is empty — the speakers are managed by the Play mobile app, and control is direct MQTT. This is why the integration can bypass Apollo entirely.
Reported in #4:
| Console | Channel tested | Apollo |
|---|---|---|
| UDM Pro | Early Access | Working |
| UDM Pro | release-candidate |
Working |
| UCG-Fiber | release, then beta |
Never installs |
| Cloud Key Plus | beta |
Never installs |
Changing your update channel is not a workaround — this has been tested. Two
consoles were moved to beta, the highest tier, with Play hardware already adopted, and
Apollo still never installed. The cleanest evidence is a single owner's two consoles on
identical firmware (v5.1.27), both on non-Official channels, both with Play hardware:
Apollo runs on the UDM Pro and is entirely absent on the Cloud Key Plus. Model is the
only variable left.
Two conditions must hold before a console fetches Apollo; both are necessary, neither alone is sufficient:
- A Play device is discovered on it. A UDM Pro on
release-candidatesat for six months loggingPackage "apollo" not installedevery boot, then installed Apollo the day a Play device appeared. - A package exists for the console's model at or below its channel
(
releaseChannelinfirmware.yaml, seen in logs asmax_release_channel). Apollo is not distributed through apt —unifi-corefetches the.debdirectly from Ubiquiti — so there is no repository you can add.
Caveats learned the hard way:
runnables.yaml'sreleaseChannels:map is a per-application channel preference you can change, not a record of where Ubiquiti publishes packages. Do not infer availability from it.- Do not rely on
consoleGroup.yamleither: its schema differs by platform (application catalogue on one UDM Pro, console-group membership on a UCG-Fiber), and it is not the install gate. - Play hardware appearing in the UniFi Network device list is independent of Apollo: a Cloud Key Plus listed five Audio Ports in Network while never gaining Apollo.
- None of this conflicts with Play being a retail product: the hardware is driven by the Play mobile app and needs no console, so Apollo's rollout is invisible to normal buyers.
This sequence distinguishes Apollo was never fetched from installed but broken:
ps auxwww | grep -i apollo # is it running at all?
systemctl list-unit-files | grep -i apollo # is there a service?
grep -i apollo /data/unifi-core/logs/uos.log | tail -5 # fetch or version probe
grep -i releaseChannel /data/unifi-core/config/firmware.yaml # for the recordERROR Exit with error: Package "apollo" not installed plus no systemd unit and no
process means the package has never been on the console. Look for a
Start to download package package_name=apollo line: its absence means the console
never requested the package; a failed install would instead leave a download or unpack
error.
curl -k -sS -i \
-H "X-API-KEY: YOUR_KEY_HERE" \
-H "Accept: application/json" \
"https://192.168.10.1/proxy/apollo/api/v1/devices"Read the content-type, not just the status line. UniFi OS has no route for a
proxy path whose application is not installed, so the request falls through to the web
UI and comes back 200 with an HTML body — even with a perfectly valid key:
| Response | Meaning |
|---|---|
200 + application/json |
Working. Apollo installed and the key accepted |
200 + text/html |
No Apollo application on this console — that is the web UI |
401 + application/json |
Apollo is installed; the key was rejected |
404 + text/plain |
Apollo is installed but has no such path |
Note the header must be X-API-KEY: <key> — curl silently ignores a -H value with
no colon in it, which looks exactly like an auth failure.
If Apollo never appears on your console, the answer is not configuration — use the integration's direct connection mode, which needs none of this. If you have a data point to add (console model, channel, whether Apollo installed), please post it in #4.