Submit One Step Travel Rule
Method
POST
Url
https://platform.globaltravelrule.com/api/verify/v2/one_step
This API endpoint is the main endpoint for Travel Rule Request Initiator to start a Travel Rule. This endpoint covers two main verification phases: 1. address or txId verification, 2. PII verification.
Authentication
No authentication
Path Parameters
No path parameters
Query Parameters
No query parameters
Request Body (Required)
- Schema
- Example
{
"requestId": "testexchange-189e9948-64c7-4a6c-bb4f-859c173321c5",
"verifyDirection": "1: (After on chain), 2: (Before On Chain)",
"targetVaspCode": "MAkGAda4ac",
"ticker": "USDT",
"originatorAddress": "E9aX7TbJqvLwzC1f8rYpBnGks3M0QHjVxODUZ_WRmT2yXoLp",
"originatorAddressTag": "E9aX7TbJqvLwzC1f8rYpBnGks3M0QHjVxODUZ_WRmT2yXoLp",
"address": "E9aX7TbJqvLwzC1f8rYpBnGks3M0QHjVxODUZ_WRmT2yXoLp",
"tag": "some of network like XRP required to input address tag (memo)",
"network": "XRP",
"txId": "d1029841dacb031098288b257b628a967eb963bbaccf954506ad0694219497a4",
"encryptedPayload": "s7GpRAkqDz9whfwaOaBy6PhH5ITStUxN7Uz0mQLXpgZMQJ1HmtpUSnk6hEjGx1zuq0yCyWPVr66BmwgsOy/V2PZt2qR+C5EYArRjIbfYwdfDw051kxlv9dRiMTbZphNViL2YafNJPqKradDA/RmzScQ7g9LsTOmpHZCepLG66eIT+9LatJb6CF...etc",
"expectVerifyFields": [
"110026",
"110025",
"110045",
"100031"
],
"piiSecuredInfo": "(Refer to inner structure)",
"amount": 8e-18,
"fiatPrice": 84.12,
"fiatName": "USD",
"sourceVaspCode": "MAkGAda4ac"
}
Responses
Status HTTP Status: 200, VerifyStatus: 100000
Success case
JSON Content
- Schema
- Example
{
"verifyStatus": 100000,
"verifyMessage": "Verify Success"
}
Status HTTP Status: 200, VerifyStatus: 200001
Address not found case
JSON Content
- Schema
- Example
{
"verifyStatus": 200001,
"verifyMessage": "Address Not Found."
}
Status HTTP Status: 200, VerifyStatus: 200007
TX ID Not found case
JSON Content
- Schema
- Example
{
"verifyStatus": 200007,
"verifyMessage": "TX ID Not Found"
}
Status HTTP Status: 200, VerifyStatus: 200003
default response
JSON Content
- Schema
- Example
{
"verifyStatus": 200003,
"verifyMessage": "PII Verification Failed"
}
This /one-step API can cover two situations:
- Pre-transaction Travel Rule: if your VASP as Originator VASP, initiating a Travel Rule request before sending the crypto assets to the blockchain
- Post-transaction Travel Rule: if your VASP as Beneficiary VASP, initiating a Travel RUle request after you received crypto assets from the blockchain
This /one-step API will run all verification flows in a synchronous way:
- Address Verification(in pre-transaction situation)or TXID Verification(in post-transaction situation)
- PII Verification.
If first check failed, Travel Rule process will be terminated right away and your counterparty VASP will not receive your encrypted PII payload.
Please note that, this API will always return HTTP Code as 200 and this API shall time out after 30 seconds.
Once you called /one_step API in a pre-transaction situation, you are required to invoke /notify_tx_id after you successfully execute this asset transfer on the blockchain.
This will let your counterparty VASP receive a notification containing the correlation of txId and requestId.
Request Example 1: Travel Rule Initiator as Originator VASP(Pre-transaction situation)
{
"requestId": "[prefix-uuidv4: KITCHEN_STORE-16e5025a-8e55-4052-8a68-c91620cb28fb]",
"ticker": "[TICKER NAME: ETH]",
"amount": "[Amount in crypto: 542.0000000000452]",
"address": "[Beneficiary Address: 0x339facb1153e01d1e0d21e378da56d851da25ade]",
"tag": "[TAG-(XRP/XLM/TON), leave blank if not applicable: 164392432]",
"network": "[NETWORK NAME: ETH]",
"txId": null,
"verifyDirection": 2,
"targetVaspCode": "[Target VASP Code: gdummy]",
"encryptedPayload": "[Curve25519 encrypted string]",
"initiatorPublicKey": "[Your public key - Curve25519 Format]",
"targetVaspPublicKey": "[Target VASP public key - Curve25519 Format]",
"fiatName": "[FIAT NAME: USD]",
"fiatPrice": "[FIAT RATIO PRICE: 4593.31]",
"expectVerifyFields": ["110026", "111001"],
"piiSecuredInfo": {
"initiatorKeyInfo": {
"publicKey": "xxxxxxx"
},
"receiverKeyInfo": {
"publicKey": "xxxxxxx"
},
"secretAlgorithm": "curv225519",
"piiSecretFormatType": "FULL_JSON_OBJECT_ENCRYPT",
"piiSpecVersion": "ivms101-2020",
"securedPayload": "[Encrypted PII]",
"encryptionParams": {
"ecies": {
"ephemeralPublicKey": "xxxxxxxxx"
}
}
}
}
Request Example 2: Travel Rule Initiator as Beneficiary VASP (Post-transaction situation)
{
"requestId": "[prefix-uuidv4: KITCHEN_STORE-16e5025a-8e55-4052-8a68-c91620cb28fb]",
"ticker": "[TICKER NAME: ETH]",
"amount": "[Amount in crypto: 542.0000000000452]",
"address": "[*In Post-transaction travel rule, still use Beneficiary Address: 0x339facb1153e01d1e0d21e378da56d851da25ade]",
"tag": "[TAG-(XRP/XLM/TON), leave blank if not applicable: 164392432]",
"network": "[NETWORK NAME: ETH]",
"txId": "F4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16",
"verifyDirection": 1,
"targetVaspCode": "[Target VASP Code: gdummy]",
"encryptedPayload": "[Curve25519 encrypted string]",
"initiatorPublicKey": "[Your public key - Curve25519 Format]",
"targetVaspPublicKey": "[Target VASP public key - Curve25519 Format]",
"fiatName": "[FIAT NAME: USD]",
"fiatPrice": "[FIAT RATIO PRICE: 4593.31]",
"expectVerifyFields": ["110026", "111001"],
"piiSecuredInfo": {
"initiatorKeyInfo": {
"publicKey": "xxxxxxx"
},
"receiverKeyInfo": {
"publicKey": "xxxxxxx"
},
"secretAlgorithm": "curv225519",
"piiSecretFormatType": "FULL_JSON_OBJECT_ENCRYPT",
"piiSpecVersion": "ivms101-2020",
"securedPayload": "[Encrypted PII]",
"encryptionParams": {
"ecies": {
"ephemeralPublicKey": "xxxxxxxxx"
}
}
}
}
Response Full Structure
{
"data": {
"encryptedPayload": "RrInXkezrLw...5ogc1koFps=",
"initiatorPublicKey": "[YOUR PUBLIC KEY]",
"targetVaspPublicKey": "[TARGET VASP PUBLIC KEY]",
"targetVaspCode": "[TARGET VASP CODE]",
"originatorVasp": "",
"beneficiaryVasp": "",
"secretType": 1,
"requestId": "[REQUEST ID]",
"travelruleId": "[TRAVEL RULE ID]",
"verifyFields": [
{
"message": "matched",
"status": 1,
"type": "111006" // Beneficiary Natural Person Name
},
{
"message": "we don't support sorry",
"status": 2,
"type": "MY_OWN_NAME" // custom name or type name
},
{
"message": "date of birth matched",
"status": 1,
"type": "111024" // Beneficiary Natural Person Date of birth
}
]
},
"success": true,
"verifyMessage": "Verification Success",
"verifyStatus": 100000
}
Response Example 1: Success
HTTP Status: 200, VerifyStatus: 100000
{
"verifyStatus": 100000,
"verifyMessage": "Verify Success"
}
Response Example 2: Address Not Found
HTTP Status: 200, VerifyStatus: 200001
{
"verifyStatus": 200001,
"verifyMessage": "Address Not Found."
}
Response Example 3: TXID Not Found
HTTP Status: 200, VerifyStatus: 200007
{
"verifyStatus": 200007,
"verifyMessage": "TX ID Not Found"
}
Response Example 4: PII Verification Failed
HTTP Status: 200, VerifyStatus: 200003
{
"verifyStatus": 200003,
"verifyMessage": "PII Verification Failed"
}
Just to highlight, when you receive verifyStatus as 200003, it means PII payload sent by your VASP failed to be verified by your counterparty.
There could be various failure reason:
- Specific PII field you sent is mismatched with their KYC data,
- Certain PII Fields are not included in your PII Payload,
- ...
You can look into the verifyFields array in the response for the detail reason.