Skip to content

Backups ​

Status, plan, runs, points, verification and retention of the built-in backup agent.

Operations of this group with their access rule, retry rule, parameters and answers. Every request carries a key: Authorization: Bearer <key> (see Authentication).

Operations ​

Get the backup status ​

GET HEAD /api/v1/backup/status

Access: System permission backup.read · Retry: Safe to repeat (read)

Summarizes the backup system: the vault (configured, available, free and total bytes), the backup agent (online, last heartbeat, version), the plan, the newest completed point, the next scheduled run, the running job and warnings, each a code such as agent_offline or backup_stale with severity warning or critical. The vault is reported unavailable while the agent is offline. It contains no paths or secrets.

Response 200

FieldTypeRequiredRules
vaultobjectyes—
vault.configuredbooleanyes—
vault.idstring (uuid)yesmay be null
vault.availablebooleanyes—
vault.encryptedbooleanyesmay be null; Vault is encrypted; null when unknown or not connected.
vault.freeBytesstringyesa whole number in decimal digits, sent as a string; may be null
vault.totalBytesstringyesa whole number in decimal digits, sent as a string; may be null
agentobjectyes—
agent.onlinebooleanyes—
agent.lastSeenAtstring (date-time)yesmay be null
agent.versionstringyesup to 64 characters; may be null
planobjectyes—
plan.enabledbooleanyes—
plan.hourintegeryes0–23
plan.minuteintegeryes0–59
plan.timezonestringyes1–64 characters; Explicit IANA time zone, e.g. Europe/Moscow; validated by the server.
plan.retentionobjectyes—
plan.retention.dailyintegeryes0–366
plan.retention.weeklyintegeryes0–260
plan.retention.monthlyintegeryes0–120
plan.revisionintegeryes0–2147483647
lastCompletedobjectyesmay be null
lastCompleted.idstring (uuid)yes—
lastCompleted.snapshotAtstring (date-time)yesSnapshot time T; the age of a point counts from T.
lastCompleted.completedAtstring (date-time)yes—
lastCompleted.blobsintegeryesat least 0
lastCompleted.contentBytesstringyesa whole number in decimal digits, sent as a string
lastCompleted.newBytesstringyesa whole number in decimal digits, sent as a string; Bytes this point added to the vault.
lastCompleted.tablesintegeryesat least 0
lastCompleted.rowsintegeryesat least 0
lastCompleted.pinnedbooleanyes—
lastCompleted.verifiedAtstring (date-time)yesmay be null
lastCompleted.verifyDepthstringyesone of structural, deep, null; may be null
lastCompleted.verifyErrorstringyesmatches ^[a-z][a-z0-9_]{0,63}$; may be null
nextRunAtstring (date-time)yesmay be null
runningobjectyesmay be null
running.idstring (uuid)yes—
running.kindstringyesone of capture, verify, retention
running.statestringyesone of queued, running, committing, completed, failed, interrupted
running.phasestringyesmatches ^[a-z][a-z0-9_]{0,63}$; may be null
running.startedAtstring (date-time)yesStart of execution, or the request time while queued.
running.finishedAtstring (date-time)yesmay be null
running.errorCodestringyesmatches ^[a-z][a-z0-9_]{0,63}$; may be null
running.pointIdstring (uuid)yesmay be null
running.progressobjectyes—
running.progress.bytesCopiedstringyesa whole number in decimal digits, sent as a string; Processed bytes: copied or already in the vault.
running.progress.bytesTotalstringyesa whole number in decimal digits, sent as a string
running.progress.blobsCopiedintegeryesat least 0
running.progress.blobsTotalintegeryesat least 0
warningsarray of objectyesup to 10 items
warnings[].codestringyesone of vault_not_configured, agent_offline, schedule_disabled, no_backup_yet, backup_stale, last_run_failed, vault_unavailable, vault_low_space, verify_failed, never_deep_verified
warnings[].severitystringyesone of warning, critical

