Skip to content

Backups & snapshots

A snapshot is a point-in-time capture of a site — its database and files together. You take a snapshot with a backup, restore one in place, and read a per-site rollup across your whole account at GET /v1/backups/status. Snapshots are how you roll back data, where a deployment rollback rolls back code.

Field Type Description
id string Stable identifier, e.g. snap_01J8....
site_id string The site this snapshot was taken from.
taken_at string RFC 3339 timestamp of the capture.
size_bytes integer Size of the snapshot.
tags string How the snapshot came to be, e.g. scheduled vs on-demand.
synced_at string When the snapshot was last synced to off-host storage.
retention_reason string | null Why the snapshot is being kept beyond the normal window, if it is.

backups:read List a site’s snapshots, cursor-paginated.

List a site's snapshots
curl "https://api.managed.dev/v1/sites/site_01J7.../snapshots?limit=20" \
-H "Authorization: Bearer mfk_live_..."
Response
{
"data": [
{
"id": "snap_01J8...",
"site_id": "site_01J7...",
"taken_at": "2026-06-24T03:00:11Z",
"size_bytes": 412300544,
"tags": "scheduled",
"synced_at": "2026-06-24T03:12:40Z",
"retention_reason": null
}
],
"pagination": { "next_cursor": "eyJ0...", "has_more": true },
"request_id": "req_01J9..."
}

backups:write Take a snapshot now. Returns a 202 job (type backup.create); the new snapshot_id is on the job’s result when it succeeds.

Take a snapshot before a risky change
curl -X POST https://api.managed.dev/v1/sites/site_01J7.../backup \
-H "Authorization: Bearer mfk_live_..." \
-H "Idempotency-Key: 3f8c...b1"
Response (202 Accepted)
{
"data": {
"id": "job_01J9...",
"type": "backup.create",
"status": "queued",
"progress": 0,
"created_at": "2026-06-24T14:50:33Z",
"resource": { "type": "backup", "id": "site_01J7...", "site_id": "site_01J7..." },
"result": null,
"error": null,
"links": { "self": "/v1/jobs/job_01J9...", "stream": "/v1/jobs/job_01J9.../stream" }
},
"request_id": "req_01J9..."
}

POST /v1/sites/{siteID}/snapshots/{snapID}/restore

Section titled “POST /v1/sites/{siteID}/snapshots/{snapID}/restore”

backups:write Restore a snapshot in place, replacing the site’s current database and files. Returns a 202 job (type backup.restore).

Restore a snapshot
curl -X POST https://api.managed.dev/v1/sites/site_01J7.../snapshots/snap_01J8.../restore \
-H "Authorization: Bearer mfk_live_..." \
-H "Idempotency-Key: a90d...5e"

backups:read A cross-site rollup: for every site you own, the latest snapshot’s age and size plus the status of the last backup job. One call answers “is everything backed up?” — for a dashboard or a nightly check. truncated is true when your owned-site set exceeded the per-request cap.

Check backup health across the account
curl https://api.managed.dev/v1/backups/status \
-H "Authorization: Bearer mfk_live_..."
Response
{
"data": {
"truncated": false,
"sites": [
{
"site_id": "site_01J7...",
"slug": "acme-store",
"domain": "acme-store.com",
"latest_snapshot_at": "2026-06-24T03:00:11Z",
"snapshot_age_seconds": 42600,
"size_bytes": 412300544,
"last_backup_status": "succeeded"
}
]
},
"request_id": "req_01J9..."
}