> 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.

# List indexes

GET https://api.twelvelabs.io/v1.3/indexes

This method returns a list of the indexes in your account. The platform returns indexes sorted by creation date, with the oldest indexes at the top of the list.


Reference: https://docs.twelvelabs.io/api-reference/indexes/list

## Authentication

- `x-api-key` header (required) — Your API key. You can find your API key on the API Keys page.

## Request

### Query parameters

- `page` (integer, optional, default: 1) — A number that identifies the page to retrieve. **Default**: `1`.
- `page_limit` (integer, optional, default: 10) — The number of items to return on each page. **Default**: `10`. **Max**: `50`.
- `sort_by` (string, optional, default: created_at) — The field to sort on. The following options are available: - `updated_at`: Sorts by the time, in the RFC 3339 format ("YYYY-MM-DDTHH:mm:ssZ"), when the item was updated. - `created_at`: Sorts by the time, in the RFC 3339 format ("YYYY-MM-DDTHH:mm:ssZ"), when the item was created. **Default**: `created_at`.
- `sort_option` (string, optional, default: desc) — The sorting direction. The following options are available: - `asc` - `desc` **Default**: `desc`.
- `index_name` (string, optional) — Filter by the name of an index.
- `model_options` (string, optional) — Filter by the model options. When filtering by multiple model options, the values must be comma-separated.
- `model_family` (string, optional) — Filter by the model family. This parameter can take one of the following values: `marengo` or `pegasus`. You can specify a single value.
- `created_at` (string, optional) — Filter indexes by the creation date and time, in the RFC 3339 format ("YYYY-MM-DDTHH:mm:ssZ"). The platform returns the indexes that were created on the specified date at or after the given time.
- `updated_at` (string, optional) — Filter indexes by the last update date and time, in the RFC 3339 format ("YYYY-MM-DDTHH:mm:ssZ"). The platform returns the indexes that were last updated on the specified date at or after the given time.

## Response

### 200

The indexes have successfully been retrieved.

- `data` (list of Index, optional) — An array that contains up to `page_limit` indexes.
- `page_info` (page_info, optional) — An object that provides information about pagination.

## Errors

### 400 Bad Request Error

The request has failed.

- `code` (string, optional) — A string representing the code associated with the error. See the [Error codes](/v1.3/api-reference/error-codes) page for details.
- `message` (string, optional) — A human-readable string describing the error, intended to be suitable for display in a user interface.

## Types

### Index

An index groups one or more videos stored as vectors and is the most granular level at which you can perform a search.

- `_id` (string, optional) — A string representing the unique identifier of the index. It is assigned by the platform when an index is created.
- `created_at` (string, optional) — A string representing the date and time, in the RFC 3339 format ("YYYY-MM-DDTHH:mm:ssZ"), that the index was created.
- `updated_at` (string, optional) — A string representing the date and time, in the RFC 3339 format ("YYYY-MM-DDTHH:mm:ssZ"), that the index has been updated.
- `expires_at` (string, optional) — A string representing the date and time, in the RFC 3339 format ("YYYY-MM-DDTHH:mm:ssZ"), when your index will expire. If you're on the Free plan, the platform retains your index data for 90 days from creation. After this period, the platform deletes your index data, and this action cannot be undone. To continue using your index beyond this period, consider upgrading to the Developer plan, which offers unlimited index retention. For details, see the [Upgrade to the Developer plan](/v1.3/docs/get-started/manage-your-plan#upgrade-to-the-developer-plan) section. If you're on the Developer plan, this field is set to `null`, indicating no expiration.
- `index_name` (string, optional) — A string representing the name of the index.
- `total_duration` (double, optional) — A number representing the total duration, in seconds, of the videos in the index.
- `video_count` (double, optional) — The number of videos uploaded to this index.
- `models` (list of IndexModelsItems, optional) — An array containing the list of the [video understanding models](/v1.3/docs/concepts/models) enabled for this index.
- `addons` (list of string, optional) — The list of the add-ons that are enabled for this index.

