Themes are authored in the Dashboard. You assign them to a product either by picking one in the product’s create/edit flow, by setting a company default, or by passing a
themeId when you create the product via the API.How appearance is resolved
Two independent things decide how a deposit, pay link, or withdrawal looks — one picks the colors, the other picks light vs dark: Which colors — the theme. Resolved in this order:- Theme assigned to the product — the
themeIdset on that specific deposit / pay link / withdrawal. - Company default theme — the theme you mark as default under Settings → Themes.
- Preset default — MoonPay’s built-in default (MoonPay Mono).
- The embed’s
themeModevalue, if set — forces light or dark. - Otherwise the buyer’s system light/dark preference.
themeMode: 'dark' gets that theme’s dark palette. Leaving themeMode unset shows whichever of the theme’s palettes matches the buyer’s system setting — themeMode never replaces the theme, it just picks the palette.
Create a theme
- Go to Settings → Themes in the Dashboard.
- Click Add Theme and give it a name.
- Set the Light and Dark palettes and the shared design tokens (see below). A live preview shows how deposits, pay links, and charges will look.
- Save, then choose it as your Active theme by clicking on it.
Presets (MoonPay Purple and MoonPay Mono) are available out of the box. You can start from a preset and save your own variations.
Palette (per light and dark)
Each palette is a set of hex colors.
Colors must be valid hex (e.g.
#7D00FF). Text color on buttons is derived automatically for contrast — you don’t set it.
Design tokens (shared across light and dark)
Assign a theme
In the Dashboard
When creating or editing a deposit, pay link, or withdrawal, pick a saved theme in the flow. If you don’t pick one, the product uses your company default theme.By ID via the API
When you create or update a product with an API key, pass the theme’sthemeId:
- Deposits —
POST /v1/deposits/create/api-key,PATCH /v1/deposits/{depositId}/api-key - Pay links —
POST /v1/paylink/create/api-key,PATCH /v1/paylink/{id}/api-key - Withdrawals —
POST /v1/withdrawal-configs/api-key,PATCH /v1/withdrawal-configs/{withdrawalConfigId}/api-key
Themes are created and edited in the Dashboard only — there is no public API to create or edit themes. The API lets you assign an existing theme by ID and returns the resolved theme on public payloads.
