---
title: "Time to live (TTL)"
description: "Set object expiration with time-to-live (TTL) with code examples in Python, TypeScript, Java, and C#."
url: https://docs.weaviate.io/weaviate/manage-collections/time-to-live
---

# Time to live (TTL)

> [!NOTE]
>
> **Added in `v1.36`**

Time-to-live (TTL) allows you to set an expiration time for objects in a collection.

Expired objects are periodically removed from the collection by Weaviate's background processes, helping you manage data lifecycle and storage.

TTLs are currently defined at the collection level. They can be set [relative to an object's creation time](https://docs.weaviate.io/weaviate/manage-collections/time-to-live#relative-to-a-creation-time), [the last update time](https://docs.weaviate.io/weaviate/manage-collections/time-to-live#relative-to-a-last-update-time), or [a specific `DATE` property](https://docs.weaviate.io/weaviate/manage-collections/time-to-live#relative-to-a-specific-date-property) within the object.

With all TTL definitions, you can optionally set whether to exclude expired, but not yet deleted, objects from query results. This can prevent erroneous data retrieval before the background deletion process runs.

> [!NOTE]
>
> **Prerequisites**
>
> TTL requires the [`OBJECTS_TTL_DELETE_SCHEDULE`](https://docs.weaviate.io/deploy/configuration/env-vars) environment variable to be set on the Weaviate instance. This variable defines the cron schedule for the background deletion process. If it is not set, expired objects will not be deleted.
>
> The minimum TTL value is 60 seconds.

## Relative to a creation time

Set a TTL to count forward from the object's creation time metadata. The value must be positive.

**Python**

```py
from weaviate.classes.config import Configure, Property, DataType
import datetime

client.collections.create(
    name="CollectionWithTTL",
    properties=[
        Property(name="referenceDate", data_type=DataType.DATE),
    ],
    object_ttl_config=Configure.ObjectTTL.delete_by_creation_time(
        time_to_live=datetime.timedelta(hours=1),  # Or set 3600 for seconds
        filter_expired_objects=True,  # Optional: automatically filter out expired objects from queries
    ),
)
```

**JavaScript/TypeScript**

```ts
await client.collections.create({
  name: 'CollectionWithTTL',
  properties: [
    { name: 'referenceDate', dataType: dataType.DATE },
  ],
  objectTTL: configure.objectTTL.deleteByCreationTime({
    defaultTTLSeconds: 3600,  // 1 hour
    filterExpiredObjects: true,  // Optional: automatically filter out expired objects from queries
  }),
});
```

**Java**

```java
client.collections.create("CollectionWithTTL",
    c -> c.properties(Property.date("referenceDate"))
        .objectTtl(ttl -> ttl
            .deleteByCreationTime()
            .defaultTtlSeconds(3600)  // 1 hour
            .filterExpiredObjects(true)  // Optional: automatically filter out expired objects from queries
        ));
```

**C#**

```csharp
await client.Collections.Create(
    new CollectionCreateParams
    {
        Name = "CollectionWithTTL",
        Properties = [Property.Date("referenceDate")],
        ObjectTTLConfig = ObjectTTLConfig.ByCreationTime(
            TimeSpan.FromHours(1), // 1 hour
            filterExpiredObjects: true // Optional: automatically filter out expired objects from queries
        ),
    }
);
```

## Relative to a last update time

Set a TTL to count forward from the object's last updated time metadata. The value must be positive.

**Python**

```py
from weaviate.classes.config import Configure, Property, DataType
import datetime

client.collections.create(
    name="CollectionWithTTL",
    properties=[
        Property(name="referenceDate", data_type=DataType.DATE),
    ],
    object_ttl_config=Configure.ObjectTTL.delete_by_update_time(
        time_to_live=datetime.timedelta(days=10),  # Or set 864000 for seconds
        filter_expired_objects=True,  # Optional: automatically filter out expired objects from queries
    ),
)
```

**JavaScript/TypeScript**

```ts
await client.collections.create({
  name: 'CollectionWithTTL',
  properties: [
    { name: 'referenceDate', dataType: dataType.DATE },
  ],
  objectTTL: configure.objectTTL.deleteByUpdateTime({
    defaultTTLSeconds: 864000,  // 10 days
    filterExpiredObjects: true,  // Optional: automatically filter out expired objects from queries
  }),
});
```

**Java**

```java
client.collections.create("CollectionWithTTL",
    c -> c.properties(Property.date("referenceDate"))
        .objectTtl(ttl -> ttl
            .deleteByUpdateTime()
            .defaultTtlSeconds(864000)  // 10 days
            .filterExpiredObjects(true)  // Optional: automatically filter out expired objects from queries
        ));
```

**C#**

```csharp
await client.Collections.Create(
    new CollectionCreateParams
    {
        Name = "CollectionWithTTL",
        Properties = [Property.Date("referenceDate")],
        ObjectTTLConfig = ObjectTTLConfig.ByUpdateTime(
            TimeSpan.FromDays(10), // 10 days
            filterExpiredObjects: true // Optional: automatically filter out expired objects from queries
        ),
    }
);
```

## Relative to a specific DATE property

Set a TTL to a relative value from a specific `DATE` property within the object. The value can be positive or negative.

**Python**

```py
from weaviate.classes.config import Configure, Property, DataType
import datetime

client.collections.create(
    name="CollectionWithTTL",
    properties=[
        Property(name="referenceDate", data_type=DataType.DATE),
    ],
    object_ttl_config=Configure.ObjectTTL.delete_by_date_property(
        property_name="referenceDate",
        ttl_offset=datetime.timedelta(minutes=5),
    ),
)
```

**JavaScript/TypeScript**

```ts
await client.collections.create({
  name: 'CollectionWithTTL',
  properties: [
    { name: 'referenceDate', dataType: dataType.DATE },
  ],
  objectTTL: configure.objectTTL.deleteByDateProperty({
    property: 'referenceDate',
    defaultTTLSeconds: 300,  // 5 minutes offset
  }),
});
```

**Java**

```java
client.collections.create("CollectionWithTTL",
    c -> c.properties(Property.date("referenceDate"))
        .objectTtl(ttl -> ttl
            .deleteByDateProperty("referenceDate")
            .defaultTtlSeconds(300)  // 5 minutes offset
        ));
```

**C#**

```csharp
await client.Collections.Create(
    new CollectionCreateParams
    {
        Name = "CollectionWithTTL",
        Properties = [Property.Date("referenceDate")],
        ObjectTTLConfig = ObjectTTLConfig.ByDateProperty(
            "referenceDate",
            TimeSpan.FromMinutes(5) // 5 minutes offset
        ),
    }
);
```

## Further resources

- [Concepts: Data | Time to live](https://docs.weaviate.io/weaviate/concepts/data#time-to-live-ttl)
- [References: Environment variables](https://docs.weaviate.io/deploy/configuration/env-vars)
