Serve a status page on your own domain.
const url = 'https://api.siteqwality.com/v1/status-pages/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/custom-domain';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"domain":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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" }'Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Header Parameters
Section titled “Header Parameters ”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.
Request Body required
Section titled “Request Body required ”object
The customer’s custom domain, e.g. “status.theircompany.com”
Example generated
{ "domain": "example"}Responses
Section titled “ Responses ”The domain with the DNS records to add
Response shape for GET/POST /status-pages/{id}/custom-domain
object
“pending_validation” | “provisioning” | “active” | “failed” | “deleting”
The intermediate CNAME the customer must point their domain at, e.g. “<status_page_id>.custom.siteqwality.com”
ACM DNS validation records, needed while status = “pending_validation”
object
The CNAME record name the customer must create, e.g. “_abc123.status.theircompany.com”
The CNAME record value to point at, e.g. “xyz.acm-validations.aws”
The last check of a live domain; absent until the first one, a few minutes after it goes live.
object
What to fix, as a sentence. Absent when nothing is wrong.
When the certificate expires. It renews by itself while the validation record stays in DNS.
Absent for our own hostnames, which always mail from the default sender.
object
“not_started” until the domain is provisioned, then “pending”, “verified” or “failed”.
The CNAME to add. Email is signed for the domain once it resolves.
object
Where the mail comes from once verified.
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" }}Headers
Section titled “Headers ”true when this is the stored first response
Invalid domain: wildcards, bad characters and siteqwality.com names are refused
An RFC 9457 problem, the body of every /v1 error.
object
https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.
urn:uuid: and the request id.
The invalid fields, when the request body was refused.
One validation failure; pointer is an RFC 6901 pointer into the request body.
object
Example generated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "errors": [ { "pointer": "example", "detail": "example" } ]}Missing or invalid credentials
An RFC 9457 problem, the body of every /v1 error.
object
https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.
urn:uuid: and the request id.
The invalid fields, when the request body was refused.
One validation failure; pointer is an RFC 6901 pointer into the request body.
object
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
An RFC 9457 problem, the body of every /v1 error.
object
https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.
urn:uuid: and the request id.
The invalid fields, when the request body was refused.
One validation failure; pointer is an RFC 6901 pointer into the request body.
object
Example generated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "errors": [ { "pointer": "example", "detail": "example" } ]}The account email is not verified
An RFC 9457 problem, the body of every /v1 error.
object
https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.
urn:uuid: and the request id.
The invalid fields, when the request body was refused.
One validation failure; pointer is an RFC 6901 pointer into the request body.
object
Example generated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "errors": [ { "pointer": "example", "detail": "example" } ]}No such status page in this account
An RFC 9457 problem, the body of every /v1 error.
object
https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.
urn:uuid: and the request id.
The invalid fields, when the request body was refused.
One validation failure; pointer is an RFC 6901 pointer into the request body.
object
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
An RFC 9457 problem, the body of every /v1 error.
object
https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.
urn:uuid: and the request id.
The invalid fields, when the request body was refused.
One validation failure; pointer is an RFC 6901 pointer into the request body.
object
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
An RFC 9457 problem, the body of every /v1 error.
object
https://docs.siteqwality.com/errors/ and the failure’s code, such as not_found.
urn:uuid: and the request id.
The invalid fields, when the request body was refused.
One validation failure; pointer is an RFC 6901 pointer into the request body.
object
Example generated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "errors": [ { "pointer": "example", "detail": "example" } ]}