Signing transactions (REST API): The cURL and Python examples above use the simplified Transfer Token endpoint. If your integration requires custom transaction signing, see the full create → sign → approve flow in Send a Transaction (EVM) — REST tab.
<walletAddress>(e.g.,0x1234...5678)chainType[:<walletType>]:alias:<alias>(e.g.,evm:smart:alias:treasury)
Compliance Errors
If a payout fails compliance checks, the API will return an error with a specific reason code. Here are the potential compliance-related errors:recipient_personal_data_missing
recipient_personal_data_missing
Error Message: “Required personal data is missing to complete regulated transfer”Description: The recipient wallet has not provided all personal data required for compliance screening. The recipient must complete their profile with first name, last name, date of birth, and country of residence.Resolution: Ensure the recipient has attached their personal data using the user onboarding API.
recipient_wallet_sanctioned
recipient_wallet_sanctioned
Error Message: “Recipient wallet address is sanctioned and can’t receive assets”Description: The recipient’s wallet address failed Elliptic sanctions screening. This indicates the address has been flagged in sanctions lists or is associated with prohibited activities.Resolution: The payout cannot proceed. The recipient’s wallet address has been identified as high-risk and is blocked from receiving payouts.
recipient_person_sanctioned
recipient_person_sanctioned
Error Message: “User does not meet the verification requirements to proceed. Check the user’s verification status via GET /users/{userLocator}/identity-verification.”Description: The recipient did not pass the verification checks required to proceed. This is returned for any blocking KYC outcome, including sanctions/PEP screening matches, watchlist hits, banned users, restricted geographies, or failed full/light KYC.Resolution: The payout cannot proceed. Inspect the recipient’s verification status via
GET /users/{userLocator}/identity-verification to determine the specific reason and any next steps.recipient_type_unsupported
recipient_type_unsupported
Error Message: “Regulated transfers can only be sent to Crossmint-managed wallets or external wallets linked to a Crossmint user.”Description: The destination address is not a Crossmint-managed wallet and is not linked to a Crossmint user. Payouts support transfers to Crossmint user wallets and to external wallets that a Crossmint user has linked to their account.Resolution: Ensure the recipient has a Crossmint wallet, or link the external wallet address to the recipient’s Crossmint user with the Link External Wallet API before initiating the payout. After linking, the recipient may also need to prove ownership by signing the verification challenge (see the
recipient_ownership_unverified entry below):recipient_ownership_unverified
recipient_ownership_unverified
Error Message: “Recipient external wallet ownership has not been verified. The recipient must sign the wallet ownership challenge before receiving regulated transfers.”Description: The destination address is an external wallet linked to a Crossmint user, but the user has not proven ownership of the wallet by signing the ownership verification challenge.Resolution: Have the recipient sign the Once the response shows
verificationChallenge returned when the wallet was linked (or retrieve it anytime via the Get Linked Wallet endpoint), then submit the signature as proof using the same Link External Wallet API:"ownership": { "verified": true }, retry the payout. The verification flow is the same one used for onramp — see Proof of Ownership for the full flow, including how to sign the challenge on EVM and Solana.Error Handling Best Practices
When implementing payouts, follow these best practices for error handling:Validate recipient before transfer
Before initiating a payout, verify that the recipient has completed their onboarding and provided all required personal data. This can help prevent
recipient_personal_data_missing errors.Implement retry logic for transient errors
Some errors may be transient (e.g., temporary API issues). Implement appropriate retry logic with exponential backoff for non-compliance errors.
Log compliance failures
Log all compliance-related errors for audit purposes. These logs are important for regulatory reporting and investigating failed transfers.
Supported Transfer Types
When calling the Transfer Token API, you must specify thetransactionType field to indicate whether the transfer requires compliance checks:
| Type | Description |
|---|---|
regulated-transfer | The transaction is routed through Crossmint’s regulated infrastructure. This enables compliance with regulatory requirements and performs AML screening, sanctions checks, and travel rule validation. Required for payouts to customers. |
onramp | The transaction is routed through Crossmint’s regulated infrastructure, similar to regulated-transfer. Used for fiat-to-crypto onramp flows that require compliance checks. |
direct | Standard transfer with no compliance checks. Used for internal treasury-to-treasury transfers. This is the default if transactionType is omitted. |
Compliant payouts work for transfers from Crossmint treasury wallets to Crossmint user wallets and to external wallets linked to a Crossmint user with verified ownership. Payouts to unlinked external wallets are not supported.
Additional Resources
API Reference
Deep dive into the transfer API reference
Talk to an expert
Contact the Crossmint sales team for support

