Skip to main content
Search

Integration Overview

Business Scenario

GTR 2.0 Travel Rule request could cover 2 situations:

TypeDescriptionRoles
Pre-transaction Travel Rule- The transaction has not yet been submitted to the blockchain.
- This is usually part of a Withdrawal process.
- Before transfer transaction executed, Originator VASP initiates a Travel Rule request with encrypted PII payload and sends to Beneficiary VASP to ask for the verification.
Travel Rule Initiator: Originator
Travel Rule Receiver & Verifier: Beneficiary VASP
Post-transaction Travel Rule- The transaction has already been recorded on the blockchain.
- This is usually part of a Deposit process.
- After receiving a deposit transaction, Beneficiary VASP initiates a Travel Rule request with encrypted PII payload and sends to Originator VASP to ask for the verification.
Travel Rule Initiator: Beneficiary
Travel Rule Receiver & Verifier: Originator VASP

In GTR world,

NameDescription
Originator VASPThe VASP that sends the crypto assets
Beneficiary VASPThe VASP that receives crypto assets
OriginatorThe specific legal person / natural person who sends the crypto assets (the withdrawal user)
BeneficiaryThe specific legal person / natural person who receives the crypto assets (the deposit user)
Travel Rule Initiator VASPThe VASP that initiates a Travel Rule request by calling GTR REST API
Travel Rule Receiver VASPThe VASP that receives the callbacks from GTR (usually be WebHook Server)

Pre-transaction Travel Rule

Implement as an Initiator

In this case: when a customer on your VASP initiates a transfer of assets to another VASP but the transaction has not yet been sent to the blockchain, your VASP takes on the role of both the Originator VASP and the Travel Rule Request Initiator VASP. Before the blockchain transaction takes place, your VASP is responsible for preparing and sending the PII payload to the Beneficiary VASP.

Your VASP would beYour Counterparty VASP would be
- the Originator VASP.- the Beneficiary VASP.
- the Travel Rule Initiating VASP which is responsible for collecting PII info and sharing with your counterparty.- the Travel Rule Receiving VASP which is expected to verify the correctness of PII info received from you.

In this scenario, 2 verification steps will be gone through for your Travel Rule requests.

Verification NameDescription
Address Verificationyour counterparty VASP will verify and confirm whether their VASP owns this specific wallet address.
PII Verificationyour counterparty VASP will verify and confirm whether PII fields you sent matches with their customer's KYC information.

Flow Diagram

  1. Let your user select Beneficiary VASP and fill in the Beneficiary Info.
  2. Initiate Pre-transaction travel rule by the selected vaspCode.
  3. Invoke the endpoint One Step Travel Rule API (Initiator API 1) to initiate a travel rule request.
  4. Wait for GTR to call back your service of the Address verification and PII Verification result. If Address Verification failed, your PII won't be sent to your counterparty.
  5. Once you received verification result from GTR, make your final decision of executing transfer transaction on blockchain or cancel / reject the withdrawal request.
  6. If asset transfer is executed on the blockchain, call Report TX ID to notify GTR and your counterparty VASP of the actual blockchain tx_id.
  7. If Travel Rule succeed however you still decide to cancel or reject this withdrawal request, explicitly telling GTR to terminate Travel Rule via endpoint End Travel Rule.

Implement as a Receiver

In this case: when your counterparty VASP sends you a Travel Rule request before transaction initialized on the blockchain, and in this request, it specifies that a customer from your VASP is expected to receive assets from the counterparty VASP.

So in this scenario, your VASP acts as both the Beneficiary VASP and the Travel Rule Request Receiving VASP which means your VASP is likely to receive the PII payload and is responsible for completing the verification process.

Your VASP would beYour Counterparty VASP would be
- the Beneficiary VASP.- the Originator VASP.
- the Travel Rule Receiving VASP which is responsible for PII verifying received from your counterparty.- the Travel Rule Initiating VASP which is responsible for collecting PII info and sharing with you.

In this scenario, 2 verification steps need to be completed by your VASP:

Verification NameDescription
Address Verificationthis step requires your VASP to verify and confirm whether your VASP owns this specific wallet address.
PII Verificationthis step requires your VASP to verify and confirm whether your received PII fields matches with your customer's KYC information.

Flow Diagram

  1. [Your Counterparty] Initiate travel rule request
  2. [You] You will firstly receive a callback of Address Verification.
  3. [You] If you respond Address Verification passed, you will receive a callback of PII Verification.
  4. [Your Counterparty] Transfer assets on the blockchain or cancel / reject the withdrawal request.
  5. [You] If your counterparty executes the transaction on the blockchain, you will receive an update of actual tx_id via Notify TX ID
  6. [You] If your counterparty cancels or rejects this withdrawal request, you will receive an update of Travel Rule End

