Skip to content

Create an HTTP, TCP port or ping monitor.

POST
/v1/http-monitors
curl --request POST \
--url https://api.siteqwality.com/v1/http-monitors \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "service_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "check_regions": [ "example" ], "min_healthy_regions": 1, "friendly_name": "example", "follow_redirects": true, "final_uri": "example", "check_type": "http", "method": "example", "keyword_search": "example", "keyword_search_inverted": true, "keyword_search_case_sensitive": true, "keyword_search_regex": true, "timeout_ms": 1, "uri": "example", "tcp_send": "example", "tcp_expect": "example", "tcp_tls": true, "ping_count": 1, "ping_loss_threshold": 1, "recheck_on_failure": "off", "web_bot_auth": true, "request_body": "example", "content_type": "json", "auth_type": "basic", "auth_username": "example", "auth_password": "example", "auth_bearer_token": "example", "success_http_codes": [ 1 ], "failure_http_codes": [ 1 ], "custom_http_headers": "example", "run_interval_seconds": 1, "run_interval_thirty_seconds": true, "group_notification_ids": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ], "monitor_tls": true, "monitor_dns": true, "monitor_page_speed": true, "tags": [ "example" ], "http_version": "auto", "confirmation_threshold": 1, "json_path": "example", "json_path_expected": "example", "tls_port": 1, "alert_on_invalid_certificate": true, "recovery_period_runs": 1, "flap_hold": true, "flap_hold_override": true, "trace_propagation": true }'
Idempotency-Key
string
<= 255 characters

Makes a retry safe: the same key and body within 24 hours returns the first response with Idempotent-Replayed: true. The same key with another body is refused with 422 idempotency_key_reused, and one still running with 409 idempotency_key_in_use.

Media type application/json
object
service_id

Assign the new monitor to a service in the same account.

string | null format: uuid
check_regions

Location ids. Left out or empty: GET /check-locations/default, one location, or two on different providers on an uptime plan with room in its quota.

array | null
min_healthy_regions
integer | null format: int32
friendly_name
string | null
follow_redirects
boolean | null
final_uri
string | null
check_type
One of:

What the monitor checks: http (the default), tcp or ping. Fixed once created.

string
Allowed values: http tcp ping
method

The HTTP method; required for http. TCP and ping monitors store TCP and PING.

string | null
keyword_search
string | null
keyword_search_inverted
boolean | null
keyword_search_case_sensitive
boolean | null
keyword_search_regex
boolean | null
timeout_ms
required

Milliseconds. http up to 60000, tcp 1000 to 60000, ping 1000 to 10000.

integer format: int32
uri
required

http: the URL. tcp: tcp://host:port or host:port. ping: ping://host or the host alone. IPv6 addresses go in brackets.

string
tcp_send

tcp only: sent once connected, with \r \n \t \0 \\ \xHH escapes. At most 1024 bytes after unescaping.

string | null
tcp_expect

tcp only: the response must contain this (same escapes, case-sensitive), 1 to 256 bytes after unescaping. Left out, connecting is enough.

string | null
tcp_tls

tcp only: complete a verified TLS handshake first. Defaults to false.

boolean | null
ping_count

ping only: echo requests per check, 1 to 10. Defaults to 3.

integer | null format: int32
ping_loss_threshold

ping only: fail when at least this percent of packets are lost, 1 to 100. Defaults to 100, so only total loss fails.

integer | null format: int32
recheck_on_failure
One of:

Check a failed run once more before it counts: off, same_location, or another_cloud (paid plans). Omitted takes the plan’s default: another_cloud on a paid plan, same_location on the free plan.

string
Allowed values: off same_location another_cloud
web_bot_auth

http only. Sign check requests with Web Bot Auth so bot protection such as Cloudflare recognizes SiteQwality Monitor, a verified bot. Defaults to off.

boolean | null
request_body
string | null
content_type
One of:
string
Allowed values: json xml form_url_encoded text
auth_type
One of:
string
Allowed values: basic digest bearer
auth_username
string | null
auth_password
string | null
auth_bearer_token
string | null
success_http_codes
array | null
failure_http_codes
array | null
custom_http_headers
object | null
run_interval_seconds
required
integer format: int32
run_interval_thirty_seconds
boolean | null
group_notification_ids

Notification groups to alert. Left out or null: the account’s default group. []: notify no one.

array | null
monitor_tls
boolean | null
monitor_dns

