A signer is a digital identity authorized to approve actions on the wallet’s behalf. When a transaction is initiated, the signer digitally signs it, thereby authorizing and enabling its execution.

Crossmint supports the following signer types:

Choosing a signer type

Signer types will define the custody and user experience of a wallet.

Signer typeCustodyUser experience
Email, phone number, social loginNon-custodialUsers authenticate once per device the first time they are going to transact. Future transactions can happen without needing user interaction.
PasskeyNon-custodialTransactions need to be signed every time with the device biometrics or password manager.
External WalletNon-custodial or custodial depending on who has access to the wallet.Transactions need to be signed every time with the external wallet.
API KeyCustodialAll transactions can happen without needing user interaction.

If you use a non-custodial signer and a custodial signer at the same time, the wallet will be considered custodial.

Choose custodial signers if:

  • You are licensed for custody
  • You are building use cases that don’t require custody, such as collectibles or utility token management
  • You want to handle asset management and transactions on behalf of users
  • You need a simple, server-side solution without user interaction for blockchain operations

Choose non-custodial signers if:

  • You are building use cases that require license (e.g. holding stablecoins) and you don’t have it
  • Self custody is important to your users

Signer types

Email, phone number, and social login

Email signers are undergoing a security audit and will be production ready early July.

Phone number and social login signers are available under private access. Contact us if you need access.

Email, phone number, and social login signers enable users to access their wallets and perform transactions seamlessly using their email address, phone number, or social account.

Users just need to verify their email address, phone number, or social account once per device to access their wallet.

Configuration

import { useWallet } from '@crossmint/client-sdk-react-ui';

const { getOrCreateWallet } = useWallet();

const wallet = await getOrCreateWallet({
    chain: "<your-chain>",
    signer: {
        type: "email",
    },
});

Passkey

Passkeys enable users to access their wallets and perform transactions using their device biometrics or password manager. They are built on top of the WebAuthn standard and are supported by most modern browsers.

Configuration

import { useWallet } from '@crossmint/client-sdk-react-ui';

const { getOrCreateWallet } = useWallet();

const wallet = await getOrCreateWallet({
    chain: "solana",
    signer: {
        type: "passkey",
    },
});

External wallet

External wallets (or keypairs) can be used as signers to access and transact with a wallet. This includes also wallets

Configuration

import { useWallet } from '@crossmint/client-sdk-react-ui';

const { getOrCreateWallet } = useWallet();

const wallet = await getOrCreateWallet({
    chain: "<your-chain>",
    signer: {
        type: "external-wallet",
        address: "<your-wallet-address>",
    },
});

API key

A project’s API key can also be used as a signer for your wallet. This allows transacting with a wallet without needing the user to sign at any point.

Configuration

import { useWallet } from '@crossmint/client-sdk-react-ui';

const { getOrCreateWallet } = useWallet();

const wallet = await getOrCreateWallet({
    chain: "<your-chain>",
    signer: {
        type: "api-key",
    },
});