PII Verification Callback
Method
POST
Url
https://{YOUR_SERVICE_URL}/(pii verify: 4)
This API endpoint is for PII verification, initiator will send you encrypted PII via GTR, you have to decrypt use your own private key and check the KYC/KYB in different direction. For you (in callback perspective), if you're deposit side, the verificationDirection = 2, you check the Beneficiary info is correct or not, please use the address+tag in the request payload to identify your customer, do not use the address in the PII to identify customer. If you're withdraw side, the verificationDirection = 1, you need to check the Originator info is correct or not. after verify, you put in your VASP(Company) info into pii's BeneficairyVASP(If you're deposit) or OriginatingVASP(If you're withdraw) and encrypt send back, also to send back the verifyFields to let the initiator knows the status of matching. Also, the preflightCheck and be also response here to let initiator know whether you will accept the transaction or not (Only suitable for the scenario of before-on-chain, you're beneficiary).
Authentication
No authentication
Path Parameters
No path parameters
Query Parameters
No query parameters
Request Body (Optional)
- Schema
- Example
{
"initiatorVasp": "[vaspCode]",
"amount": "0.000000000000000008",
"ticker": "USDT",
"address": "E9aX7TbJqvLwzC1f8rYpBnGks3M0QHjVxODUZ_WRmT2yXoLp",
"beneficiaryVasp": "(GTR VASP Code)",
"initiatorExpectVerifyFields": "[\"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), ",
"verifyMessage": "string",
"receiverVasp": "[vaspCode]",
"txId": "d1029841dacb031098288b257b628a967eb963bbaccf954506ad0694219497a4",
"originatorVasp": "(GTR VASP Code)",
"piiSecuredInfo": "(Refer to inner structure)",
"network": "XRP",
"fiatName": "USD",
"verifyStatus": 0,
"requestId": "testexchange-189e9948-64c7-4a6c-bb4f-859c173321c5",
"beneficiaryVaspName": "(GTR VASP Name)",
"fiatPrice": "84.12",
"originatorVaspName": "(GTR VASP Name)",
"tag": "466489710",
"verificationDirection": 0
}
Responses
Status 200
OK
JSON Content
- Schema
- Example
{
"data": {
"encryptedPayload": "string",
"verifyFields": [
{
"message": "string",
"type": "110026",
"status": 1
}
],
"requestId": "testexchange-189e9948-64c7-4a6c-bb4f-859c173321c5",
"initiatorPublicKey": "string",
"piiSecuredInfo": {
"piiSpecVersion": "ivms101-2020",
"secretAlgorithm": "ecies_secp256r1",
"receiverKeyInfo": "(Refer to inner structure)",
"initiatorKeyInfo": "(Refer to inner structure)",
"securedPayload": "(base64 or other format's encrypted raw text)",
"encryptionParams": "(Refer to inner structure)",
"piiSecretFormatType": "FULL_JSON_OBJECT_ENCRYPT"
},
"preflightCheckStatus": "string",
"receiverPublicKey": "string",
"preflightCheckMessage": "string"
},
"verifyStatus": 100000,
"verifyMessage": "string"
}
Status HTTP Status: 200, VerifyStatus: 200002
JSON Content
- Schema
- Example
{
"data": {},
"verifyStatus": 100000,
"verifyMessage": "string"
}
Status HTTP Status: 200, VerifyStatus: 200003
JSON Content
- Schema
- Example
{
"data": {},
"verifyStatus": 100000,
"verifyMessage": "string"
}
Status HTTP Status: 200, VerifyStatus: 100000
JSON Content
- Schema
- Example
{
"data": {},
"verifyStatus": 100000,
"verifyMessage": "string"
}
-
If your VASP is in the deposit side(it is an inbound transaction to you), the
verificationDirectionwill be 2:- you need to check
beneficiary_address+tagin the request to identify your customer.
- you need to check
-
If your VASP is in the withdrawal side(it is an outbound transaction to you), the
verificationDirectionwill be 1:- you need to match the Originator info in the PII payload you received with your owned KYC data.
Before you respond:
- You are required fill in your VASP info into PII's
BeneficiaryVASP(If you're in the deposit side) orOriginatingVASP(If you're in the withdrawal side) - You are required to fill in
verifyFieldsto let the Travel Rule initiator knows the matching/mismatching status of each specific PII fields. - You can also include
prefightCheckstatus to let initiator know whether you will accept this transaction or not (Only suitable when your VASP is the Beneficiary VASP in a pre-transaction situation).
Response Example 1: Success
HTTP Status: 200, VerifyStatus: 100000
{"verifyStatus": 100000,"verifyMessage": "Verify Success"}
This response indicates that the PII verification was successful.
Response Example 2: Decryption Fail
HTTP Status: 200, VerifyStatus: 200002
{"verifyStatus": 200002,"verifyMessage": "Decrypt failed"}
This response indicates that the PII decryption failed using your private key.
Response Example 3: PII Verification Fail
HTTP Status: 200, VerifyStatus: 200003
{"verifyStatus": 200003,"verifyMessage": "PII Verification Failed"}