Send Travel Rule data exchange transaction via SDK

Submit Travel Rule data exchange transactions using our SDK.

Travel Rule SDK utilizes general Travel Rule capabilities allowing you to submit transactions in a few steps. The SDK solution is designed for easy integration into existing systems, enabling businesses to seamlessly implement the Travel Rule compliance measures and to facilitate the collection of user data required for transactions without the need to build your own interface to gather it.

How Travel Rule SDK works

The process of creating the Travel Rule transaction via SDK consists of the following:

  1. You need to install the rules that initiate the Travel Rule checks and let you act on the results.
  2. Then you send a request with the necessary transaction details:
    • User ID
    • Applicant wallet address
    • Counterparty wallet address
    • Transfer amount
    • Currency
    • Direction of the transaction (inbound or outbound)
  3. If you did not state a level name in the API call, Sumsub creates a new level with Travel Rule SDK for you. After that, Travel Rule: recipient information will be added as a separate step your applicant should take to get verified.
  4. During the verification process, your applicant will see the screen with the transaction details including transfer amount, currency, and wallet address. These fields will be filled in automatically, when you send your applicant a link to the SDK.
  5. Your applicant has to confirm whether it is their own wallet or not:
    • If they have confirmed wallet address ownership, fields with personal information will be filled in with data extracted from the applicant profile. Applicants also have to select VASP or mark their wallet as unhosted. Our system attempts to find VASP by the provided wallet address. If successful, VASP name will appear in the field. If VASP was not found, applicant has to choose it themselves from the list.
    • If it is not their own wallet, the data from their account will not be extracted. Your applicant will have to fill in all the fields manually.
  6. In case the applicant marked their wallet as unhosted, Sumsub has to verify it. To complete the verification, in the next step, the applicant should connect their wallet or fill out the self-declaration form.
  7. After the verification is completed, the transaction will be created and displayed in the Dashboard.

Submit Travel Rule transaction via SDK

The following is a sequence of steps to be taken to create the Travel Rule transaction via SDK.

Step 1: Enable required rules

To start submitting Travel Rule transactions via SDK, do the following:

  1. In the Dashboard, open the Rules Library.
  2. Select and install the Travel Rule bundle and a bundle specific to your jurisdiction (EU, UK, Singapore, and others). Make sure all relevant rules are installed in Active mode.

We recommend installing all the rules available in the bundle, as it is the quickest and easiest way to cover all of the check steps.

Step 2: Configure settings

You can specify the time period during which you want to receive the Travel Rule data exchange transaction details from the beneficiary VASP. You can also set up conditions on how to process data exchange transactions that are not accompanied with any Travel Rule data after the selected period of time:

  1. In the Dashboard, open the Transactions and Travel Rule section, go to Settings, and choose Confirmation Timeout.
  2. To set up the desired conditions for a data exchange transaction, select the time period and how to treat the data.
  3. To apply the set parameters, click Save.
  4. To fully ensure the delivery of inbound Travel Rule data exchange transactions, explicitly import wallet addressesof your applicants into the Wallet Address Book, and submit identifiable user information such as the applicant ID or another unique identifier.

Step 3: Generate app token

You need to generate an app token to sign your API calls. For more information on how to generate a token, refer to this article.

Step 4: Submit API request

After generating the token, you will be able to submit a Travel Rule data exchange transaction via SDK.

To submit a Travel Rule SDK transaction, use this API method as the following example demonstrates:

curl -X POST \
     'https://api.sumsub.com/resources/tr/sdk/init' \
     -H 'accept: application/json' \
     -H 'content-type: application/json' \
     -d '{
            "userId": "n7v2lu8civ2j2vkau",
            "txnInfo": {
              "applicantWalletAddress" : "0x611Fb08528080848Dd3439242fdfg993d18ADd95dsd",
              "counterpartyWalletAddress" : "0x611Fb08528080848Dd3439242fdfg993d18ADd95dsd",
              "amount": 10,
              "currencyCode": "ETH",
              "cryptoChain" : "", // Required for non-native tokens.
              "direction": "out"
            },
            "ttlInSecs": "1800",
            "levelName": "level-name"
         }'

Step 5: Initialize Travel Rule SDK

Upon a successful request, you can send a WebSDK link to your applicant or launch built-in WebSDK.

Step 6: Review results

When your applicant completes verification and submits all the required information, the transaction will be created and will receive a Travel Rule status indicating the state of data exchange. You can view it in the Transactions section in the Dashboard.

You will also receive one of the following webhooks:

These webhooks indicate the status of the data exchange transaction after checking the transfer against the installed rules.

If the beneficiary VASP has confirmed the Travel Rule data exchange transaction, your transaction will get the approved status, and you will receive the applicantKytTxnApproved webhook:

{
  "applicantId": "634829375766b80001a40152",
  "applicantType": "individual",
  "correlationId": "f24f6616020245053139a6537303a251",
  "sandboxMode": false,
  "externalUserId": "customExternalUserId",
  "type": "applicantKytTxnApproved",
  "reviewResult": {
    "reviewAnswer": "GREEN"
  },
  "reviewStatus": "completed",
  "createdAt": "2025-01-30 11:41:55+0000",
  "createdAtMs": "2025-01-30 11:41:55+0000",
  "clientId": "coolClientId",
  "kytTxnId": "64a7dc05fbf57c624afcb72d",
  "kytDataTxnId": "b4xdq4qjh5qpo06r8cpunc",
  "kytTxnType": "travelRule"
}

If you receive the applicantKytOnHold webhook, your data exchange transaction has been suspended and queued for manual review by the dedicated compliance officer:

{
  "applicantId": "634829375766b80001a40152",
  "applicantType": "individual",
  "correlationId": "f24f6616020245053139a6537303a251",
  "sandboxMode": false,
  "externalUserId": "customExternalUserId",
  "type": "applicantKytTxnApproved",
  "reviewResult": {
    "reviewAnswer": "GREEN"
  },
  "reviewStatus": "completed",
  "createdAt": "2025-01-30 11:41:55+0000",
  "createdAtMs": "2025-01-30 11:41:55+0000",
  "clientId": "coolClientId",
  "kytTxnId": "64a7dc05fbf57c624afcb72d",
  "kytDataTxnId": "b4xdq4qjh5qpo06r8cpunc",
  "kytTxnType": "travelRule"
}

If your data exchange transaction has not been confirmed, it gets the rejected status, and you will receive the applicantKytTxnRejected webhook:

{
  "applicantId": "634829375766b80001a40152",
  "applicantType": "individual",
  "correlationId": "0f5a7c828bab750775564534fc0470a8",
  "sandboxMode": false,
  "externalUserId": "customExternalUserId",
  "type": "applicantKytTxnRejected",
  "reviewResult": {
    "reviewAnswer": "RED",
    "reviewRejectType": "FINAL"
  },
  "reviewStatus": "completed",
  "createdAt": "2025-01-30 11:41:55+0000",
  "createdAtMs": "2025-01-30 11:41:55+0000",
  "clientId": "coolClientId",
  "kytTxnId": "64a7dc05fbf57c624afcb72d",
  "kytDataTxnId": "b4xdq4qjh5qpo06r8cpunc",
  "kytTxnType": "travelRule"
}