[role="xpack"]
[testenv="basic"]
[[usage-api]]
== Usage API

Provides usage information about the installed {xpack} features.

[discrete]
[[usage-api-request]]
=== {api-request-title}

`GET /_xpack/usage`

[discrete]
[[usage-api-prereqs]]
=== {api-prereq-title}

* If the {es} {security-features} are enabled, you must have the `monitor` or
`manage` <<privileges-list-cluster,cluster privilege>> to use this API.

[discrete]
[[usage-api-desc]]
=== {api-description-title}

This API provides information about which features are currently enabled and
available under the current license and some usage statistics.

[discrete]
[[usage-api-query-parms]]
=== {api-query-parms-title}

include::{es-repo-dir}/rest-api/common-parms.asciidoc[tag=master-timeout]

[discrete]
[[usage-api-example]]
=== {api-examples-title}

[source,console]
------------------------------------------------------------
GET /_xpack/usage
------------------------------------------------------------
// TEST[s/usage/usage?filter_path=-watcher.execution.actions.logging*/]
// This response filter removes watcher logging results if they are included
// to avoid errors in the CI builds.

[source,console-result]
------------------------------------------------------------
{
  "security" : {
    "available" : true,
    "enabled" : false
  },
  "monitoring" : {
    "available" : true,
    "enabled" : true,
    "collection_enabled" : false,
    "enabled_exporters" : {
      "local" : 1
    }
  },
  "watcher" : {
      "available" : true,
      "enabled" : true,
      "execution" : {
        "actions" : {
          "_all" : {
            "total" : 0,
            "total_time_in_ms" : 0
          }
        }
      },
    "watch" : {
      "input" : {
        "_all" : {
          "total" : 0,
          "active" : 0
        }
      },
      "trigger" : {
        "_all" : {
          "total" : 0,
          "active" : 0
        }
      }
    },
    "count" : {
      "total" : 0,
      "active" : 0
    }
  },
  "graph" : {
    "available" : true,
    "enabled" : true
  },
  "ml" : {
    "available" : true,
    "enabled" : true,
    "jobs" : {
      "_all" : {
        "count" : 0,
        "detectors" : {
          ...
        },
        "created_by" : { },
        "model_size" : {
          ...
        },
        "forecasts" : {
          "total" : 0,
          "forecasted_jobs" : 0
        }
      }
    },
    "datafeeds" : {
      "_all" : {
        "count" : 0
      }
    },
    "data_frame_analytics_jobs" : {
      "_all" : {
        "count" : 0
      },
      "analysis_counts": { },
      "memory_usage": {
        "peak_usage_bytes": {
          "min": 0.0,
          "max": 0.0,
          "avg": 0.0,
          "total": 0.0
        }
      }
    },
    "inference" : {
      "ingest_processors" : {
        "_all" : {
          "num_docs_processed" : {
            "max" : 0,
            "sum" : 0,
            "min" : 0
          },
          "pipelines" : {
            "count" : 0
          },
          "num_failures" : {
            "max" : 0,
            "sum" : 0,
            "min" : 0
          },
          "time_ms" : {
            "max" : 0,
            "sum" : 0,
            "min" : 0
          }
        }
      },
      "trained_models" : {
        "_all" : {
          "count" : 0
        },
        "count": {
          "total": 1,
          "classification": 0,
          "regression": 0,
          "prepackaged": 1,
          "other": 0
        },
        "estimated_heap_memory_usage_bytes": {
          "min": 0.0,
          "max": 0.0,
          "avg": 0.0,
          "total": 0.0
        },
        "estimated_operations": {
          "min": 0.0,
          "max": 0.0,
          "avg": 0.0,
          "total": 0.0
        }
      }
    },
    "node_count" : 1
  },
  "logstash" : {
    "available" : true,
    "enabled" : true
  },
  "eql" : {
    "available" : true,
    "enabled" : true
  },
  "sql" : {
    "available" : true,
    "enabled" : true,
    "features" : {
      "having" : 0,
      "subselect" : 0,
      "limit" : 0,
      "orderby" : 0,
      "where" : 0,
      "join" : 0,
      "groupby" : 0,
      "command" : 0,
      "local" : 0
    },
    "queries" : {
      "rest" : {
        "total" : 0,
        "paging" : 0,
        "failed" : 0
      },
      "cli" : {
        "total" : 0,
        "paging" : 0,
        "failed" : 0
      },
      "canvas" : {
        "total" : 0,
        "paging" : 0,
        "failed" : 0
      },
      "odbc" : {
        "total" : 0,
        "paging" : 0,
        "failed" : 0
      },
      "jdbc" : {
        "total" : 0,
        "paging" : 0,
        "failed" : 0
      },
      "odbc32" : {
        "total" : 0,
        "paging" : 0,
        "failed" : 0
      },
      "odbc64" : {
        "total" : 0,
        "paging" : 0,
        "failed" : 0
      },
      "_all" : {
        "total" : 0,
        "paging" : 0,
        "failed" : 0
      },
      "translate" : {
        "count" : 0
      }
    }
  },
  "rollup" : {
    "available" : true,
    "enabled" : true
  },
  "ilm" : {
    "policy_count" : 3,
    "policy_stats" : [
      ...
    ]
  },
  "slm" : {
    "available" : true,
    "enabled" : true
  },
  "ccr" : {
    "available" : true,
    "enabled" : true,
    "follower_indices_count" : 0,
    "auto_follow_patterns_count" : 0
  },
  "enrich" : {
    "available" : true,
    "enabled" : true
  },
  "transform" : {
    "available" : true,
    "enabled" : true
  },
  "vectors" : {
    "available" : true,
    "enabled" : true,
    "dense_vector_fields_count" : 0,
    "dense_vector_dims_avg_count" : 0,
    "sparse_vector_fields_count" : 0
  },
  "voting_only" : {
    "available" : true,
    "enabled" : true
  },
  "searchable_snapshots" : {
    "available" : true,
    "enabled" : true,
    "indices_count" : 0,
    "full_copy_indices_count" : 0,
    "shared_cache_indices_count" : 0
  },
  "frozen_indices" : {
    "available" : true,
    "enabled" : true,
    "indices_count" : 0
  },
  "spatial" : {
    "available" : true,
    "enabled" : true
  },
  "analytics" : {
    "available" : true,
    "enabled" : true,
    "stats": {
      "boxplot_usage" : 0,
      "top_metrics_usage" : 0,
      "normalize_usage" : 0,
      "cumulative_cardinality_usage" : 0,
      "t_test_usage" : 0,
      "rate_usage" : 0,
      "string_stats_usage" : 0,
      "moving_percentiles_usage" : 0,
      "multi_terms_usage" : 0
    }
  },
  "data_streams" : {
    "available" : true,
    "enabled" : true,
    "data_streams" : 0,
    "indices_count" : 0
  },
  "data_tiers" : {
    "available" : true,
    "enabled" : true,
    "data_warm" : {
      "node_count" : 0,
      "index_count" : 0,
      "total_shard_count" : 0,
      "primary_shard_count" : 0,
      "doc_count" : 0,
      "total_size_bytes" : 0,
      "primary_size_bytes" : 0,
      "primary_shard_size_avg_bytes" : 0,
      "primary_shard_size_median_bytes" : 0,
      "primary_shard_size_mad_bytes" : 0
    },
    "data_frozen" : {
      "node_count" : 1,
      "index_count" : 0,
      "total_shard_count" : 0,
      "primary_shard_count" : 0,
      "doc_count" : 0,
      "total_size_bytes" : 0,
      "primary_size_bytes" : 0,
      "primary_shard_size_avg_bytes" : 0,
      "primary_shard_size_median_bytes" : 0,
      "primary_shard_size_mad_bytes" : 0
    },
    "data_cold" : {
      "node_count" : 0,
      "index_count" : 0,
      "total_shard_count" : 0,
      "primary_shard_count" : 0,
      "doc_count" : 0,
      "total_size_bytes" : 0,
      "primary_size_bytes" : 0,
      "primary_shard_size_avg_bytes" : 0,
      "primary_shard_size_median_bytes" : 0,
      "primary_shard_size_mad_bytes" : 0
    },
    "data_content" : {
      "node_count" : 0,
      "index_count" : 0,
      "total_shard_count" : 0,
      "primary_shard_count" : 0,
      "doc_count" : 0,
      "total_size_bytes" : 0,
      "primary_size_bytes" : 0,
      "primary_shard_size_avg_bytes" : 0,
      "primary_shard_size_median_bytes" : 0,
      "primary_shard_size_mad_bytes" : 0
    },
    "data_hot" : {
      "node_count" : 0,
      "index_count" : 0,
      "total_shard_count" : 0,
      "primary_shard_count" : 0,
      "doc_count" : 0,
      "total_size_bytes" : 0,
      "primary_size_bytes" : 0,
      "primary_shard_size_avg_bytes" : 0,
      "primary_shard_size_median_bytes" : 0,
      "primary_shard_size_mad_bytes" : 0
    }
  },
  "aggregate_metric" : {
    "available" : true,
    "enabled" : true
  }
}
------------------------------------------------------------
// TESTRESPONSE[s/"detectors" : \{[^\}]*\},/"detectors" : $body.$_path,/]
// TESTRESPONSE[s/"model_size" : \{[^\}]*\},/"model_size" : $body.$_path,/]
// TESTRESPONSE[s/"eql" : \{[^\}]*\},/"eql" : $body.$_path,/]
// TESTRESPONSE[s/"ilm" : \{[^\}]*\},/"ilm" : $body.$_path,/]
// TESTRESPONSE[s/"slm" : \{[^\}]*\},/"slm" : $body.$_path,/]
// TESTRESPONSE[s/ : true/ : $body.$_path/]
// TESTRESPONSE[s/ : false/ : $body.$_path/]
// TESTRESPONSE[s/ : (\-)?[0-9]+/ : $body.$_path/]

// These replacements do a few things:
// 1. Handling eql, which is disabled by default on release builds and enabled
//    everywhere else during the initial implementation phase until its release
// 2. Ignore the contents of the `ilm` and `slm` objects because they don't know
//    all of the policies that will be in them.
// 3. Ignore the contents of the `analytics` object because it might contain
//    additional stats
// 4. All of the numbers and strings on the right hand side of *every* field in
//    the response are ignored. So we're really only asserting things about the
//    the shape of this response, not the values in it.
