---
type: api
title: Get feature migration information
description: Version upgrades sometimes require changes to how features store configuration information and data in system indices.
url: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/operation/operation-migration-get-feature-upgrade-status
resource: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/operation/operation-migration-get-feature-upgrade-status
products:
  - Elasticsearch
---

# Get feature migration information

Availability: 7.16+

## Paths

- `GET` `/_migration/system_features`

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

## Description

Version upgrades sometimes require changes to how features store configuration information and data in system indices.
Check which features need to be migrated and the status of any migrations that are in progress.

TIP: This API is designed for indirect use by the Upgrade Assistant.
You are strongly recommended to use the Upgrade Assistant.

## Required authorization

* Index privileges: `manage`
* Cluster privileges: `manage`

## Response

`application/json`

- `features` ([] MigrationFeature)
  - `feature_name` (string)
  - `minimum_index_version` (string)
  - `migration_status` (enum MigrationStatus)
    Values: `NO_MIGRATION_NEEDED`, `MIGRATION_NEEDED`, `IN_PROGRESS`, `ERROR`
  - `indices` ([] MigrationFeatureIndexInfo)
    - `index` (string IndexName)
    - `version` (string)
    - `failure_cause` ({} ErrorCause)
      - `type` (string)
        The type of error
      - `reason` (union string) — nullable
        A human-readable explanation of the error, in English.
        One of: `string`
      - `stack_trace` (string)
        The server stack trace. Present only if the `error_trace=true` parameter was sent with the request.
      - `caused_by` ({} ErrorCause) — recursive
        Same fields as `failure_cause` in `indices`
      - `root_cause` ([] ErrorCause) — recursive
        Same fields as `failure_cause` in `indices`
      - `suppressed` ([] ErrorCause) — recursive
        Same fields as `failure_cause` in `indices`
- `migration_status` (enum MigrationStatus)
  Values: `NO_MIGRATION_NEEDED`, `MIGRATION_NEEDED`, `IN_PROGRESS`, `ERROR`
## Code Examples

#### Console

```console
GET /_migration/system_features
```

#### JavaScript

```javascript
const response = await client.migration.getFeatureUpgradeStatus();
```

#### Python

```python
resp = client.migration.get_feature_upgrade_status()
```

#### curl

```curl
curl -X GET "$ELASTICSEARCH_URL/_migration/system_features" \
  -H "Authorization: ApiKey $ELASTIC_API_KEY"
```

#### Java

```java
client.migration().getFeatureUpgradeStatus();
```

#### PHP

```php
$resp = $client->migration()->getFeatureUpgradeStatus();
```

#### Ruby

```ruby
response = client.migration.get_feature_upgrade_status
```

## Response Examples

#### Get feature upgrade status response example1

A successful response from `GET /_migration/system_features`.

```json
{
  "features" : [
    {
      "feature_name" : "async_search",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "enrich",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "ent_search",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "fleet",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "geoip",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "kibana",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "logstash_management",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "machine_learning",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "searchable_snapshots",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "security",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "synonyms",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "tasks",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "transform",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    },
    {
      "feature_name" : "watcher",
      "minimum_index_version" : "8100099",
      "migration_status" : "NO_MIGRATION_NEEDED",
      "indices" : [ ]
    }
  ],
  "migration_status" : "NO_MIGRATION_NEEDED"
}
```

