> ## Documentation Index
> Fetch the complete documentation index at: https://cloudinary.com/documentation/llms.txt
> Use this file to discover all available pages before exploring further.

# Backups and version management



Backing up your assets lets you maintain a version history of each file, so you can view, download, or restore previous versions, and recover deleted assets when needed. When automatic backup is enabled, Cloudinary saves a copy of every uploaded asset. Backups include only original assets, since Cloudinary can regenerate derived or fetched assets at any time.

You can use Cloudinary's default backup storage, or [configure your own external storage bucket](#using_your_own_backup_storage) (available on paid plans only).

> **INFO**: If you don't explicitly enable backup, you won't be able to recover deleted assets or restore previous versions. If you deleted assets before enabling backup, contact [support](https://support.cloudinary.com/hc/en-us/requests/new).

## Enabling automatic backup

Automatic backup is off by default. When you turn it on, Cloudinary stores a backup copy of every new upload and tracks multiple revisions for each asset. You can also run a one-time backup to include assets uploaded before you enabled the feature.

Cloudinary stores backups in a secondary, write-protected location. If you don’t set up your own Amazon S3 or Google Cloud Storage bucket, Cloudinary uses its default backup storage. These backups count toward your managed storage quota and can significantly increase usage.

Backup is available on all plans. However, using your own cloud storage bucket is available only on paid plans.

> **INFO**: If you intend to use your own backup storage, don't enable automatic backup until you [set up your storage bucket](#using_your_own_backup_storage).

**To enable backup of your newly uploaded assets:**

1. Go to the [Backup](https://console.cloudinary.com/app/settings/backup) page of the Cloudinary Console Settings.
2. Turn on **Enable automatic backup**. 
3. Click **Save Changes** to activate backups for all newly uploaded assets. 

Once enabled, the **Existing assets** section appears on the same page.

![Automatic backup setting - new uploads](https://cloudinary-res.cloudinary.com/image/upload/f_auto/q_auto/bo_1px_solid_grey/v1751385505/docs/backup.png "thumb: w_500,dpr_2, width:500, popup:true")

**To back up assets that were uploaded before you enabled automatic backup:**

1. In the **Existing assets** section, click the **go [here](https://console.cloudinary.com/app/settings/settings/upload)** link. 
2. On the Upload Settings page that opens, click **Perform initial backup**. ![Automatic backup setting - existing assets](https://cloudinary-res.cloudinary.com/image/upload/f_auto/q_auto/bo_1px_solid_grey/v1722957767/docs/DAM/auto_backup.png "thumb: w_700,dpr_2, width:700, popup:true")
3. When prompted, verify the notification email address shown in the confirmation box, or enter a different one if needed, and click OK.

Cloudinary sends a confirmation email to the address you provide after the backup completes.

> **NOTES**:
>
> * If you have many assets, Cloudinary may route you to a page to request support assistance with the initial backup.

> * Cloudinary creates a backup only when a file is replaced with a new version. Changes to metadata or tags alone won’t trigger a backup.

> * Cloudinary doesn't back up remotely fetched assets (e.g., profile images from Twitter or Facebook) or derived assets, as it can regenerate them at any time.

### Enabling backup video tutorial

This video shows how to back up new and existing assets to Cloudinary storage:

## Using your own backup storage

[Paid accounts](https://cloudinary.com/pricing) have the option to back up to a designated storage bucket, either through [Amazon Simple Storage Service (Amazon S3)](#backing_up_to_amazon_s3) or [Google Cloud Storage](#backing_up_to_google_cloud_storage), instead of using Cloudinary's default backup location. These backups do not count against your Cloudinary storage usage.

{notes}

* When using your own backup storage, the backup location should not be touched or modified in any way. Additionally, no life-cycle policy (archiving, deletion), no versioning, and no object locks should be enforced on that location.
* If you have already backed up files to one storage location (including Cloudinary's default backup), then change to a different storage bucket, we recommend contacting [support](https://support.cloudinary.com/hc/en-us/requests/new) to ensure that a full backup is written to your new bucket.

{/note}
To enable this option, your storage bucket must be **allowlisted**. This requires the following steps:

1. Add an empty file to your bucket with your cloud name as the filename, under the following folder structure: `.wellknown/cloudinary/<your_cloud_name>`
    * By adding this file, you indicate that you have access to this bucket and that you permit Cloudinary to access and modify this bucket's contents.
    * If you want this bucket to be allowlisted for more than one Cloudinary product environment, you can add an appropriately named file for each cloud name.

2. Provide Cloudinary with information and access to your bucket: 
    \- [Backing up to Amazon S3](#backing_up_to_amazon_s3)
    \- [Backing up to Google Cloud Storage](#backing_up_to_google_cloud_storage)

### Backing up to Amazon S3

To configure automatic backups to an [Amazon S3 bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html):

1. [Create your Amazon S3 bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html), and name it with your company name and region, for example: `cloudinary-backup-wodup-us-east-2`.
2. Grant full access permissions to Cloudinary's AWS account, `info@cloudinary.com`, using one of the following methods: 
   * **AWS Console**: Set up the bucket policy using this JSON code. Make sure to replace `<your_bucket_name>` with your bucket's name.
   
      ```
          {
          "Version": "2012-10-17",
          "Id": "CloudinaryOriginPolicyId",
          "Statement": [
              {
                  "Sid": "CloudinaryBackupPolicySid",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::232482882421:root"
                  },
                  "Action": [
                      "s3:DeleteObject",
                      "s3:GetObject",
                      "s3:GetObjectAcl",
                      "s3:ListBucket",
                      "s3:PutObject",
                      "s3:PutObjectAcl"
                  ],
                  "Resource": [
                      "arn:aws:s3:::<your_bucket_name>/*",
                      "arn:aws:s3:::<your_bucket_name>"
                  ]
              }
          ]
      }
      ```
   * **AWS CloudFormation**: Use [CloudinaryS3Backup.json](https://cloudinary-res.cloudinary.com/raw/upload/fl_attachment/docs/backup_buckets/CloudinaryS3Backup.json) within AWS CloudFormation to create the backup bucket.
    > **NOTE**: If at a later point you need to update permissions on an existing S3 buckets, changes may take some time to propagate, and you may not see the changes taking effect right away.
3. In your Cloudinary Console Settings, go to the [Upload](https://console.cloudinary.com/app/settings/upload) page.  Enter the name of your S3 bucket in the **Use your own backup bucket** field and click **Save**.
   
    ![Screenshot of setting S3 bucket](https://cloudinary-res.cloudinary.com/image/upload/bo_1px_solid_gray/f_auto/q_auto/v1636457471/docs/backup_buckets/s3_backup.png  "thumb: w_650,dpr_2, width: 650, popup: true")

4. [Enable automatic backup](#enabling_automatic_backup) and click **Perform initial backup** to back up your current assets to your S3 bucket.  Any new uploaded assets will be automatically backed up to this bucket.

### Backing up to Google Cloud Storage

To configure automatic backups to a [Google Cloud storage bucket](https://cloud.google.com/storage/docs/quickstart-console):

1. [Create a Google Cloud storage bucket](https://cloud.google.com/storage/docs/creating-buckets) using this naming convention:`{XXX}-gs-cld`, for example: `mycloud-gs-cld`

    Make sure to select the **Fine-grained** access control method when creating the bucket.
1. [Grant full access permissions](https://cloud.google.com/storage/docs/access-control/using-iam-permissions) to Cloudinary by adding `service@cloudinary-gcs-production.iam.gserviceaccount.com` as a member with the **Storage Object Admin** role.
1. In your Cloudinary Console Settings, go to the [Upload](https://console.cloudinary.com/app/settings/upload) page.  Enter the name of your Google Cloud bucket in the **Use your own backup bucket** field and click **Save**.
  
    ![Screenshot of setting Google Cloud bucket](https://cloudinary-res.cloudinary.com/image/upload/c_crop,h_500,w_2000,g_south/bo_1px_solid_gray/f_auto/q_auto/v1636457920/docs/backup_buckets/google_backup.png "thumb: w_700,dpr_2, width: 700, popup: true")

2. [Enable automatic backup](#enabling_automatic_backup) and click **Perform initial backup** to back up your current assets to your Google Cloud storage bucket.  Any new uploaded assets will be automatically backed up to this bucket.

## Overriding the global backup setting

You can selectively override the global backup setting when uploading a specific file by setting the `backup` parameter in the upload API call.

For example, if the global backup setting isn't enabled, setting the backup parameter to `true` when uploading the file `sample.jpg`, ensures that the uploaded file is backed up:

```multi
|ruby 
Cloudinary::Uploader.upload("sample.jpg", 
  backup: true)
  
|php_2
$cloudinary->uploadApi()->upload("sample.jpg", 
  ["backup" => true]);

|python
cloudinary.uploader.upload("sample.jpg", 
  backup = True)

|nodejs
cloudinary.v2.uploader
.upload("sample.jpg", 
  { backup: true })
.then(result=>console.log(result)); 
  
|java
cloudinary.uploader().upload("sample.jpg", 
  ObjectUtils.asMap("backup", true));

|csharp
var uploadParams = new ImageUploadParams(){
  File = new FileDescription(@"sample.jpg"),
  Backup = true};
var uploadResult = cloudinary.Upload(uploadParams);

|swift
let params = CLDUploadRequestParams()
  .setBackup(true)
var mySig = MyFunction(params)  // your own function that returns a signature generated on your backend
params.setSignature(CLDSignature(signature: mySig.signature, timestamp: mySig.timestamp))
let request = cloudinary.createUploader().signedUpload(
  url: "sample.jpg", params: params)

|go
resp, err := cld.Upload.Upload(ctx, "sample.jpg", uploader.UploadParams{
	Backup: api.Bool(true)})

|cli
cld uploader upload "sample.jpg" backup=true
```

## Deleting backups

To delete backup storage that you no longer require:

* If you are using Cloudinary's default backup storage, [contact the support team](https://support.cloudinary.com/hc/en-us/requests/new) with your cloud name and last four characters of your API secret. The backup will be deleted, freeing up space in your product environment.

* If you are using your own backup storage, you can delete this yourself, but you should [contact the support team](https://support.cloudinary.com/hc/en-us/requests/new) to update the database records for your backups.

> **NOTE**: To pick and choose versions of individual files to be deleted from your backup storage, use the [Delete backed up versions of resources](admin_api#delete_backed_up_versions_of_a_resource) method of the Admin API.

## Versioning

You can list and restore assets from backup either [programmatically](#managing_asset_versions_programmatically), or [via the Media Library](#managing_asset_versions_via_the_media_library).

### Managing asset versions programmatically

Programmatically, you can: 

* [Get details of backed up versions of an asset](#getting_details_of_an_asset_39_s_versions)
* [Restore a specific version of an asset](#restoring_a_version_of_an_asset)
* [Download a backed up version of an asset](#downloading_a_version_of_an_asset)
* [Delete versions of an asset](#deleting_a_version_of_an_asset)

#### Getting details of an asset's versions
To see details of backed up versions for a specific asset, use the [resource](admin_api#get_details_of_a_single_resource_by_public_id) method of the Admin API, setting the `versions` parameter to true.  For example:

```multi
|curl
curl \
  https://<API_KEY>:<API_SECRET>@api.cloudinary.com/v1_1/<cloud_name>/resources/image/upload/toy_dr4lvl?versions=true

|ruby
Cloudinary::Api.resource('toy_dr4lvl',
  versions: true)

|php_2
$api->asset("toy_dr4lvl",
  ["versions" => true]);

|python
cloudinary.api.resource("toy_dr4lvl",
  versions = True)

|nodejs
cloudinary.v2.api
.resource('toy_dr4lvl', 
  { versions: true})
.then(result=>console.log(result));

|java
api.resource("toy_dr4lvl",
  ObjectUtils.asMap("versions", true));

|csharp
var getResource = new GetResourceParams("toy_dr4lvl"){
Versions = true };
var info = cloudinary.GetResource(getResource);

|go
resp, err := cld.Admin.Asset(ctx, admin.AssetParams{
  PublicID: "toy_dr4lvl",
  Versions: api.Bool(true)})

|cli
cld admin resource toy_dr4lvl versions=true
```

Sample response:

```json
  "asset_id": "1c827f8b0ea0dff67945e288483ce5c0",
  "public_id": "toy_dr4lvl",
  "format": "jpg",
  "version": 1589464726,
  "resource_type": "image",
  ...
  ...
  "versions": [
    {
      "version_id": "742ff6d17e189a453bdd4a74ead3e08e",
      "version": "1589357114",
      "format": "jpg",
      "size": 72661,
      "time": "2020-05-13T08:05:14+00:00",
      "restorable": true
    },
    {
      "version_id": "c3fe4be5921eb89acd9af738c892f654",
      "version": "1589464242",
      "format": "jpg",
      "size": 50127,
      "time": "2020-05-14T13:50:42+00:00",
      "restorable": true
    },
    {
      "version_id": "8f91be6973e5d7a54318dcdf000c1f19",
      "version": "1589464726",
      "format": "jpg",
      "size": 72661,
      "time": "2020-05-14T13:58:46+00:00",
      "restorable": false
    }
  ]
}
```

#### Restoring a version of an asset

To restore a specific version of an asset, use the [restore](admin_api#restore_resources) method of the Admin API together with the `versions` parameter set to the `version_id` of the specific version.  You can use arrays to specify more than one asset and each asset's corresponding version to restore. For example:

```multi
|curl
curl \
 -d "public_ids[]=image1&public_ids[]=image2&versions[]=c3fe4be5921eb89acd9af738c892f654&versions[]=d214063097a43d1d1293db61a397f60f" \
 -X POST \
 https://<API_KEY>:<API_SECRET>@api.cloudinary.com/v1_1/<cloud_name>/resources/image/upload/restore

|ruby
Cloudinary::Api.restore(["image1", "image2"], versions => ["c3fe4be5921eb89acd9af738c892f654", "d214063097a43d1d1293db61a397f60f"])

|php_2
$api->restore(["image1", "image2"], "versions" => ["c3fe4be5921eb89acd9af738c892f654", "d214063097a43d1d1293db61a397f60f"]);

|python
cloudinary.api.restore(["image1", "image2"], versions = ["c3fe4be5921eb89acd9af738c892f654", "d214063097a43d1d1293db61a397f60f"])

|nodejs
cloudinary.v2.api
.restore(["image1", "image2"], versions: ["c3fe4be5921eb89acd9af738c892f654", "d214063097a43d1d1293db61a397f60f"])
.then(result=>console.log(result));

|java
cloudinary.api().restore(Arrays.asList("image1", "image2"), ObjectUtils.asMap("versions", Arrays.asList("c3fe4be5921eb89acd9af738c892f654", "d214063097a43d1d1293db61a397f60f")),
  ObjectUtils.emptyMap());

|csharp
var publicIds = new List<string>(){"image1", "image2"};
var versionIds = new List<string>(){"c3fe4be5921eb89acd9af738c892f654", "d214063097a43d1d1293db61a397f60f" };
var restoreParams = new RestoreParams(){
  PublicIds = publicIds,
  Versions = versionIds};
cloudinary.Restore(restoreParams);

|go
resp, err := cld.Admin.RestoreAssets(ctx, admin.RestoreAssetsParams{
    PublicIDs: []string{"image1", "image2"},
    Versions:  []string{"c3fe4be5921eb89acd9af738c892f654", "d214063097a43d1d1293db61a397f60f"}})

|cli
cld admin restore "image1","image2" versions="c3fe4be5921eb89acd9af738c892f654","d214063097a43d1d1293db61a397f60f"
```

> **TIP**: Before restoring a version programmatically, you might want to preview it in the Media Library. For more information, see [Version History](media_library_for_developers#version_history) in the _Media Library for developers_ page.

#### Downloading a version of an asset

To download a backed up version of an asset without restoring it, use the [download_backup](image_upload_api_reference#download_backup_method) method. 

* The endpoint returns the specified version of the asset in bytes.
* The SDKs return a URL of the asset that can be used to download that version of the asset (within an hour of the request).

For example, to return the URL of a backed up version of an asset with `asset_id` of `62c2a18d622be7e190d21df8e05b1416` and `version_id` of `26fe6d95df856f6ae12f5678be94516a`, use the following syntax (the cURL example returns the asset in bytes):

```multi
|ruby
Cloudinary::Utils.download_backedup_asset('62c2a18d622be7e190d21df8e05b1416', '26fe6d95df856f6ae12f5678be94516a')

|python
cloudinary.utils.download_backedup_asset("62c2a18d622be7e190d21df8e05b1416", "26fe6d95df856f6ae12f5678be94516a")

|nodejs
cloudinary.v2.utils.download_backedup_asset('62c2a18d622be7e190d21df8e05b1416', '26fe6d95df856f6ae12f5678be94516a');

|java
cloudinary.downloadBackedupAsset("62c2a18d622be7e190d21df8e05b1416", "26fe6d95df856f6ae12f5678be94516a",
  ObjectUtils.emptyMap());

|csharp
var backupParams = new BackupParams() 
{AssetId = "62c2a18d622be7e190d21df8e05b1416", VersionId = "26fe6d95df856f6ae12f5678be94516a"};
var url = cloudinary.DownloadBackedupAsset(backupParams); 

|go
resp, err := cld.Upload.DownloadBackedUpAsset(uploader.DownloadBackedUpAssetParams{
		AssetID:   "62c2a18d622be7e190d21df8e05b1416",
		VersionID: "26fe6d95df856f6ae12f5678be94516a"})

|curl
curl https://api.cloudinary.com/v1_1/demo/download_backup?timestamp=173719931&asset_id=62c2a18d622be7e190d21df8e05b1416&version_id=26fe6d95df856f6ae12f5678be94516a&signature=c9937fe93eb655ce04633034f921b83969eff9aa&api_key=323127161127519

|cli
cld utils download_backedup_asset "62c2a18d622be7e190d21df8e05b1416" "26fe6d95df856f6ae12f5678be94516a"
```

The SDK methods return the URL to download the requested backed up version of the asset, as follows:  

```
https://api.cloudinary.com/v1_1/demo/download_backup?timestamp=173719931&asset_id=62c2a18d622be7e190d21df8e05b1416&version_id=26fe6d95df856f6ae12f5678be94516a&signature=c9937fe93eb655ce04633034f921b83969eff9aa&api_key=323127161127519
```

The URL returned in the response is valid for an hour.

#### Deleting a version of an asset

> **INFO**: Deleting from backup is irreversible and any deleted versions from a backed up asset can't be recovered in any way.

To delete a specific version of an asset, use the [delete backed up versions of a resource](admin_api#delete_backed_up_versions_of_a_resource) method of the Admin API together with the `version_ids` of the specific versions to delete. For example:

```multi
|curl
curl \
  -d "version_ids[]=5552aa57e67445552a3cdc1110a0115&version_ids[]=383e22a57167445552a3cdc16f0a0c85" \
  -X DELETE \
  https://<API_KEY>:<API_SECRET>@api.cloudinary.com/v1_1/<cloud_name>/resources/backup/8267a869b62a93a59248f35d7f124c1f
```

### Managing asset versions via the Media Library
You can list, preview and restore previous versions of an asset from the [asset management drill down page](dam_manage_individual_assets#asset_management_drill_down) by clicking **Version History** from the kebab menu: 

![screenshot of manage page with 'Version History' highlighted](https://cloudinary-res.cloudinary.com/image/upload/c_crop,g_north_east,w_1700,h_700/f_auto/q_auto/bo_1px_solid_grey/v1722959655/docs/DAM/Screen_Shot_2024-08-06_at_18.44.30.png "thumb: w_700,dpr_2, width:700, with_code: false, with_url: false, popup:true")

To preview a specific version of the asset, click **Open in new tab**. To restore a previous version, click the **Restore version history** link next to the listed version.

![screenshot of revisions](https://cloudinary-res.cloudinary.com/image/upload/f_auto/q_auto/bo_1px_solid_grey/v1722959335/docs/DAM/version_history.png "thumb: w_350,dpr_2, width:350, with_code:false, with_url:false, popup:true")

## Restoring deleted assets from backup
[//]: # (DOC TEAM - This heading is linked to from a Learn More button in an error message in the Media Library - the error message relates to the note just below the first paragraph. So, if moving this heading off this doc page, changing the significance of the note content, moving the note out of this heading, or even lower in the heading where you'd have to scroll to see the note, need to coordinate this change with the Assets team. Have already added a manual anchor, so that the anchor value won't break if you just change the text of the heading.)

You can restore deleted assets from backup either [programmatically](#restoring_deleted_assets_programmatically), or [via the Media Library](#restoring_deleted_assets_via_the_media_library).

> **NOTE**: When backed up assets are deleted, the public ID of the deleted asset is reserved by the backup system so that it will be available for future restoring along with its full backup history. This means that you can't rename another asset to use that public ID, as those assets have their own backup history. 

You can, however, upload a new asset with the same public ID as a previously deleted and backed-up asset. In that case, the newly uploaded asset becomes the latest version of the backed-up asset.

### Restoring deleted assets programmatically

To find specific assets that you want to restore from backup programmatically, you can use the [search method](search_method) with the `expression` parameter set to `status=deleted`, together with other [supported expression fields](search_method#supported_expression_fields) to narrow down the results:

```multi
|ruby
result = Cloudinary::Search
  .expression('status=deleted AND tags=shirt')
  .sort_by('public_id','desc')
  .max_results(30)
  .execute

|php_2
$result = $cloudinary->searchApi()
  ->expression('status=deleted AND tags=shirt')
  ->sortBy('public_id','desc')
  ->maxResults(30)
  ->execute();

|python
result = cloudinary.Search()\
  .expression("status=deleted AND tags=shirt")\
  .sort_by("public_id","desc")\
  .max_results("30")\
  .execute()

|nodejs
cloudinary.v2.search
  .expression('status=deleted AND tags=shirt')
  .sort_by('public_id','desc')
  .max_results(30)
  .execute()
  .then(result=>console.log(result));
  
|java
result = cloudinary.search()
  .expression("status=deleted AND tags=shirt")
  .sortBy("public_id","desc")
  .maxResults(30)
  .execute();

|csharp
SearchResult result = cloudinary.Search()
  .Expression("status=deleted AND tags=shirt")
  .SortBy("public_id","desc")
  .MaxResults(30)
  .Execute();

|go
resp, err := cld.Admin.Search(ctx, search.Query{
    Expression: "status=deleted AND tags=shirt",
    SortBy:     []search.SortByField{{"public_id": "desc"}},
    MaxResults: 30})

|curl
curl \
  -H "Content-Type: application/json" \
  -d '{
        "expression": "status=deleted AND tags=shirt",
        "sort_by": [{"public_id": "desc"}],
        "max_results":30
      }' \
  https://<API_KEY>:<API_SECRET>@api.cloudinary.com/v1_1/<cloud_name>/resources/search

|cli
cld search "status=deleted AND tags=shirt" -s public_id desc -n 30 
```

Once you've found your deleted assets, you can restore them from backup programmatically using the [restore](admin_api#restore_resources) method of the Admin API. If no versions are specified, the latest backed up version of the asset is restored. For example, to restore deleted assets with the public_ids 'image1' and 'image2':

```multi
|curl
curl \
 -d "public_ids[]=image1&public_ids[]=image2" \
 -X POST \
 https://<API_KEY>:<API_SECRET>@api.cloudinary.com/v1_1/<cloud_name>/resources/image/upload/restore

|ruby
Cloudinary::Api.restore(["image1", "image2"])

|php_2
$api->restore(["image1", "image2"]);

|python
cloudinary.api.restore(["image1", "image2"])

|nodejs
cloudinary.v2.api
.restore(["image1", "image2"])
.then(result=>console.log(result));

|java
cloudinary.api().restore(Arrays.asList("image1", "image2"),
  ObjectUtils.emptyMap());

|csharp
var publicIds = new List<string>(){"image1", "image2"};
cloudinary.Restore(publicIds);

|go
resp, err := cld.Admin.RestoreAssets(ctx, admin.RestoreAssetsParams{
    PublicIDs: []string{"image1", "image2"}})

|cli
cld admin restore "image1","image2"
```

To restore a specific version of a deleted asset, use the `versions` parameter, as shown in [Restoring a version of an asset](#restoring_a_version_of_an_asset).

### Restoring deleted assets via the Media Library

**To restore deleted assets through the Media Library:** 

1. Navigate to the **Assets** page of the Media Library
    > **NOTE**:
>
> If you have Visual Search, make sure **Advanced** is selected in the toggle button.
2. In the **Saved** drop down, select **Deleted assets**.

![Navigate to deleted assets](https://res.cloudinary.com/cloudinary/image/upload/bo_1px_solid_grey/f_auto/q_auto/v1/docs/DAM/quick_access_deleted_assets "thumb: w_700,dpr_2, width:700, with_code:false, with_url:false, popup:true")

Optionally narrow the search down further using Advanced Search filters. 
 

Select the asset and click the preview icon to open the Preview pane, or double click the asset to open the Manage page.
In the Preview pane or the kebab menu in the Manage page, click  Version History. 
Select a specific version to restore as described in Managing asset versions via the Media Library, and click Restore visual content. 

#### Restoring deleted assets video tutorial

This video shows how to restore deleted assets in the Media Library:

