What you can customize
Authentication flows
Whitelabel login and MFA with your own UI and branding.
Embedded wallets
Create seamless wallet interactions with your own UI components and styling.
User management
Manage user profiles and connect social accounts your way.
Whitelabeling your app
Privy allows developers to choose when to take advantage of Privy’s UI and when to customize the experience with their own UI. This guide walks through how to whitelabel your app.Authentication
All of Privy’s authentication flows can be whitelabeled, from email and SMS passwordless flows to social logins and passkeys.Email
To whitelabel Privy’s passwordless email flow, use the Learn more about email authentication and tracking login flow state.
useLoginWithEmail hook. Then, call sendCode and loginWithCode with the desired email address.SMS
SMS
To whitelabel the passwordless SMS flow, use the Learn more about SMS authentication and tracking login flow state.
useLoginWithSms hook. Then, call sendCode and loginWithCode with the desired phone number.Social logins
Social logins
Passkeys
Passkeys
To whitelabel passkeys, use the To sign up with a passkey:To link a passkey to an existing user:Learn more about passkeys and tracking login flow state.
useLoginWithPasskey hook and call loginWithPasskey.Telegram
Telegram
To whitelabel the Telegram login flow, it’s as simple as using the Learn more about Telegram authentication and tracking login flow state.
useLoginWithTelegram hook and calling login.MFA
MFA
To whitelabel MFA with SMS, TOTP, or passkeys, follow the custom UI guide.
Wallets
Privy enables developers to whitelabel embedded wallet functionality. You can abstract away wallet UIs entirely or selectively use Privy’s default UI for specific flows. To whitelabel embedded wallets, you can configure this globally across your app in thePrivyProvider config, or selectively for specific flows at runtime.
Provider config (globally)
Provider config (globally)
In your For more granular control, you can also control wallet UIs for specific flows in the sections below.
PrivyProvider config you can control the default wallet UI for all flows in your app.Create a wallet
Create a wallet
Privy supports whitelabeling wallet creation for Ethereum, Solana, and other chains.
- Ethereum
- Solana
- Other chains
Signing a message
Signing a message
To whitelabel Privy’s message signing functionality, use the
useSignMessage hook and call signMessage with your desired message.- Ethereum
- Solana
- Other chains
Sending a transaction
Sending a transaction
To whitelabel Privy’s transaction sending functionality, use the
useSendTransaction hook and call sendTransaction with your desired transaction.- Ethereum
- Solana
User management
Privy supports whitelabeling user management for linking and unlinking accounts.Linking a social account
Linking a social account
Linking a wallet
Linking a wallet
To whitelabel linking wallets, use the
useLinkWithSiwe hook for Ethereum wallets or useLinkWithSiws hook for Solana wallets. These hooks allow you to generate messages, request signatures, and link wallets without using Privy’s modal UI.- Ethereum (SIWE)
- Solana (SIWS)
To link an Ethereum wallet to a user via SIWE, use the React SDK’s Alternatively, you can request a signature from any external wallet or smart account:
useLinkWithSiwe hook.Generate SIWE message
Sign the SIWE message
Request an EIP-191personal_sign signature for the message returned by generateSiweMessage from the wallet.Link with SIWE
Usage
Callbacks
You can optionally pass callbacks intouseLinkWithSiwe:Updating an email
Updating an email
To whitelabel updating a user’s email address, use the This sends a one-time passcode to the new email address, which the user must enter to verify and confirm the update.
useUpdateEmail hook:Send an OTP
First, use thesendCode method to send an OTP verification code to the user’s new email address:Verify the OTP
Prompt the user for the OTP they received and verify it using theverifyCode method:State
Thestate property provides the current state of the OTP flow:| Status | Description |
|---|---|
'initial' | The flow has not started |
'sending-code' | The code is being sent |
'awaiting-code-input' | Waiting for the user to enter the code |
'submitting-code' | The code is being verified |
'done' | The email was updated successfully |
'error' | An error occurred (includes an error field) |
Usage
Callbacks
You can optionally pass callbacks intouseUpdateEmail:Unlinking an account
Unlinking an account
To whitelabel unlinking an account, use the
usePrivy hook and call unlink<Provider>.

useLoginWithSocialhook and callinitOAuthwith your desired social login provider.