Post-transaction Travel Rule

Implement as an Initiator

In this case: when your VASP has received assets from a counterparty VASP, and you subsequently request PII verification from that counterparty because there is no Travel Rule record associated with this blockchain transaction, your VASP as the Beneficiary VASP of this asset transfer, becomes the Travel Rule Request Initiating VASP. As such, your VASP is responsible for initiating the Travel Rule request, preparing and sending the PII payload to your counterparty.

Your VASP would beYour Counterparty VASP would be
- the Beneficiary VASP.- the Originator VASP.
- the Travel Rule Initiator VASP which is responsible for collecting PII info and sharing with your counterparty.- the Travel Rule Receiver VASP which is responsible for PII verifying received from you.

In this scenario, 2 verification steps will be gone through for your Travel Rule requests.

Verification NameDescription
TXID Verificationyour counterparty VASP will verify and confirm whether their VASP owns this specific blockchain tx_id.
PII Verificationyour counterparty VASP will verify and confirm whether PII fields you sent matches with their customer's KYC information.

Flow Diagram

  1. Let your user select Originator VASP and fill in the Originator Info.
  2. Initiate Post-transaction travel rule by the selected vaspCode.
  3. Invoke the endpoint One Step Travel Rule API (Initiator API 1) to initiate a travel rule request.
  4. Wait for GTR to call back your service of the TXID verification and PII Verification result. If TXID Verification failed, your PII won't be sent to your counterparty.
  5. Once you received verification result from GTR, make your final decision of continuing or cancel / reject this deposit request.

Implement as a Receiver

In this case: when your VASP received a Travel Rule request from your counterparty VASP after a transaction had already taken place, and in this request, it indicates that a customer from your VASP was the originator of this asset transfer. Your VASP can expect to receive PII payload and is responsible for completing the verification process.

Your VASP would beYour Counterparty VASP would be
- the Originator VASP.- the Beneficiary VASP.
- the Travel Rule Receiving VASP which is responsible for PII verifying received from your counterparty.- the Travel Rule Initiating VASP which is responsible for collecting PII info and sharing with you.

In this scenario, 2 verification steps need to be completed by your VASP:

Verification NameDescription
TXID Verificationthis step requires your VASP to verify and confirm whether your VASP owns this specific blockchain tx_id.
PII Verificationthis step requires your VASP to verify and confirm whether your received PII fields matches with your customer's KYC information.

Flow Diagram

  1. [Your Counterparty] Initiate travel rule request
  2. [You] You will firstly receive a callback of TXID Verification.
  3. [You] If you respond TXID Verification passed, you will receive a callback of PII Verification.
  4. [Your Counterparty] Your counterparty will make final decision of continuing their deposit process or reject.

API Reference Full Table

Implementing as a Travel Rule Initiator:

StepPre-transaction Travel RulePost-transaction Travel Rule
Get VASP List
Do Address Routing
Get VASP Detail
One Step Initiate Travel Rule
Submit TXID
End Travel Rule

Implementing as a Travel Rule Receiver:

Parameters

There are some parameters in GTR specification for all VASPs:

NameDescription
Request Timeout15 seconds
Response Timeout15 seconds
Content TypeJSON
AuthorizationBearer Token or App Token
UniqueIDrequestId
Retry same requestId if verification failedNOT ALLOWED (Only if Internal Server Error). Please initiate another travel rule with a new requestId
RequestId format[PREFIX]-UUIDv4
How long should I keep the log30 days

Callback API

Your service is only required to provide single endpoint for GTR to send you callback request. Callback URL is configurable on GTR website.

The callback request payload looks like:

{
"requestId": "[REQUEST-ID]",
"invokeVaspCode": "[Invoker VASP Code]",
"originatorVasp": "[Originator VASP Code]",
"beneficiaryVasp": "[Beneficiary VASP Code]",
"callbackType": 0,
"callbackData": {
}
}
NameDescription
requestIdThe requestId from the Travel Rule Initiator VASP. The same Travel Rule will use the same requestId. If you see any parameter named requestId, it refers to the same thing.
invokeVaspCodeThe VASP that will receive this callback. This is useful if your brand operates multiple local exchanges and they all share the same callback endpoint. You can use this invokeVaspCode to route traffic to the corresponding logic.
originatorVaspSender VASP in a crypto assets transfer.
beneficiaryVaspReceiver VASP in a crypto assets transfer.
callbackTypeA number to distinguish callback request type since single callback endpoint is shared across all callback requests.
callbackDataFor different callbackType, callbackData could be different structure.