[role="xpack"]
[[watcher-api-put-watch]]
=== Put watch API
++++
Put watch
++++
Either registers a new watch in {watcher} or updates an existing one.
[[watcher-api-put-watch-request]]
==== {api-request-title}
`PUT _watcher/watch/`
[[watcher-api-put-watch-prereqs]]
==== {api-prereq-title}
* You must have `manage_watcher` cluster privileges to use this API. For more
information, see {stack-ov}/security-privileges.html[Security privileges].
[[watcher-api-put-watch-desc]]
==== {api-description-title}
When a watch is registered, a new document that represents the watch is added to
the `.watches` index and its trigger is immediately registered with the relevant
trigger engine. Typically for the `schedule` trigger, the scheduler is the
trigger engine.
IMPORTANT: You must use {kib} or this API to create a watch. Do not put a watch
directly to the `.watches` index using the Elasticsearch index API.
If {es} {security-features} are enabled, do not give users `write`
privileges on the `.watches` index.
When adding a watch you can also define its initial
{stack-ov}/how-watcher-works.html#watch-active-state[active state]. You do that
by setting the `active` parameter.
[[watcher-api-put-watch-security]]
===== Security integration
When {es} {security-features} are enabled, your watch can index or search only
on indices for which the user that stored the watch has privileges. If the user
is able to read index `a`, but not index `b`, the same will apply, when the watch
is executed.
[[watcher-api-put-watch-path-params]]
==== {api-path-parms-title}
``::
(Required, string) Identifier for the watch.
[[watcher-api-put-watch-query-params]]
==== {api-query-parms-title}
`active`::
(Optional, boolean) Defines whether the watch is active or inactive by default.
The default value is `true`, which means the watch is active by default.
[[watcher-api-put-watch-request-body]]
==== {api-request-body-title}
A watch has the following fields:
[options="header"]
|======
| Name | Description
| `trigger` | The {stack-ov}/trigger.html[trigger] that defines when
the watch should run.
| `input` | The {stack-ov}/input.html[input] that defines the input
that loads the data for the watch.
| `condition` | The {stack-ov}/condition.html[condition] that defines if
the actions should be run.
| `actions` | The list of {stack-ov}/actions.html[actions] that will be
run if the condition matches
| `metadata` | Metadata json that will be copied into the history entries.
| `throttle_period` | The minimum time between actions being run, the default
for this is 5 seconds. This default can be changed in the
config file with the setting
`xpack.watcher.throttle.period.default_period`. If both
this value and the `throttle_period_in_millis` parameter
are specified, {watcher} uses the last parameter
included in the request.
| `throttle_period_in_millis` | Minimum time in milliseconds between actions
being run. Defaults to `5000`. If both this
value and the `throttle_period` parameter are
specified, {watcher} uses the last parameter
included in the request.
|======
//[[watcher-api-put-watch-response-body]]
//==== {api-response-body-title}
//[[watcher-api-put-watch-response-codes]]
//==== {api-response-codes-title}
[[watcher-api-put-watch-example]]
==== {api-examples-title}
The following example adds a watch with the `my-watch` id that has the following
characteristics:
* The watch schedule triggers every minute.
* The watch search input looks for any 404 HTTP responses that occurred in the
last five minutes.
* The watch condition checks if any search hits where found.
* When found, the watch action sends an email to an administrator.
[source,console]
--------------------------------------------------
PUT _watcher/watch/my-watch
{
"trigger" : {
"schedule" : { "cron" : "0 0/1 * * * ?" }
},
"input" : {
"search" : {
"request" : {
"indices" : [
"logstash*"
],
"body" : {
"query" : {
"bool" : {
"must" : {
"match": {
"response": 404
}
},
"filter" : {
"range": {
"@timestamp": {
"from": "{{ctx.trigger.scheduled_time}}||-5m",
"to": "{{ctx.trigger.triggered_time}}"
}
}
}
}
}
}
}
}
},
"condition" : {
"compare" : { "ctx.payload.hits.total" : { "gt" : 0 }}
},
"actions" : {
"email_admin" : {
"email" : {
"to" : "admin@domain.host.com",
"subject" : "404 recently encountered"
}
}
}
}
--------------------------------------------------
When you add a watch you can also define its initial
{stack-ov}/how-watcher-works.html#watch-active-state[active state]. You do that
by setting the `active` parameter. The following command adds a watch and sets
it to be inactive by default:
[source,js]
--------------------------------------------------
PUT _watcher/watch/my-watch?active=false
--------------------------------------------------
NOTE: If you omit the `active` parameter, the watch is active by default.