Skip to main content
Search

08-PII Verify Failed (Legal Person / Post-Transaction)

  • Post-Transaction Approval - PII Verification Failed for Legal Person originator (KYB).
  • GTR will send two consecutive callback requests: TX verification (callbackType=9) and PII verification with encrypted KYB 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 Legal Person fields, and return a failed verification. At minimum, the originator legal person name field (101001) 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 KYB 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_KYB_PAYLOAD]"
}
}
}
  • callbackType: 9 → TX Verification, callbackType: 4 → PII Verification
  • verificationDirection: 1 indicates Post-Transaction scenario (originator data verification)
  • The KYB payload contains intentionally incorrect Legal Person data
  • Post-Transaction uses field codes in the 101xxx series (originator Legal 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 Legal Person KYB 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 legal person name field (101001) with status 2 (not matched). Additional fields such as countryOfRegistration (101022) or geographicAddress (101003) are accepted but not required.
{
"verifyStatus": 200003,
"verifyMessage": "Post-Transaction Legal Person KYB verification failed",
"data": {
"verifyFields": [
{
"type": "101001",
"status": 2,
"message": "originator legalPersonName not matched"
},
{
"type": "101022",
"status": 2,
"message": "originator countryOfRegistration not matched"
},
{
"type": "101003",
"status": 2,
"message": "originator geographicAddress 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 KYB field validation returns failure result — at minimum the originator legal person name field (101001) with status: 2

Common Issues:

  • ⚠️ PII Decryption: Must properly decrypt the securedPayload using Curve25519 with your private key
  • ⚠️ Field Code Series: Post-Transaction uses 101xxx series (originator Legal Person), not 111xxx (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 (Legal 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 KYB Data

Note: This JSON is used for testing validation failures. The Originator section contains intentionally incorrect Legal Person 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": [
{
"legalPerson": {
"name": {
"nameIdentifier": [
{
"legalPersonName": "INCORRECT Business Company Inc.",
"legalPersonNameIdentifierType": "LEGL"
}
]
},
"countryOfRegistration": "WRONG_COUNTRY",
"nationalIdentification": {
"nationalIdentifier": "INCORRECT_ID",
"nationalIdentifierType": "RAID",
"countryOfIssue": "XX",
"registrationAuthority": "INVALID_AUTH"
},
"geographicAddress": [
{
"addressType": "GEOG",
"postCode": "00000",
"townName": "Invalid City",
"addressLine": [
"Wrong Address Line"
],
"country": "XX"
}
]
}
},
{
"naturalPerson": {
"dateAndPlaceOfBirth": {
"placeOfBirth": "US",
"dateOfBirth": "1986-11-21"
},
"name": {
"localNameIdentifier": [
{
"nameIdentifierType": "LEGL",
"primaryIdentifier": "Satoshi",
"secondaryIdentifier": "Nakamoto"
}
],
"nameIdentifier": [
{
"nameIdentifierType": "LEGL",
"primaryIdentifier": "Satoshi",
"secondaryIdentifier": "Nakamoto"
}
]
}
}
}
]
},
"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"
}
}
}
}
}