Before you start
Set up your project and get an API key.
Android Demo App
See a full working example with a repository to clone.
1
Install the SDK
Add the Crossmint dependencies to your app’s
build.gradle.kts file:- Version Catalog
- Direct
build.gradle.kts
libs.versions.toml
Requirements
- Minimum Android SDK: API 24 (Android 7.0+)
- JDK 11 or newer
- Jetpack Compose
2
Configure your API key
The Crossmint SDK requires a client API key for authentication.
Get your client API key using the Crossmint Console.
Get your client API key using the Crossmint Console.
3
Initialize the Crossmint SDK
Wrap your app content with
CrossmintSDKProvider to initialize the SDK. This example uses Crossmint Auth
but you can use any authentication provider of your choice.QuickstartApp.kt
The environment (staging vs production) is automatically determined by your API key. Staging keys start with
ck_staging_, production keys with ck_production_.Access SDK instances
Inside theCrossmintSDKProvider, access SDK functionality using LocalCrossmintSDK.current:4
Authenticate users
Actions within the SDK are user-based, so first you need to authenticate a user.
Choose your authentication method:
- Crossmint Auth (OTP)
- Third-Party Auth (Prod)
Use Crossmint’s built-in OTP authentication for easy, email-based login.
OTP Sample Code
OTP Sample Code
This is a simple OTP form example you can use for this quickstart.
1
Send OTP to user's email
2
Enter the OTP sent to the user's email
See the Android Demo App repository for a complete UI implementation example with ViewModels and Compose screens.
5
Create a wallet
After authentication, create the user’s wallet. This example uses Base Sepolia (Base testnet) but you can chose any supported chain.
6
Send USDC
Before sending some USDC, we need to get some into the wallet.Get the wallet address:Then, navigate to the USDC Faucet to get some USDC into the wallet.
Make sure to select 
Now, to send some USDC to another wallet, use the The very first time that a wallet sends a transaction on this device, an OTP will be required, sent to the user via email.Following transactions sent from the same device won’t need OTP verification.To facilitate this, here’s a simple component you can use for the OTP input:
and in And that’s it! You just created a non-custodial wallet for your user and made a USDC transaction on Base Sepolia.
Base Sepolia and insert the wallet address.
wallet.send function.OTP Sample code
OTP Sample code
This is a simple OTP form example you can use for this quickstart.
QuickstartApp.kt where the CrossmintSDKProvider was initialized, use it like this:QuickstartApp.kt
Launching in Production
For production, the steps are almost identical, but some changes are required:- Create a developer account on the production console
- Create a production client API key on the API Keys page with the API scopes
users.create,users.read,wallets.read,wallets.create,wallets:transactions.create,wallets:transactions.sign,wallets:balance.read,wallets.fund - Update your
local.propertieswith the production API key - Use your own authentication provider: For production applications, Crossmint recommends using third-party authentication (Option 2 from Step 4) with providers like Auth0, Firebase, or Supabase, rather than Crossmint Auth (OTP). Configure JWT authentication in the Crossmint Console under API Keys → JWT Authentication.

