Skip to content

How to Use Crossmint Agent Wallets for USDC (2026)

Set up Crossmint Agent Wallets for USDC: create a user smart wallet, authorize a server signer with email OTP, fund staging with 5 USDXM, and send USDC on Base.

Table of Contents

Operators building AI agents that spend USDC need a wallet the user owns, a delegated signer the agent can use without a prompt per tx, and a revoke path when the agent should stop.

Crossmint Agent Wallets are that stack: a non-custodial user smart wallet, a server signer authorized with a one-time email code, and wallet.send for USDC (or staging USDXM) signed entirely on your backend.

📌
Stablecoin Insider's framing: Crossmint Agent Wallets are the user-owned USDC spend path for an agent (create wallet, authorize server signer, send). Coinbase Agentic Wallet (awal) and Circle Agent Wallet are different products with different CLIs and custody models.

This guide walks the public Crossmint docs flow as of September 18, 2026: staging keys, create-on-login wallet on base-sepolia, authorize with prepareOnly: true, fund with stagingFund(5) USDXM, send stablecoins, then revoke.

Key Takeaways

  • Crossmint Agent Wallets give a user-owned smart wallet plus a delegated server signer for USDC spends.
  • Staging quickstart needs Node.js 20+, client + server API keys, and a 32-byte CROSSMINT_SIGNER_SECRET.
  • Authorize with addSigner prepareOnly:true, then the user approves via email OTP before the agent can sign.
  • Staging mints 5 USDXM via stagingFund(5); production uses USDC on Base (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913).
  • Named downside: anyone with the signer secret can sign every wallet it was authorized on; revoke with the user recovery signer only.
⚠️
Named downside: CROSSMINT_SIGNER_SECRET is as sensitive as a database password. Anyone holding it can sign for every wallet that secret was authorized on. Never ship it to the browser or the LLM prompt.

