Skip to main content

App endpoints

Apps (the fork's name for add-ons — the Supervisor module is apps) are managed under the v1 prefix /addons and the v2 prefix /apps. Both prefixes are served by the same handlers; only the list-payload key differs (addons on v1, apps on v2). This page uses the v1 paths.

The path parameter {app} is an app slug. The special slug self refers to the calling app itself, and most self endpoints are token-bypass paths usable by any installed app (see overview).

Minimum role: manager for everything under /addons, with two exceptions: POST /addons/{app}/security requires admin, and POST /addons/{app}/sys_options is callable only by ApexOS Core. GET /addons/{app}/info is also readable via the info-path rule by any role.

MethodPathRoleDescription
GET/addonsdefault¹List installed apps
GET/addons/{app}/infodefaultApp details (store fallback for not-installed apps)
POST/addons/{app}/uninstallmanagerUninstall app
POST/addons/{app}/startmanagerStart app
POST/addons/{app}/stopmanagerStop app
POST/addons/{app}/restartmanagerRestart app
POST/addons/{app}/optionsmanagerSet user options
POST/addons/{app}/sys_optionscore onlySet system-managed flags
POST/addons/{app}/options/validatemanagerValidate an options payload
GET/addons/{app}/options/configself onlyValidated options of the calling app
POST/addons/{app}/rebuildmanagerRebuild a locally-built app
POST/addons/{app}/stdinmanagerWrite raw bytes to the app's stdin
POST/addons/{app}/securityadminToggle the protected flag
GET/addons/{app}/statsmanagerContainer resource statistics
GET/addons/{app}/logsmanagerJournal logs (text/plain)
GET/addons/{app}/logs/followmanagerStreamed logs
GET/addons/{app}/logs/latestmanagerLogs since last container start
GET/addons/{app}/logs/boots/{bootid}managerLogs for a specific boot
GET/addons/{app}/logs/boots/{bootid}/followmanagerStreamed logs for a boot

¹ GET /addons is not an info path; in practice listing requires manager unless called via /addons/self/... bypass semantics. The /info sub-paths follow the info rule.

Store-related legacy routes registered under /addons (/addons/reload, /addons/{app}/install, /addons/{app}/update, icon/logo/changelog/documentation) are documented with the store endpoints.

GET /addons

Response data: {"addons": [...]} (v2: {"apps": [...]}). Each entry: name, slug, description, advanced (deprecated), stage, version, version_latest, update_available, available, detached, apexos (minimum Core version), state, repository, build, url, icon, logo, system_managed.

GET /addons/{app}/info

Response data keys: name, slug, hostname, dns, description, long_description, advanced (deprecated), stage, repository, version_latest, protected, rating, boot_config, boot, options, schema, arch, machine, apexos, url, detached, available, build, network, network_description, host_network, host_pid, host_ipc, host_uts, host_dbus, privileged, full_access, apparmor, icon, logo, changelog, documentation, stdin, supervisor_api, supervisor_role, auth_api, apexos_api, gpio, usb, uart, kernel_modules, devicetree, udev, docker_api, video, audio, startup, services, discovery, translations, ingress, signed, state, webui, ingress_entry, ingress_url, ingress_port, ingress_panel, audio_input, audio_output, auto_update, ip_address, version, update_available, watchdog, devices, system_managed, system_managed_config_entry.

options is redacted to {} when a different app with a role below manager reads another app's info (options may contain secrets). If the app is known in the store but not installed, the store info is returned with state: "unknown" and the store defaults as options.

POST /addons/{app}/options

All fields optional; null resets a field to its default:

FieldTypeDescription
boot"auto" | "manual"Boot mode (rejected if the app pins manual_only)
networkdict | nullDocker port mappings
auto_updatebooleanEnable auto-update
audio_outputstring | nullAudio output device
audio_inputstring | nullAudio input device
ingress_panelbooleanShow ingress panel entry
watchdogbooleanEnable watchdog
optionsdict | nullApp configuration (validated against the app's schema)

POST /addons/{app}/sys_options (core only)

FieldType
system_managedboolean
system_managed_config_entrystring | null

POST /addons/{app}/options/validate

Body: an options object to validate (or empty to validate the currently stored options). Response data: message (string), valid (boolean), pwned (boolean or null). When pwned-secret enforcement is active, options containing compromised secrets are reported invalid.

GET /addons/{app}/options/config

Only callable with the literal slug self; returns the calling app's validated options object.

POST /addons/{app}/security (admin)

FieldTypeDescription
protectedbooleanToggle the protection flag

POST /addons/{app}/uninstall

FieldTypeDefaultDescription
remove_configbooleanfalseAlso delete the app's config folder

POST /addons/{app}/rebuild

FieldTypeDefault
forcebooleanfalse

POST /addons/{app}/stdin

Raw request body is forwarded to the app's stdin. Fails unless the app declares stdin support.

GET /addons/{app}/stats

Response data keys: cpu_percent, memory_usage, memory_limit, memory_percent, network_rx, network_tx, blk_read, blk_write.

Logs

Log routes return text/plain and match the app's journal identifiers (addon_{slug} and app_{slug}). The query options described for core logs apply.