Skip to main content
BVNK

Provide additional party information travel rule.

In traditional payment systems such as credit cards and bank transfers, collecting and sharing party information is standard practice. The Travel Rule now applies this requirement to crypto and stablecoin payments under the EU's MiCA regulation.

The Travel Rule improves regulatory clarity and data transparency for crypto, helping businesses operate more securely. As trust in crypto payments grows, we expect broader adoption by businesses, consumers, and financial institutions.

tip
  • If you use an API integration to initiate payments, update it to include the required data. The affected endpoints are listed below.
  • If you initiate payments only through the BVNK Portal, you will be prompted to provide the required data in the user interface when necessary.
  • Instead of including partyDetails with every payment, you can create a reusable contact and reference it by contactId. See Manage contacts for details. Do not include both partyDetails and contactId in the same request; this will result in an error.
  • Provide Travel Rule information for every payment, regardless of amount. If the customer sends more than requested and the total exceeds 3,000 currency units, the payment is held until you provide the missing details. See Provide information for a held payment.

Affected API endpoints​

If you use these endpoints, update your integration according to the examples below.

ProductUsed forProduction endpointSandbox endpoint
Crypto payments via Payment LinksDeposits
Payouts
https://api.bvnk.com/api/v1/pay/summaryhttps://api.sandbox.bvnk.com/api/v1/pay/summary
Crypto payments via Payment ChannelsDepositshttps://api.bvnk.com/api/v2/channelhttps://api.sandbox.bvnk.com/api/v2/channel

Supply 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"
}
]
}
}
ParameterRequiredDescription
customerId✅Unique identifier for the party requesting the payment. If multiple payments for the same party are requested, the ID should remain consistent.
complianceDetails✅Information about the party requesting the deposit.
complianceDetails.requesterIpAddress✅IP-address of the party requesting the deposit.

Required only if countryCode is not provided.
complianceDetails.partyDetails✅Additional information about the party requesting the payment.
complianceDetails.partyDetails.type✅Party to which the information belongs. Possible values:

• BENEFICIARY: Party receiving the pay-out
• ORIGINATOR: Party sending the deposit
complianceDetails.partyDetails.entityType✅Entity type. Possible values:

• INDIVIDUAL: details about an individual.
• COMPANY: details about a business.
complianceDetails.partyDetails.firstName✅First name of the party requesting the deposit.

Required only if "entityType": "INDIVIDUAL".
complianceDetails.partyDetails.lastName✅Last name of the party requesting the deposit.

Required only if "entityType": "INDIVIDUAL".
complianceDetails.partyDetails.dateOfBirth✅Date of birth of the party requesting the deposit. Format: YYYY-MM-DD. Example: 1984-06-30.

Required only if "entityType": "INDIVIDUAL".
complianceDetails.partyDetails.countryCode✅ISO 3166-1-alpha-2 code of the country that the party resides in. Example: DE.

Required only if requesterIpAddress is not provided.
complianceDetails.partyDetails.regionCode✅ISO 3166-2:UA code for Ukraine's regions, enabling geoscreening of restricted areas.

Required only if complianceDetails.partyDetails.countryCode is UA. In this case, submissions with missing or invalid regionCode are rejected. For all other countries, the region code is ignored.

For the complete list of codes, see ISO_3166-2:UA. Example: UA-46.
complianceDetails.partyDetails.legalName✅Legal entity name of the company.

Required only if "entityType": "COMPANY".
complianceDetails.partyDetails.registrationNumber✅Company registration number.

Required only if "entityType": "COMPANY".
complianceDetails.partyDetails.relationshipType✅Relationship type between the sender and the recipient of the transaction. Possible values:

• SELF_OWNED: The wallet within BVNK is registered under the same entity for both accounts involved in the transaction. Thus, the funds are moved between accounts owned by the same entity. For example, if the BVNK wallet is registered to Fast Cars LTD and funds are being transferred to another account owned by Fast Cars LTD.

• THIRD_PARTY: The transaction involves accounts belonging to different entities. For example, Fast Cars LTD receives a payment from James Smith, or Fast Cars LTD pays their supplier Tires Supplies Inc.

Examples​

Deposits​

{
"walletId": "a:12345678987654:xyzW1qp:3",
"type": "IN",
"amount": 500,
"currency": "USDT",
"expiryMinutes": 1440,
"reference": "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"
}
]
}
}

Payouts​

{
"walletId": "a:25022613287255:zmHs0pg:4",
"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",
"network": "ETHEREUM",
"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"
}
]
}
}

Add parameters to existing payment channels​

To add required data to existing payment channels, send a PUT request to the payment channel endpoint (/api/v2/channel).

