# Client — Backups

<a id="get-api-v1-client-backups"></a>
#### `GET /api/v1/client/backups`

*List backups (client)*

Return all backups owned by the authenticated client account.

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_list_dict_str__Any___` | Successful Response |

**Response example (200):**

```json
{
  "data": [
    {}
  ],
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X GET \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  https://your-server:2000/api/v1/client/backups
```

---

<a id="post-api-v1-client-backups"></a>
#### `POST /api/v1/client/backups`

*Create backup (client)*

Create a new backup for the authenticated client account. Refused 409 `UPDATE_IN_PROGRESS` while the server is installing an update.

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `include_databases` | boolean | no | default `True` |
| `include_emails` | boolean | no | default `True` |
| `include_files` | boolean | no | default `True` |
| `remote_destination_id` | string | no | — |

**Request body example:**

```json
{
  "include_databases": true,
  "include_emails": true,
  "include_files": true,
  "remote_destination_id": "string"
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X POST \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups
```

---

<a id="post-api-v1-client-backups-google-drive-auth-url"></a>
#### `POST /api/v1/client/backups/google-drive/auth-url`

*Google Drive OAuth URL (client)*

Generate a Google OAuth2 authorization URL for connecting Google Drive as a remote backup destination.

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `client_id` | string | yes | — |
| `client_secret` | string | yes | — |
| `redirect_uri` | string | yes | — |

**Request body example:**

```json
{
  "client_id": "string",
  "client_secret": "string",
  "redirect_uri": "string"
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X POST \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups/google-drive/auth-url
```

---

<a id="get-api-v1-client-backups-google-drive-callback"></a>
#### `GET /api/v1/client/backups/google-drive/callback`

*Client Google Drive Callback*

Google OAuth2 callback — sends code back to opener via postMessage.

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | — | Successful Response |

**cURL example:**

```bash
curl -X GET \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  https://your-server:2000/api/v1/client/backups/google-drive/callback
```

---

<a id="post-api-v1-client-backups-google-drive-exchange"></a>
#### `POST /api/v1/client/backups/google-drive/exchange`

*Google Drive OAuth code exchange (client)*

Exchange a Google authorization code for refresh + access tokens.

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `client_id` | string | yes | — |
| `client_secret` | string | yes | — |
| `code` | string | yes | — |
| `redirect_uri` | string | no | default `` |
| `state` | string | no | default `` |

**Request body example:**

```json
{
  "client_id": "string",
  "client_secret": "string",
  "code": "string",
  "redirect_uri": "",
  "state": ""
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X POST \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups/google-drive/exchange
```

---

<a id="post-api-v1-client-backups-onedrive-auth-url"></a>
#### `POST /api/v1/client/backups/onedrive/auth-url`

*OneDrive OAuth URL (client)*

Generate a Microsoft OAuth2 authorization URL for connecting OneDrive as a remote backup destination.

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `client_id` | string | yes | — |
| `client_secret` | string | yes | — |
| `redirect_uri` | string | yes | — |

**Request body example:**

```json
{
  "client_id": "string",
  "client_secret": "string",
  "redirect_uri": "string"
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X POST \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups/onedrive/auth-url
```

---

<a id="get-api-v1-client-backups-onedrive-callback"></a>
#### `GET /api/v1/client/backups/onedrive/callback`

*Client Onedrive Callback*

OneDrive OAuth2 callback — sends code back to opener via postMessage.

**Query parameters:**

| Name | Type | Required | Notes |
|------|------|----------|-------|
| `code` | string | no | — |
| `state` | string | no | — |
| `error` | string | no | — |
| `error_description` | string | no | — |

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | — | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**cURL example:**

```bash
curl -X GET \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  https://your-server:2000/api/v1/client/backups/onedrive/callback
```

---

<a id="post-api-v1-client-backups-onedrive-exchange"></a>
#### `POST /api/v1/client/backups/onedrive/exchange`

*OneDrive OAuth code exchange (client)*

Exchange a Microsoft authorization code for refresh and access tokens.

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `client_id` | string | yes | — |
| `client_secret` | string | yes | — |
| `code` | string | yes | — |
| `redirect_uri` | string | no | default `` |
| `state` | string | no | default `` |

**Request body example:**

```json
{
  "client_id": "string",
  "client_secret": "string",
  "code": "string",
  "redirect_uri": "",
  "state": ""
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X POST \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups/onedrive/exchange
```

---

<a id="get-api-v1-client-backups-remote-destinations"></a>
#### `GET /api/v1/client/backups/remote-destinations`

*List remote backup destinations (client)*

Return all per-account remote backup destinations owned by the authenticated client.

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_list_dict_str__Any___` | Successful Response |

**Response example (200):**

```json
{
  "data": [
    {}
  ],
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X GET \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  https://your-server:2000/api/v1/client/backups/remote-destinations
```

---

<a id="post-api-v1-client-backups-remote-destinations"></a>
#### `POST /api/v1/client/backups/remote-destinations`

*Add remote backup destination (client)*

Add a new per-account remote backup destination (FTP, SFTP, Google Drive, Bunny Storage, Yandex Disk, OneDrive). Secrets in the answer are masked.

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `api_key` | string | no | — |
| `base_path` | string | no | — |
| `credentials_file` | string | no | — |
| `credentials_json` | string | no | — |
| `dest_id` | string | no | — |
| `folder_id` | string | no | — |
| `google_client_id` | string | no | — |
| `google_client_secret` | string | no | — |
| `google_email` | string | no | — |
| `google_refresh_token` | string | no | — |
| `host` | string | no | — |
| `name` | string | yes | minLength=1; maxLength=100 |
| `oauth_token` | string | no | — |
| `onedrive_client_id` | string | no | — |
| `onedrive_client_secret` | string | no | — |
| `onedrive_email` | string | no | — |
| `onedrive_folder_path` | string | no | — |
| `onedrive_refresh_token` | string | no | — |
| `password` | string | no | — |
| `port` | integer | no | — |
| `region` | string | no | — |
| `remote_dir` | string | no | — |
| `reset_server_identity` | boolean | no | — |
| `storage_zone` | string | no | — |
| `tls_accept_unverified` | boolean | no | — |
| `type` | string | yes | enum: `ftp`, `sftp`, `google_drive`, `bunny_storage`, `yandex_disk`, `onedrive` |
| `use_sftp` | boolean | no | — |
| `username` | string | no | — |
| `validated` | boolean | no | — |
| `yandex_client_id` | string | no | — |
| `yandex_client_secret` | string | no | — |
| `yandex_login` | string | no | — |
| `yandex_refresh_token` | string | no | — |

**Request body example:**

```json
{
  "api_key": "string",
  "base_path": "string",
  "credentials_file": "string",
  "credentials_json": "string",
  "dest_id": "string",
  "folder_id": "string",
  "google_client_id": "string",
  "google_client_secret": "string",
  "google_email": "string",
  "google_refresh_token": "string",
  "host": "string",
  "name": "string",
  "oauth_token": "string",
  "onedrive_client_id": "string",
  "onedrive_client_secret": "string",
  "onedrive_email": "string",
  "onedrive_folder_path": "string",
  "onedrive_refresh_token": "string",
  "password": "string",
  "port": 1.0,
  "region": "string",
  "remote_dir": "string",
  "reset_server_identity": false,
  "storage_zone": "string",
  "tls_accept_unverified": false,
  "type": "ftp",
  "use_sftp": false,
  "username": "string",
  "validated": false,
  "yandex_client_id": "string",
  "yandex_client_secret": "string",
  "yandex_login": "string",
  "yandex_refresh_token": "string"
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X POST \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups/remote-destinations
```

---

<a id="post-api-v1-client-backups-remote-destinations-test"></a>
#### `POST /api/v1/client/backups/remote-destinations/test`

*Test remote destination before save (client)*

Test a remote backup destination configuration before persisting it (resolves masked credentials when editing).

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `api_key` | string | no | — |
| `base_path` | string | no | — |
| `credentials_file` | string | no | — |
| `credentials_json` | string | no | — |
| `dest_id` | string | no | — |
| `folder_id` | string | no | — |
| `google_client_id` | string | no | — |
| `google_client_secret` | string | no | — |
| `google_email` | string | no | — |
| `google_refresh_token` | string | no | — |
| `host` | string | no | — |
| `name` | string | yes | minLength=1; maxLength=100 |
| `oauth_token` | string | no | — |
| `onedrive_client_id` | string | no | — |
| `onedrive_client_secret` | string | no | — |
| `onedrive_email` | string | no | — |
| `onedrive_folder_path` | string | no | — |
| `onedrive_refresh_token` | string | no | — |
| `password` | string | no | — |
| `port` | integer | no | — |
| `region` | string | no | — |
| `remote_dir` | string | no | — |
| `reset_server_identity` | boolean | no | — |
| `storage_zone` | string | no | — |
| `tls_accept_unverified` | boolean | no | — |
| `type` | string | yes | enum: `ftp`, `sftp`, `google_drive`, `bunny_storage`, `yandex_disk`, `onedrive` |
| `use_sftp` | boolean | no | — |
| `username` | string | no | — |
| `validated` | boolean | no | — |
| `yandex_client_id` | string | no | — |
| `yandex_client_secret` | string | no | — |
| `yandex_login` | string | no | — |
| `yandex_refresh_token` | string | no | — |

**Request body example:**

```json
{
  "api_key": "string",
  "base_path": "string",
  "credentials_file": "string",
  "credentials_json": "string",
  "dest_id": "string",
  "folder_id": "string",
  "google_client_id": "string",
  "google_client_secret": "string",
  "google_email": "string",
  "google_refresh_token": "string",
  "host": "string",
  "name": "string",
  "oauth_token": "string",
  "onedrive_client_id": "string",
  "onedrive_client_secret": "string",
  "onedrive_email": "string",
  "onedrive_folder_path": "string",
  "onedrive_refresh_token": "string",
  "password": "string",
  "port": 1.0,
  "region": "string",
  "remote_dir": "string",
  "reset_server_identity": false,
  "storage_zone": "string",
  "tls_accept_unverified": false,
  "type": "ftp",
  "use_sftp": false,
  "username": "string",
  "validated": false,
  "yandex_client_id": "string",
  "yandex_client_secret": "string",
  "yandex_login": "string",
  "yandex_refresh_token": "string"
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X POST \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups/remote-destinations/test
```

---

<a id="delete-api-v1-client-backups-remote-destinations-dest-id"></a>
#### `DELETE /api/v1/client/backups/remote-destinations/{dest_id}`

*Remove remote backup destination (client)*

Remove a per-account remote backup destination owned by the authenticated client.

**Path parameters:**

| Name | Type | Required | Notes |
|------|------|----------|-------|
| `dest_id` | string | yes | — |

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `MessageResponse` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "message": "string",
  "status": "success"
}
```

**cURL example:**

```bash
curl -X DELETE \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  https://your-server:2000/api/v1/client/backups/remote-destinations/{dest_id}
```

---

<a id="put-api-v1-client-backups-remote-destinations-dest-id"></a>
#### `PUT /api/v1/client/backups/remote-destinations/{dest_id}`

*Update remote backup destination (client)*

Update a per-account remote backup destination owned by the authenticated client.

**Path parameters:**

| Name | Type | Required | Notes |
|------|------|----------|-------|
| `dest_id` | string | yes | — |

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `api_key` | string | no | — |
| `base_path` | string | no | — |
| `credentials_file` | string | no | — |
| `credentials_json` | string | no | — |
| `dest_id` | string | no | — |
| `folder_id` | string | no | — |
| `google_client_id` | string | no | — |
| `google_client_secret` | string | no | — |
| `google_email` | string | no | — |
| `google_refresh_token` | string | no | — |
| `host` | string | no | — |
| `name` | string | yes | minLength=1; maxLength=100 |
| `oauth_token` | string | no | — |
| `onedrive_client_id` | string | no | — |
| `onedrive_client_secret` | string | no | — |
| `onedrive_email` | string | no | — |
| `onedrive_folder_path` | string | no | — |
| `onedrive_refresh_token` | string | no | — |
| `password` | string | no | — |
| `port` | integer | no | — |
| `region` | string | no | — |
| `remote_dir` | string | no | — |
| `reset_server_identity` | boolean | no | — |
| `storage_zone` | string | no | — |
| `tls_accept_unverified` | boolean | no | — |
| `type` | string | yes | enum: `ftp`, `sftp`, `google_drive`, `bunny_storage`, `yandex_disk`, `onedrive` |
| `use_sftp` | boolean | no | — |
| `username` | string | no | — |
| `validated` | boolean | no | — |
| `yandex_client_id` | string | no | — |
| `yandex_client_secret` | string | no | — |
| `yandex_login` | string | no | — |
| `yandex_refresh_token` | string | no | — |

**Request body example:**

```json
{
  "api_key": "string",
  "base_path": "string",
  "credentials_file": "string",
  "credentials_json": "string",
  "dest_id": "string",
  "folder_id": "string",
  "google_client_id": "string",
  "google_client_secret": "string",
  "google_email": "string",
  "google_refresh_token": "string",
  "host": "string",
  "name": "string",
  "oauth_token": "string",
  "onedrive_client_id": "string",
  "onedrive_client_secret": "string",
  "onedrive_email": "string",
  "onedrive_folder_path": "string",
  "onedrive_refresh_token": "string",
  "password": "string",
  "port": 1.0,
  "region": "string",
  "remote_dir": "string",
  "reset_server_identity": false,
  "storage_zone": "string",
  "tls_accept_unverified": false,
  "type": "ftp",
  "use_sftp": false,
  "username": "string",
  "validated": false,
  "yandex_client_id": "string",
  "yandex_client_secret": "string",
  "yandex_login": "string",
  "yandex_refresh_token": "string"
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X PUT \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups/remote-destinations/{dest_id}
```

---

<a id="post-api-v1-client-backups-remote-destinations-dest-id-test"></a>
#### `POST /api/v1/client/backups/remote-destinations/{dest_id}/test`

*Test remote backup destination (client)*

Test connectivity to an existing per-account remote backup destination.

**Path parameters:**

| Name | Type | Required | Notes |
|------|------|----------|-------|
| `dest_id` | string | yes | — |

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X POST \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  https://your-server:2000/api/v1/client/backups/remote-destinations/{dest_id}/test
```

---

<a id="patch-api-v1-client-backups-remote-destinations-dest-id-toggle"></a>
#### `PATCH /api/v1/client/backups/remote-destinations/{dest_id}/toggle`

*Toggle remote backup destination (client)*

Enable or disable a per-account remote backup destination.

**Path parameters:**

| Name | Type | Required | Notes |
|------|------|----------|-------|
| `dest_id` | string | yes | — |

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `enabled` | boolean | no | default `True` |

**Request body example:**

```json
{
  "enabled": true
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X PATCH \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups/remote-destinations/{dest_id}/toggle
```

---

<a id="get-api-v1-client-backups-schedules"></a>
#### `GET /api/v1/client/backups/schedules`

*List backup schedules (client)*

Return all backup schedules for the authenticated client account.

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_list_dict_str__Any___` | Successful Response |

**Response example (200):**

```json
{
  "data": [
    {}
  ],
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X GET \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  https://your-server:2000/api/v1/client/backups/schedules
```

---

<a id="post-api-v1-client-backups-schedules"></a>
#### `POST /api/v1/client/backups/schedules`

*Create backup schedule (client)*

Create a new backup schedule for the authenticated client account.

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `day_of_month` | integer | no | — |
| `day_of_week` | integer | no | — |
| `enabled` | boolean | no | default `True` |
| `frequency` | string | yes | enum: `daily`, `weekly`, `monthly` |
| `include_databases` | boolean | no | default `True` |
| `include_emails` | boolean | no | default `True` |
| `include_files` | boolean | no | default `True` |
| `remote_destination_id` | string | no | — |
| `retention_count` | integer | no | default `5`; minimum=0.0; maximum=100.0 |
| `time` | string | yes | pattern=`^([01]\d\|2[0-3]):[0-5]\d$` |

**Request body example:**

```json
{
  "day_of_month": 1.0,
  "day_of_week": 0,
  "enabled": true,
  "frequency": "daily",
  "include_databases": true,
  "include_emails": true,
  "include_files": true,
  "remote_destination_id": "string",
  "retention_count": 5,
  "time": "string"
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X POST \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups/schedules
```

---

<a id="delete-api-v1-client-backups-schedules-schedule-id"></a>
#### `DELETE /api/v1/client/backups/schedules/{schedule_id}`

*Delete backup schedule (client)*

Delete a backup schedule owned by the authenticated client account.

**Path parameters:**

| Name | Type | Required | Notes |
|------|------|----------|-------|
| `schedule_id` | string | yes | — |

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `MessageResponse` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "message": "string",
  "status": "success"
}
```

**cURL example:**

```bash
curl -X DELETE \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  https://your-server:2000/api/v1/client/backups/schedules/{schedule_id}
```

---

<a id="put-api-v1-client-backups-schedules-schedule-id"></a>
#### `PUT /api/v1/client/backups/schedules/{schedule_id}`

*Update backup schedule (client)*

Update a backup schedule owned by the authenticated client account.

**Path parameters:**

| Name | Type | Required | Notes |
|------|------|----------|-------|
| `schedule_id` | string | yes | — |

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `day_of_month` | integer | no | — |
| `day_of_week` | integer | no | — |
| `enabled` | boolean | no | — |
| `frequency` | string | no | — |
| `include_databases` | boolean | no | — |
| `include_emails` | boolean | no | — |
| `include_files` | boolean | no | — |
| `remote_destination_id` | string | no | — |
| `retention_count` | integer | no | — |
| `time` | string | no | — |

**Request body example:**

```json
{
  "day_of_month": 1.0,
  "day_of_week": 0,
  "enabled": false,
  "frequency": "daily",
  "include_databases": false,
  "include_emails": false,
  "include_files": false,
  "remote_destination_id": "string",
  "retention_count": 0,
  "time": "string"
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X PUT \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups/schedules/{schedule_id}
```

---

<a id="post-api-v1-client-backups-yandex-disk-auth-url"></a>
#### `POST /api/v1/client/backups/yandex-disk/auth-url`

*Yandex Disk OAuth URL (client)*

Generate a Yandex OAuth authorization URL for connecting Yandex Disk as a remote backup destination.

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `client_id` | string | yes | — |
| `client_secret` | string | yes | — |
| `redirect_uri` | string | yes | — |

**Request body example:**

```json
{
  "client_id": "string",
  "client_secret": "string",
  "redirect_uri": "string"
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X POST \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups/yandex-disk/auth-url
```

---

<a id="get-api-v1-client-backups-yandex-disk-callback"></a>
#### `GET /api/v1/client/backups/yandex-disk/callback`

*Client Yandex Disk Callback*

Yandex OAuth2 callback — sends code back to opener via postMessage.

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | — | Successful Response |

**cURL example:**

```bash
curl -X GET \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  https://your-server:2000/api/v1/client/backups/yandex-disk/callback
```

---

<a id="post-api-v1-client-backups-yandex-disk-exchange"></a>
#### `POST /api/v1/client/backups/yandex-disk/exchange`

*Yandex Disk OAuth code exchange (client)*

Exchange a Yandex authorization code for OAuth access and refresh tokens.

**Body fields:**

| Field | Type | Required | Notes |
|-------|------|----------|-------|
| `client_id` | string | yes | — |
| `client_secret` | string | yes | — |
| `code` | string | yes | — |
| `redirect_uri` | string | no | default `` |
| `state` | string | no | default `` |

**Request body example:**

```json
{
  "client_id": "string",
  "client_secret": "string",
  "code": "string",
  "redirect_uri": "",
  "state": ""
}
```

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `ApiSuccess_dict_str__Any__` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "data": {},
  "message": "",
  "status": "success",
  "warnings": [
    "string"
  ]
}
```

**cURL example:**

```bash
curl -X POST \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://your-server:2000/api/v1/client/backups/yandex-disk/exchange
```

---

<a id="delete-api-v1-client-backups-backup-id"></a>
#### `DELETE /api/v1/client/backups/{backup_id}`

*Delete backup (client)*

Delete a backup owned by the authenticated client account.

**Path parameters:**

| Name | Type | Required | Notes |
|------|------|----------|-------|
| `backup_id` | string | yes | — |

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `MessageResponse` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "message": "string",
  "status": "success"
}
```

**cURL example:**

```bash
curl -X DELETE \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  https://your-server:2000/api/v1/client/backups/{backup_id}
```

---

<a id="get-api-v1-client-backups-backup-id-download"></a>
#### `GET /api/v1/client/backups/{backup_id}/download`

*Client Download Backup*

Download a backup for the authenticated client account.

**Path parameters:**

| Name | Type | Required | Notes |
|------|------|----------|-------|
| `backup_id` | string | yes | — |

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | — | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**cURL example:**

```bash
curl -X GET \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  https://your-server:2000/api/v1/client/backups/{backup_id}/download
```

---

<a id="post-api-v1-client-backups-backup-id-restore"></a>
#### `POST /api/v1/client/backups/{backup_id}/restore`

*Restore backup (client)*

Restore a backup owned by the authenticated client account. Refused 409 `UPDATE_IN_PROGRESS` while the server is installing an update.

**Path parameters:**

| Name | Type | Required | Notes |
|------|------|----------|-------|
| `backup_id` | string | yes | — |

**Responses:**

| Status | Schema | Description |
|--------|--------|-------------|
| `200` | `MessageResponse` | Successful Response |
| `422` | `HTTPValidationError` | Validation Error |

**Response example (200):**

```json
{
  "message": "string",
  "status": "success"
}
```

**cURL example:**

```bash
curl -X POST \
  -H "X-WHost-Key: $WHOST_API_KEY" \
  -H "X-WHost-Timestamp: $(date +%s)" \
  -H "X-WHost-Nonce: $(openssl rand -hex 16)" \
  -H "X-WHost-Signature: $(compute_hmac)" \
  https://your-server:2000/api/v1/client/backups/{backup_id}/restore
```

---
