Create rule APIedit

Create Kibana rules.


POST <kibana host>:<port>/api/alerting/rule/<id>

POST <kibana host>:<port>/s/<space_id>/api/alerting/rule/<id>


You must have all privileges for the appropriate Kibana features, depending on the consumer and rule_type_id of the rules you’re creating. For example, the Management > Stack Rules feature, Analytics > Discover and Machine Learning features, Observability, and Security features. If the rule has actions, you must also have read privileges for the Management > Actions and Connectors feature. For more details, refer to Feature privileges.


  • This API supports only token-based authentication.
  • When you create a rule, it identifies which roles you have at that point in time. Thereafter, when the rule performs queries, it uses those security privileges. If a user with different privileges updates the rule, its behavior might change.

Path parametersedit

(Optional, string) Specifies a UUID v1 or v4 to use instead of a randomly generated ID.
(Optional, string) An identifier for the space. If space_id is not provided in the URL, the default space is used.

Request bodyedit


(Optional, object array) An array of action objects.

Properties of the action objects:
(Required, string) Grouping actions is recommended for escalations for different types of alerts. If you don’t need this, set this value to default.
(Required, string) The ID of the connector saved object.
(Required, object) The map to the params that the connector type will receive. ` params` are handled as Mustache templates and passed a default set of context.
(Required, string) The name of the application or feature that owns the rule. For example: alerts, apm, discover, infrastructure, logs, metrics, ml, monitoring, securitySolution, siem, stackAlerts, or uptime.
(Optional, boolean) Indicates if you want to run the rule on an interval basis after it is created.
(Required, string) A name to reference and search.
(Required, string) The condition for throttling the notification: onActionGroupChange, onActiveAlert, or onThrottleInterval.
(Required, object) The parameters to pass to the rule type executor params value. This will also validate against the rule type params validator, if defined.
(Required, string) The ID of the rule type that you want to call when the rule is scheduled to run. For example, .es-query, .index-threshold, logs.alert.document.count, monitoring_alert_cluster_health, siem.thresholdRule, or For more information, refer to Rule types.

(Required, object) The schedule specifying when this rule should be run, using one of the available schedule formats.

Schedule formats

A schedule is structured such that the key specifies the format you wish to use and its value specifies the schedule.

We currently support the interval format which specifies the interval in seconds, minutes, hours or days at which the rule should run. For example: { "interval": "10s" }, { "interval": "5m" }, { "interval": "1h" }, or { "interval": "1d" }.

There are plans to support multiple other schedule formats in the near future.

(Optional, string array) A list of keywords to reference and search.
(Optional, string) How often this rule should fire the same actions. This will prevent the rule from sending out the same notification over and over. For example, if a rule with a schedule of 1 minute stays in a triggered state for 90 minutes, setting a throttle of 10m or 1h will prevent it from sending 90 notifications during this period.

Response codesedit

Indicates a successful call.


Create a rule that has actions associated with a server log connector:

POST api/alerting/rule
         "group":"threshold met",
            "message":"alert '{{alertName}}' is active for group '{{}}':\n\n- Value: {{context.value}}\n- Conditions Met: {{context.conditions}} over {{params.timeWindowSize}}{{params.timeWindowUnit}}\n- Timestamp: {{}}"
   "name":"my alert"

The API returns the following:

  "id": "41893910-6bca-11eb-9e0d-85d233e3ee35",
  "consumer": "alerts",
  "tags": ["cpu"],
  "name": "my alert",
  "enabled": true,
  "throttle": null,
  "schedule": {"interval": "1m"},
  "params": {
    "aggType": "avg",
    "termSize": 6,
    "thresholdComparator": ">",
    "timeWindowSize": 5,
    "timeWindowUnit": "m",
    "groupBy": "top",
    "threshold": [1000],
    "index": [".test-index"],
    "timeField": "@timestamp",
    "aggField": "sheet.version",
    "termField": "name.keyword"
  "rule_type_id": ".index-threshold",
  "scheduled_task_id": "425b0800-6bca-11eb-9e0d-85d233e3ee35",
  "created_by": "elastic",
  "updated_by": "elastic",
  "created_at": "2022-06-08T17:20:31.632Z",
  "updated_at": "2022-06-08T17:20:31.632Z",
  "api_key_owner": "elastic",
  "notify_when": "onActionGroupChange",
  "mute_all": false,
  "muted_alert_ids": [],
  "execution_status": {
    "last_execution_date": "2022-06-08T17:20:31.632Z",
    "status": "pending"
  "actions": [
      "group": "threshold met",
      "id": "dceeb5d0-6b41-11eb-802b-85b0c1bc8ba2",
      "params": {
        "level": "info",
        "message": "alert {{alertName}} is active for group {{}}:\n\n- Value: {{context.value}}\n- Conditions Met: {{context.conditions}} over {{params.timeWindowSize}}{{params.timeWindowUnit}}\n- Timestamp: {{}}"
      "connector_type_id": ".server-log"