Skip to main content
Proof of ownership confirms that an onramp user controls the wallet receiving their assets. It helps Crossmint meet anti-money laundering (AML) and counter-terrorism financing (CTF) requirements by linking the user’s verified identity to the recipient wallet.

When Is Proof of Ownership Required?

Proof of ownership is triggered based on transaction volume thresholds: These thresholds apply to users verified outside the United States who onramp to external wallets. A Crossmint-managed wallet does not require additional verification when its owner is the user; a wallet without an owner or owned by someone else is treated as external. To link the user’s identity to an external wallet, Crossmint asks the user to sign a challenge with the recipient wallet and submit the signature in the proof field. This flow works the same across chains and for all wallet types, including externally owned accounts (EOAs) and smart contract wallets.

How It Works

1

Link External Wallet

Before creating an onramp order to an external wallet, link the wallet to a Crossmint user (created automatically if one does not yet exist for the locator) using the Link External Wallet API:
The API responds with a verification challenge in the CAIP-122 format. The standard defines the challenge message and does not limit which wallets can complete verification:
2

Create Order

Create the onramp order as usual. If verification is required, the order response will have status requires-recipient-verification:
3

Sign the Message

Have the user sign the preparation.message with the recipient wallet:
4

Submit Signature

Submit the signature as proof of ownership using the same Link External Wallet API:
Once verified, the response confirms ownership:
5

Complete Order

After ownership is verified, fetch the order using the Get Order API. The status will advance to:
  • requires-kyc — the user has not completed KYC yet.
  • awaiting-payment — the user can proceed to payment.

Pre-Verifying Ownership

You can verify wallet ownership at the time of linking (before any order is created) by including the proof field in the initial Link External Wallet call. This avoids requiring verification during the checkout flow.