VerifymeDocs
Widget

Customize

Brand the widget once in the console, or per embed in code.

Console → Widget → Customize sets logo, colors, font, radius, layout and every string for the business, with a live preview and a contrast check. It applies to every session — web and native — with no code change.

Per-embed overrides

Pass theme and labels to override the saved branding for one embed:

<VerifyWidget
  token={token}
  theme={{
    mode: "auto", // auto | light | dark — auto follows the OS, live
    primary: "#4f46e5",
    primaryText: "#ffffff",
    radius: 12, // 0–24
    font: "system", // system | serif | mono | rounded
    density: "compact", // comfortable | compact
    align: "left", // center | left
    surface: "plain", // card | plain (no border/background, blends in)
    poweredBy: false,
    logo: "https://cdn.example.com/logo.svg", // https only
  }}
  labels={{
    title: "Confirm your phone",
    subtitle: "Enter the {length}-digit code sent to {target}.",
    submit: "Continue",
  }}
/>

Changing theme or labels later restyles the open widget without restarting it (handle.update({ theme, labels }) with openWidget).

Theme

KeyValues
primary primaryText background foreground muted border danger successany CSS color
modeauto · light · dark
fontsystem · serif · mono · rounded
radius0–24 (px)
density · align · surfacesee above
poweredBytrue / false
logopublic https URL, ≤ 512 chars

Labels

title, subtitle, submit, resend, resendIn, success, invalid, expired, sessionOver, testBanner — up to 160 characters each. Placeholders: {target} {length} {seconds} {attempts}.

Use labels for localisation:

const labels = locale === "km"
  ? { title: "ផ្ទៀងផ្ទាត់លេខទូរស័ព្ទ", submit: "បន្ត" }
  : undefined // saved branding

Safe by construction

Every value is validated twice — in the console and again inside the frame. Colors must parse as colors, labels are rendered as text (never HTML), and the logo is the only image origin the frame's CSP allows. Invalid values are ignored.

Message wording

The SMS/email text is not widget branding — it's a template. Create one per channel in Console → Templates and mark it default; widget sessions use the channel default (or a raw template passed when creating the session). Variables: {{code}}, {{app_name}}, {{minutes}}.

On this page