Provide party information for crypto payments
Learn what details you must provide within your payments to comply with the travel rule.
Why should I supply additional information?
In established payment systems like credit card and bank transfers, collecting and sharing information about the parties involved in a transaction (such as names) is already standard practice. This same requirement is now being applied to crypto and stablecoin payments through the Travel Rule as part of the EU's MiCA regulation for crypto assets.
The Travel Rule brings greater regulatory clarity and data transparency to crypto, allowing businesses that use stablecoins and other cryptocurrencies to grow in a more secure environment. As crypto becomes a more trusted payment option, we expect more businesses, consumers, and financial institutions to embrace this rapidly expanding market.
More background on this can be found on https://www.bvnk.com/blog/the-travel-rule-crypto-eu
What should I do to comply?
If you have an API integration
to initiate payments in and out, then you will need to update your integration to start including the additional data. Below is a list of the affected endpoints that will require the additional data.
If you are initiating payments solely from within the BVNK Merchant Portal, you will be prompted to include the additional data where applicable within the UI.
By when must the changes be implemented?
The changes must be implemented by December 30, 2024.
Affected API endpoints
If you are using these endpoints, please make sure to update the integration as per the examples below.
Product | Used for | Endpoint |
---|---|---|
Crypto payments via Payment Links | Deposits |
|
Crypto payments | Deposits |
|
Supplying the additional data
"customerId": "d063635e-0f83-4e47-a1f3-fc9484df1509",
"complianceDetails": {
"requesterIpAddress": "77.71.188.87",
"partyDetails": [
{
"type": "ORIGINATOR",
"entityType": "INDIVIDUAL",
"firstName": "John",
"lastName": "Doe",
"dateOfBirth": "1984-06-30",
"relationshipType": "THIRD_PARTY",
"countryCode": "DE"
}
]
"customerId": "b061943d-e29f-481e-abcb-5c937ee8234e",
"complianceDetails": {
"requesterIpAddress": "77.71.188.87",
"partyDetails": [
{
"type": "ORIGINATOR",
"entityType": "COMPANY",
"legalName": "Fast Cars LTD",
"registrationNumber": "ABC123",
"relationshipType": "THIRD_PARTY",
"countryCode": "DE"
}
]
Parameter | Type | Required | Description |
---|---|---|---|
customerId | String | Yes | Uniquely identifying the party requesting the payment. If multiple payments for same party are requested, the ID should remain consistent. |
complianceDetails | Object | Yes | Will contain information about the party requesting the deposit. |
complianceDetails. | String | Yes | The IP-address of the party requesting the deposit. Required only if |
complianceDetails. | Array of Objects | Yes | Will contain additional information about the party requesting the payment. |
complianceDetails.partyDetails. | String | Yes | Specifies who the party information belongs to. Possible values:
|
complianceDetails.partyDetails. | String | Yes | Specifies the entity type. Possible values:
|
complianceDetails.partyDetails. | String | Yes | The first name of the party requesting the deposit. Required only if |
complianceDetails.partyDetails. | String | Yes | The last name of the party requesting the deposit. Required only if |
complianceDetails.partyDetails. | String | Yes | The date of birth of the party requesting the deposit. Format: Required only if |
complianceDetails.partyDetails. | String | Yes | The ISO 3166-1-alpha-2 code of the country that the party resides in. Example: Required only if |
complianceDetails.partyDetails. | String | Yes | The legal entity name of the company. Required only if |
complianceDetails.partyDetails. | String | Yes | The company registration number. Required only if |
complianceDetails.partyDetails. | String | Yes | This field specifies the relationship type between the sender and the recipient of the transaction. Possible values:
|
Code examples on how to include the additional data
{
"merchantId": "86955f40-8f4e-464c-be2b-583635bf1c62",
"type": "IN",
"amount": 5,
"currency": "USDT",
"expiryMinutes": 1440,
"reference": "test_reference_in_1xCbGZ",
"returnUrl": "https://your-url-here.com/status",
"customerId": "d063635e-0f83-4e47-a1f3-fc9484df1509",
"complianceDetails": {
"requesterIpAddress": "77.71.188.87",
"partyDetails": [
{
"type": "ORIGINATOR",
"entityType": "INDIVIDUAL",
"firstName": "John",
"lastName": "Doe",
"dateOfBirth": "1984-06-30",
"relationshipType": "THIRD_PARTY",
"countryCode": "DE"
}
]
}
}
{
"merchantId": "7fa95319-b854-402c-bbfb-5d9dfe9122b4",
"payCurrency": "USDT",
"displayCurrency": "USD",
"reference": "PayRef-USDT-d063635e",
"customerId": "d063635e-0f83-4e47-a1f3-fc9484df1509",
"complianceDetails": {
"requesterIpAddress": "77.71.188.87",
"partyDetails": [
{
"type": "ORIGINATOR",
"entityType": "INDIVIDUAL",
"firstName": "John",
"lastName": "Doe",
"dateOfBirth": "1984-06-30",
"relationshipType": "THIRD_PARTY"
}
]
}
}
{
"merchantId": "86955f40-8f4e-464c-be2b-583635bf1c62",
"type": "OUT",
"amount": 3,
"currency": "EUR",
"expiryMinutes": 30,
"reference": "test_reference_out_xpO23C",
"returnUrl": "https://www.your-url-here.com/status",
"payOutDetails": {
"code": "crypto",
"currency": "ETH",
"protocol": "ETH",
"address": "0x02ae6765C6991813a3EAa86fe63ebBCA1c9EC156",
"tag": ""
},
"customerId": "d063635e-0f83-4e47-a1f3-fc9484df1509",
"complianceDetails": {
"requesterIpAddress": "77.71.188.87",
"partyDetails": [
{
"type": "BENEFICIARY",
"entityType": "INDIVIDUAL",
"firstName": "John",
"lastName": "Doe",
"dateOfBirth": "1984-06-30",
"relationshipType": "THIRD_PARTY",
"countryCode": "DE"
}
]
}
}
Updating old payment channels with the additional data
If you have payment channels that were previously created without the additional data, you will be able to supply this information by sending a PUT
request to the payment channel endpoint (/api/v2/channel
). Example below:
Supplying the additional data for old payment channels
{
"uuid": "7e5e126b-0217-45d4-b38f-5d6f30388257",
"merchantId": "86955f40-8f4e-464c-be2b-583635bf1c62",
"reference": "b5af590b-6033-4b15-874b-289f269b15f9",
"customerId": "d063635e-0f83-4e47-a1f3-fc9484df1509",
"complianceDetails": {
"requesterIpAddress": "77.71.188.87",
"partyDetails": [
{
"entityType": "INDIVIDUAL",
"type": "ORIGINATOR",
"firstName": "John",
"lastName": "Doe",
"dateOfBirth": "1984-06-30",
"relationshipType": "THIRD_PARTY",
"countryCode": "DE"
}
]
}
}
Parameter | Type | Required | Description |
---|---|---|---|
uuid | String | Yes | The |
merchantId | String | Yes | The |
reference | String | Yes | The |
customerId | String | Yes | Uniquely identifying the party requesting the payment. If multiple payment channels for same party are created, the ID should remain consistent. |
complianceDetails | Object | Yes | Will contain information about the party requesting the deposit. |
complianceDetails. | String | Yes | The IP-address of the party requesting the deposit. Required only if |
complianceDetails. | Object | Yes | Will contain additional information about the party requesting the payment. |
complianceDetails.partyDetails. | String | Yes | Specifies who the party information belongs to. Possible values:
|
complianceDetails.partyDetails. | String | Yes | Specifies the entity type. Possible values:
|
complianceDetails.partyDetails. | String | Yes | The first name of the party requesting the deposit. Required only if |
Updated 11 days ago