Skip to content

White-Label Branding

Apply your own logo, company name, primary color, and light/dark preference to the hosted verification flow.

Overview

This is the full extent of white-label support today:

  • Logo — your logo URL, shown in place of the YeboVerify icon
  • Company Name — shown alongside your logo
  • Primary Color — a single accent hex color applied across the flow
  • Dark Mode Preference — light or dark

Not implemented

Custom domains, custom email templates, CSS overrides, multi-brand profiles, a hosted branding-preview URL, and hiding YeboVerify attribution are not built. If you need one of these, contact [email protected] — don't rely on any endpoint or parameter not documented on this page; anything else is rejected with a 400, not silently ignored.


Setting Your Branding

GET/PUT /v1/settings/branding reads and writes the branding for your business (identified by your API key). This is account-wide — every session created with your API key uses it unless overridden per-session (see below).

javascript
// Set your branding
const res = await fetch('https://api.yeboverify.com/v1/settings/branding', {
  method: 'PUT',
  headers: {
    'X-API-Key': 'yv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    logoUrl: 'https://yourcompany.com/logo.svg',
    companyName: 'Acme Corp',
    primaryColor: '#FF6B00',
    darkMode: true,
  }),
});
javascript
// Read it back
const res = await fetch('https://api.yeboverify.com/v1/settings/branding', {
  headers: { 'X-API-Key': 'yv_live_YOUR_API_KEY' },
});
// { success: true, data: { logoUrl, companyName, primaryColor, darkMode } }

Fields

FieldTypeDescription
logoUrlstring | nullA valid URL to your logo. null clears it back to the default YeboVerify icon.
companyNamestring | null1–255 characters. null clears it.
primaryColorstring | nullA hex color, e.g. #FF6B00 or #F60. null clears it.
darkModebooleantrue (default) keeps the standard dark flow; false switches to a light theme.

A field omitted from the request body is left unchanged. Any field not in this table (backgroundColor, textColor, borderRadius, fontFamily, favicon, hideYeboVerify, ...) is rejected with 400 — it is never silently accepted and ignored.


Per-Session Override

POST /v1/sessions/create accepts an optional theme object with the same four fields, which overrides your account default for that one session only:

javascript
const session = await fetch('https://api.yeboverify.com/v1/sessions/create', {
  method: 'POST',
  headers: {
    'X-API-Key': 'yv_live_YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    userId: 'user_123',
    theme: {
      primaryColor: '#1E40AF', // overrides your account default for this session only
    },
  }),
});

The resolved branding (your account default, with any theme fields overridden) is embedded in the signed session token and returned by POST /v1/sessions/validate as branding. The hosted flow at verify.yeboverify.com reads it from there and themes itself accordingly — there is no separate brand-management step and no brandId/multi-brand concept.

As with PUT /v1/settings/branding, any field in theme outside the four above is rejected with 400.


What This Looks Like To The End User

With a logo and company name set, the hosted flow's intro screen shows your logo and company name in place of the default YeboVerify branding, themed with your primaryColor. A small "Secured by YeboVerify" line stays at the bottom — attribution is not currently removable.


Testing Your Branding in Sandbox Mode

Sandbox mode is real and unrelated to the unbuilt branding-preview URL above: every business is issued a yv_test_ key alongside its live key at signup. A sandbox session opens the SAME hosted verify-app UI a real user sees — fully branded from your account defaults and any per-session theme — so you can check how your branding looks end to end without submitting a real ID or selfie and without being billed.

javascript
const session = await fetch('https://api.yeboverify.com/v1/sessions/create', {
  method: 'POST',
  headers: {
    'X-API-Key': 'yv_test_YOUR_TEST_KEY', // sandbox key — never bills, never calls a real provider
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    userId: 'test_user_1',
    theme: { primaryColor: '#1E40AF' }, // branding works exactly as it does live
    // Forces the outcome of whatever the end user submits in this session:
    // approved (default) | rejected | needs_review | liveness_spoofed | expired_document
    simulate: 'needs_review',
  }),
});
const { verifyUrl } = await session.json();

Any placeholder photo satisfies the capture step, and the identity check itself is simulated per simulate — so you can also confirm your branding renders on the success, rejection and review screens. simulate is rejected with a 400 on a live key.

See SDKs & Libraries → Sandbox mode for the full sandbox reference.


Support

Identity Verification API for Africa