# 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.