Pair a domain-expiry monitor. Defaults to true for http and false for tcp and ping, which allow it only when the host is a domain name.

boolean | null
monitor_page_speed
boolean | null
tags
array | null
http_version
One of:

Preferred HTTP version. Defaults to auto when omitted.

string
Allowed values: auto http1_1 http2 http2_with_fallback
confirmation_threshold

Number of consecutive failed checks (1-10) required before the monitor is considered down and notifications are sent. Defaults to 1 (alert on the first failed check).

integer | null format: int32
json_path

Optional JSONPath assertion on the response body.

string | null
json_path_expected

When set, the JSONPath result must stringify to this value.

string | null
tls_port

Port the TLS check connects to, 1 to 65535. Omitted keeps the stored port (443 for a new TLS check). Needs monitor_tls.

integer | null format: int32
alert_on_invalid_certificate

Alert when the certificate is one a browser would reject: expired, not yet valid, self-signed, an untrusted chain or a hostname mismatch. Defaults to true. Ignored without monitor_tls.

boolean | null
recovery_period_runs

Healthy runs in a row (1-10) before a recovery is notified. Defaults to 2.

integer | null format: int32
flap_hold

Deprecated: sets flap_hold_override when that is absent.

boolean | null
flap_hold_override

Hold alerts while the monitor flaps. Absent or null follows the account’s notification setting.

boolean | null
trace_propagation
boolean | null

The monitor. warnings lists alert sources a channel in its groups cannot reach

Media type application/json
object
id
required

Unique identifier for the HTTP job.

string format: uuid
account_id
required

Unique identifier for the account associated with the HTTP job.

string format: uuid
state
required

The current state of the HTTP job (e.g., active, paused).

string
Allowed values: active paused
paused_reason

Why a paused monitor is paused: user or dormancy (older rows may say billing).

string | null
current_status
required

The current status of the HTTP job (e.g., success, failure).

string
Allowed values: success failed pending_failure
check_regions

The regions from which the HTTP job will be checked.

array | null
min_healthy_regions

The minimum number of healthy regions required for the HTTP job to be considered healthy.

integer | null format: int32
friendly_name

A name set by the user to identify the HTTP job.

string | null
follow_redirects
required

Indicates whether the HTTP job should follow redirects.

boolean
final_uri

Reserved and currently unused.

string | null
method
required

The HTTP method used for the request (e.g., GET, POST).

string
keyword_search

A keyword to search for in the response body.

string | null
keyword_search_inverted

Indicates whether the keyword search is inverted (i.e., the job fails if the keyword is found).

boolean | null
keyword_search_case_sensitive

Indicates whether the keyword search is case-sensitive, default is false.

boolean | null
keyword_search_regex

Indicates whether to interpret the keyword search as a regex.

boolean | null
timeout_ms
required

The timeout for the HTTP request in milliseconds.

integer format: int32
uri
required

The URI to which the HTTP request is sent.

string
check_type

http, tcp or ping; fixed once created.

string
Allowed values: http tcp ping
tcp_send

TCP: sent once connected, with \r \n \t \0 \\ \xHH escapes.

string | null
tcp_expect

TCP: the response must contain this, with the same escapes.

string | null
tcp_tls

TCP: complete a verified TLS handshake before send and expect.

boolean
ping_count

Ping: echo requests per check.

integer | null format: int32
ping_loss_threshold

Ping: fail at or above this percent of packets lost.

integer | null format: int32
recheck_on_failure

Whether a failed run is checked once more before it counts: off, same_location or another_cloud.

string
Allowed values: off same_location another_cloud
web_bot_auth

Whether check requests are signed with Web Bot Auth as SiteQwality Monitor.

boolean
request_body

The body of the HTTP request to be sent.

string | null
content_type
One of:

The content type of the HTTP request (e.g., application/json).

string
Allowed values: json xml form_url_encoded text
auth_type
One of:

The type of authentication used for the HTTP request (e.g., Basic, Bearer).

string
Allowed values: basic digest bearer
auth_username

The username used for authentication.

string | null
has_auth

True when a basic-auth password or a bearer token is stored for this monitor. This is what a read gets in place of the secret itself; see auth_type for which kind of credential it is.

boolean
success_http_codes

A list of HTTP status codes that indicate a successful response.

array | null
failure_http_codes

A list of HTTP status codes that indicate a failed response.

array | null
custom_http_headers

A map of custom HTTP headers to be included in the request.

