Travel Rule data exchange flows
Work with Travel Rule transactions to ensure data exchange compliance.
Travel Rule requires you and the VASP on the other side of a transfer to exchange information about the people sending and receiving virtual assets. Sumsub handles the exchange itself — finding the counterparty, choosing a protocol, moving the data, and recording the outcome. What you build is the integration that starts exchanges, answers them, and acts on the results.
This page explains the three flows you need and the setup they all assume. Complete the setup once, then implement each flow.
ImportantA data exchange is a record in Sumsub that pairs a virtual asset transfer with the participant data both sides must share. It has its own lifecycle and its own status, separate from the blockchain transaction and separate from the review decision your rules produce.
Sumsub never moves funds. You broadcast the transfer yourself — before or after the exchange, depending on the flow.
Travel Rule flow scenarios
All three flows are required for your integration. A Travel Rule integration that implements only some of them is incomplete — two of them affect your own users, and the third affects everyone who sends to you.
| Flow | Use it when | Your role in the transfer | When the exchange happens |
|---|---|---|---|
| Start exchange before settlement | Your user is sending virtual assets to another entity and you have not broadcast the transaction yet. Default for withdrawals. It is the only flow where the data exchange happens while the funds are still under your control, so it is the only one where a counterparty's answer can still change what you do. | Originator. | Before the on-chain withdrawal. |
| Start exchange after settlement | Your user received an on-chain deposit with no Travel Rule data, and the originator information is missing. Fallback for deposits that arrive unannounced. The funds have already moved, so nothing is gated on the result — what you are doing is closing a data gap you would otherwise have to explain. | Beneficiary — or originator, if you are retroactively closing your own withdrawal. | After the on-chain deposit. |
| Answer incoming request | Another VASP asks you to confirm a transfer involving one of your users' wallets. | Originator or beneficiary, depending on the transfer. | Before or after settlement. |
ImportantAnswer an incoming request is the one most integrations postpone, and the only one where the cost lands on somebody else.
Every VASP that sends to your users depends on you answering: while a request sits unanswered, their transfer is held. When it times out, their compliance rules decide what to do about a counterparty that would not identify its own customer — and your VASP accumulates a non-response record that other participants can see. Build this one first if you are prioritising.
In the API, the three flows are distinguished by two fields:
| Flow | info.direction | info.paymentTxnId |
|---|---|---|
| Start exchange before settlement | out | Empty |
| Start exchange after settlement | in, or out if you are retroactively closing a withdrawal | Set |
| Answer incoming request | Set by the counterparty | Empty if the direction is out, set if the direction is in |
Note
info.directiondescribes which way the funds move relative to your user. It does not indicate who started the data exchange. A request you answer can carry either direction, and your steps are identical in both cases.
What flows share:
- Statuses. One vocabulary across all flows, with three open states and the rest final.
- Protocols. Sumsub selects the protocol — Sumsub, GTR, CODE or Sygna — from what both VASPs support. You never choose it, and you do not need to implement any of them.
- Participant data settings. Configured once and applied in every direction; the platform selects the correct set for the transfer.
- Counterparty VASP identification. The single largest factor in whether an exchange succeeds. It applies equally when you start an exchange after settlement.
NoteBefore using any Travel Rule flow, check this article and make sure that you have your integration set up properly.
Updated 1 day ago