Skip to content

List the project's recovery points.

GET
/v1/projects/{projectId}/backup/recovery-points
Code sample: Shell / cURL
curl --request GET \
--url https://stratum.example.com/v1/projects/example/backup/recovery-points \
--header 'Authorization: Bearer <token>'

Plan-produced points only (rows carrying this project’s id) operator/admin points never appear. Newest first.

projectId
required
string
/^p-[a-z0-9-]+$/
volumeId
string
planId
string
vaultId
string

Recovery points.

Media typeapplication/json

List envelope for GET /v1/backup/admin/recovery-points.

object
items
required
Array<object>

One backup attempt (v1); cluster-state or per-volume.

object
id
required

Rp-… identifier.

string
scope
required

What this recovery point backs up (adds volume).

string
Allowed values: cluster-state volume
resourceId

The backed-up resource for scope=volume (a vol- id); absent for cluster-state.

string
status
required
string
Allowed values: running succeeded failed
bundleName

Bundle file name on the target (stratum-backup-…tar.age).

string
sizeBytes
integer format: int64
nullable
sha256
string
manifest

What a bundle contains — readable without decrypting it. Also embedded as manifest.json inside the bundle.

object
version
required
string
commit
required
string
capturedAt
required
string format: date-time
imageDigests
object
key
additional properties
string
items
required
Array<object>

One captured artifact. sizeBytes -1 marks an optional item that was absent at capture time (recorded, not shipped).

object
name
required
string
sizeBytes
required
integer format: int64
sha256
string
optional
boolean
source

The source volume a per-volume bundle was taken from — recorded at backup time so a NEW volume can be created from the bundle after the original row is gone. Absent on cluster-state bundles and on volume bundles produced before. sizeBytes is the plaintext image size (the source volume’s provisioned size), not the ciphertext size.

object
volumeId
string
volumeName
string
projectId
string
sizeBytes
integer format: int64
storageClass
string
pool
string
driver
string
sha256

Hex sha256 of the plaintext image (pre-compression), recorded at backup time; restore verifies the imported bytes against it and rolls back on mismatch. Empty on older bundles.

string
encrypted

True when the source volume was LUKS-encrypted under its own key (lvm-thin volume encryption). The bundle then holds ciphertext that only the source volume’s key opens: it restores in place onto that volume, and a restore into a new volume is refused. Absent on plaintext volumes and on older bundles.

boolean
error

Why the backup failed (status failed), for a person.

string
errorCode

A failed volume backup’s stable refusal code, for a client to branch on: BACKUP_UNSUPPORTED (the volume’s driver cannot export) or VOLUME_NOT_ON_THIS_NODE (a node-local lvm-thin volume on another node than the control plane that ran the backup, e.g. a plan run on the leader). Absent for any other failure.

string
startedAt
required
string format: date-time
finishedAt
string format: date-time
nullable
projectId

Owning project for plan-produced points; absent on admin points.

string
planId

Producing backup plan (bp-…); absent on admin points.

string
vaultId

Containing backup vault (bv-…); absent on admin points.

string
prunedAt

Set once retention deleted the bundle; the row stays as history.

string format: date-time
nullable
backupKind

How the bundle was produced (/854): full = standalone raw export; base = an incremental chain’s root; diff = an increment that only restores together with its ancestors. Absent means full.

string
Allowed values: full base diff
parentRpId

The recovery point this diff builds on (chain lineage,); only set for diff points. Walk it to the base to render a chain.

string
chainDepth

Number of segments (base through this point) the point’s restore applies. 1 for full/base. Single-point reads only; compute chains client-side on lists via parentRpId.

integer
chainSizeBytes

Summed bundle bytes across the chain (base + diffs up to this point). Single-point reads only.

integer format: int64

Example

{
"items": [
{
"scope": "cluster-state",
"status": "running",
"backupKind": "full"
}
]
}

Authenticated but not authorized.

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
>= 400 <= 599
detail
string
instance
string format: uri-reference
requestId
required
string
code
required
string
issues

The findings of a rejected IAM policy document (custom and resource policies).

Array<object>

One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.

object
code
required

The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.

string
statement
required

Index of the statement at fault; -1 for the document as a whole.

integer
>= -1
detail
required
string
action

The offending action, where one is at fault (ACTION_NOT_APPLICABLE).

string
errors

Field errors, for codes that carry them: each problem at its field (see FieldError). Documented on the responses that set it, e.g. approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED. Absent otherwise.

Array<object>

One field’s problem, the stage-2 installer API’s shape. field is the field’s path, message what is wrong with it.

object
field
required

The field’s path, e.g. links[0].interface, disks[1].confirm, mgmt.address or role; empty for the whole request.

string
message
required
string
details

Structured facts about the refusal, for codes that carry them. The shape is fixed per code and documented on the response that answers it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and IMAGE_IN_USE. Absent for codes that carry none.

object
key
additional properties
any

Example

{
"issues": [
{
"code": "ACTION_NOT_APPLICABLE",
"action": "compute:CreateVpc"
}
]
}