Custom domains
Serve a status page from a subdomain you control, such as status.acme.com. Prove you own it with a TXT record, point a CNAME at Norcube, and the page goes live there with its own certificate.
A page always has its address at https://<slug>.norcubestatus.com. A custom
domain also serves it from a subdomain you control, such as status.acme.com.
The default address keeps working, with no redirect. The page's canonical link points at the custom domain, so search engines credit that one. A page has one custom domain at a time.
Set a domain
In the dashboard, open Monitor, then Status pages, and open the page. Enter the hostname in the Custom domain card and click Save. The card then lists the DNS records to add and shows how far the domain has got.
nrc has no command for custom domains, so from a terminal use nrc api, with
the page's id:
nrc api monitor PUT /status-pages/<id>/domain -f hostname=status.acme.comThrough the API: PUT /status-pages/{id}/domain, with hostname in the body.
The answer lists the records to add:
{
"hostname": "status.acme.com",
"status": "pending_ownership",
"records": [
{
"type": "TXT",
"name": "_norcube-verify.status.acme.com",
"value": "norcube-verify=<token>",
"required": true
},
{
"type": "CNAME",
"name": "status.acme.com",
"value": "custom.norcubestatus.com",
"required": true
}
],
"createdAt": "2026-11-05T09:00:00Z",
"updatedAt": "2026-11-05T09:00:00Z"
}GET /status-pages/{id}/domain returns the same at any time, with error while
something is wrong and lastCheckedAt once it has been checked.
The hostname must be a subdomain, up to 253 characters. These are refused:
- a domain's apex, such as
acme.com - a wildcard
- an IP address
- a scheme, port or path
- anything under
norcube.comornorcubestatus.com
An internationalized name goes in its xn-- form.
Add the DNS records
| Record | Name | Value | What it does |
|---|---|---|---|
| TXT | _norcube-verify.<hostname> | norcube-verify=<token> | Proves your organization owns the hostname. |
| CNAME | <hostname> | custom.norcubestatus.com | Points the hostname at the status page. |
Copy the token from the card or the answer. Norcube issues it for this claim.
A third, optional TXT record can appear, marked "required": false. It only
helps to verify the hostname before you move the CNAME.
DNS can take a while to update, and a record added right after a failed check can take longer to be seen. If your domain has CAA records, they must allow Cloudflare's certificate authorities.
How it goes live
status | The dashboard says | Waiting for |
|---|---|---|
pending_ownership | Waiting for the ownership record | The TXT record. |
pending_dns | Waiting for DNS | The CNAME to be seen. |
pending_certificate | Issuing certificate | The certificate to go live. |
active | Active | Nothing. The domain serves the page. |
failed | Failed | You. error says why. Set the domain again to retry. |
Norcube checks a new domain every minute for the first hour, every 15 minutes for the rest of the first day, then hourly.
A domain that isn't active after 14 days fails. Setting it again starts over: the same hostname keeps its TXT token, and another hostname gets a new one.
If someone else claims the hostname
An unproven claim blocks nobody. The first status page to prove a hostname holds it.
- Setting a hostname another page already holds answers 409 with the reason
DOMAIN_TAKEN. - A claim that was waiting when another page proved the hostname first stays
pending, with
errorCode: DOMAIN_TAKEN, in case they let it go. The dashboard shows it as Taken by another page. Remove the claim if you don't want to wait.
The TXT record is checked again just before a domain goes active, so a withdrawn proof doesn't go live.
Once it is active
- The custom domain serves the page only while the page is published. Unpublishing takes it offline along with the default address.
page.jsonand the feed are there too, athttps://<custom domain>/api/v1/page.jsonand/feed.atom.- Preview links stay on Norcube's own hosts.
- The custom domain sends HSTS for one day, for that hostname alone, so it can leave Norcube for another host without being stuck on https.
The TXT record is no longer required while a domain is active. Norcube keeps
checking the domain hourly. If the CNAME stops pointing here, the status goes
back to pending_dns, and the TXT record has to be in place again before the
domain returns to active. If Cloudflare has removed the hostname because of
this, the status is failed and you set the domain again.
Remove a domain
Click Remove in the card, or:
nrc api monitor DELETE /status-pages/<id>/domainThrough the API: DELETE /status-pages/{id}/domain.
An active domain stops working as the page's address within about a minute. The default address keeps working. Setting a different hostname through the API replaces the current one in the same way.
Limit and billing
Custom domains aren't tied to a plan. Your organization has a safety cap, by
default 10 pages with a custom domain. A domain counts while it is pending or active, and
a failed one doesn't. Past the cap, setting a domain answers 403 with the reason
STATUS_PAGE_DOMAIN_LIMIT. Remove one, or contact support to raise the limit.
If your organization's limit is 0, the same answer says custom domains aren't
available, and support can turn them on.
Norcube meters each active domain by its share of the month. No price has been set yet.
Errors
| Status | code | reason | Meaning |
|---|---|---|---|
| 400 | VALIDATION_FAILED | The hostname breaks a rule above. | |
| 402 | ORG_BLOCKED | The organization has unpaid invoices, so it can't set a domain. | |
| 403 | LIMIT_REACHED | STATUS_PAGE_DOMAIN_LIMIT | The organization is at its limit. |
| 404 | NOT_FOUND | DOMAIN_NOT_SET | The page has no custom domain to read or remove. |
| 409 | CONFLICT | DOMAIN_TAKEN | Another status page holds the hostname. |
| 409 | CONFLICT | DOMAINS_DISABLED | Custom domains aren't available yet. |
| 503 | UNAVAILABLE | The organization's limits couldn't be checked. Retry. |
Reading a domain needs monitor:GetStatusPage and any Norcube Monitor scope.
Setting or removing one needs monitor:UpdateStatusPage and the
monitor.statuspages scope.
Publish and preview
Make a page public, share a preview link that works for 15 minutes, change its address with a 30-day redirect, take it offline or delete it.
Logo
Show your logo in place of the page's name, with an optional second image for visitors in dark mode. PNG, JPEG, WebP or SVG, up to 48 KB each.