Skip to content

List a cluster's backups

GET
/clusters/{cluster_id}/backups
curl --request GET \
  --url http://localhost:8000/clusters/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/backups \
  --header 'API-Key: <API-Key>' \
  --header 'API-Version: 2026-06-01.beta'

Returns the cluster’s managed backups, newest first, with the storage they use. On plans without managed backups the list is empty and entitled is false.

Required scope: clusters:backups:read

cluster_id
required
string format: uuid
API-Version
required
string
Allowed values: 2026-06-01.beta

The request has succeeded.

Media typeapplication/json
object
entitled
required

Whether the workspace plan includes managed backups (Business and Enterprise).

boolean
max_retention_days
required

Retention of automatic backups, and the most days an on-demand backup can be kept. 0 when not entitled.

integer format: int32
storage_used_bytes
required

Bytes of this cluster’s backups currently stored.

integer format: int64
next_scheduled_at

When the next automatic backup starts.

string format: date-time
backups
required

Backups, newest first.

Array<object>
object
id
required

Backup identifier: auto-<yyyymmddhhmm> for an automatic backup, manual-<timestamp>-<suffix> for an on-demand one.

string
/^[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?$/
cluster_id
required
string format: uuid
type
required
string
Allowed values: automatic manual
status
required
string
Allowed values: pending running completed failed deleted
retention_days
required

Days the backup is kept after it completes.

integer format: int32
size_bytes
required

Size of the stored backup in bytes. Set once status is completed.

integer format: int64
sha256

SHA-256 of the stored (encrypted) object, hex. Set once status is completed.

string
keycloak_version

Keycloak version whose database was backed up.

string
failure_reason

Machine-readable failure cause when status is failed: JobFailed, JobLost, Missed, BackupsDisabled, InvalidReport, DatabaseNotReady or StorageNotConfigured.

string
copy_status
required

State of the off-site copy to your own bucket. A failed copy never changes status, retention or the download link.

string
Allowed values: not_configured pending copied failed
copy_failure_reason

Short failure code when copy_status is failed.

string
copied_at

When the copy to your bucket finished, for copy_status copied.

string format: date-time
requested_at
string format: date-time
started_at
string format: date-time
completed_at
string format: date-time
expires_at

When the backup is deleted from storage.

string format: date-time
deleted_at

When the backup was deleted from storage, for status deleted.

string format: date-time
created_at
required
string format: date-time
destination

The off-site copy destination, when one is set. Never includes the secret.

object
endpoint

S3-compatible endpoint, for example https://<account>.r2.cloudflarestorage.com. Omitted for AWS S3.

string
region

Signing region. Required with a custom endpoint.

string
bucket
required
string
prefix

Key prefix the copies are written under: <prefix>/<cluster_id>/<backup_id>.dump and .json.

string
access_key_id
required
string
enabled
required

Whether finished backups are copied. Turn off to pause copying without removing the destination.

boolean
last_tested_at

When Test connection last ran against this destination.

string format: date-time
last_test_ok

Whether the last Test connection succeeded.

boolean
last_test_error

The provider’s error from the last failed Test connection.

string
created_at
required
string format: date-time
updated_at
required
string format: date-time

Example

{
  "backups": [
    {
      "id": "auto-202609230300",
      "cluster_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "type": "automatic",
      "status": "completed",
      "retention_days": 14,
      "size_bytes": 52428800,
      "sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
      "keycloak_version": "26.3.0",
      "copy_status": "copied",
      "copied_at": "2026-09-23T03:09:30Z",
      "requested_at": "2026-09-23T03:00:00Z",
      "started_at": "2026-09-23T03:00:04Z",
      "completed_at": "2026-09-23T03:04:12Z",
      "expires_at": "2026-10-07T03:04:12Z",
      "created_at": "2026-09-23T03:00:00Z"
    }
  ],
  "destination": {
    "bucket": "acme-keycloak-backups",
    "region": "eu-central-1",
    "prefix": "skycloak",
    "access_key_id": "AKIAEXAMPLE",
    "enabled": true,
    "created_at": "2026-11-08T10:00:00Z",
    "updated_at": "2026-11-08T10:00:00Z"
  }
}

Access is unauthorized.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Access is forbidden.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

The server cannot find the requested resource.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Client error

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}
Retry-After
integer
RateLimit-Limit
integer
RateLimit-Remaining
integer
RateLimit-Reset
integer
X-RateLimit-Limit-Second
integer
X-RateLimit-Remaining-Second
integer
X-RateLimit-Limit-Minute
integer
X-RateLimit-Remaining-Minute
integer
X-RateLimit-Limit-Hour
integer
X-RateLimit-Remaining-Hour
integer
X-RateLimit-Limit-Day
integer
X-RateLimit-Remaining-Day
integer

Server error

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Server error

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}