Skip to main content
The email signer authenticates users with a one-time password (OTP) sent to their email address. The OTP backend and the derived Stellar ed25519 key are custodied server-side by the facilitator; the browser only ever sees the public key and 64-byte signatures, delivered through your same-origin signer-proxy.

When to use

Choose emailSigner when you want the lowest-friction onboarding: the user enters their email, receives a code, and pays - no wallet install, no seed phrase, no OAuth account. The resulting key backs a classic G... account.
The OTP backend secret and the custodied private key are never in the browser bundle. Configure a same-origin proxyUrl pointing at your backend signer-proxy, created with createSignerProxyRoute from @buckspay/nextjs. The private key never reaches client-side code.

Factory

emailSigner(opts) accepts an EmailSignerOptions object:

Two-step authentication

The email signer uses a two-step flow before the payment: Step 1 - Request the OTP
Step 2 - Verify and authenticate
After authenticate() resolves, the signer’s getPublicKey() and signAuthEntry() are ready and the payment can proceed with the normal prepare -> sign -> send flow.

Server-side proxy

Mount the signer-proxy in your backend:
The proxy forwards the issue and verify actions to the facilitator with the backend secret.

Example

Next

Social login

Use an OAuth provider (Google, Apple, Discord) instead of an email code.

Facilitator and BFF

How the signer-proxy and API key work together server-side.