> This page is for version v1.3 (default).
> For other versions, use one of these documentation indexes:
> - v1.3 (default): https://docs.twelvelabs.io/v1.3/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.twelvelabs.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.twelvelabs.io/_mcp/server.

# Pre-migration assets

> Learn how assets that you uploaded before your plan moved to the new billing count toward your allowance, and how to enable storage accounting for them.

This page explains how assets that you uploaded before your plan moved to the new billing count toward your allowance, and how to enable storage accounting for them. The rules on this page apply after your plan moves.

# Key concepts

This section explains the key concepts and terminology used on this page:

* **Asset**: Your uploaded content. Once created, you can reference the same asset across multiple operations without uploading the file again.

* **Managed Intelligence**: The service that stores your assets and keeps them ready to use. It includes processing and updates to the latest models.

* **Workload**: A task that you run on your assets. Examples are creating Jockey responses, analyzing, segmenting, and embedding.

* **Allowance**: The amount of Managed Intelligence or Workloads that your plan includes.

* **Pre-migration asset**: An asset that you uploaded before your plan moved to the new billing.

* **Storage accounting**: A setting on an asset that makes it count toward your Managed Intelligence allowance.

# How pre-migration assets work

An asset that is still processing is a pre-migration asset if its upload began before your plan moved. This applies to every plan.

A pre-migration asset has these properties:

* It does not count toward your Managed Intelligence allowance.
* It stays accessible. Your existing indexes stay available.
* It keeps the supported Managed Intelligence benefits, except free re-indexing.

If you delete or replace a pre-migration asset, it stops being a pre-migration asset. The new asset is not a pre-migration asset.

An asset that you upload after your plan moves counts toward your Managed Intelligence allowance. You do not need to take any action for it.

# When storage accounting is required

To add a pre-migration asset to an index with Marengo enabled, or to a knowledge store, you must first enable storage accounting for the asset. Storage accounting makes the asset count toward your Managed Intelligence allowance.

If storage accounting is off, these requests return a `409` error with the code `asset_storage_accounting_required`:

* [Index an asset](/v1.3/api-reference/index-content/create), when Marengo is enabled for the index
* [Create a knowledge store item](/v1.3/api-reference/knowledge-store-items/create)

To fix the error, enable storage accounting for the asset. Then retry the request. This also applies when you re-index an asset in a new index.

# Enable storage accounting

Enable storage accounting for each pre-migration asset that you want to add to an index with Marengo enabled, or to a knowledge store.

> **Warning**
>
> Enabling storage accounting is permanent. You cannot turn it off. The asset counts toward your Managed Intelligence allowance from the moment of the call. TwelveLabs does not charge for storage before that moment.

#### Check the prerequisites

Before you enable storage accounting for an asset, check the following:

* Your plan has moved to the new billing.
* The asset has the `ready` status and a recorded size. To check, use the [Retrieve an asset](/v1.3/api-reference/manage-assets/retrieve) method and read the `status` and `size` fields.
* The asset fits in your Managed Intelligence allowance.

#### Upgrade your SDK

*(Optional)* To use the SDK, upgrade to the latest version of the Python or Node.js SDK:

**`Python SDK`**

```sh Python SDK
pip install --upgrade twelvelabs
```

**`Node.js SDK`**

```sh Node.js SDK
npm install twelvelabs-js@latest
```

#### Enable storage accounting

Call the [Enable storage accounting for an asset](/v1.3/api-reference/manage-assets/enable-storage-accounting) method with the `enabled` field set to `true`. In the SDKs, use the [Python](/v1.3/sdk-reference/python/manage-assets#enable-storage-accounting-for-an-asset) or [Node.js](/v1.3/sdk-reference/node-js/manage-assets#enable-storage-accounting-for-an-asset) method.

#### Python

**`Python`**

```python Python maxLines=12
result = client.assets.enable_storage_accounting(
    asset_id="<YOUR_ASSET_ID>",
    enabled=True,
)
```

#### Node.js

**`Node.js`**

```javascript Node.js maxLines=12
const result = await client.assets.enableStorageAccounting("<YOUR_ASSET_ID>", {
  enabled: true,
});
```

#### cURL

**`cURL`**

```shell cURL maxLines=12
curl -X PUT "https://api.twelvelabs.io/v1.3/assets/<YOUR_ASSET_ID>/storage-accounting" \
  -H "x-api-key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{ "enabled": true }'
```

The response contains the following fields:

```json
{
  "asset_id": "6298d673f1090f1100476d4c",
  "storage_accounting": true,
  "bytes": 104857600
}
```

* `asset_id`: The unique identifier of the asset.
* `storage_accounting`: `true` when the platform counts the asset toward your Managed Intelligence allowance.
* `bytes`: The number of stored bytes that the platform counts for the asset.

After the call succeeds, retry your request to index the asset or add it to a knowledge store.

## Errors

| Status | Code                                  | Cause                                                                                                                                          |
| :----- | :------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------- |
| `409`  | `asset_not_ready_for_storage_billing` | The asset does not have the `ready` status. If the status is `failed`, the asset cannot become ready.                                          |
| `409`  | `asset_storage_size_unknown`          | The asset has no recorded size.                                                                                                                |
| `422`  | `asset_storage_limit_exceeded`        | The asset does not fit in your Managed Intelligence allowance. The message shows the current size, the limit, and the requested size in bytes. |
| `422`  | `platform_billing_not_active`         | Your plan has not moved to the new billing. Enable storage accounting after your plan moves.                                                   |

For the full list of errors, see [Enable storage accounting for an asset](/v1.3/api-reference/manage-assets/enable-storage-accounting) in the API reference.