Create a monitor
POST /api/v1/monitors
Creates a new monitor for the authenticated user.
For heartbeat monitors the target field is not required; the
backend will generate a unique heartbeat_token that can be used to
ping the heartbeat endpoint.
Default values when not specified:
interval_secs: 300timeout_secs: 30expected_status: 200confirmation_count: 1ssl_warn_days: 30
Authorizations
Section titled “Authorizations ”Request Body required
Section titled “Request Body required ”Request body for creating a new monitor.
object
Human-readable name for the monitor.
Example
Production APIThe kind of check this monitor performs.
Example
httpURL, hostname, or address to monitor. Not required for heartbeat monitors.
Example
https://api.example.com/healthzSeconds between checks.
Example
300Seconds before a check is considered timed out.
Example
5Keyword to search for (keyword monitors only).
Example
okWhether the keyword should or should not appear.
Example
containsMatch mode for keyword checks. “exact” for plain string, “regex” for regular expression.
Example
exactExpected HTTP status code.
Example
200Latency warning threshold in milliseconds.
Example
1000Consecutive failures required before marking as down.
Example
1Days before SSL expiry to warn.
Example
30Optional secret for heartbeat monitors. If set, pings must include the X-Secret header with this value.
Example
a3f8b2c1d4e5f6a7b8c9d0e1f2a3b4c5Network protocol for port monitors.
Example
tcpType of HTTP authentication. Requires ENCRYPTION_KEY to be configured.
Example
basicUsername for Basic Auth (required when http_auth_type is “basic”).
Example
adminPassword for Basic Auth (required when http_auth_type is “basic”).
Example
secret123Header name for custom header auth (required when http_auth_type is “header”).
Example
X-API-KeyHeader value for custom header auth (required when http_auth_type is “header”).
Example
my-api-keyDNS record type (DNS monitors only). Defaults to A.
Example
AOptional case-insensitive substring expected in at least one DNS record.
Example
93.184.216.34Optional custom DNS resolver (e.g. “1.1.1.1”). Defaults to the system resolver.
Example
1.1.1.1IDs of alert contacts to attach.
Example
[ 1, 3]Examples
HTTP monitor
{ "name": "Production API", "type": "http", "target": "https://api.example.com/healthz", "interval_secs": 60, "expected_status": 200, "alert_contact_ids": [ 1 ]}Heartbeat monitor
{ "name": "Cron Job Heartbeat", "type": "heartbeat", "interval_secs": 3600}Keyword monitor
{ "name": "Homepage keyword check", "type": "keyword", "target": "https://example.com", "keyword": "Welcome", "keyword_type": "contains"}Responses
Section titled “ Responses ”Monitor created successfully.
A monitor that periodically checks the health of a target.
object
Unique monitor identifier.
Example
42ID of the user who owns this monitor.
Example
1Human-readable name for the monitor.
Example
Production APIThe kind of check this monitor performs.
Example
httpURL, hostname, or address to monitor.
Example
https://api.example.com/healthzSeconds between checks.
Example
300Seconds before a check is considered timed out.
Example
5Network protocol for port monitors.
Example
tcpKeyword to search for in the response body (keyword monitors only).
Example
okWhether the keyword should or should not appear in the response.
Example
containsMatch mode for keyword checks. “exact” for plain string, “regex” for regular expression.
Example
exactExpected HTTP status code (HTTP monitors).
Example
200Latency threshold in milliseconds that triggers a warning.
Example
1000Number of consecutive failures required before marking the monitor as down.
Example
1Current count of consecutive check failures.
Unique token for heartbeat monitors. Generated by the backend.
Example
hb_a1b2c3d4e5f6Timestamp of the last heartbeat ping received.
Example
2026-03-29T10:15:00ZOptional secret for heartbeat monitors. If set, pings must include the X-Secret header with this value.
Example
a3f8b2c1d4e5f6a7b8c9d0e1f2a3b4c5Number of days before SSL expiry to trigger a warning.
Example
30SSL certificate expiry timestamp.
Example
2026-12-01T00:00:00ZWhether the monitor is actively running checks.
Example
trueCurrent status of the monitored target.
Example
upTimestamp of the most recent check.
Example
2026-03-29T12:00:00ZWhen the monitor was created.
Example
2026-01-15T08:30:00ZWhen the monitor was last updated.
Example
2026-03-29T12:00:00ZIDs of alert contacts to notify when the monitor changes state.
Example
[ 1, 3]Type of HTTP authentication configured on this monitor.
Example
noneWhether HTTP authentication credentials are configured. Credentials are never returned in responses.
DNS record type to resolve (DNS monitors only).
Example
AOptional case-insensitive substring that must appear in at least one returned DNS record.
Example
93.184.216.34Optional custom DNS resolver (e.g. “1.1.1.1” or “8.8.8.8:53”). Defaults to the system resolver.
Example
1.1.1.1The request body is invalid or missing required fields.
Error response returned when a request fails.
object
A human-readable error message.
Example
monitor not foundExample
{ "error": "invalid request body"}Authentication credentials are missing or invalid.
Error response returned when a request fails.
object
A human-readable error message.
Example
monitor not foundExample
{ "error": "unauthorized"}