White label
Apply your product identity with validated theme, logo, copy, and behavior options.
Pass customer-visible product identity through applicationName and
whiteLabel. Domain0 validates every value before mounting the flow.
await domain0.connectDomain({
client,
connectionId,
applicationName: 'Acme Cloud',
whiteLabel: {
logo: 'https://app.acme.com/brand/logo.svg',
logoBackgroundColor: '#FFFFFF',
theme: {
colorMode: 'system',
light: {
surface: '#FFFFFF',
text: '#111827',
primary: '#172554',
onPrimary: '#FFFFFF',
},
dark: {
surface: '#111827',
text: '#F9FAFB',
primary: '#BFDBFE',
onPrimary: '#172554',
},
dialogRadiusPx: 16,
buttonRadiusPx: 8,
},
copy: {
successTitle: { en: '{DOMAIN} is connected' },
successButton: { en: 'Return to Acme' },
},
},
})Company identity
| Option | Behavior |
|---|---|
applicationName | Plain-text product name, up to 120 characters |
logo | HTTPS image URL without embedded credentials |
logoBackgroundColor | Opaque #RRGGBB color |
removeLogoBorder | Removes the default logo boundary |
hideCompanyLogo | Hides the supplied logo |
hideCompanyName | Hides the supplied application name |
Remote logos are fetched by the customer's browser. Host them on a stable HTTPS origin intended for public brand assets and avoid customer-specific URLs.
Theme
colorMode accepts light, dark, or system. Each palette supports:
| Token | Used for |
|---|---|
surface | Dialog background |
text | Primary text |
mutedText | Secondary text |
border | Controls and separators |
primary | Primary controls |
onPrimary | Text on primary controls |
link | Link text |
focus | Keyboard focus indicators |
danger | Error text and destructive emphasis |
onDanger | Text on destructive controls |
Colors use opaque uppercase or lowercase #RRGGBB input and are normalized.
The backdrop uses #RRGGBBAA. Domain0 rejects palettes that fail the required
text, control, link, or focus contrast.
Layout tokens are bounded:
| Token | Range |
|---|---|
widthPx | 320–960 |
dialogRadiusPx | 0–32 |
buttonRadiusPx | 0–32 |
inputRadiusPx | 0–32 |
fontWeight | 100–900 in steps of 50 |
boldFontWeight | 100–900, not lower than fontWeight |
fontFamily accepts a bounded system-font stack. It does not load remote fonts
or accept arbitrary CSS.
Custom copy
Copy can be an English string or an object with en plus translated values.
English is required as the fallback.
| Field | Placeholder |
|---|---|
initialSubtitle | None |
providerLoginMessage | {PROVIDER} |
successTitle | {DOMAIN} |
successDescription | {DOMAIN} |
successButton | None |
manuallyScreen.stepByStepGuide | None |
Copy is plain text, limited to 500 characters, and cannot contain HTML or unrecognized placeholders.
Behavior controls
| Option | Effect |
|---|---|
removeShareLogin | Hides the DNS-administrator sharing action |
skipCongratulationsScreen | Closes after verified success without the final screen |
customProperties.manualConfiguration.disableScreen | Removes guided manual setup |
customProperties.providerLogin.forwardLink.disable | Removes the sharing action at provider login |
customProperties.providerLogin.gotoManualLink.disable | Removes the manual fallback link |
copy.manuallyScreen.disableManualSetupDocumentationLink | Hides the generic guide link |
Contradictory options are rejected
Forced manual mode requires the manual screen and its entry link. DKIM guidance requires the success screen. The SDK rejects configurations that make the selected flow unreachable.