Names are returned. Values are readable only for the seven headers in secrets::RETURNABLE_REQUEST_HEADERS, matched case-insensitively. Other values become secrets::REDACTED; sending that placeholder back preserves the stored value (secrets::restore_redacted_header_values).

object | null
last_run_at

The last time the HTTP job was run.

string | null format: date-time
last_status_change_at

The last time the status of the HTTP job changed, (e.g., from success to failure).

string | null format: date-time
run_interval_seconds
required

The interval in seconds at which the HTTP job runs.

integer format: int32
run_interval_thirty_seconds
required

Indicates whether the HTTP job runs every 30 seconds.

boolean
group_notifications

A list of notification groups associated with the HTTP job. This is the same as group_notification_ids, but with the full notification group object.

array | null
object
id
required
string format: uuid
account_id
required
string format: uuid
friendly_name
required
string
delay_send_after_minutes
integer | null format: int32
resend_every_minutes
integer | null format: int32
is_default

The group monitors get when they are created without group_notification_ids.

boolean
created_at
required
string format: date-time
notifications
required
Array<object>
object
id
required
string format: uuid
account_id
required
string format: uuid
type
required
string
Allowed values: email sms slack webhook telegram discord microsoft_teams pagerduty opsgenie google_chat mattermost pushover pushbullet
details
required
One of:
object
email_address
required
string
created_at
required
string format: date-time
health
One of:

How this channel’s recent deliveries went: whether the last alert reached anyone, and why not when it did not (a revoked Slack token, a bouncing inbox). Present on the read endpoints; absent on create and update responses.

object
state
required

healthy: the most recent delivery reached the provider. degraded: it was refused, bounced, complained about, could not be sent, or skipped for a reason the channel must fix (such as sms_quota), so the next alert will likely not arrive either. unknown: nothing sent in the lookback window. A skip by design, such as heartbeat_channel_unsupported, is listed in recent but never judged.

string
recent
required

Newest first, at most [CHANNEL_HEALTH_RECENT].

Array<object>

One delivery, as a channel’s health shows it.

object
at
required
string format: date-time
status
required

Sent | delivered | delayed | soft_bounced | failed | rejected | bounced | complained | skipped

string
reason

The provider’s reason for a non-success status, URLs reduced to hosts. For skipped, a slug such as sms_quota or tls_channel_unsupported.

string | null
bouncing
One of:

An email channel whose address hard-bounced or complained after its last delivery: SES now suppresses it, so the channel is degraded until the address is fixed.

object
since
required
string format: date-time
event_type
required

bounce or complaint.

string
sub_type

E.g. Permanent/General, Permanent/OnAccountSuppressionList.

string | null
numb_of_sites
integer | null format: int64
tls_job_id

The ID of the TLS job associated with the HTTP job.

string | null format: uuid
monitor_tls
required

Indicates whether the HTTP job monitors TLS.

boolean
dns_job_id

The ID of the DNS job associated with the HTTP job.

string | null format: uuid
monitor_dns
required

Indicates whether the HTTP job monitors DNS.

boolean
page_speed_job_id

The ID of the page speed job associated with the HTTP job.

string | null format: uuid
monitor_page_speed
required

Indicates whether the HTTP job monitors page speed.

boolean
created_at
required

When the HTTP job was created.

string format: date-time
tags

A list of tags associated with the HTTP job.

array | null
service_id

The ID of the service this HTTP job belongs to.

string | null format: uuid
http_version
required

Preferred HTTP version for the check client (auto / http1_1 / http2 / http2_with_fallback).

string
Allowed values: auto http1_1 http2 http2_with_fallback
confirmation_threshold
required

Number of consecutive failed checks required before the monitor is considered down and notifications are sent. 1 = alert on the first failed check.

integer format: int32
json_path
string | null
json_path_expected
string | null
uptime_24h

Uptime percentage over the last 24h (successful checks / total) checks). Only populated on the monitor list endpoint; omitted when the monitor has no checks in the window.

number | null format: double
not_checked_reason
One of:

Set while the monitor is active but not being checked: quota when the account’s quota for it is used up. Omitted otherwise.

string
Allowed values: quota
tls_port

Port the paired TLS check connects to. Only on GET /http/job/{id} when TLS is monitored.

integer | null format: int32
alert_on_invalid_certificate

Whether an invalid certificate alerts. Only on GET /http/job/{id} when TLS is monitored.

boolean | null
icon
One of:

The website’s icon. Only on GET /http/job/{id}, once one is found.

