---
title: "Create an indexed asset"
method: POST
path: "/indexes/{index-id}/indexed-assets"
tags: ["indexes > indexedAssets"]
---

# Create an indexed asset

`POST /indexes/{index-id}/indexed-assets`

## Request

- Base URL: `https://api.twelvelabs.io/v1.3`
- URL: `https://api.twelvelabs.io/v1.3/indexes/{index-id}/indexed-assets`
- Auth: API key in header `x-api-key`

This method indexes an uploaded asset to make it searchable and analyzable. Indexing processes your content and extracts information that enables the platform to search and analyze your videos.

This operation is asynchronous. The platform returns an indexed asset ID immediately and processes your content in the background. Monitor the indexing status to know when your content is ready to use.

<Note title="Adding videos to existing indexes">
You can no longer add videos to an index that has only Pegasus 1.2 enabled. When you add videos to an index that has both Marengo and Pegasus 1.2 enabled, the platform indexes them with Marengo only.
</Note>

Your asset must meet the requirements based on your workflow:
- **Search**: [Marengo requirements](/v1.3/docs/concepts/models/marengo/marengo-3-0#video-file-requirements)
- **Video analysis**: [Pegasus requirements](/v1.3/docs/concepts/models/pegasus/pegasus-1-6#input-requirements).

If you want to both search and analyze your videos, the most restrictive requirements apply.

Indexes have limits on video hours and video count. For details, see the [Video hours and video count limits](/v1.3/docs/concepts/indexes#video-hours-and-video-count-limits) section.

<Note title="Note">
This endpoint is rate-limited. For details, see the [Rate limits](/v1.3/docs/get-started/rate-limits) page.
</Note>

## Path parameters

- `index-id` string, required

## Request body

- object
  - `asset_id` string, required: The unique identifier of the asset to index. The asset status must be `ready`. Use the [Retrieve an asset](/v1.3/api-reference/upload-content/direct-uploads/retrieve) method to check the status. If you uploaded the asset before your plan moved to the new billing, enable storage accounting for it before you index it in an index for which Marengo is enabled. Use the [Enable storage accounting for an asset](/v1.3/api-reference/manage-assets/enable-storage-accounting) method.
  - `enable_video_stream` boolean: This parameter indicates if the platform stores the video for streaming. When set to `true`, the platform stores the video, and you can retrieve its URL by calling the [`GET`](/v1.3/api-reference/videos/retrieve) method of the `/indexes/{index-id}/indexed-assets/{indexed-asset-id}` endpoint. You can then use this URL to access the stream over the <a href="https://en.wikipedia.org/wiki/HTTP_Live_Streaming" target="_blank">HLS</a> protocol.
  - `user_metadata` UserMetadata: Metadata that helps you categorize your assets. The object contains user-defined keys and values, where keys are strings. Each value is a string, a number, a boolean, or an array of strings. Send an integer wider than 53 bits (-9007199254740991 to 9007199254740991), and any identifier you want preserved verbatim, as a string. **Example**: ```JSON "user_metadata": { "category": "recentlyAdded", "batchNumber": 5, "rating": 9.3, "needsReview": true, "hashtags": ["summer", "vlog"] } ```

## Response `202`

The indexing request has been accepted and is processing.

- IndexesIndexedAssetsCreateResponse202
  - `_id` string: The unique identifier of the indexed asset. Use it to monitor the indexing progress.
  - `asset_id` string: The unique identifier of the associated asset.

## Other responses

- `400`: The request has failed.
- `404`: The specified resource does not exist.
- `409`: The platform cannot index this asset because storage accounting is off for it and Marengo is enabled for the index. The error code is `asset_storage_accounting_required`. Enable storage accounting for the asset. You can then retry the request immediately.
- `500`: The request has failed.

## Changes

- **2026-10-15** `576581ede708`: 1 info
  - added the non-success response with the status `409`
- **2026-09-17** `b8591e05c0ba`: 1 warning, 1 info
  - deleted the `header` request parameter `x-api-key`
  - the endpoint scheme security `x-api-key` was added to the API
- **2026-09-12** `6205c7327cde`: 1 info
  - api operation id `create` removed and replaced with `indexes_indexedAssets_create`
- **2026-09-10** `1ff50bf76720`: 1 info
  - added `subschema #1, subschema #2, subschema #3, subschema #4, subschema #5` to the `user_metadata/additionalProperties/` request property `oneOf` list
- **2026-07-31** `5dbd6e8473c9`: 2 warning
  - removed the optional property `docs_url` from the response with the `400` status
  - removed the optional property `docs_url` from the response with the `500` status

[Operation history](https://skmtc.dev/twelvelabs/apis/twelvelabs-api/changes/indexes/:index-id/indexed-assets/post.md)

---

[API](https://skmtc.dev/twelvelabs/apis/twelvelabs-api.md) - [All operations](https://skmtc.dev/twelvelabs/apis/twelvelabs-api/llms.txt) - [OpenAPI document](https://skmtc.dev/twelvelabs/apis/twelvelabs-api/revisions/c23c6e18fdd1?raw)
