Travel-Rule-Compliant USDC Payouts
How to handle withdrawals on Polygon, Stellar, and Solana that are over the Travel Rule threshold.
Your transaction must comply with the Travel Rule (TR) when sending USDC over the supported networks to non-Bitso accounts in amounts greater than or equal to 1,000 euros or its equivalent in cryptocurrency.
For further details on the TR and TR-compliant withdrawals, see Crypto Travel Rule and Completing Crypto Withdrawals.
In this article, the examples provided are for Case 1: Receiving Virtual Asset Service Provider (VASP) is different from Bitso, and the beneficiary is other than the originator. This case is the one that requires the greatest amount of compliance information. The other two Cases require a smaller compliance object; refer to the above sources for further details.
The following sections exemplify the options your Bitso account provides to execute a withdrawal request considering the Travel Rule flow.
- Uncreated beneficiary account: The TR information (
complianceobject) is mandatory on each withdrawal. - Created beneficiary account: When TR compliance is required, you must distinguish whether the TR information has been declared:
- Created beneficiary without Travel Rule data declared: You include the TR information only in the first withdrawal because when the system completes this first transaction, it stores the TR information along with the beneficiary's information. Hence, you don't need to include the
complianceobject in subsequent transactions. - Created beneficiary with Travel Rule data already declared: The transaction reduces to a transaction under the TR threshold using
contact_id.
Uncreated Beneficiary
The following object exemplifies the body parameters included in the HTTP request to withdraw USDC funds over the indicated network when TR-compliance information is required. The amount to withdraw is equal to or greater than 1,000 euros, and the beneficiary account is not created:
{
"amount": "1100",
"address": "0x475888A0050A4F8098b3C812E1895A523FBB2FFF",
"chain": "POLY",
"asset": "usdc",
"currency": "usd",
"method": "usdc_trf",
"network": "circle",
"protocol": "usdc_trf",
"max_fee": "0.015538100",
"origin_id": "cffbb40c5900c395d9244fbb",
"compliance": {
"travel_rule": {
"vasp": {
"did": "did:ethr:0x4cd9136034d9a63d855391fce6dba64021530b01"
},
"beneficiary": {
"name": "Crypto Technology",
"type": "LEGAL"
}
}
}
}{
"amount": "1100",
"address": "GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5",
"addressTag": "memo",
"chain": "xlm",
"asset": "usdc",
"currency": "usd",
"method": "usdc_trf",
"network": "circle",
"protocol": "usdc_trf",
"max_fee": "0.15538100",
"origin_id": "97fbb40c5900c395d9244fb0",
"compliance": {
"travel_rule": {
"vasp": {
"did": "did:ethr:0x4cd9136034d9a63d855391fce6dba64021530b01"
},
"beneficiary": {
"name": "Crypto Tech",
"type": "LEGAL"
}
}
}
}{
"amount": "1100",
"address": "6mFCRksqQcKF7KcDNnNuSmiQmdq7k9CG6C19rZRc5jCq",
"chain": "SOL",
"asset": "usdc",
"currency": "usd",
"method": "usdc_trf",
"protocol": "usdc_trf",
"network": "circle",
"max_fee": "0.0015",
"origin_id": "15fbc40c5900c395d9244f60",
"compliance": {
"travel_rule": {
"vasp": {
"did": "did:ethr:0x4cd9136034d9a63d855391fce6dba64021530b01"
},
"beneficiary": {
"name": "My Enterprise",
"type": "LEGAL"
}
}
}
}Created Beneficiary without Travel Rule Information Declared
You first create the beneficiary account with the compliance and taxonomy information. Then, in your first transaction, you use the same request object as that of transactions under 1,000 euros providing the beneficiary's ID but including the compliance object for the Case at hand.
The following object exemplifies the request body required:
{
"amount": "1500",
"origin_id": "cffbb40c5900c395d92dffff",
"max_fee": "0.015538100",
"contact_id": 3399,
"compliance": {
"travel_rule": {
"vasp": {
"did": "did:ethr:0x4cd9136034d9a63d855391fce6dba64021530b01"
},
"beneficiary": {
"name": "Crypto Technology",
"type": "LEGAL"
}
}
}
}Created Beneficiary with Travel Rule Information Already Declared
After you complete the first transaction equal to or greater than 1,000 euros for this beneficiary, you no longer need to include the compliance object that contains the data of the recipient VASP and the beneficiary. The request body is the same as the one used in transactions under 1,000 euros utilizing the beneficiary's ID:
The following object exemplifies the request body required:
{
"amount": "amount ≥ 1,000 euros",
"origin_id": "cffbb40c5900c395d9244ed5",
"max_fee": "0.015538100",
"contact_id": 3399
}Updated about 1 year ago
