---
title: "Create a monitor"
method: POST
path: "/api/synthetics/monitors"
tags: ["synthetics"]
---

# Create a monitor

`POST /api/synthetics/monitors`

**Spaces method and path for this operation:**

<div><span class="operation-verb post">post</span>&nbsp;<span class="operation-path">/s/{space_id}/api/synthetics/monitors</span></div>

Refer to [Spaces](https://www.elastic.co/docs/deploy-manage/manage-spaces) for more information.

Create a new monitor with the specified attributes. A monitor can be one of the following types: HTTP, TCP, ICMP, or Browser. The required and default fields may vary based on the monitor type.
You must have `all` privileges for the Synthetics feature in the Observability section of the Kibana feature privileges.

## Request body

- union — The request body should contain the attributes of the monitor you want to create. The required and default fields differ depending on the monitor type.
  - SyntheticsBrowserMonitorFields
    - `alert` object — The alert configuration. The default is `{ status: { enabled: true }, tls: { enabled: true } }`.
    - `enabled` boolean — Specify whether the monitor is enabled.
    - `labels` object — Key-value pairs of labels to associate with the monitor. Labels can be used for filtering and grouping monitors.
    - `locations` string[] — The location to deploy the monitor. Monitors can be deployed in multiple locations so that you can detect differences in availability and response times across those locations. To list available locations you can: - Run the `elastic-synthetics locations` command with the deployment's Kibana URL. - Go to *Synthetics > Management* and click *Create monitor*. Locations will be listed in *Locations*.
    - `name` string, required — The monitor name.
    - `namespace` string — The namespace field should be lowercase and not contain spaces. The namespace must not include any of the following characters: `*`, `\`, `/`, `?`, `"`, `<`, `>`, `|`, whitespace, `,`, `#`, `:`, or `-`.
    - `params` string — The monitor parameters.
    - `private_locations` string[] — The private locations to which the monitors will be deployed. These private locations refer to locations hosted and managed by you, whereas `locations` are hosted by Elastic. You can specify a private location using the location's name. To list available private locations you can: - Run the `elastic-synthetics locations` command with the deployment's Kibana URL. - Go to *Synthetics > Settings* and click *Private locationsr*. Private locations will be listed in the table. > info > You can provide `locations` or `private_locations` or both. At least one is required.
    - `retest_on_failure` boolean — Turn retesting for when a monitor fails on or off. By default, monitors are automatically retested if the monitor goes from "up" to "down". If the result of the retest is also "down", an error will be created and if configured, an alert sent. The monitor will then resume running according to the defined schedule. Using `retest_on_failure` can reduce noise related to transient problems.
    - `schedule` number — The monitor's schedule in minutes. Supported values are `1`, `3`, `5`, `10`, `15`, `30`, `60`, `120`, and `240`. The default value is `3` minutes for HTTP, TCP, and ICMP monitors. The default value is `10` minutes for Browser monitors.
    - `service.name` string — The APM service name.
    - `tags` string[] — An array of tags.
    - `timeout` number — The monitor timeout in seconds. The monitor will fail if it doesn't complete within this time. For browser monitors, the minimum timeout is 30 seconds. Browser monitor timeouts are only applied when the monitor runs on private locations. If a browser monitor specifies a timeout but has no private locations configured, the timeout will have no effect and a warning will be returned in the response.
    - `ignore_https_errors` boolean — Ignore HTTPS errors.
    - `inline_script` string, required — The inline script.
    - `playwright_options` object — Playwright options.
    - `screenshots` 'on' | 'off' | 'only-on-failure' — The screenshot option.
    - `synthetics_args` string[] — Synthetics agent CLI arguments.
    - `type` 'browser', required — The monitor type.
  - SyntheticsHttpMonitorFields
    - `alert` object — The alert configuration. The default is `{ status: { enabled: true }, tls: { enabled: true } }`.
    - `enabled` boolean — Specify whether the monitor is enabled.
    - `labels` object — Key-value pairs of labels to associate with the monitor. Labels can be used for filtering and grouping monitors.
    - `locations` string[] — The location to deploy the monitor. Monitors can be deployed in multiple locations so that you can detect differences in availability and response times across those locations. To list available locations you can: - Run the `elastic-synthetics locations` command with the deployment's Kibana URL. - Go to *Synthetics > Management* and click *Create monitor*. Locations will be listed in *Locations*.
    - `name` string, required — The monitor name.
    - `namespace` string — The namespace field should be lowercase and not contain spaces. The namespace must not include any of the following characters: `*`, `\`, `/`, `?`, `"`, `<`, `>`, `|`, whitespace, `,`, `#`, `:`, or `-`.
    - `params` string — The monitor parameters.
    - `private_locations` string[] — The private locations to which the monitors will be deployed. These private locations refer to locations hosted and managed by you, whereas `locations` are hosted by Elastic. You can specify a private location using the location's name. To list available private locations you can: - Run the `elastic-synthetics locations` command with the deployment's Kibana URL. - Go to *Synthetics > Settings* and click *Private locationsr*. Private locations will be listed in the table. > info > You can provide `locations` or `private_locations` or both. At least one is required.
    - `retest_on_failure` boolean — Turn retesting for when a monitor fails on or off. By default, monitors are automatically retested if the monitor goes from "up" to "down". If the result of the retest is also "down", an error will be created and if configured, an alert sent. The monitor will then resume running according to the defined schedule. Using `retest_on_failure` can reduce noise related to transient problems.
    - `schedule` number — The monitor's schedule in minutes. Supported values are `1`, `3`, `5`, `10`, `15`, `30`, `60`, `120`, and `240`. The default value is `3` minutes for HTTP, TCP, and ICMP monitors. The default value is `10` minutes for Browser monitors.
    - `service.name` string — The APM service name.
    - `tags` string[] — An array of tags.
    - `timeout` number — The monitor timeout in seconds. The monitor will fail if it doesn't complete within this time. For browser monitors, the minimum timeout is 30 seconds. Browser monitor timeouts are only applied when the monitor runs on private locations. If a browser monitor specifies a timeout but has no private locations configured, the timeout will have no effect and a warning will be returned in the response.
    - `check` object — The check request settings.
      - `request` object — An optional request to send to the remote host.
        - `body` string — Optional request body content.
        - `headers` object — A dictionary of additional HTTP headers to send. By default, Synthetics will set the User-Agent header to identify itself.
        - `method` 'HEAD' | 'GET' | 'POST' | 'OPTIONS' — The HTTP method to use.
      - `response` object — The expected response.
        - `body` object
        - `headers` object — A dictionary of expected HTTP headers. If the header is not found, the check fails.
    - `ipv4` boolean — If `true`, ping using the ipv4 protocol.
    - `ipv6` boolean — If `true`, ping using the ipv6 protocol.
    - `max_redirects` number — The maximum number of redirects to follow.
    - `mode` 'all' | 'any' — The mode of the monitor. If it is `all`, the monitor pings all resolvable IPs for a hostname. If it is `any`, the monitor pings only one IP address for a hostname. If you're using a DNS-load balancer and want to ping every IP address for the specified hostname, you should use `all`.
    - `password` string — The password for authenticating with the server. The credentials are passed with the request.
    - `proxy_headers` object — Additional headers to send to proxies during CONNECT requests.
    - `proxy_url` string — The URL of the proxy to use for this monitor.
    - `response` object — Controls the indexing of the HTTP response body contents to the `http.response.body.contents field`.
    - `ssl` object — The TLS/SSL connection settings for use with the HTTPS endpoint. If you don't specify settings, the system defaults are used.
    - `type` 'http', required — The monitor type.
    - `url` string, required — The URL to monitor.
    - `username` string — The username for authenticating with the server. The credentials are passed with the request.
  - SyntheticsIcmpMonitorFields
    - `alert` object — The alert configuration. The default is `{ status: { enabled: true }, tls: { enabled: true } }`.
    - `enabled` boolean — Specify whether the monitor is enabled.
    - `labels` object — Key-value pairs of labels to associate with the monitor. Labels can be used for filtering and grouping monitors.
    - `locations` string[] — The location to deploy the monitor. Monitors can be deployed in multiple locations so that you can detect differences in availability and response times across those locations. To list available locations you can: - Run the `elastic-synthetics locations` command with the deployment's Kibana URL. - Go to *Synthetics > Management* and click *Create monitor*. Locations will be listed in *Locations*.
    - `name` string, required — The monitor name.
    - `namespace` string — The namespace field should be lowercase and not contain spaces. The namespace must not include any of the following characters: `*`, `\`, `/`, `?`, `"`, `<`, `>`, `|`, whitespace, `,`, `#`, `:`, or `-`.
    - `params` string — The monitor parameters.
    - `private_locations` string[] — The private locations to which the monitors will be deployed. These private locations refer to locations hosted and managed by you, whereas `locations` are hosted by Elastic. You can specify a private location using the location's name. To list available private locations you can: - Run the `elastic-synthetics locations` command with the deployment's Kibana URL. - Go to *Synthetics > Settings* and click *Private locationsr*. Private locations will be listed in the table. > info > You can provide `locations` or `private_locations` or both. At least one is required.
    - `retest_on_failure` boolean — Turn retesting for when a monitor fails on or off. By default, monitors are automatically retested if the monitor goes from "up" to "down". If the result of the retest is also "down", an error will be created and if configured, an alert sent. The monitor will then resume running according to the defined schedule. Using `retest_on_failure` can reduce noise related to transient problems.
    - `schedule` number — The monitor's schedule in minutes. Supported values are `1`, `3`, `5`, `10`, `15`, `30`, `60`, `120`, and `240`. The default value is `3` minutes for HTTP, TCP, and ICMP monitors. The default value is `10` minutes for Browser monitors.
    - `service.name` string — The APM service name.
    - `tags` string[] — An array of tags.
    - `timeout` number — The monitor timeout in seconds. The monitor will fail if it doesn't complete within this time. For browser monitors, the minimum timeout is 30 seconds. Browser monitor timeouts are only applied when the monitor runs on private locations. If a browser monitor specifies a timeout but has no private locations configured, the timeout will have no effect and a warning will be returned in the response.
    - `host` string, required — The host to ping.
    - `type` 'icmp', required — The monitor type.
    - `wait` number — The wait time in seconds.
  - SyntheticsTcpMonitorFields
    - `alert` object — The alert configuration. The default is `{ status: { enabled: true }, tls: { enabled: true } }`.
    - `enabled` boolean — Specify whether the monitor is enabled.
    - `labels` object — Key-value pairs of labels to associate with the monitor. Labels can be used for filtering and grouping monitors.
    - `locations` string[] — The location to deploy the monitor. Monitors can be deployed in multiple locations so that you can detect differences in availability and response times across those locations. To list available locations you can: - Run the `elastic-synthetics locations` command with the deployment's Kibana URL. - Go to *Synthetics > Management* and click *Create monitor*. Locations will be listed in *Locations*.
    - `name` string, required — The monitor name.
    - `namespace` string — The namespace field should be lowercase and not contain spaces. The namespace must not include any of the following characters: `*`, `\`, `/`, `?`, `"`, `<`, `>`, `|`, whitespace, `,`, `#`, `:`, or `-`.
    - `params` string — The monitor parameters.
    - `private_locations` string[] — The private locations to which the monitors will be deployed. These private locations refer to locations hosted and managed by you, whereas `locations` are hosted by Elastic. You can specify a private location using the location's name. To list available private locations you can: - Run the `elastic-synthetics locations` command with the deployment's Kibana URL. - Go to *Synthetics > Settings* and click *Private locationsr*. Private locations will be listed in the table. > info > You can provide `locations` or `private_locations` or both. At least one is required.
    - `retest_on_failure` boolean — Turn retesting for when a monitor fails on or off. By default, monitors are automatically retested if the monitor goes from "up" to "down". If the result of the retest is also "down", an error will be created and if configured, an alert sent. The monitor will then resume running according to the defined schedule. Using `retest_on_failure` can reduce noise related to transient problems.
    - `schedule` number — The monitor's schedule in minutes. Supported values are `1`, `3`, `5`, `10`, `15`, `30`, `60`, `120`, and `240`. The default value is `3` minutes for HTTP, TCP, and ICMP monitors. The default value is `10` minutes for Browser monitors.
    - `service.name` string — The APM service name.
    - `tags` string[] — An array of tags.
    - `timeout` number — The monitor timeout in seconds. The monitor will fail if it doesn't complete within this time. For browser monitors, the minimum timeout is 30 seconds. Browser monitor timeouts are only applied when the monitor runs on private locations. If a browser monitor specifies a timeout but has no private locations configured, the timeout will have no effect and a warning will be returned in the response.
    - `host` string, required — The host to monitor; it can be an IP address or a hostname. The host can include the port using a colon, for example "example.com:9200".
    - `proxy_url` string — The URL of the SOCKS5 proxy to use when connecting to the server. The value must be a URL with a scheme of `socks5://`. If the SOCKS5 proxy server requires client authentication, then a username and password can be embedded in the URL. When using a proxy, hostnames are resolved on the proxy server instead of on the client. You can change this behavior by setting the `proxy_use_local_resolver` option.
    - `proxy_use_local_resolver` boolean — Specify that hostnames are resolved locally instead of being resolved on the proxy server. If `false`, name resolution occurs on the proxy server.
    - `ssl` object — The TLS/SSL connection settings for use with the HTTPS endpoint. If you don't specify settings, the system defaults are used.
    - `type` 'tcp', required — The monitor type.

## Response `200`

A successful response. The response may include a `warnings` array when the monitor configuration has non-critical issues. For example, if a browser monitor specifies a timeout but has no private locations configured, a warning is returned indicating the timeout will have no effect.

- object
  - `warnings` SyntheticsMonitorWarning[] — An optional array of warnings about the monitor configuration.
    - `message` string — A human-readable warning message.
    - `monitorId` string — The monitor ID associated with the warning.
    - `publicLocationIds` string[] — The public location IDs associated with the warning.

## Other responses

- `400` — Bad request. For browser monitors, a 400 error is returned if the timeout is less than 30 seconds.

---

[API](https://skmtc.net/elastic/apis/kibana-apis.md) · [All operations](https://skmtc.net/elastic/apis/kibana-apis/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/elastic/kibana-apis/versions/531c9e2a7d23/schema)
