Use addSigner() to register additional signers on an existing wallet. The wallet’s recovery signer must approve the operation — the SDK handles this automatically.
Email and phone signers cannot be added via addSigner(). They can only be configured as recovery signers at wallet creation time. See Configure Wallet Recovery.
Temporarily activates the recovery signer to approve the operation
After approval, restores the previously active signer
For client-side wallets with an email or phone recovery signer, the user is prompted with an OTP to approve adding the new signer. For server signer recovery, approval happens automatically.
Passkey signers use the WebAuthn/FIDO2 standard for biometric authentication. The user registers a passkey via a browser or platform authenticator prompt.
Passkey signers are EVM-only. They are not supported on Solana or Stellar.
import 'package:crossmint_flutter/crossmint_flutter_ui.dart';final controller = CrossmintWalletContext.of(context).requireWalletController;final wallet = controller.createEvmWallet();// The SDK has no built-in passkey implementation — bridge to the passkey// plugin of your choice (for example `passkeys` or a native platform// channel). The SDK invokes your callback whenever a signature is needed.final passkeyConfig = CrossmintPasskeySignerConfig( name: 'My device passkey', onCreatePasskey: (name) async { // Register a new passkey credential with your plugin and return it // as a `CrossmintPasskeyCredential`. Called once when the signer is // registered. return await YourPasskeyPlugin.create(name); }, onSignWithPasskey: (message) async { // Sign `message` with the passkey and return the result as a // `CrossmintPasskeySignResult`. Called on every signing operation. return await YourPasskeyPlugin.sign(message); },);final result = await wallet.addSigner(passkeyConfig);print('Passkey added: ${result.signer.locator}');
Passkey signers require onCreatePasskey and onSignWithPasskey callbacks
that bridge to your native passkey plugin. See the
Flutter SDK reference
for the CrossmintPasskeySignerConfig API. (The EVM-only restriction above
applies to all SDKs — passkey signers rely on WebAuthn, which is not
supported on Solana or Stellar.)
An external wallet signer connects an existing blockchain wallet or keypair — such as MetaMask, Phantom, or a raw keypair — as a signer. When adding an external wallet via addSigner(), only the address is needed (no onSign callback required for registration).
Sign the approval message returned in the response using your recovery signer, then submit the approval. For EVM wallets, use the approve signature endpoint. For Solana and Stellar, use the approve transaction endpoint.
When a user accesses their wallet from a new device, the SDK automatically handles device signer creation through the recovery flow. You do not need to call addSigner() manually for this — it happens as part of the recovery process.If you want to trigger recovery before the first transaction:
Recovery signers approve high-privilege operations (adding new signers, recovery). They cannot be added via addSigner() — they are configured at wallet creation time. Access the recovery signer via wallet.recovery. See Configure Wallet Recovery.