ChangeNotifier-based controllers instead of React hooks. Controllers can be used directly (headless) or accessed through the widget tree via providers.
CrossmintClient
The top-level facade for the Crossmint SDK. Provides access to auth, wallets, and all sub-clients.Properties
The authentication client for login/logout flows.
The wallets API client for direct wallet operations.
The verifiable credentials client.
The orders API client.
The tokens API client.
The users API client.
Methods
Initializes the SDK. Must be called before using any other methods.
Cleans up resources.
Creates a wallet controller with the specified configuration.
Usage
CrossmintAuthClient
Manages authentication state and login flows. Exposes state viaValueListenable and Stream for reactive UI updates.
Properties
The current auth state (synchronous getter).
Listenable for auth state changes. Use with
ListenableBuilder or ValueListenableBuilder.Methods
Restores a persisted auth session on app launch. Call during app initialization.
Sends a one-time password to the user’s email address.
Verifies the one-time password and completes authentication.
Initiates an OAuth login flow with the specified provider.
Sets a JWT for bring-your-own-auth (BYOA) flows. Pass a valid JWT to
authenticate; pass
null to log out. The SDK does not refresh the token —
callers are responsible for updating it before expiration.Returns the current auth session, or
null if not authenticated.Returns the authenticated user profile, or
null if not authenticated.Signs out and clears the session.
Usage
CrossmintWalletController
Manages wallet lifecycle — creation, loading, signing, and OTP flows. ExtendsChangeNotifier for reactive UI updates.
Properties
The currently-loaded wallet domain model, or null if no wallet is loaded.
Use
createEvmWallet / createSolanaWallet /
createStellarWallet to wrap it in a runtime wallet that exposes
signing, balance, and transaction methods.Current wallet status:
notLoaded, inProgress, loaded, or error.Read-only
Listenable surface exposing currentWallet, currentWalletId, and
status. Subscribe to this (or to the controller itself — it extends
ChangeNotifier) to react to wallet lifecycle changes.OTP controller for managing email/phone signer challenges.
Methods
Creates a new wallet and stores it as the controller’s
currentWallet.Retrieves an existing wallet and stores it as the controller’s
currentWallet.Wraps the currently-loaded wallet in a runtime EVM wallet bound to the given
signer. The controller must already have a loaded wallet (via
getWallet /
createWallet or auto-creation on login). Returns an instance that exposes
sendToken, balances, signMessage, signTypedData, sendTransaction, etc.Solana equivalent of
createEvmWallet. Solana wallets do not support device
signers.Stellar equivalent of
createEvmWallet.The controller also provides chain-specific convenience factories that build
the signer for you:
createEvmWalletWithDeviceSigner,
createEvmWalletWithPasskeySigner,
createEvmWalletWithExternalWalletSigner,
createEvmWalletWithNonCustodialSigner, and their Solana / Stellar
counterparts.Usage
CrossmintWallets
Stateless convenience facade for wallet operations. Mirrors theCrossmintWallets entry point used by the TS, Kotlin, and Swift SDKs. For reactive state management (e.g. listening to wallet changes in a widget tree), use CrossmintWalletController instead.
Unlike the controller, the facade does not auto-resolve signer configs. Callers must provide fully-resolved configs (e.g. include the email address in CrossmintEmailSignerConfig, or pre-create a device signer via createDeviceSigner()).
Constructor
Creates a facade backed by the given client.
Methods
Retrieves an existing wallet. Throws
CrossmintWalletException if not found.Creates a new wallet and returns a typed runtime wallet.
Creates a device signer descriptor for hardware-backed signing.
Creates a passkey signer configuration.
Usage
Wallet Methods
The runtime wallet instances returned by the controller provide methods for token transfers, balances, signing, and more.Properties
| Property | Type | Description |
|---|---|---|
wallet.address | String | The wallet address |
wallet.chain | String | The chain this wallet lives on |
wallet.owner | String? | The wallet owner identifier (e.g. email or user ID) |
wallet.recovery | CrossmintSignerConfig? | The recovery signer configuration |
wallet.locator | String | The wallet ID used for API calls |
Methods
| Method | Description |
|---|---|
wallet.sendToken(to, token, amount) | Send a token using positional arguments (convenience) |
wallet.send(request) | Send a token using a CrossmintWalletTokenTransferRequest (advanced) |
wallet.balances({tokens}) | Get the wallet balances — always includes USDC and native token; pass tokens: to include extras |
wallet.signers() | List the signers for this wallet |
wallet.addSigner(config) | Add a signer to the wallet using the recovery signer |
wallet.removeSigner(locator) | Remove a signer from the wallet |
wallet.signerIsRegistered(locator) | Check if a signer is registered |
wallet.transactions() | Get the wallet transaction history |
wallet.transaction(id) | Get a transaction by ID |
wallet.transfers() | Get the wallet transfers |
wallet.nfts() | Get the wallet NFTs |
wallet.fund() | Fund the wallet with test tokens (staging only) |
CrossmintEvmWallet—sendTransaction(),signMessage(),signTypedData()CrossmintSolanaWallet—sendTransaction()CrossmintStellarWallet—sendTransaction()
Usage
controller.currentWallet holds the loaded domain model. Signing, balance,
and transaction methods live on the runtime wallet returned by
controller.createEvmWallet() (or createSolanaWallet / createStellarWallet).

