def get_features(
        self,
        *,
        error_trace: t.Optional[bool] = None,
        filter_path: t.Optional[t.Union[str, t.Sequence[str]]] = None,
        human: t.Optional[bool] = None,
        master_timeout: t.Optional[t.Union[str, t.Literal[-1], t.Literal[0]]] = None,
        pretty: t.Optional[bool] = None,
    ) -> ObjectApiResponse[t.Any]:
        """
        .. raw:: html

          <p>Get the features.
          Get a list of features that can be included in snapshots using the <code>feature_states</code> field when creating a snapshot.
          You can use this API to determine which feature states to include when taking a snapshot.
          By default, all feature states are included in a snapshot if that snapshot includes the global state, or none if it does not.</p>
          <p>A feature state includes one or more system indices necessary for a given feature to function.
          In order to ensure data integrity, all system indices that comprise a feature state are snapshotted and restored together.</p>
          <p>The features listed by this API are a combination of built-in features and features defined by plugins.
          In order for a feature state to be listed in this API and recognized as a valid feature state by the create snapshot API, the plugin that defines that feature must be installed on the master node.</p>


        `<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-features-get-features>`_

        :param master_timeout: Period to wait for a connection to the master node.
        """
        __path_parts: t.Dict[str, str] = {}
        __path = "/_features"
        __query: t.Dict[str, t.Any] = {}
        if error_trace is not None:
            __query["error_trace"] = error_trace
        if filter_path is not None:
            __query["filter_path"] = filter_path
        if human is not None:
            __query["human"] = human
        if master_timeout is not None:
            __query["master_timeout"] = master_timeout
        if pretty is not None:
            __query["pretty"] = pretty
        __headers = {"accept": "application/json"}
        return self.perform_request(  # type: ignore[return-value]
            "GET",
            __path,
            params=__query,
            headers=__headers,
            endpoint_id="features.get_features",
            path_parts=__path_parts,
        )

        .. raw:: html

          <p>Get the features.
          Get a list of features that can be included in snapshots using the <code>feature_states</code> field when creating a snapshot.
          You can use this API to determine which feature states to include when taking a snapshot.
          By default, all feature states are included in a snapshot if that snapshot includes the global state, or none if it does not.</p>
          <p>A feature state includes one or more system indices necessary for a given feature to function.
          In order to ensure data integrity, all system indices that comprise a feature state are snapshotted and restored together.</p>
          <p>The features listed by this API are a combination of built-in features and features defined by plugins.
          In order for a feature state to be listed in this API and recognized as a valid feature state by the create snapshot API, the plugin that defines that feature must be installed on the master node.</p>


        `<https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-features-get-features>`_

        :param master_timeout: Period to wait for a connection to the master node.
        
elasticsearch/_sync/client/features.py