### page_info

An object that provides information about pagination.

- `limit_per_page` (integer, optional) — The maximum number of items on each page.
- `page` (integer, optional) — The page you retrieved.
- `total_page` (integer, optional) — The total number of pages.
- `total_results` (integer, optional) — The total number of results.

### IndexModelsItems

- `model_name` (string, optional) — A string representing the name of the model.
- `model_options` (list of string, optional) — An array of strings that contains the [model options](/v1.3/docs/concepts/modalities#model-options) enabled for this index.

## Examples

**Response**

```json
{
  "data": [
    {
      "_id": "62d85fe7340fa665f1fda5dd",
      "created_at": "2024-01-09T11:11:20.463Z",
      "updated_at": "2024-01-09T11:17:15.296Z",
      "expires_at": "2024-04-08T11:11:20.463Z",
      "index_name": "index-01",
      "total_duration": 1363.76,
      "video_count": 2,
      "models": [
        {
          "model_name": "marengo3.0",
          "model_options": [
            "visual",
            "audio"
          ],
          "addons": [
            "thumbnail"
          ]
        }
      ]
    },
    {
      "_id": "62d858ee340fa665f1fda5d8",
      "created_at": "2024-01-09T11:11:20.463Z",
      "updated_at": "2024-01-09T11:17:15.296Z",
      "expires_at": "2024-04-08T11:11:20.463Z",
      "index_name": "index-02",
      "total_duration": 579.12,
      "video_count": 1,
      "models": [
        {
          "model_name": "marengo3.0",
          "model_options": [
            "visual"
          ],
          "addons": [
            "thumbnail"
          ]
        }
      ]
    }
  ],
  "page_info": {
    "limit_per_page": 10,
    "page": 1,
    "total_page": 1,
    "total_results": 2
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.twelvelabs.io/v1.3/indexes"

querystring = {"index_name":"myIndex","model_options":"visual,audio","model_family":"marengo","created_at":"2024-08-16T16:53:59Z","updated_at":"2024-08-16T16:55:59Z"}

headers = {"x-api-key": "<apiKey>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript
const url = 'https://api.twelvelabs.io/v1.3/indexes?index_name=myIndex&model_options=visual%2Caudio&model_family=marengo&created_at=2024-08-16T16%3A53%3A59Z&updated_at=2024-08-16T16%3A55%3A59Z';
const options = {method: 'GET', headers: {'x-api-key': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.twelvelabs.io/v1.3/indexes?index_name=myIndex&model_options=visual%2Caudio&model_family=marengo&created_at=2024-08-16T16%3A53%3A59Z&updated_at=2024-08-16T16%3A55%3A59Z"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-api-key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.twelvelabs.io/v1.3/indexes?index_name=myIndex&model_options=visual%2Caudio&model_family=marengo&created_at=2024-08-16T16%3A53%3A59Z&updated_at=2024-08-16T16%3A55%3A59Z")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.twelvelabs.io/v1.3/indexes?index_name=myIndex&model_options=visual%2Caudio&model_family=marengo&created_at=2024-08-16T16%3A53%3A59Z&updated_at=2024-08-16T16%3A55%3A59Z")
  .header("x-api-key", "<apiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.twelvelabs.io/v1.3/indexes?index_name=myIndex&model_options=visual%2Caudio&model_family=marengo&created_at=2024-08-16T16%3A53%3A59Z&updated_at=2024-08-16T16%3A55%3A59Z', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.twelvelabs.io/v1.3/indexes?index_name=myIndex&model_options=visual%2Caudio&model_family=marengo&created_at=2024-08-16T16%3A53%3A59Z&updated_at=2024-08-16T16%3A55%3A59Z");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["x-api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.twelvelabs.io/v1.3/indexes?index_name=myIndex&model_options=visual%2Caudio&model_family=marengo&created_at=2024-08-16T16%3A53%3A59Z&updated_at=2024-08-16T16%3A55%3A59Z")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```