06-PII Verify Failed (Natural Person / Post-Transaction)
- Post-Transaction Approval - PII Verification Failed for Natural Person originator (KYC).
- GTR will send two consecutive callback requests: TX verification (
callbackType=9) and PII verification with encrypted KYC payload containing intentionally incorrect data (callbackType=4). verificationDirection: 1indicates Post-Transaction scenario where the originator data is verified.- Your server should decrypt the PII payload, verify the Natural Person fields, and return failed verification results with At least one
verifyFieldshaving status 2 (not matched).
GTR Request Sequence (GTR → VASP)
- Method:
POST - Your Callback Endpoint:
https://[YOUR_CALLBACK_URL] - Authentication:
- mTLS (Mutual Transport Layer Security) - GTR will authenticate using client certificates
- Header:
Content-Type: application/json
Stage 1: TX Verification
- Body:
{
"requestId": "test-[RANDOM_ID]",
"invokeVaspCode": "[YOUR_VASP_CODE]",
"originatorVasp": "[TESTER_VASP_CODE]",
"beneficiaryVasp": "[YOUR_VASP_CODE]",
"callbackType": 9,
"callbackData": {
"requestId": "test-[RANDOM_ID]",
"ticker": "--YOU SHOULD NOT REFER TO THIS TICKER--",
"address": "[TESTER_KYC_ADDRESS]",
"tag": "[TESTER_KYC_ADDRESS_TAG]",
"txId": "[TESTER_KYC_TX_ID]",
"network": "[TESTER_KYC_NETWORK_SYMBOL]",
"initiatorVasp": "[TESTER_VASP_CODE]"
}
}
Stage 2: PII Verification with Encrypted KYC Payload (Incorrect Data)
- Body:
{
"requestId": "test-[RANDOM_ID]",
"invokeVaspCode": "[YOUR_VASP_CODE]",
"originatorVasp": "[TESTER_VASP_CODE]",
"beneficiaryVasp": "[YOUR_VASP_CODE]",
"callbackType": 4,
"callbackData": {
"requestId": "test-[RANDOM_ID]",
"amount": "1000",
"fiatPrice": "6.66",
"fiatName": "USDT",
"txId": "[TESTER_KYC_TX_ID]",
"network": "[TESTER_KYC_NETWORK_SYMBOL]",
"ticker": "--YOU SHOULD NOT REFER TO THIS TICKER--",
"tag": "[TESTER_KYC_ADDRESS_TAG]",
"address": "[TESTER_KYC_ADDRESS]",
"secretType": 1,
"originatorVasp": "[TESTER_VASP_CODE]",
"beneficiaryVasp": "[YOUR_VASP_CODE]",
"initiatorVasp": "[TESTER_VASP_CODE]",
"receiverVasp": "[YOUR_VASP_CODE]",
"verificationDirection": 1,
"piiSecuredInfo": {
"initiatorKeyInfo": {
"publicKey": "[INITIATOR_PUBLIC_KEY]"
},
"receiverKeyInfo": {
"publicKey": "[YOUR_PUBLIC_KEY]"
},
"piiSecretFormatType": "FULL_JSON_OBJECT_ENCRYPT",
"piiSpecVersion": "ivms101-2020",
"secretAlgorithm": "ed25519_curve25519",
"securedPayload": "[ENCRYPTED_KYC_PAYLOAD]"
}
}
}
callbackType: 9→ TX Verification,callbackType: 4→ PII VerificationverificationDirection: 1indicates Post-Transaction scenario (originator data verification)- The KYC payload contains intentionally incorrect Natural Person data
- Post-Transaction uses field codes in the
100xxxseries (originator Natural Person) - Do NOT use the
tickerfield to search for users - PII payload requires decryption using your private key with Curve25519
- The same
requestIdis used across both stages - Your server should respond within 30 seconds for each callback
Materials:
- Receiver Callback API 2: TX Verification
- Callback API 3: PII Verification
- Authentication & mTLS Setup
- Callback Server Setup Guide
- Python Callback Server Example
- Golang Callback Server Example
- Cipher Curve25519 Guideline
- IVMS 101 Guidelines
- PII Verification Methods
- PII Verify Fields
- List of Networks
- Post-Transaction Travel Rule Overview
Expected Response Sequence (VASP → GTR)
Your server should respond within 30 seconds for each callback. All responses should return HTTP Status Code 200.
Stage 1 Response: TX Verification Success
When the TXID is found in your system, you should return:
verifyStatus: 100000 (success)
{
"verifyStatus": 100000,
"verifyMessage": "Transaction verification passed"
}
Stage 2 Response: PII Verification Failed
When the Natural Person KYC verification fails, you should return:
verifyStatus: 200003 (PII verification failed)- At least one
verifyFieldshasstatus2 (not matched)
{
"data": {
"verifyStatus": 200003,
"verifyMessage": "Post-Transaction Natural Person KYC verification failed",
"verifyFields": [
{
"type": "100026",
"status": 2,
"message": "originator name not matched"
},
{
"type": "100025",
"status": 2,
"message": "originator dateOfBirth not matched"
},
{
"type": "100045",
"status": 2,
"message": "originator address not matched"
}
]
}
}
Test Validation
Success Criteria:
- ✅ Both callback stages handled successfully
- ✅ Each callback responds within 30 seconds
- ✅ HTTP status code 200 returned for all stages
- ✅ TX verification returns
verifyStatus: 100000 - ✅ PII verification returns
verifyStatus: 200003(PII verification failed) - ✅ Post-Transaction KYC field validations return failure results (100026, 100025, 100045 with status: 2)
Common Issues:
- ⚠️ PII Decryption: Must properly decrypt the
securedPayloadusing Curve25519 with your private key - ⚠️ Field Code Series: Post-Transaction uses
100xxxseries (originator), not110xxx(beneficiary) - ⚠️ Wrong verifyStatus: Must return
200003for PII verification failure, not a HTTP error code - ⚠️ Ticker Reference: Do NOT use the ticker field to search for users
Appendix A: IVMS 101 KYC Data
Note: This JSON is used for testing validation failures. The Originator section contains intentionally incorrect data.
The following JSON structure will be encrypted and sent as securedPayload:
{
"ivms101": {
"OriginatingVASP": {
"originatingVASP": {
"legalPerson": {
"name": {
"nameIdentifier": [
{
"legalPersonName": "Originator VASP Company Name - VVVV Inc.",
"legalPersonNameIdentifierType": "LEGL"
}
]
},
"nationalIdentification": {
"nationalIdentifierType": "RAID",
"registrationAuthority": "RA000388 (i.e: 香港公司註冊處核發 Hong Kong Company Registry Approved, For more please check: https://www.gleif.org/en/about-lei/code-lists/gleif-registration-authorities-list)",
"countryOfIssue": "HK",
"nationalIdentifier": "69104532 (i.e: Your Company ID from authroity)"
},
"geographicAddress": [
{
"country": "HK",
"townName": "Hong Kong",
"addressType": "GEOG",
"addressLine": [
"Please fill your address here"
]
}
],
"countryOfRegistration": "HK"
}
}
},
"Originator": {
"accountNumber": [
""
],
"originatorPersons": [
{
"naturalPerson": {
"dateAndPlaceOfBirth": {
"dateOfBirth": "1900-01-01",
"placeOfBirth": "WRONG_PLACE"
},
"name": {
"localNameIdentifier": [
{
"nameIdentifierType": "LEGL",
"primaryIdentifier": "WRONG_NAME",
"secondaryIdentifier": "WRONG_SURNAME"
}
],
"nameIdentifier": [
{
"nameIdentifierType": "LEGL",
"primaryIdentifier": "WRONG_NAME",
"secondaryIdentifier": "WRONG_SURNAME"
}
]
},
"geographicAddress": [
{
"addressType": "GEOG",
"streetName": "Wrong Street",
"buildingNumber": "000",
"buildingName": "Wrong Building",
"postCode": "00000",
"townName": "Wrong City",
"countrySubDivision": "Wrong State",
"country": "XX"
}
],
"nationalIdentification": {
"nationalIdentifier": "WRONG_ID_NUMBER",
"nationalIdentifierType": "RAID",
"registrationAuthority": "INVALID_AUTH"
}
}
}
]
},
"Beneficiary": {
"beneficiaryPersons": [
{
"naturalPerson": {
"dateAndPlaceOfBirth": {
"placeOfBirth": "US",
"dateOfBirth": "1986-11-21"
},
"name": {
"localNameIdentifier": [
{
"nameIdentifierType": "LEGL",
"primaryIdentifier": "Satoshi",
"secondaryIdentifier": "Nakamoto"
}
],
"nameIdentifier": [
{
"nameIdentifierType": "LEGL",
"primaryIdentifier": "Satoshi",
"secondaryIdentifier": "Nakamoto"
}
]
}
}
}
],
"accountNumber": [
"0xb7f9a622c34652cd8f54de97a15281b98a8114ac"
]
},
"BeneficiaryVASP": {
"beneficiaryVASP": {
"legalPerson": {
"name": {
"nameIdentifier": [
{
"legalPersonName": "Originator VASP Company Name - VVVV Inc.",
"legalPersonNameIdentifierType": "LEGL"
}
]
},
"nationalIdentification": {
"nationalIdentifierType": "RAID",
"registrationAuthority": "RA000388 (i.e: 香港公司註冊處核發 Hong Kong Company Registry Approved, For more please check: https://www.gleif.org/en/about-lei/code-lists/gleif-registration-authorities-list)",
"countryOfIssue": "HK",
"nationalIdentifier": "69104532 (i.e: Your Company ID from authroity)"
},
"geographicAddress": [
{
"country": "HK",
"townName": "Hong Kong",
"addressType": "GEOG",
"addressLine": [
"Please fill your address here"
]
}
],
"countryOfRegistration": "HK"
}
}
}
}
}