Skip to main content
Search

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: 1 indicates Post-Transaction scenario where the originator data is verified.
  • Your server should decrypt the PII payload, verify the Natural Person fields, and return a failed verification. At minimum, the originator name field (100026) must be reported in verifyFields with status 2 (not matched).
  • When responding, the returned IVMS payload should carry three sectionsOriginator, Beneficiary, and BeneficiaryVASP (the counterparty's VASP block). Keep the incoming Originator, Beneficiary, and BeneficiaryVASP blocks as received.

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 Verification
  • verificationDirection: 1 indicates Post-Transaction scenario (originator data verification)
  • The KYC payload contains intentionally incorrect Natural Person data
  • Post-Transaction uses field codes in the 100xxx series (originator Natural Person)
  • Do NOT use the ticker field to search for users
  • PII payload requires decryption using your private key with Curve25519
  • The same requestId is used across both stages
  • Your server should respond within 30 seconds for each callback

Materials:


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) — verifyStatus and verifyMessage are top-level fields, verifyFields is nested inside data.
  • verifyFields should include at least the originator name field (100026) with status 2 (not matched). Additional fields such as dateOfBirth (100025) or address (100045) are accepted but not required.
{
"verifyStatus": 200003,
"verifyMessage": "Post-Transaction Natural Person KYC verification failed",
"data": {
"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"
}
]
}
}

Note: The data field is required (must be present and non-null).


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 validation returns failure result — at minimum the originator name field (100026) with status: 2

Common Issues:

  • ⚠️ PII Decryption: Must properly decrypt the securedPayload using Curve25519 with your private key
  • ⚠️ Field Code Series: Post-Transaction uses 100xxx series (originator), not 110xxx (beneficiary)
  • ⚠️ Wrong verifyStatus: Must return 200003 for PII verification failure, not a HTTP error code
  • ⚠️ Ticker Reference: Do NOT use the ticker field to search for users
  • ⚠️ Three IVMS Sections Required in Response: The response payload should carry Originator, Beneficiary, and BeneficiaryVASP (the counterparty's VASP block) — keep them as received. Even though the field-level verification target is only the Originator person, the Beneficiary person block must still ship out end-to-end so both regulators can trace the full counterparty picture.

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"
}
}
}
}
}