Regulatory status: Pay-ins are not a regulated activity. No customer identity registration is required to receive stablecoin payments.
Prerequisites
- A Crossmint server API key with the scopes
wallets.create,wallets.read - The Crossmint Wallets SDK installed
Step 1: Create a Pay-in Wallet
Create a wallet on the chain your customers will send stablecoins on. Each wallet acts as a unique deposit address you can assign to a customer, invoice, or payment context.index.ts
payInWallet.address with your customer so they can send stablecoins to it.
Instead of a server signer, you can use a Cloud KMS signer for enhanced security in production environments. Cloud KMS signers keep the private key inside a hardware security module (HSM) and support advanced enterprise controls like IP allowlisting and audit logs.
Step 2: Listen for Incoming Payments with Webhooks
Once your customer sends stablecoins to the wallet address, Crossmint fires awallets.transfer.in webhook event. Set up a webhook endpoint to receive these notifications in real time.
-
Configure a webhook endpoint in the Crossmint Console by following the Add an Endpoint guide. Select the
wallets.transfer.inevent type. - Verify the webhook signature to ensure the request is legitimate. See Verify Webhooks.
- Process the event in your handler. The payload includes the sender address, recipient address, token, amount, and on-chain transaction details:
Next Steps
Transfer Webhooks
Full schema and best practices for monitoring transfers
Check Balances
Query token balances across your wallets
Payouts
Send stablecoins to your customers
Internal Transfers
Move funds between your own treasury wallets