object
url
required

Public HTTPS URL of the PNG. The same image always has the same URL.

string
tone
required

How the icon reads on a transparent background: dark or light is a mark of that tone, which needs a contrasting backdrop on a surface of the same tone. neutral reads on either.

string
Allowed values: dark light neutral
recovery_period_runs

Healthy runs in a row before a recovery is notified. 1 = notify on the first.

integer format: int32
flap_hold

Whether alerts are held while the monitor flaps: the override, or else the account’s notification setting.

boolean
flap_hold_override

This monitor’s own flap hold; null follows the account’s notification setting.

boolean | null
trace_propagation
boolean
partial_failure
One of:

Set while runs pass but some locations fail. Omitted otherwise.

object
failed_locations
required
Array<string>
total_locations
required
integer format: int32
since
required

When the current run of partial failures began.

string format: date-time
Example
{
"state": "active",
"current_status": "success",
"check_type": "http",
"recheck_on_failure": "off",
"content_type": "json",
"auth_type": "basic",
"group_notifications": [
{
"notifications": [
{
"type": "email",
"details": {
"pagerduty_severity": "critical"
}
}
]
}
],
"http_version": "auto",
"not_checked_reason": "quota",
"icon": {
"tone": "dark"
}
}
Idempotent-Replayed
string

true when this is the stored first response

Invalid request body, or a feature the plan lacks

Media type application/problem+json

An RFC 9457 problem, the body of every /v1 error.

object
type
required

https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.

string
title
required
string
status
required
integer format: int32
detail
string | null
instance

urn:uuid: and the request id.

string | null
errors

The invalid fields, when the request body was refused.

array | null

One validation failure; pointer is an RFC 6901 pointer into the request body.

object
pointer
required
string
detail
required
string
Example generated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example",
"errors": [
{
"pointer": "example",
"detail": "example"
}
]
}

Missing or invalid credentials

Media type application/problem+json

An RFC 9457 problem, the body of every /v1 error.

object
type
required

https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.

string
title
required
string
status
required
integer format: int32
detail
string | null
instance

urn:uuid: and the request id.

string | null
errors

The invalid fields, when the request body was refused.

array | null

One validation failure; pointer is an RFC 6901 pointer into the request body.

object
pointer
required
string
detail
required
string
Example generated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example",
"errors": [
{
"pointer": "example",
"detail": "example"
}
]
}

The plan’s monitor limit is reached

Media type application/problem+json

An RFC 9457 problem, the body of every /v1 error.

object
type
required

https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.

string
title
required
string
status
required
integer format: int32
detail
string | null
instance

urn:uuid: and the request id.

string | null
errors

The invalid fields, when the request body was refused.

array | null

One validation failure; pointer is an RFC 6901 pointer into the request body.

object
pointer
required
string
detail
required
string
Example generated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example",
"errors": [
{
"pointer": "example",
"detail": "example"
}
]
}

The feature needs a paid plan

Media type application/problem+json

An RFC 9457 problem, the body of every /v1 error.

object
type
required

https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.

string
title
required
string
status
required
integer format: int32
detail
string | null
instance

urn:uuid: and the request id.

string | null
errors

The invalid fields, when the request body was refused.

array | null

One validation failure; pointer is an RFC 6901 pointer into the request body.

object
pointer
required
string
detail
required
string
Example generated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example",
"errors": [
{
"pointer": "example",
"detail": "example"
}
]
}

No such service in this account

Media type application/problem+json

An RFC 9457 problem, the body of every /v1 error.

object
type
required

https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.

string
title
required
string
status
required
integer format: int32
detail
string | null
instance

urn:uuid: and the request id.

string | null
errors

The invalid fields, when the request body was refused.

array | null

One validation failure; pointer is an RFC 6901 pointer into the request body.

object
pointer
required
string
detail
required
string
Example generated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example",
"errors": [
{
"pointer": "example",
"detail": "example"
}
]
}

Too many requests; wait for the time in Retry-After

Media type application/problem+json

An RFC 9457 problem, the body of every /v1 error.

object
type
required

https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.

string
title
required
string
status
required
integer format: int32
detail
string | null
instance

urn:uuid: and the request id.

string | null
errors

The invalid fields, when the request body was refused.

array | null

One validation failure; pointer is an RFC 6901 pointer into the request body.

object
pointer
required
string
detail
required
string
Example generated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example",
"errors": [
{
"pointer": "example",
"detail": "example"
}
]
}