# Travel Rule

Travel Rule is a KYT based solution, so this part of the documentation is a supplement to the KYT documentation. Including transaction status changes and webhooks

# Outgoing transaction handling



You want to initiate a protocol to verify if you need to send a transaction to the blockchain:
  1. Create a transaction with the information that will be used during the protocol execution.
  2. The transaction may either be immediately approved or rejected based on the set rules. Alternatively, the status could change to onHold. You will receive a webhook following a status change.
  3. If the status is onHold, we attempt to acquire information from the counterparty using various methods, or re-scores the transaction by timeout. You will receive a webhook following any status change.
  4. If the transaction has been approved, you can execute the transaction and patch the information gathered from the blockchain to us.

# Incoming transaction handling



The protocol is initiated by the counterparty, and an action is required from your end to process the transaction:
  1. A transaction has already been initiated, and a webhook notification has been sent to you.
  2. Enriching the transaction with missing information. Either move the transaction to an existing applicant or provide information for enrichment.
  3. The transaction will either be approved or rejected upon processing. In case of approval, a notification might be received from the blockchain.

# API Reference

# Create travel rule transaction

POST /resources/applicants/{applicantId}/kyt/txns/-/data

Usually, you should have an applicant ready and KYC on him performed before starting the transaction. However, if you haven't created an applicant before, you can create it as part of the transaction. To do that, you can call

POST /resources/applicants/-/kyt/txns/-/data?levelName={levelName}

This method should only be used where there is no existing applicant with the same externalUserId that you intend to pass within an applicant object of request body. The new applicant will be created using provided levelName and data from the applicant object. If there is no suitable levelName you can omit this parameter. We strongly suggest you to use the method with {applicantId} for any subsequent transaction to link transactions to the exact applicant and avoid duplicates, as it will be harder to choose an applicant for the incoming transaction after.

Make sure to send a unique externalUserId and a proper fullName within an applicant object to us to create fresh applicant and process transaction.

# REQUEST ARGUMENTS
Name Type Required Description
applicantId String Yes Id of applicant that have been already processed by SumSub KYC.
#{body} Object Yes An object representing transaction (see example).
# REQUEST BODY
Name Type Required Description
txnId String Yes Transaction ID.
info Object Yes Transaction info.
applicant Object Yes Transaction participant data with mandatory applicantId (sender or remitter depending on info.direction).
counterparty Object Yes Transaction participant data (sender or remitter depending on info.direction).
type String Yes Transaction type - travelRule
# info ELEMENT ATTRIBUTES
Name Type Required Description
direction String Yes out (applicant sends to counterparty) or in (counterparty sends to applicant).
amount Double Yes Amount of sent funds.
currencyCode String Yes Currency code (USD, GBP, BTC, etc).
cryptoChain String No Crypto chain name. Mandatory for crypto tokens only. Specifies the network name to which the token at currencyCode belongs. Empty for native tokens (e.g. for BTC, ETH). For more information, see chain codes.
paymentTxnId String No Transaction ID from payment processor: blockchain, bank.
paymentDetails String No Comment with payment details.
# applicant ELEMENTS ATTRIBUTES
Name Type Required Description
externalUserId String Yes Transaction participant externalUserId.
fullName String Yes Participant's full name.
type String Yes Participant entity type (company or individual).
address Object No Participant's address. Address available elements are described here.
paymentMethod Object Yes Info about payment method.
# counterparty ELEMENTS ATTRIBUTES
Name Type Required Description
externalUserId String No Transaction participant externalUserId.
fullName String No Participant's full name.
type String No Participant entity type (company or individual).
address Object No Participant's address. Address available elements are described here.
paymentMethod Object Yes Info about payment method.
# paymentMethod ELEMENT ATTRIBUTES
Name Type Required Description
type String No Payment method type: crypto.
accountId String No Crypto wallet address
# Example request

# Patch transaction with chain txId

PATCH /resources/kyt/txns/{txnId}/data/info

Name Type Required Description
txnId String Yes Transaction Id to be moved to specified applicant.
#{body} Object Yes An object representing transaction data that needs to be changed.
# REQUEST BODY
Name Type Required Description
paymentTxnId String No Crypto transaction ID from the blockchain.
# Example request

# Move transaction to another applicant

POST /resources/kyt/txns/{txnId}/applicantId/{applicantId}

# REQUEST ARGUMENTS

Name Type Required Description
txnId String Yes Transaction Id to be moved to specified applicant.
applicantId String Yes Applicant id of user who should own the transaction.
# Example request

# Enriching transaction with travel rule info

PATCH /resources/kyt/txns/{txnId}/data/applicant

# REQUEST ARGUMENTS

Name Type Required Description
txnId String Yes Transaction Id to be moved to specified applicant.
#{body} Object Yes An object representing information required to complete Travel Rule exchange.
# REQUEST BODY
Name Type Required Description
fullName String Yes Participant's full name.
# Example request

# Transaction ownership confirmation

These two methods below will allow to mark transaction confirmed/unconfirmed that it belongs to your exchange (VASP) and unmask the personal information stored in specified transaction:

POST /resources/kyt/txns/{txnId}/ownership/unconfirmed

POST /resources/kyt/txns/{txnId}/ownership/confirmed

# REQUEST ARGUMENTS

Name Type Required Description
txnId String Yes Transaction Id.
# Example request
Last Updated: 1/15/2024, 9:25:24 AM