What Crossmint Agent Wallets are (and aren't)

In Crossmint's Agents overview, Agent Wallets are the non-custodial stablecoin path next to Agent Cards and Agent Checkouts. The wallet is owned by the end user. The agent is a scoped delegate.

Crossmint's Stablecoin Wallet Quickstart targets about 10 minutes to a running app: sign in, get a wallet, authorize the agent, fund, and send. The reference repo is Crossmint/stablecoin-wallet-quickstart on GitHub.

StepWhat happensWho signs
1. AuthenticateEmail OTP or Google via CrossmintAuthProviderUser
2. Create walletcreateOnLogin on base-sepolia with email recoveryUser recovery signer
3. Authorize agentaddSigner({type:"server"}, {prepareOnly:true}) then email approveUser then server signer
4. FundstagingFund(5) USDXM (staging) or USDC onramp/transfer (prod)N/A / user
5. Sendwallet.useSigner + wallet.send(recipient, "usdc"|"usdxm", amount)Server signer
6. Revokewallet.removeSigner with user email signer activeUser only

This is not Coinbase Agentic Wallet (awal) and not Circle Agent Wallet. Those are separate how-tos on Stablecoin Insider. Crossmint is the SDK path where your backend holds a server signer secret and the user keeps email recovery.

Prerequisites (as of Sep 18, 2026)

Crossmint's quickstart requires:

  • Node.js 20+ and pnpm
  • A Crossmint Staging Console project with a client-side key (ck_…) and a server-side key (sk_…)
  • A 32-byte CROSSMINT_SIGNER_SECRET (raw 64-char hex or xmsk1_<64-hex>)
  • Env vars: NEXT_PUBLIC_CROSSMINT_CLIENT_API_KEY, CROSSMINT_SERVER_SIDE_API_KEY, CROSSMINT_SIGNER_SECRET

Staging keys come with all scopes enabled by default. Develop on base-sepolia with staging keys. Production uses base with production keys and real USDC.

Step 1. Clone the quickstart and install

Clone github.com/Crossmint/stablecoin-wallet-quickstart, run pnpm install, then copy .env.example to .env.local and paste your keys.

Generate the signer secret once and store it only as a server-side environment variable. Crossmint docs warn that anyone who holds the secret can sign on behalf of every wallet it has been authorized on.

Step 2. Create the user wallet on login

Wrap the app with CrossmintProvider, CrossmintAuthProvider (email and Google), and CrossmintWalletProvider with createOnLogin={{ chain: "base-sepolia", recovery: { type: "email" } }}.

On first login the SDK creates a non-custodial smart wallet with the user's email as the recovery signer. useWallet() exposes wallet.address when status is loaded. Creation is idempotent: repeated calls return the same wallet.

For non-React or custom auth backends, use @crossmint/wallets-sdk with wallets.createWallet({ chain, owner: `userId:${userId}`, signer: { type: "email", email } }). Server-side creation requires an explicit owner so later getWallet calls resolve correctly.

Full create steps live in Crossmint's Create a User Wallet guide.

Step 3. Authorize the agent with prepareOnly

Authorization is a two-step dance so the user stays in control. See Authorize the Agent.

3a. Register the server signer (backend)

From a server action, call wallet.addSigner({ type: "server", secret: process.env.CROSSMINT_SIGNER_SECRET }, { prepareOnly: true }). That returns locator and signatureId. The secret never leaves your backend.

Always pass prepareOnly: true from the server. If you omit it, the SDK can auto-approve with the server signer itself and the user never sees a prompt.

3b. User approves with email OTP (client)

On the client, activate the email signer with wallet.useSigner({ type: "email", email: user.email }), then wallet.approve({ signatureId }). That triggers the one-time email code. After verification, wallet.signers() should show an entry with type: "server".

Step 4. Fund and send USDC (or staging USDXM)

Crossmint's Using the Wallet guide is the send path.

On staging, wallet.stagingFund(5) mints 5 USDXM into the wallet (staging-only). For production USDC, use Crossmint Onramp & Add Funds or a direct transfer. Base mainnet USDC contract in Crossmint production notes: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913.

Before signing, activate the server signer on that wallet handle:

await wallet.useSigner({ type: "server", secret: process.env.CROSSMINT_SIGNER_SECRET })

Then send:

const tx = await wallet.send(recipient, "usdc", amount) (use "usdxm" on staging). Crossmint docs state gas is sponsored by default on supported chains, so the user does not need ETH for gas on those paths.

Calling useSigner is per handle. If you getWallet again, call useSigner again before signing.

💡
Stablecoin Insider's take: treat stagingFund(5) as a lab faucet, not a production funding model. Production agents should fund USDC via onramp or treasury transfer, with spend policies on the server signer before the first live send.

Step 5. Revoke agent access

When the agent should stop spending, revoke the server signer. Crossmint's Remove Agent Access flow requires the user's recovery signer, not the agent.

Activate wallet.useSigner({ type: "email", email: user.email }), then wallet.removeSigner({ locator }). Persist the locator from addSigner against each wallet. The same secret produces a different locator per wallet. Revocation is per-wallet.

An agent cannot revoke itself. If the server signer is active when you call remove, the request fails by design.

Crossmint Agent Wallet vs other SCI wallet how-tos

ProductOwner modelAgent authPrimary surface
Crossmint Agent WalletsUser-owned smart wallet + email recoveryServer signer + email OTP@crossmint SDKs / quickstart
Coinbase Agentic WalletCoinbase TEE-backed agent walletEmail OTP via awal CLIawal CLI / payments-mcp
Circle Agent WalletCircle developer wallet stackCircle APIs / agent toolingCircle docs + SCI Circle how-tos

For a general wallet bootstrap checklist, see how to set up an AI agent wallet. For funding patterns, see how to fund an AI agent wallet with USDC. For HTTP micropayments after the wallet exists, see how to accept x402 USDC from AI agents and how to charge for MCP tools with Cloudflare Agents x402.

How to Create a Circle Agent Wallet for USDC (2026)
Circle's agent wallet path for USDC, as a related Stablecoin Insider how-to next to Crossmint.

Who this is for (and who should skip it)

Use Crossmint Agent Wallets if you need a user-owned USDC wallet, backend-signed agent spends, and a clean revoke path with email recovery.

Skip it if you only need a one-shot x402 buyer fetch (start with Coinbase AgentKit), or if your compliance model forbids a shared server signer secret across many user wallets without per-tenant secrets and hard spend caps.

Need the wallet bootstrap first? Start with Stablecoin Insider's AI agent wallet setup guide, then come back to Crossmint authorization.

Read AI agent wallet setup

FAQ

What is a Crossmint Agent Wallet?

A Crossmint Agent Wallet is a non-custodial user smart wallet that can authorize an AI agent as a delegated server signer to send stablecoins (USDC in production, USDXM in staging) without a user prompt per transaction.

How do you authorize a Crossmint agent to spend USDC?

Call wallet.addSigner with type server and prepareOnly true from your backend, then have the user approve the pending signature with an email OTP on the client. Only after that can the server signer move funds.

What does stagingFund(5) mint?

On supported staging chains, wallet.stagingFund(5) mints 5 USDXM into the wallet for local development. It is staging-only. Production wallets need real USDC via onramp or transfer.

Which Base USDC contract does Crossmint production use?

Crossmint production notes list Base mainnet USDC at 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913. Staging uses base-sepolia with USDXM test balances.

Can the agent revoke its own Crossmint signer?

No. Removal must run with the user's recovery signer active (for example email). If the server signer is active, removeSigner fails by design.

Is Crossmint Agent Wallet the same as Coinbase Agentic Wallet?

No. Crossmint uses @crossmint SDKs and a backend CROSSMINT_SIGNER_SECRET. Coinbase Agentic Wallet uses the awal CLI and Coinbase TEE infrastructure. Stablecoin Insider covers both as separate how-tos.


This content is provided for informational and educational purposes only and does not constitute financial, investment, legal, or tax advice; no material herein should be interpreted as a recommendation, endorsement, or solicitation to buy or sell any financial instrument, and readers should conduct their own independent research or consult a qualified professional.

Latest