From bd072fdd34829a726e90fe969904a5f6be5f9dc8 Mon Sep 17 00:00:00 2001 From: Lisa Cawley <lcawley@elastic.co> Date: Thu, 26 Sep 2024 08:23:07 -0700 Subject: [PATCH] Use a simplified namespace value for the OpenAPI tags (#2889) (cherry picked from commit bf8b9d8fca3c953be78801170b941ae90551a898) --- .../clients_schema_to_openapi/src/paths.rs | 10 +- .../pkg/compiler_wasm_lib_bg.wasm | Bin 621874 -> 622066 bytes output/openapi/elasticsearch-openapi.json | 1290 ++++++++--------- .../elasticsearch-serverless-openapi.json | 576 ++++---- 4 files changed, 938 insertions(+), 938 deletions(-) diff --git a/compiler-rs/clients_schema_to_openapi/src/paths.rs b/compiler-rs/clients_schema_to_openapi/src/paths.rs index df8617bb4b..8184b711b6 100644 --- a/compiler-rs/clients_schema_to_openapi/src/paths.rs +++ b/compiler-rs/clients_schema_to_openapi/src/paths.rs @@ -47,10 +47,10 @@ pub fn add_endpoint( } // Namespace - // let namespace = match endpoint.name.split_once('.') { - // Some((ns, _)) => ns, - // None => "core", - //}; + let namespace = match endpoint.name.split_once('.') { + Some((ns, _)) => ns, + None => &endpoint.name, + }; // Will we produce multiple paths? If true, we will register components for reuse across paths let is_multipath = endpoint.urls.len() > 1 || endpoint.urls.iter().any(|u| u.methods.len() > 1); @@ -196,7 +196,7 @@ pub fn add_endpoint( // Create the operation, it will be repeated if we have several methods let operation = openapiv3::Operation { - tags: vec![endpoint.name.clone()], + tags: vec![namespace.to_string()], summary: sum_desc.summary, description: sum_desc.description, external_docs: tac.convert_external_docs(endpoint), diff --git a/compiler-rs/compiler-wasm-lib/pkg/compiler_wasm_lib_bg.wasm b/compiler-rs/compiler-wasm-lib/pkg/compiler_wasm_lib_bg.wasm index 4e11b1c40c79bdb277a18c5586c2ed9a49ea92a5..0b0077212721b333989cd054cc7e27e1c89a48e4 100644 GIT binary patch delta 107199 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 Ipz!kl2hqOJ`Tzg` delta 106878 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%0D1oK!oz6#F(e0MoK4ox<LMa|)*h(pkW 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 F{{s@?o1y>! diff --git a/output/openapi/elasticsearch-openapi.json b/output/openapi/elasticsearch-openapi.json index 27b54f0551..f071ce3bbe 100644 --- a/output/openapi/elasticsearch-openapi.json +++ b/output/openapi/elasticsearch-openapi.json @@ -12,7 +12,7 @@ "/_async_search/{id}": { "get": { "tags": [ - "async_search.get" + "async_search" ], "summary": "Retrieves the results of a previously submitted async search request given its identifier", "description": "If the Elasticsearch security features are enabled, access to the results of a specific async search is restricted to the user or API key that submitted it.", @@ -79,7 +79,7 @@ }, "delete": { "tags": [ - "async_search.delete" + "async_search" ], "summary": "Deletes an async search by identifier", "description": "If the search is still running, the search request will be cancelled.\nOtherwise, the saved search results are deleted.\nIf the Elasticsearch security features are enabled, the deletion of a specific async search is restricted to: the authenticated user that submitted the original search request; users that have the `cancel_task` cluster privilege.", @@ -118,7 +118,7 @@ "/_async_search/status/{id}": { "get": { "tags": [ - "async_search.status" + "async_search" ], "summary": "Get async search status\n", "description": "Retrieves the status of a previously submitted async search request given its identifier, without retrieving search results.\nIf the Elasticsearch security features are enabled, use of this API is restricted to the `monitoring_user` role.", @@ -157,7 +157,7 @@ "/_async_search": { "post": { "tags": [ - "async_search.submit" + "async_search" ], "summary": "Runs a search request asynchronously", "description": "When the primary sort of the results is an indexed field, shards get sorted based on minimum and maximum value that they hold for that field, hence partial results become available following the sort criteria that was requested.\nWarning: Async search does not support scroll nor search requests that only include the suggest section.\nBy default, Elasticsearch doesn’t allow you to store an async search response larger than 10Mb and an attempt to do this results in an error.\nThe maximum allowed size for a stored async search response can be set by changing the `search.max_async_search_response_size` cluster level setting.", @@ -319,7 +319,7 @@ "/{index}/_async_search": { "post": { "tags": [ - "async_search.submit" + "async_search" ], "summary": "Runs a search request asynchronously", "description": "When the primary sort of the results is an indexed field, shards get sorted based on minimum and maximum value that they hold for that field, hence partial results become available following the sort criteria that was requested.\nWarning: Async search does not support scroll nor search requests that only include the suggest section.\nBy default, Elasticsearch doesn’t allow you to store an async search response larger than 10Mb and an attempt to do this results in an error.\nThe maximum allowed size for a stored async search response can be set by changing the `search.max_async_search_response_size` cluster level setting.", @@ -484,7 +484,7 @@ "/_autoscaling/policy/{name}": { "get": { "tags": [ - "autoscaling.get_autoscaling_policy" + "autoscaling" ], "summary": "Retrieves an autoscaling policy", "description": "Designed for indirect use by ECE/ESS and ECK. Direct use is not supported.", @@ -521,7 +521,7 @@ }, "put": { "tags": [ - "autoscaling.put_autoscaling_policy" + "autoscaling" ], "summary": "Creates a new autoscaling policy", "description": "Designed for indirect use by ECE/ESS and ECK. Direct use is not supported.", @@ -568,7 +568,7 @@ }, "delete": { "tags": [ - "autoscaling.delete_autoscaling_policy" + "autoscaling" ], "summary": "Deletes an autoscaling policy", "description": "Designed for indirect use by ECE/ESS and ECK. Direct use is not supported.", @@ -607,7 +607,7 @@ "/_autoscaling/capacity": { "get": { "tags": [ - "autoscaling.get_autoscaling_capacity" + "autoscaling" ], "summary": "Gets the current autoscaling capacity based on the configured autoscaling policy", "description": "Designed for indirect use by ECE/ESS and ECK. Direct use is not supported.", @@ -846,7 +846,7 @@ "/_cat/aliases": { "get": { "tags": [ - "cat.aliases" + "cat" ], "summary": "Get aliases", "description": "Retrieves the cluster’s index aliases, including filter and routing information.\nThe API does not return data stream aliases.\n\nCAT APIs are only intended for human consumption using the command line or the Kibana console. They are not intended for use by applications. For application consumption, use the aliases API.", @@ -869,7 +869,7 @@ "/_cat/aliases/{name}": { "get": { "tags": [ - "cat.aliases" + "cat" ], "summary": "Get aliases", "description": "Retrieves the cluster’s index aliases, including filter and routing information.\nThe API does not return data stream aliases.\n\nCAT APIs are only intended for human consumption using the command line or the Kibana console. They are not intended for use by applications. For application consumption, use the aliases API.", @@ -895,7 +895,7 @@ "/_cat/allocation": { "get": { "tags": [ - "cat.allocation" + "cat" ], "summary": "Provides a snapshot of the number of shards allocated to each data node and their disk space", "description": "IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications.", @@ -918,7 +918,7 @@ "/_cat/allocation/{node_id}": { "get": { "tags": [ - "cat.allocation" + "cat" ], "summary": "Provides a snapshot of the number of shards allocated to each data node and their disk space", "description": "IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications.", @@ -944,7 +944,7 @@ "/_cat/component_templates": { "get": { "tags": [ - "cat.component_templates" + "cat" ], "summary": "Get component templates", "description": "Returns information about component templates in a cluster.\nComponent templates are building blocks for constructing index templates that specify index mappings, settings, and aliases.\n\nCAT APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use the get component template API.", @@ -963,7 +963,7 @@ "/_cat/component_templates/{name}": { "get": { "tags": [ - "cat.component_templates" + "cat" ], "summary": "Get component templates", "description": "Returns information about component templates in a cluster.\nComponent templates are building blocks for constructing index templates that specify index mappings, settings, and aliases.\n\nCAT APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use the get component template API.", @@ -987,7 +987,7 @@ "/_cat/count": { "get": { "tags": [ - "cat.count" + "cat" ], "summary": "Get a document count", "description": "Provides quick access to a document count for a data stream, an index, or an entire cluster.\nThe document count only includes live documents, not deleted documents which have not yet been removed by the merge process.\n\nCAT APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use the count API.", @@ -1005,7 +1005,7 @@ "/_cat/count/{index}": { "get": { "tags": [ - "cat.count" + "cat" ], "summary": "Get a document count", "description": "Provides quick access to a document count for a data stream, an index, or an entire cluster.\nThe document count only includes live documents, not deleted documents which have not yet been removed by the merge process.\n\nCAT APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use the count API.", @@ -1028,7 +1028,7 @@ "/_cat/fielddata": { "get": { "tags": [ - "cat.fielddata" + "cat" ], "summary": "Returns the amount of heap memory currently used by the field data cache on every data node in the cluster", "description": "IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use the nodes stats API.", @@ -1054,7 +1054,7 @@ "/_cat/fielddata/{fields}": { "get": { "tags": [ - "cat.fielddata" + "cat" ], "summary": "Returns the amount of heap memory currently used by the field data cache on every data node in the cluster", "description": "IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use the nodes stats API.", @@ -1083,7 +1083,7 @@ "/_cat/health": { "get": { "tags": [ - "cat.health" + "cat" ], "summary": "Returns the health status of a cluster, similar to the cluster health API", "description": "IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use the cluster health API.\nThis API is often used to check malfunctioning clusters.\nTo help you track cluster health alongside log files and alerting systems, the API returns timestamps in two formats:\n`HH:MM:SS`, which is human-readable but includes no date information;\n`Unix epoch time`, which is machine-sortable and includes date information.\nThe latter format is useful for cluster recoveries that take multiple days.\nYou can use the cat health API to verify cluster health across multiple nodes.\nYou also can use the API to track the recovery of a large cluster over a longer period of time.", @@ -1133,7 +1133,7 @@ "/_cat": { "get": { "tags": [ - "cat.help" + "cat" ], "summary": "Get CAT help", "description": "Returns help for the CAT APIs.", @@ -1161,7 +1161,7 @@ "/_cat/indices": { "get": { "tags": [ - "cat.indices" + "cat" ], "summary": "Get index information", "description": "Returns high-level information about indices in a cluster, including backing indices for data streams.\n\nUse this request to get the following information for each index in a cluster:\n- shard count\n- document count\n- deleted document count\n- primary store size\n- total store size of all shards, including shard replicas\n\nThese metrics are retrieved directly from Lucene, which Elasticsearch uses internally to power indexing and search. As a result, all document counts include hidden nested documents.\nTo get an accurate count of Elasticsearch documents, use the cat count or count APIs.\n\nCAT APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use an index endpoint.", @@ -1199,7 +1199,7 @@ "/_cat/indices/{index}": { "get": { "tags": [ - "cat.indices" + "cat" ], "summary": "Get index information", "description": "Returns high-level information about indices in a cluster, including backing indices for data streams.\n\nUse this request to get the following information for each index in a cluster:\n- shard count\n- document count\n- deleted document count\n- primary store size\n- total store size of all shards, including shard replicas\n\nThese metrics are retrieved directly from Lucene, which Elasticsearch uses internally to power indexing and search. As a result, all document counts include hidden nested documents.\nTo get an accurate count of Elasticsearch documents, use the cat count or count APIs.\n\nCAT APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use an index endpoint.", @@ -1240,7 +1240,7 @@ "/_cat/master": { "get": { "tags": [ - "cat.master" + "cat" ], "summary": "Returns information about the master node, including the ID, bound IP address, and name", "description": "IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the nodes info API.", @@ -1268,7 +1268,7 @@ "/_cat/ml/data_frame/analytics": { "get": { "tags": [ - "cat.ml_data_frame_analytics" + "cat" ], "summary": "Get data frame analytics jobs", "description": "Returns configuration and usage information about data frame analytics jobs.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get data frame analytics jobs statistics API.", @@ -1304,7 +1304,7 @@ "/_cat/ml/data_frame/analytics/{id}": { "get": { "tags": [ - "cat.ml_data_frame_analytics" + "cat" ], "summary": "Get data frame analytics jobs", "description": "Returns configuration and usage information about data frame analytics jobs.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get data frame analytics jobs statistics API.", @@ -1343,7 +1343,7 @@ "/_cat/ml/datafeeds": { "get": { "tags": [ - "cat.ml_datafeeds" + "cat" ], "summary": "Get datafeeds", "description": "Returns configuration and usage information about datafeeds.\nThis API returns a maximum of 10,000 datafeeds.\nIf the Elasticsearch security features are enabled, you must have `monitor_ml`, `monitor`, `manage_ml`, or `manage`\ncluster privileges to use this API.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get datafeed statistics API.", @@ -1376,7 +1376,7 @@ "/_cat/ml/datafeeds/{datafeed_id}": { "get": { "tags": [ - "cat.ml_datafeeds" + "cat" ], "summary": "Get datafeeds", "description": "Returns configuration and usage information about datafeeds.\nThis API returns a maximum of 10,000 datafeeds.\nIf the Elasticsearch security features are enabled, you must have `monitor_ml`, `monitor`, `manage_ml`, or `manage`\ncluster privileges to use this API.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get datafeed statistics API.", @@ -1412,7 +1412,7 @@ "/_cat/ml/anomaly_detectors": { "get": { "tags": [ - "cat.ml_jobs" + "cat" ], "summary": "Get anomaly detection jobs", "description": "Returns configuration and usage information for anomaly detection jobs.\nThis API returns a maximum of 10,000 jobs.\nIf the Elasticsearch security features are enabled, you must have `monitor_ml`,\n`monitor`, `manage_ml`, or `manage` cluster privileges to use this API.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get anomaly detection job statistics API.", @@ -1448,7 +1448,7 @@ "/_cat/ml/anomaly_detectors/{job_id}": { "get": { "tags": [ - "cat.ml_jobs" + "cat" ], "summary": "Get anomaly detection jobs", "description": "Returns configuration and usage information for anomaly detection jobs.\nThis API returns a maximum of 10,000 jobs.\nIf the Elasticsearch security features are enabled, you must have `monitor_ml`,\n`monitor`, `manage_ml`, or `manage` cluster privileges to use this API.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get anomaly detection job statistics API.", @@ -1487,7 +1487,7 @@ "/_cat/ml/trained_models": { "get": { "tags": [ - "cat.ml_trained_models" + "cat" ], "summary": "Get trained models", "description": "Returns configuration and usage information about inference trained models.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get trained models statistics API.", @@ -1526,7 +1526,7 @@ "/_cat/ml/trained_models/{model_id}": { "get": { "tags": [ - "cat.ml_trained_models" + "cat" ], "summary": "Get trained models", "description": "Returns configuration and usage information about inference trained models.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get trained models statistics API.", @@ -1568,7 +1568,7 @@ "/_cat/nodeattrs": { "get": { "tags": [ - "cat.nodeattrs" + "cat" ], "summary": "Returns information about custom node attributes", "description": "IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the nodes info API.", @@ -1596,7 +1596,7 @@ "/_cat/nodes": { "get": { "tags": [ - "cat.nodes" + "cat" ], "summary": "Returns information about the nodes in a cluster", "description": "IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the nodes info API.", @@ -1663,7 +1663,7 @@ "/_cat/pending_tasks": { "get": { "tags": [ - "cat.pending_tasks" + "cat" ], "summary": "Returns cluster-level changes that have not yet been executed", "description": "IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the pending cluster tasks API.", @@ -1691,7 +1691,7 @@ "/_cat/plugins": { "get": { "tags": [ - "cat.plugins" + "cat" ], "summary": "Returns a list of plugins running on each node of a cluster", "description": "IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the nodes info API.", @@ -1719,7 +1719,7 @@ "/_cat/recovery": { "get": { "tags": [ - "cat.recovery" + "cat" ], "summary": "Returns information about ongoing and completed shard recoveries", "description": "Shard recovery is the process of initializing a shard copy, such as restoring a primary shard from a snapshot or syncing a replica shard from a primary shard. When a shard recovery completes, the recovered shard is available for search and indexing.\nFor data streams, the API returns information about the stream’s backing indices.\nIMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the index recovery API.", @@ -1748,7 +1748,7 @@ "/_cat/recovery/{index}": { "get": { "tags": [ - "cat.recovery" + "cat" ], "summary": "Returns information about ongoing and completed shard recoveries", "description": "Shard recovery is the process of initializing a shard copy, such as restoring a primary shard from a snapshot or syncing a replica shard from a primary shard. When a shard recovery completes, the recovered shard is available for search and indexing.\nFor data streams, the API returns information about the stream’s backing indices.\nIMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the index recovery API.", @@ -1780,7 +1780,7 @@ "/_cat/repositories": { "get": { "tags": [ - "cat.repositories" + "cat" ], "summary": "Returns the snapshot repositories for a cluster", "description": "IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the get snapshot repository API.", @@ -1809,7 +1809,7 @@ "/_cat/segments": { "get": { "tags": [ - "cat.segments" + "cat" ], "summary": "Returns low-level information about the Lucene segments in index shards", "description": "For data streams, the API returns information about the backing indices.\nIMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the index segments API.", @@ -1832,7 +1832,7 @@ "/_cat/segments/{index}": { "get": { "tags": [ - "cat.segments" + "cat" ], "summary": "Returns low-level information about the Lucene segments in index shards", "description": "For data streams, the API returns information about the backing indices.\nIMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the index segments API.", @@ -1858,7 +1858,7 @@ "/_cat/shards": { "get": { "tags": [ - "cat.shards" + "cat" ], "summary": "Returns information about the shards in a cluster", "description": "For data streams, the API returns information about the backing indices.\nIMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications.", @@ -1881,7 +1881,7 @@ "/_cat/shards/{index}": { "get": { "tags": [ - "cat.shards" + "cat" ], "summary": "Returns information about the shards in a cluster", "description": "For data streams, the API returns information about the backing indices.\nIMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications.", @@ -1907,7 +1907,7 @@ "/_cat/snapshots": { "get": { "tags": [ - "cat.snapshots" + "cat" ], "summary": "Returns information about the snapshots stored in one or more repositories", "description": "A snapshot is a backup of an index or running Elasticsearch cluster.\nIMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the get snapshot API.", @@ -1931,7 +1931,7 @@ "/_cat/snapshots/{repository}": { "get": { "tags": [ - "cat.snapshots" + "cat" ], "summary": "Returns information about the snapshots stored in one or more repositories", "description": "A snapshot is a backup of an index or running Elasticsearch cluster.\nIMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the get snapshot API.", @@ -1958,7 +1958,7 @@ "/_cat/tasks": { "get": { "tags": [ - "cat.tasks" + "cat" ], "summary": "Returns information about tasks currently executing in the cluster", "description": "IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the task management API.", @@ -2036,7 +2036,7 @@ "/_cat/templates": { "get": { "tags": [ - "cat.templates" + "cat" ], "summary": "Returns information about index templates in a cluster", "description": "You can use index templates to apply index settings and field mappings to new indices at creation.\nIMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the get index template API.", @@ -2055,7 +2055,7 @@ "/_cat/templates/{name}": { "get": { "tags": [ - "cat.templates" + "cat" ], "summary": "Returns information about index templates in a cluster", "description": "You can use index templates to apply index settings and field mappings to new indices at creation.\nIMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the get index template API.", @@ -2079,7 +2079,7 @@ "/_cat/thread_pool": { "get": { "tags": [ - "cat.thread_pool" + "cat" ], "summary": "Returns thread pool statistics for each node in a cluster", "description": "Returned information includes all built-in thread pools and custom thread pools.\nIMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the nodes info API.", @@ -2102,7 +2102,7 @@ "/_cat/thread_pool/{thread_pool_patterns}": { "get": { "tags": [ - "cat.thread_pool" + "cat" ], "summary": "Returns thread pool statistics for each node in a cluster", "description": "Returned information includes all built-in thread pools and custom thread pools.\nIMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the nodes info API.", @@ -2128,7 +2128,7 @@ "/_cat/transforms": { "get": { "tags": [ - "cat.transforms" + "cat" ], "summary": "Get transforms", "description": "Returns configuration and usage information about transforms.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get transform statistics API.", @@ -2167,7 +2167,7 @@ "/_cat/transforms/{transform_id}": { "get": { "tags": [ - "cat.transforms" + "cat" ], "summary": "Get transforms", "description": "Returns configuration and usage information about transforms.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get transform statistics API.", @@ -2209,7 +2209,7 @@ "/_ccr/auto_follow/{name}": { "get": { "tags": [ - "ccr.get_auto_follow_pattern" + "ccr" ], "summary": "Gets configured auto-follow patterns", "description": "Returns the specified auto-follow pattern collection.", @@ -2231,7 +2231,7 @@ }, "put": { "tags": [ - "ccr.put_auto_follow_pattern" + "ccr" ], "summary": "Creates a new named collection of auto-follow patterns against a specified remote cluster", "description": "Newly created indices on the remote cluster matching any of the specified patterns will be automatically configured as follower indices.", @@ -2341,7 +2341,7 @@ }, "delete": { "tags": [ - "ccr.delete_auto_follow_pattern" + "ccr" ], "summary": "Deletes auto-follow patterns", "externalDocs": { @@ -2379,7 +2379,7 @@ "/{index}/_ccr/follow": { "put": { "tags": [ - "ccr.follow" + "ccr" ], "summary": "Creates a new follower index configured to follow the referenced leader index", "externalDocs": { @@ -2491,7 +2491,7 @@ "/{index}/_ccr/info": { "get": { "tags": [ - "ccr.follow_info" + "ccr" ], "summary": "Retrieves information about all follower indices, including parameters and status for each follower index", "externalDocs": { @@ -2540,7 +2540,7 @@ "/{index}/_ccr/stats": { "get": { "tags": [ - "ccr.follow_stats" + "ccr" ], "summary": "Retrieves follower stats. return shard-level stats about the following tasks associated with each shard for the specified indices", "externalDocs": { @@ -2589,7 +2589,7 @@ "/{index}/_ccr/forget_follower": { "post": { "tags": [ - "ccr.forget_follower" + "ccr" ], "summary": "Removes the follower retention leases from the leader", "externalDocs": { @@ -2659,7 +2659,7 @@ "/_ccr/auto_follow": { "get": { "tags": [ - "ccr.get_auto_follow_pattern" + "ccr" ], "summary": "Gets configured auto-follow patterns", "description": "Returns the specified auto-follow pattern collection.", @@ -2678,7 +2678,7 @@ "/_ccr/auto_follow/{name}/pause": { "post": { "tags": [ - "ccr.pause_auto_follow_pattern" + "ccr" ], "summary": "Pauses an auto-follow pattern", "externalDocs": { @@ -2716,7 +2716,7 @@ "/{index}/_ccr/pause_follow": { "post": { "tags": [ - "ccr.pause_follow" + "ccr" ], "summary": "Pauses a follower index", "description": "The follower index will not fetch any additional operations from the leader index.", @@ -2755,7 +2755,7 @@ "/_ccr/auto_follow/{name}/resume": { "post": { "tags": [ - "ccr.resume_auto_follow_pattern" + "ccr" ], "summary": "Resumes an auto-follow pattern that has been paused", "externalDocs": { @@ -2793,7 +2793,7 @@ "/{index}/_ccr/resume_follow": { "post": { "tags": [ - "ccr.resume_follow" + "ccr" ], "summary": "Resumes a follower index that has been paused", "externalDocs": { @@ -2872,7 +2872,7 @@ "/_ccr/stats": { "get": { "tags": [ - "ccr.stats" + "ccr" ], "summary": "Gets all stats related to cross-cluster replication", "externalDocs": { @@ -2909,7 +2909,7 @@ "/{index}/_ccr/unfollow": { "post": { "tags": [ - "ccr.unfollow" + "ccr" ], "summary": "Stops the following task associated with a follower index and removes index metadata and settings associated with cross-cluster replication", "externalDocs": { @@ -3168,7 +3168,7 @@ "/_cluster/allocation/explain": { "get": { "tags": [ - "cluster.allocation_explain" + "cluster" ], "summary": "Provides explanations for shard allocations in the cluster", "externalDocs": { @@ -3195,7 +3195,7 @@ }, "post": { "tags": [ - "cluster.allocation_explain" + "cluster" ], "summary": "Provides explanations for shard allocations in the cluster", "externalDocs": { @@ -3224,7 +3224,7 @@ "/_component_template/{name}": { "get": { "tags": [ - "cluster.get_component_template" + "cluster" ], "summary": "Get component templates", "description": "Retrieves information about component templates.", @@ -3258,7 +3258,7 @@ }, "put": { "tags": [ - "cluster.put_component_template" + "cluster" ], "summary": "Create or update a component template", "description": "Creates or updates a component template.\nComponent templates are building blocks for constructing index templates that specify index mappings, settings, and aliases.\n\nAn index template can be composed of multiple component templates.\nTo use a component template, specify it in an index template’s `composed_of` list.\nComponent templates are only applied to new data streams and indices as part of a matching index template.\n\nSettings and mappings specified directly in the index template or the create index request override any settings or mappings specified in a component template.\n\nComponent templates are only used during index creation.\nFor data streams, this includes data stream creation and the creation of a stream’s backing indices.\nChanges to component templates do not affect existing indices, including a stream’s backing indices.\n\nYou can use C-style `/* *\\/` block comments in component templates.\nYou can include comments anywhere in the request body except before the opening curly bracket.", @@ -3289,7 +3289,7 @@ }, "post": { "tags": [ - "cluster.put_component_template" + "cluster" ], "summary": "Create or update a component template", "description": "Creates or updates a component template.\nComponent templates are building blocks for constructing index templates that specify index mappings, settings, and aliases.\n\nAn index template can be composed of multiple component templates.\nTo use a component template, specify it in an index template’s `composed_of` list.\nComponent templates are only applied to new data streams and indices as part of a matching index template.\n\nSettings and mappings specified directly in the index template or the create index request override any settings or mappings specified in a component template.\n\nComponent templates are only used during index creation.\nFor data streams, this includes data stream creation and the creation of a stream’s backing indices.\nChanges to component templates do not affect existing indices, including a stream’s backing indices.\n\nYou can use C-style `/* *\\/` block comments in component templates.\nYou can include comments anywhere in the request body except before the opening curly bracket.", @@ -3320,7 +3320,7 @@ }, "delete": { "tags": [ - "cluster.delete_component_template" + "cluster" ], "summary": "Delete component templates", "description": "Deletes component templates.\nComponent templates are building blocks for constructing index templates that specify index mappings, settings, and aliases.", @@ -3377,7 +3377,7 @@ }, "head": { "tags": [ - "cluster.exists_component_template" + "cluster" ], "summary": "Check component templates", "description": "Returns information about whether a particular component template exists.", @@ -3432,7 +3432,7 @@ "/_cluster/voting_config_exclusions": { "post": { "tags": [ - "cluster.post_voting_config_exclusions" + "cluster" ], "summary": "Updates the cluster voting config exclusions by node ids or node names", "externalDocs": { @@ -3483,7 +3483,7 @@ }, "delete": { "tags": [ - "cluster.delete_voting_config_exclusions" + "cluster" ], "summary": "Clears cluster voting config exclusions", "externalDocs": { @@ -3516,7 +3516,7 @@ "/_component_template": { "get": { "tags": [ - "cluster.get_component_template" + "cluster" ], "summary": "Get component templates", "description": "Retrieves information about component templates.", @@ -3549,7 +3549,7 @@ "/_cluster/settings": { "get": { "tags": [ - "cluster.get_settings" + "cluster" ], "summary": "Returns cluster-wide settings", "description": "By default, it returns only settings that have been explicitly defined.", @@ -3638,7 +3638,7 @@ }, "put": { "tags": [ - "cluster.put_settings" + "cluster" ], "summary": "Updates the cluster settings", "externalDocs": { @@ -3740,7 +3740,7 @@ "/_cluster/health": { "get": { "tags": [ - "cluster.health" + "cluster" ], "summary": "The cluster health API returns a simple status on the health of the cluster", "description": "You can also use the API to get the health status of only specified data streams and indices. For data streams, the API retrieves the health status of the stream’s backing indices.\nThe cluster health status is: green, yellow or red. On the shard level, a red status indicates that the specific shard is not allocated in the cluster, yellow means that the primary shard is allocated but replicas are not, and green means that all shards are allocated. The index level status is controlled by the worst shard status. The cluster status is controlled by the worst index status.", @@ -3794,7 +3794,7 @@ "/_cluster/health/{index}": { "get": { "tags": [ - "cluster.health" + "cluster" ], "summary": "The cluster health API returns a simple status on the health of the cluster", "description": "You can also use the API to get the health status of only specified data streams and indices. For data streams, the API retrieves the health status of the stream’s backing indices.\nThe cluster health status is: green, yellow or red. On the shard level, a red status indicates that the specific shard is not allocated in the cluster, yellow means that the primary shard is allocated but replicas are not, and green means that all shards are allocated. The index level status is controlled by the worst shard status. The cluster status is controlled by the worst index status.", @@ -3851,7 +3851,7 @@ "/_info/{target}": { "get": { "tags": [ - "cluster.info" + "cluster" ], "summary": "Get cluster info", "description": "Returns basic information about the cluster.", @@ -3913,7 +3913,7 @@ "/_cluster/pending_tasks": { "get": { "tags": [ - "cluster.pending_tasks" + "cluster" ], "summary": "Returns cluster-level changes (such as create index, update mapping, allocate or fail shard) that have not yet been executed", "description": "NOTE: This API returns a list of any pending updates to the cluster state.\nThese are distinct from the tasks reported by the Task Management API which include periodic tasks and tasks initiated by the user, such as node stats, search queries, or create index requests.\nHowever, if a user-initiated task such as a create index command causes a cluster state update, the activity of this task might be reported by both task api and pending cluster tasks API.", @@ -3971,7 +3971,7 @@ "/_remote/info": { "get": { "tags": [ - "cluster.remote_info" + "cluster" ], "summary": "The cluster remote info API allows you to retrieve all of the configured\n", "description": "remote cluster information. It returns connection and endpoint information\nkeyed by the configured remote cluster alias.", @@ -4000,7 +4000,7 @@ "/_cluster/reroute": { "post": { "tags": [ - "cluster.reroute" + "cluster" ], "summary": "Allows to manually change the allocation of individual shards in the cluster", "externalDocs": { @@ -4123,7 +4123,7 @@ "/_cluster/state": { "get": { "tags": [ - "cluster.state" + "cluster" ], "summary": "Returns a comprehensive information about the state of the cluster", "externalDocs": { @@ -4167,7 +4167,7 @@ "/_cluster/state/{metric}": { "get": { "tags": [ - "cluster.state" + "cluster" ], "summary": "Returns a comprehensive information about the state of the cluster", "externalDocs": { @@ -4214,7 +4214,7 @@ "/_cluster/state/{metric}/{index}": { "get": { "tags": [ - "cluster.state" + "cluster" ], "summary": "Returns a comprehensive information about the state of the cluster", "externalDocs": { @@ -4264,7 +4264,7 @@ "/_cluster/stats": { "get": { "tags": [ - "cluster.stats" + "cluster" ], "summary": "Returns cluster statistics", "description": "It returns basic index metrics (shard numbers, store size, memory usage) and information about the current nodes that form the cluster (number, roles, os, jvm versions, memory usage, cpu and installed plugins).", @@ -4291,7 +4291,7 @@ "/_cluster/stats/nodes/{node_id}": { "get": { "tags": [ - "cluster.stats" + "cluster" ], "summary": "Returns cluster statistics", "description": "It returns basic index metrics (shard numbers, store size, memory usage) and information about the current nodes that form the cluster (number, roles, os, jvm versions, memory usage, cpu and installed plugins).", @@ -4321,7 +4321,7 @@ "/_connector/{connector_id}/_check_in": { "put": { "tags": [ - "connector.check_in" + "connector" ], "summary": "Updates the last_seen field in the connector, and sets it to current timestamp", "externalDocs": { @@ -4368,7 +4368,7 @@ "/_connector/{connector_id}": { "get": { "tags": [ - "connector.get" + "connector" ], "summary": "Retrieves a connector", "externalDocs": { @@ -4405,7 +4405,7 @@ }, "put": { "tags": [ - "connector.put" + "connector" ], "summary": "Creates or updates a connector", "externalDocs": { @@ -4430,7 +4430,7 @@ }, "delete": { "tags": [ - "connector.delete" + "connector" ], "summary": "Deletes a connector", "externalDocs": { @@ -4479,7 +4479,7 @@ "/_connector/{connector_id}/_last_sync": { "put": { "tags": [ - "connector.last_sync" + "connector" ], "summary": "Updates last sync stats in the connector document", "externalDocs": { @@ -4574,7 +4574,7 @@ "/_connector": { "get": { "tags": [ - "connector.list" + "connector" ], "summary": "Returns existing connectors", "externalDocs": { @@ -4675,7 +4675,7 @@ }, "put": { "tags": [ - "connector.put" + "connector" ], "summary": "Creates or updates a connector", "externalDocs": { @@ -4695,7 +4695,7 @@ }, "post": { "tags": [ - "connector.post" + "connector" ], "summary": "Creates a connector", "externalDocs": { @@ -4762,7 +4762,7 @@ "/_connector/_sync_job/{connector_sync_job_id}/_cancel": { "put": { "tags": [ - "connector.sync_job_cancel" + "connector" ], "summary": "Cancels a connector sync job", "externalDocs": { @@ -4809,7 +4809,7 @@ "/_connector/_sync_job/{connector_sync_job_id}": { "get": { "tags": [ - "connector.sync_job_get" + "connector" ], "summary": "Retrieves a connector sync job", "externalDocs": { @@ -4846,7 +4846,7 @@ }, "delete": { "tags": [ - "connector.sync_job_delete" + "connector" ], "summary": "Deletes a connector sync job", "externalDocs": { @@ -4885,7 +4885,7 @@ "/_connector/_sync_job": { "get": { "tags": [ - "connector.sync_job_list" + "connector" ], "summary": "Lists connector sync jobs", "externalDocs": { @@ -4986,7 +4986,7 @@ }, "post": { "tags": [ - "connector.sync_job_post" + "connector" ], "summary": "Creates a connector sync job", "externalDocs": { @@ -5044,7 +5044,7 @@ "/_connector/{connector_id}/_filtering/_activate": { "put": { "tags": [ - "connector.update_active_filtering" + "connector" ], "summary": "Activates the valid draft filtering for a connector", "externalDocs": { @@ -5091,7 +5091,7 @@ "/_connector/{connector_id}/_api_key_id": { "put": { "tags": [ - "connector.update_api_key_id" + "connector" ], "summary": "Updates the API key id in the connector document", "externalDocs": { @@ -5156,7 +5156,7 @@ "/_connector/{connector_id}/_configuration": { "put": { "tags": [ - "connector.update_configuration" + "connector" ], "summary": "Updates the configuration field in the connector document", "externalDocs": { @@ -5224,7 +5224,7 @@ "/_connector/{connector_id}/_error": { "put": { "tags": [ - "connector.update_error" + "connector" ], "summary": "Updates the filtering field in the connector document", "externalDocs": { @@ -5296,7 +5296,7 @@ "/_connector/{connector_id}/_filtering": { "put": { "tags": [ - "connector.update_filtering" + "connector" ], "summary": "Updates the filtering field in the connector document", "externalDocs": { @@ -5370,7 +5370,7 @@ "/_connector/{connector_id}/_filtering/_validation": { "put": { "tags": [ - "connector.update_filtering_validation" + "connector" ], "summary": "Updates the draft filtering validation info for a connector", "externalDocs": { @@ -5435,7 +5435,7 @@ "/_connector/{connector_id}/_index_name": { "put": { "tags": [ - "connector.update_index_name" + "connector" ], "summary": "Updates the index_name in the connector document", "externalDocs": { @@ -5507,7 +5507,7 @@ "/_connector/{connector_id}/_name": { "put": { "tags": [ - "connector.update_name" + "connector" ], "summary": "Updates the name and description fields in the connector document", "externalDocs": { @@ -5572,7 +5572,7 @@ "/_connector/{connector_id}/_native": { "put": { "tags": [ - "connector.update_native" + "connector" ], "summary": "Updates the is_native flag in the connector document", "externalDocs": { @@ -5637,7 +5637,7 @@ "/_connector/{connector_id}/_pipeline": { "put": { "tags": [ - "connector.update_pipeline" + "connector" ], "summary": "Updates the pipeline field in the connector document", "externalDocs": { @@ -5702,7 +5702,7 @@ "/_connector/{connector_id}/_scheduling": { "put": { "tags": [ - "connector.update_scheduling" + "connector" ], "summary": "Updates the scheduling field in the connector document", "externalDocs": { @@ -5767,7 +5767,7 @@ "/_connector/{connector_id}/_service_type": { "put": { "tags": [ - "connector.update_service_type" + "connector" ], "summary": "Updates the service type of the connector", "externalDocs": { @@ -5832,7 +5832,7 @@ "/_connector/{connector_id}/_status": { "put": { "tags": [ - "connector.update_status" + "connector" ], "summary": "Updates the status of the connector", "externalDocs": { @@ -6255,7 +6255,7 @@ "/_dangling/{index_uuid}": { "post": { "tags": [ - "dangling_indices.import_dangling_index" + "dangling_indices" ], "summary": "Imports the specified dangling index", "externalDocs": { @@ -6322,7 +6322,7 @@ }, "delete": { "tags": [ - "dangling_indices.delete_dangling_index" + "dangling_indices" ], "summary": "Deletes the specified dangling index", "externalDocs": { @@ -6391,7 +6391,7 @@ "/_dangling": { "get": { "tags": [ - "dangling_indices.list_dangling_indices" + "dangling_indices" ], "summary": "Returns all dangling indices", "externalDocs": { @@ -7613,7 +7613,7 @@ "/_enrich/policy/{name}": { "get": { "tags": [ - "enrich.get_policy" + "enrich" ], "summary": "Get an enrich policy", "description": "Returns information about an enrich policy.", @@ -7635,7 +7635,7 @@ }, "put": { "tags": [ - "enrich.put_policy" + "enrich" ], "summary": "Create an enrich policy", "description": "Creates an enrich policy.", @@ -7693,7 +7693,7 @@ }, "delete": { "tags": [ - "enrich.delete_policy" + "enrich" ], "summary": "Delete an enrich policy", "description": "Deletes an existing enrich policy and its enrich index.", @@ -7732,7 +7732,7 @@ "/_enrich/policy/{name}/_execute": { "put": { "tags": [ - "enrich.execute_policy" + "enrich" ], "summary": "Creates the enrich index for an existing enrich policy", "externalDocs": { @@ -7788,7 +7788,7 @@ "/_enrich/policy": { "get": { "tags": [ - "enrich.get_policy" + "enrich" ], "summary": "Get an enrich policy", "description": "Returns information about an enrich policy.", @@ -7807,7 +7807,7 @@ "/_enrich/_stats": { "get": { "tags": [ - "enrich.stats" + "enrich" ], "summary": "Get enrich stats", "description": "Returns enrich coordinator statistics and information about enrich policies that are currently executing.", @@ -7861,7 +7861,7 @@ "/_eql/search/{id}": { "get": { "tags": [ - "eql.get" + "eql" ], "summary": "Returns the current status and available results for an async EQL search or a stored synchronous EQL search", "externalDocs": { @@ -7917,7 +7917,7 @@ }, "delete": { "tags": [ - "eql.delete" + "eql" ], "summary": "Deletes an async EQL search or a stored synchronous EQL search", "description": "The API also deletes results for the search.", @@ -7956,7 +7956,7 @@ "/_eql/search/status/{id}": { "get": { "tags": [ - "eql.get_status" + "eql" ], "summary": "Returns the current status for an async EQL search or a stored synchronous EQL search without returning results", "externalDocs": { @@ -8022,7 +8022,7 @@ "/{index}/_eql/search": { "get": { "tags": [ - "eql.search" + "eql" ], "summary": "Returns results matching a query expressed in Event Query Language (EQL)", "externalDocs": { @@ -8064,7 +8064,7 @@ }, "post": { "tags": [ - "eql.search" + "eql" ], "summary": "Returns results matching a query expressed in Event Query Language (EQL)", "externalDocs": { @@ -8108,7 +8108,7 @@ "/_query": { "post": { "tags": [ - "esql.query" + "esql" ], "summary": "Executes an ES|QL request", "externalDocs": { @@ -8628,7 +8628,7 @@ "/_features": { "get": { "tags": [ - "features.get_features" + "features" ], "summary": "Gets a list of features which can be included in snapshots using the feature_states field when creating a snapshot", "externalDocs": { @@ -8664,7 +8664,7 @@ "/_features/_reset": { "post": { "tags": [ - "features.reset_features" + "features" ], "summary": "Resets the internal state of features, usually by deleting system indices", "externalDocs": { @@ -8895,7 +8895,7 @@ "/{index}/_fleet/global_checkpoints": { "get": { "tags": [ - "fleet.global_checkpoints" + "fleet" ], "summary": "Returns the current global checkpoints for an index", "description": "This API is design for internal use by the fleet server project.", @@ -8999,7 +8999,7 @@ "/_fleet/_fleet_msearch": { "get": { "tags": [ - "fleet.msearch" + "fleet" ], "summary": "Executes several [fleet searches](https://www.elastic.co/guide/en/elasticsearch/reference/current/fleet-search.html) with a single API request", "description": "The API follows the same structure as the [multi search](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html) API. However, similar to the fleet search API, it\nsupports the wait_for_checkpoints parameter.", @@ -9058,7 +9058,7 @@ }, "post": { "tags": [ - "fleet.msearch" + "fleet" ], "summary": "Executes several [fleet searches](https://www.elastic.co/guide/en/elasticsearch/reference/current/fleet-search.html) with a single API request", "description": "The API follows the same structure as the [multi search](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html) API. However, similar to the fleet search API, it\nsupports the wait_for_checkpoints parameter.", @@ -9119,7 +9119,7 @@ "/{index}/_fleet/_fleet_msearch": { "get": { "tags": [ - "fleet.msearch" + "fleet" ], "summary": "Executes several [fleet searches](https://www.elastic.co/guide/en/elasticsearch/reference/current/fleet-search.html) with a single API request", "description": "The API follows the same structure as the [multi search](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html) API. However, similar to the fleet search API, it\nsupports the wait_for_checkpoints parameter.", @@ -9181,7 +9181,7 @@ }, "post": { "tags": [ - "fleet.msearch" + "fleet" ], "summary": "Executes several [fleet searches](https://www.elastic.co/guide/en/elasticsearch/reference/current/fleet-search.html) with a single API request", "description": "The API follows the same structure as the [multi search](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html) API. However, similar to the fleet search API, it\nsupports the wait_for_checkpoints parameter.", @@ -9245,7 +9245,7 @@ "/{index}/_fleet/_fleet_search": { "get": { "tags": [ - "fleet.search" + "fleet" ], "summary": "The purpose of the fleet search api is to provide a search api where the search will only be executed\n", "description": "after provided checkpoint has been processed and is visible for searches inside of Elasticsearch.", @@ -9400,7 +9400,7 @@ }, "post": { "tags": [ - "fleet.search" + "fleet" ], "summary": "The purpose of the fleet search api is to provide a search api where the search will only be executed\n", "description": "after provided checkpoint has been processed and is visible for searches inside of Elasticsearch.", @@ -9634,7 +9634,7 @@ "/{index}/_graph/explore": { "get": { "tags": [ - "graph.explore" + "graph" ], "summary": "Extracts and summarizes information about the documents and terms in an Elasticsearch data stream or index", "externalDocs": { @@ -9663,7 +9663,7 @@ }, "post": { "tags": [ - "graph.explore" + "graph" ], "summary": "Extracts and summarizes information about the documents and terms in an Elasticsearch data stream or index", "externalDocs": { @@ -9755,7 +9755,7 @@ "/_ilm/policy/{policy}": { "get": { "tags": [ - "ilm.get_lifecycle" + "ilm" ], "summary": "Retrieves a lifecycle policy", "externalDocs": { @@ -9782,7 +9782,7 @@ }, "put": { "tags": [ - "ilm.put_lifecycle" + "ilm" ], "summary": "Creates a lifecycle policy", "description": "If the specified policy exists, the policy is replaced and the policy version is incremented.", @@ -9853,7 +9853,7 @@ }, "delete": { "tags": [ - "ilm.delete_lifecycle" + "ilm" ], "summary": "Deletes the specified lifecycle policy definition", "description": "You cannot delete policies that are currently in use. If the policy is being used to manage any indices, the request fails and returns an error.", @@ -9912,7 +9912,7 @@ "/{index}/_ilm/explain": { "get": { "tags": [ - "ilm.explain_lifecycle" + "ilm" ], "summary": "Retrieves information about the index’s current lifecycle state, such as the currently executing phase, action, and step", "description": "Shows when the index entered each one, the definition of the running phase, and information about any failures.", @@ -10002,7 +10002,7 @@ "/_ilm/policy": { "get": { "tags": [ - "ilm.get_lifecycle" + "ilm" ], "summary": "Retrieves a lifecycle policy", "externalDocs": { @@ -10028,7 +10028,7 @@ "/_ilm/status": { "get": { "tags": [ - "ilm.get_status" + "ilm" ], "summary": "Retrieves the current index lifecycle management (ILM) status", "externalDocs": { @@ -10061,7 +10061,7 @@ "/_ilm/migrate_to_data_tiers": { "post": { "tags": [ - "ilm.migrate_to_data_tiers" + "ilm" ], "summary": "Switches the indices, ILM policies, and legacy, composable and component templates from using custom node attributes and\n", "description": "attribute-based allocation filters to using data tiers, and optionally deletes one legacy index template.+\nUsing node roles enables ILM to automatically move the indices between data tiers.", @@ -10160,7 +10160,7 @@ "/_ilm/move/{index}": { "post": { "tags": [ - "ilm.move_to_step" + "ilm" ], "summary": "Manually moves an index into the specified step and executes that step", "externalDocs": { @@ -10215,7 +10215,7 @@ "/{index}/_ilm/remove": { "post": { "tags": [ - "ilm.remove_policy" + "ilm" ], "summary": "Removes the assigned lifecycle policy and stops managing the specified index", "externalDocs": { @@ -10268,7 +10268,7 @@ "/{index}/_ilm/retry": { "post": { "tags": [ - "ilm.retry" + "ilm" ], "summary": "Retries executing the policy for an index that is in the ERROR step", "externalDocs": { @@ -10306,7 +10306,7 @@ "/_ilm/start": { "post": { "tags": [ - "ilm.start" + "ilm" ], "summary": "Start the index lifecycle management (ILM) plugin", "externalDocs": { @@ -10351,7 +10351,7 @@ "/_ilm/stop": { "post": { "tags": [ - "ilm.stop" + "ilm" ], "summary": "Halts all lifecycle management operations and stops the index lifecycle management (ILM) plugin", "externalDocs": { @@ -10455,7 +10455,7 @@ "/{index}/_block/{block}": { "put": { "tags": [ - "indices.add_block" + "indices" ], "summary": "Add an index block", "description": "Limits the operations allowed on an index by blocking specific operation types.", @@ -10574,7 +10574,7 @@ "/_analyze": { "get": { "tags": [ - "indices.analyze" + "indices" ], "summary": "Performs analysis on a text string and returns the resulting tokens", "externalDocs": { @@ -10592,7 +10592,7 @@ }, "post": { "tags": [ - "indices.analyze" + "indices" ], "summary": "Performs analysis on a text string and returns the resulting tokens", "externalDocs": { @@ -10612,7 +10612,7 @@ "/{index}/_analyze": { "get": { "tags": [ - "indices.analyze" + "indices" ], "summary": "Performs analysis on a text string and returns the resulting tokens", "externalDocs": { @@ -10635,7 +10635,7 @@ }, "post": { "tags": [ - "indices.analyze" + "indices" ], "summary": "Performs analysis on a text string and returns the resulting tokens", "externalDocs": { @@ -10660,7 +10660,7 @@ "/_cache/clear": { "post": { "tags": [ - "indices.clear_cache" + "indices" ], "summary": "Clears the caches of one or more indices", "description": "For data streams, the API clears the caches of the stream’s backing indices.", @@ -10701,7 +10701,7 @@ "/{index}/_cache/clear": { "post": { "tags": [ - "indices.clear_cache" + "indices" ], "summary": "Clears the caches of one or more indices", "description": "For data streams, the API clears the caches of the stream’s backing indices.", @@ -10745,7 +10745,7 @@ "/{index}/_clone/{target}": { "put": { "tags": [ - "indices.clone" + "indices" ], "summary": "Clones an existing index", "externalDocs": { @@ -10781,7 +10781,7 @@ }, "post": { "tags": [ - "indices.clone" + "indices" ], "summary": "Clones an existing index", "externalDocs": { @@ -10819,7 +10819,7 @@ "/{index}/_close": { "post": { "tags": [ - "indices.close" + "indices" ], "summary": "Closes an index", "externalDocs": { @@ -10935,7 +10935,7 @@ "/{index}": { "get": { "tags": [ - "indices.get" + "indices" ], "summary": "Get index information", "description": "Returns information about one or more indices. For data streams, the API returns information about the\nstream’s backing indices.", @@ -11054,7 +11054,7 @@ }, "put": { "tags": [ - "indices.create" + "indices" ], "summary": "Create an index", "description": "Creates a new index.", @@ -11160,7 +11160,7 @@ }, "delete": { "tags": [ - "indices.delete" + "indices" ], "summary": "Delete indices", "description": "Deletes one or more indices.", @@ -11246,7 +11246,7 @@ }, "head": { "tags": [ - "indices.exists" + "indices" ], "summary": "Check indices", "description": "Checks if one or more indices, index aliases, or data streams exist.", @@ -11340,7 +11340,7 @@ "/_data_stream/{name}": { "get": { "tags": [ - "indices.get_data_stream" + "indices" ], "summary": "Get data streams", "description": "Retrieves information about one or more data streams.", @@ -11374,7 +11374,7 @@ }, "put": { "tags": [ - "indices.create_data_stream" + "indices" ], "summary": "Create a data stream", "description": "Creates a data stream.\nYou must have a matching index template with data stream enabled.", @@ -11431,7 +11431,7 @@ }, "delete": { "tags": [ - "indices.delete_data_stream" + "indices" ], "summary": "Delete data streams", "description": "Deletes one or more data streams and their backing indices.", @@ -11490,7 +11490,7 @@ "/_data_stream/_stats": { "get": { "tags": [ - "indices.data_streams_stats" + "indices" ], "summary": "Get data stream stats", "description": "Retrieves statistics for one or more data streams.", @@ -11514,7 +11514,7 @@ "/_data_stream/{name}/_stats": { "get": { "tags": [ - "indices.data_streams_stats" + "indices" ], "summary": "Get data stream stats", "description": "Retrieves statistics for one or more data streams.", @@ -11541,7 +11541,7 @@ "/{index}/_alias/{name}": { "get": { "tags": [ - "indices.get_alias" + "indices" ], "summary": "Get aliases", "description": "Retrieves information for one or more data stream or index aliases.", @@ -11577,7 +11577,7 @@ }, "put": { "tags": [ - "indices.put_alias" + "indices" ], "summary": "Create or update an alias", "description": "Adds a data stream or index to an alias.", @@ -11610,7 +11610,7 @@ }, "post": { "tags": [ - "indices.put_alias" + "indices" ], "summary": "Create or update an alias", "description": "Adds a data stream or index to an alias.", @@ -11643,7 +11643,7 @@ }, "delete": { "tags": [ - "indices.delete_alias" + "indices" ], "summary": "Delete an alias", "description": "Removes a data stream or index from an alias.", @@ -11673,7 +11673,7 @@ }, "head": { "tags": [ - "indices.exists_alias" + "indices" ], "summary": "Check aliases", "description": "Checks if one or more data stream or index aliases exist.", @@ -11711,7 +11711,7 @@ "/{index}/_aliases/{name}": { "put": { "tags": [ - "indices.put_alias" + "indices" ], "summary": "Create or update an alias", "description": "Adds a data stream or index to an alias.", @@ -11744,7 +11744,7 @@ }, "post": { "tags": [ - "indices.put_alias" + "indices" ], "summary": "Create or update an alias", "description": "Adds a data stream or index to an alias.", @@ -11777,7 +11777,7 @@ }, "delete": { "tags": [ - "indices.delete_alias" + "indices" ], "summary": "Delete an alias", "description": "Removes a data stream or index from an alias.", @@ -11809,7 +11809,7 @@ "/_data_stream/{name}/_lifecycle": { "get": { "tags": [ - "indices.get_data_lifecycle" + "indices" ], "summary": "Get data stream lifecycles", "description": "Retrieves the data stream lifecycle configuration of one or more data streams.", @@ -11887,7 +11887,7 @@ }, "put": { "tags": [ - "indices.put_data_lifecycle" + "indices" ], "summary": "Update data stream lifecycles", "description": "Update the data stream lifecycle of the specified data streams.", @@ -11971,7 +11971,7 @@ }, "delete": { "tags": [ - "indices.delete_data_lifecycle" + "indices" ], "summary": "Delete data stream lifecycles", "description": "Removes the data stream lifecycle from a data stream, rendering it not managed by the data stream lifecycle.", @@ -12040,7 +12040,7 @@ "/_index_template/{name}": { "get": { "tags": [ - "indices.get_index_template" + "indices" ], "summary": "Get index templates", "description": "Returns information about one or more index templates.", @@ -12074,7 +12074,7 @@ }, "put": { "tags": [ - "indices.put_index_template" + "indices" ], "summary": "Create or update an index template", "description": "Index templates define settings, mappings, and aliases that can be applied automatically to new indices.", @@ -12108,7 +12108,7 @@ }, "post": { "tags": [ - "indices.put_index_template" + "indices" ], "summary": "Create or update an index template", "description": "Index templates define settings, mappings, and aliases that can be applied automatically to new indices.", @@ -12142,7 +12142,7 @@ }, "delete": { "tags": [ - "indices.delete_index_template" + "indices" ], "summary": "Delete an index template", "description": "The provided <index-template> may contain multiple template names separated by a comma. If multiple template\nnames are specified then there is no wildcard support and the provided names should match completely with\nexisting templates.", @@ -12199,7 +12199,7 @@ }, "head": { "tags": [ - "indices.exists_index_template" + "indices" ], "summary": "Returns information about whether a particular index template exists", "externalDocs": { @@ -12242,7 +12242,7 @@ "/_template/{name}": { "get": { "tags": [ - "indices.get_template" + "indices" ], "summary": "Get index templates", "description": "Retrieves information about one or more index templates.", @@ -12272,7 +12272,7 @@ }, "put": { "tags": [ - "indices.put_template" + "indices" ], "summary": "Create or update an index template", "description": "Index templates define settings, mappings, and aliases that can be applied automatically to new indices.", @@ -12308,7 +12308,7 @@ }, "post": { "tags": [ - "indices.put_template" + "indices" ], "summary": "Create or update an index template", "description": "Index templates define settings, mappings, and aliases that can be applied automatically to new indices.", @@ -12344,7 +12344,7 @@ }, "delete": { "tags": [ - "indices.delete_template" + "indices" ], "summary": "Deletes a legacy index template", "externalDocs": { @@ -12399,7 +12399,7 @@ }, "head": { "tags": [ - "indices.exists_template" + "indices" ], "summary": "Check existence of index templates", "description": "Returns information about whether a particular index template exists.", @@ -12463,7 +12463,7 @@ "/{index}/_disk_usage": { "post": { "tags": [ - "indices.disk_usage" + "indices" ], "summary": "Analyzes the disk usage of each field of an index or data stream", "externalDocs": { @@ -12552,7 +12552,7 @@ "/{index}/_downsample/{target_index}": { "post": { "tags": [ - "indices.downsample" + "indices" ], "summary": "Aggregates a time series (TSDS) index and stores pre-computed statistical summaries (`min`, `max`, `sum`, `value_count` and `avg`) for each metric field grouped by a configured time interval", "externalDocs": { @@ -12612,7 +12612,7 @@ "/_alias/{name}": { "get": { "tags": [ - "indices.get_alias" + "indices" ], "summary": "Get aliases", "description": "Retrieves information for one or more data stream or index aliases.", @@ -12645,7 +12645,7 @@ }, "head": { "tags": [ - "indices.exists_alias" + "indices" ], "summary": "Check aliases", "description": "Checks if one or more data stream or index aliases exist.", @@ -12680,7 +12680,7 @@ "/{index}/_lifecycle/explain": { "get": { "tags": [ - "indices.explain_data_lifecycle" + "indices" ], "summary": "Get the status for a data stream lifecycle", "description": "Retrieves information about an index or data stream’s current data stream lifecycle status, such as time since index creation, time since rollover, the lifecycle configuration managing the index, or any errors encountered during lifecycle execution.", @@ -12750,7 +12750,7 @@ "/{index}/_field_usage_stats": { "get": { "tags": [ - "indices.field_usage_stats" + "indices" ], "summary": "Returns field usage information for each shard and field of an index", "externalDocs": { @@ -12859,7 +12859,7 @@ "/_flush": { "get": { "tags": [ - "indices.flush" + "indices" ], "summary": "Flushes one or more data streams or indices", "externalDocs": { @@ -12891,7 +12891,7 @@ }, "post": { "tags": [ - "indices.flush" + "indices" ], "summary": "Flushes one or more data streams or indices", "externalDocs": { @@ -12925,7 +12925,7 @@ "/{index}/_flush": { "get": { "tags": [ - "indices.flush" + "indices" ], "summary": "Flushes one or more data streams or indices", "externalDocs": { @@ -12960,7 +12960,7 @@ }, "post": { "tags": [ - "indices.flush" + "indices" ], "summary": "Flushes one or more data streams or indices", "externalDocs": { @@ -12997,7 +12997,7 @@ "/_forcemerge": { "post": { "tags": [ - "indices.forcemerge" + "indices" ], "summary": "Performs the force merge operation on one or more indices", "externalDocs": { @@ -13038,7 +13038,7 @@ "/{index}/_forcemerge": { "post": { "tags": [ - "indices.forcemerge" + "indices" ], "summary": "Performs the force merge operation on one or more indices", "externalDocs": { @@ -13082,7 +13082,7 @@ "/_alias": { "get": { "tags": [ - "indices.get_alias" + "indices" ], "summary": "Get aliases", "description": "Retrieves information for one or more data stream or index aliases.", @@ -13114,7 +13114,7 @@ "/{index}/_alias": { "get": { "tags": [ - "indices.get_alias" + "indices" ], "summary": "Get aliases", "description": "Retrieves information for one or more data stream or index aliases.", @@ -13149,7 +13149,7 @@ "/_data_stream": { "get": { "tags": [ - "indices.get_data_stream" + "indices" ], "summary": "Get data streams", "description": "Retrieves information about one or more data streams.", @@ -13182,7 +13182,7 @@ "/_mapping/field/{fields}": { "get": { "tags": [ - "indices.get_field_mapping" + "indices" ], "summary": "Get mapping definitions", "description": "Retrieves mapping definitions for one or more fields.\nFor data streams, the API retrieves field mappings for the stream’s backing indices.", @@ -13220,7 +13220,7 @@ "/{index}/_mapping/field/{fields}": { "get": { "tags": [ - "indices.get_field_mapping" + "indices" ], "summary": "Get mapping definitions", "description": "Retrieves mapping definitions for one or more fields.\nFor data streams, the API retrieves field mappings for the stream’s backing indices.", @@ -13261,7 +13261,7 @@ "/_index_template": { "get": { "tags": [ - "indices.get_index_template" + "indices" ], "summary": "Get index templates", "description": "Returns information about one or more index templates.", @@ -13294,7 +13294,7 @@ "/_mapping": { "get": { "tags": [ - "indices.get_mapping" + "indices" ], "summary": "Get mapping definitions", "description": "Retrieves mapping definitions for one or more indices.\nFor data streams, the API retrieves mappings for the stream’s backing indices.", @@ -13329,7 +13329,7 @@ "/{index}/_mapping": { "get": { "tags": [ - "indices.get_mapping" + "indices" ], "summary": "Get mapping definitions", "description": "Retrieves mapping definitions for one or more indices.\nFor data streams, the API retrieves mappings for the stream’s backing indices.", @@ -13365,7 +13365,7 @@ }, "put": { "tags": [ - "indices.put_mapping" + "indices" ], "summary": "Update field mappings", "description": "Adds new fields to an existing data stream or index.\nYou can also use this API to change the search settings of existing fields.\nFor data streams, these changes are applied to all backing indices by default.", @@ -13407,7 +13407,7 @@ }, "post": { "tags": [ - "indices.put_mapping" + "indices" ], "summary": "Update field mappings", "description": "Adds new fields to an existing data stream or index.\nYou can also use this API to change the search settings of existing fields.\nFor data streams, these changes are applied to all backing indices by default.", @@ -13451,7 +13451,7 @@ "/_settings": { "get": { "tags": [ - "indices.get_settings" + "indices" ], "summary": "Get index settings", "description": "Returns setting information for one or more indices. For data streams,\nreturns setting information for the stream’s backing indices.", @@ -13490,7 +13490,7 @@ }, "put": { "tags": [ - "indices.put_settings" + "indices" ], "summary": "Update index settings", "description": "Changes dynamic index settings in real time. For data streams, index setting\nchanges are applied to all backing indices by default.", @@ -13534,7 +13534,7 @@ "/{index}/_settings": { "get": { "tags": [ - "indices.get_settings" + "indices" ], "summary": "Get index settings", "description": "Returns setting information for one or more indices. For data streams,\nreturns setting information for the stream’s backing indices.", @@ -13576,7 +13576,7 @@ }, "put": { "tags": [ - "indices.put_settings" + "indices" ], "summary": "Update index settings", "description": "Changes dynamic index settings in real time. For data streams, index setting\nchanges are applied to all backing indices by default.", @@ -13623,7 +13623,7 @@ "/{index}/_settings/{name}": { "get": { "tags": [ - "indices.get_settings" + "indices" ], "summary": "Get index settings", "description": "Returns setting information for one or more indices. For data streams,\nreturns setting information for the stream’s backing indices.", @@ -13670,7 +13670,7 @@ "/_settings/{name}": { "get": { "tags": [ - "indices.get_settings" + "indices" ], "summary": "Get index settings", "description": "Returns setting information for one or more indices. For data streams,\nreturns setting information for the stream’s backing indices.", @@ -13714,7 +13714,7 @@ "/_template": { "get": { "tags": [ - "indices.get_template" + "indices" ], "summary": "Get index templates", "description": "Retrieves information about one or more index templates.", @@ -13743,7 +13743,7 @@ "/_data_stream/_migrate/{name}": { "post": { "tags": [ - "indices.migrate_to_data_stream" + "indices" ], "summary": "Convert an index alias to a data stream", "description": "Converts an index alias to a data stream.\nYou must have a matching index template that is data stream enabled.\nThe alias must meet the following criteria:\nThe alias must have a write index;\nAll indices for the alias must have a `@timestamp` field mapping of a `date` or `date_nanos` field type;\nThe alias must not have any filters;\nThe alias must not use custom routing.\nIf successful, the request removes the alias and creates a data stream with the same name.\nThe indices for the alias become hidden backing indices for the stream.\nThe write index for the alias becomes the write index for the stream.", @@ -13802,7 +13802,7 @@ "/_data_stream/_modify": { "post": { "tags": [ - "indices.modify_data_stream" + "indices" ], "summary": "Update data streams", "description": "Performs one or more data stream modification actions in a single atomic operation.", @@ -13850,7 +13850,7 @@ "/{index}/_open": { "post": { "tags": [ - "indices.open" + "indices" ], "summary": "Opens a closed index", "description": "For data streams, the API opens any closed backing indices.", @@ -13960,7 +13960,7 @@ "/_data_stream/_promote/{name}": { "post": { "tags": [ - "indices.promote_data_stream" + "indices" ], "summary": "Promotes a data stream from a replicated data stream managed by CCR to a regular data stream", "externalDocs": { @@ -14008,7 +14008,7 @@ "/_recovery": { "get": { "tags": [ - "indices.recovery" + "indices" ], "summary": "Returns information about ongoing and completed shard recoveries for one or more indices", "description": "For data streams, the API returns information for the stream’s backing indices.", @@ -14034,7 +14034,7 @@ "/{index}/_recovery": { "get": { "tags": [ - "indices.recovery" + "indices" ], "summary": "Returns information about ongoing and completed shard recoveries for one or more indices", "description": "For data streams, the API returns information for the stream’s backing indices.", @@ -14063,7 +14063,7 @@ "/_refresh": { "get": { "tags": [ - "indices.refresh" + "indices" ], "summary": "Refresh an index", "description": "A refresh makes recent operations performed on one or more indices available for search.\nFor data streams, the API runs the refresh operation on the stream’s backing indices.", @@ -14090,7 +14090,7 @@ }, "post": { "tags": [ - "indices.refresh" + "indices" ], "summary": "Refresh an index", "description": "A refresh makes recent operations performed on one or more indices available for search.\nFor data streams, the API runs the refresh operation on the stream’s backing indices.", @@ -14119,7 +14119,7 @@ "/{index}/_refresh": { "get": { "tags": [ - "indices.refresh" + "indices" ], "summary": "Refresh an index", "description": "A refresh makes recent operations performed on one or more indices available for search.\nFor data streams, the API runs the refresh operation on the stream’s backing indices.", @@ -14149,7 +14149,7 @@ }, "post": { "tags": [ - "indices.refresh" + "indices" ], "summary": "Refresh an index", "description": "A refresh makes recent operations performed on one or more indices available for search.\nFor data streams, the API runs the refresh operation on the stream’s backing indices.", @@ -14181,7 +14181,7 @@ "/{index}/_reload_search_analyzers": { "get": { "tags": [ - "indices.reload_search_analyzers" + "indices" ], "summary": "Reloads an index's search analyzers and their resources", "externalDocs": { @@ -14211,7 +14211,7 @@ }, "post": { "tags": [ - "indices.reload_search_analyzers" + "indices" ], "summary": "Reloads an index's search analyzers and their resources", "externalDocs": { @@ -14243,7 +14243,7 @@ "/_resolve/cluster/{name}": { "get": { "tags": [ - "indices.resolve_cluster" + "indices" ], "summary": "Resolves the specified index expressions to return information about each cluster, including\n", "description": "the local cluster, if included.\nMultiple patterns and remote clusters are supported.", @@ -14325,7 +14325,7 @@ "/_resolve/index/{name}": { "get": { "tags": [ - "indices.resolve_index" + "indices" ], "summary": "Resolves the specified name(s) and/or index patterns for indices, aliases, and data streams", "description": "Multiple patterns and remote clusters are supported.", @@ -14419,7 +14419,7 @@ "/{alias}/_rollover": { "post": { "tags": [ - "indices.rollover" + "indices" ], "summary": "Roll over to a new index", "description": "Creates a new index for a data stream or index alias.", @@ -14458,7 +14458,7 @@ "/{alias}/_rollover/{new_index}": { "post": { "tags": [ - "indices.rollover" + "indices" ], "summary": "Roll over to a new index", "description": "Creates a new index for a data stream or index alias.", @@ -14500,7 +14500,7 @@ "/_segments": { "get": { "tags": [ - "indices.segments" + "indices" ], "summary": "Returns low-level information about the Lucene segments in index shards", "description": "For data streams, the API returns information about the stream’s backing indices.", @@ -14532,7 +14532,7 @@ "/{index}/_segments": { "get": { "tags": [ - "indices.segments" + "indices" ], "summary": "Returns low-level information about the Lucene segments in index shards", "description": "For data streams, the API returns information about the stream’s backing indices.", @@ -14567,7 +14567,7 @@ "/_shard_stores": { "get": { "tags": [ - "indices.shard_stores" + "indices" ], "summary": "Retrieves store information about replica shards in one or more indices", "description": "For data streams, the API retrieves store information for the stream’s backing indices.", @@ -14599,7 +14599,7 @@ "/{index}/_shard_stores": { "get": { "tags": [ - "indices.shard_stores" + "indices" ], "summary": "Retrieves store information about replica shards in one or more indices", "description": "For data streams, the API retrieves store information for the stream’s backing indices.", @@ -14634,7 +14634,7 @@ "/{index}/_shrink/{target}": { "put": { "tags": [ - "indices.shrink" + "indices" ], "summary": "Shrinks an existing index into a new index with fewer primary shards", "externalDocs": { @@ -14670,7 +14670,7 @@ }, "post": { "tags": [ - "indices.shrink" + "indices" ], "summary": "Shrinks an existing index into a new index with fewer primary shards", "externalDocs": { @@ -14708,7 +14708,7 @@ "/_index_template/_simulate_index/{name}": { "post": { "tags": [ - "indices.simulate_index_template" + "indices" ], "summary": "Simulate an index", "description": "Returns the index configuration that would be applied to the specified index from an existing index template.", @@ -14781,7 +14781,7 @@ "/_index_template/_simulate": { "post": { "tags": [ - "indices.simulate_template" + "indices" ], "summary": "Simulate an index template", "description": "Returns the index configuration that would be applied by a particular index template.", @@ -14813,7 +14813,7 @@ "/_index_template/_simulate/{name}": { "post": { "tags": [ - "indices.simulate_template" + "indices" ], "summary": "Simulate an index template", "description": "Returns the index configuration that would be applied by a particular index template.", @@ -14848,7 +14848,7 @@ "/{index}/_split/{target}": { "put": { "tags": [ - "indices.split" + "indices" ], "summary": "Splits an existing index into a new index with more primary shards", "externalDocs": { @@ -14884,7 +14884,7 @@ }, "post": { "tags": [ - "indices.split" + "indices" ], "summary": "Splits an existing index into a new index with more primary shards", "externalDocs": { @@ -14922,7 +14922,7 @@ "/_stats": { "get": { "tags": [ - "indices.stats" + "indices" ], "summary": "Returns statistics for one or more indices", "description": "For data streams, the API retrieves statistics for the stream’s backing indices.", @@ -14970,7 +14970,7 @@ "/_stats/{metric}": { "get": { "tags": [ - "indices.stats" + "indices" ], "summary": "Returns statistics for one or more indices", "description": "For data streams, the API retrieves statistics for the stream’s backing indices.", @@ -15021,7 +15021,7 @@ "/{index}/_stats": { "get": { "tags": [ - "indices.stats" + "indices" ], "summary": "Returns statistics for one or more indices", "description": "For data streams, the API retrieves statistics for the stream’s backing indices.", @@ -15072,7 +15072,7 @@ "/{index}/_stats/{metric}": { "get": { "tags": [ - "indices.stats" + "indices" ], "summary": "Returns statistics for one or more indices", "description": "For data streams, the API retrieves statistics for the stream’s backing indices.", @@ -15126,7 +15126,7 @@ "/{index}/_unfreeze": { "post": { "tags": [ - "indices.unfreeze" + "indices" ], "summary": "Unfreezes an index", "externalDocs": { @@ -15236,7 +15236,7 @@ "/_aliases": { "post": { "tags": [ - "indices.update_aliases" + "indices" ], "summary": "Create or update an alias", "description": "Adds a data stream or index to an alias.", @@ -15303,7 +15303,7 @@ "/_validate/query": { "get": { "tags": [ - "indices.validate_query" + "indices" ], "summary": "Validate a query", "description": "Validates a query without running it.", @@ -15361,7 +15361,7 @@ }, "post": { "tags": [ - "indices.validate_query" + "indices" ], "summary": "Validate a query", "description": "Validates a query without running it.", @@ -15421,7 +15421,7 @@ "/{index}/_validate/query": { "get": { "tags": [ - "indices.validate_query" + "indices" ], "summary": "Validate a query", "description": "Validates a query without running it.", @@ -15482,7 +15482,7 @@ }, "post": { "tags": [ - "indices.validate_query" + "indices" ], "summary": "Validate a query", "description": "Validates a query without running it.", @@ -15545,7 +15545,7 @@ "/_inference/{inference_id}": { "get": { "tags": [ - "inference.get" + "inference" ], "summary": "Get an inference endpoint", "externalDocs": { @@ -15567,7 +15567,7 @@ }, "put": { "tags": [ - "inference.put" + "inference" ], "summary": "Create an inference endpoint", "externalDocs": { @@ -15592,7 +15592,7 @@ }, "post": { "tags": [ - "inference.inference" + "inference" ], "summary": "Perform inference on the service", "externalDocs": { @@ -15620,7 +15620,7 @@ }, "delete": { "tags": [ - "inference.delete" + "inference" ], "summary": "Delete an inference endpoint", "externalDocs": { @@ -15650,7 +15650,7 @@ "/_inference/{task_type}/{inference_id}": { "get": { "tags": [ - "inference.get" + "inference" ], "summary": "Get an inference endpoint", "externalDocs": { @@ -15675,7 +15675,7 @@ }, "put": { "tags": [ - "inference.put" + "inference" ], "summary": "Create an inference endpoint", "externalDocs": { @@ -15703,7 +15703,7 @@ }, "post": { "tags": [ - "inference.inference" + "inference" ], "summary": "Perform inference on the service", "externalDocs": { @@ -15734,7 +15734,7 @@ }, "delete": { "tags": [ - "inference.delete" + "inference" ], "summary": "Delete an inference endpoint", "externalDocs": { @@ -15767,7 +15767,7 @@ "/_inference": { "get": { "tags": [ - "inference.get" + "inference" ], "summary": "Get an inference endpoint", "externalDocs": { @@ -15854,7 +15854,7 @@ "/_ingest/geoip/database/{id}": { "get": { "tags": [ - "ingest.get_geoip_database" + "ingest" ], "summary": "Returns information about one or more geoip database configurations", "externalDocs": { @@ -15878,7 +15878,7 @@ }, "put": { "tags": [ - "ingest.put_geoip_database" + "ingest" ], "summary": "Returns information about one or more geoip database configurations", "externalDocs": { @@ -15956,7 +15956,7 @@ }, "delete": { "tags": [ - "ingest.delete_geoip_database" + "ingest" ], "summary": "Deletes a geoip database configuration", "externalDocs": { @@ -16014,7 +16014,7 @@ "/_ingest/pipeline/{id}": { "get": { "tags": [ - "ingest.get_pipeline" + "ingest" ], "summary": "Returns information about one or more ingest pipelines", "description": "This API returns a local reference of the pipeline.", @@ -16042,7 +16042,7 @@ }, "put": { "tags": [ - "ingest.put_pipeline" + "ingest" ], "summary": "Creates or updates an ingest pipeline", "description": "Changes made using this API take effect immediately.", @@ -16149,7 +16149,7 @@ }, "delete": { "tags": [ - "ingest.delete_pipeline" + "ingest" ], "summary": "Deletes one or more existing ingest pipeline", "externalDocs": { @@ -16207,7 +16207,7 @@ "/_ingest/geoip/stats": { "get": { "tags": [ - "ingest.geo_ip_stats" + "ingest" ], "summary": "Gets download statistics for GeoIP2 databases used with the geoip processor", "externalDocs": { @@ -16248,7 +16248,7 @@ "/_ingest/geoip/database": { "get": { "tags": [ - "ingest.get_geoip_database" + "ingest" ], "summary": "Returns information about one or more geoip database configurations", "externalDocs": { @@ -16271,7 +16271,7 @@ "/_ingest/pipeline": { "get": { "tags": [ - "ingest.get_pipeline" + "ingest" ], "summary": "Returns information about one or more ingest pipelines", "description": "This API returns a local reference of the pipeline.", @@ -16298,7 +16298,7 @@ "/_ingest/processor/grok": { "get": { "tags": [ - "ingest.processor_grok" + "ingest" ], "summary": "Extracts structured fields out of a single text field within a document", "description": "You choose which field to extract matched fields from, as well as the grok pattern you expect will match.\nA grok pattern is like a regular expression that supports aliased expressions that can be reused.", @@ -16335,7 +16335,7 @@ "/_ingest/pipeline/_simulate": { "get": { "tags": [ - "ingest.simulate" + "ingest" ], "summary": "Executes an ingest pipeline against a set of provided documents", "externalDocs": { @@ -16359,7 +16359,7 @@ }, "post": { "tags": [ - "ingest.simulate" + "ingest" ], "summary": "Executes an ingest pipeline against a set of provided documents", "externalDocs": { @@ -16385,7 +16385,7 @@ "/_ingest/pipeline/{id}/_simulate": { "get": { "tags": [ - "ingest.simulate" + "ingest" ], "summary": "Executes an ingest pipeline against a set of provided documents", "externalDocs": { @@ -16412,7 +16412,7 @@ }, "post": { "tags": [ - "ingest.simulate" + "ingest" ], "summary": "Executes an ingest pipeline against a set of provided documents", "externalDocs": { @@ -16501,7 +16501,7 @@ "/_license": { "get": { "tags": [ - "license.get" + "license" ], "summary": "Get license information", "description": "Returns information about your Elastic license, including its type, its status, when it was issued, and when it expires.\nFor more information about the different types of licenses, refer to [Elastic Stack subscriptions](https://www.elastic.co/subscriptions).", @@ -16554,7 +16554,7 @@ }, "put": { "tags": [ - "license.post" + "license" ], "summary": "Updates the license for the cluster", "externalDocs": { @@ -16577,7 +16577,7 @@ }, "post": { "tags": [ - "license.post" + "license" ], "summary": "Updates the license for the cluster", "externalDocs": { @@ -16600,7 +16600,7 @@ }, "delete": { "tags": [ - "license.delete" + "license" ], "summary": "Deletes licensing information for the cluster", "externalDocs": { @@ -16624,7 +16624,7 @@ "/_license/basic_status": { "get": { "tags": [ - "license.get_basic_status" + "license" ], "summary": "Retrieves information about the status of the basic license", "externalDocs": { @@ -16657,7 +16657,7 @@ "/_license/trial_status": { "get": { "tags": [ - "license.get_trial_status" + "license" ], "summary": "Retrieves information about the status of the trial license", "externalDocs": { @@ -16690,7 +16690,7 @@ "/_license/start_basic": { "post": { "tags": [ - "license.post_start_basic" + "license" ], "summary": "The start basic API enables you to initiate an indefinite basic license, which gives access to all the basic features", "description": "If the basic license does not support all of the features that are available with your current license, however, you are notified in the response. You must then re-submit the API request with the acknowledge parameter set to true.\nTo check the status of your basic license, use the following API: [Get basic status](https://www.elastic.co/guide/en/elasticsearch/reference/current/get-basic-status.html).", @@ -16762,7 +16762,7 @@ "/_license/start_trial": { "post": { "tags": [ - "license.post_start_trial" + "license" ], "summary": "The start trial API enables you to start a 30-day trial, which gives access to all subscription features", "externalDocs": { @@ -16826,7 +16826,7 @@ "/_logstash/pipeline/{id}": { "get": { "tags": [ - "logstash.get_pipeline" + "logstash" ], "summary": "Retrieves pipelines used for Logstash Central Management", "externalDocs": { @@ -16847,7 +16847,7 @@ }, "put": { "tags": [ - "logstash.put_pipeline" + "logstash" ], "summary": "Creates or updates a pipeline used for Logstash Central Management", "externalDocs": { @@ -16889,7 +16889,7 @@ }, "delete": { "tags": [ - "logstash.delete_pipeline" + "logstash" ], "summary": "Deletes a pipeline used for Logstash Central Management", "externalDocs": { @@ -16923,7 +16923,7 @@ "/_logstash/pipeline": { "get": { "tags": [ - "logstash.get_pipeline" + "logstash" ], "summary": "Retrieves pipelines used for Logstash Central Management", "externalDocs": { @@ -17143,7 +17143,7 @@ "/_migration/deprecations": { "get": { "tags": [ - "migration.deprecations" + "migration" ], "summary": "Retrieves information about different cluster, node, and index level settings that use deprecated features that will be removed or changed in the next major version", "externalDocs": { @@ -17161,7 +17161,7 @@ "/{index}/_migration/deprecations": { "get": { "tags": [ - "migration.deprecations" + "migration" ], "summary": "Retrieves information about different cluster, node, and index level settings that use deprecated features that will be removed or changed in the next major version", "externalDocs": { @@ -17184,7 +17184,7 @@ "/_migration/system_features": { "get": { "tags": [ - "migration.get_feature_upgrade_status" + "migration" ], "summary": "Find out whether system features need to be upgraded or not", "externalDocs": { @@ -17222,7 +17222,7 @@ }, "post": { "tags": [ - "migration.post_feature_upgrade" + "migration" ], "summary": "Begin upgrades for system features", "externalDocs": { @@ -17262,7 +17262,7 @@ "/_ml/trained_models/{model_id}/deployment/cache/_clear": { "post": { "tags": [ - "ml.clear_trained_model_deployment_cache" + "ml" ], "summary": "Clear trained model deployment cache", "description": "Cache will be cleared on all nodes where the trained model is assigned.\nA trained model deployment may have an inference cache enabled.\nAs requests are handled by each allocated node, their responses may be cached on that individual node.\nCalling this API clears the caches without restarting the deployment.", @@ -17309,7 +17309,7 @@ "/_ml/anomaly_detectors/{job_id}/_close": { "post": { "tags": [ - "ml.close_job" + "ml" ], "summary": "Close anomaly detection jobs", "description": "A job can be opened and closed multiple times throughout its lifecycle. A closed job cannot receive data or perform analysis operations, but you can still explore and navigate results.\nWhen you close a job, it runs housekeeping tasks such as pruning the model history, flushing buffers, calculating final results and persisting the model snapshots. Depending upon the size of the job, it could take several minutes to close and the equivalent time to re-open. After it is closed, the job has a minimal overhead on the cluster except for maintaining its meta data. Therefore it is a best practice to close jobs that are no longer required to process data.\nIf you close an anomaly detection job whose datafeed is running, the request first tries to stop the datafeed. This behavior is equivalent to calling stop datafeed API with the same timeout and force parameters as the close job request.\nWhen a datafeed that has a specified end date stops, it automatically closes its associated job.", @@ -17408,7 +17408,7 @@ "/_ml/calendars/{calendar_id}": { "get": { "tags": [ - "ml.get_calendars" + "ml" ], "summary": "Get calendar configuration info", "externalDocs": { @@ -17438,7 +17438,7 @@ }, "put": { "tags": [ - "ml.put_calendar" + "ml" ], "summary": "Create a calendar", "externalDocs": { @@ -17512,7 +17512,7 @@ }, "post": { "tags": [ - "ml.get_calendars" + "ml" ], "summary": "Get calendar configuration info", "externalDocs": { @@ -17542,7 +17542,7 @@ }, "delete": { "tags": [ - "ml.delete_calendar" + "ml" ], "summary": "Delete a calendar", "description": "Removes all scheduled events from a calendar, then deletes it.", @@ -17581,7 +17581,7 @@ "/_ml/calendars/{calendar_id}/events/{event_id}": { "delete": { "tags": [ - "ml.delete_calendar_event" + "ml" ], "summary": "Delete events from a calendar", "externalDocs": { @@ -17630,7 +17630,7 @@ "/_ml/calendars/{calendar_id}/jobs/{job_id}": { "put": { "tags": [ - "ml.put_calendar_job" + "ml" ], "summary": "Add anomaly detection job to calendar", "externalDocs": { @@ -17693,7 +17693,7 @@ }, "delete": { "tags": [ - "ml.delete_calendar_job" + "ml" ], "summary": "Delete anomaly jobs from a calendar", "externalDocs": { @@ -17758,7 +17758,7 @@ "/_ml/data_frame/analytics/{id}": { "get": { "tags": [ - "ml.get_data_frame_analytics" + "ml" ], "summary": "Get data frame analytics job configuration info", "description": "You can get information for multiple data frame analytics jobs in a single\nAPI request by using a comma-separated list of data frame analytics jobs or a\nwildcard expression.", @@ -17792,7 +17792,7 @@ }, "put": { "tags": [ - "ml.put_data_frame_analytics" + "ml" ], "summary": "Create a data frame analytics job", "description": "This API creates a data frame analytics job that performs an analysis on the\nsource indices and stores the outcome in a destination index.", @@ -17932,7 +17932,7 @@ }, "delete": { "tags": [ - "ml.delete_data_frame_analytics" + "ml" ], "summary": "Delete a data frame analytics job", "externalDocs": { @@ -17990,7 +17990,7 @@ "/_ml/datafeeds/{datafeed_id}": { "get": { "tags": [ - "ml.get_datafeeds" + "ml" ], "summary": "Get datafeeds configuration info", "description": "You can get information for multiple datafeeds in a single API request by\nusing a comma-separated list of datafeeds or a wildcard expression. You can\nget information for all datafeeds by using `_all`, by specifying `*` as the\n`<feed_id>`, or by omitting the `<feed_id>`.\nThis API returns a maximum of 10,000 datafeeds.", @@ -18018,7 +18018,7 @@ }, "put": { "tags": [ - "ml.put_datafeed" + "ml" ], "summary": "Create a datafeed", "description": "Datafeeds retrieve data from Elasticsearch for analysis by an anomaly detection job.\nYou can associate only one datafeed with each anomaly detection job.\nThe datafeed contains a query that runs at a defined interval (`frequency`).\nIf you are concerned about delayed data, you can add a delay (`query_delay') at each interval.\nWhen Elasticsearch security features are enabled, your datafeed remembers which roles the user who created it had\nat the time of creation and runs the query using those same roles. If you provide secondary authorization headers,\nthose credentials are used instead.\nYou must use Kibana, this API, or the create anomaly detection jobs API to create a datafeed. Do not add a datafeed\ndirectly to the `.ml-config` index. Do not give users `write` privileges on the `.ml-config` index.", @@ -18224,7 +18224,7 @@ }, "delete": { "tags": [ - "ml.delete_datafeed" + "ml" ], "summary": "Delete a datafeed", "externalDocs": { @@ -18272,7 +18272,7 @@ "/_ml/_delete_expired_data/{job_id}": { "delete": { "tags": [ - "ml.delete_expired_data" + "ml" ], "summary": "Delete expired ML data", "description": "Deletes all job results, model snapshots and forecast data that have exceeded\ntheir retention days period. Machine learning state documents that are not\nassociated with any job are also deleted.\nYou can limit the request to a single or set of anomaly detection jobs by\nusing a job identifier, a group name, a comma-separated list of jobs, or a\nwildcard expression. You can delete expired data for all anomaly detection\njobs by using _all, by specifying * as the <job_id>, or by omitting the\n<job_id>.", @@ -18305,7 +18305,7 @@ "/_ml/_delete_expired_data": { "delete": { "tags": [ - "ml.delete_expired_data" + "ml" ], "summary": "Delete expired ML data", "description": "Deletes all job results, model snapshots and forecast data that have exceeded\ntheir retention days period. Machine learning state documents that are not\nassociated with any job are also deleted.\nYou can limit the request to a single or set of anomaly detection jobs by\nusing a job identifier, a group name, a comma-separated list of jobs, or a\nwildcard expression. You can delete expired data for all anomaly detection\njobs by using _all, by specifying * as the <job_id>, or by omitting the\n<job_id>.", @@ -18335,7 +18335,7 @@ "/_ml/filters/{filter_id}": { "get": { "tags": [ - "ml.get_filters" + "ml" ], "summary": "Get filters", "description": "You can get a single filter or all filters.", @@ -18363,7 +18363,7 @@ }, "put": { "tags": [ - "ml.put_filter" + "ml" ], "summary": "Create a filter", "description": "A filter contains a list of strings. It can be used by one or more anomaly detection jobs.\nSpecifically, filters are referenced in the `custom_rules` property of detector configuration objects.", @@ -18442,7 +18442,7 @@ }, "delete": { "tags": [ - "ml.delete_filter" + "ml" ], "summary": "Delete a filter", "description": "If an anomaly detection job references the filter, you cannot delete the\nfilter. You must update or delete the job before you can delete the filter.", @@ -18481,7 +18481,7 @@ "/_ml/anomaly_detectors/{job_id}/_forecast": { "post": { "tags": [ - "ml.forecast" + "ml" ], "summary": "Predict future behavior of a time series", "description": "Forecasts are not supported for jobs that perform population analysis; an\nerror occurs if you try to create a forecast for a job that has an\n`over_field_name` in its configuration. Forcasts predict future behavior\nbased on historical data.", @@ -18581,7 +18581,7 @@ }, "delete": { "tags": [ - "ml.delete_forecast" + "ml" ], "summary": "Delete forecasts from a job", "description": "By default, forecasts are retained for 14 days. You can specify a\ndifferent retention period with the `expires_in` parameter in the forecast\njobs API. The delete forecast API enables you to delete one or more\nforecasts before they expire.", @@ -18611,7 +18611,7 @@ "/_ml/anomaly_detectors/{job_id}/_forecast/{forecast_id}": { "delete": { "tags": [ - "ml.delete_forecast" + "ml" ], "summary": "Delete forecasts from a job", "description": "By default, forecasts are retained for 14 days. You can specify a\ndifferent retention period with the `expires_in` parameter in the forecast\njobs API. The delete forecast API enables you to delete one or more\nforecasts before they expire.", @@ -18644,7 +18644,7 @@ "/_ml/anomaly_detectors/{job_id}": { "get": { "tags": [ - "ml.get_jobs" + "ml" ], "summary": "Get anomaly detection jobs configuration info", "description": "You can get information for multiple anomaly detection jobs in a single API\nrequest by using a group name, a comma-separated list of jobs, or a wildcard\nexpression. You can get information for all anomaly detection jobs by using\n`_all`, by specifying `*` as the `<job_id>`, or by omitting the `<job_id>`.", @@ -18672,7 +18672,7 @@ }, "put": { "tags": [ - "ml.put_job" + "ml" ], "summary": "Create an anomaly detection job", "description": "If you include a `datafeed_config`, you must have read index privileges on the source index.", @@ -18858,7 +18858,7 @@ }, "delete": { "tags": [ - "ml.delete_job" + "ml" ], "summary": "Delete an anomaly detection job", "description": "All job configuration, model state and results are deleted.\nIt is not currently possible to delete multiple jobs using wildcards or a\ncomma separated list. If you delete a job that has a datafeed, the request\nfirst tries to delete the datafeed. This behavior is equivalent to calling\nthe delete datafeed API with the same timeout and force parameters as the\ndelete job request.", @@ -18927,7 +18927,7 @@ "/_ml/anomaly_detectors/{job_id}/model_snapshots/{snapshot_id}": { "get": { "tags": [ - "ml.get_model_snapshots" + "ml" ], "summary": "Get model snapshots info", "externalDocs": { @@ -18972,7 +18972,7 @@ }, "post": { "tags": [ - "ml.get_model_snapshots" + "ml" ], "summary": "Get model snapshots info", "externalDocs": { @@ -19017,7 +19017,7 @@ }, "delete": { "tags": [ - "ml.delete_model_snapshot" + "ml" ], "summary": "Delete a model snapshot", "description": "You cannot delete the active model snapshot. To delete that snapshot, first\nrevert to a different one. To identify the active model snapshot, refer to\nthe `model_snapshot_id` in the results from the get jobs API.", @@ -19067,7 +19067,7 @@ "/_ml/trained_models/{model_id}": { "get": { "tags": [ - "ml.get_trained_models" + "ml" ], "summary": "Get trained model configuration info", "externalDocs": { @@ -19109,7 +19109,7 @@ }, "put": { "tags": [ - "ml.put_trained_model" + "ml" ], "summary": "Create a trained model", "description": "Enable you to supply a trained model that is not created by data frame analytics.", @@ -19220,7 +19220,7 @@ }, "delete": { "tags": [ - "ml.delete_trained_model" + "ml" ], "summary": "Delete an unreferenced trained model", "description": "The request deletes a trained inference model that is not referenced by an ingest pipeline.", @@ -19269,7 +19269,7 @@ "/_ml/trained_models/{model_id}/model_aliases/{model_alias}": { "put": { "tags": [ - "ml.put_trained_model_alias" + "ml" ], "summary": "Create or update a trained model alias", "description": "A trained model alias is a logical name used to reference a single trained\nmodel.\nYou can use aliases instead of trained model identifiers to make it easier to\nreference your models. For example, you can use aliases in inference\naggregations and processors.\nAn alias must be unique and refer to only a single trained model. However,\nyou can have multiple aliases for each trained model.\nIf you use this API to update an alias such that it references a different\ntrained model ID and the model uses a different type of data frame analytics,\nan error occurs. For example, this situation occurs if you have a trained\nmodel for regression analysis and a trained model for classification\nanalysis; you cannot reassign an alias from one type of trained model to\nanother.\nIf you use this API to update an alias and there are very few input fields in\ncommon between the old and new trained models for the model alias, the API\nreturns a warning.", @@ -19327,7 +19327,7 @@ }, "delete": { "tags": [ - "ml.delete_trained_model_alias" + "ml" ], "summary": "Delete a trained model alias", "description": "This API deletes an existing model alias that refers to a trained model. If\nthe model alias is missing or refers to a model other than the one identified\nby the `model_id`, this API returns an error.", @@ -19377,7 +19377,7 @@ "/_ml/anomaly_detectors/_estimate_model_memory": { "post": { "tags": [ - "ml.estimate_model_memory" + "ml" ], "summary": "Estimate job model memory usage", "description": "Makes an estimation of the memory usage for an anomaly detection job model.\nIt is based on analysis configuration details for the job and cardinality\nestimates for the fields it references.", @@ -19440,7 +19440,7 @@ "/_ml/data_frame/_evaluate": { "post": { "tags": [ - "ml.evaluate_data_frame" + "ml" ], "summary": "Evaluate data frame analytics", "description": "The API packages together commonly used evaluation metrics for various types\nof machine learning features. This has been designed for use on indexes\ncreated by data frame analytics. Evaluation requires both a ground truth\nfield and an analytics result field to be present.", @@ -19502,7 +19502,7 @@ "/_ml/data_frame/analytics/_explain": { "get": { "tags": [ - "ml.explain_data_frame_analytics" + "ml" ], "summary": "Explain data frame analytics config", "description": "This API provides explanations for a data frame analytics config that either\nexists already or one that has not been created yet. The following\nexplanations are provided:\n* which fields are included or not in the analysis and why,\n* how much memory is estimated to be required. The estimate can be used when deciding the appropriate value for model_memory_limit setting later on.\nIf you have object fields or fields that are excluded via source filtering, they are not included in the explanation.", @@ -19522,7 +19522,7 @@ }, "post": { "tags": [ - "ml.explain_data_frame_analytics" + "ml" ], "summary": "Explain data frame analytics config", "description": "This API provides explanations for a data frame analytics config that either\nexists already or one that has not been created yet. The following\nexplanations are provided:\n* which fields are included or not in the analysis and why,\n* how much memory is estimated to be required. The estimate can be used when deciding the appropriate value for model_memory_limit setting later on.\nIf you have object fields or fields that are excluded via source filtering, they are not included in the explanation.", @@ -19544,7 +19544,7 @@ "/_ml/data_frame/analytics/{id}/_explain": { "get": { "tags": [ - "ml.explain_data_frame_analytics" + "ml" ], "summary": "Explain data frame analytics config", "description": "This API provides explanations for a data frame analytics config that either\nexists already or one that has not been created yet. The following\nexplanations are provided:\n* which fields are included or not in the analysis and why,\n* how much memory is estimated to be required. The estimate can be used when deciding the appropriate value for model_memory_limit setting later on.\nIf you have object fields or fields that are excluded via source filtering, they are not included in the explanation.", @@ -19569,7 +19569,7 @@ }, "post": { "tags": [ - "ml.explain_data_frame_analytics" + "ml" ], "summary": "Explain data frame analytics config", "description": "This API provides explanations for a data frame analytics config that either\nexists already or one that has not been created yet. The following\nexplanations are provided:\n* which fields are included or not in the analysis and why,\n* how much memory is estimated to be required. The estimate can be used when deciding the appropriate value for model_memory_limit setting later on.\nIf you have object fields or fields that are excluded via source filtering, they are not included in the explanation.", @@ -19596,7 +19596,7 @@ "/_ml/anomaly_detectors/{job_id}/_flush": { "post": { "tags": [ - "ml.flush_job" + "ml" ], "summary": "Force buffered data to be processed", "description": "The flush jobs API is only applicable when sending data for analysis using\nthe post data API. Depending on the content of the buffer, then it might\nadditionally calculate new results. Both flush and close operations are\nsimilar, however the flush is more efficient if you are expecting to send\nmore data for analysis. When flushing, the job remains open and is available\nto continue analyzing data. A close operation additionally prunes and\npersists the model state to disk and the job must be opened again before\nanalyzing further data.", @@ -19724,7 +19724,7 @@ "/_ml/anomaly_detectors/{job_id}/results/buckets/{timestamp}": { "get": { "tags": [ - "ml.get_buckets" + "ml" ], "summary": "Get anomaly detection job results for buckets", "description": "The API presents a chronological view of the records, grouped by bucket.", @@ -19779,7 +19779,7 @@ }, "post": { "tags": [ - "ml.get_buckets" + "ml" ], "summary": "Get anomaly detection job results for buckets", "description": "The API presents a chronological view of the records, grouped by bucket.", @@ -19836,7 +19836,7 @@ "/_ml/anomaly_detectors/{job_id}/results/buckets": { "get": { "tags": [ - "ml.get_buckets" + "ml" ], "summary": "Get anomaly detection job results for buckets", "description": "The API presents a chronological view of the records, grouped by bucket.", @@ -19888,7 +19888,7 @@ }, "post": { "tags": [ - "ml.get_buckets" + "ml" ], "summary": "Get anomaly detection job results for buckets", "description": "The API presents a chronological view of the records, grouped by bucket.", @@ -19942,7 +19942,7 @@ "/_ml/calendars/{calendar_id}/events": { "get": { "tags": [ - "ml.get_calendar_events" + "ml" ], "summary": "Get info about events in calendars", "externalDocs": { @@ -20043,7 +20043,7 @@ }, "post": { "tags": [ - "ml.post_calendar_events" + "ml" ], "summary": "Add scheduled events to the calendar", "externalDocs": { @@ -20114,7 +20114,7 @@ "/_ml/calendars": { "get": { "tags": [ - "ml.get_calendars" + "ml" ], "summary": "Get calendar configuration info", "externalDocs": { @@ -20141,7 +20141,7 @@ }, "post": { "tags": [ - "ml.get_calendars" + "ml" ], "summary": "Get calendar configuration info", "externalDocs": { @@ -20170,7 +20170,7 @@ "/_ml/anomaly_detectors/{job_id}/results/categories/{category_id}": { "get": { "tags": [ - "ml.get_categories" + "ml" ], "summary": "Get anomaly detection job results for categories", "externalDocs": { @@ -20206,7 +20206,7 @@ }, "post": { "tags": [ - "ml.get_categories" + "ml" ], "summary": "Get anomaly detection job results for categories", "externalDocs": { @@ -20244,7 +20244,7 @@ "/_ml/anomaly_detectors/{job_id}/results/categories": { "get": { "tags": [ - "ml.get_categories" + "ml" ], "summary": "Get anomaly detection job results for categories", "externalDocs": { @@ -20277,7 +20277,7 @@ }, "post": { "tags": [ - "ml.get_categories" + "ml" ], "summary": "Get anomaly detection job results for categories", "externalDocs": { @@ -20312,7 +20312,7 @@ "/_ml/data_frame/analytics": { "get": { "tags": [ - "ml.get_data_frame_analytics" + "ml" ], "summary": "Get data frame analytics job configuration info", "description": "You can get information for multiple data frame analytics jobs in a single\nAPI request by using a comma-separated list of data frame analytics jobs or a\nwildcard expression.", @@ -20345,7 +20345,7 @@ "/_ml/data_frame/analytics/_stats": { "get": { "tags": [ - "ml.get_data_frame_analytics_stats" + "ml" ], "summary": "Get data frame analytics jobs usage info", "externalDocs": { @@ -20377,7 +20377,7 @@ "/_ml/data_frame/analytics/{id}/_stats": { "get": { "tags": [ - "ml.get_data_frame_analytics_stats" + "ml" ], "summary": "Get data frame analytics jobs usage info", "externalDocs": { @@ -20412,7 +20412,7 @@ "/_ml/datafeeds/{datafeed_id}/_stats": { "get": { "tags": [ - "ml.get_datafeed_stats" + "ml" ], "summary": "Get datafeeds usage info", "description": "You can get statistics for multiple datafeeds in a single API request by\nusing a comma-separated list of datafeeds or a wildcard expression. You can\nget statistics for all datafeeds by using `_all`, by specifying `*` as the\n`<feed_id>`, or by omitting the `<feed_id>`. If the datafeed is stopped, the\nonly information you receive is the `datafeed_id` and the `state`.\nThis API returns a maximum of 10,000 datafeeds.", @@ -20439,7 +20439,7 @@ "/_ml/datafeeds/_stats": { "get": { "tags": [ - "ml.get_datafeed_stats" + "ml" ], "summary": "Get datafeeds usage info", "description": "You can get statistics for multiple datafeeds in a single API request by\nusing a comma-separated list of datafeeds or a wildcard expression. You can\nget statistics for all datafeeds by using `_all`, by specifying `*` as the\n`<feed_id>`, or by omitting the `<feed_id>`. If the datafeed is stopped, the\nonly information you receive is the `datafeed_id` and the `state`.\nThis API returns a maximum of 10,000 datafeeds.", @@ -20463,7 +20463,7 @@ "/_ml/datafeeds": { "get": { "tags": [ - "ml.get_datafeeds" + "ml" ], "summary": "Get datafeeds configuration info", "description": "You can get information for multiple datafeeds in a single API request by\nusing a comma-separated list of datafeeds or a wildcard expression. You can\nget information for all datafeeds by using `_all`, by specifying `*` as the\n`<feed_id>`, or by omitting the `<feed_id>`.\nThis API returns a maximum of 10,000 datafeeds.", @@ -20490,7 +20490,7 @@ "/_ml/filters": { "get": { "tags": [ - "ml.get_filters" + "ml" ], "summary": "Get filters", "description": "You can get a single filter or all filters.", @@ -20517,7 +20517,7 @@ "/_ml/anomaly_detectors/{job_id}/results/influencers": { "get": { "tags": [ - "ml.get_influencers" + "ml" ], "summary": "Get anomaly detection job results for influencers", "description": "Influencers are the entities that have contributed to, or are to blame for,\nthe anomalies. Influencer results are available only if an\n`influencer_field_name` is specified in the job configuration.", @@ -20566,7 +20566,7 @@ }, "post": { "tags": [ - "ml.get_influencers" + "ml" ], "summary": "Get anomaly detection job results for influencers", "description": "Influencers are the entities that have contributed to, or are to blame for,\nthe anomalies. Influencer results are available only if an\n`influencer_field_name` is specified in the job configuration.", @@ -20617,7 +20617,7 @@ "/_ml/anomaly_detectors/_stats": { "get": { "tags": [ - "ml.get_job_stats" + "ml" ], "summary": "Get anomaly detection jobs usage info", "externalDocs": { @@ -20640,7 +20640,7 @@ "/_ml/anomaly_detectors/{job_id}/_stats": { "get": { "tags": [ - "ml.get_job_stats" + "ml" ], "summary": "Get anomaly detection jobs usage info", "externalDocs": { @@ -20666,7 +20666,7 @@ "/_ml/anomaly_detectors": { "get": { "tags": [ - "ml.get_jobs" + "ml" ], "summary": "Get anomaly detection jobs configuration info", "description": "You can get information for multiple anomaly detection jobs in a single API\nrequest by using a group name, a comma-separated list of jobs, or a wildcard\nexpression. You can get information for all anomaly detection jobs by using\n`_all`, by specifying `*` as the `<job_id>`, or by omitting the `<job_id>`.", @@ -20693,7 +20693,7 @@ "/_ml/memory/_stats": { "get": { "tags": [ - "ml.get_memory_stats" + "ml" ], "summary": "Get machine learning memory usage info", "description": "Get information about how machine learning jobs and trained models are using memory,\non each node, both within the JVM heap, and natively, outside of the JVM.", @@ -20723,7 +20723,7 @@ "/_ml/memory/{node_id}/_stats": { "get": { "tags": [ - "ml.get_memory_stats" + "ml" ], "summary": "Get machine learning memory usage info", "description": "Get information about how machine learning jobs and trained models are using memory,\non each node, both within the JVM heap, and natively, outside of the JVM.", @@ -20756,7 +20756,7 @@ "/_ml/anomaly_detectors/{job_id}/model_snapshots/{snapshot_id}/_upgrade/_stats": { "get": { "tags": [ - "ml.get_model_snapshot_upgrade_stats" + "ml" ], "summary": "Get anomaly detection job model snapshot upgrade usage info", "externalDocs": { @@ -20830,7 +20830,7 @@ "/_ml/anomaly_detectors/{job_id}/model_snapshots": { "get": { "tags": [ - "ml.get_model_snapshots" + "ml" ], "summary": "Get model snapshots info", "externalDocs": { @@ -20872,7 +20872,7 @@ }, "post": { "tags": [ - "ml.get_model_snapshots" + "ml" ], "summary": "Get model snapshots info", "externalDocs": { @@ -20916,7 +20916,7 @@ "/_ml/anomaly_detectors/{job_id}/results/overall_buckets": { "get": { "tags": [ - "ml.get_overall_buckets" + "ml" ], "summary": "Get overall bucket results", "description": "Retrievs overall bucket results that summarize the bucket results of\nmultiple anomaly detection jobs.\n\nThe `overall_score` is calculated by combining the scores of all the\nbuckets within the overall bucket span. First, the maximum\n`anomaly_score` per anomaly detection job in the overall bucket is\ncalculated. Then the `top_n` of those scores are averaged to result in\nthe `overall_score`. This means that you can fine-tune the\n`overall_score` so that it is more or less sensitive to the number of\njobs that detect an anomaly at the same time. For example, if you set\n`top_n` to `1`, the `overall_score` is the maximum bucket score in the\noverall bucket. Alternatively, if you set `top_n` to the number of jobs,\nthe `overall_score` is high only when all jobs detect anomalies in that\noverall bucket. If you set the `bucket_span` parameter (to a value\ngreater than its default), the `overall_score` is the maximum\n`overall_score` of the overall buckets that have a span equal to the\njobs' largest bucket span.", @@ -20962,7 +20962,7 @@ }, "post": { "tags": [ - "ml.get_overall_buckets" + "ml" ], "summary": "Get overall bucket results", "description": "Retrievs overall bucket results that summarize the bucket results of\nmultiple anomaly detection jobs.\n\nThe `overall_score` is calculated by combining the scores of all the\nbuckets within the overall bucket span. First, the maximum\n`anomaly_score` per anomaly detection job in the overall bucket is\ncalculated. Then the `top_n` of those scores are averaged to result in\nthe `overall_score`. This means that you can fine-tune the\n`overall_score` so that it is more or less sensitive to the number of\njobs that detect an anomaly at the same time. For example, if you set\n`top_n` to `1`, the `overall_score` is the maximum bucket score in the\noverall bucket. Alternatively, if you set `top_n` to the number of jobs,\nthe `overall_score` is high only when all jobs detect anomalies in that\noverall bucket. If you set the `bucket_span` parameter (to a value\ngreater than its default), the `overall_score` is the maximum\n`overall_score` of the overall buckets that have a span equal to the\njobs' largest bucket span.", @@ -21010,7 +21010,7 @@ "/_ml/anomaly_detectors/{job_id}/results/records": { "get": { "tags": [ - "ml.get_records" + "ml" ], "summary": "Get anomaly records for an anomaly detection job", "description": "Records contain the detailed analytical results. They describe the anomalous\nactivity that has been identified in the input data based on the detector\nconfiguration.\nThere can be many anomaly records depending on the characteristics and size\nof the input data. In practice, there are often too many to be able to\nmanually process them. The machine learning features therefore perform a\nsophisticated aggregation of the anomaly records into buckets.\nThe number of record results depends on the number of anomalies found in each\nbucket, which relates to the number of time series being modeled and the\nnumber of detectors.", @@ -21059,7 +21059,7 @@ }, "post": { "tags": [ - "ml.get_records" + "ml" ], "summary": "Get anomaly records for an anomaly detection job", "description": "Records contain the detailed analytical results. They describe the anomalous\nactivity that has been identified in the input data based on the detector\nconfiguration.\nThere can be many anomaly records depending on the characteristics and size\nof the input data. In practice, there are often too many to be able to\nmanually process them. The machine learning features therefore perform a\nsophisticated aggregation of the anomaly records into buckets.\nThe number of record results depends on the number of anomalies found in each\nbucket, which relates to the number of time series being modeled and the\nnumber of detectors.", @@ -21110,7 +21110,7 @@ "/_ml/trained_models": { "get": { "tags": [ - "ml.get_trained_models" + "ml" ], "summary": "Get trained model configuration info", "externalDocs": { @@ -21151,7 +21151,7 @@ "/_ml/trained_models/{model_id}/_stats": { "get": { "tags": [ - "ml.get_trained_models_stats" + "ml" ], "summary": "Get trained models usage info", "description": "You can get usage information for multiple trained\nmodels in a single API request by using a comma-separated list of model IDs or a wildcard expression.", @@ -21184,7 +21184,7 @@ "/_ml/trained_models/_stats": { "get": { "tags": [ - "ml.get_trained_models_stats" + "ml" ], "summary": "Get trained models usage info", "description": "You can get usage information for multiple trained\nmodels in a single API request by using a comma-separated list of model IDs or a wildcard expression.", @@ -21214,7 +21214,7 @@ "/_ml/trained_models/{model_id}/_infer": { "post": { "tags": [ - "ml.infer_trained_model" + "ml" ], "summary": "Evaluate a trained model", "externalDocs": { @@ -21243,7 +21243,7 @@ "/_ml/trained_models/{model_id}/deployment/_infer": { "post": { "tags": [ - "ml.infer_trained_model" + "ml" ], "summary": "Evaluate a trained model", "externalDocs": { @@ -21272,7 +21272,7 @@ "/_ml/info": { "get": { "tags": [ - "ml.info" + "ml" ], "summary": "Return ML defaults and limits", "description": "Returns defaults and limits used by machine learning.\nThis endpoint is designed to be used by a user interface that needs to fully\nunderstand machine learning configurations where some options are not\nspecified, meaning that the defaults should be used. This endpoint may be\nused to find out what those defaults are. It also provides information about\nthe maximum size of machine learning jobs that could run in the current\ncluster configuration.", @@ -21318,7 +21318,7 @@ "/_ml/anomaly_detectors/{job_id}/_open": { "post": { "tags": [ - "ml.open_job" + "ml" ], "summary": "Open anomaly detection jobs", "description": "An anomaly detection job must be opened to be ready to receive and analyze\ndata. It can be opened and closed multiple times throughout its lifecycle.\nWhen you open a new job, it starts with an empty model.\nWhen you open an existing job, the most recent model state is automatically\nloaded. The job is ready to resume its analysis from where it left off, once\nnew data is received.", @@ -21393,7 +21393,7 @@ "/_ml/anomaly_detectors/{job_id}/_data": { "post": { "tags": [ - "ml.post_data" + "ml" ], "summary": "Send data to an anomaly detection job for analysis", "description": "IMPORTANT: For each job, data can be accepted from only a single connection at a time.\nIt is not currently possible to post data to multiple jobs using wildcards or a comma-separated list.", @@ -21530,7 +21530,7 @@ "/_ml/data_frame/analytics/_preview": { "get": { "tags": [ - "ml.preview_data_frame_analytics" + "ml" ], "summary": "Preview features used by data frame analytics", "description": "Previews the extracted features used by a data frame analytics config.", @@ -21550,7 +21550,7 @@ }, "post": { "tags": [ - "ml.preview_data_frame_analytics" + "ml" ], "summary": "Preview features used by data frame analytics", "description": "Previews the extracted features used by a data frame analytics config.", @@ -21572,7 +21572,7 @@ "/_ml/data_frame/analytics/{id}/_preview": { "get": { "tags": [ - "ml.preview_data_frame_analytics" + "ml" ], "summary": "Preview features used by data frame analytics", "description": "Previews the extracted features used by a data frame analytics config.", @@ -21597,7 +21597,7 @@ }, "post": { "tags": [ - "ml.preview_data_frame_analytics" + "ml" ], "summary": "Preview features used by data frame analytics", "description": "Previews the extracted features used by a data frame analytics config.", @@ -21624,7 +21624,7 @@ "/_ml/datafeeds/{datafeed_id}/_preview": { "get": { "tags": [ - "ml.preview_datafeed" + "ml" ], "summary": "Preview a datafeed", "description": "This API returns the first \"page\" of search results from a datafeed.\nYou can preview an existing datafeed or provide configuration details for a datafeed\nand anomaly detection job in the API. The preview shows the structure of the data\nthat will be passed to the anomaly detection engine.\nIMPORTANT: When Elasticsearch security features are enabled, the preview uses the credentials of the user that\ncalled the API. However, when the datafeed starts it uses the roles of the last user that created or updated the\ndatafeed. To get a preview that accurately reflects the behavior of the datafeed, use the appropriate credentials.\nYou can also use secondary authorization headers to supply the credentials.", @@ -21655,7 +21655,7 @@ }, "post": { "tags": [ - "ml.preview_datafeed" + "ml" ], "summary": "Preview a datafeed", "description": "This API returns the first \"page\" of search results from a datafeed.\nYou can preview an existing datafeed or provide configuration details for a datafeed\nand anomaly detection job in the API. The preview shows the structure of the data\nthat will be passed to the anomaly detection engine.\nIMPORTANT: When Elasticsearch security features are enabled, the preview uses the credentials of the user that\ncalled the API. However, when the datafeed starts it uses the roles of the last user that created or updated the\ndatafeed. To get a preview that accurately reflects the behavior of the datafeed, use the appropriate credentials.\nYou can also use secondary authorization headers to supply the credentials.", @@ -21688,7 +21688,7 @@ "/_ml/datafeeds/_preview": { "get": { "tags": [ - "ml.preview_datafeed" + "ml" ], "summary": "Preview a datafeed", "description": "This API returns the first \"page\" of search results from a datafeed.\nYou can preview an existing datafeed or provide configuration details for a datafeed\nand anomaly detection job in the API. The preview shows the structure of the data\nthat will be passed to the anomaly detection engine.\nIMPORTANT: When Elasticsearch security features are enabled, the preview uses the credentials of the user that\ncalled the API. However, when the datafeed starts it uses the roles of the last user that created or updated the\ndatafeed. To get a preview that accurately reflects the behavior of the datafeed, use the appropriate credentials.\nYou can also use secondary authorization headers to supply the credentials.", @@ -21716,7 +21716,7 @@ }, "post": { "tags": [ - "ml.preview_datafeed" + "ml" ], "summary": "Preview a datafeed", "description": "This API returns the first \"page\" of search results from a datafeed.\nYou can preview an existing datafeed or provide configuration details for a datafeed\nand anomaly detection job in the API. The preview shows the structure of the data\nthat will be passed to the anomaly detection engine.\nIMPORTANT: When Elasticsearch security features are enabled, the preview uses the credentials of the user that\ncalled the API. However, when the datafeed starts it uses the roles of the last user that created or updated the\ndatafeed. To get a preview that accurately reflects the behavior of the datafeed, use the appropriate credentials.\nYou can also use secondary authorization headers to supply the credentials.", @@ -21746,7 +21746,7 @@ "/_ml/trained_models/{model_id}/definition/{part}": { "put": { "tags": [ - "ml.put_trained_model_definition_part" + "ml" ], "summary": "Create part of a trained model definition", "externalDocs": { @@ -21824,7 +21824,7 @@ "/_ml/trained_models/{model_id}/vocabulary": { "put": { "tags": [ - "ml.put_trained_model_vocabulary" + "ml" ], "summary": "Create a trained model vocabulary", "description": "This API is supported only for natural language processing (NLP) models.\nThe vocabulary is stored in the index as described in `inference_config.*.vocabulary` of the trained model definition.", @@ -21901,7 +21901,7 @@ "/_ml/anomaly_detectors/{job_id}/_reset": { "post": { "tags": [ - "ml.reset_job" + "ml" ], "summary": "Reset an anomaly detection job", "description": "All model state and results are deleted. The job is ready to start over as if\nit had just been created.\nIt is not currently possible to reset multiple jobs using wildcards or a\ncomma separated list.", @@ -21960,7 +21960,7 @@ "/_ml/anomaly_detectors/{job_id}/model_snapshots/{snapshot_id}/_revert": { "post": { "tags": [ - "ml.revert_model_snapshot" + "ml" ], "summary": "Revert to a snapshot", "description": "The machine learning features react quickly to anomalous input, learning new\nbehaviors in data. Highly anomalous input increases the variance in the\nmodels whilst the system learns whether this is a new step-change in behavior\nor a one-off event. In the case where this anomalous input is known to be a\none-off, then it might be appropriate to reset the model state to a time\nbefore this event. For example, you might consider reverting to a saved\nsnapshot after Black Friday or a critical system failure.", @@ -22043,7 +22043,7 @@ "/_ml/set_upgrade_mode": { "post": { "tags": [ - "ml.set_upgrade_mode" + "ml" ], "summary": "Set upgrade_mode for ML indices", "description": "Sets a cluster wide upgrade_mode setting that prepares machine learning\nindices for an upgrade.\nWhen upgrading your cluster, in some circumstances you must restart your\nnodes and reindex your machine learning indices. In those circumstances,\nthere must be no machine learning jobs running. You can close the machine\nlearning jobs, do the upgrade, then open all the jobs again. Alternatively,\nyou can use this API to temporarily halt tasks associated with the jobs and\ndatafeeds and prevent new jobs from opening. You can also use this API\nduring upgrades that do not require you to reindex your machine learning\nindices, though stopping jobs is not a requirement in that case.\nYou can see the current value for the upgrade_mode setting by using the get\nmachine learning info API.", @@ -22091,7 +22091,7 @@ "/_ml/data_frame/analytics/{id}/_start": { "post": { "tags": [ - "ml.start_data_frame_analytics" + "ml" ], "summary": "Start a data frame analytics job", "description": "A data frame analytics job can be started and stopped multiple times\nthroughout its lifecycle.\nIf the destination index does not exist, it is created automatically the\nfirst time you start the data frame analytics job. The\n`index.number_of_shards` and `index.number_of_replicas` settings for the\ndestination index are copied from the source index. If there are multiple\nsource indices, the destination index copies the highest setting values. The\nmappings for the destination index are also copied from the source indices.\nIf there are any mapping conflicts, the job fails to start.\nIf the destination index exists, it is used as is. You can therefore set up\nthe destination index in advance with custom settings and mappings.", @@ -22152,7 +22152,7 @@ "/_ml/datafeeds/{datafeed_id}/_start": { "post": { "tags": [ - "ml.start_datafeed" + "ml" ], "summary": "Start datafeeds", "description": "A datafeed must be started in order to retrieve data from Elasticsearch. A datafeed can be started and stopped\nmultiple times throughout its lifecycle.\n\nBefore you can start a datafeed, the anomaly detection job must be open. Otherwise, an error occurs.\n\nIf you restart a stopped datafeed, it continues processing input data from the next millisecond after it was stopped.\nIf new data was indexed for that exact millisecond between stopping and starting, it will be ignored.\n\nWhen Elasticsearch security features are enabled, your datafeed remembers which roles the last user to create or\nupdate it had at the time of creation or update and runs the query using those same roles. If you provided secondary\nauthorization headers when you created or updated the datafeed, those credentials are used instead.", @@ -22254,7 +22254,7 @@ "/_ml/trained_models/{model_id}/deployment/_start": { "post": { "tags": [ - "ml.start_trained_model_deployment" + "ml" ], "summary": "Start a trained model deployment", "description": "It allocates the model to every machine learning node.", @@ -22381,7 +22381,7 @@ "/_ml/data_frame/analytics/{id}/_stop": { "post": { "tags": [ - "ml.stop_data_frame_analytics" + "ml" ], "summary": "Stop data frame analytics jobs", "description": "A data frame analytics job can be started and stopped multiple times\nthroughout its lifecycle.", @@ -22458,7 +22458,7 @@ "/_ml/datafeeds/{datafeed_id}/_stop": { "post": { "tags": [ - "ml.stop_datafeed" + "ml" ], "summary": "Stop datafeeds", "description": "A datafeed that is stopped ceases to retrieve data from Elasticsearch. A datafeed can be started and stopped\nmultiple times throughout its lifecycle.", @@ -22557,7 +22557,7 @@ "/_ml/trained_models/{model_id}/deployment/_stop": { "post": { "tags": [ - "ml.stop_trained_model_deployment" + "ml" ], "summary": "Stop a trained model deployment", "externalDocs": { @@ -22623,7 +22623,7 @@ "/_ml/data_frame/analytics/{id}/_update": { "post": { "tags": [ - "ml.update_data_frame_analytics" + "ml" ], "summary": "Update a data frame analytics job", "externalDocs": { @@ -22744,7 +22744,7 @@ "/_ml/datafeeds/{datafeed_id}/_update": { "post": { "tags": [ - "ml.update_datafeed" + "ml" ], "summary": "Update a datafeed", "description": "You must stop and start the datafeed for the changes to be applied.\nWhen Elasticsearch security features are enabled, your datafeed remembers which roles the user who updated it had at\nthe time of the update and runs the query using those same roles. If you provide secondary authorization headers,\nthose credentials are used instead.", @@ -22953,7 +22953,7 @@ "/_ml/filters/{filter_id}/_update": { "post": { "tags": [ - "ml.update_filter" + "ml" ], "summary": "Update a filter", "description": "Updates the description of a filter, adds items, or removes items from the list.", @@ -23041,7 +23041,7 @@ "/_ml/anomaly_detectors/{job_id}/_update": { "post": { "tags": [ - "ml.update_job" + "ml" ], "summary": "Update an anomaly detection job", "description": "Updates certain properties of an anomaly detection job.", @@ -23251,7 +23251,7 @@ "/_ml/anomaly_detectors/{job_id}/model_snapshots/{snapshot_id}/_update": { "post": { "tags": [ - "ml.update_model_snapshot" + "ml" ], "summary": "Update a snapshot", "description": "Updates certain properties of a snapshot.", @@ -23333,7 +23333,7 @@ "/_ml/trained_models/{model_id}/deployment/_update": { "post": { "tags": [ - "ml.update_trained_model_deployment" + "ml" ], "summary": "Update a trained model deployment", "externalDocs": { @@ -23405,7 +23405,7 @@ "/_ml/anomaly_detectors/{job_id}/model_snapshots/{snapshot_id}/_upgrade": { "post": { "tags": [ - "ml.upgrade_job_snapshot" + "ml" ], "summary": "Upgrade a snapshot", "description": "Upgrades an anomaly detection model snapshot to the latest major version.\nOver time, older snapshot formats are deprecated and removed. Anomaly\ndetection jobs support only snapshots that are from the current or previous\nmajor version.\nThis API provides a means to upgrade a snapshot to the current major version.\nThis aids in preparing the cluster for an upgrade to the next major version.\nOnly one snapshot per anomaly detection job can be upgraded at a time and the\nupgraded snapshot cannot be the current snapshot of the anomaly detection\njob.", @@ -23488,7 +23488,7 @@ "/_ml/anomaly_detectors/_validate": { "post": { "tags": [ - "ml.validate" + "ml" ], "summary": "Validates an anomaly detection job", "externalDocs": { @@ -23552,7 +23552,7 @@ "/_ml/anomaly_detectors/_validate/detector": { "post": { "tags": [ - "ml.validate_detector" + "ml" ], "summary": "Validates an anomaly detection detector", "externalDocs": { @@ -23587,7 +23587,7 @@ "/_monitoring/bulk": { "put": { "tags": [ - "monitoring.bulk" + "monitoring" ], "summary": "Used by the monitoring features to send monitoring data", "externalDocs": { @@ -23617,7 +23617,7 @@ }, "post": { "tags": [ - "monitoring.bulk" + "monitoring" ], "summary": "Used by the monitoring features to send monitoring data", "externalDocs": { @@ -23649,7 +23649,7 @@ "/_monitoring/{type}/bulk": { "put": { "tags": [ - "monitoring.bulk" + "monitoring" ], "summary": "Used by the monitoring features to send monitoring data", "externalDocs": { @@ -23682,7 +23682,7 @@ }, "post": { "tags": [ - "monitoring.bulk" + "monitoring" ], "summary": "Used by the monitoring features to send monitoring data", "externalDocs": { @@ -24355,7 +24355,7 @@ "/_nodes/{node_id}/_repositories_metering/{max_archive_version}": { "delete": { "tags": [ - "nodes.clear_repositories_metering_archive" + "nodes" ], "summary": "You can use this API to clear the archived repositories metering information in the cluster", "externalDocs": { @@ -24405,7 +24405,7 @@ "/_nodes/{node_id}/_repositories_metering": { "get": { "tags": [ - "nodes.get_repositories_metering_info" + "nodes" ], "summary": "You can use the cluster repositories metering API to retrieve repositories metering information in a cluster", "description": "This API exposes monotonically non-decreasing counters and it’s expected that clients would durably store the\ninformation needed to compute aggregations over a period of time. Additionally, the information exposed by this\nAPI is volatile, meaning that it won’t be present after node restarts.", @@ -24445,7 +24445,7 @@ "/_nodes/hot_threads": { "get": { "tags": [ - "nodes.hot_threads" + "nodes" ], "summary": "This API yields a breakdown of the hot threads on each selected node in the cluster", "description": "The output is plain text with a breakdown of each node’s top hot threads.", @@ -24489,7 +24489,7 @@ "/_nodes/{node_id}/hot_threads": { "get": { "tags": [ - "nodes.hot_threads" + "nodes" ], "summary": "This API yields a breakdown of the hot threads on each selected node in the cluster", "description": "The output is plain text with a breakdown of each node’s top hot threads.", @@ -24536,7 +24536,7 @@ "/_nodes": { "get": { "tags": [ - "nodes.info" + "nodes" ], "summary": "Returns cluster nodes information", "externalDocs": { @@ -24565,7 +24565,7 @@ "/_nodes/{node_id}": { "get": { "tags": [ - "nodes.info" + "nodes" ], "summary": "Returns cluster nodes information", "externalDocs": { @@ -24597,7 +24597,7 @@ "/_nodes/{metric}": { "get": { "tags": [ - "nodes.info" + "nodes" ], "summary": "Returns cluster nodes information", "externalDocs": { @@ -24629,7 +24629,7 @@ "/_nodes/{node_id}/{metric}": { "get": { "tags": [ - "nodes.info" + "nodes" ], "summary": "Returns cluster nodes information", "externalDocs": { @@ -24664,7 +24664,7 @@ "/_nodes/reload_secure_settings": { "post": { "tags": [ - "nodes.reload_secure_settings" + "nodes" ], "summary": "Reloads the keystore on nodes in the cluster", "externalDocs": { @@ -24690,7 +24690,7 @@ "/_nodes/{node_id}/reload_secure_settings": { "post": { "tags": [ - "nodes.reload_secure_settings" + "nodes" ], "summary": "Reloads the keystore on nodes in the cluster", "externalDocs": { @@ -24719,7 +24719,7 @@ "/_nodes/stats": { "get": { "tags": [ - "nodes.stats" + "nodes" ], "summary": "Returns cluster nodes statistics", "externalDocs": { @@ -24768,7 +24768,7 @@ "/_nodes/{node_id}/stats": { "get": { "tags": [ - "nodes.stats" + "nodes" ], "summary": "Returns cluster nodes statistics", "externalDocs": { @@ -24820,7 +24820,7 @@ "/_nodes/stats/{metric}": { "get": { "tags": [ - "nodes.stats" + "nodes" ], "summary": "Returns cluster nodes statistics", "externalDocs": { @@ -24872,7 +24872,7 @@ "/_nodes/{node_id}/stats/{metric}": { "get": { "tags": [ - "nodes.stats" + "nodes" ], "summary": "Returns cluster nodes statistics", "externalDocs": { @@ -24927,7 +24927,7 @@ "/_nodes/stats/{metric}/{index_metric}": { "get": { "tags": [ - "nodes.stats" + "nodes" ], "summary": "Returns cluster nodes statistics", "externalDocs": { @@ -24982,7 +24982,7 @@ "/_nodes/{node_id}/stats/{metric}/{index_metric}": { "get": { "tags": [ - "nodes.stats" + "nodes" ], "summary": "Returns cluster nodes statistics", "externalDocs": { @@ -25040,7 +25040,7 @@ "/_nodes/usage": { "get": { "tags": [ - "nodes.usage" + "nodes" ], "summary": "Returns information on the usage of features", "externalDocs": { @@ -25063,7 +25063,7 @@ "/_nodes/{node_id}/usage": { "get": { "tags": [ - "nodes.usage" + "nodes" ], "summary": "Returns information on the usage of features", "externalDocs": { @@ -25089,7 +25089,7 @@ "/_nodes/usage/{metric}": { "get": { "tags": [ - "nodes.usage" + "nodes" ], "summary": "Returns information on the usage of features", "externalDocs": { @@ -25115,7 +25115,7 @@ "/_nodes/{node_id}/usage/{metric}": { "get": { "tags": [ - "nodes.usage" + "nodes" ], "summary": "Returns information on the usage of features", "externalDocs": { @@ -25328,7 +25328,7 @@ "/_query_rules/{ruleset_id}/_rule/{rule_id}": { "get": { "tags": [ - "query_rules.get_rule" + "query_rules" ], "summary": "Returns the details about a query rule within a query ruleset", "externalDocs": { @@ -25375,7 +25375,7 @@ }, "put": { "tags": [ - "query_rules.put_rule" + "query_rules" ], "summary": "Creates or updates a query rule within a query ruleset", "externalDocs": { @@ -25469,7 +25469,7 @@ }, "delete": { "tags": [ - "query_rules.delete_rule" + "query_rules" ], "summary": "Deletes a query rule within a query ruleset", "externalDocs": { @@ -25518,7 +25518,7 @@ "/_query_rules/{ruleset_id}": { "get": { "tags": [ - "query_rules.get_ruleset" + "query_rules" ], "summary": "Returns the details about a query ruleset", "externalDocs": { @@ -25554,7 +25554,7 @@ }, "put": { "tags": [ - "query_rules.put_ruleset" + "query_rules" ], "summary": "Creates or updates a query ruleset", "externalDocs": { @@ -25626,7 +25626,7 @@ }, "delete": { "tags": [ - "query_rules.delete_ruleset" + "query_rules" ], "summary": "Deletes a query ruleset", "externalDocs": { @@ -25664,7 +25664,7 @@ "/_query_rules": { "get": { "tags": [ - "query_rules.list_rulesets" + "query_rules" ], "summary": "Returns summarized information about existing query rulesets", "externalDocs": { @@ -26209,7 +26209,7 @@ "/_rollup/job/{id}": { "get": { "tags": [ - "rollup.get_jobs" + "rollup" ], "summary": "Retrieves the configuration, stats, and status of rollup jobs", "externalDocs": { @@ -26231,7 +26231,7 @@ }, "put": { "tags": [ - "rollup.put_job" + "rollup" ], "summary": "Creates a rollup job", "externalDocs": { @@ -26318,7 +26318,7 @@ }, "delete": { "tags": [ - "rollup.delete_job" + "rollup" ], "summary": "Deletes an existing rollup job", "externalDocs": { @@ -26371,7 +26371,7 @@ "/_rollup/job": { "get": { "tags": [ - "rollup.get_jobs" + "rollup" ], "summary": "Retrieves the configuration, stats, and status of rollup jobs", "externalDocs": { @@ -26390,7 +26390,7 @@ "/_rollup/data/{id}": { "get": { "tags": [ - "rollup.get_rollup_caps" + "rollup" ], "summary": "Returns the capabilities of any rollup jobs that have been configured for a specific index or index pattern", "externalDocs": { @@ -26414,7 +26414,7 @@ "/_rollup/data": { "get": { "tags": [ - "rollup.get_rollup_caps" + "rollup" ], "summary": "Returns the capabilities of any rollup jobs that have been configured for a specific index or index pattern", "externalDocs": { @@ -26433,7 +26433,7 @@ "/{index}/_rollup/data": { "get": { "tags": [ - "rollup.get_rollup_index_caps" + "rollup" ], "summary": "Returns the rollup capabilities of all jobs inside of a rollup index (for example, the index where rollup data is stored)", "externalDocs": { @@ -26475,7 +26475,7 @@ "/{index}/_rollup_search": { "get": { "tags": [ - "rollup.rollup_search" + "rollup" ], "summary": "Enables searching rolled-up data using the standard Query DSL", "externalDocs": { @@ -26506,7 +26506,7 @@ }, "post": { "tags": [ - "rollup.rollup_search" + "rollup" ], "summary": "Enables searching rolled-up data using the standard Query DSL", "externalDocs": { @@ -26539,7 +26539,7 @@ "/_rollup/job/{id}/_start": { "post": { "tags": [ - "rollup.start_job" + "rollup" ], "summary": "Starts an existing, stopped rollup job", "externalDocs": { @@ -26586,7 +26586,7 @@ "/_rollup/job/{id}/_stop": { "post": { "tags": [ - "rollup.stop_job" + "rollup" ], "summary": "Stops an existing, started rollup job", "externalDocs": { @@ -27331,7 +27331,7 @@ "/_application/search_application/{name}": { "get": { "tags": [ - "search_application.get" + "search_application" ], "summary": "Returns the details about a search application", "externalDocs": { @@ -27368,7 +27368,7 @@ }, "put": { "tags": [ - "search_application.put" + "search_application" ], "summary": "Creates or updates a search application", "externalDocs": { @@ -27433,7 +27433,7 @@ }, "delete": { "tags": [ - "search_application.delete" + "search_application" ], "summary": "Deletes a search application", "externalDocs": { @@ -27472,7 +27472,7 @@ "/_application/analytics/{name}": { "get": { "tags": [ - "search_application.get_behavioral_analytics" + "search_application" ], "summary": "Returns the existing behavioral analytics collections", "externalDocs": { @@ -27494,7 +27494,7 @@ }, "put": { "tags": [ - "search_application.put_behavioral_analytics" + "search_application" ], "summary": "Creates a behavioral analytics collection", "externalDocs": { @@ -27531,7 +27531,7 @@ }, "delete": { "tags": [ - "search_application.delete_behavioral_analytics" + "search_application" ], "summary": "Delete a behavioral analytics collection", "externalDocs": { @@ -27570,7 +27570,7 @@ "/_application/analytics": { "get": { "tags": [ - "search_application.get_behavioral_analytics" + "search_application" ], "summary": "Returns the existing behavioral analytics collections", "externalDocs": { @@ -27589,7 +27589,7 @@ "/_application/search_application": { "get": { "tags": [ - "search_application.list" + "search_application" ], "summary": "Returns the existing search applications", "externalDocs": { @@ -27662,7 +27662,7 @@ "/_application/search_application/{name}/_search": { "get": { "tags": [ - "search_application.search" + "search_application" ], "summary": "Perform a search against a search application", "externalDocs": { @@ -27690,7 +27690,7 @@ }, "post": { "tags": [ - "search_application.search" + "search_application" ], "summary": "Perform a search against a search application", "externalDocs": { @@ -28238,7 +28238,7 @@ "/_searchable_snapshots/cache/stats": { "get": { "tags": [ - "searchable_snapshots.cache_stats" + "searchable_snapshots" ], "summary": "Retrieve node-level cache statistics about searchable snapshots", "externalDocs": { @@ -28262,7 +28262,7 @@ "/_searchable_snapshots/{node_id}/cache/stats": { "get": { "tags": [ - "searchable_snapshots.cache_stats" + "searchable_snapshots" ], "summary": "Retrieve node-level cache statistics about searchable snapshots", "externalDocs": { @@ -28289,7 +28289,7 @@ "/_searchable_snapshots/cache/clear": { "post": { "tags": [ - "searchable_snapshots.clear_cache" + "searchable_snapshots" ], "summary": "Clear the cache of searchable snapshots", "externalDocs": { @@ -28325,7 +28325,7 @@ "/{index}/_searchable_snapshots/cache/clear": { "post": { "tags": [ - "searchable_snapshots.clear_cache" + "searchable_snapshots" ], "summary": "Clear the cache of searchable snapshots", "externalDocs": { @@ -28364,7 +28364,7 @@ "/_snapshot/{repository}/{snapshot}/_mount": { "post": { "tags": [ - "searchable_snapshots.mount" + "searchable_snapshots" ], "summary": "Mount a snapshot as a searchable index", "externalDocs": { @@ -28484,7 +28484,7 @@ "/_searchable_snapshots/stats": { "get": { "tags": [ - "searchable_snapshots.stats" + "searchable_snapshots" ], "summary": "Retrieve shard-level statistics about searchable snapshots", "externalDocs": { @@ -28507,7 +28507,7 @@ "/{index}/_searchable_snapshots/stats": { "get": { "tags": [ - "searchable_snapshots.stats" + "searchable_snapshots" ], "summary": "Retrieve shard-level statistics about searchable snapshots", "externalDocs": { @@ -28533,7 +28533,7 @@ "/_security/profile/_activate": { "post": { "tags": [ - "security.activate_user_profile" + "security" ], "summary": "Creates or updates a user profile on behalf of another user", "externalDocs": { @@ -28585,7 +28585,7 @@ "/_security/_authenticate": { "get": { "tags": [ - "security.authenticate" + "security" ], "summary": "Authenticate a user", "description": "Authenticates a user and returns information about the authenticated user.\nInclude the user information in a [basic auth header](https://en.wikipedia.org/wiki/Basic_access_authentication).\nA successful call returns a JSON structure that shows user information such as their username, the roles that are assigned to the user, any assigned metadata, and information about the realms that authenticated and authorized the user.\nIf the user cannot be authenticated, this API returns a 401 status code.", @@ -28674,7 +28674,7 @@ "/_security/role": { "get": { "tags": [ - "security.get_role" + "security" ], "summary": "The role management APIs are generally the preferred way to manage roles, rather than using file-based role management", "description": "The get roles API cannot retrieve roles that are defined in roles files.", @@ -28690,7 +28690,7 @@ }, "post": { "tags": [ - "security.bulk_put_role" + "security" ], "summary": "The role management APIs are generally the preferred way to manage roles, rather than using file-based role management", "description": "The bulk create or update roles API cannot update roles that are defined in roles files.", @@ -28774,7 +28774,7 @@ }, "delete": { "tags": [ - "security.bulk_delete_role" + "security" ], "summary": "The role management APIs are generally the preferred way to manage roles, rather than using file-based role management", "description": "The bulk delete roles API cannot delete roles that are defined in roles files.", @@ -28853,7 +28853,7 @@ "/_security/user/{username}/_password": { "put": { "tags": [ - "security.change_password" + "security" ], "summary": "Changes the passwords of users in the native realm and built-in users", "externalDocs": { @@ -28879,7 +28879,7 @@ }, "post": { "tags": [ - "security.change_password" + "security" ], "summary": "Changes the passwords of users in the native realm and built-in users", "externalDocs": { @@ -28907,7 +28907,7 @@ "/_security/user/_password": { "put": { "tags": [ - "security.change_password" + "security" ], "summary": "Changes the passwords of users in the native realm and built-in users", "externalDocs": { @@ -28930,7 +28930,7 @@ }, "post": { "tags": [ - "security.change_password" + "security" ], "summary": "Changes the passwords of users in the native realm and built-in users", "externalDocs": { @@ -28955,7 +28955,7 @@ "/_security/api_key/{ids}/_clear_cache": { "post": { "tags": [ - "security.clear_api_key_cache" + "security" ], "summary": "Evicts a subset of all entries from the API key cache", "description": "The cache is also automatically cleared on state changes of the security index.", @@ -29013,7 +29013,7 @@ "/_security/privilege/{application}/_clear_cache": { "post": { "tags": [ - "security.clear_cached_privileges" + "security" ], "summary": "Evicts application privileges from the native application privileges cache", "externalDocs": { @@ -29070,7 +29070,7 @@ "/_security/realm/{realms}/_clear_cache": { "post": { "tags": [ - "security.clear_cached_realms" + "security" ], "summary": "Evicts users from the user cache", "description": "Can completely clear the cache or evict specific users.", @@ -29140,7 +29140,7 @@ "/_security/role/{name}/_clear_cache": { "post": { "tags": [ - "security.clear_cached_roles" + "security" ], "summary": "Evicts roles from the native role cache", "externalDocs": { @@ -29196,7 +29196,7 @@ "/_security/service/{namespace}/{service}/credential/token/{name}/_clear_cache": { "post": { "tags": [ - "security.clear_cached_service_tokens" + "security" ], "summary": "Evicts tokens from the service account token caches", "externalDocs": { @@ -29274,7 +29274,7 @@ "/_security/api_key": { "get": { "tags": [ - "security.get_api_key" + "security" ], "summary": "Get API key information", "description": "Retrieves information for one or more API keys.\nNOTE: If you have only the `manage_own_api_key` privilege, this API returns only the API keys that you own.\nIf you have `read_security`, `manage_api_key` or greater privileges (including `manage_security`), this API returns all API keys regardless of ownership.", @@ -29391,7 +29391,7 @@ }, "put": { "tags": [ - "security.create_api_key" + "security" ], "summary": "Create an API key", "description": "Creates an API key for access without requiring basic authentication.\nA successful request returns a JSON structure that contains the API key, its unique id, and its name.\nIf applicable, it also returns expiration information for the API key in milliseconds.\nNOTE: By default, API keys never expire. You can specify expiration information when you create the API keys.", @@ -29416,7 +29416,7 @@ }, "post": { "tags": [ - "security.create_api_key" + "security" ], "summary": "Create an API key", "description": "Creates an API key for access without requiring basic authentication.\nA successful request returns a JSON structure that contains the API key, its unique id, and its name.\nIf applicable, it also returns expiration information for the API key in milliseconds.\nNOTE: By default, API keys never expire. You can specify expiration information when you create the API keys.", @@ -29441,7 +29441,7 @@ }, "delete": { "tags": [ - "security.invalidate_api_key" + "security" ], "summary": "Invalidate API keys", "description": "Invalidates one or more API keys.\nThe `manage_api_key` privilege allows deleting any API keys.\nThe `manage_own_api_key` only allows deleting API keys that are owned by the user.\nIn addition, with the `manage_own_api_key` privilege, an invalidation request must be issued in one of the three formats:\n- Set the parameter `owner=true`.\n- Or, set both `username` and `realm_name` to match the user’s identity.\n- Or, if the request is issued by an API key, i.e. an API key invalidates itself, specify its ID in the `ids` field.", @@ -29531,7 +29531,7 @@ "/_security/service/{namespace}/{service}/credential/token/{name}": { "put": { "tags": [ - "security.create_service_token" + "security" ], "summary": "Creates a service accounts token for access without requiring basic authentication", "externalDocs": { @@ -29560,7 +29560,7 @@ }, "post": { "tags": [ - "security.create_service_token" + "security" ], "summary": "Creates a service accounts token for access without requiring basic authentication", "externalDocs": { @@ -29589,7 +29589,7 @@ }, "delete": { "tags": [ - "security.delete_service_token" + "security" ], "summary": "Deletes a service account token", "externalDocs": { @@ -29667,7 +29667,7 @@ "/_security/service/{namespace}/{service}/credential/token": { "post": { "tags": [ - "security.create_service_token" + "security" ], "summary": "Creates a service accounts token for access without requiring basic authentication", "externalDocs": { @@ -29695,7 +29695,7 @@ "/_security/privilege/{application}/{name}": { "get": { "tags": [ - "security.get_privileges" + "security" ], "summary": "Retrieves application privileges", "externalDocs": { @@ -29719,7 +29719,7 @@ }, "delete": { "tags": [ - "security.delete_privileges" + "security" ], "summary": "Removes application privileges", "externalDocs": { @@ -29784,7 +29784,7 @@ "/_security/role/{name}": { "get": { "tags": [ - "security.get_role" + "security" ], "summary": "The role management APIs are generally the preferred way to manage roles, rather than using file-based role management", "description": "The get roles API cannot retrieve roles that are defined in roles files.", @@ -29805,7 +29805,7 @@ }, "put": { "tags": [ - "security.put_role" + "security" ], "summary": "The role management APIs are generally the preferred way to manage roles, rather than using file-based role management", "description": "The create or update roles API cannot update roles that are defined in roles files.", @@ -29832,7 +29832,7 @@ }, "post": { "tags": [ - "security.put_role" + "security" ], "summary": "The role management APIs are generally the preferred way to manage roles, rather than using file-based role management", "description": "The create or update roles API cannot update roles that are defined in roles files.", @@ -29859,7 +29859,7 @@ }, "delete": { "tags": [ - "security.delete_role" + "security" ], "summary": "Removes roles in the native realm", "externalDocs": { @@ -29914,7 +29914,7 @@ "/_security/role_mapping/{name}": { "get": { "tags": [ - "security.get_role_mapping" + "security" ], "summary": "Retrieves role mappings", "externalDocs": { @@ -29935,7 +29935,7 @@ }, "put": { "tags": [ - "security.put_role_mapping" + "security" ], "summary": "Creates and updates role mappings", "externalDocs": { @@ -29962,7 +29962,7 @@ }, "post": { "tags": [ - "security.put_role_mapping" + "security" ], "summary": "Creates and updates role mappings", "externalDocs": { @@ -29989,7 +29989,7 @@ }, "delete": { "tags": [ - "security.delete_role_mapping" + "security" ], "summary": "Removes role mappings", "externalDocs": { @@ -30045,7 +30045,7 @@ "/_security/user/{username}": { "get": { "tags": [ - "security.get_user" + "security" ], "summary": "Retrieves information about users in the native realm and built-in users", "externalDocs": { @@ -30068,7 +30068,7 @@ }, "put": { "tags": [ - "security.put_user" + "security" ], "summary": "Adds and updates users in the native realm", "description": "These users are commonly referred to as native users.", @@ -30095,7 +30095,7 @@ }, "post": { "tags": [ - "security.put_user" + "security" ], "summary": "Adds and updates users in the native realm", "description": "These users are commonly referred to as native users.", @@ -30122,7 +30122,7 @@ }, "delete": { "tags": [ - "security.delete_user" + "security" ], "summary": "Deletes users from the native realm", "externalDocs": { @@ -30177,7 +30177,7 @@ "/_security/user/{username}/_disable": { "put": { "tags": [ - "security.disable_user" + "security" ], "summary": "Disables users in the native realm", "externalDocs": { @@ -30200,7 +30200,7 @@ }, "post": { "tags": [ - "security.disable_user" + "security" ], "summary": "Disables users in the native realm", "externalDocs": { @@ -30225,7 +30225,7 @@ "/_security/profile/{uid}/_disable": { "put": { "tags": [ - "security.disable_user_profile" + "security" ], "summary": "Disables a user profile so it's not visible in user profile searches", "externalDocs": { @@ -30249,7 +30249,7 @@ }, "post": { "tags": [ - "security.disable_user_profile" + "security" ], "summary": "Disables a user profile so it's not visible in user profile searches", "externalDocs": { @@ -30275,7 +30275,7 @@ "/_security/user/{username}/_enable": { "put": { "tags": [ - "security.enable_user" + "security" ], "summary": "Enables users in the native realm", "externalDocs": { @@ -30298,7 +30298,7 @@ }, "post": { "tags": [ - "security.enable_user" + "security" ], "summary": "Enables users in the native realm", "externalDocs": { @@ -30323,7 +30323,7 @@ "/_security/profile/{uid}/_enable": { "put": { "tags": [ - "security.enable_user_profile" + "security" ], "summary": "Enables a user profile so it's visible in user profile searches", "externalDocs": { @@ -30347,7 +30347,7 @@ }, "post": { "tags": [ - "security.enable_user_profile" + "security" ], "summary": "Enables a user profile so it's visible in user profile searches", "externalDocs": { @@ -30373,7 +30373,7 @@ "/_security/enroll/kibana": { "get": { "tags": [ - "security.enroll_kibana" + "security" ], "summary": "Enables a Kibana instance to configure itself for communication with a secured Elasticsearch cluster", "externalDocs": { @@ -30410,7 +30410,7 @@ "/_security/enroll/node": { "get": { "tags": [ - "security.enroll_node" + "security" ], "summary": "Allows a new node to join an existing cluster with security features enabled", "externalDocs": { @@ -30466,7 +30466,7 @@ "/_security/privilege/_builtin": { "get": { "tags": [ - "security.get_builtin_privileges" + "security" ], "summary": "Retrieves the list of cluster privileges and index privileges that are available in this version of Elasticsearch", "externalDocs": { @@ -30506,7 +30506,7 @@ "/_security/privilege": { "get": { "tags": [ - "security.get_privileges" + "security" ], "summary": "Retrieves application privileges", "externalDocs": { @@ -30522,7 +30522,7 @@ }, "put": { "tags": [ - "security.put_privileges" + "security" ], "summary": "Adds or updates application privileges", "externalDocs": { @@ -30546,7 +30546,7 @@ }, "post": { "tags": [ - "security.put_privileges" + "security" ], "summary": "Adds or updates application privileges", "externalDocs": { @@ -30572,7 +30572,7 @@ "/_security/privilege/{application}": { "get": { "tags": [ - "security.get_privileges" + "security" ], "summary": "Retrieves application privileges", "externalDocs": { @@ -30595,7 +30595,7 @@ "/_security/role_mapping": { "get": { "tags": [ - "security.get_role_mapping" + "security" ], "summary": "Retrieves role mappings", "externalDocs": { @@ -30613,7 +30613,7 @@ "/_security/service/{namespace}/{service}": { "get": { "tags": [ - "security.get_service_accounts" + "security" ], "summary": "This API returns a list of service accounts that match the provided path parameter(s)", "externalDocs": { @@ -30639,7 +30639,7 @@ "/_security/service/{namespace}": { "get": { "tags": [ - "security.get_service_accounts" + "security" ], "summary": "This API returns a list of service accounts that match the provided path parameter(s)", "externalDocs": { @@ -30662,7 +30662,7 @@ "/_security/service": { "get": { "tags": [ - "security.get_service_accounts" + "security" ], "summary": "This API returns a list of service accounts that match the provided path parameter(s)", "externalDocs": { @@ -30680,7 +30680,7 @@ "/_security/service/{namespace}/{service}/credential": { "get": { "tags": [ - "security.get_service_credentials" + "security" ], "summary": "Retrieves information of all service credentials for a service account", "externalDocs": { @@ -30752,7 +30752,7 @@ "/_security/oauth2/token": { "post": { "tags": [ - "security.get_token" + "security" ], "summary": "Creates a bearer token for access without requiring basic authentication", "externalDocs": { @@ -30834,7 +30834,7 @@ }, "delete": { "tags": [ - "security.invalidate_token" + "security" ], "summary": "Invalidates one or more access tokens or refresh tokens", "externalDocs": { @@ -30905,7 +30905,7 @@ "/_security/user": { "get": { "tags": [ - "security.get_user" + "security" ], "summary": "Retrieves information about users in the native realm and built-in users", "externalDocs": { @@ -30927,7 +30927,7 @@ "/_security/user/_privileges": { "get": { "tags": [ - "security.get_user_privileges" + "security" ], "summary": "Retrieves security privileges for the logged in user", "externalDocs": { @@ -31030,7 +31030,7 @@ "/_security/profile/{uid}": { "get": { "tags": [ - "security.get_user_profile" + "security" ], "summary": "Retrieves a user's profile using the unique profile ID", "externalDocs": { @@ -31112,7 +31112,7 @@ "/_security/api_key/grant": { "post": { "tags": [ - "security.grant_api_key" + "security" ], "summary": "Creates an API key on behalf of another user", "description": "This API is similar to Create API keys, however it creates the API key for a user that is different than the user that runs the API.\nThe caller must have authentication credentials (either an access token, or a username and password) for the user on whose behalf the API key will be created.\nIt is not possible to use this API to create an API key without that user’s credentials.\nThe user, for whom the authentication credentials is provided, can optionally \"run as\" (impersonate) another user.\nIn this case, the API key will be created on behalf of the impersonated user.\n\nThis API is intended be used by applications that need to create and manage API keys for end users, but cannot guarantee that those users have permission to create API keys on their own behalf.\n\nA successful grant API key API call returns a JSON structure that contains the API key, its unique id, and its name.\nIf applicable, it also returns expiration information for the API key in milliseconds.\n\nBy default, API keys never expire. You can specify expiration information when you create the API keys.", @@ -31196,7 +31196,7 @@ "/_security/user/_has_privileges": { "get": { "tags": [ - "security.has_privileges" + "security" ], "summary": "Check user privileges", "description": "Determines whether the specified user has a specified list of privileges.", @@ -31216,7 +31216,7 @@ }, "post": { "tags": [ - "security.has_privileges" + "security" ], "summary": "Check user privileges", "description": "Determines whether the specified user has a specified list of privileges.", @@ -31238,7 +31238,7 @@ "/_security/user/{user}/_has_privileges": { "get": { "tags": [ - "security.has_privileges" + "security" ], "summary": "Check user privileges", "description": "Determines whether the specified user has a specified list of privileges.", @@ -31263,7 +31263,7 @@ }, "post": { "tags": [ - "security.has_privileges" + "security" ], "summary": "Check user privileges", "description": "Determines whether the specified user has a specified list of privileges.", @@ -31290,7 +31290,7 @@ "/_security/profile/_has_privileges": { "get": { "tags": [ - "security.has_privileges_user_profile" + "security" ], "summary": "Determines whether the users associated with the specified profile IDs have all the requested privileges", "externalDocs": { @@ -31309,7 +31309,7 @@ }, "post": { "tags": [ - "security.has_privileges_user_profile" + "security" ], "summary": "Determines whether the users associated with the specified profile IDs have all the requested privileges", "externalDocs": { @@ -31330,7 +31330,7 @@ "/_security/_query/api_key": { "get": { "tags": [ - "security.query_api_keys" + "security" ], "summary": "Query API keys", "description": "Retrieves a paginated list of API keys and their information. You can optionally filter the results with a query.", @@ -31361,7 +31361,7 @@ }, "post": { "tags": [ - "security.query_api_keys" + "security" ], "summary": "Query API keys", "description": "Retrieves a paginated list of API keys and their information. You can optionally filter the results with a query.", @@ -31394,7 +31394,7 @@ "/_security/_query/role": { "get": { "tags": [ - "security.query_role" + "security" ], "summary": "Retrieves roles in a paginated manner", "description": "You can optionally filter the results with a query.", @@ -31414,7 +31414,7 @@ }, "post": { "tags": [ - "security.query_role" + "security" ], "summary": "Retrieves roles in a paginated manner", "description": "You can optionally filter the results with a query.", @@ -31436,7 +31436,7 @@ "/_security/_query/user": { "get": { "tags": [ - "security.query_user" + "security" ], "summary": "Retrieves information for Users in a paginated manner", "description": "You can optionally filter the results with a query.", @@ -31461,7 +31461,7 @@ }, "post": { "tags": [ - "security.query_user" + "security" ], "summary": "Retrieves information for Users in a paginated manner", "description": "You can optionally filter the results with a query.", @@ -31488,7 +31488,7 @@ "/_security/saml/authenticate": { "post": { "tags": [ - "security.saml_authenticate" + "security" ], "summary": "Submits a SAML Response message to Elasticsearch for consumption", "externalDocs": { @@ -31564,7 +31564,7 @@ "/_security/saml/complete_logout": { "post": { "tags": [ - "security.saml_complete_logout" + "security" ], "summary": "Verifies the logout response sent from the SAML IdP", "externalDocs": { @@ -31616,7 +31616,7 @@ "/_security/saml/invalidate": { "post": { "tags": [ - "security.saml_invalidate" + "security" ], "summary": "Submits a SAML LogoutRequest message to Elasticsearch for consumption", "externalDocs": { @@ -31684,7 +31684,7 @@ "/_security/saml/logout": { "post": { "tags": [ - "security.saml_logout" + "security" ], "summary": "Submits a request to invalidate an access token and refresh token", "externalDocs": { @@ -31740,7 +31740,7 @@ "/_security/saml/prepare": { "post": { "tags": [ - "security.saml_prepare_authentication" + "security" ], "summary": "Creates a SAML authentication request (<AuthnRequest>) as a URL string, based on the configuration of the respective SAML realm in Elasticsearch", "externalDocs": { @@ -31805,7 +31805,7 @@ "/_security/saml/metadata/{realm_name}": { "get": { "tags": [ - "security.saml_service_provider_metadata" + "security" ], "summary": "Generate SAML metadata for a SAML 2.0 Service Provider", "externalDocs": { @@ -31851,7 +31851,7 @@ "/_security/profile/_suggest": { "get": { "tags": [ - "security.suggest_user_profiles" + "security" ], "summary": "Get suggestions for user profiles that match specified search criteria", "externalDocs": { @@ -31875,7 +31875,7 @@ }, "post": { "tags": [ - "security.suggest_user_profiles" + "security" ], "summary": "Get suggestions for user profiles that match specified search criteria", "externalDocs": { @@ -31901,7 +31901,7 @@ "/_security/api_key/{id}": { "put": { "tags": [ - "security.update_api_key" + "security" ], "summary": "Update an API key", "description": "Updates attributes of an existing API key.\nUsers can only update API keys that they created or that were granted to them.\nUse this API to update API keys created by the create API Key or grant API Key APIs.\nIf you need to apply the same update to many API keys, you can use bulk update API Keys to reduce overhead.\nIt’s not possible to update expired API keys, or API keys that have been invalidated by invalidate API Key.\nThis API supports updates to an API key’s access scope and metadata.\nThe access scope of an API key is derived from the `role_descriptors` you specify in the request, and a snapshot of the owner user’s permissions at the time of the request.\nThe snapshot of the owner’s permissions is updated automatically on every call.\nIf you don’t specify `role_descriptors` in the request, a call to this API might still change the API key’s access scope.\nThis change can occur if the owner user’s permissions have changed since the API key was created or last modified.\nTo update another user’s API key, use the `run_as` feature to submit a request on behalf of another user.\nIMPORTANT: It’s not possible to use an API key as the authentication credential for this API.\nTo update an API key, the owner user’s credentials are required.", @@ -31976,7 +31976,7 @@ "/_security/profile/{uid}/_data": { "put": { "tags": [ - "security.update_user_profile_data" + "security" ], "summary": "Updates specific data for the user profile that's associated with the specified unique ID", "externalDocs": { @@ -32009,7 +32009,7 @@ }, "post": { "tags": [ - "security.update_user_profile_data" + "security" ], "summary": "Updates specific data for the user profile that's associated with the specified unique ID", "externalDocs": { @@ -32044,7 +32044,7 @@ "/_nodes/{node_id}/shutdown": { "get": { "tags": [ - "shutdown.get_node" + "shutdown" ], "summary": "Retrieve status of a node or nodes that are currently marked as shutting down", "description": "Designed for indirect use by ECE/ESS and ECK. Direct use is not supported.", @@ -32072,7 +32072,7 @@ }, "put": { "tags": [ - "shutdown.put_node" + "shutdown" ], "summary": "Adds a node to be shut down", "description": "Designed for indirect use by ECE/ESS and ECK. Direct use is not supported.", @@ -32160,7 +32160,7 @@ }, "delete": { "tags": [ - "shutdown.delete_node" + "shutdown" ], "summary": "Removes a node from the shutdown list", "description": "Designed for indirect use by ECE/ESS and ECK. Direct use is not supported.", @@ -32219,7 +32219,7 @@ "/_nodes/shutdown": { "get": { "tags": [ - "shutdown.get_node" + "shutdown" ], "summary": "Retrieve status of a node or nodes that are currently marked as shutting down", "description": "Designed for indirect use by ECE/ESS and ECK. Direct use is not supported.", @@ -32246,7 +32246,7 @@ "/_slm/policy/{policy_id}": { "get": { "tags": [ - "slm.get_lifecycle" + "slm" ], "summary": "Retrieves one or more snapshot lifecycle policy definitions and information about the latest snapshot attempts", "externalDocs": { @@ -32267,7 +32267,7 @@ }, "put": { "tags": [ - "slm.put_lifecycle" + "slm" ], "summary": "Creates or updates a snapshot lifecycle policy", "externalDocs": { @@ -32350,7 +32350,7 @@ }, "delete": { "tags": [ - "slm.delete_lifecycle" + "slm" ], "summary": "Deletes an existing snapshot lifecycle policy", "externalDocs": { @@ -32388,7 +32388,7 @@ "/_slm/policy/{policy_id}/_execute": { "put": { "tags": [ - "slm.execute_lifecycle" + "slm" ], "summary": "Immediately creates a snapshot according to the lifecycle policy, without waiting for the scheduled time", "externalDocs": { @@ -32434,7 +32434,7 @@ "/_slm/_execute_retention": { "post": { "tags": [ - "slm.execute_retention" + "slm" ], "summary": "Deletes any snapshots that are expired according to the policy's retention rules", "externalDocs": { @@ -32459,7 +32459,7 @@ "/_slm/policy": { "get": { "tags": [ - "slm.get_lifecycle" + "slm" ], "summary": "Retrieves one or more snapshot lifecycle policy definitions and information about the latest snapshot attempts", "externalDocs": { @@ -32477,7 +32477,7 @@ "/_slm/stats": { "get": { "tags": [ - "slm.get_stats" + "slm" ], "summary": "Returns global and policy-level statistics about actions taken by snapshot lifecycle management", "externalDocs": { @@ -32549,7 +32549,7 @@ "/_slm/status": { "get": { "tags": [ - "slm.get_status" + "slm" ], "summary": "Retrieves the status of snapshot lifecycle management (SLM)", "externalDocs": { @@ -32582,7 +32582,7 @@ "/_slm/start": { "post": { "tags": [ - "slm.start" + "slm" ], "summary": "Turns on snapshot lifecycle management (SLM)", "externalDocs": { @@ -32607,7 +32607,7 @@ "/_slm/stop": { "post": { "tags": [ - "slm.stop" + "slm" ], "summary": "Turns off snapshot lifecycle management (SLM)", "externalDocs": { @@ -32632,7 +32632,7 @@ "/_snapshot/{repository}/_cleanup": { "post": { "tags": [ - "snapshot.cleanup_repository" + "snapshot" ], "summary": "Triggers the review of a snapshot repository’s contents and deletes any stale data not referenced by existing snapshots", "externalDocs": { @@ -32698,7 +32698,7 @@ "/_snapshot/{repository}/{snapshot}/_clone/{target_snapshot}": { "put": { "tags": [ - "snapshot.clone" + "snapshot" ], "summary": "Clones indices from one snapshot into another snapshot in the same repository", "externalDocs": { @@ -32795,7 +32795,7 @@ "/_snapshot/{repository}/{snapshot}": { "get": { "tags": [ - "snapshot.get" + "snapshot" ], "summary": "Returns information about a snapshot", "externalDocs": { @@ -33000,7 +33000,7 @@ }, "put": { "tags": [ - "snapshot.create" + "snapshot" ], "summary": "Creates a snapshot in a repository", "externalDocs": { @@ -33033,7 +33033,7 @@ }, "post": { "tags": [ - "snapshot.create" + "snapshot" ], "summary": "Creates a snapshot in a repository", "externalDocs": { @@ -33066,7 +33066,7 @@ }, "delete": { "tags": [ - "snapshot.delete" + "snapshot" ], "summary": "Deletes one or more snapshots", "externalDocs": { @@ -33124,7 +33124,7 @@ "/_snapshot/{repository}": { "get": { "tags": [ - "snapshot.get_repository" + "snapshot" ], "summary": "Returns information about a repository", "externalDocs": { @@ -33151,7 +33151,7 @@ }, "put": { "tags": [ - "snapshot.create_repository" + "snapshot" ], "summary": "Creates a repository", "externalDocs": { @@ -33184,7 +33184,7 @@ }, "post": { "tags": [ - "snapshot.create_repository" + "snapshot" ], "summary": "Creates a repository", "externalDocs": { @@ -33217,7 +33217,7 @@ }, "delete": { "tags": [ - "snapshot.delete_repository" + "snapshot" ], "summary": "Deletes a repository", "externalDocs": { @@ -33275,7 +33275,7 @@ "/_snapshot": { "get": { "tags": [ - "snapshot.get_repository" + "snapshot" ], "summary": "Returns information about a repository", "externalDocs": { @@ -33301,7 +33301,7 @@ "/_snapshot/{repository}/_verify_integrity": { "post": { "tags": [ - "snapshot.repository_verify_integrity" + "snapshot" ], "summary": "Verifies the integrity of the contents of a snapshot repository", "externalDocs": { @@ -33420,7 +33420,7 @@ "/_snapshot/{repository}/{snapshot}/_restore": { "post": { "tags": [ - "snapshot.restore" + "snapshot" ], "summary": "Restores a snapshot", "externalDocs": { @@ -33544,7 +33544,7 @@ "/_snapshot/_status": { "get": { "tags": [ - "snapshot.status" + "snapshot" ], "summary": "Returns information about the status of a snapshot", "externalDocs": { @@ -33570,7 +33570,7 @@ "/_snapshot/{repository}/_status": { "get": { "tags": [ - "snapshot.status" + "snapshot" ], "summary": "Returns information about the status of a snapshot", "externalDocs": { @@ -33599,7 +33599,7 @@ "/_snapshot/{repository}/{snapshot}/_status": { "get": { "tags": [ - "snapshot.status" + "snapshot" ], "summary": "Returns information about the status of a snapshot", "externalDocs": { @@ -33631,7 +33631,7 @@ "/_snapshot/{repository}/_verify": { "post": { "tags": [ - "snapshot.verify_repository" + "snapshot" ], "summary": "Verifies a repository", "externalDocs": { @@ -33700,7 +33700,7 @@ "/_sql/close": { "post": { "tags": [ - "sql.clear_cursor" + "sql" ], "summary": "Clears the SQL cursor", "externalDocs": { @@ -33752,7 +33752,7 @@ "/_sql/async/delete/{id}": { "delete": { "tags": [ - "sql.delete_async" + "sql" ], "summary": "Deletes an async SQL search or a stored synchronous SQL search", "description": "If the search is still running, the API cancels it.", @@ -33791,7 +33791,7 @@ "/_sql/async/{id}": { "get": { "tags": [ - "sql.get_async" + "sql" ], "summary": "Returns the current status and available results for an async SQL search or stored synchronous SQL search", "externalDocs": { @@ -33906,7 +33906,7 @@ "/_sql/async/status/{id}": { "get": { "tags": [ - "sql.get_async_status" + "sql" ], "summary": "Returns the current status of an async SQL search or a stored synchronous SQL search", "externalDocs": { @@ -33974,7 +33974,7 @@ "/_sql": { "get": { "tags": [ - "sql.query" + "sql" ], "summary": "Executes a SQL request", "externalDocs": { @@ -33998,7 +33998,7 @@ }, "post": { "tags": [ - "sql.query" + "sql" ], "summary": "Executes a SQL request", "externalDocs": { @@ -34024,7 +34024,7 @@ "/_sql/translate": { "get": { "tags": [ - "sql.translate" + "sql" ], "summary": "Translates SQL into Elasticsearch queries", "externalDocs": { @@ -34043,7 +34043,7 @@ }, "post": { "tags": [ - "sql.translate" + "sql" ], "summary": "Translates SQL into Elasticsearch queries", "externalDocs": { @@ -34064,7 +34064,7 @@ "/_ssl/certificates": { "get": { "tags": [ - "ssl.certificates" + "ssl" ], "summary": "Retrieves information about the X.509 certificates used to encrypt communications in the cluster", "externalDocs": { @@ -34092,7 +34092,7 @@ "/_synonyms/{id}": { "get": { "tags": [ - "synonyms.get_synonym" + "synonyms" ], "summary": "Retrieves a synonym set", "externalDocs": { @@ -34163,7 +34163,7 @@ }, "put": { "tags": [ - "synonyms.put_synonym" + "synonyms" ], "summary": "Creates or updates a synonym set", "externalDocs": { @@ -34240,7 +34240,7 @@ }, "delete": { "tags": [ - "synonyms.delete_synonym" + "synonyms" ], "summary": "Deletes a synonym set", "externalDocs": { @@ -34278,7 +34278,7 @@ "/_synonyms/{set_id}/{rule_id}": { "get": { "tags": [ - "synonyms.get_synonym_rule" + "synonyms" ], "summary": "Retrieves a synonym rule from a synonym set", "externalDocs": { @@ -34325,7 +34325,7 @@ }, "put": { "tags": [ - "synonyms.put_synonym_rule" + "synonyms" ], "summary": "Creates or updates a synonym rule in a synonym set", "externalDocs": { @@ -34390,7 +34390,7 @@ }, "delete": { "tags": [ - "synonyms.delete_synonym_rule" + "synonyms" ], "summary": "Deletes a synonym rule in a synonym set", "externalDocs": { @@ -34439,7 +34439,7 @@ "/_synonyms": { "get": { "tags": [ - "synonyms.get_synonyms_sets" + "synonyms" ], "summary": "Retrieves a summary of all defined synonym sets", "externalDocs": { @@ -34501,7 +34501,7 @@ "/_tasks/_cancel": { "post": { "tags": [ - "tasks.cancel" + "tasks" ], "summary": "Cancels a task, if it can be cancelled through an API", "externalDocs": { @@ -34534,7 +34534,7 @@ "/_tasks/{task_id}/_cancel": { "post": { "tags": [ - "tasks.cancel" + "tasks" ], "summary": "Cancels a task, if it can be cancelled through an API", "externalDocs": { @@ -34570,7 +34570,7 @@ "/_tasks/{task_id}": { "get": { "tags": [ - "tasks.get" + "tasks" ], "summary": "Get task information", "description": "Returns information about the tasks currently executing in the cluster.", @@ -34648,7 +34648,7 @@ "/_tasks": { "get": { "tags": [ - "tasks.list" + "tasks" ], "summary": "The task management API returns information about tasks currently executing on one or more nodes in the cluster", "externalDocs": { @@ -35059,7 +35059,7 @@ "/_text_structure/find_structure": { "post": { "tags": [ - "text_structure.find_structure" + "text_structure" ], "summary": "Finds the structure of a text file", "description": "The text file must contain data that is suitable to be ingested into Elasticsearch.", @@ -35345,7 +35345,7 @@ "/_text_structure/test_grok_pattern": { "get": { "tags": [ - "text_structure.test_grok_pattern" + "text_structure" ], "summary": "Tests a Grok pattern on some text", "externalDocs": { @@ -35369,7 +35369,7 @@ }, "post": { "tags": [ - "text_structure.test_grok_pattern" + "text_structure" ], "summary": "Tests a Grok pattern on some text", "externalDocs": { @@ -35395,7 +35395,7 @@ "/_transform/{transform_id}": { "get": { "tags": [ - "transform.get_transform" + "transform" ], "summary": "Get transforms", "description": "Retrieves configuration information for transforms.", @@ -35429,7 +35429,7 @@ }, "put": { "tags": [ - "transform.put_transform" + "transform" ], "summary": "Create a transform", "description": "Creates a transform.\n\nA transform copies data from source indices, transforms it, and persists it into an entity-centric destination index. You can also think of the destination index as a two-dimensional tabular data structure (known as\na data frame). The ID for each document in the data frame is generated from a hash of the entity, so there is a\nunique row per entity.\n\nYou must choose either the latest or pivot method for your transform; you cannot use both in a single transform. If\nyou choose to use the pivot method for your transform, the entities are defined by the set of `group_by` fields in\nthe pivot object. If you choose to use the latest method, the entities are defined by the `unique_key` field values\nin the latest object.\n\nYou must have `create_index`, `index`, and `read` privileges on the destination index and `read` and\n`view_index_metadata` privileges on the source indices. When Elasticsearch security features are enabled, the\ntransform remembers which roles the user that created it had at the time of creation and uses those same roles. If\nthose roles do not have the required privileges on the source and destination indices, the transform fails when it\nattempts unauthorized operations.\n\nNOTE: You must use Kibana or this API to create a transform. Do not add a transform directly into any\n`.transform-internal*` indices using the Elasticsearch index API. If Elasticsearch security features are enabled, do\nnot give users any privileges on `.transform-internal*` indices. If you used transforms prior to 7.5, also do not\ngive users any privileges on `.data-frame-internal*` indices.", @@ -35533,7 +35533,7 @@ }, "delete": { "tags": [ - "transform.delete_transform" + "transform" ], "summary": "Delete a transform", "description": "Deletes a transform.", @@ -35602,7 +35602,7 @@ "/_transform": { "get": { "tags": [ - "transform.get_transform" + "transform" ], "summary": "Get transforms", "description": "Retrieves configuration information for transforms.", @@ -35635,7 +35635,7 @@ "/_transform/{transform_id}/_stats": { "get": { "tags": [ - "transform.get_transform_stats" + "transform" ], "summary": "Get transform stats", "description": "Retrieves usage information for transforms.", @@ -35729,7 +35729,7 @@ "/_transform/{transform_id}/_preview": { "get": { "tags": [ - "transform.preview_transform" + "transform" ], "summary": "Preview a transform", "description": "Generates a preview of the results that you will get when you create a transform with the same configuration.\n\nIt returns a maximum of 100 results. The calculations are based on all the current data in the source index. It also\ngenerates a list of mappings and settings for the destination index. These values are determined based on the field\ntypes of the source index and the transform aggregations.", @@ -35757,7 +35757,7 @@ }, "post": { "tags": [ - "transform.preview_transform" + "transform" ], "summary": "Preview a transform", "description": "Generates a preview of the results that you will get when you create a transform with the same configuration.\n\nIt returns a maximum of 100 results. The calculations are based on all the current data in the source index. It also\ngenerates a list of mappings and settings for the destination index. These values are determined based on the field\ntypes of the source index and the transform aggregations.", @@ -35787,7 +35787,7 @@ "/_transform/_preview": { "get": { "tags": [ - "transform.preview_transform" + "transform" ], "summary": "Preview a transform", "description": "Generates a preview of the results that you will get when you create a transform with the same configuration.\n\nIt returns a maximum of 100 results. The calculations are based on all the current data in the source index. It also\ngenerates a list of mappings and settings for the destination index. These values are determined based on the field\ntypes of the source index and the transform aggregations.", @@ -35812,7 +35812,7 @@ }, "post": { "tags": [ - "transform.preview_transform" + "transform" ], "summary": "Preview a transform", "description": "Generates a preview of the results that you will get when you create a transform with the same configuration.\n\nIt returns a maximum of 100 results. The calculations are based on all the current data in the source index. It also\ngenerates a list of mappings and settings for the destination index. These values are determined based on the field\ntypes of the source index and the transform aggregations.", @@ -35839,7 +35839,7 @@ "/_transform/{transform_id}/_reset": { "post": { "tags": [ - "transform.reset_transform" + "transform" ], "summary": "Reset a transform", "description": "Resets a transform.\nBefore you can reset it, you must stop it; alternatively, use the `force` query parameter.\nIf the destination index was created by the transform, it is deleted.", @@ -35888,7 +35888,7 @@ "/_transform/{transform_id}/_schedule_now": { "post": { "tags": [ - "transform.schedule_now_transform" + "transform" ], "summary": "Schedule a transform to start now", "description": "Instantly runs a transform to process data.\n\nIf you _schedule_now a transform, it will process the new data instantly,\nwithout waiting for the configured frequency interval. After _schedule_now API is called,\nthe transform will be processed again at now + frequency unless _schedule_now API\nis called again in the meantime.", @@ -35937,7 +35937,7 @@ "/_transform/{transform_id}/_start": { "post": { "tags": [ - "transform.start_transform" + "transform" ], "summary": "Start a transform", "description": "Starts a transform.\n\nWhen you start a transform, it creates the destination index if it does not already exist. The `number_of_shards` is\nset to `1` and the `auto_expand_replicas` is set to `0-1`. If it is a pivot transform, it deduces the mapping\ndefinitions for the destination index from the source indices and the transform aggregations. If fields in the\ndestination index are derived from scripts (as in the case of `scripted_metric` or `bucket_script` aggregations),\nthe transform uses dynamic mappings unless an index template exists. If it is a latest transform, it does not deduce\nmapping definitions; it uses dynamic mappings. To use explicit mappings, create the destination index before you\nstart the transform. Alternatively, you can create an index template, though it does not affect the deduced mappings\nin a pivot transform.\n\nWhen the transform starts, a series of validations occur to ensure its success. If you deferred validation when you\ncreated the transform, they occur when you start the transform—with the exception of privilege checks. When\nElasticsearch security features are enabled, the transform remembers which roles the user that created it had at the\ntime of creation and uses those same roles. If those roles do not have the required privileges on the source and\ndestination indices, the transform fails when it attempts unauthorized operations.", @@ -35996,7 +35996,7 @@ "/_transform/{transform_id}/_stop": { "post": { "tags": [ - "transform.stop_transform" + "transform" ], "summary": "Stop transforms", "description": "Stops one or more transforms.", @@ -36085,7 +36085,7 @@ "/_transform/{transform_id}/_update": { "post": { "tags": [ - "transform.update_transform" + "transform" ], "summary": "Update a transform", "description": "Updates certain properties of a transform.\n\nAll updated properties except `description` do not take effect until after the transform starts the next checkpoint,\nthus there is data consistency in each checkpoint. To use this API, you must have `read` and `view_index_metadata`\nprivileges for the source indices. You must also have `index` and `read` privileges for the destination index. When\nElasticsearch security features are enabled, the transform remembers which roles the user who updated it had at the\ntime of update and runs with those privileges.", @@ -36243,7 +36243,7 @@ "/_transform/_upgrade": { "post": { "tags": [ - "transform.upgrade_transforms" + "transform" ], "summary": "Upgrades all transforms", "description": "This API identifies transforms that have a legacy configuration format and upgrades them to the latest version. It\nalso cleans up the internal data structures that store the transform state and checkpoints. The upgrade does not\naffect the source and destination indices. The upgrade also does not affect the roles that transforms use when\nElasticsearch security features are enabled; the role used to read source data and write to the destination index\nremains unchanged.", @@ -37011,7 +37011,7 @@ "/_watcher/watch/{watch_id}/_ack": { "put": { "tags": [ - "watcher.ack_watch" + "watcher" ], "summary": "Acknowledges a watch, manually throttling the execution of the watch's actions", "externalDocs": { @@ -37031,7 +37031,7 @@ }, "post": { "tags": [ - "watcher.ack_watch" + "watcher" ], "summary": "Acknowledges a watch, manually throttling the execution of the watch's actions", "externalDocs": { @@ -37053,7 +37053,7 @@ "/_watcher/watch/{watch_id}/_ack/{action_id}": { "put": { "tags": [ - "watcher.ack_watch" + "watcher" ], "summary": "Acknowledges a watch, manually throttling the execution of the watch's actions", "externalDocs": { @@ -37076,7 +37076,7 @@ }, "post": { "tags": [ - "watcher.ack_watch" + "watcher" ], "summary": "Acknowledges a watch, manually throttling the execution of the watch's actions", "externalDocs": { @@ -37101,7 +37101,7 @@ "/_watcher/watch/{watch_id}/_activate": { "put": { "tags": [ - "watcher.activate_watch" + "watcher" ], "summary": "Activates a currently inactive watch", "externalDocs": { @@ -37121,7 +37121,7 @@ }, "post": { "tags": [ - "watcher.activate_watch" + "watcher" ], "summary": "Activates a currently inactive watch", "externalDocs": { @@ -37143,7 +37143,7 @@ "/_watcher/watch/{watch_id}/_deactivate": { "put": { "tags": [ - "watcher.deactivate_watch" + "watcher" ], "summary": "Deactivates a currently active watch", "externalDocs": { @@ -37163,7 +37163,7 @@ }, "post": { "tags": [ - "watcher.deactivate_watch" + "watcher" ], "summary": "Deactivates a currently active watch", "externalDocs": { @@ -37185,7 +37185,7 @@ "/_watcher/watch/{id}": { "get": { "tags": [ - "watcher.get_watch" + "watcher" ], "summary": "Retrieves a watch by its ID", "externalDocs": { @@ -37248,7 +37248,7 @@ }, "put": { "tags": [ - "watcher.put_watch" + "watcher" ], "summary": "Creates a new watch, or updates an existing one", "externalDocs": { @@ -37283,7 +37283,7 @@ }, "post": { "tags": [ - "watcher.put_watch" + "watcher" ], "summary": "Creates a new watch, or updates an existing one", "externalDocs": { @@ -37318,7 +37318,7 @@ }, "delete": { "tags": [ - "watcher.delete_watch" + "watcher" ], "summary": "Removes a watch from Watcher", "externalDocs": { @@ -37371,7 +37371,7 @@ "/_watcher/watch/{id}/_execute": { "put": { "tags": [ - "watcher.execute_watch" + "watcher" ], "summary": "This API can be used to force execution of the watch outside of its triggering logic or to simulate the watch execution for debugging purposes", "description": "For testing and debugging purposes, you also have fine-grained control on how the watch runs. You can execute the watch without executing all of its actions or alternatively by simulating them. You can also force execution by ignoring the watch condition and control whether a watch record would be written to the watch history after execution.", @@ -37398,7 +37398,7 @@ }, "post": { "tags": [ - "watcher.execute_watch" + "watcher" ], "summary": "This API can be used to force execution of the watch outside of its triggering logic or to simulate the watch execution for debugging purposes", "description": "For testing and debugging purposes, you also have fine-grained control on how the watch runs. You can execute the watch without executing all of its actions or alternatively by simulating them. You can also force execution by ignoring the watch condition and control whether a watch record would be written to the watch history after execution.", @@ -37427,7 +37427,7 @@ "/_watcher/watch/_execute": { "put": { "tags": [ - "watcher.execute_watch" + "watcher" ], "summary": "This API can be used to force execution of the watch outside of its triggering logic or to simulate the watch execution for debugging purposes", "description": "For testing and debugging purposes, you also have fine-grained control on how the watch runs. You can execute the watch without executing all of its actions or alternatively by simulating them. You can also force execution by ignoring the watch condition and control whether a watch record would be written to the watch history after execution.", @@ -37451,7 +37451,7 @@ }, "post": { "tags": [ - "watcher.execute_watch" + "watcher" ], "summary": "This API can be used to force execution of the watch outside of its triggering logic or to simulate the watch execution for debugging purposes", "description": "For testing and debugging purposes, you also have fine-grained control on how the watch runs. You can execute the watch without executing all of its actions or alternatively by simulating them. You can also force execution by ignoring the watch condition and control whether a watch record would be written to the watch history after execution.", @@ -37477,7 +37477,7 @@ "/_watcher/_query/watches": { "get": { "tags": [ - "watcher.query_watches" + "watcher" ], "summary": "Retrieves stored watches", "externalDocs": { @@ -37496,7 +37496,7 @@ }, "post": { "tags": [ - "watcher.query_watches" + "watcher" ], "summary": "Retrieves stored watches", "externalDocs": { @@ -37517,7 +37517,7 @@ "/_watcher/_start": { "post": { "tags": [ - "watcher.start" + "watcher" ], "summary": "Starts Watcher if it is not already running", "externalDocs": { @@ -37541,7 +37541,7 @@ "/_watcher/stats": { "get": { "tags": [ - "watcher.stats" + "watcher" ], "summary": "Retrieves the current Watcher metrics", "externalDocs": { @@ -37567,7 +37567,7 @@ "/_watcher/stats/{metric}": { "get": { "tags": [ - "watcher.stats" + "watcher" ], "summary": "Retrieves the current Watcher metrics", "externalDocs": { @@ -37596,7 +37596,7 @@ "/_watcher/_stop": { "post": { "tags": [ - "watcher.stop" + "watcher" ], "summary": "Stops Watcher if it is running", "externalDocs": { @@ -37620,7 +37620,7 @@ "/_xpack": { "get": { "tags": [ - "xpack.info" + "xpack" ], "summary": "Provides general information about the installed X-Pack features", "externalDocs": { @@ -37699,7 +37699,7 @@ "/_xpack/usage": { "get": { "tags": [ - "xpack.usage" + "xpack" ], "summary": "This API provides information about which features are currently enabled and available under the current license and some usage statistics", "externalDocs": { diff --git a/output/openapi/elasticsearch-serverless-openapi.json b/output/openapi/elasticsearch-serverless-openapi.json index 374a6e2e38..e46781c06b 100644 --- a/output/openapi/elasticsearch-serverless-openapi.json +++ b/output/openapi/elasticsearch-serverless-openapi.json @@ -12,7 +12,7 @@ "/_async_search/{id}": { "get": { "tags": [ - "async_search.get" + "async_search" ], "summary": "Retrieves the results of a previously submitted async search request given its identifier", "description": "If the Elasticsearch security features are enabled, access to the results of a specific async search is restricted to the user or API key that submitted it.", @@ -79,7 +79,7 @@ }, "delete": { "tags": [ - "async_search.delete" + "async_search" ], "summary": "Deletes an async search by identifier", "description": "If the search is still running, the search request will be cancelled.\nOtherwise, the saved search results are deleted.\nIf the Elasticsearch security features are enabled, the deletion of a specific async search is restricted to: the authenticated user that submitted the original search request; users that have the `cancel_task` cluster privilege.", @@ -118,7 +118,7 @@ "/_async_search/status/{id}": { "get": { "tags": [ - "async_search.status" + "async_search" ], "summary": "Get async search status\n", "description": "Retrieves the status of a previously submitted async search request given its identifier, without retrieving search results.\nIf the Elasticsearch security features are enabled, use of this API is restricted to the `monitoring_user` role.", @@ -157,7 +157,7 @@ "/_async_search": { "post": { "tags": [ - "async_search.submit" + "async_search" ], "summary": "Runs a search request asynchronously", "description": "When the primary sort of the results is an indexed field, shards get sorted based on minimum and maximum value that they hold for that field, hence partial results become available following the sort criteria that was requested.\nWarning: Async search does not support scroll nor search requests that only include the suggest section.\nBy default, Elasticsearch doesn’t allow you to store an async search response larger than 10Mb and an attempt to do this results in an error.\nThe maximum allowed size for a stored async search response can be set by changing the `search.max_async_search_response_size` cluster level setting.", @@ -319,7 +319,7 @@ "/{index}/_async_search": { "post": { "tags": [ - "async_search.submit" + "async_search" ], "summary": "Runs a search request asynchronously", "description": "When the primary sort of the results is an indexed field, shards get sorted based on minimum and maximum value that they hold for that field, hence partial results become available following the sort criteria that was requested.\nWarning: Async search does not support scroll nor search requests that only include the suggest section.\nBy default, Elasticsearch doesn’t allow you to store an async search response larger than 10Mb and an attempt to do this results in an error.\nThe maximum allowed size for a stored async search response can be set by changing the `search.max_async_search_response_size` cluster level setting.", @@ -686,7 +686,7 @@ "/_cat/aliases": { "get": { "tags": [ - "cat.aliases" + "cat" ], "summary": "Get aliases", "description": "Retrieves the cluster’s index aliases, including filter and routing information.\nThe API does not return data stream aliases.\n\nCAT APIs are only intended for human consumption using the command line or the Kibana console. They are not intended for use by applications. For application consumption, use the aliases API.", @@ -709,7 +709,7 @@ "/_cat/aliases/{name}": { "get": { "tags": [ - "cat.aliases" + "cat" ], "summary": "Get aliases", "description": "Retrieves the cluster’s index aliases, including filter and routing information.\nThe API does not return data stream aliases.\n\nCAT APIs are only intended for human consumption using the command line or the Kibana console. They are not intended for use by applications. For application consumption, use the aliases API.", @@ -735,7 +735,7 @@ "/_cat/component_templates": { "get": { "tags": [ - "cat.component_templates" + "cat" ], "summary": "Get component templates", "description": "Returns information about component templates in a cluster.\nComponent templates are building blocks for constructing index templates that specify index mappings, settings, and aliases.\n\nCAT APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use the get component template API.", @@ -754,7 +754,7 @@ "/_cat/component_templates/{name}": { "get": { "tags": [ - "cat.component_templates" + "cat" ], "summary": "Get component templates", "description": "Returns information about component templates in a cluster.\nComponent templates are building blocks for constructing index templates that specify index mappings, settings, and aliases.\n\nCAT APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use the get component template API.", @@ -778,7 +778,7 @@ "/_cat/count": { "get": { "tags": [ - "cat.count" + "cat" ], "summary": "Get a document count", "description": "Provides quick access to a document count for a data stream, an index, or an entire cluster.\nThe document count only includes live documents, not deleted documents which have not yet been removed by the merge process.\n\nCAT APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use the count API.", @@ -796,7 +796,7 @@ "/_cat/count/{index}": { "get": { "tags": [ - "cat.count" + "cat" ], "summary": "Get a document count", "description": "Provides quick access to a document count for a data stream, an index, or an entire cluster.\nThe document count only includes live documents, not deleted documents which have not yet been removed by the merge process.\n\nCAT APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use the count API.", @@ -819,7 +819,7 @@ "/_cat": { "get": { "tags": [ - "cat.help" + "cat" ], "summary": "Get CAT help", "description": "Returns help for the CAT APIs.", @@ -847,7 +847,7 @@ "/_cat/indices": { "get": { "tags": [ - "cat.indices" + "cat" ], "summary": "Get index information", "description": "Returns high-level information about indices in a cluster, including backing indices for data streams.\n\nUse this request to get the following information for each index in a cluster:\n- shard count\n- document count\n- deleted document count\n- primary store size\n- total store size of all shards, including shard replicas\n\nThese metrics are retrieved directly from Lucene, which Elasticsearch uses internally to power indexing and search. As a result, all document counts include hidden nested documents.\nTo get an accurate count of Elasticsearch documents, use the cat count or count APIs.\n\nCAT APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use an index endpoint.", @@ -885,7 +885,7 @@ "/_cat/indices/{index}": { "get": { "tags": [ - "cat.indices" + "cat" ], "summary": "Get index information", "description": "Returns high-level information about indices in a cluster, including backing indices for data streams.\n\nUse this request to get the following information for each index in a cluster:\n- shard count\n- document count\n- deleted document count\n- primary store size\n- total store size of all shards, including shard replicas\n\nThese metrics are retrieved directly from Lucene, which Elasticsearch uses internally to power indexing and search. As a result, all document counts include hidden nested documents.\nTo get an accurate count of Elasticsearch documents, use the cat count or count APIs.\n\nCAT APIs are only intended for human consumption using the command line or Kibana console.\nThey are not intended for use by applications. For application consumption, use an index endpoint.", @@ -926,7 +926,7 @@ "/_cat/ml/data_frame/analytics": { "get": { "tags": [ - "cat.ml_data_frame_analytics" + "cat" ], "summary": "Get data frame analytics jobs", "description": "Returns configuration and usage information about data frame analytics jobs.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get data frame analytics jobs statistics API.", @@ -962,7 +962,7 @@ "/_cat/ml/data_frame/analytics/{id}": { "get": { "tags": [ - "cat.ml_data_frame_analytics" + "cat" ], "summary": "Get data frame analytics jobs", "description": "Returns configuration and usage information about data frame analytics jobs.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get data frame analytics jobs statistics API.", @@ -1001,7 +1001,7 @@ "/_cat/ml/datafeeds": { "get": { "tags": [ - "cat.ml_datafeeds" + "cat" ], "summary": "Get datafeeds", "description": "Returns configuration and usage information about datafeeds.\nThis API returns a maximum of 10,000 datafeeds.\nIf the Elasticsearch security features are enabled, you must have `monitor_ml`, `monitor`, `manage_ml`, or `manage`\ncluster privileges to use this API.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get datafeed statistics API.", @@ -1034,7 +1034,7 @@ "/_cat/ml/datafeeds/{datafeed_id}": { "get": { "tags": [ - "cat.ml_datafeeds" + "cat" ], "summary": "Get datafeeds", "description": "Returns configuration and usage information about datafeeds.\nThis API returns a maximum of 10,000 datafeeds.\nIf the Elasticsearch security features are enabled, you must have `monitor_ml`, `monitor`, `manage_ml`, or `manage`\ncluster privileges to use this API.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get datafeed statistics API.", @@ -1070,7 +1070,7 @@ "/_cat/ml/anomaly_detectors": { "get": { "tags": [ - "cat.ml_jobs" + "cat" ], "summary": "Get anomaly detection jobs", "description": "Returns configuration and usage information for anomaly detection jobs.\nThis API returns a maximum of 10,000 jobs.\nIf the Elasticsearch security features are enabled, you must have `monitor_ml`,\n`monitor`, `manage_ml`, or `manage` cluster privileges to use this API.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get anomaly detection job statistics API.", @@ -1106,7 +1106,7 @@ "/_cat/ml/anomaly_detectors/{job_id}": { "get": { "tags": [ - "cat.ml_jobs" + "cat" ], "summary": "Get anomaly detection jobs", "description": "Returns configuration and usage information for anomaly detection jobs.\nThis API returns a maximum of 10,000 jobs.\nIf the Elasticsearch security features are enabled, you must have `monitor_ml`,\n`monitor`, `manage_ml`, or `manage` cluster privileges to use this API.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get anomaly detection job statistics API.", @@ -1145,7 +1145,7 @@ "/_cat/ml/trained_models": { "get": { "tags": [ - "cat.ml_trained_models" + "cat" ], "summary": "Get trained models", "description": "Returns configuration and usage information about inference trained models.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get trained models statistics API.", @@ -1184,7 +1184,7 @@ "/_cat/ml/trained_models/{model_id}": { "get": { "tags": [ - "cat.ml_trained_models" + "cat" ], "summary": "Get trained models", "description": "Returns configuration and usage information about inference trained models.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get trained models statistics API.", @@ -1226,7 +1226,7 @@ "/_cat/transforms": { "get": { "tags": [ - "cat.transforms" + "cat" ], "summary": "Get transforms", "description": "Returns configuration and usage information about transforms.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get transform statistics API.", @@ -1265,7 +1265,7 @@ "/_cat/transforms/{transform_id}": { "get": { "tags": [ - "cat.transforms" + "cat" ], "summary": "Get transforms", "description": "Returns configuration and usage information about transforms.\n\nCAT APIs are only intended for human consumption using the Kibana\nconsole or command line. They are not intended for use by applications. For\napplication consumption, use the get transform statistics API.", @@ -1528,7 +1528,7 @@ "/_component_template/{name}": { "get": { "tags": [ - "cluster.get_component_template" + "cluster" ], "summary": "Get component templates", "description": "Retrieves information about component templates.", @@ -1562,7 +1562,7 @@ }, "put": { "tags": [ - "cluster.put_component_template" + "cluster" ], "summary": "Create or update a component template", "description": "Creates or updates a component template.\nComponent templates are building blocks for constructing index templates that specify index mappings, settings, and aliases.\n\nAn index template can be composed of multiple component templates.\nTo use a component template, specify it in an index template’s `composed_of` list.\nComponent templates are only applied to new data streams and indices as part of a matching index template.\n\nSettings and mappings specified directly in the index template or the create index request override any settings or mappings specified in a component template.\n\nComponent templates are only used during index creation.\nFor data streams, this includes data stream creation and the creation of a stream’s backing indices.\nChanges to component templates do not affect existing indices, including a stream’s backing indices.\n\nYou can use C-style `/* *\\/` block comments in component templates.\nYou can include comments anywhere in the request body except before the opening curly bracket.", @@ -1593,7 +1593,7 @@ }, "post": { "tags": [ - "cluster.put_component_template" + "cluster" ], "summary": "Create or update a component template", "description": "Creates or updates a component template.\nComponent templates are building blocks for constructing index templates that specify index mappings, settings, and aliases.\n\nAn index template can be composed of multiple component templates.\nTo use a component template, specify it in an index template’s `composed_of` list.\nComponent templates are only applied to new data streams and indices as part of a matching index template.\n\nSettings and mappings specified directly in the index template or the create index request override any settings or mappings specified in a component template.\n\nComponent templates are only used during index creation.\nFor data streams, this includes data stream creation and the creation of a stream’s backing indices.\nChanges to component templates do not affect existing indices, including a stream’s backing indices.\n\nYou can use C-style `/* *\\/` block comments in component templates.\nYou can include comments anywhere in the request body except before the opening curly bracket.", @@ -1624,7 +1624,7 @@ }, "delete": { "tags": [ - "cluster.delete_component_template" + "cluster" ], "summary": "Delete component templates", "description": "Deletes component templates.\nComponent templates are building blocks for constructing index templates that specify index mappings, settings, and aliases.", @@ -1681,7 +1681,7 @@ }, "head": { "tags": [ - "cluster.exists_component_template" + "cluster" ], "summary": "Check component templates", "description": "Returns information about whether a particular component template exists.", @@ -1736,7 +1736,7 @@ "/_component_template": { "get": { "tags": [ - "cluster.get_component_template" + "cluster" ], "summary": "Get component templates", "description": "Retrieves information about component templates.", @@ -1769,7 +1769,7 @@ "/_info/{target}": { "get": { "tags": [ - "cluster.info" + "cluster" ], "summary": "Get cluster info", "description": "Returns basic information about the cluster.", @@ -1831,7 +1831,7 @@ "/_connector/{connector_id}/_check_in": { "put": { "tags": [ - "connector.check_in" + "connector" ], "summary": "Updates the last_seen field in the connector, and sets it to current timestamp", "externalDocs": { @@ -1878,7 +1878,7 @@ "/_connector/{connector_id}": { "get": { "tags": [ - "connector.get" + "connector" ], "summary": "Retrieves a connector", "externalDocs": { @@ -1915,7 +1915,7 @@ }, "put": { "tags": [ - "connector.put" + "connector" ], "summary": "Creates or updates a connector", "externalDocs": { @@ -1940,7 +1940,7 @@ }, "delete": { "tags": [ - "connector.delete" + "connector" ], "summary": "Deletes a connector", "externalDocs": { @@ -1989,7 +1989,7 @@ "/_connector": { "get": { "tags": [ - "connector.list" + "connector" ], "summary": "Returns existing connectors", "externalDocs": { @@ -2090,7 +2090,7 @@ }, "put": { "tags": [ - "connector.put" + "connector" ], "summary": "Creates or updates a connector", "externalDocs": { @@ -2110,7 +2110,7 @@ }, "post": { "tags": [ - "connector.post" + "connector" ], "summary": "Creates a connector", "externalDocs": { @@ -2177,7 +2177,7 @@ "/_connector/_sync_job/{connector_sync_job_id}/_cancel": { "put": { "tags": [ - "connector.sync_job_cancel" + "connector" ], "summary": "Cancels a connector sync job", "externalDocs": { @@ -2224,7 +2224,7 @@ "/_connector/_sync_job/{connector_sync_job_id}": { "get": { "tags": [ - "connector.sync_job_get" + "connector" ], "summary": "Retrieves a connector sync job", "externalDocs": { @@ -2261,7 +2261,7 @@ }, "delete": { "tags": [ - "connector.sync_job_delete" + "connector" ], "summary": "Deletes a connector sync job", "externalDocs": { @@ -2300,7 +2300,7 @@ "/_connector/_sync_job": { "get": { "tags": [ - "connector.sync_job_list" + "connector" ], "summary": "Lists connector sync jobs", "externalDocs": { @@ -2401,7 +2401,7 @@ }, "post": { "tags": [ - "connector.sync_job_post" + "connector" ], "summary": "Creates a connector sync job", "externalDocs": { @@ -2459,7 +2459,7 @@ "/_connector/{connector_id}/_filtering/_activate": { "put": { "tags": [ - "connector.update_active_filtering" + "connector" ], "summary": "Activates the valid draft filtering for a connector", "externalDocs": { @@ -2506,7 +2506,7 @@ "/_connector/{connector_id}/_api_key_id": { "put": { "tags": [ - "connector.update_api_key_id" + "connector" ], "summary": "Updates the API key id in the connector document", "externalDocs": { @@ -2571,7 +2571,7 @@ "/_connector/{connector_id}/_configuration": { "put": { "tags": [ - "connector.update_configuration" + "connector" ], "summary": "Updates the configuration field in the connector document", "externalDocs": { @@ -2639,7 +2639,7 @@ "/_connector/{connector_id}/_error": { "put": { "tags": [ - "connector.update_error" + "connector" ], "summary": "Updates the filtering field in the connector document", "externalDocs": { @@ -2711,7 +2711,7 @@ "/_connector/{connector_id}/_filtering": { "put": { "tags": [ - "connector.update_filtering" + "connector" ], "summary": "Updates the filtering field in the connector document", "externalDocs": { @@ -2785,7 +2785,7 @@ "/_connector/{connector_id}/_filtering/_validation": { "put": { "tags": [ - "connector.update_filtering_validation" + "connector" ], "summary": "Updates the draft filtering validation info for a connector", "externalDocs": { @@ -2850,7 +2850,7 @@ "/_connector/{connector_id}/_index_name": { "put": { "tags": [ - "connector.update_index_name" + "connector" ], "summary": "Updates the index_name in the connector document", "externalDocs": { @@ -2922,7 +2922,7 @@ "/_connector/{connector_id}/_name": { "put": { "tags": [ - "connector.update_name" + "connector" ], "summary": "Updates the name and description fields in the connector document", "externalDocs": { @@ -2987,7 +2987,7 @@ "/_connector/{connector_id}/_native": { "put": { "tags": [ - "connector.update_native" + "connector" ], "summary": "Updates the is_native flag in the connector document", "externalDocs": { @@ -3052,7 +3052,7 @@ "/_connector/{connector_id}/_pipeline": { "put": { "tags": [ - "connector.update_pipeline" + "connector" ], "summary": "Updates the pipeline field in the connector document", "externalDocs": { @@ -3117,7 +3117,7 @@ "/_connector/{connector_id}/_scheduling": { "put": { "tags": [ - "connector.update_scheduling" + "connector" ], "summary": "Updates the scheduling field in the connector document", "externalDocs": { @@ -3182,7 +3182,7 @@ "/_connector/{connector_id}/_service_type": { "put": { "tags": [ - "connector.update_service_type" + "connector" ], "summary": "Updates the service type of the connector", "externalDocs": { @@ -3247,7 +3247,7 @@ "/_connector/{connector_id}/_status": { "put": { "tags": [ - "connector.update_status" + "connector" ], "summary": "Updates the status of the connector", "externalDocs": { @@ -4798,7 +4798,7 @@ "/_enrich/policy/{name}": { "get": { "tags": [ - "enrich.get_policy" + "enrich" ], "summary": "Get an enrich policy", "description": "Returns information about an enrich policy.", @@ -4820,7 +4820,7 @@ }, "put": { "tags": [ - "enrich.put_policy" + "enrich" ], "summary": "Create an enrich policy", "description": "Creates an enrich policy.", @@ -4878,7 +4878,7 @@ }, "delete": { "tags": [ - "enrich.delete_policy" + "enrich" ], "summary": "Delete an enrich policy", "description": "Deletes an existing enrich policy and its enrich index.", @@ -4917,7 +4917,7 @@ "/_enrich/policy/{name}/_execute": { "put": { "tags": [ - "enrich.execute_policy" + "enrich" ], "summary": "Creates the enrich index for an existing enrich policy", "externalDocs": { @@ -4973,7 +4973,7 @@ "/_enrich/policy": { "get": { "tags": [ - "enrich.get_policy" + "enrich" ], "summary": "Get an enrich policy", "description": "Returns information about an enrich policy.", @@ -4992,7 +4992,7 @@ "/_enrich/_stats": { "get": { "tags": [ - "enrich.stats" + "enrich" ], "summary": "Get enrich stats", "description": "Returns enrich coordinator statistics and information about enrich policies that are currently executing.", @@ -5046,7 +5046,7 @@ "/_eql/search/{id}": { "get": { "tags": [ - "eql.get" + "eql" ], "summary": "Returns the current status and available results for an async EQL search or a stored synchronous EQL search", "externalDocs": { @@ -5102,7 +5102,7 @@ }, "delete": { "tags": [ - "eql.delete" + "eql" ], "summary": "Deletes an async EQL search or a stored synchronous EQL search", "description": "The API also deletes results for the search.", @@ -5141,7 +5141,7 @@ "/_eql/search/status/{id}": { "get": { "tags": [ - "eql.get_status" + "eql" ], "summary": "Returns the current status for an async EQL search or a stored synchronous EQL search without returning results", "externalDocs": { @@ -5207,7 +5207,7 @@ "/{index}/_eql/search": { "get": { "tags": [ - "eql.search" + "eql" ], "summary": "Returns results matching a query expressed in Event Query Language (EQL)", "externalDocs": { @@ -5249,7 +5249,7 @@ }, "post": { "tags": [ - "eql.search" + "eql" ], "summary": "Returns results matching a query expressed in Event Query Language (EQL)", "externalDocs": { @@ -5293,7 +5293,7 @@ "/_query": { "post": { "tags": [ - "esql.query" + "esql" ], "summary": "Executes an ES|QL request", "externalDocs": { @@ -6007,7 +6007,7 @@ "/{index}/_graph/explore": { "get": { "tags": [ - "graph.explore" + "graph" ], "summary": "Extracts and summarizes information about the documents and terms in an Elasticsearch data stream or index", "externalDocs": { @@ -6036,7 +6036,7 @@ }, "post": { "tags": [ - "graph.explore" + "graph" ], "summary": "Extracts and summarizes information about the documents and terms in an Elasticsearch data stream or index", "externalDocs": { @@ -6126,7 +6126,7 @@ "/{index}/_block/{block}": { "put": { "tags": [ - "indices.add_block" + "indices" ], "summary": "Add an index block", "description": "Limits the operations allowed on an index by blocking specific operation types.", @@ -6245,7 +6245,7 @@ "/_analyze": { "get": { "tags": [ - "indices.analyze" + "indices" ], "summary": "Performs analysis on a text string and returns the resulting tokens", "externalDocs": { @@ -6263,7 +6263,7 @@ }, "post": { "tags": [ - "indices.analyze" + "indices" ], "summary": "Performs analysis on a text string and returns the resulting tokens", "externalDocs": { @@ -6283,7 +6283,7 @@ "/{index}/_analyze": { "get": { "tags": [ - "indices.analyze" + "indices" ], "summary": "Performs analysis on a text string and returns the resulting tokens", "externalDocs": { @@ -6306,7 +6306,7 @@ }, "post": { "tags": [ - "indices.analyze" + "indices" ], "summary": "Performs analysis on a text string and returns the resulting tokens", "externalDocs": { @@ -6331,7 +6331,7 @@ "/{index}": { "get": { "tags": [ - "indices.get" + "indices" ], "summary": "Get index information", "description": "Returns information about one or more indices. For data streams, the API returns information about the\nstream’s backing indices.", @@ -6450,7 +6450,7 @@ }, "put": { "tags": [ - "indices.create" + "indices" ], "summary": "Create an index", "description": "Creates a new index.", @@ -6556,7 +6556,7 @@ }, "delete": { "tags": [ - "indices.delete" + "indices" ], "summary": "Delete indices", "description": "Deletes one or more indices.", @@ -6642,7 +6642,7 @@ }, "head": { "tags": [ - "indices.exists" + "indices" ], "summary": "Check indices", "description": "Checks if one or more indices, index aliases, or data streams exist.", @@ -6736,7 +6736,7 @@ "/_data_stream/{name}": { "get": { "tags": [ - "indices.get_data_stream" + "indices" ], "summary": "Get data streams", "description": "Retrieves information about one or more data streams.", @@ -6770,7 +6770,7 @@ }, "put": { "tags": [ - "indices.create_data_stream" + "indices" ], "summary": "Create a data stream", "description": "Creates a data stream.\nYou must have a matching index template with data stream enabled.", @@ -6827,7 +6827,7 @@ }, "delete": { "tags": [ - "indices.delete_data_stream" + "indices" ], "summary": "Delete data streams", "description": "Deletes one or more data streams and their backing indices.", @@ -6937,7 +6937,7 @@ "/{index}/_alias/{name}": { "get": { "tags": [ - "indices.get_alias" + "indices" ], "summary": "Get aliases", "description": "Retrieves information for one or more data stream or index aliases.", @@ -6973,7 +6973,7 @@ }, "put": { "tags": [ - "indices.put_alias" + "indices" ], "summary": "Create or update an alias", "description": "Adds a data stream or index to an alias.", @@ -7006,7 +7006,7 @@ }, "post": { "tags": [ - "indices.put_alias" + "indices" ], "summary": "Create or update an alias", "description": "Adds a data stream or index to an alias.", @@ -7039,7 +7039,7 @@ }, "delete": { "tags": [ - "indices.delete_alias" + "indices" ], "summary": "Delete an alias", "description": "Removes a data stream or index from an alias.", @@ -7069,7 +7069,7 @@ }, "head": { "tags": [ - "indices.exists_alias" + "indices" ], "summary": "Check aliases", "description": "Checks if one or more data stream or index aliases exist.", @@ -7107,7 +7107,7 @@ "/{index}/_aliases/{name}": { "put": { "tags": [ - "indices.put_alias" + "indices" ], "summary": "Create or update an alias", "description": "Adds a data stream or index to an alias.", @@ -7140,7 +7140,7 @@ }, "post": { "tags": [ - "indices.put_alias" + "indices" ], "summary": "Create or update an alias", "description": "Adds a data stream or index to an alias.", @@ -7173,7 +7173,7 @@ }, "delete": { "tags": [ - "indices.delete_alias" + "indices" ], "summary": "Delete an alias", "description": "Removes a data stream or index from an alias.", @@ -7205,7 +7205,7 @@ "/_data_stream/{name}/_lifecycle": { "get": { "tags": [ - "indices.get_data_lifecycle" + "indices" ], "summary": "Get data stream lifecycles", "description": "Retrieves the data stream lifecycle configuration of one or more data streams.", @@ -7283,7 +7283,7 @@ }, "put": { "tags": [ - "indices.put_data_lifecycle" + "indices" ], "summary": "Update data stream lifecycles", "description": "Update the data stream lifecycle of the specified data streams.", @@ -7367,7 +7367,7 @@ }, "delete": { "tags": [ - "indices.delete_data_lifecycle" + "indices" ], "summary": "Delete data stream lifecycles", "description": "Removes the data stream lifecycle from a data stream, rendering it not managed by the data stream lifecycle.", @@ -7436,7 +7436,7 @@ "/_index_template/{name}": { "get": { "tags": [ - "indices.get_index_template" + "indices" ], "summary": "Get index templates", "description": "Returns information about one or more index templates.", @@ -7470,7 +7470,7 @@ }, "put": { "tags": [ - "indices.put_index_template" + "indices" ], "summary": "Create or update an index template", "description": "Index templates define settings, mappings, and aliases that can be applied automatically to new indices.", @@ -7504,7 +7504,7 @@ }, "post": { "tags": [ - "indices.put_index_template" + "indices" ], "summary": "Create or update an index template", "description": "Index templates define settings, mappings, and aliases that can be applied automatically to new indices.", @@ -7538,7 +7538,7 @@ }, "delete": { "tags": [ - "indices.delete_index_template" + "indices" ], "summary": "Delete an index template", "description": "The provided <index-template> may contain multiple template names separated by a comma. If multiple template\nnames are specified then there is no wildcard support and the provided names should match completely with\nexisting templates.", @@ -7595,7 +7595,7 @@ }, "head": { "tags": [ - "indices.exists_index_template" + "indices" ], "summary": "Returns information about whether a particular index template exists", "externalDocs": { @@ -7638,7 +7638,7 @@ "/_alias/{name}": { "get": { "tags": [ - "indices.get_alias" + "indices" ], "summary": "Get aliases", "description": "Retrieves information for one or more data stream or index aliases.", @@ -7671,7 +7671,7 @@ }, "head": { "tags": [ - "indices.exists_alias" + "indices" ], "summary": "Check aliases", "description": "Checks if one or more data stream or index aliases exist.", @@ -7706,7 +7706,7 @@ "/{index}/_lifecycle/explain": { "get": { "tags": [ - "indices.explain_data_lifecycle" + "indices" ], "summary": "Get the status for a data stream lifecycle", "description": "Retrieves information about an index or data stream’s current data stream lifecycle status, such as time since index creation, time since rollover, the lifecycle configuration managing the index, or any errors encountered during lifecycle execution.", @@ -7776,7 +7776,7 @@ "/_alias": { "get": { "tags": [ - "indices.get_alias" + "indices" ], "summary": "Get aliases", "description": "Retrieves information for one or more data stream or index aliases.", @@ -7808,7 +7808,7 @@ "/{index}/_alias": { "get": { "tags": [ - "indices.get_alias" + "indices" ], "summary": "Get aliases", "description": "Retrieves information for one or more data stream or index aliases.", @@ -7843,7 +7843,7 @@ "/_data_stream": { "get": { "tags": [ - "indices.get_data_stream" + "indices" ], "summary": "Get data streams", "description": "Retrieves information about one or more data streams.", @@ -7876,7 +7876,7 @@ "/_index_template": { "get": { "tags": [ - "indices.get_index_template" + "indices" ], "summary": "Get index templates", "description": "Returns information about one or more index templates.", @@ -7909,7 +7909,7 @@ "/_mapping": { "get": { "tags": [ - "indices.get_mapping" + "indices" ], "summary": "Get mapping definitions", "description": "Retrieves mapping definitions for one or more indices.\nFor data streams, the API retrieves mappings for the stream’s backing indices.", @@ -7944,7 +7944,7 @@ "/{index}/_mapping": { "get": { "tags": [ - "indices.get_mapping" + "indices" ], "summary": "Get mapping definitions", "description": "Retrieves mapping definitions for one or more indices.\nFor data streams, the API retrieves mappings for the stream’s backing indices.", @@ -7980,7 +7980,7 @@ }, "put": { "tags": [ - "indices.put_mapping" + "indices" ], "summary": "Update field mappings", "description": "Adds new fields to an existing data stream or index.\nYou can also use this API to change the search settings of existing fields.\nFor data streams, these changes are applied to all backing indices by default.", @@ -8022,7 +8022,7 @@ }, "post": { "tags": [ - "indices.put_mapping" + "indices" ], "summary": "Update field mappings", "description": "Adds new fields to an existing data stream or index.\nYou can also use this API to change the search settings of existing fields.\nFor data streams, these changes are applied to all backing indices by default.", @@ -8066,7 +8066,7 @@ "/_settings": { "get": { "tags": [ - "indices.get_settings" + "indices" ], "summary": "Get index settings", "description": "Returns setting information for one or more indices. For data streams,\nreturns setting information for the stream’s backing indices.", @@ -8105,7 +8105,7 @@ }, "put": { "tags": [ - "indices.put_settings" + "indices" ], "summary": "Update index settings", "description": "Changes dynamic index settings in real time. For data streams, index setting\nchanges are applied to all backing indices by default.", @@ -8149,7 +8149,7 @@ "/{index}/_settings": { "get": { "tags": [ - "indices.get_settings" + "indices" ], "summary": "Get index settings", "description": "Returns setting information for one or more indices. For data streams,\nreturns setting information for the stream’s backing indices.", @@ -8191,7 +8191,7 @@ }, "put": { "tags": [ - "indices.put_settings" + "indices" ], "summary": "Update index settings", "description": "Changes dynamic index settings in real time. For data streams, index setting\nchanges are applied to all backing indices by default.", @@ -8238,7 +8238,7 @@ "/{index}/_settings/{name}": { "get": { "tags": [ - "indices.get_settings" + "indices" ], "summary": "Get index settings", "description": "Returns setting information for one or more indices. For data streams,\nreturns setting information for the stream’s backing indices.", @@ -8285,7 +8285,7 @@ "/_settings/{name}": { "get": { "tags": [ - "indices.get_settings" + "indices" ], "summary": "Get index settings", "description": "Returns setting information for one or more indices. For data streams,\nreturns setting information for the stream’s backing indices.", @@ -8329,7 +8329,7 @@ "/_data_stream/_migrate/{name}": { "post": { "tags": [ - "indices.migrate_to_data_stream" + "indices" ], "summary": "Convert an index alias to a data stream", "description": "Converts an index alias to a data stream.\nYou must have a matching index template that is data stream enabled.\nThe alias must meet the following criteria:\nThe alias must have a write index;\nAll indices for the alias must have a `@timestamp` field mapping of a `date` or `date_nanos` field type;\nThe alias must not have any filters;\nThe alias must not use custom routing.\nIf successful, the request removes the alias and creates a data stream with the same name.\nThe indices for the alias become hidden backing indices for the stream.\nThe write index for the alias becomes the write index for the stream.", @@ -8388,7 +8388,7 @@ "/_data_stream/_modify": { "post": { "tags": [ - "indices.modify_data_stream" + "indices" ], "summary": "Update data streams", "description": "Performs one or more data stream modification actions in a single atomic operation.", @@ -8436,7 +8436,7 @@ "/_template/{name}": { "put": { "tags": [ - "indices.put_template" + "indices" ], "summary": "Create or update an index template", "description": "Index templates define settings, mappings, and aliases that can be applied automatically to new indices.", @@ -8472,7 +8472,7 @@ }, "post": { "tags": [ - "indices.put_template" + "indices" ], "summary": "Create or update an index template", "description": "Index templates define settings, mappings, and aliases that can be applied automatically to new indices.", @@ -8510,7 +8510,7 @@ "/_refresh": { "get": { "tags": [ - "indices.refresh" + "indices" ], "summary": "Refresh an index", "description": "A refresh makes recent operations performed on one or more indices available for search.\nFor data streams, the API runs the refresh operation on the stream’s backing indices.", @@ -8537,7 +8537,7 @@ }, "post": { "tags": [ - "indices.refresh" + "indices" ], "summary": "Refresh an index", "description": "A refresh makes recent operations performed on one or more indices available for search.\nFor data streams, the API runs the refresh operation on the stream’s backing indices.", @@ -8566,7 +8566,7 @@ "/{index}/_refresh": { "get": { "tags": [ - "indices.refresh" + "indices" ], "summary": "Refresh an index", "description": "A refresh makes recent operations performed on one or more indices available for search.\nFor data streams, the API runs the refresh operation on the stream’s backing indices.", @@ -8596,7 +8596,7 @@ }, "post": { "tags": [ - "indices.refresh" + "indices" ], "summary": "Refresh an index", "description": "A refresh makes recent operations performed on one or more indices available for search.\nFor data streams, the API runs the refresh operation on the stream’s backing indices.", @@ -8628,7 +8628,7 @@ "/_resolve/index/{name}": { "get": { "tags": [ - "indices.resolve_index" + "indices" ], "summary": "Resolves the specified name(s) and/or index patterns for indices, aliases, and data streams", "description": "Multiple patterns and remote clusters are supported.", @@ -8722,7 +8722,7 @@ "/{alias}/_rollover": { "post": { "tags": [ - "indices.rollover" + "indices" ], "summary": "Roll over to a new index", "description": "Creates a new index for a data stream or index alias.", @@ -8761,7 +8761,7 @@ "/{alias}/_rollover/{new_index}": { "post": { "tags": [ - "indices.rollover" + "indices" ], "summary": "Roll over to a new index", "description": "Creates a new index for a data stream or index alias.", @@ -8803,7 +8803,7 @@ "/_index_template/_simulate_index/{name}": { "post": { "tags": [ - "indices.simulate_index_template" + "indices" ], "summary": "Simulate an index", "description": "Returns the index configuration that would be applied to the specified index from an existing index template.", @@ -8876,7 +8876,7 @@ "/_index_template/_simulate": { "post": { "tags": [ - "indices.simulate_template" + "indices" ], "summary": "Simulate an index template", "description": "Returns the index configuration that would be applied by a particular index template.", @@ -8908,7 +8908,7 @@ "/_index_template/_simulate/{name}": { "post": { "tags": [ - "indices.simulate_template" + "indices" ], "summary": "Simulate an index template", "description": "Returns the index configuration that would be applied by a particular index template.", @@ -8943,7 +8943,7 @@ "/_aliases": { "post": { "tags": [ - "indices.update_aliases" + "indices" ], "summary": "Create or update an alias", "description": "Adds a data stream or index to an alias.", @@ -9010,7 +9010,7 @@ "/_validate/query": { "get": { "tags": [ - "indices.validate_query" + "indices" ], "summary": "Validate a query", "description": "Validates a query without running it.", @@ -9068,7 +9068,7 @@ }, "post": { "tags": [ - "indices.validate_query" + "indices" ], "summary": "Validate a query", "description": "Validates a query without running it.", @@ -9128,7 +9128,7 @@ "/{index}/_validate/query": { "get": { "tags": [ - "indices.validate_query" + "indices" ], "summary": "Validate a query", "description": "Validates a query without running it.", @@ -9189,7 +9189,7 @@ }, "post": { "tags": [ - "indices.validate_query" + "indices" ], "summary": "Validate a query", "description": "Validates a query without running it.", @@ -9252,7 +9252,7 @@ "/_inference/{inference_id}": { "get": { "tags": [ - "inference.get" + "inference" ], "summary": "Get an inference endpoint", "externalDocs": { @@ -9274,7 +9274,7 @@ }, "put": { "tags": [ - "inference.put" + "inference" ], "summary": "Create an inference endpoint", "externalDocs": { @@ -9299,7 +9299,7 @@ }, "post": { "tags": [ - "inference.inference" + "inference" ], "summary": "Perform inference on the service", "externalDocs": { @@ -9327,7 +9327,7 @@ }, "delete": { "tags": [ - "inference.delete" + "inference" ], "summary": "Delete an inference endpoint", "externalDocs": { @@ -9357,7 +9357,7 @@ "/_inference/{task_type}/{inference_id}": { "get": { "tags": [ - "inference.get" + "inference" ], "summary": "Get an inference endpoint", "externalDocs": { @@ -9382,7 +9382,7 @@ }, "put": { "tags": [ - "inference.put" + "inference" ], "summary": "Create an inference endpoint", "externalDocs": { @@ -9410,7 +9410,7 @@ }, "post": { "tags": [ - "inference.inference" + "inference" ], "summary": "Perform inference on the service", "externalDocs": { @@ -9441,7 +9441,7 @@ }, "delete": { "tags": [ - "inference.delete" + "inference" ], "summary": "Delete an inference endpoint", "externalDocs": { @@ -9474,7 +9474,7 @@ "/_inference": { "get": { "tags": [ - "inference.get" + "inference" ], "summary": "Get an inference endpoint", "externalDocs": { @@ -9561,7 +9561,7 @@ "/_ingest/pipeline/{id}": { "get": { "tags": [ - "ingest.get_pipeline" + "ingest" ], "summary": "Returns information about one or more ingest pipelines", "description": "This API returns a local reference of the pipeline.", @@ -9589,7 +9589,7 @@ }, "put": { "tags": [ - "ingest.put_pipeline" + "ingest" ], "summary": "Creates or updates an ingest pipeline", "description": "Changes made using this API take effect immediately.", @@ -9696,7 +9696,7 @@ }, "delete": { "tags": [ - "ingest.delete_pipeline" + "ingest" ], "summary": "Deletes one or more existing ingest pipeline", "externalDocs": { @@ -9754,7 +9754,7 @@ "/_ingest/pipeline": { "get": { "tags": [ - "ingest.get_pipeline" + "ingest" ], "summary": "Returns information about one or more ingest pipelines", "description": "This API returns a local reference of the pipeline.", @@ -9781,7 +9781,7 @@ "/_ingest/processor/grok": { "get": { "tags": [ - "ingest.processor_grok" + "ingest" ], "summary": "Extracts structured fields out of a single text field within a document", "description": "You choose which field to extract matched fields from, as well as the grok pattern you expect will match.\nA grok pattern is like a regular expression that supports aliased expressions that can be reused.", @@ -9818,7 +9818,7 @@ "/_ingest/pipeline/_simulate": { "get": { "tags": [ - "ingest.simulate" + "ingest" ], "summary": "Executes an ingest pipeline against a set of provided documents", "externalDocs": { @@ -9842,7 +9842,7 @@ }, "post": { "tags": [ - "ingest.simulate" + "ingest" ], "summary": "Executes an ingest pipeline against a set of provided documents", "externalDocs": { @@ -9868,7 +9868,7 @@ "/_ingest/pipeline/{id}/_simulate": { "get": { "tags": [ - "ingest.simulate" + "ingest" ], "summary": "Executes an ingest pipeline against a set of provided documents", "externalDocs": { @@ -9895,7 +9895,7 @@ }, "post": { "tags": [ - "ingest.simulate" + "ingest" ], "summary": "Executes an ingest pipeline against a set of provided documents", "externalDocs": { @@ -9924,7 +9924,7 @@ "/_license": { "get": { "tags": [ - "license.get" + "license" ], "summary": "Get license information", "description": "Returns information about your Elastic license, including its type, its status, when it was issued, and when it expires.\nFor more information about the different types of licenses, refer to [Elastic Stack subscriptions](https://www.elastic.co/subscriptions).", @@ -9979,7 +9979,7 @@ "/_logstash/pipeline/{id}": { "get": { "tags": [ - "logstash.get_pipeline" + "logstash" ], "summary": "Retrieves pipelines used for Logstash Central Management", "externalDocs": { @@ -10000,7 +10000,7 @@ }, "put": { "tags": [ - "logstash.put_pipeline" + "logstash" ], "summary": "Creates or updates a pipeline used for Logstash Central Management", "externalDocs": { @@ -10042,7 +10042,7 @@ }, "delete": { "tags": [ - "logstash.delete_pipeline" + "logstash" ], "summary": "Deletes a pipeline used for Logstash Central Management", "externalDocs": { @@ -10076,7 +10076,7 @@ "/_logstash/pipeline": { "get": { "tags": [ - "logstash.get_pipeline" + "logstash" ], "summary": "Retrieves pipelines used for Logstash Central Management", "externalDocs": { @@ -10284,7 +10284,7 @@ "/_ml/anomaly_detectors/{job_id}/_close": { "post": { "tags": [ - "ml.close_job" + "ml" ], "summary": "Close anomaly detection jobs", "description": "A job can be opened and closed multiple times throughout its lifecycle. A closed job cannot receive data or perform analysis operations, but you can still explore and navigate results.\nWhen you close a job, it runs housekeeping tasks such as pruning the model history, flushing buffers, calculating final results and persisting the model snapshots. Depending upon the size of the job, it could take several minutes to close and the equivalent time to re-open. After it is closed, the job has a minimal overhead on the cluster except for maintaining its meta data. Therefore it is a best practice to close jobs that are no longer required to process data.\nIf you close an anomaly detection job whose datafeed is running, the request first tries to stop the datafeed. This behavior is equivalent to calling stop datafeed API with the same timeout and force parameters as the close job request.\nWhen a datafeed that has a specified end date stops, it automatically closes its associated job.", @@ -10383,7 +10383,7 @@ "/_ml/calendars/{calendar_id}": { "get": { "tags": [ - "ml.get_calendars" + "ml" ], "summary": "Get calendar configuration info", "externalDocs": { @@ -10413,7 +10413,7 @@ }, "put": { "tags": [ - "ml.put_calendar" + "ml" ], "summary": "Create a calendar", "externalDocs": { @@ -10487,7 +10487,7 @@ }, "post": { "tags": [ - "ml.get_calendars" + "ml" ], "summary": "Get calendar configuration info", "externalDocs": { @@ -10517,7 +10517,7 @@ }, "delete": { "tags": [ - "ml.delete_calendar" + "ml" ], "summary": "Delete a calendar", "description": "Removes all scheduled events from a calendar, then deletes it.", @@ -10556,7 +10556,7 @@ "/_ml/calendars/{calendar_id}/events/{event_id}": { "delete": { "tags": [ - "ml.delete_calendar_event" + "ml" ], "summary": "Delete events from a calendar", "externalDocs": { @@ -10605,7 +10605,7 @@ "/_ml/calendars/{calendar_id}/jobs/{job_id}": { "put": { "tags": [ - "ml.put_calendar_job" + "ml" ], "summary": "Add anomaly detection job to calendar", "externalDocs": { @@ -10668,7 +10668,7 @@ }, "delete": { "tags": [ - "ml.delete_calendar_job" + "ml" ], "summary": "Delete anomaly jobs from a calendar", "externalDocs": { @@ -10733,7 +10733,7 @@ "/_ml/data_frame/analytics/{id}": { "get": { "tags": [ - "ml.get_data_frame_analytics" + "ml" ], "summary": "Get data frame analytics job configuration info", "description": "You can get information for multiple data frame analytics jobs in a single\nAPI request by using a comma-separated list of data frame analytics jobs or a\nwildcard expression.", @@ -10767,7 +10767,7 @@ }, "put": { "tags": [ - "ml.put_data_frame_analytics" + "ml" ], "summary": "Create a data frame analytics job", "description": "This API creates a data frame analytics job that performs an analysis on the\nsource indices and stores the outcome in a destination index.", @@ -10907,7 +10907,7 @@ }, "delete": { "tags": [ - "ml.delete_data_frame_analytics" + "ml" ], "summary": "Delete a data frame analytics job", "externalDocs": { @@ -10965,7 +10965,7 @@ "/_ml/datafeeds/{datafeed_id}": { "get": { "tags": [ - "ml.get_datafeeds" + "ml" ], "summary": "Get datafeeds configuration info", "description": "You can get information for multiple datafeeds in a single API request by\nusing a comma-separated list of datafeeds or a wildcard expression. You can\nget information for all datafeeds by using `_all`, by specifying `*` as the\n`<feed_id>`, or by omitting the `<feed_id>`.\nThis API returns a maximum of 10,000 datafeeds.", @@ -10993,7 +10993,7 @@ }, "put": { "tags": [ - "ml.put_datafeed" + "ml" ], "summary": "Create a datafeed", "description": "Datafeeds retrieve data from Elasticsearch for analysis by an anomaly detection job.\nYou can associate only one datafeed with each anomaly detection job.\nThe datafeed contains a query that runs at a defined interval (`frequency`).\nIf you are concerned about delayed data, you can add a delay (`query_delay') at each interval.\nWhen Elasticsearch security features are enabled, your datafeed remembers which roles the user who created it had\nat the time of creation and runs the query using those same roles. If you provide secondary authorization headers,\nthose credentials are used instead.\nYou must use Kibana, this API, or the create anomaly detection jobs API to create a datafeed. Do not add a datafeed\ndirectly to the `.ml-config` index. Do not give users `write` privileges on the `.ml-config` index.", @@ -11199,7 +11199,7 @@ }, "delete": { "tags": [ - "ml.delete_datafeed" + "ml" ], "summary": "Delete a datafeed", "externalDocs": { @@ -11247,7 +11247,7 @@ "/_ml/filters/{filter_id}": { "get": { "tags": [ - "ml.get_filters" + "ml" ], "summary": "Get filters", "description": "You can get a single filter or all filters.", @@ -11275,7 +11275,7 @@ }, "put": { "tags": [ - "ml.put_filter" + "ml" ], "summary": "Create a filter", "description": "A filter contains a list of strings. It can be used by one or more anomaly detection jobs.\nSpecifically, filters are referenced in the `custom_rules` property of detector configuration objects.", @@ -11354,7 +11354,7 @@ }, "delete": { "tags": [ - "ml.delete_filter" + "ml" ], "summary": "Delete a filter", "description": "If an anomaly detection job references the filter, you cannot delete the\nfilter. You must update or delete the job before you can delete the filter.", @@ -11393,7 +11393,7 @@ "/_ml/anomaly_detectors/{job_id}": { "get": { "tags": [ - "ml.get_jobs" + "ml" ], "summary": "Get anomaly detection jobs configuration info", "description": "You can get information for multiple anomaly detection jobs in a single API\nrequest by using a group name, a comma-separated list of jobs, or a wildcard\nexpression. You can get information for all anomaly detection jobs by using\n`_all`, by specifying `*` as the `<job_id>`, or by omitting the `<job_id>`.", @@ -11421,7 +11421,7 @@ }, "put": { "tags": [ - "ml.put_job" + "ml" ], "summary": "Create an anomaly detection job", "description": "If you include a `datafeed_config`, you must have read index privileges on the source index.", @@ -11607,7 +11607,7 @@ }, "delete": { "tags": [ - "ml.delete_job" + "ml" ], "summary": "Delete an anomaly detection job", "description": "All job configuration, model state and results are deleted.\nIt is not currently possible to delete multiple jobs using wildcards or a\ncomma separated list. If you delete a job that has a datafeed, the request\nfirst tries to delete the datafeed. This behavior is equivalent to calling\nthe delete datafeed API with the same timeout and force parameters as the\ndelete job request.", @@ -11676,7 +11676,7 @@ "/_ml/trained_models/{model_id}": { "get": { "tags": [ - "ml.get_trained_models" + "ml" ], "summary": "Get trained model configuration info", "externalDocs": { @@ -11718,7 +11718,7 @@ }, "put": { "tags": [ - "ml.put_trained_model" + "ml" ], "summary": "Create a trained model", "description": "Enable you to supply a trained model that is not created by data frame analytics.", @@ -11829,7 +11829,7 @@ }, "delete": { "tags": [ - "ml.delete_trained_model" + "ml" ], "summary": "Delete an unreferenced trained model", "description": "The request deletes a trained inference model that is not referenced by an ingest pipeline.", @@ -11878,7 +11878,7 @@ "/_ml/trained_models/{model_id}/model_aliases/{model_alias}": { "put": { "tags": [ - "ml.put_trained_model_alias" + "ml" ], "summary": "Create or update a trained model alias", "description": "A trained model alias is a logical name used to reference a single trained\nmodel.\nYou can use aliases instead of trained model identifiers to make it easier to\nreference your models. For example, you can use aliases in inference\naggregations and processors.\nAn alias must be unique and refer to only a single trained model. However,\nyou can have multiple aliases for each trained model.\nIf you use this API to update an alias such that it references a different\ntrained model ID and the model uses a different type of data frame analytics,\nan error occurs. For example, this situation occurs if you have a trained\nmodel for regression analysis and a trained model for classification\nanalysis; you cannot reassign an alias from one type of trained model to\nanother.\nIf you use this API to update an alias and there are very few input fields in\ncommon between the old and new trained models for the model alias, the API\nreturns a warning.", @@ -11936,7 +11936,7 @@ }, "delete": { "tags": [ - "ml.delete_trained_model_alias" + "ml" ], "summary": "Delete a trained model alias", "description": "This API deletes an existing model alias that refers to a trained model. If\nthe model alias is missing or refers to a model other than the one identified\nby the `model_id`, this API returns an error.", @@ -11986,7 +11986,7 @@ "/_ml/anomaly_detectors/_estimate_model_memory": { "post": { "tags": [ - "ml.estimate_model_memory" + "ml" ], "summary": "Estimate job model memory usage", "description": "Makes an estimation of the memory usage for an anomaly detection job model.\nIt is based on analysis configuration details for the job and cardinality\nestimates for the fields it references.", @@ -12049,7 +12049,7 @@ "/_ml/data_frame/_evaluate": { "post": { "tags": [ - "ml.evaluate_data_frame" + "ml" ], "summary": "Evaluate data frame analytics", "description": "The API packages together commonly used evaluation metrics for various types\nof machine learning features. This has been designed for use on indexes\ncreated by data frame analytics. Evaluation requires both a ground truth\nfield and an analytics result field to be present.", @@ -12111,7 +12111,7 @@ "/_ml/anomaly_detectors/{job_id}/_flush": { "post": { "tags": [ - "ml.flush_job" + "ml" ], "summary": "Force buffered data to be processed", "description": "The flush jobs API is only applicable when sending data for analysis using\nthe post data API. Depending on the content of the buffer, then it might\nadditionally calculate new results. Both flush and close operations are\nsimilar, however the flush is more efficient if you are expecting to send\nmore data for analysis. When flushing, the job remains open and is available\nto continue analyzing data. A close operation additionally prunes and\npersists the model state to disk and the job must be opened again before\nanalyzing further data.", @@ -12239,7 +12239,7 @@ "/_ml/calendars/{calendar_id}/events": { "get": { "tags": [ - "ml.get_calendar_events" + "ml" ], "summary": "Get info about events in calendars", "externalDocs": { @@ -12340,7 +12340,7 @@ }, "post": { "tags": [ - "ml.post_calendar_events" + "ml" ], "summary": "Add scheduled events to the calendar", "externalDocs": { @@ -12411,7 +12411,7 @@ "/_ml/calendars": { "get": { "tags": [ - "ml.get_calendars" + "ml" ], "summary": "Get calendar configuration info", "externalDocs": { @@ -12438,7 +12438,7 @@ }, "post": { "tags": [ - "ml.get_calendars" + "ml" ], "summary": "Get calendar configuration info", "externalDocs": { @@ -12467,7 +12467,7 @@ "/_ml/data_frame/analytics": { "get": { "tags": [ - "ml.get_data_frame_analytics" + "ml" ], "summary": "Get data frame analytics job configuration info", "description": "You can get information for multiple data frame analytics jobs in a single\nAPI request by using a comma-separated list of data frame analytics jobs or a\nwildcard expression.", @@ -12500,7 +12500,7 @@ "/_ml/data_frame/analytics/_stats": { "get": { "tags": [ - "ml.get_data_frame_analytics_stats" + "ml" ], "summary": "Get data frame analytics jobs usage info", "externalDocs": { @@ -12532,7 +12532,7 @@ "/_ml/data_frame/analytics/{id}/_stats": { "get": { "tags": [ - "ml.get_data_frame_analytics_stats" + "ml" ], "summary": "Get data frame analytics jobs usage info", "externalDocs": { @@ -12567,7 +12567,7 @@ "/_ml/datafeeds/{datafeed_id}/_stats": { "get": { "tags": [ - "ml.get_datafeed_stats" + "ml" ], "summary": "Get datafeeds usage info", "description": "You can get statistics for multiple datafeeds in a single API request by\nusing a comma-separated list of datafeeds or a wildcard expression. You can\nget statistics for all datafeeds by using `_all`, by specifying `*` as the\n`<feed_id>`, or by omitting the `<feed_id>`. If the datafeed is stopped, the\nonly information you receive is the `datafeed_id` and the `state`.\nThis API returns a maximum of 10,000 datafeeds.", @@ -12594,7 +12594,7 @@ "/_ml/datafeeds/_stats": { "get": { "tags": [ - "ml.get_datafeed_stats" + "ml" ], "summary": "Get datafeeds usage info", "description": "You can get statistics for multiple datafeeds in a single API request by\nusing a comma-separated list of datafeeds or a wildcard expression. You can\nget statistics for all datafeeds by using `_all`, by specifying `*` as the\n`<feed_id>`, or by omitting the `<feed_id>`. If the datafeed is stopped, the\nonly information you receive is the `datafeed_id` and the `state`.\nThis API returns a maximum of 10,000 datafeeds.", @@ -12618,7 +12618,7 @@ "/_ml/datafeeds": { "get": { "tags": [ - "ml.get_datafeeds" + "ml" ], "summary": "Get datafeeds configuration info", "description": "You can get information for multiple datafeeds in a single API request by\nusing a comma-separated list of datafeeds or a wildcard expression. You can\nget information for all datafeeds by using `_all`, by specifying `*` as the\n`<feed_id>`, or by omitting the `<feed_id>`.\nThis API returns a maximum of 10,000 datafeeds.", @@ -12645,7 +12645,7 @@ "/_ml/filters": { "get": { "tags": [ - "ml.get_filters" + "ml" ], "summary": "Get filters", "description": "You can get a single filter or all filters.", @@ -12672,7 +12672,7 @@ "/_ml/anomaly_detectors/_stats": { "get": { "tags": [ - "ml.get_job_stats" + "ml" ], "summary": "Get anomaly detection jobs usage info", "externalDocs": { @@ -12695,7 +12695,7 @@ "/_ml/anomaly_detectors/{job_id}/_stats": { "get": { "tags": [ - "ml.get_job_stats" + "ml" ], "summary": "Get anomaly detection jobs usage info", "externalDocs": { @@ -12721,7 +12721,7 @@ "/_ml/anomaly_detectors": { "get": { "tags": [ - "ml.get_jobs" + "ml" ], "summary": "Get anomaly detection jobs configuration info", "description": "You can get information for multiple anomaly detection jobs in a single API\nrequest by using a group name, a comma-separated list of jobs, or a wildcard\nexpression. You can get information for all anomaly detection jobs by using\n`_all`, by specifying `*` as the `<job_id>`, or by omitting the `<job_id>`.", @@ -12748,7 +12748,7 @@ "/_ml/anomaly_detectors/{job_id}/results/overall_buckets": { "get": { "tags": [ - "ml.get_overall_buckets" + "ml" ], "summary": "Get overall bucket results", "description": "Retrievs overall bucket results that summarize the bucket results of\nmultiple anomaly detection jobs.\n\nThe `overall_score` is calculated by combining the scores of all the\nbuckets within the overall bucket span. First, the maximum\n`anomaly_score` per anomaly detection job in the overall bucket is\ncalculated. Then the `top_n` of those scores are averaged to result in\nthe `overall_score`. This means that you can fine-tune the\n`overall_score` so that it is more or less sensitive to the number of\njobs that detect an anomaly at the same time. For example, if you set\n`top_n` to `1`, the `overall_score` is the maximum bucket score in the\noverall bucket. Alternatively, if you set `top_n` to the number of jobs,\nthe `overall_score` is high only when all jobs detect anomalies in that\noverall bucket. If you set the `bucket_span` parameter (to a value\ngreater than its default), the `overall_score` is the maximum\n`overall_score` of the overall buckets that have a span equal to the\njobs' largest bucket span.", @@ -12794,7 +12794,7 @@ }, "post": { "tags": [ - "ml.get_overall_buckets" + "ml" ], "summary": "Get overall bucket results", "description": "Retrievs overall bucket results that summarize the bucket results of\nmultiple anomaly detection jobs.\n\nThe `overall_score` is calculated by combining the scores of all the\nbuckets within the overall bucket span. First, the maximum\n`anomaly_score` per anomaly detection job in the overall bucket is\ncalculated. Then the `top_n` of those scores are averaged to result in\nthe `overall_score`. This means that you can fine-tune the\n`overall_score` so that it is more or less sensitive to the number of\njobs that detect an anomaly at the same time. For example, if you set\n`top_n` to `1`, the `overall_score` is the maximum bucket score in the\noverall bucket. Alternatively, if you set `top_n` to the number of jobs,\nthe `overall_score` is high only when all jobs detect anomalies in that\noverall bucket. If you set the `bucket_span` parameter (to a value\ngreater than its default), the `overall_score` is the maximum\n`overall_score` of the overall buckets that have a span equal to the\njobs' largest bucket span.", @@ -12842,7 +12842,7 @@ "/_ml/trained_models": { "get": { "tags": [ - "ml.get_trained_models" + "ml" ], "summary": "Get trained model configuration info", "externalDocs": { @@ -12883,7 +12883,7 @@ "/_ml/trained_models/{model_id}/_stats": { "get": { "tags": [ - "ml.get_trained_models_stats" + "ml" ], "summary": "Get trained models usage info", "description": "You can get usage information for multiple trained\nmodels in a single API request by using a comma-separated list of model IDs or a wildcard expression.", @@ -12916,7 +12916,7 @@ "/_ml/trained_models/_stats": { "get": { "tags": [ - "ml.get_trained_models_stats" + "ml" ], "summary": "Get trained models usage info", "description": "You can get usage information for multiple trained\nmodels in a single API request by using a comma-separated list of model IDs or a wildcard expression.", @@ -12946,7 +12946,7 @@ "/_ml/trained_models/{model_id}/_infer": { "post": { "tags": [ - "ml.infer_trained_model" + "ml" ], "summary": "Evaluate a trained model", "externalDocs": { @@ -12975,7 +12975,7 @@ "/_ml/trained_models/{model_id}/deployment/_infer": { "post": { "tags": [ - "ml.infer_trained_model" + "ml" ], "summary": "Evaluate a trained model", "externalDocs": { @@ -13004,7 +13004,7 @@ "/_ml/anomaly_detectors/{job_id}/_open": { "post": { "tags": [ - "ml.open_job" + "ml" ], "summary": "Open anomaly detection jobs", "description": "An anomaly detection job must be opened to be ready to receive and analyze\ndata. It can be opened and closed multiple times throughout its lifecycle.\nWhen you open a new job, it starts with an empty model.\nWhen you open an existing job, the most recent model state is automatically\nloaded. The job is ready to resume its analysis from where it left off, once\nnew data is received.", @@ -13079,7 +13079,7 @@ "/_ml/data_frame/analytics/_preview": { "get": { "tags": [ - "ml.preview_data_frame_analytics" + "ml" ], "summary": "Preview features used by data frame analytics", "description": "Previews the extracted features used by a data frame analytics config.", @@ -13099,7 +13099,7 @@ }, "post": { "tags": [ - "ml.preview_data_frame_analytics" + "ml" ], "summary": "Preview features used by data frame analytics", "description": "Previews the extracted features used by a data frame analytics config.", @@ -13121,7 +13121,7 @@ "/_ml/data_frame/analytics/{id}/_preview": { "get": { "tags": [ - "ml.preview_data_frame_analytics" + "ml" ], "summary": "Preview features used by data frame analytics", "description": "Previews the extracted features used by a data frame analytics config.", @@ -13146,7 +13146,7 @@ }, "post": { "tags": [ - "ml.preview_data_frame_analytics" + "ml" ], "summary": "Preview features used by data frame analytics", "description": "Previews the extracted features used by a data frame analytics config.", @@ -13173,7 +13173,7 @@ "/_ml/datafeeds/{datafeed_id}/_preview": { "get": { "tags": [ - "ml.preview_datafeed" + "ml" ], "summary": "Preview a datafeed", "description": "This API returns the first \"page\" of search results from a datafeed.\nYou can preview an existing datafeed or provide configuration details for a datafeed\nand anomaly detection job in the API. The preview shows the structure of the data\nthat will be passed to the anomaly detection engine.\nIMPORTANT: When Elasticsearch security features are enabled, the preview uses the credentials of the user that\ncalled the API. However, when the datafeed starts it uses the roles of the last user that created or updated the\ndatafeed. To get a preview that accurately reflects the behavior of the datafeed, use the appropriate credentials.\nYou can also use secondary authorization headers to supply the credentials.", @@ -13204,7 +13204,7 @@ }, "post": { "tags": [ - "ml.preview_datafeed" + "ml" ], "summary": "Preview a datafeed", "description": "This API returns the first \"page\" of search results from a datafeed.\nYou can preview an existing datafeed or provide configuration details for a datafeed\nand anomaly detection job in the API. The preview shows the structure of the data\nthat will be passed to the anomaly detection engine.\nIMPORTANT: When Elasticsearch security features are enabled, the preview uses the credentials of the user that\ncalled the API. However, when the datafeed starts it uses the roles of the last user that created or updated the\ndatafeed. To get a preview that accurately reflects the behavior of the datafeed, use the appropriate credentials.\nYou can also use secondary authorization headers to supply the credentials.", @@ -13237,7 +13237,7 @@ "/_ml/datafeeds/_preview": { "get": { "tags": [ - "ml.preview_datafeed" + "ml" ], "summary": "Preview a datafeed", "description": "This API returns the first \"page\" of search results from a datafeed.\nYou can preview an existing datafeed or provide configuration details for a datafeed\nand anomaly detection job in the API. The preview shows the structure of the data\nthat will be passed to the anomaly detection engine.\nIMPORTANT: When Elasticsearch security features are enabled, the preview uses the credentials of the user that\ncalled the API. However, when the datafeed starts it uses the roles of the last user that created or updated the\ndatafeed. To get a preview that accurately reflects the behavior of the datafeed, use the appropriate credentials.\nYou can also use secondary authorization headers to supply the credentials.", @@ -13265,7 +13265,7 @@ }, "post": { "tags": [ - "ml.preview_datafeed" + "ml" ], "summary": "Preview a datafeed", "description": "This API returns the first \"page\" of search results from a datafeed.\nYou can preview an existing datafeed or provide configuration details for a datafeed\nand anomaly detection job in the API. The preview shows the structure of the data\nthat will be passed to the anomaly detection engine.\nIMPORTANT: When Elasticsearch security features are enabled, the preview uses the credentials of the user that\ncalled the API. However, when the datafeed starts it uses the roles of the last user that created or updated the\ndatafeed. To get a preview that accurately reflects the behavior of the datafeed, use the appropriate credentials.\nYou can also use secondary authorization headers to supply the credentials.", @@ -13295,7 +13295,7 @@ "/_ml/trained_models/{model_id}/definition/{part}": { "put": { "tags": [ - "ml.put_trained_model_definition_part" + "ml" ], "summary": "Create part of a trained model definition", "externalDocs": { @@ -13373,7 +13373,7 @@ "/_ml/trained_models/{model_id}/vocabulary": { "put": { "tags": [ - "ml.put_trained_model_vocabulary" + "ml" ], "summary": "Create a trained model vocabulary", "description": "This API is supported only for natural language processing (NLP) models.\nThe vocabulary is stored in the index as described in `inference_config.*.vocabulary` of the trained model definition.", @@ -13450,7 +13450,7 @@ "/_ml/anomaly_detectors/{job_id}/_reset": { "post": { "tags": [ - "ml.reset_job" + "ml" ], "summary": "Reset an anomaly detection job", "description": "All model state and results are deleted. The job is ready to start over as if\nit had just been created.\nIt is not currently possible to reset multiple jobs using wildcards or a\ncomma separated list.", @@ -13509,7 +13509,7 @@ "/_ml/data_frame/analytics/{id}/_start": { "post": { "tags": [ - "ml.start_data_frame_analytics" + "ml" ], "summary": "Start a data frame analytics job", "description": "A data frame analytics job can be started and stopped multiple times\nthroughout its lifecycle.\nIf the destination index does not exist, it is created automatically the\nfirst time you start the data frame analytics job. The\n`index.number_of_shards` and `index.number_of_replicas` settings for the\ndestination index are copied from the source index. If there are multiple\nsource indices, the destination index copies the highest setting values. The\nmappings for the destination index are also copied from the source indices.\nIf there are any mapping conflicts, the job fails to start.\nIf the destination index exists, it is used as is. You can therefore set up\nthe destination index in advance with custom settings and mappings.", @@ -13570,7 +13570,7 @@ "/_ml/datafeeds/{datafeed_id}/_start": { "post": { "tags": [ - "ml.start_datafeed" + "ml" ], "summary": "Start datafeeds", "description": "A datafeed must be started in order to retrieve data from Elasticsearch. A datafeed can be started and stopped\nmultiple times throughout its lifecycle.\n\nBefore you can start a datafeed, the anomaly detection job must be open. Otherwise, an error occurs.\n\nIf you restart a stopped datafeed, it continues processing input data from the next millisecond after it was stopped.\nIf new data was indexed for that exact millisecond between stopping and starting, it will be ignored.\n\nWhen Elasticsearch security features are enabled, your datafeed remembers which roles the last user to create or\nupdate it had at the time of creation or update and runs the query using those same roles. If you provided secondary\nauthorization headers when you created or updated the datafeed, those credentials are used instead.", @@ -13672,7 +13672,7 @@ "/_ml/trained_models/{model_id}/deployment/_start": { "post": { "tags": [ - "ml.start_trained_model_deployment" + "ml" ], "summary": "Start a trained model deployment", "description": "It allocates the model to every machine learning node.", @@ -13789,7 +13789,7 @@ "/_ml/data_frame/analytics/{id}/_stop": { "post": { "tags": [ - "ml.stop_data_frame_analytics" + "ml" ], "summary": "Stop data frame analytics jobs", "description": "A data frame analytics job can be started and stopped multiple times\nthroughout its lifecycle.", @@ -13866,7 +13866,7 @@ "/_ml/datafeeds/{datafeed_id}/_stop": { "post": { "tags": [ - "ml.stop_datafeed" + "ml" ], "summary": "Stop datafeeds", "description": "A datafeed that is stopped ceases to retrieve data from Elasticsearch. A datafeed can be started and stopped\nmultiple times throughout its lifecycle.", @@ -13965,7 +13965,7 @@ "/_ml/trained_models/{model_id}/deployment/_stop": { "post": { "tags": [ - "ml.stop_trained_model_deployment" + "ml" ], "summary": "Stop a trained model deployment", "externalDocs": { @@ -14031,7 +14031,7 @@ "/_ml/data_frame/analytics/{id}/_update": { "post": { "tags": [ - "ml.update_data_frame_analytics" + "ml" ], "summary": "Update a data frame analytics job", "externalDocs": { @@ -14152,7 +14152,7 @@ "/_ml/datafeeds/{datafeed_id}/_update": { "post": { "tags": [ - "ml.update_datafeed" + "ml" ], "summary": "Update a datafeed", "description": "You must stop and start the datafeed for the changes to be applied.\nWhen Elasticsearch security features are enabled, your datafeed remembers which roles the user who updated it had at\nthe time of the update and runs the query using those same roles. If you provide secondary authorization headers,\nthose credentials are used instead.", @@ -14361,7 +14361,7 @@ "/_ml/filters/{filter_id}/_update": { "post": { "tags": [ - "ml.update_filter" + "ml" ], "summary": "Update a filter", "description": "Updates the description of a filter, adds items, or removes items from the list.", @@ -14449,7 +14449,7 @@ "/_ml/anomaly_detectors/{job_id}/_update": { "post": { "tags": [ - "ml.update_job" + "ml" ], "summary": "Update an anomaly detection job", "description": "Updates certain properties of an anomaly detection job.", @@ -14659,7 +14659,7 @@ "/_ml/trained_models/{model_id}/deployment/_update": { "post": { "tags": [ - "ml.update_trained_model_deployment" + "ml" ], "summary": "Update a trained model deployment", "externalDocs": { @@ -15553,7 +15553,7 @@ "/_query_rules/{ruleset_id}/_rule/{rule_id}": { "get": { "tags": [ - "query_rules.get_rule" + "query_rules" ], "summary": "Returns the details about a query rule within a query ruleset", "externalDocs": { @@ -15600,7 +15600,7 @@ }, "put": { "tags": [ - "query_rules.put_rule" + "query_rules" ], "summary": "Creates or updates a query rule within a query ruleset", "externalDocs": { @@ -15694,7 +15694,7 @@ }, "delete": { "tags": [ - "query_rules.delete_rule" + "query_rules" ], "summary": "Deletes a query rule within a query ruleset", "externalDocs": { @@ -15743,7 +15743,7 @@ "/_query_rules/{ruleset_id}": { "get": { "tags": [ - "query_rules.get_ruleset" + "query_rules" ], "summary": "Returns the details about a query ruleset", "externalDocs": { @@ -15779,7 +15779,7 @@ }, "put": { "tags": [ - "query_rules.put_ruleset" + "query_rules" ], "summary": "Creates or updates a query ruleset", "externalDocs": { @@ -15851,7 +15851,7 @@ }, "delete": { "tags": [ - "query_rules.delete_ruleset" + "query_rules" ], "summary": "Deletes a query ruleset", "externalDocs": { @@ -15889,7 +15889,7 @@ "/_query_rules": { "get": { "tags": [ - "query_rules.list_rulesets" + "query_rules" ], "summary": "Returns summarized information about existing query rulesets", "externalDocs": { @@ -17041,7 +17041,7 @@ "/_application/search_application/{name}": { "get": { "tags": [ - "search_application.get" + "search_application" ], "summary": "Returns the details about a search application", "externalDocs": { @@ -17078,7 +17078,7 @@ }, "put": { "tags": [ - "search_application.put" + "search_application" ], "summary": "Creates or updates a search application", "externalDocs": { @@ -17143,7 +17143,7 @@ }, "delete": { "tags": [ - "search_application.delete" + "search_application" ], "summary": "Deletes a search application", "externalDocs": { @@ -17182,7 +17182,7 @@ "/_application/analytics/{name}": { "get": { "tags": [ - "search_application.get_behavioral_analytics" + "search_application" ], "summary": "Returns the existing behavioral analytics collections", "externalDocs": { @@ -17204,7 +17204,7 @@ }, "put": { "tags": [ - "search_application.put_behavioral_analytics" + "search_application" ], "summary": "Creates a behavioral analytics collection", "externalDocs": { @@ -17241,7 +17241,7 @@ }, "delete": { "tags": [ - "search_application.delete_behavioral_analytics" + "search_application" ], "summary": "Delete a behavioral analytics collection", "externalDocs": { @@ -17280,7 +17280,7 @@ "/_application/analytics": { "get": { "tags": [ - "search_application.get_behavioral_analytics" + "search_application" ], "summary": "Returns the existing behavioral analytics collections", "externalDocs": { @@ -17299,7 +17299,7 @@ "/_application/search_application": { "get": { "tags": [ - "search_application.list" + "search_application" ], "summary": "Returns the existing search applications", "externalDocs": { @@ -17372,7 +17372,7 @@ "/_application/search_application/{name}/_search": { "get": { "tags": [ - "search_application.search" + "search_application" ], "summary": "Perform a search against a search application", "externalDocs": { @@ -17400,7 +17400,7 @@ }, "post": { "tags": [ - "search_application.search" + "search_application" ], "summary": "Perform a search against a search application", "externalDocs": { @@ -17798,7 +17798,7 @@ "/_security/_authenticate": { "get": { "tags": [ - "security.authenticate" + "security" ], "summary": "Authenticate a user", "description": "Authenticates a user and returns information about the authenticated user.\nInclude the user information in a [basic auth header](https://en.wikipedia.org/wiki/Basic_access_authentication).\nA successful call returns a JSON structure that shows user information such as their username, the roles that are assigned to the user, any assigned metadata, and information about the realms that authenticated and authorized the user.\nIf the user cannot be authenticated, this API returns a 401 status code.", @@ -17887,7 +17887,7 @@ "/_security/api_key": { "get": { "tags": [ - "security.get_api_key" + "security" ], "summary": "Get API key information", "description": "Retrieves information for one or more API keys.\nNOTE: If you have only the `manage_own_api_key` privilege, this API returns only the API keys that you own.\nIf you have `read_security`, `manage_api_key` or greater privileges (including `manage_security`), this API returns all API keys regardless of ownership.", @@ -18004,7 +18004,7 @@ }, "put": { "tags": [ - "security.create_api_key" + "security" ], "summary": "Create an API key", "description": "Creates an API key for access without requiring basic authentication.\nA successful request returns a JSON structure that contains the API key, its unique id, and its name.\nIf applicable, it also returns expiration information for the API key in milliseconds.\nNOTE: By default, API keys never expire. You can specify expiration information when you create the API keys.", @@ -18029,7 +18029,7 @@ }, "post": { "tags": [ - "security.create_api_key" + "security" ], "summary": "Create an API key", "description": "Creates an API key for access without requiring basic authentication.\nA successful request returns a JSON structure that contains the API key, its unique id, and its name.\nIf applicable, it also returns expiration information for the API key in milliseconds.\nNOTE: By default, API keys never expire. You can specify expiration information when you create the API keys.", @@ -18054,7 +18054,7 @@ }, "delete": { "tags": [ - "security.invalidate_api_key" + "security" ], "summary": "Invalidate API keys", "description": "Invalidates one or more API keys.\nThe `manage_api_key` privilege allows deleting any API keys.\nThe `manage_own_api_key` only allows deleting API keys that are owned by the user.\nIn addition, with the `manage_own_api_key` privilege, an invalidation request must be issued in one of the three formats:\n- Set the parameter `owner=true`.\n- Or, set both `username` and `realm_name` to match the user’s identity.\n- Or, if the request is issued by an API key, i.e. an API key invalidates itself, specify its ID in the `ids` field.", @@ -18144,7 +18144,7 @@ "/_security/user/_has_privileges": { "get": { "tags": [ - "security.has_privileges" + "security" ], "summary": "Check user privileges", "description": "Determines whether the specified user has a specified list of privileges.", @@ -18164,7 +18164,7 @@ }, "post": { "tags": [ - "security.has_privileges" + "security" ], "summary": "Check user privileges", "description": "Determines whether the specified user has a specified list of privileges.", @@ -18186,7 +18186,7 @@ "/_security/user/{user}/_has_privileges": { "get": { "tags": [ - "security.has_privileges" + "security" ], "summary": "Check user privileges", "description": "Determines whether the specified user has a specified list of privileges.", @@ -18211,7 +18211,7 @@ }, "post": { "tags": [ - "security.has_privileges" + "security" ], "summary": "Check user privileges", "description": "Determines whether the specified user has a specified list of privileges.", @@ -18238,7 +18238,7 @@ "/_security/_query/api_key": { "get": { "tags": [ - "security.query_api_keys" + "security" ], "summary": "Query API keys", "description": "Retrieves a paginated list of API keys and their information. You can optionally filter the results with a query.", @@ -18269,7 +18269,7 @@ }, "post": { "tags": [ - "security.query_api_keys" + "security" ], "summary": "Query API keys", "description": "Retrieves a paginated list of API keys and their information. You can optionally filter the results with a query.", @@ -18302,7 +18302,7 @@ "/_security/api_key/{id}": { "put": { "tags": [ - "security.update_api_key" + "security" ], "summary": "Update an API key", "description": "Updates attributes of an existing API key.\nUsers can only update API keys that they created or that were granted to them.\nUse this API to update API keys created by the create API Key or grant API Key APIs.\nIf you need to apply the same update to many API keys, you can use bulk update API Keys to reduce overhead.\nIt’s not possible to update expired API keys, or API keys that have been invalidated by invalidate API Key.\nThis API supports updates to an API key’s access scope and metadata.\nThe access scope of an API key is derived from the `role_descriptors` you specify in the request, and a snapshot of the owner user’s permissions at the time of the request.\nThe snapshot of the owner’s permissions is updated automatically on every call.\nIf you don’t specify `role_descriptors` in the request, a call to this API might still change the API key’s access scope.\nThis change can occur if the owner user’s permissions have changed since the API key was created or last modified.\nTo update another user’s API key, use the `run_as` feature to submit a request on behalf of another user.\nIMPORTANT: It’s not possible to use an API key as the authentication credential for this API.\nTo update an API key, the owner user’s credentials are required.", @@ -18377,7 +18377,7 @@ "/_sql/close": { "post": { "tags": [ - "sql.clear_cursor" + "sql" ], "summary": "Clears the SQL cursor", "externalDocs": { @@ -18429,7 +18429,7 @@ "/_sql/async/delete/{id}": { "delete": { "tags": [ - "sql.delete_async" + "sql" ], "summary": "Deletes an async SQL search or a stored synchronous SQL search", "description": "If the search is still running, the API cancels it.", @@ -18468,7 +18468,7 @@ "/_sql/async/{id}": { "get": { "tags": [ - "sql.get_async" + "sql" ], "summary": "Returns the current status and available results for an async SQL search or stored synchronous SQL search", "externalDocs": { @@ -18583,7 +18583,7 @@ "/_sql/async/status/{id}": { "get": { "tags": [ - "sql.get_async_status" + "sql" ], "summary": "Returns the current status of an async SQL search or a stored synchronous SQL search", "externalDocs": { @@ -18651,7 +18651,7 @@ "/_sql": { "get": { "tags": [ - "sql.query" + "sql" ], "summary": "Executes a SQL request", "externalDocs": { @@ -18675,7 +18675,7 @@ }, "post": { "tags": [ - "sql.query" + "sql" ], "summary": "Executes a SQL request", "externalDocs": { @@ -18701,7 +18701,7 @@ "/_sql/translate": { "get": { "tags": [ - "sql.translate" + "sql" ], "summary": "Translates SQL into Elasticsearch queries", "externalDocs": { @@ -18720,7 +18720,7 @@ }, "post": { "tags": [ - "sql.translate" + "sql" ], "summary": "Translates SQL into Elasticsearch queries", "externalDocs": { @@ -18741,7 +18741,7 @@ "/_synonyms/{id}": { "get": { "tags": [ - "synonyms.get_synonym" + "synonyms" ], "summary": "Retrieves a synonym set", "externalDocs": { @@ -18812,7 +18812,7 @@ }, "put": { "tags": [ - "synonyms.put_synonym" + "synonyms" ], "summary": "Creates or updates a synonym set", "externalDocs": { @@ -18889,7 +18889,7 @@ }, "delete": { "tags": [ - "synonyms.delete_synonym" + "synonyms" ], "summary": "Deletes a synonym set", "externalDocs": { @@ -18927,7 +18927,7 @@ "/_synonyms/{set_id}/{rule_id}": { "get": { "tags": [ - "synonyms.get_synonym_rule" + "synonyms" ], "summary": "Retrieves a synonym rule from a synonym set", "externalDocs": { @@ -18974,7 +18974,7 @@ }, "put": { "tags": [ - "synonyms.put_synonym_rule" + "synonyms" ], "summary": "Creates or updates a synonym rule in a synonym set", "externalDocs": { @@ -19039,7 +19039,7 @@ }, "delete": { "tags": [ - "synonyms.delete_synonym_rule" + "synonyms" ], "summary": "Deletes a synonym rule in a synonym set", "externalDocs": { @@ -19088,7 +19088,7 @@ "/_synonyms": { "get": { "tags": [ - "synonyms.get_synonyms_sets" + "synonyms" ], "summary": "Retrieves a summary of all defined synonym sets", "externalDocs": { @@ -19150,7 +19150,7 @@ "/_tasks/{task_id}": { "get": { "tags": [ - "tasks.get" + "tasks" ], "summary": "Get task information", "description": "Returns information about the tasks currently executing in the cluster.", @@ -19518,7 +19518,7 @@ "/_transform/{transform_id}": { "get": { "tags": [ - "transform.get_transform" + "transform" ], "summary": "Get transforms", "description": "Retrieves configuration information for transforms.", @@ -19552,7 +19552,7 @@ }, "put": { "tags": [ - "transform.put_transform" + "transform" ], "summary": "Create a transform", "description": "Creates a transform.\n\nA transform copies data from source indices, transforms it, and persists it into an entity-centric destination index. You can also think of the destination index as a two-dimensional tabular data structure (known as\na data frame). The ID for each document in the data frame is generated from a hash of the entity, so there is a\nunique row per entity.\n\nYou must choose either the latest or pivot method for your transform; you cannot use both in a single transform. If\nyou choose to use the pivot method for your transform, the entities are defined by the set of `group_by` fields in\nthe pivot object. If you choose to use the latest method, the entities are defined by the `unique_key` field values\nin the latest object.\n\nYou must have `create_index`, `index`, and `read` privileges on the destination index and `read` and\n`view_index_metadata` privileges on the source indices. When Elasticsearch security features are enabled, the\ntransform remembers which roles the user that created it had at the time of creation and uses those same roles. If\nthose roles do not have the required privileges on the source and destination indices, the transform fails when it\nattempts unauthorized operations.\n\nNOTE: You must use Kibana or this API to create a transform. Do not add a transform directly into any\n`.transform-internal*` indices using the Elasticsearch index API. If Elasticsearch security features are enabled, do\nnot give users any privileges on `.transform-internal*` indices. If you used transforms prior to 7.5, also do not\ngive users any privileges on `.data-frame-internal*` indices.", @@ -19656,7 +19656,7 @@ }, "delete": { "tags": [ - "transform.delete_transform" + "transform" ], "summary": "Delete a transform", "description": "Deletes a transform.", @@ -19725,7 +19725,7 @@ "/_transform": { "get": { "tags": [ - "transform.get_transform" + "transform" ], "summary": "Get transforms", "description": "Retrieves configuration information for transforms.", @@ -19758,7 +19758,7 @@ "/_transform/{transform_id}/_stats": { "get": { "tags": [ - "transform.get_transform_stats" + "transform" ], "summary": "Get transform stats", "description": "Retrieves usage information for transforms.", @@ -19852,7 +19852,7 @@ "/_transform/{transform_id}/_preview": { "get": { "tags": [ - "transform.preview_transform" + "transform" ], "summary": "Preview a transform", "description": "Generates a preview of the results that you will get when you create a transform with the same configuration.\n\nIt returns a maximum of 100 results. The calculations are based on all the current data in the source index. It also\ngenerates a list of mappings and settings for the destination index. These values are determined based on the field\ntypes of the source index and the transform aggregations.", @@ -19880,7 +19880,7 @@ }, "post": { "tags": [ - "transform.preview_transform" + "transform" ], "summary": "Preview a transform", "description": "Generates a preview of the results that you will get when you create a transform with the same configuration.\n\nIt returns a maximum of 100 results. The calculations are based on all the current data in the source index. It also\ngenerates a list of mappings and settings for the destination index. These values are determined based on the field\ntypes of the source index and the transform aggregations.", @@ -19910,7 +19910,7 @@ "/_transform/_preview": { "get": { "tags": [ - "transform.preview_transform" + "transform" ], "summary": "Preview a transform", "description": "Generates a preview of the results that you will get when you create a transform with the same configuration.\n\nIt returns a maximum of 100 results. The calculations are based on all the current data in the source index. It also\ngenerates a list of mappings and settings for the destination index. These values are determined based on the field\ntypes of the source index and the transform aggregations.", @@ -19935,7 +19935,7 @@ }, "post": { "tags": [ - "transform.preview_transform" + "transform" ], "summary": "Preview a transform", "description": "Generates a preview of the results that you will get when you create a transform with the same configuration.\n\nIt returns a maximum of 100 results. The calculations are based on all the current data in the source index. It also\ngenerates a list of mappings and settings for the destination index. These values are determined based on the field\ntypes of the source index and the transform aggregations.", @@ -19962,7 +19962,7 @@ "/_transform/{transform_id}/_reset": { "post": { "tags": [ - "transform.reset_transform" + "transform" ], "summary": "Reset a transform", "description": "Resets a transform.\nBefore you can reset it, you must stop it; alternatively, use the `force` query parameter.\nIf the destination index was created by the transform, it is deleted.", @@ -20011,7 +20011,7 @@ "/_transform/{transform_id}/_schedule_now": { "post": { "tags": [ - "transform.schedule_now_transform" + "transform" ], "summary": "Schedule a transform to start now", "description": "Instantly runs a transform to process data.\n\nIf you _schedule_now a transform, it will process the new data instantly,\nwithout waiting for the configured frequency interval. After _schedule_now API is called,\nthe transform will be processed again at now + frequency unless _schedule_now API\nis called again in the meantime.", @@ -20060,7 +20060,7 @@ "/_transform/{transform_id}/_start": { "post": { "tags": [ - "transform.start_transform" + "transform" ], "summary": "Start a transform", "description": "Starts a transform.\n\nWhen you start a transform, it creates the destination index if it does not already exist. The `number_of_shards` is\nset to `1` and the `auto_expand_replicas` is set to `0-1`. If it is a pivot transform, it deduces the mapping\ndefinitions for the destination index from the source indices and the transform aggregations. If fields in the\ndestination index are derived from scripts (as in the case of `scripted_metric` or `bucket_script` aggregations),\nthe transform uses dynamic mappings unless an index template exists. If it is a latest transform, it does not deduce\nmapping definitions; it uses dynamic mappings. To use explicit mappings, create the destination index before you\nstart the transform. Alternatively, you can create an index template, though it does not affect the deduced mappings\nin a pivot transform.\n\nWhen the transform starts, a series of validations occur to ensure its success. If you deferred validation when you\ncreated the transform, they occur when you start the transform—with the exception of privilege checks. When\nElasticsearch security features are enabled, the transform remembers which roles the user that created it had at the\ntime of creation and uses those same roles. If those roles do not have the required privileges on the source and\ndestination indices, the transform fails when it attempts unauthorized operations.", @@ -20119,7 +20119,7 @@ "/_transform/{transform_id}/_stop": { "post": { "tags": [ - "transform.stop_transform" + "transform" ], "summary": "Stop transforms", "description": "Stops one or more transforms.", @@ -20208,7 +20208,7 @@ "/_transform/{transform_id}/_update": { "post": { "tags": [ - "transform.update_transform" + "transform" ], "summary": "Update a transform", "description": "Updates certain properties of a transform.\n\nAll updated properties except `description` do not take effect until after the transform starts the next checkpoint,\nthus there is data consistency in each checkpoint. To use this API, you must have `read` and `view_index_metadata`\nprivileges for the source indices. You must also have `index` and `read` privileges for the destination index. When\nElasticsearch security features are enabled, the transform remembers which roles the user who updated it had at the\ntime of update and runs with those privileges.",