{
"uuid": "7e5e126b-0217-45d4-b38f-5d6f30388257",
"walletId": "a:25022613287255:zmHs0pg:6",
"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"
}
]
}
}
ParameterRequiredDescription
uuid✅UUID associated with the payment channel. This was provided in the response when you originally created the payment channel.
walletId✅ID of the wallet associated with the payment channel.
reference✅reference associated with the payment channel.
customerId✅Uniquely identifying the party requesting the payment. If multiple payment channels are created for the same party, the ID should remain consistent across them.
complianceDetails✅Information about the party requesting the deposit.
complianceDetails.requesterIpAddress✅IP-address of the party requesting the deposit.

Required only if countryCode is not provided.
complianceDetails.partyDetails✅Additional information about the party requesting the payment.
complianceDetails.partyDetails.type✅Party to which the information belongs. Possible values:

• BENEFICIARY: Party receiving the pay-out
• ORIGINATOR: Party sending the deposit
complianceDetails.partyDetails.entityType✅Entity type. Possible values:

• INDIVIDUAL: details about an individual.
• COMPANY: details about a business.
complianceDetails.partyDetails.firstName✅First name of the party requesting the deposit.

Required only if "entityType": "INDIVIDUAL".

Provide information for a held payment​

If you request a payment for less than 3,000 currency units, you can create it without Travel Rule information. However, if the customer sends more than this amount, BVNK will hold the payment because originator information was not provided initially. For example, a customer pays 3,500 USDT into a payment link created for 500 USDT.

Avoid held payments

You can avoid held payments by always providing Travel Rule information when creating a payment, regardless of the amount.

When a payment is held for missing Travel Rule information, BVNK sends a bvnk:compliance:v1:information-request webhook. The webhook identifies the held payment in data.relatedPayment and displays the amount received in data.originator.

Example webhook
{
"event": "bvnk:compliance:v1:information-request",
"eventId": "019e2655-045a-7000-8000-000000000000",
"timestamp": "2026-05-14T11:52:46.426Z",
"data": {
"id": "bd51c10c-fff8-4d38-a6ef-411371238caa",
"type": "travel-rule",
"relatedPayment": {
"type": "payment:link",
"id": "019e2653-882b-70ee-a003-fa1727624ca9"
},
"status": "PENDING_INFO",
"originator": {
"amount": "3500",
"currency": "USDT",
"cryptoAddresses": {
"network": "ETHEREUM",
"addresses": [
"0x51ad22e8f745f0f1efc08813c2950f165e234f0c"
]
}
},
"trackingDetails": [
{
"amount": "3500",
"currency": "USDT",
"hash": "0x64bbf967c115bd8b3c6df52801211d766e94a5d619a60491912b2422910bdbc1",
"network": "ETHEREUM",
"createdAt": "2026-05-14T11:51:09.000000000Z",
"confirmedAt": "2026-05-14T11:51:55.000000000Z"
}
],
"requiredAction": {
"type": "PROVIDE_ORIGINATOR_INFORMATION",
"reason": "Originator entity information missing"
}
}
}

To release the payment, collect the originator details from the end customer and submit them by sending a POST request to /compliance/v1/information-requests/{externalId}/actions. Use the data.id value from the webhook as externalId.

Request
{
"type": "PROVIDE_INFORMATION",
"entity": {
"contactId": null,
"customerId": null,
"type": "INDIVIDUAL",
"externalId": "c7e2a1f4-5b3d-4e8a-9f6c-2d1b0a9e8f7c",
"firstName": "John",
"lastName": "Doe",
"dateOfBirth": "30-06-1984",
"relationshipType": "THIRD_PARTY",
"address": {
"addressLine1": "Friedrichstraße 123",
"city": "Berlin",
"postCode": "10117",
"country": "DE"
}
}
}

Once the information is accepted, payment processing resumes. Held payments also appear in the Missing Contacts queue in the BVNK Portal, where you can assign an originator manually instead of using the API.


Destination tags and memo fields​

Some cryptocurrencies require a destination tag (also called a memo) when sending funds. This unique identifier ensures funds reach the correct recipient, especially when multiple users share a wallet address.

warning

Include the destination tag when required. Omitting it may result in lost funds or misallocation to the wrong recipient.

Destination tags are required for currencies such as XRP. When a payer selects XRP on the BVNK Hosted Payments Page, the destination tag appears with the wallet address.

Deposit (pay-in):

Destination tag shown on the hosted payments page for a deposit

Payout (pay-out):

Destination tag shown on the hosted payments page for a payout

In the API, the destination tag is passed using the tag field within payOutDetails. For example, a payout to an XRP address would include:

"payOutDetails": {
"code": "crypto",
"currency": "XRP",
"network": "RIPPLE",
"address": "rN7hbM9fpMfBB9MQtEfnQsKsMpCxBPramj",
"tag": "12345678"
}

Additional resources​

Was this page helpful?