- Social logins: Users sign in with Google, Apple, or Facebook (OAuth 2.0).
- Email: Send a one-time password (OTP) by email for identity verification.
- PIN: Users set a PIN to authorize transactions; optional biometrics for fingerprint or face.
Authentication type differences
| Type | Onboarding | Signing | Key management |
|---|---|---|---|
| Social | User is redirected to the provider (Google, Apple, Facebook) to choose the account and sign in. Circle creates the wallet after authentication. | When the user sends a transaction or signs, Circle can show UIs to preview and confirm (customizable or disable). See Confirmation UIs. | ; a key share stays on the user side. Signing happens only when the user acts from their app or device. |
| User enters email; Circle sends an OTP. User verifies identity by entering the code. | Same as social: when the user sends or signs, Circle can show preview/confirm UIs (customizable or disable). | Same as social: 2-of-2 MPC, user-held share; signing only when user acts. | |
| PIN | User sets a 6-digit PIN and answers to security questions during signup. | No built-in transaction UIs. User previews the request elsewhere, then confirms by entering PIN or using biometrics (if enabled). | User has sole access to their keys. PIN (or biometrics) authorizes every transaction. |
Social logins
Users sign in with Google, Facebook, or Apple; Circle creates a wallet for them.Example: Social login UX
Example: Social login UX
Additional social providers: To offer another provider, request it via
Circle on Discord.
Create a wallet with social logins
- Obtain provider IDs: Google Client ID, Facebook App ID, Apple App/Service ID.
- In Circle Developer Console, go to Configurator > Authentication Methods > Social Logins and add the IDs.
- Keep your app’s ID settings and the Console in sync.
User onboarding with social logins
POST /users/social/tokenwithdeviceId→ receivedeviceTokenanddeviceEncryptionKey.- Invoke the client-side SDK
performLoginwithdeviceTokenanddeviceEncryptionKey. - Circle runs the social login flow and returns
userID,userToken,encryptionKey,refreshToken, andOAuthInfo.
Example: User onboarding flow (social)
Example: User onboarding flow (social)
Example: Initialize user and create wallet (social)
Example: Initialize user and create wallet (social)
Example: Email OTP UX
Example: Email OTP UX



Customize UI: The OTP prompt is predefined; you can customize copy, colors,
and images. See
Web SDK UI Customizations.Send again: When the user taps Send again, the SDK emits an event; call
POST /users/email/resendOTP to send a new OTP.Create a wallet with email
- In Circle Developer Console, go to Wallets > User Controlled > Configurator > Email.
- Enter SMTP credentials (stored encrypted).
- Set From, Subject, and Email Template; include
{{ email.otp }}in the template. - Use SEND TEST EMAIL to verify.
{{ email.otp }}: This placeholder must appear in the email template so users receive the OTP.User onboarding with email
POST /users/email/tokenwithdeviceId→ receiveotpToken,deviceToken,deviceEncryptionKey.- Your SMTP sends the OTP email to the user.
- Pass
verifyOTP,deviceToken, anddeviceEncryptionKeyto the client-side SDK; user enters OTP. - Circle validates and returns
userID,userToken,encryptionKey, andrefreshToken.
Example: User onboarding flow (email)
Example: User onboarding flow (email)

Initialize user and create wallet (social and email)
After onboarding (social or email), initialize the user and create a wallet:POST /user/initializewithuserTokenin the body.- Circle returns
challengeId. - Pass
challengeIdto the client-side SDK to create the Web3 wallet.
Example: Initialize user and create wallet (email)
Example: Initialize user and create wallet (email)

User token and refresh token
User and refresh tokens apply to email (and social logins; not PIN). Same token and refresh behavior applies to social logins. The user token is the session identifier and expires 14 days after generation; users are then logged out. To avoid frequent logouts, send aPOST request to
/users/token/refresh
with the existing user token, its refreshToken, and a new user token; the
response returns the new user token.
PIN
Users set a 6-digit PIN (and optional security questions) to authorize transactions. Keys are held by the user. Optional biometrics allow signing with fingerprint or face on supported devices.About PIN
The PIN is encrypted on the user’s device. It is required to authorize wallet actions. After three incorrect attempts, the PIN locks for 30 minutes.Biometrics
When enabled, users can approve signing with fingerprint or facial recognition so a PIN is not required every time.Example: Biometrics UX
Example: Biometrics UX

Wallet recovery through security questions
Users set security-question answers during signup. If they lose or lock their PIN, they can recover by answering those questions. After three incorrect recovery answers, recovery locks for 30 minutes.Example: PIN and recovery setup
Example: PIN and recovery setup




