11-Address Verification Success (With Memo/Tag)
- Pre-Transaction Approval - Address Verification Success on a memo-required network.
- GTR will send a callback request (
callbackType=6) with anaddressand a non-emptytag(memo) to verify a specific beneficiary address that lives on a memo-required network. - Your server should confirm ownership by matching both
addressandtag, and return a successful verification response. - This test targets networks whose deposits are only uniquely identified when both address and memo/tag are combined — for example HBAR, XLM, or XRP.
GTR Request (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
- Body:
{
"requestId": "test-[RANDOM_ID]",
"invokeVaspCode": "[YOUR_VASP_CODE]",
"originatorVasp": "[TESTER_VASP_CODE]",
"beneficiaryVasp": "[YOUR_VASP_CODE]",
"callbackType": 6,
"callbackData": {
"requestId": "test-[RANDOM_ID]",
"originatorVasp": "[TESTER_VASP_CODE]",
"originatorVaspName": "[TESTER_VASP_NAME]",
"ticker": "--YOU SHOULD NOT REFER THIS TICKER TO SEARCH YOUR USER--",
"address": "[TEST_ADDRESS]",
"tag": "[ADDRESS_TAG_MUST_BE_NON_EMPTY]",
"network": "[MEMO_REQUIRED_NETWORK_SYMBOL]",
"initiatorVasp": "[TESTER_VASP_CODE]"
}
}
curl -v --location --request POST 'https://[YOUR_CALLBACK_URL]' \
-k \
--header 'Content-Type: application/json' \
--data-raw '{
"requestId": "test-abc123def456",
"invokeVaspCode": "[YOUR_VASP_CODE]",
"originatorVasp": "[TESTER_VASP_CODE]",
"beneficiaryVasp": "[YOUR_VASP_CODE]",
"callbackType": 6,
"callbackData": {
"requestId": "test-abc123def456",
"originatorVasp": "[TESTER_VASP_CODE]",
"originatorVaspName": "[TESTER_VASP_NAME]",
"ticker": "--YOU SHOULD NOT REFER THIS TICKER TO SEARCH YOUR USER--",
"address": "[TEST_ADDRESS]",
"tag": "[ADDRESS_TAG_MUST_BE_NON_EMPTY]",
"network": "[MEMO_REQUIRED_NETWORK_SYMBOL]",
"initiatorVasp": "[TESTER_VASP_CODE]"
}
}'
Hint:
callbackType: 6indicates address verification for Pre-TransactiontagMUST NOT be null or empty in this test case — it carries the memo/destination-tag/note that uniquely identifies the deposit account on the target network- Pick a network that requires a memo/tag on deposits — e.g. HBAR (memo), XLM (memo), XRP (destination tag)
- Do NOT use the
tickerfield to search for users - Verification must match both
addressANDtag— an address-only match on a memo-required network is a data integrity bug - Your server should respond within 30 seconds
Materials:
- Receiver Callback API 1: Address Verification
- Authentication & mTLS Setup
- Callback Server Setup Guide
- Python Callback Server Example
- Golang Callback Server Example
- List of Networks
- Pre-Transaction Travel Rule Overview
Expected Response (VASP → GTR)
When the (address, tag) pair is found in your system, you should return:
- HTTP Status Code: 200
verifyStatus: 100000 (success)
{
"verifyStatus": 100000,
"verifyMessage": "Address verification passed"
}
Test Validation
Success Criteria:
- ✅ Your callback server responds within 30 seconds
- ✅ HTTP status code 200 returned
- ✅
verifyStatus: 100000indicates successful verification - ✅ Lookup uses both
addressandtagand confirms ownership - ✅ Test data uses a memo-required network (HBAR / XLM / XRP / etc.) with a non-empty
tag
Common Issues:
- ⚠️ Ignoring
tag: On memo-required networks, matching by address alone can return the wrong user or a shared deposit account - ⚠️ Null / empty
tag: This test intentionally exercises a non-empty tag — treating it as absent is a bug - ⚠️ Wrong Status Code: Return HTTP 200 even for failed verification (use
verifyStatusinstead) - ⚠️ Ticker Reference: Do NOT use the ticker field to search for users