Status API › Custom domain
Set the custom domain
Serves the page on a subdomain you own (an apex domain such as example.com is
refused). Create the returned CNAME records at your DNS provider; the domain
goes pending → verifying → active on its own. Setting a new domain
replaces the old one.
A custom domain on a public page is billed per hour while it is active.
Permission (API-key scope): status:page:write.
Authorization
bearerAuth(status:page:write)apiKeyHeader(status:page:write)
Parameters
Path parameters
pageIDstring (uuid) requiredThe status page's id (a UUID).
Request body required
domainstring requiredA subdomain with at least three labels.
Responses
201
The domain.
dataDomain requiredShow Domain properties
domainstring | null requiredstatusstring requiredrecordsarray of DnsRecordThe DNS records to create at your DNS provider.Show DnsRecord properties
typestringnamestringvaluestring
successboolean required
400
A field is missing or invalid (VALIDATION_ERROR); the message names it, or the body is not valid (INVALID_BODY).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThis request's id, also inX-Request-ID.
401
No API key was sent, or it is unknown, revoked or expired (UNAUTHORIZED).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThis request's id, also inX-Request-ID.
403
The key lacks the scope this endpoint needs (FORBIDDEN).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThis request's id, also inX-Request-ID.
404
No such item, or one the caller cannot see (NOT_FOUND).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThis request's id, also inX-Request-ID.
429
Too many requests (RATE_LIMITED). Wait Retry-After seconds.
Retry-AfterintegerSeconds to wait.
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThis request's id, also inX-Request-ID.
500
Something went wrong on EvoHub's side (INTERNAL_ERROR). Retry later.
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThis request's id, also inX-Request-ID.
502
Cloudflare refused or failed the registration (CLOUDFLARE_ERROR).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThis request's id, also inX-Request-ID.
503
Custom domains are not configured (PROVISIONING_DISABLED).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThis request's id, also inX-Request-ID.
Example request
curl -X POST 'https://evohub.io/api/v1/pages/3f6c2a1e-8b4d-4f7a-9c21-5d0e7a9b1c42/domain' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <TOKEN>' \
-d '{
"domain": "status.acme.com"
}'