Skip to content

Branding & theming

Account wide defaults, white label, custom CSS, and how they meet appearance.

Branding is what your checkout looks like before any code runs. It is set once on your account, it arrives with the session, and it applies to the hosted page, the overlay and every payment field component.

appearance is the other half, covered on Appearance. This page is the server side.

Where it is configured

In the Dashboard, under Settings then Branding. There is no API for it, and there is nothing to pass at mount time. Save it once and every session that follows carries it.

The checkout reads that configuration from the payment session, resolves it before the first paint, and only then applies whatever appearance you passed on top.

What the session carries

These are the fields the checkout receives on every session.

FieldWhat it sets
business_nameThe merchant name in the header
logo_urlThe header logo
logo_square_urlThe square variant, used where the layout is narrow
icon_urlThe favicon of the checkout tab
custom_domainYour own domain for the hosted page
layoutThe design of the hosted page, design1 to design4
localeThe default interface language
fontThe font family name, Inter when unset
border_radiusThe default corner radius, 8px when unset
primary_color, secondary_color, background_colorThe base palette
button_text_color, success_color, error_colorButtons and state colours
input_background_color, input_border_color, text_muted_colorForm fields
card.background_color, card.border_colorThe surface the form sits on
shadow, overlay_intensityElevation, and the backdrop of the overlay
tab_active_bg, tab_active_text, tab_inactive_bg, tab_inactive_textTab layout colours
accordion_header_bg, accordion_body_bgAccordion layout colours
step_active_bg, step_done_bg, step_inactive_bgThe step indicator
separator_colorDividers
font_weight_heading, font_weight_bodyTypography weights
custom_cssA stylesheet injected into the checkout
white_labelWhether Wajub attribution is hidden

Two different things are called layout

branding.layout picks the design of the hosted page, design1 to design4. The SDK's layout option picks how payment methods are arranged, classic, compact, tabs or accordion. They are independent, and setting one never affects the other.

White label

The mode is not a setting you pick. The checkout derives it from what you have filled in.

ModeWhenResult
wajubNo logo, no primary colour, no business nameThe Wajub brand is visible
co_brandedAny one of those is setYour brand, with Wajub attribution
full_white_labelWhite label enabled on your accountYour brand alone

Uploading a logo is therefore enough to leave the default. Going all the way to full_white_label requires the account flag, because it removes Wajub from a payment page the payer is trusting.

In full_white_label, the overlay chrome receives showWajubBranding: false and the checkout drops the Wajub mark. The security badge becomes generic in that mode, and also in plain wajub mode. Only co_branded shows the Wajub name on it.

Custom CSS

custom_css is a raw stylesheet injected into the checkout document. It is the only way past the limits of appearance.rules, which reaches .Input and .Label and nothing else.

UseReach for
Field radius, padding, label weightappearance.rules, it stays in your codebase
A web font, a background image, a layout changecustom_css

The trade is real. custom_css lives in the Dashboard, applies to every session, and targets internal class names that are not a public contract. Prefer appearance for anything it can do.

Who wins

Four layers, resolved in this order.

Later wins
Dashboard branding        the account default, every session

Session branding          resolved and sent when the checkout loads

appearance at mount       this one embed

instance.update()         this one embed, after it is running

Client keys merge on top of session branding rather than replacing it, so naming primaryColor changes the accent and leaves your logo, your font and your radius alone.

locale and layout passed at mount also override the session defaults, with one exception already noted on Appearance: update({ layout }) does not reach the hosted checkout after mount.

Choosing a layer

GoalLayer
The same look on every checkoutDashboard branding
A different brand per merchant, on SyncPer account Dashboard branding
A dark mode toggle on your siteappearance.colorScheme plus update()
One campaign, one pageappearance on that mount
Remove the Wajub markWhite label on your account
A web fontcustom_css

What did you think of this content?