[[breaking_50_rest_api_changes]] === REST API changes ==== id values longer than 512 bytes are rejected When specifying an `_id` value longer than 512 bytes, the request will be rejected. ==== `/_optimize` endpoint removed The deprecated `/_optimize` endpoint has been removed. The `/_forcemerge` endpoint should be used in lieu of optimize. The `GET` HTTP verb for `/_forcemerge` is no longer supported, please use the `POST` HTTP verb. ==== Index creation endpoint only accepts `PUT` It used to be possible to create an index by either calling `PUT index_name` or `POST index_name`. Only the former is now supported. ==== `HEAD {index}/{type}` replaced with `HEAD {index}/_mapping/{type}` The endpoint for checking whether a type exists has been changed from `{index}/{type}` to `{index}/_mapping/{type}` in order to prepare for the removal of types when `HEAD {index}/{id}` will be used to check whether a document exists in an index. The old endpoint will keep working until 6.0. ==== Removed `mem` section from `/_cluster/stats` response The `mem` section contained only the `total` value, which was actually the memory available throughout all nodes in the cluster. The section contains now `total`, `free`, `used`, `used_percent` and `free_percent`. ==== Revised node roles aggregate returned by `/_cluster/stats` The `client`, `master_only`, `data_only` and `master_data` fields have been removed in favor of `master`, `data`, `ingest` and `coordinating_only`. A node can contribute to multiple counts as it can have multiple roles. Every node is implicitly a coordinating node, so whenever a node has no explicit roles, it will be counted as coordinating only. ==== Removed shard `version` information from `/_cluster/state` routing table We now store allocation id's of shards in the cluster state and use that to select primary shards instead of the version information. ==== Node roles are not part of node attributes anymore Node roles are now returned in a specific section, called `roles`, as part of nodes stats and nodes info response. The new section is an array that holds all the different roles that each node fulfills. In case the array is returned empty, that means that the node is a coordinating only node. ==== Forbid unquoted JSON Previously, JSON documents were allowed with unquoted field names, which isn't strictly JSON and broke some Elasticsearch clients. If documents were already indexed with unquoted fields in a previous vesrion of Elasticsearch, some operations may throw errors. To accompany this, a commented out JVM option has been added to the `jvm.options` file: `-Delasticsearch.json.allow_unquoted_field_names`. Note that this option is provided solely for migration purposes and will be removed in Elasticsearch 6.0.0. ==== Analyze API changes The `filters` and `char_filters` parameters have been renamed `filter` and `char_filter`. The `token_filters` parameter has been removed. Use `filter` instead. ==== `DELETE /_query` endpoint removed The `DELETE /_query` endpoint provided by the Delete-By-Query plugin has been removed and replaced by the <>. ==== Create stored script endpoint removed The `PUT /_scripts/{lang}/{id}/_create` endpoint that previously allowed to create indexed scripts has been removed. Indexed scripts have been replaced by <>. ==== Create stored template endpoint removed The `PUT /_search/template/{id}/_create` endpoint that previously allowed to create indexed template has been removed. Indexed templates have been replaced by <>. ==== Remove properties support Some REST endpoints (e.g., cluster update index settings) supported detecting content in the Java properties format (line-delimited key=value pairs). This support has been removed. ==== `wait_for_relocating_shards` is now `wait_for_no_relocating_shards` in `/_cluster/health` The `wait_for_relocating_shards` parameter that used to take a number is now simply a boolean flag `wait_for_no_relocating_shards`, which if set to true, means the request will wait (up until the configured timeout) for the cluster to have no shard relocations before returning. Defaults to false, which means the operation will not wait.