Skip to main content
Search

Callback - Address Routing Detection

This callback is to request your service check the address ownership in your system and redirect to another local entity if there are multiple entities operating under your brand.

For example, your brand Axchange Exchange has multiple local exchanges: Axchange Global, Axchange Japan, and Axchange USA.

During a withdrawal request, a customer fills in the Beneficiary Address and selects Axchange Japan as the Beneficiary VASP by mistake, Axchange USA is the correct one.

In such case, this callback shall request Axchange Japan to route the request to Axchange USA.

Request & Response

When you receive a callback request with callbackType=10, you should check this address belongs to your system or not based on the verifyTargetType.

GTR expects to receive your response within 2 seconds.

Callback Request A: verifyTargetType = 1

If you receive verifyTargetType = 1, you shall look up your data by beneficiaryAddress.address and beneficiaryAddress.tag.

{
"requestId": "ag-gtr-RKID7rWPNxA5",
"invokeVaspCode": "YOUR_VASP_CODE",
"originatorVasp": "ORIGINATOR_VASP_CODE",
"beneficiaryVasp": "BENEFICIARY_VASP_CODE",
"callbackType": 10,
"callbackData": {
"requestId": "ag-gtr-RKID7rWPNxA5",
"verifyTargetType": 1,
"transactionInfo": {
"network": "AVAXC",
"txId": null
},
"beneficiaryAddress": {
"address": "0x0001326e6afe6b6d7c47aebc119e717b6c7ad5ec",
"tag": ""
},
"initiatorVasp": "INITIATOR_VASP"
}
}

Callback Request B: verifyTargetType = 2

If verifyTargetType = 2, you should look up your data by beneficiaryAddress.address,beneficiaryAddress.tag and transactionInfo.txId.

{
"requestId": "ag-gtr-RKID7rWPNxA5",
"invokeVaspCode": "YOUR_VASP_CODE",
"originatorVasp": "ORIGINATOR_VASP_CODE",
"beneficiaryVasp": "BENEFICIARY_VASP_CODE",
"callbackType": 10,
"callbackData": {
"requestId": "ag-gtr-RKID7rWPNxA5",
"verifyTargetType": 2,
"transactionInfo": {
"network": "AVAXC",
"txId": "0x9a0jklmnopqrstuvwx12345678901234567890123456"
},
"beneficiaryAddress": {
"address": "0x0001326e6afe6b6d7c47aebc119e717b6c7ad5ec",
"tag": ""
},
"initiatorVasp": "INITIATOR_VASP"
}
}

Response A: Found

If the address belongs to your system indeed, you can respond with verifyStatus=100000 and redirectVaspCode=null.

HTTP 200
{
"verifyStatus": 100000,
"verifyMessage": "",
"data": {
"redirectVaspCode": null
}
}

Response B: Not Found but can redirect

If the address doesn't belong to your VASP however it belongs to another entity under your brand, you can respond with verifyStatus=200017 and attach the VASP Code of that entity.

For example: your VASP as Axchange Japan received this callback to check the ownership of addressUSA. addressUSA doesn't belong to your system however you know that addressUSA belongs to Axchange USA which is another local entity of your brand Axchange Exchange operating in the US market.

Thus, you may respond verifyStatus=200017 and redirectVaspCode=VASP Code of Axchange USA

HTTP 200
{
"verifyStatus": 200017,
"verifyMessage": "address/tx exists, but wrong VASP",
"data": {
"redirectVaspCode": "xxxxxx"
}
}

Response C: Not Found

If the address doesn't belong to you, and you have no knowledge for its ownership, you can respond verifyStatus=100002.

HTTP 200
{
"verifyStatus": 100002,
"verifyMessage": "address is not found"
}