---
type: api
title: Start the feature migration
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/4493/api/doc/elasticsearch/v8/operation/operation-migration-post-feature-upgrade
resource: https://www.elastic.co/elastic/docs-builder/docs/4493/api/doc/elasticsearch/v8/operation/operation-migration-post-feature-upgrade
products:
  - Elasticsearch
---

# Start the feature migration

Availability: Generally available since 7.16

## Paths

- `POST` `/_migration/system_features`

## Description

Version upgrades sometimes require changes to how features store configuration information and data in system indices.
This API starts the automatic migration process.

Some functionality might be temporarily unavailable during the migration process.

TIP: The API is designed for indirect use by the Upgrade Assistant. We strongly recommend you use the Upgrade Assistant.

## Required authorization

- Index privileges: `manage`
- Cluster privileges: `manage`

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

## Response

`application/json`

- `accepted` (boolean)
- `features` (object[])
  - `feature_name` (string)
- `reason` (string)
## Code examples

#### Console

```console
POST /_migration/system_features
```

#### JavaScript

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

#### Python

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

#### curl

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

#### Java

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

#### PHP

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

#### Ruby

```ruby
response = client.migration.post_feature_upgrade
```

## Response examples

#### Post feature upgrade response example1

When you run `POST /_migration/system_features` to start the migration process, the response lists the features that will be migrated.

```json
{
  "accepted" : true,
  "features" : [
    {
      "feature_name" : "security"
    }
  ]
}
```

