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.

📘

Important

A 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.

FlowUse it whenYour role in the transferWhen the exchange happens
Start exchange before settlementYour 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 settlementYour 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 requestAnother VASP asks you to confirm a transfer involving one of your users' wallets.Originator or beneficiary, depending on the transfer.Before or after settlement.
📘

Important

Answer 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:

Flowinfo.directioninfo.paymentTxnId
Start exchange before settlementoutEmpty
Start exchange after settlementin, or out if you are retroactively closing a withdrawalSet
Answer incoming requestSet by the counterpartyEmpty if the direction is out, set if the direction is in
📘

Note

info.direction describes 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.
📘

Note

Before using any Travel Rule flow, check this article and make sure that you have your integration set up properly.


Did this page help you?