Skip to content

Backup HTTP API

This is the reference for the two operations on the backup OpenAPI tag — GetBackupCatalog and GetBackupRestorePlan. It maps each operation to its OpenAPI schema, the ReBAC gate, and the closed Problem.code taxonomy. The wire-contract origin is api/openapi/plexsphere-v1.yaml; this doc is a map, not a duplicate contract.

The backup surface is the platform-scoped, read-only self-description of the disaster-recovery posture: what plexsphere backs up (the per-store coverage table with method, cadence, and retention), the RPO/RTO targets per plane, the explicit exclusions of what is deliberately not backed up, and the ordered restore sequence operators follow during disaster recovery. It serves the catalog; it does not take backups — the artefact streaming, snapshotting, and freshness verification live in the cmd/plexsphere-backup utility CLI, and the operator runbook is ../../operations/dr.md.

Operations

MethodPathOperation IDAuthReBAC gateNotes
GET/v1/platform/backup/catalogGetBackupCatalogoperator bearerplatform#manage, checked before any data is returnedReturns the BackupCatalogentries (per-store coverage), targets (RPO/RTO per plane), exclusions.
GET/v1/platform/backup/restore-planGetBackupRestorePlanoperator bearerplatform#manage, checked before any data is returnedReturns the RestorePlan — the ordered RestoreStep sequence (order contiguous ascending from 1; each step names the store, the action, and the verification).

Both reads gate the manage relation on the platform singleton before touching any data, and each emits an audit row on its read path — platform.backup.catalog.read and platform.backup.restore_plan.read respectively — with the denial row landing audit-first on a 403.

Error taxonomy

All error responses use the shared Problem envelope (application/problem+json); the 403 path uses the richer PermissionDenied shape carrying the ReBAC denial reason, relation_path, and request correlation_id.

StatusCodeMeaning
401unauthenticatedRequest carries no authenticated principal.
403(PermissionDenied)The caller lacks platform#manage.
500internalServer-side failure path; details are logged, never surfaced.
501backup_not_provisionedThe composition root has not wired the backup surface in this build; log scrapers alert on the deferred-wiring state.

Cross-references