Snapshots
A snapshot is a point-in-time copy of one volume:- Console
- API
- CLI
- Go
Go to Storage → Snapshots and choose Create Snapshot, then pick the
Volume and give it a Name. The volume’s own page has a Create
Snapshot button that opens the same form with that volume already
selected; it is disabled unless the volume is
available or in_use.1
Take it
Allowed against a volume in
available or in_use — you do not have
to detach to snapshot. The snapshot is created asynchronously (202,
status creating).2
Wait for available
Poll
GET /v1/snapshots/{snapshot_id}. available means the snapshot is
complete and can be restored from; error puts the reason in
error_message.nightly on two different volumes
is fine. size_gb is the volume’s size frozen at the moment the snapshot was
taken — the volume may have been extended since, so do not read it as the
volume’s current size, and do not read it as the space the snapshot occupies.
Restoring from a snapshot
Restoring means creating a new volume from the snapshot. There is no in-place rollback:- Console
- API
- CLI
- Go
On Create Volume, switch Source to From snapshot and choose the
Snapshot. Size (GB) must be at least the snapshot’s size, and the
Tier is yours to pick — a restore is not tied to the tier the source
volume was on.Storage → Snapshots also has a Create volume from snapshot row
action that opens the same form with the snapshot filled in.
available, and size_gb must be at least the
snapshot’s frozen size — you can restore onto a larger volume, never a smaller
one. The restored volume records source_snapshot_id, which is also what stops
retention from reaping a snapshot something still depends on.
Snapshot policies
A policy is a schedule attached to one volume: take a snapshot everyinterval_minutes, then keep at most retention_count of the snapshots that
policy created.
- Console
- API
- CLI
- Go
A schedule belongs to one volume, so it lives on that volume rather than in
a list of its own. Open the volume, go to its Settings tab, and fill in
the Snapshot schedule card: Name, Every (minutes), Keep, and
optionally Also delete after (days). Choose Attach schedule.Once a schedule exists the card gains a switch that pauses it, and its
buttons become Save and Remove schedule.
one policy per volume
required
Attaching a second policy to the same volume is a
409. Update the existing
one instead.1–43200
required
A minimum gap, not an exact cadence. A snapshot lands at or after the
interval and never before, and can land a minute or two late when the
scheduling pass is busy. The floor is one minute because that is how often
the pass evaluates schedules; the ceiling is 30 days.
1–256
required
How many of this policy’s snapshots to keep. When a run takes the count past
this, the oldest go first.
0–3650, default 0
An optional age bound applied on top of the count: a snapshot outside
either window is reaped.
0 means no age bound.The first snapshot lands one interval from now. Attaching a schedule is not
itself a request for a snapshot — use
POST /v1/snapshots if you want one
immediately.<policy>-<UTC timestamp>, for example
nightly-20260115T000000Z, and they inherit the policy’s tags so a listing
tells you which schedule produced them without a second lookup.
What retention will never delete
A schedule is also an automatic deleter, so the limits on what it can remove matter more than the limits on what it keeps:Snapshots you took by hand
Retention only matches snapshots carrying this policy’s
snapshot_policy_id. A snapshot a person created has none and is never a
candidate, whatever tags it has.Snapshots something depends on
A snapshot a volume was created from — including a restore still running —
is skipped and re-examined on a later run. It becomes reapable once the
dependent volume is gone.
The single newest snapshot
The newest snapshot is exempt from the age bound. A volume that could
not be snapshotted for longer than the window never loses its whole
history that way.
Anything, while paused
enabled: false pauses the entire policy — no snapshots taken and none
deleted. A paused schedule that kept reaping would delete history while you
were looking at it.Reading a schedule’s state
GET /v1/snapshot-policies/{policy_id} returns where the policy is in its
cycle:
last_error is the field to check on a schedule that has stopped producing
snapshots — it carries reasons like an exhausted snapshots quota, or a volume
that was mid-extend when the window came around. The Snapshot schedule card
prints all three, so a stalled schedule can be read without leaving the console.
A missed window costs one snapshot, not one per window missed.
next_run_at is re-stamped to now + interval_minutes each time the policy
fires, never to previous + interval, so a schedule that could not run for
six hours takes a single snapshot when it resumes rather than a catch-up
burst. Changing interval_minutes re-bases the next run off now too, so
shortening a daily schedule to hourly takes effect within the hour.