Status pages

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.

Verified November 5, 2026

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.com

Through 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.com or norcubestatus.com

An internationalized name goes in its xn-- form.

Add the DNS records

RecordNameValueWhat it does
TXT_norcube-verify.<hostname>norcube-verify=<token>Proves your organization owns the hostname.
CNAME<hostname>custom.norcubestatus.comPoints 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

statusThe dashboard saysWaiting for
pending_ownershipWaiting for the ownership recordThe TXT record.
pending_dnsWaiting for DNSThe CNAME to be seen.
pending_certificateIssuing certificateThe certificate to go live.
activeActiveNothing. The domain serves the page.
failedFailedYou. 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.json and the feed are there too, at https://<custom domain>/api/v1/page.json and /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>/domain

Through 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

StatuscodereasonMeaning
400VALIDATION_FAILEDThe hostname breaks a rule above.
402ORG_BLOCKEDThe organization has unpaid invoices, so it can't set a domain.
403LIMIT_REACHEDSTATUS_PAGE_DOMAIN_LIMITThe organization is at its limit.
404NOT_FOUNDDOMAIN_NOT_SETThe page has no custom domain to read or remove.
409CONFLICTDOMAIN_TAKENAnother status page holds the hostname.
409CONFLICTDOMAINS_DISABLEDCustom domains aren't available yet.
503UNAVAILABLEThe 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.

On this page