CodeVASPCodeVASP
Travel RuleAPI Reference03-Request-API

06-Virtual-Asset-Address-Search

A VASP who wants to transfer assets need to know which VASP owns the address (address + tag(optional)) of a virtual asset to which a user wants to transfer his or her asset by using this API in the first step of the entire process.

❗️This API works in a synchronous manner, providing an immediate response upon request.

Endpoint

POST /v1/code/VerifyAddress/{BeneficiaryVaspEntityId}

Request Parameters

Headers

NameTypeRequiredDescription
X-Code-Req-DatetimestringRequiredISO8601 UTC datetime
X-Code-Req-NoncestringRequiredRandom nonce
X-Code-Req-PubKeystringRequiredYour Public Key
X-Code-Req-Remote-PubKeystringRequiredBeneficiary Public Key
X-Code-Req-SignaturestringRequiredSignature
X-Request-OriginstringRequiredcode:{yourVaspEntityId}
acceptstringOptionalapplication/json
content-typestringRequiredapplication/json

Path Parameters

NameTypeRequiredDescription
BeneficiaryVaspEntityIdstringRequiredEntityID of the VASP which owns the address.

Body Parameters

NameTypeRequiredDescription
currencystringRequiredSymbol of the virtual asset (case insensitive).
payloadstringRequiredEncrypted ivms101 payload. Beneficiary.accountNumber is required.
addressstringOptionalWallet address (for interoperability).
tagstringOptionalTag or Memo (for interoperability).
networkstringOptionalNetwork name (for interoperability).

currency: This is a symbol of the virtual asset you want to transfer. (This is case insensitive.)


payload: Since only the wallet address is verified at this point as an encrypted IVMS101 object, it is not necessary to input the entire IVMS101 object. Thearray<accountNumber> within the 'Beneficiary' object is required, while beneficiaryPersons should be empty array.


address: Wallet address of the beneficiary. Since some VASPs integrated with other solutions may require this field, please refer to [12-Interoperability with Other Protocols] page.


tag: Include this if a Tag or Memo exists (e.g., XRP). Since some VASPs integrated with other solutions may require this field, please refer to [12-Interoperability with Other Protocols] page.


network: This is included to distinguish when a single coin exists on multiple networks. Since some VASPs integrated with other solutions may require this field, please refer to [12-Interoperability with Other Protocols] page.

Response

Fields

NameTypeDescription
resultstringVerification result (valid or invalid).
reasonTypestringReason code if invalid (e.g., NOT_FOUND_ADDRESS).
reasonMsgstringDetailed message if invalid.
beneficiaryVaspEntityIdstringEntity ID of the corresponding VASP.

result: This is a virtual asset address verification result.

-valid: This is a normal address

-invalid: This is the result of virtual asset address search. You can classify the details by the reasonType value.


reasonType: If the result field value is invalid, you need to add this field to send error details.

-NOT_FOUND_ADDRESS: This is a case where a virtual asset address cannot be found.

-NOT_SUPPORTED_SYMBOL: This is a currency symbol which cannot be traded.

-NOT_KYC_USER: This is a case where the owner did not process KYC verification.

-SANCTION_LIST: Virtual asset addresses or owners are subject to the sanction of the beneficiary VASP.

-LACK_OF_INFORMATION: This is a case where there is no the information necessary to make an asset transfer decision.

-UNKNOWN: This refers to other reasons.


reasonMsg: It defines a detailed message if invalid.


beneficiaryVaspEntityId: If there is a VASP that owns a virtual asset address to be looked up, this is the Entity ID of the corresponding VASP.

Examples

Request

curl --request POST \
     --url https://trapi-dev.codevasp.com/v1/code/VerifyAddress/codexchange \
     --header 'X-Code-Req-Datetime: 2024-03-04T15:10Z' \
     --header 'X-Code-Req-Nonce: 989166249' \
     --header 'X-Code-Req-PubKey: YourPubkey' \
     --header 'X-Code-Req-Remote-PubKey: beneficiaryPubkey' \
     --header 'X-Code-Req-Signature: Signature' \
     --header 'X-Request-Origin: code:yourVaspEntityId' \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
  "currency": "BTC",
  "payload": {
    "ivms101": {
      "Beneficiary": {
        "accountNumber": [
          "1KzHK8WMRHRCvRjUV5PFny3v6fqT3UAY5K"
        ]
      }
    }
  }
}'

Response

{
  "result": "invalid",
  "reasonType": "NOT_FOUND_ADDRESS",
  "reasonMsg": "",
  "beneficiaryVaspEntityId": "string"
}

On this page