Skip to main content
Non-custodial wallets support multiple authentication flows. Each method creates or recovers the same underlying wallet address for that user; a user who signs in with Google and then later with email (if accounts are linked) accesses the same wallet.

Social login

Social login is the recommended flow for consumer-facing fintechs and payment apps. Users authenticate via their existing Google or Apple account. No password or seed phrase is involved.
const result = await oms.wallet.signInWithOidcRedirect({
  provider: 'google',
})

if (result && 'walletAddress' in result) {
  console.log('Wallet address:', result.walletAddress)
}
The wallet is created automatically on first login using the identity token from the provider. The token is verified inside a secure enclave; neither the app nor OMS can read it. For Google setup, see the Google OAuth configuration guide on the Sequence docs. For Apple setup, see the Apple configuration guide.

Email OTP

Email OTP is ideal for financial products where users may not have a social account or prefer not to link one. The user enters their email, receives a one-time code, and the wallet is created on verification.
await oms.wallet.startEmailAuth({ email: 'user@example.com' })

const result = await oms.wallet.completeEmailAuth({ code: '123456' })

console.log('Wallet address:', result.walletAddress)
The SDK handles the full OTP flow. No additional backend is required; the code exchange happens between the SDK and the WaaS enclave.

Custom OIDC and OAuth 2.0 providers

OMS Wallet supports any OIDC-compliant provider and standard OAuth 2.0 authorization code flows with PKCE. This covers enterprise SSO (Okta, Auth0, custom in-house IdPs), region-specific identity providers, and identity providers tied to an external KYC or IDV vendor. The provider is registered per project in the Polygon project dashboard with its issuer URL and client credentials. The same signInWithOidcRedirect and signInWithOidcToken APIs used for the built-in Google and Apple flows work with any registered provider; the WaaS enclave verifies the ID token against the provider’s JWKS endpoint. No provider-specific code is required in your app.

Checking sign-in state

if (oms.wallet.session.walletAddress) {
  console.log('Signed in:', oms.wallet.session.walletAddress)
} else {
  console.log('Not signed in')
}