---
type: api
title: Reindex legacy backing indices
description: Reindex all legacy backing indices for a data stream.
url: https://www.elastic.co/elastic/docs-builder/docs/4493/api/doc/elasticsearch/v8/operation/operation-indices-migrate-reindex
resource: https://www.elastic.co/elastic/docs-builder/docs/4493/api/doc/elasticsearch/v8/operation/operation-indices-migrate-reindex
products:
  - Elasticsearch
---

# Reindex legacy backing indices

Availability: Preview since 8.18

## Paths

- `POST` `/_migration/reindex`

## Description

Reindex all legacy backing indices for a data stream.
This operation occurs in a persistent task.
The persistent task ID is returned immediately and the reindexing work is completed in that task.

## Authentication

- Api key: `Authorization: <value>`
  Elasticsearch APIs support key-based authentication.
  You must create an API key and use the encoded value in the request header.
  For example:
  
  
  ```
  curl -X GET "${ES_URL}/_cat/indices?v=true" \
    -H "Authorization: ApiKey ${API_KEY}"
  ```
  
  To get API keys, use the `/_security/api_key` APIs.
- Basic: `Authorization: Basic <credentials>`
- Bearer: `Authorization: Bearer <token>`
  Elasticsearch APIs support the use of bearer tokens in the `Authorization` HTTP header to authenticate with the API.
  For examples, refer to [Token-based authentication services](https://www.elastic.co/guide/en/elasticsearch/reference/current/token-authentication-services.html)

## Request body

`application/json`

- `mode` (enum) — required
  Reindex mode. Currently only 'upgrade' is supported.
  Values: `upgrade`
- `source` (object) — required
  The source index or data stream (only data streams are currently supported).
  - `index` (string) — required

## Response

`application/json`

- `acknowledged` (boolean)
  For a successful response, this value is always true. On failure, an exception is returned instead.
## Code examples

#### Console

```console
POST _migration/reindex
{
    "source": {
        "index": "my-data-stream"
    },
    "mode": "upgrade"
}
```

#### JavaScript

```javascript
const response = await client.indices.migrateReindex({
  reindex: {
    source: {
      index: "my-data-stream",
    },
    mode: "upgrade",
  },
});
```

#### Python

```python
resp = client.indices.migrate_reindex(
    reindex={
        "source": {
            "index": "my-data-stream"
        },
        "mode": "upgrade"
    },
)
```

#### curl

```curl
curl -X POST "$ELASTICSEARCH_URL/_migration/reindex" \
  -H "Authorization: ApiKey $ELASTIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source": {
      "index": "my-data-stream"
    },
    "mode": "upgrade"
  }'
```

#### Java

```java
client.indices().migrateReindex(m -> m
    .reindex(r -> r
        .mode(ModeEnum.Upgrade)
        .source(s -> s
            .index("my-data-stream")
        )
    )
);
```

#### C#

```c#
var response = await client.Indices
    .MigrateReindexAsync(d1 => d1
        .Reindex(d2 => d2
            .Mode(ModeEnum.Upgrade)
            .Source(d3 => d3
                .Index("my-data-stream")
            )
        )
    );
```

#### PHP

```php
$requestFactory = Psr17FactoryDiscovery::findRequestFactory();
$streamFactory = Psr17FactoryDiscovery::findStreamFactory();
$request = $requestFactory->createRequest(
    "POST",
    "/_migration/reindex",
);
$request = $request->withHeader("Content-Type", "application/json");
$request = $request->withBody($streamFactory->createStream(
    json_encode([
        "source" => [
            "index" => "my-data-stream",
        ],
        "mode" => "upgrade",
    ]),
));
$resp = $client->sendRequest($request);
```

#### Ruby

```ruby
response = client.indices.migrate_reindex(
  body: {
    "source": {
      "index": "my-data-stream"
    },
    "mode": "upgrade"
  }
)
```

