Request
Bodyapplication/json
namestringrequired
Pronounceable name of the monitor
Example:"My Website"
external_idstringoptional
Your own identifier for the monitor, unique within the project: 1 to 128 letters, digits,
., _, : or -, starting with a letter or a digit. Creating a second monitor with the same external_id returns 409 with the uuid of the monitor that has it. To create or update by this identifier, use Create or update a monitor.Example:"client-42"
urlstringrequired
The URL of your website, or hostname (for DNS/ICMP/port monitors) you want to check. Optional for a browser check, whose target is in its script: when set, it is shown with the monitor.
Example:"https://acme.com"
protocolenum<string>optional
Type of monitor to create.
browser creates a browser check that runs the Playwright test in script. To create many of them from one script, see Create browser checks with the API.Default:
httpscriptstringrequired for browser
The Playwright test of a browser check, the same code you would paste in the dashboard editor (
@playwright/test, TypeScript or JavaScript). Required when protocol is browser and refused for the other protocols. Up to 100,000 characters. New browser checks run on runtime 2026.05.env_variablesarray<object>optional
Variables the script reads as
process.env.NAME: credentials, or what changes between checks that share one script, like the URL to open. Objects with name and value. Names use letters, digits and _ and don't start with a digit; values are up to 4096 bytes. Values are stored encrypted and never returned by the API. Browser checks only, up to 50 variables.Example:[{ "name": "BASE_URL", "value": "https://help.acme.com" }]
dns_record_typeenum<string>optional
DNS record type to check. Only used when protocol is
dnsDefault:
Adns_nameserverstringoptional
Nameserver to query against (e.g.
8.8.8.8). Leave empty to use default resolvers. Only used when protocol is dnsExample:"8.8.8.8"
dns_expected_answerstringoptional
Expected DNS answer to validate against. Monitor fails if the resolved value does not contain this string. Only used when protocol is
dnsExample:"192.0.2.1"
regionsarray<string>optional
Array of region names to monitor from. Browser checks run from
frankfurt and sanfrancisco, and use both by default.Default: all regions
check_frequencynumberoptional
Check frequency in seconds. A browser check takes
300, 600, 900, 1800, 3600, 21600, 43200 or 86400, and defaults to 300.Default:
30 (300 for a browser check)http_methodenum<string>optional
HTTP method for the request
Default:
GETrequest_bodystringoptional
Request body for POST, PUT, PATCH requests
request_headersarray<object>optional
Array of objects with
name and value properties for custom HTTP headersfollow_redirectsbooleanoptional
Whether to follow HTTP redirects
Default:
trueip_versionenum<number>optional
IP version used to reach the target:
4 or 6. An IPv6 monitor is checked over IPv6 only, never IPv4. Available for the http, port and icmp protocols. Checks run only from the selected regions that have an IPv6 probe, and the request is rejected if none of the selected regions has one. See IP version.Default:
4portnumberoptional
Port number to check. Required if protocol is
portExample:443
expected_status_codestringoptional
Expected HTTP status code. Use
"2xx" for 200-299, "1xx-3xx" for 100-399, or a specific code like "200".Example:"2xx"
Default:
2xx (200-299)required_keywordstringoptional
Triggers downtime if body response is missing this keyword
pausedbooleanoptional
Whether the monitor should be paused
Default:
falsealerts_waitnumberoptional
Minutes to wait before sending alerts. Use
-1 to disable alerts.Default:
0ssl_alert_daysnumberoptional
Days before the TLS certificate expires to send the first expiry alert.
-1 = never. When omitted on create, the default applies.ssl_remindersbooleanoptional
Also remind at each step below the threshold (30, 15, 7, 3 and 1 days). Default
true.ssl_notify_on_changebooleanoptional
Notify when the server starts serving a different certificate. Default
false.domain_alert_daysnumberoptional
Days before the domain registration expires to alert.
-1 = never (default for monitors created through the API).group_idnumberoptional
Monitor group to put the monitor in, from the Monitor Groups API. The monitor goes last in the group unless
sort_order is set.Example:12
sort_ordernumberoptional
Position of the monitor in its group
escalation_policystringoptional
Policy UUID to link. Send
null or "none" to unlink.Example:"policy_123abc"
Response
Returns the newly created monitor object with status code 201, or 409 with message and uuid when the external_id is already used in the project.