---
type: api
title: Create deployment template
description: Creates a deployment template.
url: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/cloud-enterprise/operation/operation-create-deployment-template-v2
resource: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/cloud-enterprise/operation/operation-create-deployment-template-v2
products:
  - Elastic Cloud Enterprise
---

# Create deployment template

## Paths

- `POST` `/deployments/templates`

- [Basic auth](/elastic/docs-builder/docs/4371/api/doc/cloud-enterprise/authentication#basicauth)
- [Api key auth](/elastic/docs-builder/docs/4371/api/doc/cloud-enterprise/authentication#apikey)

## Description

Creates a deployment template.

## Query String Parameters

- `validate_only` (boolean · default: false)
  If true, the deployment template definition will be validated but the template will not be created.
- `region` (string)
  Region of the deployment template

## Request Body

`application/json`

The deployment template definition.

- `name` (string) — required
  A human readable name for the template.
- `description` (string) — optional
  An optional description for the template.
- `deployment_template` ({} DeploymentCreateRequest) — required
  A request for creating a new Deployment consisting of multiple clusters
  - `name` (string) — optional
    A name for the deployment; otherwise this will be the generated deployment id
  - `resources` ({} DeploymentCreateResources) — optional
    Describes the resources that will belong to a Deployment
    - `elasticsearch` ([] ElasticsearchPayload) — optional
      A list of payloads for Elasticsearch cluster creation.
      - `ref_id` (string) — required
        A locally-unique user-specified id for this Elasticsearch cluster
      - `display_name` (string) — optional
        The human readable name for the cluster (defaults to the generated cluster id if not specified)
      - `region` (string) — required
        The region where this resource exists
      - `plan` ({} ElasticsearchClusterPlan) — required
        The plan for the Elasticsearch cluster.
        - `cluster_topology` ([] ElasticsearchClusterTopologyElement) — required
          - `id` (string) — optional
            Unique identifier of this topology element
          - `node_type` ({} ElasticsearchNodeType) — optional
            Controls the combinations of Elasticsearch node types. TIP: By default, the Elasticsearch node is master eligible, can hold data, and run ingest pipelines. WARNING: Do not set for tiebreaker topologies.
            - `master` (boolean) — optional
              Defines whether this node can be elected master (default: false)
            - `data` (boolean) — optional
              Defines whether this node can hold data (default: false)
            - `ingest` (boolean) — optional
              Defines whether this node can run an ingest pipeline (default: false)
            - `ml` (boolean) — optional
              Defines whether this node can run ml jobs, valid only for versions 5.4.0 or greater (default: false)
          - `node_roles` ([] enum) — optional
            The list of node roles for this topology element (ES version >= 7.10). Allowable values are: master, ingest, ml, data_hot, data_content, data_warm, data_cold, data_frozen, remote_cluster_client, transform
            Values: `master`, `ingest`, `ml`, `data_hot`, `data_content`, `data_warm`, `data_cold`, `data_frozen`, `remote_cluster_client`, `transform`
          - `memory_per_node` (integer) — optional
            The memory capacity in MB for each node of this type built in each zone.
          - `node_count_per_zone` (integer) — optional
            The number of nodes of this type that are allocated within each zone. (i.e. total capacity per zone = `node_count_per_zone` * `memory_per_node` in MB). Cannot be set for tiebreaker topologies. For dedicated master nodes, must be 1 if an entry exists.
          - `zone_count` (integer) — optional
            The default number of zones in which data nodes will be placed
          - `elasticsearch` ({} ElasticsearchConfiguration) — optional
            The Elasticsearch cluster settings. When specified at the top level, provides a field-by-field default. When specified at the topology level, provides the override settings.
            - `version` (string) — optional
              The version of the Elasticsearch cluster (must be one of the ECE supported versions). Currently cannot be different across the topology (and is generally specified in the globals). Defaults to the latest version if not specified.
            - `docker_image` (string) — optional
              A docker URI that allows overriding of the default docker image specified for this version
            - `system_settings` ({} ElasticsearchSystemSettings) — optional
              A subset of Elasticsearch settings. TIP: To define the complete set of Elasticsearch settings, use `ElasticsearchSystemSettings` with `user_settings_override*` and `user_settings*`.
              - `scripting` ({} ElasticsearchScriptingUserSettings) — optional
                Controls the languages supported by the Elasticsearch cluster, such as Painless, Mustache, and Expressions. Controls how the languages are used, such as file, index, and inline. TIP: For complex configurations, leave these blank and configure these settings in the user YAML or JSON.
                - `painless_enabled` (boolean) — optional
                  (5.x+ only) If enabled (the default) then the painless scripting engine is allowed as a sandboxed language. Sandboxed languages are the only ones allowed if 'sandbox_mode' is set to true. NOTES: (Corresponds to the parameters 'script.engine.painless.[file|stored|inline]')
                - `mustache_enabled` (boolean) — optional
                  (5.x+ only) If enabled (the default) then the mustache scripting engine is allowed as a sandboxed language. Sandboxed languages are the only ones allowed if 'sandbox_mode' is set to true. NOTES: (Corresponds to the parameters 'script.engine.mustache.[file|stored|inline]')
                - `expressions_enabled` (boolean) — optional
                  (5.x+ only) If enabled (the default) then the expressions scripting engine is allowed as a sandboxed language. Sandboxed languages are the only ones allowed if 'sandbox_mode' is set to true. NOTES: (Corresponds to the parameters 'script.engine.expression.[file|stored|inline]')
                - `stored` ({} ElasticsearchScriptTypeSettings) — optional
                  Enables scripting for the specified type and controls other parameters. Store scripts in indexes (`stored`), upload in file bundles (`file`), or use in API requests (`inline`).
                  - `enabled` (boolean) — optional
                    If enabled (default: true) then scripts are enabled, either for sandboxing languages (by default), or for all installed languages if 'sandbox_mode' is disabled (or for 6.x). NOTES: (Corresponds to the parameter 'script.file|stored/indexed|inline')
                  - `sandbox_mode` (boolean) — optional
                    If enabled (default: true) and this script type is enabled, then only the sandbox languages are allowed. By default the sandbox languages are painless, expressions and mustache, but this can be restricted via the 'painless_enabled', 'mustache_enabled' 'expression_enabled' settings.NOTES: Not supported in 6.x. (Corresponds to the parameters 'script.engine.[painless|mustache|expressions].[file|stored|inline]')
                - `file` ({} ElasticsearchScriptTypeSettings) — optional
                  Enables scripting for the specified type and controls other parameters. Store scripts in indexes (`stored`), upload in file bundles (`file`), or use in API requests (`inline`).
                  - `enabled` (boolean) — optional
                    If enabled (default: true) then scripts are enabled, either for sandboxing languages (by default), or for all installed languages if 'sandbox_mode' is disabled (or for 6.x). NOTES: (Corresponds to the parameter 'script.file|stored/indexed|inline')
                  - `sandbox_mode` (boolean) — optional
                    If enabled (default: true) and this script type is enabled, then only the sandbox languages are allowed. By default the sandbox languages are painless, expressions and mustache, but this can be restricted via the 'painless_enabled', 'mustache_enabled' 'expression_enabled' settings.NOTES: Not supported in 6.x. (Corresponds to the parameters 'script.engine.[painless|mustache|expressions].[file|stored|inline]')
                - `inline` ({} ElasticsearchScriptTypeSettings) — optional
                  Enables scripting for the specified type and controls other parameters. Store scripts in indexes (`stored`), upload in file bundles (`file`), or use in API requests (`inline`).
                  - `enabled` (boolean) — optional
                    If enabled (default: true) then scripts are enabled, either for sandboxing languages (by default), or for all installed languages if 'sandbox_mode' is disabled (or for 6.x). NOTES: (Corresponds to the parameter 'script.file|stored/indexed|inline')
                  - `sandbox_mode` (boolean) — optional
                    If enabled (default: true) and this script type is enabled, then only the sandbox languages are allowed. By default the sandbox languages are painless, expressions and mustache, but this can be restricted via the 'painless_enabled', 'mustache_enabled' 'expression_enabled' settings.NOTES: Not supported in 6.x. (Corresponds to the parameters 'script.engine.[painless|mustache|expressions].[file|stored|inline]')
              - `reindex_whitelist` ([] string) — optional
                Limits remote Elasticsearch clusters that can be used as the source for '_reindex' API commands
              - `auto_create_index` (boolean) — optional
                If true (the default), then any write operation on an index that does not currently exist will create it. NOTES: (Corresponds to the parameter 'action.auto_create_index')
              - `enable_close_index` (boolean) — optional
                Defaults to false on versions <= 7.2.0, true otherwise. If false, then the API commands to close indices are disabled. This is important because Elasticsearch does not snapshot or migrate close indices on versions under 7.2.0, therefore standard Elastic Cloud configuration operations will cause irretrievable loss of indices' data. NOTES: (Corresponds to the parameter 'cluster.indices.close.enable')
              - `destructive_requires_name` (boolean) — optional
                If true (default is false) then the index deletion API will not support wildcards or '_all'. NOTES: (Corresponds to the parameter 'action.destructive_requires_name')
              - `watcher_trigger_engine` (string) — optional
                The trigger engine for Watcher, defaults to 'scheduler' - see the xpack documentation for more information. NOTES: (Corresponds to the parameter '(xpack.)watcher.trigger.schedule.engine', depending on version. Ignored from 6.x onwards.)
              - `default_shards_per_index` (integer) — optional
                (2.x only - to get the same result in 5.x template mappings must be used) Sets the default number of shards per index, defaulting to 1 if not specified. (Corresponds to the parameter 'index.number_of_shards' in 2.x, not supported in 5.x)
              - `monitoring_collection_interval` (integer) — optional
                The default interval at which monitoring information from the cluster if collected, if monitoring is enabled. NOTES: (Corresponds to the parameter 'marvel.agent.interval' in 2.x and 'xpack.monitoring.collection.interval' in 5.x)
              - `monitoring_history_duration` (string) — optional
                The duration for which monitoring history is stored (format '(NUMBER)d' eg '3d' for 3 days). NOTES: ('Corresponds to the parameter xpack.monitoring.history.duration' in 5.x, defaults to '7d')
            - `user_settings_json` (object) — optional
              An arbitrary JSON object allowing cluster owners to set their parameters (only one of this and 'user_settings_yaml' is allowed), provided the parameters arey are on the allowlist and not on the denylist. NOTES: (This field together with 'user_settings_override*' and 'system_settings' defines the total set of Elasticsearch settings)
            - `user_settings_yaml` (string) — optional
              An arbitrary YAML object allowing cluster owners to set their parameters (only one of this and 'user_settings_json' is allowed), provided the parameters arey are on the allowlist and not on the denylist. NOTES: (This field together with 'user_settings_override*' and 'system_settings' defines the total set of Elasticsearch settings)
            - `user_settings_override_json` (object) — optional
              An arbitrary JSON object allowing ECE admins owners to set clusters' parameters (only one of this and 'user_settings_override_yaml' is allowed), ie in addition to the documented 'system_settings'. NOTES: (This field together with 'system_settings' and 'user_settings*' defines the total set of Elasticsearch settings)
            - `user_settings_override_yaml` (string) — optional
              An arbitrary YAML object allowing ECE admins owners to set clusters' parameters (only one of this and 'user_settings_override_json' is allowed), ie in addition to the documented 'system_settings'. NOTES: (This field together with 'system_settings' and 'user_settings*' defines the total set of Elasticsearch settings)
            - `enabled_built_in_plugins` ([] string) — optional
              A list of plugin names from the Elastic-supported subset that are bundled with the version images. NOTES: (Users should consult the Elastic stack objects to see what plugins are available, this is currently only available from the UI)
            - `user_plugins` ([] ElasticsearchUserPlugin) — optional
              A list of admin-uploaded plugin objects that are available for this user.
              - `name` (string) — required
                The name of the plugin
              - `url` (string) — required
                The URL of the plugin (must be accessible from the ECE infrastructure)
              - `elasticsearch_version` (string) — required
                The supported Elasticsearch version (must match the version in the plan)
            - `user_bundles` ([] ElasticsearchUserBundle) — optional
              A list of admin-uploaded bundle objects (eg scripts, synonym files) that are available for this user.
              - `name` (string) — required
                The name of the bundle
              - `url` (string) — required
                The URL of the bundle, which must be accessible from the ECE infrastructure. This URL could be cached by platform, make sure to change it when updating the bundle
              - `elasticsearch_version` (string) — required
                The supported Elasticsearch version (must match the version in the plan)
            - `curation` ({} ElasticsearchCuration) — optional
              The structure that defines the routing settings for index curation.
              - `from_instance_configuration_id` (string) — required
                The source instance configuration
              - `to_instance_configuration_id` (string) — required
                The destination instance configuration
            - `node_attributes` (map string to string) — optional
              Defines the Elasticsearch node attributes for the instances in the topology
          - `instance_configuration_id` (string) — optional
            Controls the allocation of this topology element as well as allowed sizes and node_types. It needs to match the id of an existing instance configuration.
          - `instance_configuration_version` (integer) — optional
            The version of the Instance Configuration Id. If it is unset, the meaning depends on read vs writes. For deployment reads, it is equivalent to version 0 (or the IC is unversioned); for deployment creates and deployment template use, it is equivalent to 'the latest version'; and for deployment updates, it is equivalent to 'retain the current version'.
          - `size` ({} TopologySize) — optional
            Measured by the amount of a resource. The final cluster size is calculated using multipliers from the topology instance configuration.
            - `value` (integer) — required
              Amount of resource
            - `resource` (enum) — required
              Type of resource. In ESS the resource used should always be `memory`.
              Values: `memory`, `storage`
          - `autoscaling_min` ({} TopologySize) — optional
            Measured by the amount of a resource. The final cluster size is calculated using multipliers from the topology instance configuration.
            - `value` (integer) — required
              Amount of resource
            - `resource` (enum) — required
              Type of resource. In ESS the resource used should always be `memory`.
              Values: `memory`, `storage`
          - `autoscaling_max` ({} TopologySize) — optional
            Measured by the amount of a resource. The final cluster size is calculated using multipliers from the topology instance configuration.
            - `value` (integer) — required
              Amount of resource
            - `resource` (enum) — required
              Type of resource. In ESS the resource used should always be `memory`.
              Values: `memory`, `storage`
          - `autoscaling_policy_override_json` (object) — optional
            An arbitrary JSON object overriding the default autoscaling policy. Don't set unless you really know what you are doing.
          - `topology_element_control` ({} TopologyElementControl) — optional
            Controls for the topology element. Only used as part of the deployment template. Ignored if included as part of a deployment.
            - `min` ({} TopologySize) — required
              Measured by the amount of a resource. The final cluster size is calculated using multipliers from the topology instance configuration.
              - `value` (integer) — required
                Amount of resource
              - `resource` (enum) — required
                Type of resource. In ESS the resource used should always be `memory`.
                Values: `memory`, `storage`
          - `autoscaling_tier_override` (boolean) — optional
            Set to true to enable autoscaling for this topology element, even if the cluster-level 'autoscaling_enabled' field is false. Note that 'autoscaling_tier_override' cannot be set to false if cluster-level 'autoscaling_enabled' is true. Currently only supported for the 'ml' tier
        - `elasticsearch` ({} ElasticsearchConfiguration) — required
          The Elasticsearch cluster settings. When specified at the top level, provides a field-by-field default. When specified at the topology level, provides the override settings.
          Same fields as `elasticsearch` in `cluster_topology`
        - `deployment_template` ({} DeploymentTemplateReference) — optional
          Specifies the deployment template used to create the plan.
          - `id` (string) — required
            The unique identifier of the deployment template
          - `version` (string) — optional
            A version identifier to disambiguate multiple revisions of the same template
        - `transient` ({} TransientElasticsearchPlanConfiguration) — optional
          Defines the configuration parameters that control how the plan is applied. For example, the Elasticsearch cluster topology and Elasticsearch settings.
          - `strategy` ({} PlanStrategy) — optional
            The options for performing a plan change. Specify only one property each time. The default is `grow_and_shrink`.
            - `rolling` ({} RollingStrategyConfig) — optional
              Performs inline, rolling configuration changes that mutate existing containers. TIP: This is the fastest way to update a plan, but can fail for complex plan changes, such as topology changes. Also, this is less safe for configuration changes that leave a cluster in a non running state. NOTE: When you perform a major version upgrade, and 'group_by' is set to 'pass:macros[__all__]';, rolling is required.
              - `group_by` (string) — optional
                Specifies the grouping attribute to use when rolling several instances. Instances that share the same value for the provided attribute key are rolled together as a unit. Examples that make sense to use are '\_\_all\_\_' (roll all instances as a single unit), 'logical_zone_name' (roll instances by zone), '\_\_name\_\_' (roll one instance at a time, the default if not specified). Note that '\_\_all\_\_' is required when performing a major version upgrade
              - `allow_inline_resize` (boolean) — optional
                Whether we allow changing the capacity of instances (default false). This is currently implemented by stopping, re-creating then starting the affected instance on its associated allocator when performing the changes. NOTES: This requires a round-trip through the allocation infrastructure of the active constructor, as it has to reserve the target capacity without over-committing
              - `skip_synced_flush` (boolean) — optional
                Whether to skip attempting to do a synced flush on the filesystem of the container (default: false), which is less safe but may be required if the container is unhealthy
              - `shard_init_wait_time` (integer) — optional
                The time, in seconds, to wait for shards that show no progress of initializing before rolling the next group (default: 10 minutes)
            - `grow_and_shrink` (GrowShrinkStrategyConfig) — optional
              A strategy that creates instances with the new plan, migrates data from the old instances, then shuts down the old instances. `GrowShrinkStrategyConfig` is safer than 'rolling' and ensures single node availability during a plan change, but can be a lot slower on larger clusters.
            - `rolling_grow_and_shrink` (RollingGrowShrinkStrategyConfig) — optional
              A strategy that creates new Elasticsearch instances, Kibana instances, and APM Servers with the new plan, then migrates the node data to minimize the amount of spare capacity.
            - `autodetect` (AutodetectStrategyConfig) — optional
              A strategy that lets constructor choose the most optimal way to execute the plan.
          - `plan_configuration` ({} ElasticsearchPlanControlConfiguration) — optional
            The configuration settings for the timeout and fallback parameters.
            - `timeout` (integer) — optional
              The total timeout in seconds after which the plan is cancelled even if it is not complete. Defaults to 4x the max memory capacity per node (in MB). NOTES: A 3 zone cluster with 2 nodes of 2048 each would have a timeout of 4*2048=8192 seconds. Timeout does not include time required to run rollback actions.
            - `calm_wait_time` (integer) — optional
              This timeout determines how long to give a cluster after it responds to API calls before performing actual operations on it. It defaults to 5s
            - `move_instances` ([] InstanceMoveRequest) — optional
              - `from` (string) — required
                The instance id that is going to be moved
              - `to` ([] string) — optional
                An optional list of allocator ids to which the instance should be moved. If not specified then any available allocator can be used (including the current one if it is healthy)
              - `instance_down` (boolean) — optional
                Tells the infrastructure that the instance should be considered as permanently down when deciding how to migrate data to new nodes. If left blank then the system will automatically decide (currently: will treat the instances as up)
            - `move_allocators` ([] AllocatorMoveRequest) — optional
              - `from` (string) — required
                The allocator id off which all instances in the cluster should be moved
              - `to` ([] string) — optional
                An optional list of allocator ids to which the instance(s) should be moved. If not specified then any available allocator can be used (including the current one if it is healthy)
              - `allocator_down` (boolean) — optional
                Tells the infrastructure that all instances on the allocator should be considered as permanently down when deciding how to migrate data to new nodes. If left blank then the system will auto-decide (currently: will treat the allocator as up)
            - `move_only` (boolean) — optional
              If true (default: false) only move_instances and move_allocators instructions will be executed, all other changes will be ignored
            - `reallocate_instances` (boolean) — optional
              If true (default: false) does not allow re-using any existing instances currently in the cluster, ie even unchanged instances will be re-created
            - `preferred_allocators` ([] string) — optional
              List of allocators on which instances are placed if possible (if not possible/not specified then any available allocator with space is used)
            - `preferred_allocator_tags` (map string to string) — optional
              Map containing allocators tags in form of key value pairs, increasing the likelihood during move requests for allocators with matching tags, to be selected as target allocators
            - `skip_snapshot` (boolean) — optional
              If true (default: false), does not take (or require) a successful snapshot to be taken before performing any potentially destructive changes to this cluster
            - `max_snapshot_attempts` (integer) — optional
              If taking a snapshot (ie unless 'skip_snapshots': true) then will retry on failure at most this number of times (default: 5)
            - `max_snapshot_age` (integer) — optional
              When you take a snapshot and 'skip_snapshots' is false, specifies the maximum age in seconds of the most recent snapshot before a new snapshot is created. Default is 300
            - `extended_maintenance` (boolean) — optional
              If true (default false), does not clear the maintenance flag (which prevents its API from being accessed except by the constructor) on new instances added until after a snapshot has been restored, otherwise, the maintenance flag is cleared once the new instances successfully join the new cluster
            - `cluster_reboot` (enum) — optional
              Set to 'forced' to force a reboot as part of the upgrade plan. NOTES: (ie taking an existing plan and leaving it alone except for setting 'transient.plan_configuration.cluster_reboot': 'forced' will reboot the cluster)
              Values: `forced`
            - `override_failsafe` (boolean) — optional
              If false (the default) then the plan will fail out if it believes the requested sequence of operations can result in data loss - this flag will override some of these restraints
            - `skip_data_migration` (boolean) — optional
              If true (default: false) then the plan will not wait for data to be migrated from old instances to new instances before continuing the plan (potentially deleting the old instances and losing data)
            - `skip_upgrade_checker` (boolean) — optional
              If false, the cluster is checked for issues that should be resolved before migration (eg contains old Lucene segments), if true this is bypassed
            - `skip_post_upgrade_steps` (boolean) — optional
              If false (the default), the cluster will run (currently) 2.x->5.x operations for any plan change ending with a 5.x cluster (eg apply a cluster license, ensure Monitoring is configured)
            - `skip_snapshot_post_major_upgrade` (boolean) — optional
              If false (the default), the cluster will perform a snapshot after a major version upgrade takes place
          - `restore_snapshot` ({} RestoreSnapshotConfiguration) — optional
            Restores a snapshot from a local or remote repository.
            - `repository_name` (string) — optional
              If specified, contains the name of the snapshot repository - else will default to the Elastic Cloud system repo ('found-snapshots')
            - `snapshot_name` (string) — required
              The name of the snapshot to restore. Use '\_\_latest_success\_\_' to get the most recent snapshot from the specified repository
            - `repository_config` ({} RestoreSnapshotRepoConfiguration) — optional
              Configures the location of a remote repository. The default is the system repository.
              - `raw_settings` (object) — optional
                The remote snapshot settings raw JSON - see the Elasticsearch '_snapshot' documentation for more details on supported formats
            - `restore_payload` ({} RestoreSnapshotApiConfiguration) — optional
              The configuration for the restore command, such as which indices you want to restore.
              - `indices` ([] string) — optional
                The list of indices to restore (supports +ve and -ve selection and wildcarding - see the default Elasticsearch index format documentation)
              - `raw_settings` (object) — optional
                This JSON object (merged with the 'indices' field (if present) is passed untouched into the restore command - see the Elasticsearch '_snapshot' documentation for more details on supported formats
            - `strategy` (enum) — optional
              The restore strategy to use. Defaults to a full restore. Partial restore will attempt to restore unavailable indices only
              Values: `partial`, `full`, `recovery`
            - `source_cluster_id` (string) — optional
              If specified, contains the name of the source cluster id. Do not send this if you are sending repository_config
          - `snapshot_dependency` ({} SnapshotDependencyConfiguration) — optional
            Configuration for attaching a snapshot repository dependency from another cluster. This creates a snapshot repository in the target cluster pointing to the source cluster's snapshots.
            - `source_cluster_id` (string) — required
              The cluster ID of the source cluster whose snapshots will be made available
          - `remote_clusters` ({} RemoteResources) — optional
            The list of resources used as remote clusters
            - `resources` ([] RemoteResourceRef) — required
              The remote resources
              - `deployment_id` (string) — required
                The id of the deployment
              - `elasticsearch_ref_id` (string) — required
                The locally-unique user-specified id of an Elasticsearch Resource
              - `alias` (string) — required
                The alias for this remote cluster. Aliases must only contain letters, digits, dashes and underscores
              - `skip_unavailable` (boolean) — optional
                If true, skip this cluster during search if it is disconnected. Default: false
              - `info` ({} RemoteResourceInfo) — optional
                Information about a Remote Cluster.
                - `healthy` (boolean) — required
                  Whether or not the remote cluster is healthy
                - `connected` (boolean) — required
                  Whether or not there is at least one connection to the remote cluster.
                - `compatible` (boolean) — required
                  Whether or not the remote cluster version is compatible with this cluster version.
                - `trusted` (boolean) — required
                  Whether or not the remote cluster is trusted by this cluster.
                - `trusted_back` (boolean) — required
                  Whether or not the remote cluster trusts this cluster back.
          - `cluster_settings_json` (object) — optional
            If specified, contains transient settings to be applied to an Elasticsearch cluster during changes,default values shown below applied.
These can be overridden by specifying them in the map (or null to unset). Additional settings can also be set. Settings will be cleared after the plan has finished. If not specified, no settings will be applied.
NOTE: These settings are only explicitly cleared for 5.x+ clusters, they must be hand-reset to their defaults in 2.x- (or a cluster reboot will clear them).
- indices.store.throttle.max_bytes_per_sec: 120Mb
- indices.recovery.max_bytes_per_sec: 120Mb
- cluster.routing.allocation.cluster_concurrent_rebalance: 5
- cluster.routing.allocation.node_initial_primaries_recoveries: 5
- cluster.routing.allocation.node_concurrent_incoming_recoveries: 5
For version 8.1 and later no defaults are provided through this mechanism, but instead hardware dependent settings are provided to each instance.
        - `autoscaling_enabled` (boolean) — optional
          Enable autoscaling for this Elasticsearch cluster.
      - `settings` ({} ElasticsearchClusterSettings) — optional
        The settings for an Elasticsearch cluster.
        - `snapshot` ({} ClusterSnapshotSettings) — optional
          The snapshot configuration settings for an Elasticsearch cluster.
          - `repository` ({} ClusterSnapshotRepositoryInfo) — optional
            Information about the Elasticsearch cluster snapshot repository.
            - `static` ({} ClusterSnapshotRepositoryStatic) — optional
              The static object for the Elasticsearch cluster snapshot repository.
              - `repository_type` (string) — optional
                Type of snapshot repository, ie: S3
              - `settings` (object) — optional
                Settings associated with snapshot repository
            - `reference` ({} ClusterSnapshotRepositoryReference) — optional
              The reference object for the Elasticsearch cluster snapshot repository.
              - `repository_name` (string) — optional
                ECE snapshot repository name, from the '/platform/configuration/snapshots/repositories' endpoint
            - `default` (ClusterSnapshotRepositoryDefault) — optional
              The default object for the Elasticsearch cluster snapshot repository.
          - `interval` (string) — optional
            Interval between snapshots, with the format 'length unit' (space is optional), where unit can be one of: d (day), h (hour), min (minute). Default is 30 minutes
          - `pending_interval` (string) — optional
            Interval between snapshot progress checks, with the format 'length unit' (space is optional), where unit can be one of: d (day), h (hour), min (minute). Default is 1 minute
          - `wait_time_after_snapshotting` (string) — optional
            The time to wait between snapshot phases (snapshot, purge), with the format 'length unit' (space is optional), where unit can be one of: d (day), h (hour), min (minute). Default is 10 minutes
          - `enabled` (boolean) — optional
            Indicates if Snapshotting is enabled
          - `suspended` ([] string) — optional
            List of temporary snapshot suspensions
          - `retention` ({} ClusterSnapshotRetention) — optional
            Information about the Elasticsearch cluster snapshot retention.
            - `snapshots` (integer) — optional
              Number of snapshots to retain
            - `max_age` (string) — optional
              Total retention period for all snapshots, with the format 'length unit' (space is optional), where unit can be one of: d (day), h (hour), min (minute)
          - `slm` (boolean) — optional
            When set to true, the deployment will have SLM enabled. Default value is true.
          - `cron_expression` (string) — optional
            Cron expression indicating when should snapshots be taken. This can be enabled only if SLM is enabled for the deployment and 'interval' is not present
        - `monitoring` ({} ManagedMonitoringSettings) — optional
          The settings for sending monitoring information to another cluster.
          - `target_cluster_id` (string) — required
            The Id of the target cluster to which to send monitoring information
        - `metadata` ({} ClusterMetadataSettings) — optional
          The top-level configuration settings for the Elasticsearch cluster.
          - `name` (string) — optional
            The display name of the cluster
          - `owner_id` (string) — optional
            The user id (referencing whatever user database is in use) of the cluster owner
          - `organization_id` (string) — optional
            The organization that owns the deployment
          - `subscription_level` (string) — optional
            Subscription level of the cluster
          - `system_owned` (boolean) — optional
            Indicates if a cluster is system owned (restricts the set of operations that can be performed on it)
          - `contact_email` (string) — optional
            Contact email for the cluster
          - `hidden` (boolean) — optional
            Whether or not this cluster is hidden from the normal clusters list
          - `resources` ({} ClusterMetadataResourcesSettings) — optional
            The top-level configuration settings for the Elasticsearch cluster resources.
            - `cpu` ({} ClusterMetadataCpuResourcesSettings) — optional
              Specifies the CPU resource settings for the Elasticsearch cluster.
              - `boost` (boolean) — optional
                Indicates if the CPU boost flag is enabled or not.
              - `hard_limit` (boolean) — optional
                Indicates if the CPU hard limit flag is enabled or not. When set to true (default), allocates CPU timeshare based on the total CPU time multiplied by the relative RAM capacity of the instance on a given host. When set to false, delegates CPU allocation to the operating system to schedule CPU timeshares.
        - `curation` ({} ClusterCurationSettings) — optional
          The index curation settings for an Elasticsearch cluster.
          - `specs` ([] ClusterCurationSpec) — required
            Specifications for curation
            - `index_pattern` (string) — required
              Index matching pattern
            - `trigger_interval_seconds` (integer) — required
              Number of seconds after index creation to trigger this spec
        - `dedicated_masters_threshold` (integer) — optional
          Threshold starting from which the number of instances in the cluster results in the introduction of dedicated masters. If the cluster is downscaled to a number of nodes below this one, dedicated masters will be removed. Limit is inclusive. When provided the threshold setting is updated. A `null` value removes the field. Otherwise, the setting remains as it was set previously.
        - `traffic_filter` ({} TrafficFilterSettings) — optional
          The configuration settings for the traffic filter.
          - `rulesets` ([] string) — required
            IDs of the traffic filter rulesets
        - `trust` ({} ElasticsearchClusterTrustSettings) — optional
          Configuration of trust with other clusters.
          - `accounts` ([] AccountTrustRelationship) — optional
            The list of trust relationships with different accounts
            - `account_id` (string) — required
              the ID of the Account
            - `name` (string) — optional
              A human readable name of the trust relationship
            - `trust_all` (boolean) — required
              If true, all clusters in this account will by default be trusted and the `trust_allowlist` is ignored.
            - `trust_allowlist` ([] string) — optional
              The list of clusters to trust. Only used when `trust_all` is false.
          - `external` ([] ExternalTrustRelationship) — optional
            The list of trust relationships with external entities
            - `trust_relationship_id` (string) — required
              The ID of the external trust relationship
            - `name` (string) — optional
              The name of the external trust relationship. Retrieved from the TrustRelationship and ignored on write.
            - `trust_all` (boolean) — required
              If true, all clusters in this external entity will be trusted and the `trust_allowlist` is ignored.
            - `trust_allowlist` ([] string) — optional
              The list of clusters to trust. Only used when `trust_all` is false.
          - `direct` ([] DirectTrustRelationship) — optional
            The list of trust relationships where the certificate is bundled with the trust setting. Allows configuring trust for clusters running outside of an Elastic Cloud managed environment or in an Elastic Cloud environment without an environment level trust established.
            - `uid` (string) — optional
              Auto generated identifier for this trust, allows distinguishing between update vs remove and add.
            - `name` (string) — required
              a human readable name of the trust relationship
            - `type` (enum) — optional
              The type can either be ESS, ECE, generic or proxy. If none is specified, then generic is assumed. If proxy is specified, trust_all should be false and trust_allowlist, scope_id and additional_node_names should be omitted.
              Values: `ECE`, `ESS`, `generic`, `proxy`
            - `trust_all` (boolean) — required
              If true, scope_id is required and the `trust_allowlist` is ignored and all clusters matching the scope id will be trusted.
            - `trust_allowlist` ([] string) — optional
              The list of clusters with matching scope to trust. Only used when `trust_all` is false. Providing one or more clusters makes scope_id mandatory.
            - `scope_id` (string) — optional
              A lowercase alphanumerical string of max 32 characters. Usually an organization id or an environment id, but could really be any suitable suffix for clusters using the CA certificate of this trust. Required unless trust_all is false and trust_allowlist is empty.
            - `additional_node_names` ([] string) — optional
              A list of node names trusted in addition to those deducible from trust_allowlist and scope id. Allows trusting nodes that don't have a scoped name at the cost of maintaining the list. Mandatory if scope id is not defined. Wildcards are not allowed.
            - `certificates` ([] TrustedCertificate) — required
              The public ca certificate(s) to trust. Only one is required, but it is possible to specify multiple certificates in order to facilitate key rotation.
              - `pem` (string) — required
                The public ca certificate as string in PEM format.
              - `metadata` ({} CertificateMetaData) — optional
                The certificate MetaData
                - `fingerprint` (string) — required
                  The fingerprint of the certificate
                - `valid_to` (string) — required
                  The expiry date of the certificate in UTC
                - `valid_from` (string) — required
                  The valid from date of the certificate in UTC
                - `also_trusted_by` ([] string) — optional
                  Other deployments also trusting this certificate
        - `keystore_contents` ({} KeystoreContents) — optional
          The contents of the Elasticsearch keystore.
          - `secrets` (map string to KeystoreSecret) — required
            List of secrets
            Map values ({} KeystoreSecret)
            - `value` (object) — optional
              Value of this setting. This can either be a string or a JSON object that is stored as a JSON string in the keystore. NOTE: When the keystore secret is unspecified, it is removed.
            - `as_file` (boolean) — optional
              Stores the keystore secret as a file. The default is false, which stores the keystore secret as string when value is a plain string, or true when value is an object.
            - `is_allowlisted` (boolean) — optional
              Read-only field, ignored on write. Only returned when calling the set-deployment-es-resource-keystore endpoint with `validate_only=true`. True if this setting/value pair is allowlisted (the allowlist is for informational purposes).
            - `is_reloadable` (boolean) — optional
              Read-only field, ignored on write. Only returned when calling the set-deployment-es-resource-keystore endpoint with `validate_only=true`. True if this setting is reloadable, or if false it requires a cluster restart.
    - `kibana` ([] KibanaPayload) — optional
      A list of payloads for Kibana creation.
      - `ref_id` (string) — required
        A locally-unique user-specified id for Kibana
      - `elasticsearch_cluster_ref_id` (string) — required
        Alias to the Elasticsearch Cluster to attach Kibana to
      - `display_name` (string) — optional
        The human readable name for the Kibana cluster (default: takes the name of its Elasticsearch cluster)
      - `region` (string) — required
        The region where this resource exists
      - `plan` ({} KibanaClusterPlan) — required
        The plan for the Kibana instance.
        - `cluster_topology` ([] KibanaClusterTopologyElement) — optional
          - `memory_per_node` (integer) — optional
            The memory capacity in MB for each node of this type built in each zone.
          - `node_count_per_zone` (integer) — optional
            The number of nodes of this type that are allocated within each zone (i.e. total capacity per zone = `node_count_per_zone` * `memory_per_node` in MB).
          - `instance_configuration_id` (string) — optional
            Controls the allocation of this topology element as well as allowed sizes and node_types. It needs to match the id of an existing instance configuration.
          - `instance_configuration_version` (integer) — optional
            The version of the Instance Configuration Id. If it is unset, the meaning depends on read vs writes. For deployment reads, it is equivalent to version 0 (or the IC is unversioned); for deployment creates and deployment template use, it is equivalent to 'the latest version'; and for deployment updates, it is equivalent to 'retain the current version'.
          - `size` ({} TopologySize) — optional
            Measured by the amount of a resource. The final cluster size is calculated using multipliers from the topology instance configuration.
            - `value` (integer) — required
              Amount of resource
            - `resource` (enum) — required
              Type of resource. In ESS the resource used should always be `memory`.
              Values: `memory`, `storage`
          - `zone_count` (integer) — optional
            number of zones in which nodes will be placed
          - `kibana` ({} KibanaConfiguration) — optional
            The Kibana instance settings. When specified at the top level, provides a field-by-field default. When specified at the topology level, provides the override settings.
            - `version` (string) — optional
              The version of the Kibana cluster (must be one of the ECE supported versions, and won't work unless it matches the Elasticsearch version. Leave blank to auto-detect version.)
            - `docker_image` (string) — optional
              A docker URI that allows overriding of the default docker image specified for this version
            - `system_settings` ({} KibanaSystemSettings) — optional
              A subset of Kibana settings. TIP: To define the complete set of Elasticsearch settings, use `KibanaSystemSettings` with `user_settings_override_` and `user_settings_`.
              - `elasticsearch_username` (string) — optional
                Optionally override the account within Elasticsearch - defaults to a system account that always exists (if specified, the password must also be specified). Note that this field is never returned from the API, it is write only.
              - `elasticsearch_password` (string) — optional
                Optionally override the account within Elasticsearch - defaults to a system account that always exists (if specified, the username must also be specified). Note that this field is never returned from the API, it is write only.
            - `user_settings_json` (object) — optional
              An arbitrary JSON object allowing (non-admin) cluster owners to set their parameters (only one of this and 'user_settings_yaml' is allowed), provided the parameters are on the allowlist and not on the denylist. (This field together with 'user_settings_override*' and 'system_settings' defines the total set of Kibana settings)
            - `user_settings_yaml` (string) — optional
              An arbitrary YAML object allowing (non-admin) cluster owners to set their parameters (only one of this and 'user_settings_json' is allowed), provided the parameters are on the allowlist and not on the denylist. (These field together with 'user_settings_override*' and 'system_settings' defines the total set of Kibana settings)
            - `user_settings_override_json` (object) — optional
              An arbitrary JSON object allowing ECE admins owners to set clusters' parameters (only one of this and 'user_settings_override_yaml' is allowed), ie in addition to the documented 'system_settings'. (This field together with 'system_settings' and 'user_settings*' defines the total set of Kibana settings)
            - `user_settings_override_yaml` (string) — optional
              An arbitrary YAML object allowing ECE admins owners to set clusters' parameters (only one of this and 'user_settings_override_json' is allowed), ie in addition to the documented 'system_settings'. (This field together with 'system_settings' and 'user_settings*' defines the total set of Kibana settings)
        - `kibana` ({} KibanaConfiguration) — required
          The Kibana instance settings. When specified at the top level, provides a field-by-field default. When specified at the topology level, provides the override settings.
          - `version` (string) — optional
            The version of the Kibana cluster (must be one of the ECE supported versions, and won't work unless it matches the Elasticsearch version. Leave blank to auto-detect version.)
          - `docker_image` (string) — optional
            A docker URI that allows overriding of the default docker image specified for this version
          - `system_settings` ({} KibanaSystemSettings) — optional
            A subset of Kibana settings. TIP: To define the complete set of Elasticsearch settings, use `KibanaSystemSettings` with `user_settings_override_` and `user_settings_`.
            - `elasticsearch_username` (string) — optional
              Optionally override the account within Elasticsearch - defaults to a system account that always exists (if specified, the password must also be specified). Note that this field is never returned from the API, it is write only.
            - `elasticsearch_password` (string) — optional
              Optionally override the account within Elasticsearch - defaults to a system account that always exists (if specified, the username must also be specified). Note that this field is never returned from the API, it is write only.
          - `user_settings_json` (object) — optional
            An arbitrary JSON object allowing (non-admin) cluster owners to set their parameters (only one of this and 'user_settings_yaml' is allowed), provided the parameters are on the allowlist and not on the denylist. (This field together with 'user_settings_override*' and 'system_settings' defines the total set of Kibana settings)
          - `user_settings_yaml` (string) — optional
            An arbitrary YAML object allowing (non-admin) cluster owners to set their parameters (only one of this and 'user_settings_json' is allowed), provided the parameters are on the allowlist and not on the denylist. (These field together with 'user_settings_override*' and 'system_settings' defines the total set of Kibana settings)
          - `user_settings_override_json` (object) — optional
            An arbitrary JSON object allowing ECE admins owners to set clusters' parameters (only one of this and 'user_settings_override_yaml' is allowed), ie in addition to the documented 'system_settings'. (This field together with 'system_settings' and 'user_settings*' defines the total set of Kibana settings)
          - `user_settings_override_yaml` (string) — optional
            An arbitrary YAML object allowing ECE admins owners to set clusters' parameters (only one of this and 'user_settings_override_json' is allowed), ie in addition to the documented 'system_settings'. (This field together with 'system_settings' and 'user_settings*' defines the total set of Kibana settings)
        - `transient` ({} TransientKibanaPlanConfiguration) — optional
          Defines the configuration parameters that control how the plan is applied. For example, the Elasticsearch cluster topology and Kibana instance settings.
          - `strategy` ({} PlanStrategy) — optional
            The options for performing a plan change. Specify only one property each time. The default is `grow_and_shrink`.
            - `rolling` ({} RollingStrategyConfig) — optional
              Performs inline, rolling configuration changes that mutate existing containers. TIP: This is the fastest way to update a plan, but can fail for complex plan changes, such as topology changes. Also, this is less safe for configuration changes that leave a cluster in a non running state. NOTE: When you perform a major version upgrade, and 'group_by' is set to 'pass:macros[__all__]';, rolling is required.
              - `group_by` (string) — optional
                Specifies the grouping attribute to use when rolling several instances. Instances that share the same value for the provided attribute key are rolled together as a unit. Examples that make sense to use are '\_\_all\_\_' (roll all instances as a single unit), 'logical_zone_name' (roll instances by zone), '\_\_name\_\_' (roll one instance at a time, the default if not specified). Note that '\_\_all\_\_' is required when performing a major version upgrade
              - `allow_inline_resize` (boolean) — optional
                Whether we allow changing the capacity of instances (default false). This is currently implemented by stopping, re-creating then starting the affected instance on its associated allocator when performing the changes. NOTES: This requires a round-trip through the allocation infrastructure of the active constructor, as it has to reserve the target capacity without over-committing
              - `skip_synced_flush` (boolean) — optional
                Whether to skip attempting to do a synced flush on the filesystem of the container (default: false), which is less safe but may be required if the container is unhealthy
              - `shard_init_wait_time` (integer) — optional
                The time, in seconds, to wait for shards that show no progress of initializing before rolling the next group (default: 10 minutes)
            - `grow_and_shrink` (GrowShrinkStrategyConfig) — optional
              A strategy that creates instances with the new plan, migrates data from the old instances, then shuts down the old instances. `GrowShrinkStrategyConfig` is safer than 'rolling' and ensures single node availability during a plan change, but can be a lot slower on larger clusters.
            - `rolling_grow_and_shrink` (RollingGrowShrinkStrategyConfig) — optional
              A strategy that creates new Elasticsearch instances, Kibana instances, and APM Servers with the new plan, then migrates the node data to minimize the amount of spare capacity.
            - `autodetect` (AutodetectStrategyConfig) — optional
              A strategy that lets constructor choose the most optimal way to execute the plan.
          - `plan_configuration` ({} KibanaPlanControlConfiguration) — optional
            The configuration settings for the timeout and fallback parameters.
            - `timeout` (integer) — optional
              The total timeout in seconds after which the plan is cancelled even if it is not complete. Defaults to 4x the max memory capacity per node (in MB)
            - `calm_wait_time` (integer) — optional
              This timeout determines how long to give a cluster after it responds to API calls before performing actual operations on it. It defaults to 5s
            - `move_instances` ([] InstanceMoveRequest) — optional
              - `from` (string) — required
                The instance id that is going to be moved
              - `to` ([] string) — optional
                An optional list of allocator ids to which the instance should be moved. If not specified then any available allocator can be used (including the current one if it is healthy)
              - `instance_down` (boolean) — optional
                Tells the infrastructure that the instance should be considered as permanently down when deciding how to migrate data to new nodes. If left blank then the system will automatically decide (currently: will treat the instances as up)
            - `move_allocators` ([] AllocatorMoveRequest) — optional
              - `from` (string) — required
                The allocator id off which all instances in the cluster should be moved
              - `to` ([] string) — optional
                An optional list of allocator ids to which the instance(s) should be moved. If not specified then any available allocator can be used (including the current one if it is healthy)
              - `allocator_down` (boolean) — optional
                Tells the infrastructure that all instances on the allocator should be considered as permanently down when deciding how to migrate data to new nodes. If left blank then the system will auto-decide (currently: will treat the allocator as up)
            - `reallocate_instances` (boolean) — optional
              If true (default: false) does not allow re-using any existing instances currently in the cluster, ie even unchanged instances will be re-created
            - `preferred_allocators` ([] string) — optional
              List of allocators on which instances are placed if possible (if not possible/not specified then any available allocator with space is used)
            - `preferred_allocator_tags` (map string to string) — optional
              Map containing allocators tags in form of key value pairs, increasing the likelihood during move requests for allocators with matching tags, to be selected as target allocators
            - `extended_maintenance` (boolean) — optional
              If true (default false), does not clear the maintenance flag (which prevents its API from being accessed except by the constructor) on new instances added until after a snapshot has been restored, otherwise, the maintenance flag is cleared once the new instances successfully join the new cluster
            - `cluster_reboot` (enum) — optional
              Set to 'forced' to force a reboot as part of the upgrade plan
              Values: `forced`
            - `override_failsafe` (boolean) — optional
              If false (the default), the plan fails if it determines that the request can result in unsafe operations. Setting this flag overrides some of these check restraints.
      - `settings` ({} KibanaClusterSettings) — optional
        The settings for multiple Kibana instances.
        - `metadata` ({} ClusterMetadataSettings) — optional
          The top-level configuration settings for the Elasticsearch cluster.
          Same fields as `metadata` in `settings`
    - `apm` ([] ApmPayload) — optional
      A list of payloads for APM creation. WARNING: For stack versions 8.0.0 and higher the integrations_server payload should be used instead, as this field becomes deprecated.
      - `ref_id` (string) — required
        A locally-unique user-specified id for APM
      - `elasticsearch_cluster_ref_id` (string) — required
        Alias to the Elasticsearch Cluster to attach APM to
      - `display_name` (string) — optional
        The human readable name for the APM cluster (default: takes the name of its Elasticsearch cluster)
      - `region` (string) — required
        The region where this resource exists
      - `plan` ({} ApmPlan) — required
        The plan for the APM Server.
        - `cluster_topology` ([] ApmTopologyElement) — optional
          - `instance_configuration_id` (string) — optional
            Controls the allocation of this topology element as well as allowed sizes and node_types. It needs to match the id of an existing instance configuration.
          - `instance_configuration_version` (integer) — optional
            The version of the Instance Configuration Id. If it is unset, the meaning depends on read vs writes. For deployment reads, it is equivalent to version 0 (or the IC is unversioned); for deployment creates and deployment template use, it is equivalent to 'the latest version'; and for deployment updates, it is equivalent to 'retain the current version'.
          - `size` ({} TopologySize) — optional
            Measured by the amount of a resource. The final cluster size is calculated using multipliers from the topology instance configuration.
            - `value` (integer) — required
              Amount of resource
            - `resource` (enum) — required
              Type of resource. In ESS the resource used should always be `memory`.
              Values: `memory`, `storage`
          - `zone_count` (integer) — optional
            number of zones in which nodes will be placed
          - `apm` ({} ApmConfiguration) — optional
            The configuration options for the APM Server.
            - `version` (string) — optional
              The version of the Apm cluster (must be one of the ECE supported versions, and won't work unless it matches the APM version. Leave blank to auto-detect version.)
            - `docker_image` (string) — optional
              A docker URI that allows overriding of the default docker image specified for this version
            - `system_settings` ({} ApmSystemSettings) — optional
              A structure that defines a curated subset of the APM Server settings. 
TIP: To define the complete set of APM Server setting, use `ApmSystemSettings` with `user_settings_override_` and `user_settings_`.
              - `elasticsearch_username` (string) — optional
                Optionally override the account within APM - defaults to a system account that always exists (if specified, the password must also be specified). Note that this field is never returned from the API, it is write only.
              - `elasticsearch_password` (string) — optional
                Optionally override the account within APM - defaults to a system account that always exists (if specified, the username must also be specified). Note that this field is never returned from the API, it is write only.
              - `secret_token` (string) — optional
                Optionally override the secret token within APM - defaults to the previously existing secretToken
              - `debug_enabled` (boolean) — optional
                Optionally enable debug mode for APM servers - defaults false
            - `user_settings_json` (object) — optional
              An arbitrary JSON object allowing (non-admin) cluster owners to set their parameters (only one of this and 'user_settings_yaml' is allowed), provided the parameters are on the allowlist and not on the denylist. (This field together with 'user_settings_override*' and 'system_settings' defines the total set of Apm settings)
            - `user_settings_yaml` (string) — optional
              An arbitrary YAML object allowing (non-admin) cluster owners to set their parameters (only one of this and 'user_settings_json' is allowed), provided the parameters are on the allowlist and not on the denylist. (These field together with 'user_settings_override*' and 'system_settings' defines the total set of Apm settings)
            - `user_settings_override_json` (object) — optional
              An arbitrary JSON object allowing ECE admins owners to set clusters' parameters (only one of this and 'user_settings_override_yaml' is allowed), ie in addition to the documented 'system_settings'. (This field together with 'system_settings' and 'user_settings*' defines the total set of Apm settings)
            - `user_settings_override_yaml` (string) — optional
              An arbitrary YAML object allowing ECE admins owners to set clusters' parameters (only one of this and 'user_settings_override_json' is allowed), ie in addition to the documented 'system_settings'. (This field together with 'system_settings' and 'user_settings*' defines the total set of Apm settings)
        - `apm` ({} ApmConfiguration) — required
          The configuration options for the APM Server.
          Same fields as `apm` in `cluster_topology`
        - `transient` ({} TransientApmPlanConfiguration) — optional
          Defines the configuration parameters that control how the plan is applied. For example, the Elasticsearch cluster topology and APM Server settings.
          - `strategy` ({} PlanStrategy) — optional
            The options for performing a plan change. Specify only one property each time. The default is `grow_and_shrink`.
            - `rolling` ({} RollingStrategyConfig) — optional
              Performs inline, rolling configuration changes that mutate existing containers. TIP: This is the fastest way to update a plan, but can fail for complex plan changes, such as topology changes. Also, this is less safe for configuration changes that leave a cluster in a non running state. NOTE: When you perform a major version upgrade, and 'group_by' is set to 'pass:macros[__all__]';, rolling is required.
              - `group_by` (string) — optional
                Specifies the grouping attribute to use when rolling several instances. Instances that share the same value for the provided attribute key are rolled together as a unit. Examples that make sense to use are '\_\_all\_\_' (roll all instances as a single unit), 'logical_zone_name' (roll instances by zone), '\_\_name\_\_' (roll one instance at a time, the default if not specified). Note that '\_\_all\_\_' is required when performing a major version upgrade
              - `allow_inline_resize` (boolean) — optional
                Whether we allow changing the capacity of instances (default false). This is currently implemented by stopping, re-creating then starting the affected instance on its associated allocator when performing the changes. NOTES: This requires a round-trip through the allocation infrastructure of the active constructor, as it has to reserve the target capacity without over-committing
              - `skip_synced_flush` (boolean) — optional
                Whether to skip attempting to do a synced flush on the filesystem of the container (default: false), which is less safe but may be required if the container is unhealthy
              - `shard_init_wait_time` (integer) — optional
                The time, in seconds, to wait for shards that show no progress of initializing before rolling the next group (default: 10 minutes)
            - `grow_and_shrink` (GrowShrinkStrategyConfig) — optional
              A strategy that creates instances with the new plan, migrates data from the old instances, then shuts down the old instances. `GrowShrinkStrategyConfig` is safer than 'rolling' and ensures single node availability during a plan change, but can be a lot slower on larger clusters.
            - `rolling_grow_and_shrink` (RollingGrowShrinkStrategyConfig) — optional
              A strategy that creates new Elasticsearch instances, Kibana instances, and APM Servers with the new plan, then migrates the node data to minimize the amount of spare capacity.
            - `autodetect` (AutodetectStrategyConfig) — optional
              A strategy that lets constructor choose the most optimal way to execute the plan.
          - `plan_configuration` ({} ApmPlanControlConfiguration) — optional
            The plan control configuration options for the APM Server.
            - `timeout` (integer) — optional
              The total timeout in seconds after which the plan is cancelled even if it is not complete. Defaults to 4x the max memory capacity per node (in MB)
            - `calm_wait_time` (integer) — optional
              This timeout determines how long to give a cluster after it responds to API calls before performing actual operations on it. It defaults to 5s
            - `move_instances` ([] InstanceMoveRequest) — optional
              - `from` (string) — required
                The instance id that is going to be moved
              - `to` ([] string) — optional
                An optional list of allocator ids to which the instance should be moved. If not specified then any available allocator can be used (including the current one if it is healthy)
              - `instance_down` (boolean) — optional
                Tells the infrastructure that the instance should be considered as permanently down when deciding how to migrate data to new nodes. If left blank then the system will automatically decide (currently: will treat the instances as up)
            - `move_allocators` ([] AllocatorMoveRequest) — optional
              - `from` (string) — required
                The allocator id off which all instances in the cluster should be moved
              - `to` ([] string) — optional
                An optional list of allocator ids to which the instance(s) should be moved. If not specified then any available allocator can be used (including the current one if it is healthy)
              - `allocator_down` (boolean) — optional
                Tells the infrastructure that all instances on the allocator should be considered as permanently down when deciding how to migrate data to new nodes. If left blank then the system will auto-decide (currently: will treat the allocator as up)
            - `reallocate_instances` (boolean) — optional
              If true (default: false) does not allow re-using any existing instances currently in the cluster, ie even unchanged instances will be re-created
            - `preferred_allocators` ([] string) — optional
              List of allocators on which instances are placed if possible (if not possible/not specified then any available allocator with space is used)
            - `preferred_allocator_tags` (map string to string) — optional
              Map containing allocators tags in form of key value pairs, increasing the likelihood during move requests for allocators with matching tags, to be selected as target allocators
            - `extended_maintenance` (boolean) — optional
              If true (default false), does not clear the maintenance flag (which prevents its API from being accessed except by the constructor) on new instances added until after a snapshot has been restored, otherwise, the maintenance flag is cleared once the new instances successfully join the new cluster
            - `cluster_reboot` (enum) — optional
              Set to 'forced' to force a reboot as part of the upgrade plan
              Values: `forced`
            - `override_failsafe` (boolean) — optional
              If false (the default), the plan fails if it determines that the request can result in unsafe operations. Setting this flag overrides some of these check restraints.
      - `settings` ({} ApmSettings) — optional
        The settings for the APM Server.
        - `metadata` ({} ClusterMetadataSettings) — optional
          The top-level configuration settings for the Elasticsearch cluster.
          Same fields as `metadata` in `settings`
    - `appsearch` ([] AppSearchPayload) — optional
      A list of payloads for AppSearch updates. AppSearch has been replaced by Enterprise Search in the Elastic Stack 7.7 and higher.
      - `ref_id` (string) — required
        A locally-unique user-specified id for AppSearch
      - `elasticsearch_cluster_ref_id` (string) — required
        Alias to the Elasticsearch Cluster to attach AppSearch to
      - `display_name` (string) — optional
        The human readable name for the AppSearch cluster (default: takes the name of its Elasticsearch cluster)
      - `region` (string) — required
        The region where this resource exists
      - `plan` ({} AppSearchPlan) — required
        The plan for the App Search cluster.
        - `cluster_topology` ([] AppSearchTopologyElement) — optional
          - `node_type` ({} AppSearchNodeTypes) — optional
            Node types to enable for an AppSearch instance
            - `appserver` (boolean) — required
              Defines whether this instance should run as Application/API server
            - `worker` (boolean) — required
              Defines whether this instance should run as background worker
          - `instance_configuration_id` (string) — optional
            Controls the allocation of this topology element as well as allowed sizes and node_types. It needs to match the id of an existing instance configuration.
          - `instance_configuration_version` (integer) — optional
            The version of the Instance Configuration Id. If it is unset, the meaning depends on read vs writes. For deployment reads, it is equivalent to version 0 (or the IC is unversioned); for deployment creates and deployment template use, it is equivalent to 'the latest version'; and for deployment updates, it is equivalent to 'retain the current version'.
          - `size` ({} TopologySize) — optional
            Measured by the amount of a resource. The final cluster size is calculated using multipliers from the topology instance configuration.
            - `value` (integer) — required
              Amount of resource
            - `resource` (enum) — required
              Type of resource. In ESS the resource used should always be `memory`.
              Values: `memory`, `storage`
          - `zone_count` (integer) — optional
            number of zones in which nodes will be placed
          - `appsearch` ({} AppSearchConfiguration) — optional
            - `version` (string) — optional
              The version of the AppSearch cluster (must be one of the ECE supported versions, and won't work unless it matches the Elasticsearch version. Leave blank to auto-detect version.)
            - `docker_image` (string) — optional
              A docker URI that allows overriding of the default docker image specified for this version
            - `system_settings` ({} AppSearchSystemSettings) — optional
              This structure defines a curated subset of the AppSearch settings. (This field together with 'user_settings_override*' and  'user_settings*' defines the total set of AppSearch settings)
              - `elasticsearch_url` (string) — optional
                Optionally override the URL to which to send data (for advanced users only, if unspecified the system selects an internal URL)
              - `elasticsearch_username` (string) — optional
                Optionally override the account within App Search - defaults to a system account that always exists (if specified, the password must also be specified). Note that this field is never returned from the API, it is write only.
              - `elasticsearch_password` (string) — optional
                Optionally override the account within App Search - defaults to a system account that always exists (if specified, the username must also be specified). Note that this field is never returned from the API, it is write only.
              - `secret_session_key` (string) — optional
                Optionally override the secret session key within App Search - defaults to the previously existing secretSession. Note that this field is never returned from the API, it is write only.
            - `user_settings_json` (object) — optional
              An arbitrary JSON object allowing (non-admin) cluster owners to set their parameters (only one of this and 'user_settings_yaml' is allowed), provided the parameters are on the allowlist and not on the denylist. (This field together with 'user_settings_override*' and 'system_settings' defines the total set of AppSearch settings)
            - `user_settings_yaml` (string) — optional
              An arbitrary YAML object allowing (non-admin) cluster owners to set their parameters (only one of this and 'user_settings_json' is allowed), provided the parameters are on the allowlist and not on the denylist. (These field together with 'user_settings_override*' and 'system_settings' defines the total set of AppSearch settings)
            - `user_settings_override_json` (object) — optional
              An arbitrary JSON object allowing ECE admins owners to set clusters' parameters (only one of this and 'user_settings_override_yaml' is allowed), ie in addition to the documented 'system_settings'. (This field together with 'system_settings' and 'user_settings*' defines the total set of AppSearch settings)
            - `user_settings_override_yaml` (string) — optional
              An arbitrary YAML object allowing ECE admins owners to set clusters' parameters (only one of this and 'user_settings_override_json' is allowed), ie in addition to the documented 'system_settings'. (This field together with 'system_settings' and 'user_settings*' defines the total set of AppSearch settings)
        - `appsearch` ({} AppSearchConfiguration) — required
          Same fields as `appsearch` in `cluster_topology`
        - `transient` ({} TransientAppSearchPlanConfiguration) — optional
          Defines configuration parameters that control how the plan (ie consisting of the cluster topology and AppSearch settings) is applied
          - `strategy` ({} PlanStrategy) — optional
            The options for performing a plan change. Specify only one property each time. The default is `grow_and_shrink`.
            - `rolling` ({} RollingStrategyConfig) — optional
              Performs inline, rolling configuration changes that mutate existing containers. TIP: This is the fastest way to update a plan, but can fail for complex plan changes, such as topology changes. Also, this is less safe for configuration changes that leave a cluster in a non running state. NOTE: When you perform a major version upgrade, and 'group_by' is set to 'pass:macros[__all__]';, rolling is required.
              - `group_by` (string) — optional
                Specifies the grouping attribute to use when rolling several instances. Instances that share the same value for the provided attribute key are rolled together as a unit. Examples that make sense to use are '\_\_all\_\_' (roll all instances as a single unit), 'logical_zone_name' (roll instances by zone), '\_\_name\_\_' (roll one instance at a time, the default if not specified). Note that '\_\_all\_\_' is required when performing a major version upgrade
              - `allow_inline_resize` (boolean) — optional
                Whether we allow changing the capacity of instances (default false). This is currently implemented by stopping, re-creating then starting the affected instance on its associated allocator when performing the changes. NOTES: This requires a round-trip through the allocation infrastructure of the active constructor, as it has to reserve the target capacity without over-committing
              - `skip_synced_flush` (boolean) — optional
                Whether to skip attempting to do a synced flush on the filesystem of the container (default: false), which is less safe but may be required if the container is unhealthy
              - `shard_init_wait_time` (integer) — optional
                The time, in seconds, to wait for shards that show no progress of initializing before rolling the next group (default: 10 minutes)
            - `grow_and_shrink` (GrowShrinkStrategyConfig) — optional
              A strategy that creates instances with the new plan, migrates data from the old instances, then shuts down the old instances. `GrowShrinkStrategyConfig` is safer than 'rolling' and ensures single node availability during a plan change, but can be a lot slower on larger clusters.
            - `rolling_grow_and_shrink` (RollingGrowShrinkStrategyConfig) — optional
              A strategy that creates new Elasticsearch instances, Kibana instances, and APM Servers with the new plan, then migrates the node data to minimize the amount of spare capacity.
            - `autodetect` (AutodetectStrategyConfig) — optional
              A strategy that lets constructor choose the most optimal way to execute the plan.
          - `plan_configuration` ({} AppSearchPlanControlConfiguration) — optional
            - `timeout` (integer) — optional
              The total timeout in seconds after which the plan is cancelled even if it is not complete. Defaults to 4x the max memory capacity per node (in MB)
            - `calm_wait_time` (integer) — optional
              This timeout determines how long to give a cluster after it responds to API calls before performing actual operations on it. It defaults to 5s
            - `move_instances` ([] InstanceMoveRequest) — optional
              - `from` (string) — required
                The instance id that is going to be moved
              - `to` ([] string) — optional
                An optional list of allocator ids to which the instance should be moved. If not specified then any available allocator can be used (including the current one if it is healthy)
              - `instance_down` (boolean) — optional
                Tells the infrastructure that the instance should be considered as permanently down when deciding how to migrate data to new nodes. If left blank then the system will automatically decide (currently: will treat the instances as up)
            - `move_allocators` ([] AllocatorMoveRequest) — optional
              - `from` (string) — required
                The allocator id off which all instances in the cluster should be moved
              - `to` ([] string) — optional
                An optional list of allocator ids to which the instance(s) should be moved. If not specified then any available allocator can be used (including the current one if it is healthy)
              - `allocator_down` (boolean) — optional
                Tells the infrastructure that all instances on the allocator should be considered as permanently down when deciding how to migrate data to new nodes. If left blank then the system will auto-decide (currently: will treat the allocator as up)
            - `reallocate_instances` (boolean) — optional
              If true (default: false) does not allow re-using any existing instances currently in the cluster, ie even unchanged instances will be re-created
            - `preferred_allocators` ([] string) — optional
              List of allocators on which instances are placed if possible (if not possible/not specified then any available allocator with space is used)
            - `preferred_allocator_tags` (map string to string) — optional
              Map containing allocators tags in form of key value pairs, increasing the likelihood during move requests for allocators with matching tags, to be selected as target allocators
            - `extended_maintenance` (boolean) — optional
              If true (default false), does not clear the maintenance flag (which prevents its API from being accessed except by the constructor) on new instances added until after a snapshot has been restored, otherwise, the maintenance flag is cleared once the new instances successfully join the new cluster
            - `cluster_reboot` (enum) — optional
              Set to 'forced' to force a reboot as part of the upgrade plan
              Values: `forced`
            - `override_failsafe` (boolean) — optional
              If false (the default), the plan fails if it determines that the request can result in unsafe operations. Setting this flag overrides some of these check restraints.
      - `settings` ({} AppSearchSettings) — optional
        The settings for the App Search.
        - `metadata` ({} ClusterMetadataSettings) — optional
          The top-level configuration settings for the Elasticsearch cluster.
          Same fields as `metadata` in `settings`
    - `enterprise_search` ([] EnterpriseSearchPayload) — optional
      A list of payloads for Enterprise Search creation.
      - `ref_id` (string) — required
        A locally-unique user-specified id for Enterprise Search
      - `elasticsearch_cluster_ref_id` (string) — required
        Alias to the Elasticsearch Cluster to attach Enterprise Search to
      - `display_name` (string) — optional
        The human readable name for the Enterprise Search cluster (default: takes the name of its Elasticsearch cluster)
      - `region` (string) — required
        The region where this resource exists
      - `plan` ({} EnterpriseSearchPlan) — required
        The plan for the Enterprise Search cluster.
        - `cluster_topology` ([] EnterpriseSearchTopologyElement) — optional
          - `node_type` ({} EnterpriseSearchNodeTypes) — optional
            Node types to enable for an Enterprise Search instance
            - `appserver` (boolean) — required
              Defines whether this instance should run as Application/API server
            - `worker` (boolean) — required
              Defines whether this instance should run as background worker
            - `connector` (boolean) — required
              Defines whether this instance should run as Connector
          - `instance_configuration_id` (string) — optional
            Controls the allocation of this topology element as well as allowed sizes and node_types. It needs to match the id of an existing instance configuration.
          - `instance_configuration_version` (integer) — optional
            The version of the Instance Configuration Id. If it is unset, the meaning depends on read vs writes. For deployment reads, it is equivalent to version 0 (or the IC is unversioned); for deployment creates and deployment template use, it is equivalent to 'the latest version'; and for deployment updates, it is equivalent to 'retain the current version'.
          - `size` ({} TopologySize) — optional
            Measured by the amount of a resource. The final cluster size is calculated using multipliers from the topology instance configuration.
            - `value` (integer) — required
              Amount of resource
            - `resource` (enum) — required
              Type of resource. In ESS the resource used should always be `memory`.
              Values: `memory`, `storage`
          - `zone_count` (integer) — optional
            number of zones in which nodes will be placed
          - `enterprise_search` ({} EnterpriseSearchConfiguration) — optional
            - `version` (string) — optional
              The version of the Enterprise Search cluster (must be one of the ECE supported versions, and won't work unless it matches the Elasticsearch version. Leave blank to auto-detect version.)
            - `docker_image` (string) — optional
              A docker URI that allows overriding of the default docker image specified for this version
            - `system_settings` ({} EnterpriseSearchSystemSettings) — optional
              This structure defines a curated subset of the Enterprise Search settings. (This field together with 'user_settings_override*' and  'user_settings*' defines the total set of Enterprise Search settings)
              - `elasticsearch_username` (string) — optional
                Optionally override the account within Enterprise Search - defaults to a system account that always exists (if specified, the password must also be specified). Note that this field is never returned from the API, it is write only.
              - `elasticsearch_password` (string) — optional
                Optionally override the account within Enterprise Search - defaults to a system account that always exists (if specified, the username must also be specified). Note that this field is never returned from the API, it is write only.
              - `secret_session_key` (string) — optional
                Optionally override the secret session key within Enterprise Search - defaults to the previously existing secretSession. Note that this field is never returned from the API, it is write only.
            - `user_settings_json` (object) — optional
              An arbitrary JSON object allowing (non-admin) cluster owners to set their parameters (only one of this and 'user_settings_yaml' is allowed), provided the parameters are on the allowlist and not on the denylist. (This field together with 'user_settings_override*' and 'system_settings' defines the total set of Enterprise Search settings)
            - `user_settings_yaml` (string) — optional
              An arbitrary YAML object allowing (non-admin) cluster owners to set their parameters (only one of this and 'user_settings_json' is allowed), provided the parameters are on the allowlist and not on the denylist. (This field together with 'user_settings_override*' and 'system_settings' defines the total set of Enterprise Search settings)
            - `user_settings_override_json` (object) — optional
              An arbitrary JSON object allowing ECE admins to set clusters' parameters (only one of this and 'user_settings_override_yaml' is allowed), i.e. in addition to the documented 'system_settings'. (This field together with 'system_settings' and 'user_settings*' defines the total set of Enterprise Search settings)
            - `user_settings_override_yaml` (string) — optional
              An arbitrary YAML object allowing ECE admins to set clusters' parameters (only one of this and 'user_settings_override_json' is allowed), i.e. in addition to the documented 'system_settings'. (This field together with 'system_settings' and 'user_settings*' defines the total set of Enterprise Search settings)
          - `allocator_filter` (object) — optional
          - `node_configuration` (string) — optional
          - `memory_per_node` (object) — optional
          - `node_count_per_zone` (object) — optional
        - `enterprise_search` ({} EnterpriseSearchConfiguration) — required
          Same fields as `enterprise_search` in `cluster_topology`
        - `transient` ({} TransientEnterpriseSearchPlanConfiguration) — optional
          Defines configuration parameters that control how the plan (i.e. consisting of the cluster topology and Enterprise Search settings) is applied
          - `strategy` ({} PlanStrategy) — optional
            The options for performing a plan change. Specify only one property each time. The default is `grow_and_shrink`.
            - `rolling` ({} RollingStrategyConfig) — optional
              Performs inline, rolling configuration changes that mutate existing containers. TIP: This is the fastest way to update a plan, but can fail for complex plan changes, such as topology changes. Also, this is less safe for configuration changes that leave a cluster in a non running state. NOTE: When you perform a major version upgrade, and 'group_by' is set to 'pass:macros[__all__]';, rolling is required.
              - `group_by` (string) — optional
                Specifies the grouping attribute to use when rolling several instances. Instances that share the same value for the provided attribute key are rolled together as a unit. Examples that make sense to use are '\_\_all\_\_' (roll all instances as a single unit), 'logical_zone_name' (roll instances by zone), '\_\_name\_\_' (roll one instance at a time, the default if not specified). Note that '\_\_all\_\_' is required when performing a major version upgrade
              - `allow_inline_resize` (boolean) — optional
                Whether we allow changing the capacity of instances (default false). This is currently implemented by stopping, re-creating then starting the affected instance on its associated allocator when performing the changes. NOTES: This requires a round-trip through the allocation infrastructure of the active constructor, as it has to reserve the target capacity without over-committing
              - `skip_synced_flush` (boolean) — optional
                Whether to skip attempting to do a synced flush on the filesystem of the container (default: false), which is less safe but may be required if the container is unhealthy
              - `shard_init_wait_time` (integer) — optional
                The time, in seconds, to wait for shards that show no progress of initializing before rolling the next group (default: 10 minutes)
            - `grow_and_shrink` (GrowShrinkStrategyConfig) — optional
              A strategy that creates instances with the new plan, migrates data from the old instances, then shuts down the old instances. `GrowShrinkStrategyConfig` is safer than 'rolling' and ensures single node availability during a plan change, but can be a lot slower on larger clusters.
            - `rolling_grow_and_shrink` (RollingGrowShrinkStrategyConfig) — optional
              A strategy that creates new Elasticsearch instances, Kibana instances, and APM Servers with the new plan, then migrates the node data to minimize the amount of spare capacity.
            - `autodetect` (AutodetectStrategyConfig) — optional
              A strategy that lets constructor choose the most optimal way to execute the plan.
          - `plan_configuration` ({} EnterpriseSearchPlanControlConfiguration) — optional
            - `timeout` (integer) — optional
              The total timeout in seconds after which the plan is cancelled even if it is not complete. Defaults to 4x the max memory capacity per node (in MB)
            - `calm_wait_time` (integer) — optional
              This timeout determines how long to give a cluster after it responds to API calls before performing actual operations on it. It defaults to 5s
            - `move_instances` ([] InstanceMoveRequest) — optional
              - `from` (string) — required
                The instance id that is going to be moved
              - `to` ([] string) — optional
                An optional list of allocator ids to which the instance should be moved. If not specified then any available allocator can be used (including the current one if it is healthy)
              - `instance_down` (boolean) — optional
                Tells the infrastructure that the instance should be considered as permanently down when deciding how to migrate data to new nodes. If left blank then the system will automatically decide (currently: will treat the instances as up)
            - `move_allocators` ([] AllocatorMoveRequest) — optional
              - `from` (string) — required
                The allocator id off which all instances in the cluster should be moved
              - `to` ([] string) — optional
                An optional list of allocator ids to which the instance(s) should be moved. If not specified then any available allocator can be used (including the current one if it is healthy)
              - `allocator_down` (boolean) — optional
                Tells the infrastructure that all instances on the allocator should be considered as permanently down when deciding how to migrate data to new nodes. If left blank then the system will auto-decide (currently: will treat the allocator as up)
            - `reallocate_instances` (boolean) — optional
              If true (default: false) does not allow re-using any existing instances currently in the cluster, i.e. even unchanged instances will be re-created
            - `preferred_allocators` ([] string) — optional
              List of allocators on which instances are placed if possible (if not possible/not specified then any available allocator with space is used)
            - `preferred_allocator_tags` (map string to string) — optional
              Map containing allocators tags in form of key value pairs, increasing the likelihood during move requests for allocators with matching tags, to be selected as target allocators
            - `extended_maintenance` (boolean) — optional
              If true (default false), does not clear the maintenance flag (which prevents its API from being accessed except by the constructor) on new instances added until after a snapshot has been restored, otherwise, the maintenance flag is cleared once the new instances successfully join the new cluster
            - `cluster_reboot` (enum) — optional
              Set to 'forced' to force a reboot as part of the upgrade plan
              Values: `forced`
            - `override_failsafe` (boolean) — optional
              If false (the default), the plan fails if it determines that the request can result in unsafe operations. Setting this flag overrides some of these check restraints.
      - `settings` ({} EnterpriseSearchSettings) — optional
        The settings for the Enterprise Search.
        - `metadata` ({} ClusterMetadataSettings) — optional
          The top-level configuration settings for the Elasticsearch cluster.
          Same fields as `metadata` in `settings`
    - `integrations_server` ([] IntegrationsServerPayload) — optional
      A list of payloads for Integrations Server creation.
      - `ref_id` (string) — required
        A locally-unique user-specified id for the Integrations Server
      - `elasticsearch_cluster_ref_id` (string) — required
        Alias to the Elasticsearch Cluster to attach the Integrations Server to
      - `display_name` (string) — optional
        The human readable name for the Integrations Server cluster (default: takes the name of its Elasticsearch cluster)
      - `region` (string) — required
        The region where this resource exists
      - `plan` ({} IntegrationsServerPlan) — required
        The plan for the Integrations Server.
        - `cluster_topology` ([] IntegrationsServerTopologyElement) — optional
          - `instance_configuration_id` (string) — optional
            Controls the allocation of this topology element as well as allowed sizes and node_types. It needs to match the id of an existing instance configuration.
          - `instance_configuration_version` (integer) — optional
            The version of the Instance Configuration Id. If it is unset, the meaning depends on read vs writes. For deployment reads, it is equivalent to version 0 (or the IC is unversioned); for deployment creates and deployment template use, it is equivalent to 'the latest version'; and for deployment updates, it is equivalent to 'retain the current version'.
          - `size` ({} TopologySize) — optional
            Measured by the amount of a resource. The final cluster size is calculated using multipliers from the topology instance configuration.
            - `value` (integer) — required
              Amount of resource
            - `resource` (enum) — required
              Type of resource. In ESS the resource used should always be `memory`.
              Values: `memory`, `storage`
          - `zone_count` (integer) — optional
            number of zones in which nodes will be placed
          - `integrations_server` ({} IntegrationsServerConfiguration) — optional
            The configuration options for the Integrations Server.
            - `version` (string) — optional
              The version of the Integrations Server cluster (must be one of the ECE supported versions, and won't work unless it matches the Integrations Server version. Leave blank to auto-detect version.)
            - `docker_image` (string) — optional
              A docker URI that allows overriding of the default docker image specified for this version
            - `system_settings` ({} IntegrationsServerSystemSettings) — optional
              A structure that defines a curated subset of the Integrations Server settings. 
TIP: To define the complete set of Integrations Server setting, use `IntegrationsSystemSettings` with `user_settings_override_` and `user_settings_`.
              - `elasticsearch_username` (string) — optional
                Optionally override the account within Integrations Server - defaults to a system account that always exists (if specified, the password must also be specified). Note that this field is never returned from the API, it is write only.
              - `elasticsearch_password` (string) — optional
                Optionally override the account within Integrations Server - defaults to a system account that always exists (if specified, the username must also be specified). Note that this field is never returned from the API, it is write only.
              - `secret_token` (string) — optional
                Optionally override the secret token within Integrations Server - defaults to the previously existing secretToken
              - `debug_enabled` (boolean) — optional
                Optionally enable debug mode for Integrations Server - defaults false
            - `user_settings_json` (object) — optional
              An arbitrary JSON object allowing (non-admin) cluster owners to set their parameters (only one of this and 'user_settings_yaml' is allowed), provided the parameters are on the allowlist and not on the denylist. (This field together with 'user_settings_override*' and 'system_settings' defines the total set of Integrations Server settings)
            - `user_settings_yaml` (string) — optional
              An arbitrary YAML object allowing (non-admin) cluster owners to set their parameters (only one of this and 'user_settings_json' is allowed), provided the parameters are on the allowlist and not on the denylist. (These field together with 'user_settings_override*' and 'system_settings' defines the total set of Integrations Server settings)
            - `user_settings_override_json` (object) — optional
              An arbitrary JSON object allowing ECE admins owners to set clusters' parameters (only one of this and 'user_settings_override_yaml' is allowed), ie in addition to the documented 'system_settings'. (This field together with 'system_settings' and 'user_settings*' defines the total set of Integrations Server settings)
            - `user_settings_override_yaml` (string) — optional
              An arbitrary YAML object allowing ECE admins owners to set clusters' parameters (only one of this and 'user_settings_override_json' is allowed), ie in addition to the documented 'system_settings'. (This field together with 'system_settings' and 'user_settings*' defines the total set of Integrations Server settings)
            - `mode` (enum) — optional
              The mode the Integrations Server is operating in.
              Values: `standalone`, `managed`
        - `integrations_server` ({} IntegrationsServerConfiguration) — required
          The configuration options for the Integrations Server.
          Same fields as `integrations_server` in `cluster_topology`
        - `transient` ({} TransientIntegrationsServerPlanConfiguration) — optional
          Defines the configuration parameters that control how the plan is applied. For example, the Elasticsearch cluster topology and Integrations Server settings.
          - `strategy` ({} PlanStrategy) — optional
            The options for performing a plan change. Specify only one property each time. The default is `grow_and_shrink`.
            - `rolling` ({} RollingStrategyConfig) — optional
              Performs inline, rolling configuration changes that mutate existing containers. TIP: This is the fastest way to update a plan, but can fail for complex plan changes, such as topology changes. Also, this is less safe for configuration changes that leave a cluster in a non running state. NOTE: When you perform a major version upgrade, and 'group_by' is set to 'pass:macros[__all__]';, rolling is required.
              - `group_by` (string) — optional
                Specifies the grouping attribute to use when rolling several instances. Instances that share the same value for the provided attribute key are rolled together as a unit. Examples that make sense to use are '\_\_all\_\_' (roll all instances as a single unit), 'logical_zone_name' (roll instances by zone), '\_\_name\_\_' (roll one instance at a time, the default if not specified). Note that '\_\_all\_\_' is required when performing a major version upgrade
              - `allow_inline_resize` (boolean) — optional
                Whether we allow changing the capacity of instances (default false). This is currently implemented by stopping, re-creating then starting the affected instance on its associated allocator when performing the changes. NOTES: This requires a round-trip through the allocation infrastructure of the active constructor, as it has to reserve the target capacity without over-committing
              - `skip_synced_flush` (boolean) — optional
                Whether to skip attempting to do a synced flush on the filesystem of the container (default: false), which is less safe but may be required if the container is unhealthy
              - `shard_init_wait_time` (integer) — optional
                The time, in seconds, to wait for shards that show no progress of initializing before rolling the next group (default: 10 minutes)
            - `grow_and_shrink` (GrowShrinkStrategyConfig) — optional
              A strategy that creates instances with the new plan, migrates data from the old instances, then shuts down the old instances. `GrowShrinkStrategyConfig` is safer than 'rolling' and ensures single node availability during a plan change, but can be a lot slower on larger clusters.
            - `rolling_grow_and_shrink` (RollingGrowShrinkStrategyConfig) — optional
              A strategy that creates new Elasticsearch instances, Kibana instances, and APM Servers with the new plan, then migrates the node data to minimize the amount of spare capacity.
            - `autodetect` (AutodetectStrategyConfig) — optional
              A strategy that lets constructor choose the most optimal way to execute the plan.
          - `plan_configuration` ({} IntegrationsServerPlanControlConfiguration) — optional
            The plan control configuration options for the Integrations Server.
            - `timeout` (integer) — optional
              The total timeout in seconds after which the plan is cancelled even if it is not complete. Defaults to 4x the max memory capacity per node (in MB)
            - `calm_wait_time` (integer) — optional
              This timeout determines how long to give a cluster after it responds to API calls before performing actual operations on it. It defaults to 5s
            - `move_instances` ([] InstanceMoveRequest) — optional
              - `from` (string) — required
                The instance id that is going to be moved
              - `to` ([] string) — optional
                An optional list of allocator ids to which the instance should be moved. If not specified then any available allocator can be used (including the current one if it is healthy)
              - `instance_down` (boolean) — optional
                Tells the infrastructure that the instance should be considered as permanently down when deciding how to migrate data to new nodes. If left blank then the system will automatically decide (currently: will treat the instances as up)
            - `move_allocators` ([] AllocatorMoveRequest) — optional
              - `from` (string) — required
                The allocator id off which all instances in the cluster should be moved
              - `to` ([] string) — optional
                An optional list of allocator ids to which the instance(s) should be moved. If not specified then any available allocator can be used (including the current one if it is healthy)
              - `allocator_down` (boolean) — optional
                Tells the infrastructure that all instances on the allocator should be considered as permanently down when deciding how to migrate data to new nodes. If left blank then the system will auto-decide (currently: will treat the allocator as up)
            - `reallocate_instances` (boolean) — optional
              If true (default: false) does not allow re-using any existing instances currently in the cluster, ie even unchanged instances will be re-created
            - `preferred_allocators` ([] string) — optional
              List of allocators on which instances are placed if possible (if not possible/not specified then any available allocator with space is used)
            - `preferred_allocator_tags` (map string to string) — optional
              Map containing allocators tags in form of key value pairs, increasing the likelihood during move requests for allocators with matching tags, to be selected as target allocators
            - `extended_maintenance` (boolean) — optional
              If true (default false), does not clear the maintenance flag (which prevents its API from being accessed except by the constructor) on new instances added until after a snapshot has been restored, otherwise, the maintenance flag is cleared once the new instances successfully join the new cluster
            - `cluster_reboot` (enum) — optional
              Set to 'forced' to force a reboot as part of the upgrade plan
              Values: `forced`
            - `override_failsafe` (boolean) — optional
              If false (the default), the plan fails if it determines that the request can result in unsafe operations. Setting this flag overrides some of these check restraints.
      - `settings` ({} IntegrationsServerSettings) — optional
        The settings for the Integrations Server.
        - `metadata` ({} ClusterMetadataSettings) — optional
          The top-level configuration settings for the Elasticsearch cluster.
          Same fields as `metadata` in `settings`
  - `settings` ({} DeploymentCreateSettings) — optional
    Additional configuration for the new deployment object.
    - `traffic_filter_settings` ({} TrafficFilterSettings) — optional
      The configuration settings for the traffic filter.
      - `rulesets` ([] string) — required
        IDs of the traffic filter rulesets
    - `observability` ({} DeploymentObservabilitySettings) — optional
      The observability settings for a deployment
      - `logging` ({} DeploymentLoggingSettings) — optional
        The logging settings for a deployment
        - `destination` ({} ObservabilityAbsoluteDeployment) — required
          The destination to send logs and metrics to
          - `deployment_id` (string) — required
            The deployment to send logs and/or metrics to. Contains either the deployment's ID or 'self'.
          - `ref_id` (string) — optional
            RefId of the Elasticsearch cluster to send logs and/or metrics to. If not specified, refId is resolved automatically as long as the destination deployment contains a single Elasticsearch resource.
      - `metrics` ({} DeploymentMetricsSettings) — optional
        The metrics settings for a deployment
        - `destination` ({} ObservabilityAbsoluteDeployment) — required
          The destination to send logs and metrics to
          - `deployment_id` (string) — required
            The deployment to send logs and/or metrics to. Contains either the deployment's ID or 'self'.
          - `ref_id` (string) — optional
            RefId of the Elasticsearch cluster to send logs and/or metrics to. If not specified, refId is resolved automatically as long as the destination deployment contains a single Elasticsearch resource.
        - `force_legacy_monitoring` (boolean) — optional
          Set to true to force the deployment to use legacy monitoring instead of Metricbeat-based monitoring. Only available for versions lower than 9.0.
    - `byok` ({} ByokSettings) — optional
      Information required to create a Bring Your Own Key (BYOK) deployment.
      - `key_resource_path` (string) — required
        Key path (i.e arn:aws:kms:us-east-1:1234567890:key/12345678-0000-0000-0000-000000000000).
    - `autoscaling_enabled` (boolean) — optional
      Enable autoscaling for this deployment.
    - `solution_type` (string) — optional
      An optional string that declares the deployment's expected application. Example supported values are: elasticsearch, observability, security.
  - `metadata` ({} DeploymentCreateMetadata) — optional
    Additional information about the new deployment object.
    - `system_owned` (boolean) — optional
      Indicates if a deployment is system owned (restricts the set of operations that can be performed on it)
    - `tags` ([] MetadataItem) — optional
      Arbitrary user-defined metadata associated with this deployment
      - `key` (string) — required
        The metadata field name
      - `value` (string) — required
        The metadata value
  - `alias` (string) — optional
    A user-defined alias to use in place of Cluster IDs for user-friendly URLs
  - `region` (string) — optional
    Identifier of the region to be used as the default for all the resources of the deployment
  - `version` (string) — optional
    The version for all the resources of the deployment (must be one of the supported versions). Defaults to the latest version if not specified.
- `system_owned` (boolean) — optional
  Whether or not if this is system owned template.
- `metadata` ([] MetadataItem) — optional
  Optional arbitrary metadata to associate with this template.
  - `key` (string) — required
    The metadata field name
  - `value` (string) — required
    The metadata value
- `order` (integer) — optional
  Determines the order in which this template should be returned when listed. Templates are returned in ascending order. If not specified, then the template willbe appended to the end of the list.
- `hidden` (boolean) — optional
  Whether or not the deployment template is hidden by default.
- `min_version` (string) — optional
  Minimum stack version required by this template, if any.
- `template_category_id` (string) — optional
  Provider and version agnostic template identifier used for grouping related template types.
- `kibana_deeplink` ([] KibanaDeeplink) — optional
  The Kibana Deeplink for this type of deployment.
  - `semver` (string) — required
    Semver condition when to apply the URI.
  - `uri` (string) — required
    URI to which the user should be directed.

## Responses

#### `200`

The request was valid (used when validate_only is true).

`application/json`

- `id` (string)
  The ID
#### `201`

The deployment definition was valid and the template has been created.

`application/json`

- `id` (string)
  The ID
#### `400`

The requested region is not supported. (code: `templates.region_not_found`)

`application/json`

- `errors` ([] BasicFailedReplyElement)
  A list of errors that occurred in the failing request
  - `code` (string)
    A structured code representing the error type that occurred
  - `message` (string)
    A human readable message describing the error that occurred
  - `fields` ([] string)
    If the error can be tied to a specific field or fields in the user request, this lists those fields
##### Response Headers

- `x-cloud-error-codes` (enum)
  The error codes associated with the response

#### `401`

The user is not authorized to access requested region. (code: `templates.region_not_allowed`)

`application/json`

- `errors` ([] BasicFailedReplyElement)
  A list of errors that occurred in the failing request
  - `code` (string)
    A structured code representing the error type that occurred
  - `message` (string)
    A human readable message describing the error that occurred
  - `fields` ([] string)
    If the error can be tied to a specific field or fields in the user request, this lists those fields
##### Response Headers

- `x-cloud-error-codes` (enum)
  The error codes associated with the response

## Code Examples

#### Console

```console
POST /deployments/templates?region={region}
```

#### curl

```curl
curl -X POST "/deployments/templates?region={region}"
```