Responses: 200, 400, 401, 403, 404, 409, 422, 503, 507

Example

bash
curl -X GET "$ARKVORY_URL/api/v1/backup/status" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Get the backup plan ​

GET HEAD /api/v1/backup/plan

Access: System permission backup.read · Retry: Safe to repeat (read)

Returns the daily schedule (enabled, hour and minute in the IANA timezone) and the retention policy (daily, weekly, monthly points to keep) with the revision to send back to updateBackupPlan. Until changed the plan is disabled, with a 02:00 UTC schedule and 7 daily, 4 weekly and 6 monthly points.

Response 200

FieldTypeRequiredRules
enabledbooleanyes—
hourintegeryes0–23
minuteintegeryes0–59
timezonestringyes1–64 characters; Explicit IANA time zone, e.g. Europe/Moscow; validated by the server.
retentionobjectyes—
retention.dailyintegeryes0–366
retention.weeklyintegeryes0–260
retention.monthlyintegeryes0–120
revisionintegeryes0–2147483647

Responses: 200, 400, 401, 403, 404, 409, 422, 503, 507

Example

bash
curl -X GET "$ARKVORY_URL/api/v1/backup/plan" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Replace the backup plan ​

PUT /api/v1/backup/plan

Access: System permission backup.manage · Retry: Repeat only with the expected revision (compare-and-swap)

Replaces the whole plan: enabled, hour (0–23), minute (0–59), timezone and retention (at most 366 daily, 260 weekly, 120 monthly) must all be present. expectedRevision must be the current revision, otherwise 409 revision_mismatch; an invalid field is a 400 with a JSON Pointer in details. The agent follows the new schedule from its next check.

Request body (application/json)

FieldTypeRequiredRules
expectedRevisionintegeryes0–2147483647
enabledbooleanyes—
hourintegeryes0–23
minuteintegeryes0–59
timezonestringyes1–64 characters; Explicit IANA time zone, e.g. Europe/Moscow; validated by the server.
retentionobjectyes—
retention.dailyintegeryes0–366
retention.weeklyintegeryes0–260
retention.monthlyintegeryes0–120

Response 200

FieldTypeRequiredRules
enabledbooleanyes—
hourintegeryes0–23
minuteintegeryes0–59
timezonestringyes1–64 characters; Explicit IANA time zone, e.g. Europe/Moscow; validated by the server.
retentionobjectyes—
retention.dailyintegeryes0–366
retention.weeklyintegeryes0–260
retention.monthlyintegeryes0–120
revisionintegeryes0–2147483647

Responses: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Example

bash
curl -X PUT "$ARKVORY_URL/api/v1/backup/plan" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"expectedRevision":0,"enabled":false,"hour":0,"minute":0,"timezone":"<timezone>","retention":{"daily":0,"weekly":0,"monthly":0}}'

Request a backup now ​

POST /api/v1/backup/runs

Access: System permission backup.manage · Retry: Safe to repeat with the same Idempotency-Key

Queues a capture for the backup agent outside the schedule and returns 202 with the job (kind capture); the agent runs it, then verification and retention. Idempotency-Key is required: repeating it, from the same caller, returns the same job. Follow the job in listBackupJobs. At most 100 backup requests may be open at once (507 queue_full); while no agent is online the job waits.

Parameters

NameInTypeRequiredRules
Idempotency-Keyheaderstringyesmatches ^[A-Za-z0-9_.:-]{1,128}$; Repeat returns the same job; per caller and operation kind.

Response 202

FieldTypeRequiredRules
idstring (uuid)yes—
kindstringyesone of capture, verify, retention
statestringyesone of queued, running, committing, completed, failed, interrupted

Responses: 202, 400, 401, 403, 404, 405, 409, 422, 503, 507

Example

bash
curl -X POST "$ARKVORY_URL/api/v1/backup/runs" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"

List backup jobs ​

