---
title: Lifecycle Policies
url: https://docs.vultr.com/products/storage/object-storage/archival-storage/manage-lifecycle-policies
description: Manage lifecycle policies for Vultr archival storage to control object transitions and optimize storage costs.
publish_date: 2026-04-01T13:35:06.281177Z
last_updated: 2026-05-26T19:42:10.858759Z
---

# How to Manage Lifecycle Policies for Archival Storage

A lifecycle policy defines which objects in a bucket transition to the `VULTR_ARCHIVE` storage class and when. Policies run at 00:00 UTC each day. Setting the transition delay to `0` days queues objects for transition in the next nightly run.

The `Filter` element in a lifecycle policy supports the following criteria:

* `Prefix`: matches objects under a specified path
* `ObjectSizeGreaterThan`: matches objects larger than the specified size in bytes
* `ObjectSizeLessThan`: matches objects smaller than the specified size in bytes

Combine multiple criteria by wrapping them inside an `And` element.

> [!NOTE]
> * Lifecycle policies on Archive subscriptions (tier_id 6) are locked to the default and cannot be modified via the API, Console, or S3-compatible tools.
> * Bucket names must be between 3 and 53 characters to be eligible for Archival Storage. Applying a lifecycle policy to a bucket with a name longer than 53 characters returns an error.
> * Buckets with versioning enabled — or that previously had versioning enabled — are not eligible for Archival Storage.

Follow this guide to view, set, and suspend lifecycle policies on Standard Object Storage buckets with Archival Storage enabled.

### XML policy examples

**Move all objects to archive immediately:**

```xml
<LifecycleConfiguration>
    <Rule>
        <ID>MoveAllToArchive</ID>
        <Filter>
            <Prefix></Prefix>
        </Filter>
        <Status>Enabled</Status>
        <Transition>
            <Days>0</Days>
            <StorageClass>VULTR_ARCHIVE</StorageClass>
        </Transition>
    </Rule>
</LifecycleConfiguration>
```

**Move a subset of objects to archive after 4 days:**

This example moves objects under the `cold-data/` prefix that are larger than 1 GB. Adjust the `Prefix`, `ObjectSizeGreaterThan`, and `Days` values to match your requirements.

```xml
<LifecycleConfiguration>
    <Rule>
        <ID>MoveSubsetToArchive</ID>
        <Filter>
            <And>
                <Prefix>cold-data/</Prefix>
                <ObjectSizeGreaterThan>1000000000</ObjectSizeGreaterThan>
            </And>
        </Filter>
        <Status>Enabled</Status>
        <Transition>
            <Days>4</Days>
            <StorageClass>VULTR_ARCHIVE</StorageClass>
        </Transition>
    </Rule>
</LifecycleConfiguration>
```

To pause archival without removing the policy, set the rule's `Status` to `Suspended` in the XML before reapplying.

=== "Vultr Console"

    * To retrieve the current lifecycle policy:

        1. Navigate to **Products** and click **Cloud Storage**.
        1. Select **Object Storage** and click the target Standard subscription.
        1. Click **Buckets**.
        1. Click the wrench icon next to the target bucket.

            The **Archival Storage Policy** editor displays the current policy XML.

    * To set or update the lifecycle policy:

        1. Navigate to **Products** and click **Cloud Storage**.
        1. Select **Object Storage** and click the target Standard subscription.
        1. Click **Buckets**.
        1. Click the wrench icon next to the target bucket.
        1. In the **Archival Storage Policy** editor, paste the updated policy XML.
        1. Click **Save Changes**.

    * To pause archival:

        1. Navigate to **Products** and click **Cloud Storage**.
        1. Select **Object Storage** and click the target Standard subscription.
        1. Click **Buckets**.
        1. Click the wrench icon next to the target bucket.
        1. In the **Archival Storage Policy** editor, update the `<Status>` element to `Suspended`.
        1. Click **Save Changes**.

=== "Vultr API"

    > [!NOTE]
    > Replace `{object-storage-id}` with your subscription ID and `{bucket-name}` with the bucket name in all commands below.

    * To retrieve the current lifecycle policy:

        ```console
        $ curl "https://api.vultr.com/v2/object-storage/{object-storage-id}/bucket/{bucket-name}/lifecycle" \
            -X GET \
            -H "Authorization: Bearer ${VULTR_API_KEY}"
        ```

        Verify that the response contains a rule with `StorageClass: VULTR_ARCHIVE`. If no policy is set, the endpoint returns an error.

    * To set a lifecycle policy (move all objects):

        ```console
        $ curl "https://api.vultr.com/v2/object-storage/{object-storage-id}/bucket/{bucket-name}/lifecycle" \
            -X POST \
            -H "Authorization: Bearer ${VULTR_API_KEY}" \
            -H "Content-Type: application/json" \
            -d '{
                "archive_rules": [
                    {
                        "ID": "MoveAllToArchive",
                        "Status": "Enabled",
                        "Filter": [],
                        "Transitions": [
                            {
                                "Days": 0,
                                "StorageClass": "VULTR_ARCHIVE"
                            }
                        ]
                    }
                ]
            }'
        ```

        To move a subset of objects, use the XML policy examples above with s3cmd. See the **S3cmd** tab for instructions.

    * To pause archival, set the `Status` field to `Suspended` in the request body:

        ```console
        $ curl "https://api.vultr.com/v2/object-storage/{object-storage-id}/bucket/{bucket-name}/lifecycle" \
            -X POST \
            -H "Authorization: Bearer ${VULTR_API_KEY}" \
            -H "Content-Type: application/json" \
            -d '{
                "archive_rules": [
                    {
                        "ID": "MoveAllToArchive",
                        "Status": "Suspended",
                        "Filter": [],
                        "Transitions": [
                            {
                                "Days": 0,
                                "StorageClass": "VULTR_ARCHIVE"
                            }
                        ]
                    }
                ]
            }'
        ```

=== "S3cmd"

    > [!NOTE]
    > Replace `S3_CONFIG` with the path to your s3cmd configuration file and `BUCKET_NAME` with the bucket name in all commands below.

    * To retrieve the current lifecycle policy:

        ```console
        $ s3cmd -c S3_CONFIG getlifecycle s3://BUCKET_NAME/
        ```

    * To set a lifecycle policy, save one of the XML policy examples above as `lifecycle.xml`, then apply it to the bucket:

        ```console
        $ s3cmd -c S3_CONFIG setlifecycle lifecycle.xml s3://BUCKET_NAME/
        ```

    * To pause archival, update `lifecycle.xml` to set `<Status>Suspended</Status>`, then reapply:

        ```console
        $ s3cmd -c S3_CONFIG setlifecycle lifecycle.xml s3://BUCKET_NAME/
        ```
