Skip to main content
Regulatory status: Internal transfers between your own treasury wallets are not a regulated activity. No compliance checks are required.
This guide shows how to move stablecoins between your own treasury wallets. Common use cases include rebalancing liquidity across chains, moving funds between entities (e.g., a US entity and a European entity), and internal fund management.

Prerequisites

  • Two or more treasury wallets — create them using the Treasury Wallet Quickstart
  • A Crossmint server API key with the scopes wallets.create, wallets.read, wallets:transactions.create, wallets:transactions.sign
npm i @crossmint/wallets-sdk

Step 1: Create Treasury Wallets

Create two treasury wallets representing different entities or purposes. In this example, you will create wallets for a US entity and a European entity.
index.ts
import { CrossmintWallets, createCrossmint } from "@crossmint/wallets-sdk";

const crossmint = createCrossmint({
    apiKey: "<your-server-api-key>",
});

const crossmintWallets = CrossmintWallets.from(crossmint);

// Create US entity treasury wallet
const usWallet = await crossmintWallets.createWallet({
    chain: "base-sepolia",
    signers: [
        { type: "server", secret: process.env.WALLET_SIGNER_SECRET! },
    ],
    owner: "COMPANY",
    alias: "entity-us",
});

// Create European entity treasury wallet
const euWallet = await crossmintWallets.createWallet({
    chain: "base-sepolia",
    signers: [
        { type: "server", secret: process.env.WALLET_SIGNER_SECRET! },
    ],
    owner: "COMPANY",
    alias: "entity-europe",
});

console.log("US wallet:", usWallet.address);
console.log("EU wallet:", euWallet.address);

Step 2: Transfer Between Treasury Wallets

Use the standard token transfer API to move funds. Since this is an internal transfer between your own wallets, no compliance checks are required.
index.ts
// Get the US entity wallet
const usWallet = await crossmintWallets.getWallet("evm:smart:alias:entity-us", {
    chain: "base-sepolia",
});

await usWallet.useSigner({
    type: "server",
    secret: process.env.WALLET_SIGNER_SECRET!,
});

// Transfer 500 USDC from US entity to European entity
const { hash, explorerLink } = await usWallet.send(
    "evm:smart:alias:entity-europe", // recipient wallet locator
    "usdc",
    "500"
);

console.log("Transfer hash:", hash);
console.log("Explorer:", explorerLink);
For the full transfer API reference, see the Transfer Tokens guide.

Step 3: Monitor Transfers with Webhooks

Set up webhooks to receive real-time notifications when transfers complete. Configure the wallets.transfer.out and wallets.transfer.in event types in the Crossmint Console. For setup instructions and the full event schema, see the Transfer Webhooks guide.

Next Steps

Transfer Tokens Guide

Full reference for the token transfer API

Transfer Webhooks

Monitor transfers with real-time notifications

Payouts

Send payouts to customers

Check Balances

Query token balances across your wallets