GET HEAD /api/v1/backup/jobs

Access: System permission backup.read · Retry: Safe to repeat (read)

Lists capture, verify and retention jobs, newest first, each with its state (queued, running, committing, completed, failed, interrupted), phase, times, errorCode, the resulting point and progress (bytes and objects processed). Pages hold limit jobs (1–100, default 50); continue with after set to next.

Parameters

NameInTypeRequiredRules
afterquerystringnomatches ^[0-9]{1,17}_[0-9a-f-]{36}$; next of the previous page
limitqueryintegerno1–100; default 50

Response 200

FieldTypeRequiredRules
itemsarray of objectyesup to 100 items
items[].idstring (uuid)yes—
items[].kindstringyesone of capture, verify, retention
items[].statestringyesone of queued, running, committing, completed, failed, interrupted
items[].phasestringyesmatches ^[a-z][a-z0-9_]{0,63}$; may be null
items[].startedAtstring (date-time)yesStart of execution, or the request time while queued.
items[].finishedAtstring (date-time)yesmay be null
items[].errorCodestringyesmatches ^[a-z][a-z0-9_]{0,63}$; may be null
items[].pointIdstring (uuid)yesmay be null
items[].progressobjectyes—
items[].progress.bytesCopiedstringyesa whole number in decimal digits, sent as a string; Processed bytes: copied or already in the vault.
items[].progress.bytesTotalstringyesa whole number in decimal digits, sent as a string
items[].progress.blobsCopiedintegeryesat least 0
items[].progress.blobsTotalintegeryesat least 0
nextstringyesmatches ^[0-9]{1,17}_[0-9a-f-]{36}$; may be null

Responses: 200, 400, 401, 403, 404, 409, 422, 503, 507

Example

bash
curl -X GET "$ARKVORY_URL/api/v1/backup/jobs" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

List backup points ​

GET HEAD /api/v1/backup/points

Access: System permission backup.read · Retry: Safe to repeat (read)

Lists the completed restore points of the current vault, newest snapshot first, each with the snapshot time T, size, bytes added to the vault, whether it is pinned and its latest verification (verifiedAt, verifyDepth structural or deep, verifyError). Pages hold limit points (1–100, default 50); continue with after set to next. A vault that was replaced shows only its own points.

Parameters

NameInTypeRequiredRules
afterquerystringnomatches ^[0-9]{1,17}_[0-9a-f-]{36}$; next of the previous page
limitqueryintegerno1–100; default 50

Response 200

FieldTypeRequiredRules
itemsarray of objectyesup to 100 items
items[].idstring (uuid)yes—
items[].snapshotAtstring (date-time)yesSnapshot time T; the age of a point counts from T.
items[].completedAtstring (date-time)yes—
items[].blobsintegeryesat least 0
items[].contentBytesstringyesa whole number in decimal digits, sent as a string
items[].newBytesstringyesa whole number in decimal digits, sent as a string; Bytes this point added to the vault.
items[].tablesintegeryesat least 0
items[].rowsintegeryesat least 0
items[].pinnedbooleanyes—
items[].verifiedAtstring (date-time)yesmay be null
items[].verifyDepthstringyesone of structural, deep, null; may be null
items[].verifyErrorstringyesmatches ^[a-z][a-z0-9_]{0,63}$; may be null
nextstringyesmatches ^[0-9]{1,17}_[0-9a-f-]{36}$; may be null

Responses: 200, 400, 401, 403, 404, 409, 422, 503, 507

Example

bash
curl -X GET "$ARKVORY_URL/api/v1/backup/points" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Request a deep check of a backup point ​

POST /api/v1/backup/points/{id}/verify

Access: System permission backup.manage · Retry: Safe to repeat with the same Idempotency-Key

Queues a verification of the point id that reads every stored byte of it; the answer is 202 with the job, and the outcome appears in verifiedAt, verifyDepth and verifyError of the point. Idempotency-Key is required, and reusing it for another point is a 409 idempotency_mismatch. An unknown point is a 404.

