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 phase: 1. address or txId verification, 2. PII Verification.
Authentication
No authentication
Path Parameters
No path parameters
Query Parameters
No query parameters
Request Body (Optional)
- Schema
- Example
{
"amount": "0.000000000000000008",
"encryptedPayload": "s7GpRAkqDz9whfwaOaBy6PhH5ITStUxN7Uz0mQLXpgZMQJ1HmtpUSnk6hEjGx1zuq0yCyWPVr66BmwgsOy/V2PZt2qR+C5EYArRjIbfYwdfDw051kxlv9dRiMTbZphNViL2YafNJPqKradDA/RmzScQ7g9LsTOmpHZCepLG66eIT+9LatJb6CF...etc",
"ticker": "USDT",
"address": "E9aX7TbJqvLwzC1f8rYpBnGks3M0QHjVxODUZ_WRmT2yXoLp",
"verifyDirection": 0,
"txId": "d1029841dacb031098288b257b628a967eb963bbaccf954506ad0694219497a4",
"piiSecuredInfo": "(Refer to inner structure)",
"network": "XRP",
"targetVaspCode": "MAkGAda4ac",
"hashSalt": "string",
"fiatName": "USD",
"requestId": "testexchange-189e9948-64c7-4a6c-bb4f-859c173321c5",
"secretType": 0,
"fiatPrice": "84.12",
"sourceVaspCode": "MAkGAda4ac",
"initiatorPublicKey": "0szeNNub/IGoe623JCGD4B4bH8I94FozOeZjv1dKlXQ=",
"tag": "some of network like XRP required to input address tag (memo)",
"expectVerifyFields": "[\"110026\", \"110025\", \"110045\", \"100031\"] *(110026: Beneficiary Natural Person Name, 110025: Beneficiary Natural Person Date of Birth, 110045: Beneficiary Natural Person National ID, 100031: Originator Natural Person Address Lines), ",
"targetVaspPublicKey": "0szeNNub/IGoe623JCGD4B4bH8I94FozOeZjv1dKlXQ="
}
Responses
Status 200
OK
JSON Content
- Schema
- Example
{
"data": {
"encryptedPayload": "string",
"beneficiaryVasp": "(GTR VASP Code)",
"originatorVasp": "(GTR VASP Code)",
"piiSecuredInfo": "(Refer to inner structure)",
"addressRiskLevel": "high",
"targetVaspCode": "MAkGAda4ac",
"hashSalt": "string",
"requestId": "testexchange-189e9948-64c7-4a6c-bb4f-859c173321c5",
"secretType": 0,
"initiatorPublicKey": "0szeNNub/IGoe623JCGD4B4bH8I94FozOeZjv1dKlXQ=",
"verifiedFields": "[\n {\n \"type\": \"111001\",\n \"status\": 1,\n \"message\": \"beneficiary legal person name match\"\n },\n {\n \"type\": \"110026\",\n \"status\": 2,\n \"message\": \"beneficiary natural person name mismatch\"\n },\n {\n \"type\": \"110025\",\n \"status\": 2,\n \"message\": \"beneficiary natural person date of birth mismatch\"\n }\n]",
"preflightCheckStatus": "ACCEPTED",
"preflightCheckMessage": "(ANY MESSAGE)",
"targetVaspPublicKey": "0szeNNub/IGoe623JCGD4B4bH8I94FozOeZjv1dKlXQ="
},
"verifyStatus": 0,
"verifyMessage": "string"
}
Status HTTP Status: 200, VerifyStatus: 100000
JSON Content
- Schema
- Example
{
"data": {},
"verifyStatus": 0,
"verifyMessage": "string"
}
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.