---
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/4371/api/doc/elasticsearch/v9/operation/operation-indices-migrate-reindex
resource: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/operation/operation-indices-migrate-reindex
products:
  - Elasticsearch
---

# Reindex legacy backing indices

Availability: 8.18+

## Paths

- `POST` `/_migration/reindex`

- [Api key auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/authentication#apikeyauth)
- [Basic auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/authentication#basicauth)
- [Bearer auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/authentication#bearerauth)

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

[About reindexing data streams](https://www.elastic.co/docs/reference/elasticsearch/rest-apis/reindex-data-stream)

## Request Body

`application/json`

- `mode` (enum ModeEnum) — required
  Reindex mode. Currently only 'upgrade' is supported.
  Values: `upgrade`
- `source` ({} SourceIndex) — required
  The source index or data stream (only data streams are currently supported).
  - `index` (string IndexName) — 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"
  }
)
```

