Internal vs. external wallets: When you create a Crossmint wallet for a user, set the
owner to that user’s locator so the wallet is recognized as theirs — onramps to those wallets do not require ownership verification. A wallet created without an owner, or any wallet not created through Crossmint, is treated as external: you must link it to the user and verify ownership, as shown below.Link External Wallet to Crossmint User
Before creating an onramp order to an external wallet, you must link the wallet to a Crossmint user (Crossmint creates the user automatically if the locator does not exist yet), using the Link External Wallet API:The The
proof field is optional:- If you omit it, you are simply linking the external wallet to the user without proving ownership yet.
- If you pass it, you prove ownership of the wallet in the same request.
verificationChallenge follows the CAIP-122 standard.Create Onramp Order
Create an onramp order using the Create Order API with the linked external wallet address as the recipient.The order may or may not require wallet ownership verification:
Depending on the transaction value and the user’s past activity, the order may require wallet ownership verification (steps 3 and 4). If verification is not required, the order proceeds directly to the KYC/payment phase and you can skip to step 5.
- Below threshold: If the transaction value is below 1,000, ownership verification is not required. The order proceeds directly to the KYC/payment phase.
- Above threshold: If either threshold is surpassed, the order status will be
requires-recipient-verificationand the user must sign a message to prove wallet ownership (steps 3 and 4).
Sign Message (conditional)
This step is only required if the order status is
requires-recipient-verification.preparation.message returned in the order response using their wallet’s private key.Submit Signature (conditional)
This step is only required if the order status is
requires-recipient-verification.proof field:Complete Order
Once ownership is verified (or if verification was not required), fetch the order using the Get Order API. The order status should now have proceeded to the next phase:
requires-kyc: The user hasn’t completed KYC yet and will be guided through the KYC flow first.awaiting-payment: The user has completed KYC and can proceed to complete payment.

