Appearance and branding
A status page has settings that change how it looks to a reader, and nothing else about it. Serving it from a name of your own is a different thing again, and is on custom domains. They do not change what the page reports, who can see it, or how often it refreshes.
accent_color— the colour WireWatch uses for the page’s accents. One colour, yours.white_label— removes WireWatch’s own branding from the public page, so the page reads as yours and not as a WireWatch page with your name on it.
Three further looks-only choices — tone, type and corners — add no entitlement of their own: they
ride on accent_color, and they have their own section below.
They are entitlements, and they are not entitled at the same point. One of them starts a plan earlier than the other, which is the single most surprising thing on this page, so it is the first thing on it.
Which plan grants which
Section titled “Which plan grants which”| Plan | Feature | Included |
|---|---|---|
free |
white_label |
no |
basic |
white_label |
no |
premium |
white_label |
yes |
enterprise |
white_label |
yes |
free |
accent_color |
no |
basic |
accent_color |
yes |
premium |
accent_color |
yes |
enterprise |
accent_color |
yes |
white_label is included on: premium, enterprise. It is not included on: free, basic.
accent_color is included on: basic, premium, enterprise. It is not included on: free.
So a Basic organisation can set an accent colour and cannot turn on white-label. That is not a mistake in one of the two rows — the thresholds really are different, and a page that told you otherwise would be selling you something you do not have.
The accent colour format
Section titled “The accent colour format”An accent colour is # followed by exactly six hexadecimal digits — the constraint is
^#[0-9a-fA-F]{6}$ — or the empty string, which clears it.
Six digits, not three. #fff is refused; write #ffffff. Upper and lower case both pass, and the
# is required rather than optional. Anything else is rejected by the database constraint itself,
so it is rejected the same way whichever screen or client sent it.
Clearing the colour is setting it to the empty string. There is no separate “reset” operation and no default colour you can ask for by name.
Tone, type and corners
Section titled “Tone, type and corners”Beside the colour, a page has three more looks-only choices: Tone, Type and Corners.
They are gated on accent_color — the same entitlement the colour uses, on the same plans as the
table above. There is no second feature to buy: an organisation that can set the accent colour can
set all three, and one that cannot set the colour cannot set any of them.
Each one is a choice from a fixed list, and each one has a Default that is stored as the empty string.
| Setting | Field | Values besides Default | What it changes |
|---|---|---|---|
| Tone | themeTone |
light, dark, auto |
light and dark pin the page to that colour scheme. auto follows the reader’s own light/dark preference — which is what Default does too. |
| Type | themePairing |
editorial, humanist, technical |
Which of three prepared type pairings the page’s headings and body text use. |
| Corners | themeRadius |
sharp, soft, round |
How rounded the page’s panels, chips and controls are. soft is what Default already gives you. |
These are three lists, not a theme editor. You pick from the values above and from nothing else. There is no custom CSS, no arbitrary value, no font of your own to upload or name, and no colour beyond the accent — the pairings choose between type stacks WireWatch ships, built from fonts that are already on the reader’s machine. A value outside its list is rejected by a database constraint, exactly as a malformed accent colour is, so it is rejected the same way whichever screen or client sent it.
Going back to Default is never gated, for the same reason clearing the accent is not: the
entitlement is checked only when a knob is set to a non-Default value. Sending themeTone,
themePairing or themeRadius as the empty string is accepted on any plan.
A downgrade treats the three exactly as it treats the accent colour, below: the stored values are
kept, and every one of them composes as Default for as long as the entitlement is missing. The
dashboard’s three menus are disabled below the threshold and carry the same Not in your plan
badge — and unlike the colour they have no Clear button, so putting one back to Default from a
downgraded plan goes through POST /orgs/:orgId/status-pages/:pageId/branding, the same route and
the same ungated write that turns white-label off.
Publishing response times
Section titled “Publishing response times”A status page can also show the response times behind its components, as a recent series rather than a single number. This is not one of the two branding settings and no plan gates it — it is a per-page choice, and it is off by default.
Off is the default deliberately, and it is not a placeholder for “we have not got round to it”. A status page is unauthenticated, so publishing latency publishes your infrastructure’s response times to everyone who can open the page, competitors included. That is a decision to make once, per page, on purpose. A page that never opts in never publishes them.
Turning it on is status_page:manage, the same permission as everything else you change about a
page.
Two refusals that look alike
Section titled “Two refusals that look alike”Changing branding can be refused for two unrelated reasons, and they need different fixes. Both come back as 403, so the body is what tells them apart.
| What happened | What you see | What fixes it |
|---|---|---|
| Your role may not manage status pages | a plain forbidden | a role change — status_page:manage is Owner and Admin |
| Your plan does not include the feature | feature_gated, naming the feature |
a plan change |
Reading the second as the first costs an afternoon: nothing about your account is misconfigured, and no amount of role editing will help.
There is a third answer, and it fails closed. If WireWatch cannot resolve your organisation’s entitlements at all, the request is refused rather than treated as though the feature were included. An unanswerable plan is never read as a generous one.
Turning a feature off is never gated
Section titled “Turning a feature off is never gated”Turning a feature off is never gated. The entitlement is checked when you turn white-label on, and when you set a non-empty accent colour — and at no other time.
So both of these work on any plan, including a plan that does not include the feature at all:
- setting
white_labelto false - setting
accent_colorto the empty string
That is deliberate, and it is the property that matters after a downgrade: you can always take your own settings back down to nothing. You are never left holding a setting you are not entitled to and cannot clear.
Your branding disappeared after a plan change
Section titled “Your branding disappeared after a plan change”If your public page has stopped showing your accent colour, or WireWatch branding has come back onto a page that was white-labelled, and nobody touched the settings — this section is the reason. It is not a bug and there is nothing to report.
A downgrade keeps the setting and stops the effect. Moving to a plan that does not include a
feature does not clear anything you saved. The page still stores white_label as you left it and
still stores your colour. What stops is the use of them: every time the public page is composed,
each setting is combined with the entitlement your plan currently gives you, and a setting you are no
longer entitled to contributes nothing. The colour composes as empty; white-label composes as off.
The dashboard will still show the toggle on. That is not a reporting error. The dashboard shows you the stored setting, which really is still on. The public page shows the composed result, which is off. The two disagree, and both are telling you the truth about different things. The dashboard does label the disagreement — a setting your plan no longer includes is badged Not in your plan, next to an Upgrade → link to billing — but labelling it is not resolving it: neither value is changed for you. If you are comparing the two screens and concluding that one of them is broken, this is the disagreement you are looking at.
Upgrading again brings the branding straight back, without you re-entering it. Because the setting was never cleared, regaining the entitlement is the whole fix: the next time the page is composed it composes with your old colour and your old white-label choice. There is nothing to restore and no backup to keep.
If you would rather the two screens agreed, clear the setting yourself. Clearing is never gated, as above, so it always succeeds — but the two settings are not equally easy to reach once you are below the threshold, and the difference is in the dashboard rather than in the API.
Clearing the accent colour works from the dashboard on any plan. Clearing white-label does not — the dashboard’s only control for it is locked, so that one goes through the API.
The accent colour has its own Clear button, and that button is deliberately not gated on the entitlement, so you can still press it on a plan that no longer includes the colour. The field itself is disabled once you are below the threshold, so Clear is the only way to empty it from the dashboard.
Clear only empties the field on screen. It is not a save. Nothing reaches the public page until you press Save branding, which is the control that sends the write. Pressing Clear and navigating away leaves the stored colour exactly as it was, still composing onto the public page — the disagreement you came to fix.
Saving from a downgraded page does not trip the feature gate. The write carries only the fields you
actually changed, so a white_label you are still storing is not re-sent, and an empty accent
colour is not gated in the first place. The Not in your plan badge and its Upgrade → link
stay after a successful save — they describe your plan, not the value you just cleared.
White-label has no clear button: its only control is the checkbox, and a checkbox your plan does not
include is disabled, so there is nothing on the screen to un-tick. Sending whiteLabel: false to
POST /orgs/:orgId/status-pages/:pageId/branding does it, and the API accepts that on any plan for
the same reason the button is ungated.