Skip to content

Create a DNS record monitor.

POST
/v1/dns-record-monitors
curl --request POST \
--url https://api.siteqwality.com/v1/dns-record-monitors \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "domain": "example", "friendly_name": "example", "http_job_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "watched": [ {} ], "interval_seconds": 1, "group_notification_ids": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ], "service_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }'
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
domain
required

The zone to watch. Normalized to lowercase without a trailing dot.

string
friendly_name
string | null
http_job_id

Optional grouping only. This is NOT a 1:1 pairing: a zone can be watched without a website, which is the whole reason this is a separate monitor type from the domain-expiry check.

string | null format: uuid
watched

Omit to take the default set: the apex A, AAAA, MX, NS, TXT and CAA, plus www CNAME and A.

array | null
object
interval_seconds
integer | null format: int32
group_notification_ids

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

array | null
service_id

The service this monitor belongs to.

string | null format: uuid
Example generated
{
"domain": "example",
"friendly_name": "example",
"http_job_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"watched": [
{}
],
"interval_seconds": 1,
"group_notification_ids": [
"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
],
"service_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
}

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

Media type application/json

A DNS record monitor as the api returns it.

object
id
required
string format: uuid
account_id
required
string format: uuid
http_job_id
string | null format: uuid
created_at
required
string format: date-time
friendly_name
string | null
domain
required
string
watched
required
Array<object>
object
interval_seconds
required
integer format: int32
paused
required
boolean
current_status
required

pending | baselined | changed | unreachable.

Deliberately never success: a monitor that has never run says so instead of claiming to be fine.

string
last_run_at
string | null format: date-time
last_status_change_at
string | null format: date-time
last_failure_reason

When set, everything displayed for this monitor is LAST KNOWN, not current: a failed check keeps the previous values rather than nulling them, so this field is what makes the staleness legible.

string | null
last_failure_at
string | null format: date-time
group_notification_ids
required
Array<string>
Example generated
{
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"account_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"http_job_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"created_at": "2026-04-15T12:00:00Z",
"friendly_name": "example",
"domain": "example",
"watched": [
{}
],
"interval_seconds": 1,
"paused": true,
"current_status": "example",
"last_run_at": "2026-04-15T12:00:00Z",
"last_status_change_at": "2026-04-15T12:00:00Z",
"last_failure_reason": "example",
"last_failure_at": "2026-04-15T12:00:00Z",
"group_notification_ids": [
"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
]
}
Idempotent-Replayed
string

true when this is the stored first response

Invalid request body

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 DNS 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 check interval is below the free plan’s floor

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"
}
]
}

A monitor already watches this domain

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"
}
]
}