## GET /api/v2/shared-hosting/{accountId}/backups/databases

**List database backups**

Return individual JetBackup database restore points, newest first. Each backup ID identifies one database at one point in time. Restoring one of these backups does not restore website files, email, DNS, or other databases.

### Related Endpoints

- `POST /api/v2/shared-hosting/{accountId}/backups/databases/{backupId}/actions/restore`: Restore database backup
- `GET /api/v2/shared-hosting/{accountId}/backups`: List hosting backups
- `GET /api/v2/shared-hosting/{accountId}/backups/queue/{queueRef}`: Get hosting restore status

### Headers

- `Accept`: application/json
- `Authorization`: Bearer YOUR_API_KEY
- Required API scopes: `read:hosting`, `console:services`

### Parameters

- `accountId` (path, string, required): Public shared-hosting account ID. Do not invent this value; use the exact ID returned by the referenced API response. Example: `acct_01hxa3b4c5d6e7f8g9h0j1k2m3`

### Request Example

```bash
curl -X GET "https://cloud.hostup.se/api/v2/shared-hosting/acct_01hxa3b4c5d6e7f8g9h0j1k2m3/backups/databases" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
```

### Response Schema

- `backups` (array<object>, required)
- `backups[].id` (string, required) Example: `bkp_01hxa3b4c5d6e7f8g9h0j1k2m3`
- `backups[].databaseName` (string, required) Example: `account_wordpress`
- `backups[].createdAt` (string, required, nullable): Nullable (may be null when not applicable). Example: `2026-08-01T23:20:00.000Z`
- `backups[].sizeBytes` (number, required, nullable): Nullable (may be null when not applicable). Example: `20971520`
- `backups[].sizeMb` (number, required, nullable): Nullable (may be null when not applicable). Example: `20`
- `backups[].encrypted` (boolean, required) Example: `false`
- `backups[].note` (string, required, nullable): Nullable (may be null when not applicable). Example: `null`
- `backups[].actions` (object, required)
- `backups[].actions.canRestore` (object, required)
- `backups[].actions.canRestore.allowed` (boolean, required) Example: `true`
- `backups[].actions.canRestore.reason` (string, required, nullable): Nullable (may be null when not applicable). Example: `null`
- `actions` (object, required)
- `actions.canRestore` (object, required)
- `actions.canRestore.allowed` (boolean, required) Example: `true`
- `actions.canRestore.reason` (string, required, nullable): Nullable (may be null when not applicable). Example: `null`

### Responses

#### 200 - Database restore points and restore availability.
```json
{
  "backups": [
    {
      "id": "bkp_01hxa3b4c5d6e7f8g9h0j1k2m3",
      "databaseName": "account_wordpress",
      "createdAt": "2026-08-01T23:20:00.000Z",
      "sizeBytes": 20971520,
      "sizeMb": 20,
      "encrypted": false,
      "note": null,
      "actions": {
        "canRestore": {
          "allowed": true,
          "reason": null
        }
      }
    }
  ],
  "actions": {
    "canRestore": {
      "allowed": true,
      "reason": null
    }
  }
}
```

#### 400 - Invalid request. The response body is an RFC 7807 Problem Details document.
```json
{
  "type": "https://developer.hostup.se/errors/invalid_request",
  "title": "Invalid request",
  "status": 400,
  "detail": "The request body failed validation.",
  "code": "invalid_request",
  "instance": "/api/v2/resource",
  "requestId": "req_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "timestamp": "2026-04-27T12:34:56.000Z",
  "errors": [
    {
      "pointer": "/items/0/domainName",
      "detail": "`domainName` is required.",
      "code": "invalid_request"
    }
  ]
}
```

#### 401 - Unauthorized. Authentication is required.
```json
{
  "type": "https://developer.hostup.se/errors/unauthorized",
  "title": "Unauthorized",
  "status": 401,
  "detail": "Authentication is required.",
  "code": "unauthorized",
  "instance": "/api/v2/resource",
  "requestId": "req_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "timestamp": "2026-04-27T12:34:56.000Z"
}
```

#### 403 - Forbidden. The caller lacks a required scope or does not own the resource.
```json
{
  "type": "https://developer.hostup.se/errors/forbidden",
  "title": "Forbidden",
  "status": 403,
  "detail": "The caller lacks a required scope or does not own the resource.",
  "code": "forbidden",
  "instance": "/api/v2/resource",
  "requestId": "req_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "timestamp": "2026-04-27T12:34:56.000Z"
}
```

#### 404 - Not found. The resource does not exist or is not owned by the caller.
```json
{
  "type": "https://developer.hostup.se/errors/not_found",
  "title": "Not found",
  "status": 404,
  "detail": "The requested resource could not be found.",
  "code": "not_found",
  "instance": "/api/v2/resource",
  "requestId": "req_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "timestamp": "2026-04-27T12:34:56.000Z"
}
```

#### 429 - Rate limited. Retry after the limit resets. 429 responses include `Retry-After` seconds plus `X-RateLimit-*` headers.
```json
{
  "type": "https://developer.hostup.se/errors/rate_limit_exceeded",
  "title": "Too many requests",
  "status": 429,
  "detail": "Too many requests. Retry after the limit resets.",
  "code": "rate_limit_exceeded",
  "instance": "/api/v2/resource",
  "requestId": "req_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "timestamp": "2026-04-27T12:34:56.000Z"
}
```

#### 500 - Internal error. Retry later or contact support if the issue persists.
```json
{
  "type": "https://developer.hostup.se/errors/internal_error",
  "title": "Internal server error",
  "status": 500,
  "detail": "An unexpected error occurred. Retry later or contact support if the issue persists.",
  "code": "internal_error",
  "instance": "/api/v2/resource",
  "requestId": "req_01hxa3b4c5d6e7f8g9h0j1k2m3",
  "timestamp": "2026-04-27T12:34:56.000Z"
}
```
