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

# Creating and launching data transfers in Object Storage

Data transfers allow you to move data between buckets when you want to migrate or replicate it. For more information, see [How data transfers work](/object-storage/transfer/overview).

## Prerequisites

1. Make sure that you are in a [group](/iam/authorization/groups/index) that has at least the `editor` role within your tenant; for example, the default `editors` group. You can check this in the [Administration → IAM](https://console.nebius.cloud/iam) section of the web console.
2. Make sure that your account has access to the buckets. Prepare credentials for the buckets, for example, access and secret keys. For more information, see [Access to buckets for data transfers](/object-storage/transfer/access).
3. Configure the web console or a developer tool to work in the correct project:

   <Tabs>
     <Tab title="Web console">
       In the [web console](https://console.nebius.cloud), select the project that contains the destination bucket (if it's in Nebius AI Cloud) or the source bucket (if the destination is in an external storage service).
     </Tab>

     <Tab title="CLI">
       1. [Install](/cli/install) and [configure](/cli/configure) the Nebius AI Cloud CLI.
       2. Get the ID of the project that contains the destination bucket (if it's in Nebius AI Cloud) or the source bucket (if the destination is in an external storage service):

          ```bash theme={null}
          nebius storage bucket get <bucket_ID> --format jsonpath='{.metadata.parent_id}'
          ```
     </Tab>

     <Tab title="Terraform">
       1. [Install and configure](/terraform-provider/quickstart) the Nebius AI Cloud provider for Terraform.
       2. Save to a [local variable](https://developer.hashicorp.com/terraform/language/values/locals) the ID of the project that contains the destination bucket (if it's in Nebius AI Cloud) or the source bucket (if the destination is in an external storage service):

          ```hcl theme={null}
          data "nebius_storage_v1_bucket" "nebius_bucket" {
            id = "<source_or_destination_bucket_ID>"
          }

          locals {
            transfer_project_id = data.nebius_storage_v1_bucket.nebius_bucket.parent_id
          }
          ```
     </Tab>
   </Tabs>

## How to launch a data transfer

<Tabs>
  <Tab title="Web console">
    1. In the sidebar, go to <Icon icon="https://mintcdn.com/nebius-ai-cloud/1Ha0sWR6e1mnIaHS/_assets/sidebar/storage.svg?fit=max&auto=format&n=1Ha0sWR6e1mnIaHS&q=85&s=0a2dad6b48aea10e85f6f3e2343aee26" width="16" height="16" data-path="_assets/sidebar/storage.svg" /> **Storage** → **Data Transfer** and then click <Icon icon="https://mintcdn.com/nebius-ai-cloud/1Ha0sWR6e1mnIaHS/_assets/plus.svg?fit=max&auto=format&n=1Ha0sWR6e1mnIaHS&q=85&s=7c9efc69d65fc58db0eb73702fd81aa1" width="16" height="16" data-path="_assets/plus.svg" /> **Create data transfer**.

    2. Configure the data transfer:

       1. Specify its name.

       2. Select the [data transfer type](/object-storage/transfer/stop-condition#data-transfer-type-web-console): one-time transfer or replication.

       3. Configure the source and destination buckets:

       4. Specify the path to the buckets.

          In the **Bucket** field, you can optionally add [object key prefixes](/object-storage/transfer/key-prefixes) to the bucket name. In the source, you filter objects. In the destination, you overwrite prefixes of the source objects.

       5. Set [credentials](/object-storage/transfer/access#credentials).

       6. Configure how the data transfer [handles destination objects](/object-storage/transfer/destination-objects). See the settings under **Overwriting destination objects**{/*, **Deleting destination objects** */} and **Unmanaged objects**.

       7. (Optional) Configure [limits on request rate and bandwidth](./limits).

    3. Click **Create transfer**.
  </Tab>

  <Tab title="CLI">
    1. Create a `transfer.json` file with the data transfer configuration and replace values in the file. Use one of the files below, depending on the source and destination storage services:

           <AccordionGroup>
             <Accordion title="Nebius AI Cloud to Nebius AI Cloud">
               ```json transfer.json theme={null}
               {
                 "metadata": {
                   "name": "<transfer_name>",
                   "parent_id": "<project_ID>"
                 },
                 "spec": {
                   "source": {
                     "nebius": {
                       "region": "<Nebius_AI_Cloud_region>",
                       "bucket_name": "<bucket_name>",

                       // Either:
                       "access_key": {
                         "access_key_id": "<access_key>",
                         "secret_access_key": "<secret_key>"
                       },
                       // Or, for anonymous access:
                       // "anonymous": {}
                     },
                     "prefix": "<source_object_key_prefix>" // Optional
                   },
                   "destination": {
                     "nebius": {
                       "region": "<Nebius_AI_Cloud_region>",
                       "bucket_name": "<bucket_name>",

                       "access_key": {
                         "access_key_id": "<access_key>",
                         "secret_access_key": "<secret_key>"
                       }
                     },
                     "prefix": "<destination_object_key_prefix>" // Optional
                   },

                   // Either:
                   "after_one_iteration": {},
                   // Or:
                   // "after_n_empty_iterations": {
                   //   "empty_iterations_threshold": <number_of_empty_iterations>
                   // },
                   // Or:
                   // "infinite": {},
                   //
                   // "inter_iteration_interval": "<HhMmSs>", // For example, "1h20m40s"

                   "overwrite_strategy": "<NEVER|IF_NEWER>",
                   "touch_unmanaged": true|false,  // Optional
                   "limiters": {  // Optional
                     "requests_per_second": <request_rate_limit>,
                     "bandwidth_bytes_per_second": <bandwidth_limit>
                   }
                 }
               }
               ```
             </Accordion>

             <Accordion title="Nebius AI Cloud to another storage service">
               ```json transfer.json theme={null}
               {
                 "metadata": {
                   "name": "<transfer_name>",
                   "parent_id": "<project_ID>"
                 },
                 "spec": {
                   "source": {
                     "nebius": {
                       "region": "<Nebius_AI_Cloud_region>",
                       "bucket_name": "<bucket_name>",

                       // Either:
                       "access_key": {
                         "access_key_id": "<access_key>",
                         "secret_access_key": "<secret_key>"
                       },
                       // Or, for anonymous access:
                       // "anonymous": {}
                     },
                     "prefix": "<source_object_key_prefix>" // Optional
                   },
                   "destination": {
                     "s3_compatible": {
                       "endpoint": "<storage_service_endpoint>",
                       "region": "<bucket_region>",
                       "bucket_name": "<bucket_name>",

                       // Either:
                       "access_key": {
                         "access_key_id": "<access_key>",
                         "secret_access_key": "<secret_key>"
                       },
                       // Or, for anonymous access:
                       // "anonymous": {}
                     },
                     "prefix": "<destination_object_key_prefix>" // Optional
                   },

                   // Either:
                   "after_one_iteration": {},
                   // Or:
                   // "after_n_empty_iterations": {
                   //   "empty_iterations_threshold": <number_of_empty_iterations>
                   // },
                   // Or:
                   // "infinite": {},
                   //
                   // "inter_iteration_interval": "<HhMmSs>", // For example, "1h20m40s"
                   
                   "overwrite_strategy": "<NEVER|IF_NEWER>",
                   "touch_unmanaged": true|false,  // Optional
                   "limiters": {  // Optional
                     "requests_per_second": <request_rate_limit>,
                     "bandwidth_bytes_per_second": <bandwidth_limit>
                   }
                 }
               }
               ```
             </Accordion>

             <Accordion title="Azure Blob Storage to Nebius AI Cloud">
               ```json transfer.json theme={null}
               {
                 "metadata": {
                   "name": "<transfer_name>",
                   "parent_id": "<project_ID>"
                 },
                 "spec": {
                   "source": {
                     "azure_blob_storage": {
                       "endpoint": "<Azure_Blob_Storage_endpoint>",
                       "container_name": "<container_name>",

                       // Either:
                       "azure_storage_account": {
                         "account_name": "<Azure_storage_account_name>",
                         "access_key": "<access_key>"
                       },
                       // Or, for anonymous access:
                       // "anonymous": {}
                     },
                     "prefix": "<source_object_key_prefix>" // Optional
                   },
                   "destination": {
                     "nebius": {
                       "region": "<Nebius_AI_Cloud_region>",
                       "bucket_name": "<bucket_name>",

                       "access_key": {
                         "access_key_id": "<access_key>",
                         "secret_access_key": "<secret_key>"
                       }
                     },
                     "prefix": "<destination_object_key_prefix>" // Optional
                   },

                   // Either:
                   "after_one_iteration": {},
                   // Or:
                   // "after_n_empty_iterations": {
                   //   "empty_iterations_threshold": <number_of_empty_iterations>
                   // },
                   // Or:
                   // "infinite": {},
                   //
                   // "inter_iteration_interval": "<HhMmSs>", // For example, "1h20m40s"

                   "overwrite_strategy": "<NEVER|IF_NEWER>",
                   "touch_unmanaged": true|false,  // Optional
                   "limiters": {  // Optional
                     "requests_per_second": <request_rate_limit>,
                     "bandwidth_bytes_per_second": <bandwidth_limit>
                   }
                 }
               }
               ```
             </Accordion>

             <Accordion title="Another storage service to Nebius AI Cloud">
               ```json transfer.json theme={null}
               {
                 "metadata": {
                   "name": "<transfer_name>",
                   "parent_id": "<project_ID>"
                 },
                 "spec": {
                   "source": {
                     "s3_compatible_source": {
                       "endpoint": "<storage_service_endpoint>",
                       "region": "<bucket_region>",
                       "bucket_name": "<bucket_name>",

                       // Either:
                       "access_key": {
                         "access_key_id": "<access_key>",
                         "secret_access_key": "<secret_key>"
                       },
                       // Or, for anonymous access:
                       // "anonymous": {}
                     },
                     "prefix": "<source_object_key_prefix>" // Optional
                   },
                   "destination": {
                     "nebius": {
                       "region": "<Nebius_AI_Cloud_region>",
                       "bucket_name": "<bucket_name>",

                       "access_key": {
                         "access_key_id": "<access_key>",
                         "secret_access_key": "<secret_key>"
                       }
                     },
                     "prefix": "<destination_object_key_prefix>" // Optional
                   },

                   // Either:
                   "after_one_iteration": {},
                   // Or:
                   // "after_n_empty_iterations": {
                   //   "empty_iterations_threshold": <number_of_empty_iterations>
                   // },
                   // Or:
                   // "infinite": {},
                   //
                   // "inter_iteration_interval": "<HhMmSs>", // For example, "1h20m40s"

                   "overwrite_strategy": "<NEVER|IF_NEWER>",
                   "touch_unmanaged": true|false,  // Optional
                   "limiters": {  // Optional
                     "requests_per_second": <request_rate_limit>,
                     "bandwidth_bytes_per_second": <bandwidth_limit>
                   }
                 }
               }
               ```
             </Accordion>
           </AccordionGroup>

       For details, see:

       * [Examples](#examples)
       * [Reference](/cli/reference/storage/transfer/create) for the `nebius storage transfer create` CLI command
       * [Transfer configuration](/object-storage/transfer/stop-condition)

    2. Launch the data transfer:

       ```bash theme={null}
       nebius storage transfer create \
         --parent-id $PROJECT_ID \
         --file transfer.json
       ```
  </Tab>

  <Tab title="Terraform">
    1. Add one of the following data transfer blocks to your Terraform configuration, depending on the source and destination storage services, and replace values in the blocks:

           <AccordionGroup>
             <Accordion title="Nebius AI Cloud to Nebius AI Cloud">
               ```hcl theme={null}
               resource "nebius_storage_v1_transfer" "my_transfer" {
                 name      = "<transfer_name>"
                 parent_id = local.transfer_project_id

                 source {
                   nebius {
                     region      = "<Nebius_AI_Cloud_region>"
                     bucket_name = "<bucket_name>"

                     # Either:
                     access_key {
                       access_key_id     = "<access_key>"
                       secret_access_key = "<secret_key>"
                     }
                     # Or, for anonymous access:
                     # anonymous {}
                   }
                   # Optional:
                   prefix = "<source_object_key_prefix>"
                 }

                 destination {
                   nebius {
                     region      = "<Nebius_AI_Cloud_region>"
                     bucket_name = "<bucket_name>"

                     access_key {
                       access_key_id     = "<access_key>"
                       secret_access_key = "<secret_key>"
                     }
                   }
                   # Optional:
                   prefix = "<destination_object_key_prefix>"
                 }

                 # Either:
                 after_one_iteration {}
                 # Or:
                 # after_n_empty_iterations {
                 #   empty_iterations_threshold = <number_of_empty_iterations>
                 # }
                 # Or:
                 # infinite {}
                 #
                 # inter_iteration_interval       = "<HhMmSs>" # Optional. For example, "1h20m40s"

                 overwrite_strategy             = "NEVER"    # Or "IF_NEWER"
                 touch_unmanaged                = false      # Optional

                 # Optional:
                 limiters {
                   requests_per_second      = <request_rate_limit>
                   bandwidth_bytes_per_second = <bandwidth_limit>
                 }
               }
               ```
             </Accordion>

             <Accordion title="Nebius AI Cloud to another storage service">
               ```hcl theme={null}
               resource "nebius_storage_v1_transfer" "my_transfer" {
                 name      = "<transfer_name>"
                 parent_id = local.transfer_project_id

                 source {
                   nebius {
                     region      = "<Nebius_AI_Cloud_region>"
                     bucket_name = "<bucket_name>"

                     # Either:
                     access_key {
                       access_key_id     = "<access_key>"
                       secret_access_key = "<secret_key>"
                     }
                     # Or, for anonymous access:
                     # anonymous {}
                   }
                   # Optional:
                   prefix = "<source_object_key_prefix>"
                 }

                 destination {
                   s3_compatible {
                     endpoint    = "<storage_service_endpoint>"
                     region      = "<bucket_region>"
                     bucket_name = "<bucket_name>"

                     # Either:
                     access_key {
                       access_key_id     = "<access_key>"
                       secret_access_key = "<secret_key>"
                     }
                     # Or, for anonymous access:
                     # anonymous {}
                   }
                   # Optional:
                   prefix = "<destination_object_key_prefix>"
                 }

                 # Either:
                 after_one_iteration {}
                 # Or:
                 # after_n_empty_iterations {
                 #   empty_iterations_threshold = <number_of_empty_iterations>
                 # }
                 # Or:
                 # infinite {}
                 #
                 # inter_iteration_interval       = "<HhMmSs>" # Optional. For example, "1h20m40s"
                 
                 overwrite_strategy             = "NEVER"    # Or "IF_NEWER"
                 touch_unmanaged                = false      # Optional

                 # Optional:
                 limiters {
                   requests_per_second      = <request_rate_limit>
                   bandwidth_bytes_per_second = <bandwidth_limit>
                 }
               }
               ```
             </Accordion>

             <Accordion title="Azure Blob Storage to Nebius AI Cloud">
               ```hcl theme={null}
               resource "nebius_storage_v1_transfer" "my_transfer" {
                 name      = "<transfer_name>"
                 parent_id = local.transfer_project_id

                 source {
                   azure_blob_storage {
                     endpoint       = "<Azure_Blob_Storage_endpoint>"
                     container_name = "<container_name>"

                     # Either:
                     azure_storage_account {
                       account_name = "<Azure_storage_account_name>"
                       access_key   = "<access_key>"
                     }
                     # Or, for anonymous access:
                     # anonymous {}
                   }
                   # Optional:
                   prefix = "<source_object_key_prefix>"
                 }

                 destination {
                   nebius {
                     region      = "<Nebius_AI_Cloud_region>"
                     bucket_name = "<bucket_name>"

                     access_key {
                       access_key_id     = "<access_key>"
                       secret_access_key = "<secret_key>"
                     }
                   }
                   # Optional:
                   prefix = "<destination_object_key_prefix>"
                 }

                 # Either:
                 after_one_iteration {}
                 # Or:
                 # after_n_empty_iterations {
                 #   empty_iterations_threshold = <number_of_empty_iterations>
                 # }
                 # Or:
                 # infinite {}
                 #
                 # inter_iteration_interval       = "<HhMmSs>"  # Optional. For example, "1h20m40s"

                 overwrite_strategy             = "NEVER"     # Or "IF_NEWER"
                 touch_unmanaged                = false       # Optional

                 # Optional:
                 limiters {
                   requests_per_second      = <request_rate_limit>
                   bandwidth_bytes_per_second = <bandwidth_limit>
                 }
               }
               ```
             </Accordion>

             <Accordion title="Another storage service to Nebius AI Cloud">
               ```hcl theme={null}
               resource "nebius_storage_v1_transfer" "my_transfer" {
                 name      = "<transfer_name>"
                 parent_id = local.transfer_project_id

                 source {
                   s3_compatible_source {
                     endpoint    = "<storage_service_endpoint>"
                     region      = "<bucket_region>"
                     bucket_name = "<bucket_name>"

                     # Either:
                     access_key {
                       access_key_id     = "<access_key>"
                       secret_access_key = "<secret_key>"
                     }
                     # Or, for anonymous access:
                     # anonymous {}
                   }
                   # Optional:
                   prefix = "<source_object_key_prefix>"
                 }

                 destination {
                   nebius {
                     region      = "<Nebius_AI_Cloud_region>"
                     bucket_name = "<bucket_name>"

                     access_key {
                       access_key_id     = "<access_key>"
                       secret_access_key = "<secret_key>"
                     }
                   }
                   # Optional:
                   prefix = "<destination_object_key_prefix>"
                 }

                 # Either:
                 after_one_iteration {}
                 # Or:
                 # after_n_empty_iterations {
                 #   empty_iterations_threshold = <number_of_empty_iterations>
                 # }
                 # Or:
                 # infinite {}
                 #
                 # inter_iteration_interval       = "<HhMmSs>" # Optional. For example, "1h20m40s"

                 overwrite_strategy             = "NEVER"    # Or "IF_NEWER"
                 touch_unmanaged                = false      # Optional

                 # Optional:
                 limiters {
                   requests_per_second      = <request_rate_limit>
                   bandwidth_bytes_per_second = <bandwidth_limit>
                 }
               }
               ```
             </Accordion>
           </AccordionGroup>

       For details, see:

       * [Examples](#examples)
       * [Reference](/terraform-provider/reference/resources/storage_v1_transfer) for the `nebius_storage_v1_transfer` resource
       * [Transfer configuration](/object-storage/transfer/stop-condition)

    2. Check that the configuration is correct:
       ```bash theme={null}
       terraform validate
       ```

    3. Apply the changes:
       ```bash theme={null}
       terraform apply
       ```
  </Tab>
</Tabs>

## Examples

### One-time transfer between Nebius AI Cloud regions

The following configuration examples show how to create a one-time transfer (a transfer that stops after one iteration) from a bucket in the `eu-north1` region to a bucket in the `us-central1` region:

<Tabs>
  <Tab title="Web console">
    Create the data transfer in the project in `us-central1` where the destination bucket is located:

    * **Type**: One-time transfer

    * **Source**: Nebius

      * **Region**: `eu-north1`
      * **Bucket name** (example): `source_bucket`
      * **Credentials**: [Access and secret keys](/iam/service-accounts/access-keys)

    * **Destination**: Nebius

      * **Region**: `us-central1`
      * **Bucket name** (example): `destination_bucket`
      * **Credentials**: Access and secret keys
      * **Overwriting destination objects**: Overwrite if source is newer
  </Tab>

  <Tab title="CLI">
    `.metadata.parent_id` should be the ID of the project in `us-central1` that contains the destination bucket.

    ```json theme={null}
    {
      "metadata": {
        "name": "eu-north1-to-us-central1-transfer",
        "parent_id": "project-***"
      },
      "spec": {
        "source": {
          "nebius": {
            "region": "eu-north1",
            "bucket_name": "source_bucket",
            "access_key": {
              "access_key_id": "****",
              "secret_access_key": "****"
            }
          },
        },
        "destination": {
          "nebius": {
            "region": "us-central1",
            "bucket_name": "destination_bucket",
            "access_key": {
              "access_key_id": "****",
              "secret_access_key": "****"
            }
          }
        },
        "after_one_iteration": {},
        "overwrite_strategy": "IF_NEWER"
      }
    }
    ```
  </Tab>

  <Tab title="Terraform">
    `parent_id` should be the ID of the project in `us-central1` that contains the destination bucket.

    ```hcl theme={null}
    resource "nebius_storage_v1_transfer" "my_transfer" {
      name      = "eu-north1-to-us-central1-transfer"
      parent_id = "project-***"

      source {
        nebius {
          region      = "eu-north1"
          bucket_name = "source_bucket"
          access_key {
            access_key_id     = "****"
            secret_access_key = "****"
          }
        }
      }

      destination {
        nebius {
          region      = "us-central1"
          bucket_name = "destination_bucket"
          access_key {
            access_key_id     = "****"
            secret_access_key = "****"
          }
        }
      }

      after_one_iteration {}

      overwrite_strategy = "IF_NEWER"
    }
    ```
  </Tab>
</Tabs>

### Replication between Nebius AI Cloud regions

The following configuration examples show how to create a replication (a continuous transfer that you stop manually) from a bucket in the `us-central1` region to a bucket in the `eu-north1` region:

<Tabs>
  <Tab title="Web console">
    Create the data transfer in the project in `eu-north1` where the destination bucket is located:

    * **Type**: Replication

    * **Source**: Nebius

      * **Region**: `us-central1`
      * **Bucket name** (example): `primary_bucket`
      * **Credentials**: [Access and secret keys](/iam/service-accounts/access-keys)

    * **Destination**: Nebius

      * **Region**: `eu-north1`
      * **Bucket name** (example): `secondary_bucket`
      * **Credentials**: Access and secret keys
      * **Overwriting destination objects**: Overwrite if source is newer
  </Tab>

  <Tab title="CLI">
    `.metadata.parent_id` should be the ID of the project in `eu-north1` that contains the destination bucket.

    ```json theme={null}
    {
      "metadata": {
        "name": "us-central1-to-eu-north1-backup",
        "parent_id": "project-***"
      },
      "spec": {
        "source": {
          "nebius": {
            "region": "us-central1",
            "bucket_name": "primary_bucket",
            "access_key": {
              "access_key_id": "****",
              "secret_access_key": "****"
            }
          }
        },
        "destination": {
          "nebius": {
            "region": "eu-north1",
            "bucket_name": "secondary_bucket",
            "access_key": {
              "access_key_id": "****",
              "secret_access_key": "****"
            }
          }
        },
        "infinite": {},
        "overwrite_strategy": "IF_NEWER"
      }
    }
    ```
  </Tab>

  <Tab title="Terraform">
    `parent_id` should be the ID of the project in `eu-north1` that contains the destination bucket.

    ```hcl theme={null}
    resource "nebius_storage_v1_transfer" "my_transfer" {
      name      = "us-central1-to-eu-north1-backup"
      parent_id = "project-***"

      source {
        nebius {
          region      = "us-central1"
          bucket_name = "primary_bucket"
          access_key {
            access_key_id     = "****"
            secret_access_key = "****"
          }
        }
      }

      destination {
        nebius {
          region      = "eu-north1"
          bucket_name = "secondary_bucket"
          access_key {
            access_key_id     = "****"
            secret_access_key = "****"
          }
        }
      }

      infinite {}
      overwrite_strategy = "IF_NEWER"
    }
    ```
  </Tab>
</Tabs>
