Skip to main content

Build a theme in the dashboard

Open Settings → Pay Playground after your organization has access. Choose Test donations, configure the pop-up, and copy the generated integration snippet. Replace its key placeholder with your matching publishable key from Pay SDK Keys. Selecting Live donations changes the key placeholder; it does not switch your account’s processing mode by itself. To start with a saved organization theme, select Load organization themes, choose a theme, and select Use this theme. This prefills supported colors, control styles, fonts, and logo. Loading themes requires theme-read permission. The pop-up theme is a copy you can customize independently. Editing it does not modify the saved organization theme, and later changes to the source theme do not automatically change your copied configuration.

Apply a theme in code

Pass theme to mountButton() or open():
Replace image URLs with publicly accessible HTTPS assets. logo and avatar accept either a single URL or an object containing light and dark URLs. avatar supplies the fallback image for the donor’s giving-profile chip. mode accepts light, dark, or auto. A fixed mode hides the theme toggle; auto lets the donor switch. Unspecified tokens use the pop-up defaults. Define both light and dark tokens when supporting both appearances. font is a CSS font stack. To load a webfont, supply its HTTPS stylesheet in fontUrl; a font-family name alone does not download a font. Your organization is responsible for using licensed fonts and accessible colors.

Color and shape reference

Set color tokens separately inside theme.light and theme.dark: Use theme.radius for shared rounding, or inputRadius, buttonRadius, and popupRadius for separate control shapes. Values are CSS lengths such as 8px or 0.5rem.

Style the launch button

Button options are separate from the full pop-up theme: Your page must provide the CSS for any classes you pass. Host-page CSS does not reach inside the hosted pop-up or Payframes. For a fully custom launch button, render your own element and call pay.open().

Languages and copy

Built-in theme.locale values are en, es, fr, de, pt, nl, and it. If omitted, the pop-up uses a supported browser language, falling back to English. Set showLocalePicker: true to let donors change languages in checkout. Use theme.copy.title, subtitle, and action for prominent checkout copy. action is the verb used in the amount-bearing donation button. Use theme.strings to override individual labels. Overrides take precedence over built-in translations, so a fixed custom string is not automatically translated when the donor changes language.
These are the available string override keys: If overriding recaptchaDisclosure, retain both {privacy} and {terms} placeholders so their disclosure links remain present. Localized copy changes presentation; it does not change payment eligibility, currency, or legal terms.

Donor and payment-form options

Payment-method options control the entry UI; they do not enable a processor or add account capabilities. Keep at least one supported method available. Confirm minimal billing is appropriate for your processor. Guest mode does not bypass payment verification or fraud checks.

Organization brand versus appearance

Use organizationBrandId in the donation options to identify the donation’s financial brand. Set theme to control how checkout looks. A theme, logo, or language selection does not select an organization, financial brand, processing currency, or payment processor. The publishable key identifies your organization.