Parameters

NameInTypeRequiredRules
idpathstring (uuid)yes—
Idempotency-Keyheaderstringyesmatches ^[A-Za-z0-9_.:-]{1,128}$; Repeat returns the same job; per caller and operation kind.

Response 202

FieldTypeRequiredRules
idstring (uuid)yes—
kindstringyesone of capture, verify, retention
statestringyesone of queued, running, committing, completed, failed, interrupted

Responses: 202, 400, 401, 403, 404, 405, 409, 422, 503, 507

Example

bash
curl -X POST "$ARKVORY_URL/api/v1/backup/points/$ID/verify" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"

Pin or unpin a backup point ​

PUT /api/v1/backup/points/{id}/pin

Access: System permission backup.manage · Retry: Safe to repeat: the same request has the same effect

Sets pinned of the point id; a pinned point is kept by retention beyond the policy until it is unpinned. Setting the same value again changes nothing, and the answer is the updated point. An unknown or already forgotten point is a 404.

Parameters

NameInTypeRequiredRules
idpathstring (uuid)yes—

Request body (application/json)

FieldTypeRequiredRules
pinnedbooleanyes—

Response 200

FieldTypeRequiredRules
idstring (uuid)yes—
snapshotAtstring (date-time)yesSnapshot time T; the age of a point counts from T.
completedAtstring (date-time)yes—
blobsintegeryesat least 0
contentBytesstringyesa whole number in decimal digits, sent as a string
newBytesstringyesa whole number in decimal digits, sent as a string; Bytes this point added to the vault.
tablesintegeryesat least 0
rowsintegeryesat least 0
pinnedbooleanyes—
verifiedAtstring (date-time)yesmay be null
verifyDepthstringyesone of structural, deep, null; may be null
verifyErrorstringyesmatches ^[a-z][a-z0-9_]{0,63}$; may be null

Responses: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Example

bash
curl -X PUT "$ARKVORY_URL/api/v1/backup/points/$ID/pin" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"pinned":false}'

Preview what backup retention keeps ​

GET HEAD /api/v1/backup/retention/preview

Access: System permission backup.read · Retry: Safe to repeat (read)

Shows which points the retention policy would keep, each with the reasons (daily, weekly, monthly, pinned, newest), and which it would delete now. Points that failed verification are not considered. The preview is advisory: requestBackupRetention decides again from the vault when it runs.

Response 200

FieldTypeRequiredRules
keeparray of objectyes—
keep[].idstring (uuid)yes—
keep[].reasonsarray of stringyeseach: one of daily, weekly, monthly, pinned, newest
deletearray of objectyes—
delete[].idstring (uuid)yes—

Responses: 200, 400, 401, 403, 404, 409, 422, 503, 507

Example

bash
curl -X GET "$ARKVORY_URL/api/v1/backup/retention/preview" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Request backup retention ​

POST /api/v1/backup/retention/apply

Access: System permission backup.manage · Retry: Safe to repeat with the same Idempotency-Key

Queues a retention job: the agent forgets the points outside the policy and then removes content no remaining point uses, so space returns to the vault only when the job has completed. Returns 202 with the job; Idempotency-Key is required and repeating it returns the same job. Look at previewBackupRetention first.

Parameters

NameInTypeRequiredRules
Idempotency-Keyheaderstringyesmatches ^[A-Za-z0-9_.:-]{1,128}$; Repeat returns the same job; per caller and operation kind.

Response 202

FieldTypeRequiredRules
idstring (uuid)yes—
kindstringyesone of capture, verify, retention
statestringyesone of queued, running, committing, completed, failed, interrupted

Responses: 202, 400, 401, 403, 404, 405, 409, 422, 503, 507

Example

bash
curl -X POST "$ARKVORY_URL/api/v1/backup/retention/apply" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"

Arkvory · ProAnimaStudio