# Disaster Recovery API
**Base URL**: https://dev-cloud.acronis.com/api/dr/v2
## Security
### OAuth 2.0
OAuth 2.0 security scheme definition for a user authorization
Supported grant types:
* `password`
* `client_credentials`
* `authorization_code`
* `urn:ietf:params:oauth:grant-type:jwt-bearer`
Authorization URI example: `https://dev-cloud.acronis.com/api/2/idp/authorize`
Access token URI example: `https://dev-cloud.acronis.com/api/2/idp/token`
### Request parameters
#### Headers
| Name | Description |
|------|-------------|
| `Authorization` | (Required) OAuth 2.0 access token.
**Type**: String
**Pattern**: `^Bearer [0-9a-zA-Z\-\._~+/]+={0,2}$` |
### Responses
| Code | Description |
|------|-------------|
| `401` | The request was denied because the bearer access token was invalid or missing. |
| `403` | The request was denied because the bearer access token did not have the required privileges. |
### Scopes
* `acep::consumer`
* `dr::support_operator`
* `dr_backup_processor`
* `dr_service::admin`
* `dr_service::vpn_appliance`
* `dr_service::vpn_server`
* `partner_admin`
* `protection::readonly`
* `root_admin`
* `resource_manager::admin`
## Endpoints
### Fetch cloud servers (GET /servers)
Fetches the list of cloud servers.
#### Security
The endpoint supports the following authorization methods: `OAuth 2.0`
For OAuth2 authorization method, one of the following scopes is required by the endpoint:
* `dr_service::admin`
* `dr::support_operator`
* `protection::readonly`
#### Request parameters
##### Query parameters
| Name | Description |
|------|-------------|
| `type` | (Optional) Filters the cloud servers by type.
**Type**: String
**Allowed values**:
- `PRIMARY`
- `RECOVERY` |
| `recovery.resource_id` | (Optional) Filters the recovery servers by the original device resource ID. Multiple entries are accepted.
**Type**: String
**Pattern**: `^[a-zA-Z0-9-]+$` |
| `limit` | (Optional) Maximum number of items to fetch per page. Mutually exclusive with the 'before' and 'after' parameters.
**Type**: Integer
**Minimum**: 1
**Maximum**: 50
**Default**: 10 |
| `after` | (Optional) Token from the 'after' field in the previous response. It contains a cursor that points to the next page of the requested collection. Mutually exclusive with the 'limit' and 'before' parameters. If provided, all other query parameters will be ignored.
**Type**: String
**Min length**: 1 |
| `before` | (Optional) Token from the 'before' field in the previous response. It contains a cursor that points to the previous page of the requested collection. Mutually exclusive with the 'limit' and 'after' parameters. If provided, all other query parameters will be ignored.
**Type**: String
**Min length**: 1 |
#### Responses
##### `200`
**Media type**: `application/json`
- `items` — List of the cloud servers.
**Type**: Array of Object
**Array type description:**
**Type**: Object
**Min items**: 0
- `paging` — Response properties related to the pagination.
**Type**: Object
**Examples**:
*`paginated_first`*:
```json
{
"items": [
{
"name": "Recovery Server",
"public_ip": "8.9.10.12",
"description": "This is a very important WEB server.",
"uuid": "1f100401-357b-4d04-a0c0-d1206c947473",
"vm": {
"cpu": 1,
"os": "some OS",
"ram_mb": 2048,
"status": "STARTED"
},
"_issues": [
{
"domain": "DisasterRecovery",
"error": {
"code": "ResourceBusy",
"context": {
"resource_id": "1f100401-357b-4d04-a0c0-d1206c947473",
"task_uuids": [
"5bc9464f-87b6-4ea8-aa42-050824135e63"
]
},
"domain": "DisasterRecovery",
"message": "The resource is busy, another task is currently in progress. Try again later."
},
"link": "DR_CLOUD_SERVER_START_FAILOVER_PROD",
"target": "1f100401-357b-4d04-a0c0-d1206c947473",
"severity": "ERROR"
},
{
"domain": "DisasterRecovery",
"error": {
"code": "ResourceBusy",
"context": {
"resource_id": "1f100401-357b-4d04-a0c0-d1206c947473",
"task_uuids": [
"5bc9464f-87b6-4ea8-aa42-050824135e63"
]
},
"domain": "DisasterRecovery",
"message": "The resource is busy, another task is currently in progress. Try again later."
},
"link": "DR_CLOUD_SERVER_START_FAILOVER_TEST",
"target": "1f100401-357b-4d04-a0c0-d1206c947473",
"severity": "ERROR"
},
{
"domain": "DisasterRecovery",
"error": {
"code": "ResourceBusy",
"context": {
"resource_id": "1f100401-357b-4d04-a0c0-d1206c947473",
"task_uuids": [
"5bc9464f-87b6-4ea8-aa42-050824135e63"
]
},
"domain": "DisasterRecovery",
"message": "The resource is busy, another task is currently in progress. Try again later."
},
"link": "DR_CLOUD_SERVER_STOP_FAILOVER",
"target": "1f100401-357b-4d04-a0c0-d1206c947473",
"severity": "ERROR"
}
],
"site_uuid": "06bad843-569b-4f7a-bc6b-741aab5be247",
"recovery": {
"active_failover": {
"id": "2a57484d-6d90-44e1-afcc-6ac8ae59425a",
"backup_uri": "avfs:/online?account%3D3%26authProtoVersion%3D1%26computer%3D1%26provider%3DAcronis#arl:/4EF06ED7-6315-4C5C-9033-38F80503F544/C92236DB-8D4E-4D0C-8FCB-5FEB868B4ECC/A3C6EFF4-3089-4429-98F9-8A36BE66594B/6EBB5654-6DB3-4D95-BB10-F3638353CB34?archive_name=WIN-Q1O5K1HTE2J-2E19359B-59F2-4078-A422-E6858FDC7F04-65049BA5-FFB6-4901-B0DE-B2ACA8F84482A",
"vault_id": "0F8CA93A-E22D-40F2-9D29-49E2FB88BE2E"
},
"automated_test_failover": {
"screenshot_link": "https://datacenter.com/bc/api/dr/v1/servers/6782e594-781d-4ad2-b8ca-25a0c40f9938/automatedTestFailover/screenshot?size=full",
"recovery_point": {
"archive_id": "A6407256-5FB4-4E8D-914A-830D61292EEA",
"backup_id": "D14BC70D-7F7F-4413-80E4-904660679B78",
"vault_id": "0F8CA93A-E22D-40F2-9D29-49E2FB88BE2E"
},
"next_start": "2018-11-13T20:20:39+00:00",
"screenshot_preview_link": "https://datacenter.com/bc/api/dr/v1/servers/6782e594-781d-4ad2-b8ca-25a0c40f9938/automatedTestFailover/screenshot?size=preview",
"last_status": "SUCCESS",
"schedule": "MONTHLY",
"last_task_uuid": "74a662f8-6fab-4003-8e84-93e6c9996846",
"last_start": "2018-11-13T20:20:39+00:00",
"timeout": 300
},
"resource_id": "1931FAAF-692D-451F-98A3-DAF721102BEB"
},
"status": "POWERING_OFF",
"created_at": "2018-11-11T20:20:39+00:00",
"task_uuid": "5bc9464f-87b6-4ea8-aa42-050824135e63",
"type": "RECOVERY",
"_links": [
{
"rel": "DR_CLOUD_SERVER_PAGE",
"type": "text/html",
"href": "https://dev-cloud.acronis.com/bc/login?tenant_id=46&return_url=%2Fapi%2F2%2Fidp%2Fauthorize%3Fclient_id%3D21098572-c62e-5220-8537-c7cf8050d97f%26response_type%3Dcode%26redirect_uri%3D%2Fbc%2Fapi%2Fgateway%2Fcb%26scope%3Doffline_access%2Bopenid%2Bprofile%2Bemail%26state%3D%25252Fui%25252F#/dr-servers?id=1f100401-357b-4d04-a0c0-d1206c947473"
},
{
"rel": "DR_CLOUD_SERVER_RECOVERY_POINTS",
"type": "application/json",
"href": "https://dev-cloud.acronis.com/bc/api/vault_manager/v1/backups?backupType=differential&backupType=full&backupType=incremental&embed=archive&forensic=false&includeScreenshotValidationStatus=false&order=desc(created)&showDeleted=0&storageType=online&type=image&resourceId=09BBF995-0088-452E-AFC3-BDE227EBD64C&resourceId=1f100401-357b-4d04-a0c0-d1206c947473"
},
{
"rel": "DR_CLOUD_SERVER_REMOTE_CONSOLE_PAGE",
"type": "text/html",
"href": "https://dev-cloud.acronis.com/bc/login?tenant_id=46&return_url=%2Fapi%2F2%2Fidp%2Fauthorize%3Fclient_id%3D21098572-c62e-5220-8537-c7cf8050d97f%26response_type%3Dcode%26redirect_uri%3D%2Fbc%2Fapi%2Fgateway%2Fcb%26scope%3Doffline_access%2Bopenid%2Bprofile%2Bemail%26state%3D%25252Fui%25252F#/dr-server-remote-console"
},
{
"rel": "DR_CLOUD_SERVER_START_FAILOVER_PROD",
"type": "application/json",
"href": "https://dev-cloud.acronis.com/bc/api/dr/v2/servers/1f100401-357b-4d04-a0c0-d1206c947473:start_failover_prod"
},
{
"rel": "DR_CLOUD_SERVER_START_FAILOVER_TEST",
"type": "application/json",
"href": "https://dev-cloud.acronis.com/bc/api/dr/v2/servers/1f100401-357b-4d04-a0c0-d1206c947473:start_failover_test"
},
{
"rel": "DR_CLOUD_SERVER_STOP_FAILOVER",
"type": "application/json",
"href": "https://dev-cloud.acronis.com/bc/api/dr/v2/servers/1f100401-357b-4d04-a0c0-d1206c947473:stop_failover"
}
]
},
{
"name": "Recovery Server",
"public_ip": "8.9.10.12",
"description": "This is the most important WEB server.",
"uuid": "565cf826-5332-4fd8-9109-2b81630e486d",
"vm": {
"cpu": 1,
"os": "some OS",
"ram_mb": 2048,
"status": "STOPPED"
},
"_issues": [
{
"domain": "DisasterRecovery",
"error": {
"code": "ResourceBusy",
"context": {
"resource_id": "565cf826-5332-4fd8-9109-2b81630e486d",
"task_uuids": [
"7db6f670-27db-4729-86e9-0136ea7bf28b"
]
},
"domain": "DisasterRecovery",
"message": "The resource is busy, another task is currently in progress. Try again later."
},
"link": "DR_CLOUD_SERVER_START_FAILOVER_PROD",
"target": "565cf826-5332-4fd8-9109-2b81630e486d",
"severity": "ERROR"
},
{
"domain": "DisasterRecovery",
"error": {
"code": "ResourceBusy",
"context": {
"resource_id": "565cf826-5332-4fd8-9109-2b81630e486d",
"task_uuids": [
"7db6f670-27db-4729-86e9-0136ea7bf28b"
]
},
"domain": "DisasterRecovery",
"message": "The resource is busy, another task is currently in progress. Try again later."
},
"link": "DR_CLOUD_SERVER_START_FAILOVER_TEST",
"target": "565cf826-5332-4fd8-9109-2b81630e486d",
"severity": "ERROR"
},
{
"domain": "DisasterRecovery",
"error": {
"code": "ResourceBusy",
"context": {
"resource_id": "565cf826-5332-4fd8-9109-2b81630e486d",
"task_uuids": [
"7db6f670-27db-4729-86e9-0136ea7bf28b"
]
},
"domain": "DisasterRecovery",
"message": "The resource is busy, another task is currently in progress. Try again later."
},
"link": "DR_CLOUD_SERVER_STOP_FAILOVER",
"target": "565cf826-5332-4fd8-9109-2b81630e486d",
"severity": "ERROR"
}
],
"site_uuid": "06bad843-569b-4f7a-bc6b-741aab5be247",
"recovery": {
"active_failover": {
"id": "0c1bfa0c-3d13-4fe2-8921-e83b9d6dcad1",
"archive_credentials_id": "A6407256-5FB4-4E8D-914A-830D61292EEA@archive",
"backup_uri": "avfs:/online?account%3D3%26authProtoVersion%3D1%26computer%3D1%26provider%3DAcronis#arl:/4EF06ED7-6315-4C5C-9033-38F80503F544/C92236DB-8D4E-4D0C-8FCB-5FEB868B4ECC/A3C6EFF4-3089-4429-98F9-8A36BE66594B/6EBB5654-6DB3-4D95-BB10-F3638353CB34?archive_name=WIN-Q1O5K1HTE2J-2E19359B-59F2-4078-A422-E6858FDC7F04-65049BA5-FFB6-4901-B0DE-B2ACA8F84482A",
"vault_id": "0F8CA93A-E22D-40F2-9D29-49E2FB88BE2E"
},
"automated_test_failover": {
"screenshot_link": "https://datacenter.com/bc/api/dr/v1/servers/6871ae92-d7f0-435f-a882-8946df89f50c/automatedTestFailover/screenshot?size=full",
"recovery_point": {
"archive_id": "AC16D9C3-2EA2-4280-A9CA-12576FFB22A",
"backup_id": "570BE591-1DCF-4BDF-82D7-29ABC494AA13",
"vault_id": "0F8CA93A-E22D-40F2-9D29-49E2FB88BE2"
},
"next_start": "2018-11-13T20:20:39+00:00",
"screenshot_preview_link": "https://datacenter.com/bc/api/dr/v1/servers/6871ae92-d7f0-435f-a882-8946df89f50c/automatedTestFailover/screenshot?size=preview",
"last_status": "SUCCESS",
"schedule": "MONTHLY",
"last_task_uuid": "74a662f8-6fab-4003-8e84-93e6c9996846",
"last_start": "2018-11-01T20:20:39+00:00",
"timeout": 300
},
"resource_id": "ECCA39E5-5018-4DF4-8429-F8C6FB91F2BC",
"test_failover": {
"recovery_point": {
"archive_id": "AC16D9C3-2EA2-4280-A9CA-12576FFB22A1",
"backup_id": "570BE591-1DCF-4BDF-82D7-29ABC494AA13",
"vault_id": "0F8CA93A-E22D-40F2-9D29-49E2FB88BE2E"
},
"last_start": "2019-11-19T07:22:14+00:00",
"last_task_uuid": "c005a6e9-5b01-4e68-9aaf-7182a3a5ccce"
}
},
"status": "POWERING_ON",
"created_at": "2018-11-11T20:20:39+00:00",
"task_uuid": "7db6f670-27db-4729-86e9-0136ea7bf28b",
"type": "RECOVERY",
"_links": [
{
"rel": "DR_CLOUD_SERVER_PAGE",
"type": "text/html",
"href": "https://dev-cloud.acronis.com/bc/login?tenant_id=46&return_url=%2Fapi%2F2%2Fidp%2Fauthorize%3Fclient_id%3D21098572-c62e-5220-8537-c7cf8050d97f%26response_type%3Dcode%26redirect_uri%3D%2Fbc%2Fapi%2Fgateway%2Fcb%26scope%3Doffline_access%2Bopenid%2Bprofile%2Bemail%26state%3D%25252Fui%25252F#/dr-servers?id=565cf826-5332-4fd8-9109-2b81630e486d"
},
{
"rel": "DR_CLOUD_SERVER_RECOVERY_POINTS",
"type": "application/json",
"href": "https://dev-cloud.acronis.com/bc/api/vault_manager/v1/backups?backupType=differential&backupType=full&backupType=incremental&embed=archive&forensic=false&includeScreenshotValidationStatus=false&order=desc(created)&showDeleted=0&storageType=online&type=image&resourceId=09BBF995-0088-452E-AFC3-BDE227EBD64C&resourceId=565cf826-5332-4fd8-9109-2b81630e486d"
},
{
"rel": "DR_CLOUD_SERVER_REMOTE_CONSOLE_PAGE",
"type": "text/html",
"href": "https://dev-cloud.acronis.com/bc/login?tenant_id=46&return_url=%2Fapi%2F2%2Fidp%2Fauthorize%3Fclient_id%3D21098572-c62e-5220-8537-c7cf8050d97f%26response_type%3Dcode%26redirect_uri%3D%2Fbc%2Fapi%2Fgateway%2Fcb%26scope%3Doffline_access%2Bopenid%2Bprofile%2Bemail%26state%3D%25252Fui%25252F#/dr-server-remote-console"
},
{
"rel": "DR_CLOUD_SERVER_START_FAILOVER_PROD",
"type": "application/json",
"href": "https://dev-cloud.acronis.com/bc/api/dr/v2/servers/565cf826-5332-4fd8-9109-2b81630e486d:start_failover_prod"
},
{
"rel": "DR_CLOUD_SERVER_START_FAILOVER_TEST",
"type": "application/json",
"href": "https://dev-cloud.acronis.com/bc/api/dr/v2/servers/565cf826-5332-4fd8-9109-2b81630e486d:start_failover_test"
},
{
"rel": "DR_CLOUD_SERVER_STOP_FAILOVER",
"type": "application/json",
"href": "https://dev-cloud.acronis.com/bc/api/dr/v2/servers/565cf826-5332-4fd8-9109-2b81630e486d:stop_failover"
}
]
}
],
"paging": {
"count": 2,
"cursors": {
"after": "eyJSJdfQ"
},
"total": 3
}
}
```
*`paginated_last`*:
```json
{
"items": [
{
"name": "Primary Server",
"public_ip": "8.9.10.11",
"description": "This is a very important MS SQL server.",
"uuid": "6782e594-781d-4ad2-b8ca-25a0c40f9938",
"vm": {
"ram_mb": 2048,
"os": "some OS",
"status": "STARTED",
"cpu": 1,
"storage": [
{
"id": "storageID5",
"protected": true,
"size_gb": 2
},
{
"id": "storageID6",
"protected": false,
"size_gb": 5
}
]
},
"_issues": [],
"site_uuid": "06bad843-569b-4f7a-bc6b-741aab5be247",
"status": "STAND_BY",
"created_at": "2018-11-11T20:20:39+00:00",
"type": "PRIMARY",
"primary": {
"vault_id": "0F8CA93A-E22D-40F2-9D29-49E2FB88BE2E"
},
"_links": [
{
"rel": "DR_CLOUD_SERVER_PAGE",
"type": "text/html",
"href": "https://dev-cloud.acronis.com/bc/login?tenant_id=46&return_url=%2Fapi%2F2%2Fidp%2Fauthorize%3Fclient_id%3D21098572-c62e-5220-8537-c7cf8050d97f%26response_type%3Dcode%26redirect_uri%3D%2Fbc%2Fapi%2Fgateway%2Fcb%26scope%3Doffline_access%2Bopenid%2Bprofile%2Bemail%26state%3D%25252Fui%25252F#/dr-servers?id=6782e594-781d-4ad2-b8ca-25a0c40f9938"
},
{
"rel": "DR_CLOUD_SERVER_RECOVERY_POINTS",
"type": "application/json",
"href": "https://dev-cloud.acronis.com/bc/api/vault_manager/v1/backups?backupType=differential&backupType=full&backupType=incremental&embed=archive&forensic=false&includeScreenshotValidationStatus=false&order=desc(created)&showDeleted=0&storageType=online&type=image&resourceId=6782e594-781d-4ad2-b8ca-25a0c40f9938"
},
{
"rel": "DR_CLOUD_SERVER_REMOTE_CONSOLE_PAGE",
"type": "text/html",
"href": "https://dev-cloud.acronis.com/bc/login?tenant_id=46&return_url=%2Fapi%2F2%2Fidp%2Fauthorize%3Fclient_id%3D21098572-c62e-5220-8537-c7cf8050d97f%26response_type%3Dcode%26redirect_uri%3D%2Fbc%2Fapi%2Fgateway%2Fcb%26scope%3Doffline_access%2Bopenid%2Bprofile%2Bemail%26state%3D%25252Fui%25252F#/dr-server-remote-console"
}
]
}
],
"paging": {
"count": 1,
"cursors": {
"before": "eyJSJdfQ"
},
"total": 3
}
}
```
*`paginated_none`*:
```json
{
"items": [],
"paging": {
"count": 0,
"total": 0
}
}
```
##### `400` — The request could not be validated against the RAML schema.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_0`*:
```json
{
"error": {
"code": "BadRequest",
"context": {},
"debug": {
"additional": [
"\"\" does not match \"\\\\S+\""
],
"msg": "Failed to validate the request against the RAML schema."
},
"domain": "DisasterRecovery"
}
}
```
##### `401` — The request was denied because the bearer access token was invalid or missing.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_1`*:
```json
{
"error": {
"code": "Unauthorized",
"context": {},
"debug": {
"msg": "Authorization header is invalid."
},
"domain": "DisasterRecovery"
}
}
```
##### `403` — The request was denied because the bearer access token did not have the required privileges.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_0`*:
```json
{
"error": {
"code": "MethodNotAllowed",
"context": {},
"debug": {
"msg": "This method is not allowed for this user account."
},
"domain": "DisasterRecovery"
}
}
```
##### `404` — The requested resource was not found.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_1`*:
```json
{
"error": {
"code": "EntityNotFound",
"context": {},
"debug": {
"msg": "Deployment [777, server 67890] was not found in the DR infrastructure."
},
"domain": "DisasterRecovery"
}
}
```
##### `429` — The response status code indicates that the service is overloaded and you must wait before the next request.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_2`*:
```json
{
"error": {
"code": "TooManyRequests",
"context": {
"retry_after": 300
},
"debug": {
"msg": "Service failed to process the request due to a high load at the moment. Please try again after number of seconds that is indicated in the \"context.retry_after\" field or in the \"Retry-After\" response header."
},
"domain": "DisasterRecovery"
}
}
```
##### `500` — An internal server error occurred while processing the request.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_2`*:
```json
{
"error": {
"code": "InternalError",
"context": {},
"debug": {
"additional": [
"Some error"
],
"msg": "An error occurred while performing the operation in the DR infrastructure."
},
"domain": "DisasterRecovery"
}
}
```
##### `504` — Gateway time-out.
### Start production failover on cloud server (POST /servers/{uuid}:start_failover_prod)
Starts a production failover of the cloud server.
#### Security
The endpoint supports the following authorization methods: `OAuth 2.0`
For OAuth2 authorization method, one of the following scopes is required by the endpoint:
* `dr_service::admin`
#### Request parameters
##### Request body
**Media type**: `application/json`
- `recovery_point` — Composite identifier of a recovery point.
**Type**: Object
**Examples**:
*`use_specific_recovery_point`*:
```json
{
"recovery_point": {
"backup_id": "c4d81250-bd8a-4b8f-afd7-e88ea0e5cbf6",
"archive_id": "b595c974-0c8b-4802-b71b-238b76c4c05e",
"vault_id": "0a959777-c0c8-40af-b3d3-9ad972040db8"
}
}
```
*`use_last_available_recovery_point`*:
```json
{}
```
#### Responses
##### `202`
**Media type**: `application/json`
- `task_uuid` — Universally unique object identifier.
**Type**: String
**Pattern**: `^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`
**Example**:
```json
{
"task_uuid": "f1b3b3b4-4b1b-4b1b-4b1b-4b1b4b1b4b1b"
}
```
##### `400` — The request could not be validated against the RAML schema.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_0`*:
```json
{
"error": {
"code": "BadRequest",
"context": {},
"debug": {
"additional": [
"\"\" does not match \"\\\\S+\""
],
"msg": "Failed to validate the request against the RAML schema."
},
"domain": "DisasterRecovery"
}
}
```
##### `401` — The request was denied because the bearer access token was invalid or missing.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_1`*:
```json
{
"error": {
"code": "Unauthorized",
"context": {},
"debug": {
"msg": "Authorization header is invalid."
},
"domain": "DisasterRecovery"
}
}
```
##### `403` — The request was denied because the bearer access token did not have the required privileges.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_0`*:
```json
{
"error": {
"code": "MethodNotAllowed",
"context": {},
"debug": {
"msg": "This method is not allowed for this user account."
},
"domain": "DisasterRecovery"
}
}
```
##### `404` — The requested resource was not found.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_1`*:
```json
{
"error": {
"code": "EntityNotFound",
"context": {},
"debug": {
"msg": "Deployment [777, server 67890] was not found in the DR infrastructure."
},
"domain": "DisasterRecovery"
}
}
```
##### `409` — The request could not be completed because there was a conflict with the current state of the resource.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_3`*:
```json
{
"error": {
"code": "ResourceBusy",
"context": {
"resource_id": "952957a6-25ca-4c19-aff8-9d32dbf0e068",
"task_uuids": [
"9c616a68-8011-44fd-be2f-1b2b3a374d84"
]
},
"debug": {
"msg": "Resource [952957a6-25ca-4c19-aff8-9d32dbf0e068] is busy with other tasks [9c616a68-8011-44fd-be2f-1b2b3a374d84] that are currently in progress. Try again later."
},
"domain": "DisasterRecovery"
}
}
```
##### `429` — The response status code indicates that the service is overloaded and you must wait before the next request.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_2`*:
```json
{
"error": {
"code": "TooManyRequests",
"context": {
"retry_after": 300
},
"debug": {
"msg": "Service failed to process the request due to a high load at the moment. Please try again after number of seconds that is indicated in the \"context.retry_after\" field or in the \"Retry-After\" response header."
},
"domain": "DisasterRecovery"
}
}
```
##### `500` — An internal server error occurred while processing the request.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_2`*:
```json
{
"error": {
"code": "InternalError",
"context": {},
"debug": {
"additional": [
"Some error"
],
"msg": "An error occurred while performing the operation in the DR infrastructure."
},
"domain": "DisasterRecovery"
}
}
```
##### `504` — Gateway time-out.
### Start test failover on cloud server (POST /servers/{uuid}:start_failover_test)
Starts a test failover of the cloud server.
#### Security
The endpoint supports the following authorization methods: `OAuth 2.0`
For OAuth2 authorization method, one of the following scopes is required by the endpoint:
* `dr_service::admin`
* `dr::support_operator`
#### Request parameters
##### Request body
**Media type**: `application/json`
- `recovery_point` — Composite identifier of a recovery point.
**Type**: Object
**Examples**:
*`use_specific_recovery_point`*:
```json
{
"recovery_point": {
"backup_id": "c4d81250-bd8a-4b8f-afd7-e88ea0e5cbf6",
"archive_id": "b595c974-0c8b-4802-b71b-238b76c4c05e",
"vault_id": "0a959777-c0c8-40af-b3d3-9ad972040db8"
}
}
```
*`use_last_available_recovery_point`*:
```json
{}
```
#### Responses
##### `202`
**Media type**: `application/json`
- `task_uuid` — Universally unique object identifier.
**Type**: String
**Pattern**: `^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`
**Example**:
```json
{
"task_uuid": "f1b3b3b4-4b1b-4b1b-4b1b-4b1b4b1b4b1b"
}
```
##### `400` — The request could not be validated against the RAML schema.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_0`*:
```json
{
"error": {
"code": "BadRequest",
"context": {},
"debug": {
"additional": [
"\"\" does not match \"\\\\S+\""
],
"msg": "Failed to validate the request against the RAML schema."
},
"domain": "DisasterRecovery"
}
}
```
##### `401` — The request was denied because the bearer access token was invalid or missing.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_1`*:
```json
{
"error": {
"code": "Unauthorized",
"context": {},
"debug": {
"msg": "Authorization header is invalid."
},
"domain": "DisasterRecovery"
}
}
```
##### `403` — The request was denied because the bearer access token did not have the required privileges.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_0`*:
```json
{
"error": {
"code": "MethodNotAllowed",
"context": {},
"debug": {
"msg": "This method is not allowed for this user account."
},
"domain": "DisasterRecovery"
}
}
```
##### `404` — The requested resource was not found.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_1`*:
```json
{
"error": {
"code": "EntityNotFound",
"context": {},
"debug": {
"msg": "Deployment [777, server 67890] was not found in the DR infrastructure."
},
"domain": "DisasterRecovery"
}
}
```
##### `409` — The request could not be completed because there was a conflict with the current state of the resource.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_3`*:
```json
{
"error": {
"code": "ResourceBusy",
"context": {
"resource_id": "952957a6-25ca-4c19-aff8-9d32dbf0e068",
"task_uuids": [
"9c616a68-8011-44fd-be2f-1b2b3a374d84"
]
},
"debug": {
"msg": "Resource [952957a6-25ca-4c19-aff8-9d32dbf0e068] is busy with other tasks [9c616a68-8011-44fd-be2f-1b2b3a374d84] that are currently in progress. Try again later."
},
"domain": "DisasterRecovery"
}
}
```
##### `429` — The response status code indicates that the service is overloaded and you must wait before the next request.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_2`*:
```json
{
"error": {
"code": "TooManyRequests",
"context": {
"retry_after": 300
},
"debug": {
"msg": "Service failed to process the request due to a high load at the moment. Please try again after number of seconds that is indicated in the \"context.retry_after\" field or in the \"Retry-After\" response header."
},
"domain": "DisasterRecovery"
}
}
```
##### `500` — An internal server error occurred while processing the request.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_2`*:
```json
{
"error": {
"code": "InternalError",
"context": {},
"debug": {
"additional": [
"Some error"
],
"msg": "An error occurred while performing the operation in the DR infrastructure."
},
"domain": "DisasterRecovery"
}
}
```
##### `504` — Gateway time-out.
### Stop failover on cloud server (POST /servers/{uuid}:stop_failover)
Stops the failover of the cloud server.
#### Security
The endpoint supports the following authorization methods: `OAuth 2.0`
For OAuth2 authorization method, one of the following scopes is required by the endpoint:
* `dr_service::admin`
* `dr::support_operator`
#### Request parameters
##### Request body
**Media type**: `application/json`
**Example**:
```json
{}
```
#### Responses
##### `202`
**Media type**: `application/json`
- `task_uuid` — Universally unique object identifier.
**Type**: String
**Pattern**: `^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`
**Example**:
```json
{
"task_uuid": "f1b3b3b4-4b1b-4b1b-4b1b-4b1b4b1b4b1b"
}
```
##### `400` — The request could not be validated against the RAML schema.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_0`*:
```json
{
"error": {
"code": "BadRequest",
"context": {},
"debug": {
"additional": [
"\"\" does not match \"\\\\S+\""
],
"msg": "Failed to validate the request against the RAML schema."
},
"domain": "DisasterRecovery"
}
}
```
##### `401` — The request was denied because the bearer access token was invalid or missing.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_1`*:
```json
{
"error": {
"code": "Unauthorized",
"context": {},
"debug": {
"msg": "Authorization header is invalid."
},
"domain": "DisasterRecovery"
}
}
```
##### `403` — The request was denied because the bearer access token did not have the required privileges.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_0`*:
```json
{
"error": {
"code": "MethodNotAllowed",
"context": {},
"debug": {
"msg": "This method is not allowed for this user account."
},
"domain": "DisasterRecovery"
}
}
```
##### `404` — The requested resource was not found.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_1`*:
```json
{
"error": {
"code": "EntityNotFound",
"context": {},
"debug": {
"msg": "Deployment [777, server 67890] was not found in the DR infrastructure."
},
"domain": "DisasterRecovery"
}
}
```
##### `409` — The request could not be completed because there was a conflict with the current state of the resource.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_3`*:
```json
{
"error": {
"code": "ResourceBusy",
"context": {
"resource_id": "952957a6-25ca-4c19-aff8-9d32dbf0e068",
"task_uuids": [
"9c616a68-8011-44fd-be2f-1b2b3a374d84"
]
},
"debug": {
"msg": "Resource [952957a6-25ca-4c19-aff8-9d32dbf0e068] is busy with other tasks [9c616a68-8011-44fd-be2f-1b2b3a374d84] that are currently in progress. Try again later."
},
"domain": "DisasterRecovery"
}
}
```
##### `429` — The response status code indicates that the service is overloaded and you must wait before the next request.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_2`*:
```json
{
"error": {
"code": "TooManyRequests",
"context": {
"retry_after": 300
},
"debug": {
"msg": "Service failed to process the request due to a high load at the moment. Please try again after number of seconds that is indicated in the \"context.retry_after\" field or in the \"Retry-After\" response header."
},
"domain": "DisasterRecovery"
}
}
```
##### `500` — An internal server error occurred while processing the request.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_2`*:
```json
{
"error": {
"code": "InternalError",
"context": {},
"debug": {
"additional": [
"Some error"
],
"msg": "An error occurred while performing the operation in the DR infrastructure."
},
"domain": "DisasterRecovery"
}
}
```
##### `504` — Gateway time-out.
### Fetch disaster recovery sites (GET /sites)
Fetches the list of disaster recovery sites.
#### Security
The endpoint supports the following authorization methods: `OAuth 2.0`
For OAuth2 authorization method, one of the following scopes is required by the endpoint:
* `dr_service::admin`
* `dr::support_operator`
* `protection::readonly`
#### Request parameters
##### Query parameters
| Name | Description |
|------|-------------|
| `allow_deleted` | (Optional) Includes resources that are marked as deleted in the request result.
**Type**: Boolean
**Default**: false |
| `limit` | (Optional) Maximum number of items to fetch per page. Mutually exclusive with the 'before' and 'after' parameters.
**Type**: Integer
**Minimum**: 1
**Maximum**: 50
**Default**: 10 |
| `after` | (Optional) Token from the 'after' field in the previous response. It contains a cursor that points to the next page of the requested collection. Mutually exclusive with the 'limit' and 'before' parameters. If provided, all other query parameters will be ignored.
**Type**: String
**Min length**: 1 |
| `before` | (Optional) Token from the 'before' field in the previous response. It contains a cursor that points to the previous page of the requested collection. Mutually exclusive with the 'limit' and 'after' parameters. If provided, all other query parameters will be ignored.
**Type**: String
**Min length**: 1 |
#### Responses
##### `200`
**Media type**: `application/json`
- `items` — List of the disaster recovery sites.
**Type**: Array of Object
**Array type description:**
**Type**: Object
**Min items**: 0
- `paging` — Response properties related to the pagination.
**Type**: Object
**Examples**:
*`paginated_first`*:
```json
{
"items": [
{
"tenant_uuid": "9ca5aa60-4cdc-491c-94d5-23b747f7f914",
"uuid": "f3b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b",
"failover_readiness": "ERROR",
"_issues": [
{
"domain": "DisasterRecovery",
"target": "f3b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b",
"severity": "ERROR",
"error": {
"code": "SiteNotReady",
"domain": "DisasterRecovery",
"message": "You cannot perform any operations because the DR site is being deployed or removed."
}
}
],
"status": "PROVISIONING",
"default": true,
"task_uuid": "c108b478-2083-4097-a418-ab3d0d49b938",
"_links": [
{
"rel": "DR_SITE_CONNECTIVITY_PAGE",
"type": "text/html",
"href": "https://example.com/dr/sites/f3b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b/connectivity"
}
]
},
{
"tenant_uuid": "9ca5aa60-4cdc-491c-94d5-23b747f7f914",
"uuid": "75c45087-0ba7-4580-8de8-1be489b7591d",
"failover_readiness": "WARNING",
"_issues": [
{
"domain": "DisasterRecovery",
"target": "75c45087-0ba7-4580-8de8-1be489b7591d",
"severity": "WARNING",
"error": {
"code": "VPNS2SApplianceNotRegistered",
"domain": "DisasterRecovery",
"message": "The VPN appliance is not registered."
}
}
],
"status": "PROVISIONED",
"default": false,
"_links": [
{
"rel": "DR_SITE_CONNECTIVITY_PAGE",
"type": "text/html",
"href": "https://example.com/dr/sites/f3b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b/connectivity"
}
]
}
],
"paging": {
"count": 2,
"cursors": {
"after": "eyJSJdfQ"
},
"total": 3
}
}
```
*`paginated_last`*:
```json
{
"items": [
{
"tenant_uuid": "9ca5aa60-4cdc-491c-94d5-23b747f7f914",
"uuid": "40ca099f-c116-4f6c-9730-42a0bff138a2",
"failover_readiness": "OK",
"_issues": [],
"status": "PROVISIONED",
"default": false,
"_links": [
{
"rel": "DR_SITE_CONNECTIVITY_PAGE",
"type": "text/html",
"href": "https://example.com/dr/sites/40ca099f-c116-4f6c-9730-42a0bff138a2/connectivity"
}
]
}
],
"paging": {
"count": 1,
"cursors": {
"before": "eyJSJdfQ"
},
"total": 3
}
}
```
*`paginated_none`*:
```json
{
"items": [],
"paging": {
"count": 0,
"total": 0
}
}
```
##### `400` — The request could not be validated against the RAML schema.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_0`*:
```json
{
"error": {
"code": "BadRequest",
"context": {},
"debug": {
"additional": [
"\"\" does not match \"\\\\S+\""
],
"msg": "Failed to validate the request against the RAML schema."
},
"domain": "DisasterRecovery"
}
}
```
##### `401` — The request was denied because the bearer access token was invalid or missing.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_1`*:
```json
{
"error": {
"code": "Unauthorized",
"context": {},
"debug": {
"msg": "Authorization header is invalid."
},
"domain": "DisasterRecovery"
}
}
```
##### `403` — The request was denied because the bearer access token did not have the required privileges.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_0`*:
```json
{
"error": {
"code": "MethodNotAllowed",
"context": {},
"debug": {
"msg": "This method is not allowed for this user account."
},
"domain": "DisasterRecovery"
}
}
```
##### `404` — The requested resource was not found.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_1`*:
```json
{
"error": {
"code": "EntityNotFound",
"context": {},
"debug": {
"msg": "Deployment [777, server 67890] was not found in the DR infrastructure."
},
"domain": "DisasterRecovery"
}
}
```
##### `429` — The response status code indicates that the service is overloaded and you must wait before the next request.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_2`*:
```json
{
"error": {
"code": "TooManyRequests",
"context": {
"retry_after": 300
},
"debug": {
"msg": "Service failed to process the request due to a high load at the moment. Please try again after number of seconds that is indicated in the \"context.retry_after\" field or in the \"Retry-After\" response header."
},
"domain": "DisasterRecovery"
}
}
```
##### `500` — An internal server error occurred while processing the request.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_2`*:
```json
{
"error": {
"code": "InternalError",
"context": {},
"debug": {
"additional": [
"Some error"
],
"msg": "An error occurred while performing the operation in the DR infrastructure."
},
"domain": "DisasterRecovery"
}
}
```
##### `504` — Gateway time-out.
### Fetch disaster recovery site by UUID (GET /sites/{uuid})
Fetches the details of the disaster recovery site.
#### Security
The endpoint supports the following authorization methods: `OAuth 2.0`
For OAuth2 authorization method, one of the following scopes is required by the endpoint:
* `dr_service::admin`
* `dr::support_operator`
* `protection::readonly`
#### Request parameters
##### Query parameters
| Name | Description |
|------|-------------|
| `allow_deleted` | (Optional) Includes resources that are marked as deleted in the request result.
**Type**: Boolean
**Default**: false |
#### Responses
##### `200`
**Media type**: `application/json`
- `default` — This property determines if the disaster recovery site is set as default. You can have only one default disaster recovery site at a time.
**Type**: Boolean
- `deleted_at` — Deletion date of the disaster recovery site.
**Type**: DateTime
**Format**: date-time
- `failover_readiness` — Failover readiness status of the disaster recovery site. This property can have the following values: OK - ready for failover; WARNING - proceed with caution; or ERROR - not ready for failover.
**Type**: String
**Allowed values**:
- `ERROR`
- `OK`
- `WARNING`
- `status` — The status of the disaster recovery site.
**Type**: String
**Allowed values**:
- `DEPROVISIONING`
- `PROVISIONING`
- `PROVISIONED`
- `task_uuid` — Universally unique object identifier.
**Type**: String
**Pattern**: `^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`
- `tenant_uuid` — Universally unique object identifier.
**Type**: String
**Pattern**: `^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`
- `uuid` — Universally unique object identifier.
**Type**: String
**Pattern**: `^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`
- `_links` — Links and actions related to the disaster recovery site.
**Type**: Array of any
**Array type description:**
**Type**: any
**Min items**: 1
- `_issues` — Issues of the disaster recovery site.
**Type**: Array of any
**Array type description:**
Describes a single issue (constraint violation).
**Type**: any
**Min items**: 0
**Examples**:
*`site_default_provisioning_error`*:
```json
{
"tenant_uuid": "9ca5aa60-4cdc-491c-94d5-23b747f7f914",
"uuid": "f3b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b",
"failover_readiness": "ERROR",
"_issues": [
{
"domain": "DisasterRecovery",
"target": "f3b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b",
"severity": "ERROR",
"error": {
"code": "SiteNotReady",
"domain": "DisasterRecovery",
"message": "You cannot perform any operations because the DR site is being deployed or removed."
}
}
],
"status": "PROVISIONING",
"default": true,
"task_uuid": "c108b478-2083-4097-a418-ab3d0d49b938",
"_links": [
{
"rel": "DR_SITE_CONNECTIVITY_PAGE",
"type": "text/html",
"href": "https://example.com/dr/sites/f3b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b/connectivity"
}
]
}
```
*`site_non_default_provisioned_ok`*:
```json
{
"tenant_uuid": "9ca5aa60-4cdc-491c-94d5-23b747f7f914",
"uuid": "40ca099f-c116-4f6c-9730-42a0bff138a2",
"failover_readiness": "OK",
"_issues": [],
"status": "PROVISIONED",
"default": false,
"_links": [
{
"rel": "DR_SITE_CONNECTIVITY_PAGE",
"type": "text/html",
"href": "https://example.com/dr/sites/40ca099f-c116-4f6c-9730-42a0bff138a2/connectivity"
}
]
}
```
##### `400` — The request could not be validated against the RAML schema.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_0`*:
```json
{
"error": {
"code": "BadRequest",
"context": {},
"debug": {
"additional": [
"\"\" does not match \"\\\\S+\""
],
"msg": "Failed to validate the request against the RAML schema."
},
"domain": "DisasterRecovery"
}
}
```
##### `401` — The request was denied because the bearer access token was invalid or missing.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_1`*:
```json
{
"error": {
"code": "Unauthorized",
"context": {},
"debug": {
"msg": "Authorization header is invalid."
},
"domain": "DisasterRecovery"
}
}
```
##### `403` — The request was denied because the bearer access token did not have the required privileges.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_0`*:
```json
{
"error": {
"code": "MethodNotAllowed",
"context": {},
"debug": {
"msg": "This method is not allowed for this user account."
},
"domain": "DisasterRecovery"
}
}
```
##### `404` — The requested resource was not found.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_1`*:
```json
{
"error": {
"code": "EntityNotFound",
"context": {},
"debug": {
"msg": "Deployment [777, server 67890] was not found in the DR infrastructure."
},
"domain": "DisasterRecovery"
}
}
```
##### `429` — The response status code indicates that the service is overloaded and you must wait before the next request.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_2`*:
```json
{
"error": {
"code": "TooManyRequests",
"context": {
"retry_after": 300
},
"debug": {
"msg": "Service failed to process the request due to a high load at the moment. Please try again after number of seconds that is indicated in the \"context.retry_after\" field or in the \"Retry-After\" response header."
},
"domain": "DisasterRecovery"
}
}
```
##### `500` — An internal server error occurred while processing the request.
**Media type**: `application/json`
- `error` — **Type**: any
**Example**:
*`example_2`*:
```json
{
"error": {
"code": "InternalError",
"context": {},
"debug": {
"additional": [
"Some error"
],
"msg": "An error occurred while performing the operation in the DR infrastructure."
},
"domain": "DisasterRecovery"
}
}
```
##### `504` — Gateway time-out.