Skip to main content

Backup endpoints

Minimum role: backup (manager and admin also match; GET /backups/info is additionally an info path).

On the v1 tree, partial backup/restore bodies and backup content listings use the addons key; on /v2 the same endpoints use apps. Both are shown below.

MethodPathRoleDescription
GET/backupsbackupList backups
GET/backups/infobackupBackup list plus manager settings
POST/backups/optionsbackupSet backup manager options
POST/backups/reloadbackupRescan backup locations
POST/backups/freezebackupFreeze the system for an external backup
POST/backups/thawbackupEnd a manual freeze
POST/backups/new/fullbackupCreate a full backup
POST/backups/new/partialbackupCreate a partial backup
POST/backups/new/uploadbackupUpload a backup tar (multipart)
GET/backups/{slug}/infobackupBackup details
DELETE/backups/{slug}backupRemove a backup
POST/backups/{slug}/restore/fullbackupFull restore
POST/backups/{slug}/restore/partialbackupPartial restore
GET/backups/{slug}/downloadbackupDownload the backup tar

Locations

A location value of null, "", or .local means local storage; any other string must name a configured mount with backup usage. A reserved cloud-backup location exists but is accepted only for requests coming from ApexOS Core — any other caller gets 403.

GET /backups

Response data: {"backups": [...]}. Each entry: slug, name, date, type, size, size_bytes, location, locations, protected, location_attributes (per-location protected and size_bytes), compressed, and content{"apexos": bool, "addons": [slugs], "folders": [...]} (v2: apps instead of addons).

GET /backups/info

Same list plus days_until_stale.

POST /backups/options

FieldType
days_until_staleint

POST /backups/freeze

FieldTypeDescription
timeoutint ≥ 1Automatic thaw timeout

POST /backups/new/full

FieldTypeDefaultDescription
namestringBackup name
filenamestring *.tarTarget file name (no path separators)
passwordstring | nullEncrypt the backup
compressedboolean | nullCompress archive
locationstring or listlocalOne or more target locations
apexos_exclude_databasebooleanExclude the Core database
backgroundbooleanfalseReturn immediately with job_id
extradictArbitrary metadata stored with the backup

Response data: job_id, plus slug when run in the foreground.

POST /backups/new/partial

All full-backup fields, plus:

FieldTypeDescription
addons (v2: apps)list of slugs or "ALL"Apps to include; "ALL" expands to every installed app
folderslistFolders to include
apexosbooleanInclude the Core runtime

POST /backups/new/upload

Multipart upload of a .tar file. Query parameters: location (repeatable) and filename (must match *.tar). Response data: {"slug": "..."}.

GET /backups/{slug}/info

Response data keys: slug, type, name, date, size, size_bytes, compressed, protected, location_attributes, supervisor_version, apexos (Core version in backup), location, locations, addons (v2: apps — each with slug, name, version, size), repositories, folders, apexos_exclude_database, extra.

DELETE /backups/{slug}

FieldTypeDescription
locationstring or listOnly remove the copies at these locations

POST /backups/{slug}/restore/full

FieldTypeDefault
passwordstring | null
backgroundbooleanfalse
locationstringbackup's location

Response data: {"job_id": "..."}.

POST /backups/{slug}/restore/partial

Full-restore fields plus apexos (boolean), addons (v2: apps, list of slugs), folders (list).

GET /backups/{slug}/download

Returns application/tar. Query parameter location selects which stored copy to stream. Responds 404 (and triggers a location rescan) if the file is missing.