Skip to content
SHC Docs

Backup API

Backup / restore, backup groups, retention, backup FUSE mounts, mount sessions, container-volume mounts, async operation streaming, and stack rollback. Routes are split across router.go, router_mounts.go, router_volumes.go, and the backup/mount subpackage, all mounted on the backup module’s chi router.

Hand-maintained notes against modules/backup/*.go (+ backup/mount/router.go). Route inventory (generated): routes.md and mount sessions. Response models (generated): response-models/backup.md.

MethodPath
POST/api/method/shc.backup.create
POST/api/method/shc.backup.create_async
POST/api/method/shc.backup.detect_snapshot
GET/api/method/shc.backup.export/{backup_id}
POST/api/method/shc.backup.import
POST/api/method/shc.backup.restore
POST/api/method/shc.backup.restore_async
POST/api/method/shc.backup.restore_from_file
POST/api/method/shc.backup.restore_from_file_async
POST/api/method/shc.backup.recover
POST/api/method/shc.backup.recover_async
POST/api/method/shc.backup.verify/{backup_id}
POST/api/method/shc.backup.sync

shc.backup.detect_snapshot requires platform:manage — it discloses host filesystem topology, so it takes the same admin gate as the mount routes below. Every other route in this table is open to any authenticated caller. Per-route permissions are listed authoritatively in the generated route reference.

MethodPath
POST/api/method/shc.backup.group
GET/api/method/shc.backup.group_manifest/{consistency_id}
POST/api/method/shc.backup.restore_group/{consistency_id}
POST/api/method/shc.backup.ungroup/{group_id}
MethodPath
GET/api/resource/Backup
GET/api/resource/Backup/{backup_id}
GET/api/resource/Backup/{backup_id}/manifest
DELETE/api/resource/Backup/{backup_id}

These routes share the shc.backup.retention.* URL namespace but are registered by the retention module, not the backup module.

MethodPath
GET/api/method/shc.backup.retention.get
POST/api/method/shc.backup.retention.set
POST/api/method/shc.backup.retention.reset
POST/api/method/shc.backup.retention.preview
POST/api/method/shc.backup.retention.apply

retention.preview reports which snapshots a policy WOULD forget without deleting anything; retention.apply executes the forget/prune.

MethodPath
GET / POST/api/method/shc.backup.schedule.list
POST/api/method/shc.backup.schedule.get
POST/api/method/shc.backup.schedule.set
POST/api/method/shc.backup.schedule.unset

Rollback to a prior backup point — registered by the backup module because it drives the restore machinery.

MethodPath
POST/api/method/shc.stack.rollback
POST/api/method/shc.stack.rollback.list

Async operation streaming (shc.operation.*)

Section titled “Async operation streaming (shc.operation.*)”

Long-running backup/restore/recover operations return an operation_id; follow progress with these routes. Streaming is Server-Sent Events — see SSE streaming.

MethodPath
GET/api/method/shc.operation.stream/{operation_id}
GET/api/method/shc.operation.state/{operation_id}

Mount a restic snapshot read-only for browsing. Require platform:manage.

MethodPathPurpose
POST/api/method/shc.backup.mountMount a snapshot read-only
POST/api/method/shc.backup.umountUnmount a mounted snapshot
GET/api/method/shc.backup.mountsList active snapshot mounts

Interactive FUSE mount-session filesystem surface, registered by the backup/mount subpackage. {session_id} identifies a live session.

MethodPathPurpose
POST/api/method/shc.mount.createCreate mount session
GET/api/method/shc.mount.listList live sessions
GET/api/method/shc.mount.subscribe/{session_id}SSE change feed — pins the session
POST/api/method/shc.mount.ping/{session_id}Keep-alive (refresh the sliding TTL)
DELETE/api/method/shc.mount.{session_id}Close mount session
GET/api/method/shc.mount.{session_id}/statFile/directory metadata (incl. symlink_target)
GET/api/method/shc.mount.{session_id}/readRead file bytes (base64)
GET/api/method/shc.mount.{session_id}/readdirList directory contents
GET/api/method/shc.mount.{session_id}/changesList pending (uncommitted) changes
PUT/api/method/shc.mount.{session_id}/writeWrite bytes (writable only)
POST/api/method/shc.mount.{session_id}/createCreate file (writable only)
POST/api/method/shc.mount.{session_id}/mkdirCreate directory (writable only)
POST/api/method/shc.mount.{session_id}/renameRename/move (writable only)
POST/api/method/shc.mount.{session_id}/chmodChange permissions (writable only)
POST/api/method/shc.mount.{session_id}/symlinkCreate symbolic link (writable only)
POST/api/method/shc.mount.{session_id}/commitCommit changes → new backup
POST/api/method/shc.mount.{session_id}/discardDiscard pending changes
DELETE/api/method/shc.mount.{session_id}/rmdirRemove directory (writable only)
DELETE/api/method/shc.mount.{session_id}/unlinkDelete file (writable only)

Container-volume mounts (shc.volume.*, shc.pod.mount, admin)

Section titled “Container-volume mounts (shc.volume.*, shc.pod.mount, admin)”

Mount live container/stack volumes. Require platform:manage.

MethodPathPurpose
POST/api/method/shc.volume.mountMount a stack volume
POST/api/method/shc.volume.umountUnmount a stack volume
GET/api/method/shc.volume.mountsList active volume mounts
POST/api/method/shc.pod.mountMount a container’s volumes

POST /api/method/shc.backup.restore_from_file

Section titled “POST /api/method/shc.backup.restore_from_file”
  • summary: synchronous restore from an uploaded/local backup file (async variant: shc.backup.restore_from_file_async).
  • source: modules/backup/router.go

POST /api/method/shc.backup.restore_group/{consistency_id}

Section titled “POST /api/method/shc.backup.restore_group/{consistency_id}”