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).
// 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,
}),
});// 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
| Field | Type | Description |
|---|---|---|
logoUrl | string | null | A valid URL to your logo. null clears it back to the default YeboVerify icon. |
companyName | string | null | 1–255 characters. null clears it. |
primaryColor | string | null | A hex color, e.g. #FF6B00 or #F60. null clears it. |
darkMode | boolean | true (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:
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.
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
- API Reference: /api-reference
- SDKs: /sdks
- Email: [email protected]