Skip to content

Serve a status page on your own domain.

POST
/v1/status-pages/{status_page_id}/custom-domain
curl --request POST \
--url https://api.siteqwality.com/v1/status-pages/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/custom-domain \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "domain": "example" }'
status_page_id
required
string format: uuid
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 customer’s custom domain, e.g. “status.theircompany.com”

string
Example generated
{
"domain": "example"
}

The domain with the DNS records to add

Media type application/json

Response shape for GET/POST /status-pages/{id}/custom-domain

object
status_page_id
required
string
domain
required
string
status
required

“pending_validation” | “provisioning” | “active” | “failed” | “deleting”

string
cname_target
required

The intermediate CNAME the customer must point their domain at, e.g. “<status_page_id>.custom.siteqwality.com”

string
acm_validation
required

ACM DNS validation records, needed while status = “pending_validation”

object
name
required

The CNAME record name the customer must create, e.g. “_abc123.status.theircompany.com”

string
value
required

The CNAME record value to point at, e.g. “xyz.acm-validations.aws”

string
failure_reason
string | null
created_at
required
string format: date-time
updated_at
required
string format: date-time
health
One of:

The last check of a live domain; absent until the first one, a few minutes after it goes live.

object
checked_at
required
string format: date-time
problem

What to fix, as a sentence. Absent when nothing is wrong.

string | null
certificate_expires_at

When the certificate expires. It renews by itself while the validation record stays in DNS.

string | null format: date-time
sender
One of:

Absent for our own hostnames, which always mail from the default sender.

object
status
required

“not_started” until the domain is provisioned, then “pending”, “verified” or “failed”.

string
dkim_record
required

The CNAME to add. Email is signed for the domain once it resolves.

object
name
required
string
value
required
string
from_address
required

Where the mail comes from once verified.

string
Example generated
{
"status_page_id": "example",
"domain": "example",
"status": "example",
"cname_target": "example",
"acm_validation": {
"name": "example",
"value": "example"
},
"failure_reason": "example",
"created_at": "2026-04-15T12:00:00Z",
"updated_at": "2026-04-15T12:00:00Z",
"health": {
"checked_at": "2026-04-15T12:00:00Z",
"problem": "example",
"certificate_expires_at": "2026-04-15T12:00:00Z"
},
"sender": {
"status": "example",
"dkim_record": {
"name": "example",
"value": "example"
},
"from_address": "example"
}
}
Idempotent-Replayed
string

true when this is the stored first response

Invalid domain: wildcards, bad characters and siteqwality.com names are refused

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 custom domains are in use; the message names the Custom domain pack

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 account email is not verified

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

The domain is taken, or the page already has one

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