Validation API

txValidate is an API call used for wallet identification and data collection. It is implemented as part of your front-end withdrawal screen and triggered after your customer inputs: 1) the destination wallet address, 2) the virtual asset type and 3) the amount.

The wallet identification works by leveraging our integrations with different blockchain analytics providers to send them the destination address and see if they are able to identify the VASP behind it.

Data collection is enabled by the "errors" that the API can return, showing which details about the beneficiary need to be collected from your customer.

Since txValidate only checks what beneficiary details are required by your and the beneficiary VASP's jurisdiction, we have another API that also checks the originator details against the same jurisdictions: txValidateFull. This API is covered at the end of this guide, under the section "Full validation".

🚧

Token

In order to not expose the accessToken, this call can be done using the customerToken.


Payload - txValidate

AttributeRequiredTypeDescription
transactionAssetYesstringAsset symbol (BTC,ETH)
destinationYesstringDestination Address
transactionAmountYesstringAmount in base unit of the asset (satoshi, wei, etc)
originatorVASPdidYesstring (commonDID) ^did:[a-zA-Z0-9]:._$This is the identifier assigned to your VASP
originatorEqualsBeneficiaryYesboolean"True" if the originator and beneficiary is the same person and you therefore do not need to collect any information. "False" if it is a third-party transfer.
beneficiaryVASPdidstring (commonDID) ^did:[a-zA-Z0-9]:._$This is the identifier assigned to the VASP the funds are being sent to
beneficiaryVASPnamestringBeneficiary VASP Name (you can use this or the beneficiaryVASPdid)
beneficiaryNamestringBeneficiary Name
beneficiaryAccountNumberstringBeneficiary Account Number
beneficiaryAddressobject (Address)The address details of the beneficiary
beneficiaryProofobject (OwnershipProof)Ownership Proof data
travelRuleBehaviorbooleanThis will also check if the transaction is a TRAVEL_RULE in the beneficiary VASP's jurisdiction

📘

travelRuleBehavior

If you want check if a transaction requires travel rule information according to the beneficiary VASP's jurisdiction, you can enable it by adding ["travelRuleBehavior":true].


Response

The response to txValidate contains the following fields:

"isValid": "true" or "false",
"type": "BELOW_THRESHOLD" or "TRAVELRULE" or "NON_CUSTODIAL",
"beneficiaryAddressType": "UNKNOWN" or "HOSTED" or "UNHOSTED",
"addressSource": "ADDRESS_GRAPH" or "NAME_OF_BLOCKCHAIN_ANALYTICS",
"beneficiaryVASPname": "VASP_NAME",
"errors": "MISSING_FIELDS_REQUIRED_BY_YOUR_JURISDICTION"
"warnings": "MISSING_FIELDS_REQUIRED_BY_COUNTERPARTY_JURISDICTION"

"isValid" will tell you if you have collected all the information needed for the travel rule data transfer. Once this field = "true", you can move on to the next step which is to transfer the information collected here to your back-end, add information about your own customer (the originator) and then perform txCreate (covered in stage 2 of your implementation).

"type" will tell you if the virtual asset value converted to FIAT value of the withdrawal request is above (=TRAVELRULE) or below (=BELOW_THRESHOLD) the threshold in your jurisdiction. If it is to an unhosted wallet which does not require travel rule information to be sent and only collected, it will say NON_CUSTODIAL.

TypeDescription
BELOW_THRESHOLDTravel rule is not required.
TRAVELRULETravel rule is required.
NON_CUSTODIALUnhosted wallet so travel rule is not required. However, depending on the jurisdiction, beneficiary name and wallet proof needs to be collected and saved.

📘

No beneficiary VASP details

If the beneficiary VASP isn't automatically identified or manually added to this call, it will assume that the transfer is to an unhosted wallet and the type will be "NON_CUSTODIAL".

"beneficiaryAddressType" will tell you if your blockchain analytics provider or internal address book has been able to identify the wallet address.

"addressSource" will tell you if the address was found in your internal address book or identified by the blockchain analytics provider.

"beneficiaryVASPname" will tell you the name of the VASP that has been identified as the owner of the wallet address. This name is used in a subsequent call to get its DID.

"errors/warnings" will tell you what information about the beneficiary you need to collect from the sender. If the beneficiary VASP is in a jurisdiction that requires more "beneficiary information" to be sent than yours, txValidate will return those as well in:

ErrorsMissing
beneficiaryNameMissingbeneficiary.....primaryIdentifier
beneficiaryAccountNumberMissingbeneficiary.....accountNumber
beneficiaryGeographicAddressMissingstreetName + buildingNumber OR addressLine
beneficiaryCountryOfResidenceMissingbeneficiary..... countryOfResidence
beneficiaryOwnershipProofMissingbeneficiaryProof: type + proof
beneficiaryNationalIdentificationNot implemented yet, but might come in the future as different jurisdictions add their own requirements.

Initial validation

This is an example of the initial call that you perform immediately after the sender has filled in the value, the type, and the address of the transfer:

{
    "transactionAsset": "ETH",
    "destination": "0x00000000219ab540356cbb839cbe05303d7705fa",
    "transactionAmount": "1000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "originatorEqualsBeneficiary": false
}

The response to this initial validation step will tell you two key points:

  • If the value of this transaction is above or below the travel rule threshold;
  • If the destination address was identified by blockchain analytics or your address book;

If the address was not automatically identified, you should get your customer to search and select the correct VASP from our directory by querying txSimpleVASPs with the VASP name they provide. This is covered in the final step of stage 1: Searching

{
    "isValid": false,
    "type": "NON_CUSTODIAL",
    "beneficiaryAddressType": "UNKNOWN",
    "addressSource": "UNKNOWN",
    "errors": [
        "beneficiaryNameMissing",
        "beneficiaryOwnershipProofMissing"
    ]
}

Regardless of what the response to your initial validation is, the next step should be that you ask your customer to say if they are sending the funds to themselves or not. If they are sending to themselves, you do not need to collect beneficiary information as beneficiary=originator and you should already have all the details you need for travel rule data transfer in your back-end.


Known VASP (address book)

In this request, we are passing a destination address that has been used before:

{
    "transactionAsset": "ETH",
    "destination": "bc1qxy2kgdygjrsqtzq2n0yrf1234p83kkfjhx0wlh",
    "transactionAmount": "10000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "originatorEqualsBeneficiary": false
}

In the response to a known address, we can see the name of the VASP to which we have sent a travel rule message before and they have confirmed that they control the destination address:

{
    "isValid": false,
    "type": "TRAVELRULE",
    "beneficiaryAddressType": "HOSTED",
    "addressSource": "ADDRESS_GRAPH",
    "beneficiaryVASPname": "Notabene VASP US",
    "errors": [
        "beneficiaryNameMissing",
        "beneficiaryAccountNumberMissing"
    ]
}

Since your address book was able to identify the VASP name, you can pass it as beneficiaryVASPname in txCreate (stage 2) when you have collected the remaining information so that isValid=true.


Known VASP (blockchain analytics)

In this call, we are using an address that we have never sent funds to before, but we are able to get the VASP name from our integration with your blockchain analytics provider:

{
    "transactionAsset": "ETH",
    "destination": "0xddfAbCdc4D8FfC6d5beaf154f18B778f892A0740",
    "transactionAmount": "10000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "originatorEqualsBeneficiary": false
}

In the response, we can see the name of the VASP which has been identified as the owner of the address:

{
    "isValid": false,
    "type": "TRAVELRULE",
    "beneficiaryAddressType": "HOSTED",
    "addressSource": "NAME_OF_YOUR_BLOCKCHAIN_ANALYTICS_PROVIDER",
    "beneficiaryVASPname": "Binance",
    "errors": [
        "beneficiaryNameMissing",
        "beneficiaryAccountNumberMissing"
    ]
}

Since blockchain analytics was able to identify the VASP name, you can pass it as beneficiaryVASPname in txCreate (stage 2) when you have collected the remaining information so that isValid=true.


Known VASP (manually selected)

{
    "isValid": false,
    "type": "TRAVELRULE",
    "beneficiaryAddressType": "UNKNOWN",
    "addressSource": "UNKNOWN",
    "errors": [
        "beneficiaryNameMissing",
        "beneficiaryOwnershipProofMissing"
    ]
}

If the VASP behind the destination address was not identified by your address book or blockchain analytics, we suggest that you ask your customer to select the correct VASP from our directory. You can do this by calling tfSimpleVASPs (this is covered in the next chapter) where you pass the name of the VASP provided by your customer in "q" and it will return all VASPs that matches that string. Your customer should then select the correct VASP from the list and continues with the withdrawal request:

Based on what the customer inputs into the search bar, the following API request is made:

https://api.notabene.dev/tf/simple/vasps?q=Hello&fields=did, name, verificationStatus, country, website, isRegulated&per_page=100

It will then return all the VASPs in our directory that matches that input:

{
    "vasps": [
        {
            "did": "did:ethr:0x46a7ed5813ce735387df2bfb245bd7722e0de992",
            "name": "HelloCrypto",
            "verificationStatus": "VERIFIED",
            "country": "AE",
            "website": "https://hellocrypto.invalid",
            "isRegulated": "YES"
        },
        {
            "did": "did:ethr:0x480ee33ef61466730182f33f7495865f4add2e4c",
            "name": "HelloNewVASP",
            "verificationStatus": null,
            "country": null,
            "website": null,
            "isRegulated": null
        }
    ],
    "pagination": {
        "page": 0,
        "per_page": 100,
        "total": 2,
        "order": "name:ASC"
    }
}

Your user then selects the correct VASP from the list and continues with the other travel rule requirements:

This information can then be passed once more to txValidate to make sure that everything is OK and you get isValid=true:

{
    "transactionAsset": "ETH",
    "destination": "0xddfAbCdc4D8FfC6d5beaf154f18B778f892A0740",
    "transactionAmount": "10000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "originatorEqualsBeneficiary": false,
    "travelRuleBehavior": true,
    "beneficiaryVASPdid": "did:ethr:0x46a7ed5813ce735387df2bfb245bd7722e0de992",
    "beneficiaryVASPname":"HelloCrypto",
    "beneficiaryName": "John Wayne",
    "beneficiaryAccountNumber": "0xddfAbCdc4D8FfC6d5beaf154f18B778f892A0740"
}

The response that confirms that all the data is present and you should push the collected data to the backend:

{
    "isValid": true,
    "type": "TRAVELRULE",
    "beneficiaryAddressType": "UNKNOWN",
    "addressSource": "UNKNOWN"
}

Unknown/unlisted VASP

If the VASP was not automatically identified by your blockchain analytics provider and couldn't be selected from our VASP directory by your customer, it will need to be created. The example below shows how to pass the name of the unknown VASP during the validation step:

{
    "transactionAsset": "ETH",
    "destination": "0x00000000219ab540356cbb839cbe05303d7705fa",
    "transactionAmount": "10000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "originatorEqualsBeneficiary": false,
    "beneficiaryVASPname": "Arkham Cryptonium",
    "beneficiaryName": "Bruce Wayne",
    "beneficiaryAccountNumber": "0x00000000219ab540356cbb839cbe05303d7705fa"
}

📘

Creating unknown VASP

Please note that this does not create the VASP in the directory, that is done in the txCreate API which is covered in stage 2.


Unhosted wallet

🚧

What does the regulation say?

VASPs are required to collect relevant beneficiary information on unhosted wallets from their own customer. Other countries will require VASPs to apply additional mitigation measures or limit transactions with unhosted wallets (such as verifying the identity of the unhosted wallet owner, or performing enhanced due diligence).

If you allow your customer to send virtual assets to an unhosted wallet, there might be spesific requirements from your regulator about what you need to do. For example, you might be required to collect proof of ownership or proof of control.

To collect this proof, you have a few options depending on whether your customer is sending the funds to themselves:

📘

1st party unhosted

  • Not allowed;
  • Cryptographic proof;
  • Self-declaration (check box);
  • Cryptographic proof OR self-declaration (in parallel, not as a fallback option/sequence);
  • Proof of control is not needed.

Or to someone else:

📘

3rd party unhosted

  • Not allowed;
  • Collect beneficiary name + check box.

In txValidate, the unhosted wallet proof is added in beneficiaryProof where "proof" can be the cryptographic signature or true/false/etc and "type" is a string that should identify how they provided that proof (Metamask/WalletConnect/Check-box/etc):

{
    "transactionAsset": "ETH",
    "destination": "0xddfAbCdc4D8FfC6d5beaf154f18B778f892A0740",
    "transactionAmount": "10000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "originatorEqualsBeneficiary": true,
    "beneficiaryProof": {
        "proof": "0x4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b915621c",
        "type": "signTypedData"
    }
}
{
    "transactionAsset": "ETH",
    "destination": "0xddfAbCdc4D8FfC6d5beaf154f18B778f892A0740",
    "transactionAmount": "10000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "originatorEqualsBeneficiary": true,
    "beneficiaryProof": {
        "proof": "checked",
        "type": "checkbox"
    }
}
{
    "transactionAsset": "ETH",
    "destination": "0xddfAbCdc4D8FfC6d5beaf154f18B778f892A0740",
    "transactionAmount": "10000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "originatorEqualsBeneficiary": true,
    "beneficiaryProof": {
        "proof": "Bruce Wayne",
        "type": "self_declaration_sign"
    }
}
{
    "transactionAsset": "ETH",
    "destination": "0xddfAbCdc4D8FfC6d5beaf154f18B778f892A0740",
    "transactionAmount": "10000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "originatorEqualsBeneficiary": true,
    "beneficiaryProof": {
        "type": "base64",
        "proof": "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MjIuMTY3OTcgNDEgWzYxMC44Mzk4NCA3NzcuODMyMDMgMCAyNzcuODMyMDMgMCAwIDU1Ni4xNTIzNCAwIDcyMi4xNjc5NyAwIDY2Ni45OTIxOSAwIDAgNjY2Ljk5MjE5IDYxMC44Mzk4NCAwIDAgOTQzLjg0NzY2IDAgNjY2Ljk5MjE5XSA2OCBbNTU2LjE1MjM0IDAgNTAwIDU1Ni4xNTIzNCA1NTYuMTUyMzQgMjc3LjgzMjAzIDU1Ni4xNTIzNCA1NTYuMTUyMzRdIDc2IDc5IDIyMi4xNjc5NyA4MCBbODMzLjAwNzgxXSA4MSA4NCA1NTYuMTUyMzQgODUgWzMzMy4wMDc4MSA1MDAgMjc3LjgzMjAzIDU1Ni4xNTIzNCA1MDAgNzIyLjE2Nzk3IDAgNTAwXV0KL0RXIDA+PgplbmRvYmoKMTQgMCBvYmoKPDwvRmlsdGVyIC9GbGF0ZURlY29kZQovTGVuZ3RoIDMzNj4+IHN0cmVhbQp4nF2S3WqEMBCF732KXG4vFo2/LIiwuF3woj/U9gHcZNwVagwxe+HbN+bYLTSg8M3MmZxkEtbNqVGDZeG7mURLlvWDkobm6W4EsQtdBxXwmMlB2I38X4ydDkInbpfZ0tiofgrKkrHww2Vnaxa2O8rpQk9B+GYkmUFd2e6rbh23d62/aSRlWRRUFZPUu04vnX7tRmKhl+0b6fKDXfZO81fxuWhisWcON2KSNOtOkOnUlYIycqti5dmtKiAl/+X5Jrv04tYZX5648iiKo8rTGVR74idPydGTC66UHkCoTFGZcNAzCD0z9HRyTwUIXTJ0SVNPOfeUIVccvPXNY/Hr+HFCjs14DK/Yk6MTL2AZDWMEYwTTLXhAELbSHLZy6FCZJXCHYIpryLcgDp5BntebV7hbb3x9GY9xirsxbpL++fgRrsMbFD1emJ70qlq/H7gysO8KZW5kc3RyZWFtCmVuZG9iago0IDAgb2JqCjw8L1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUwCi9CYXNlRm9udCAvQUFBQUFBK0FyaWFsTVQKL0VuY29kaW5nIC9JZGVudGl0eS1ICi9EZXNjZW5kYW50Rm9udHMgWzEzIDAgUl0KL1RvVW5pY29kZSAxNCAwIFI+PgplbmRvYmoKeHJlZgowIDE1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNSAwMDAwMCBuIAowMDAwMDA2OTE4IDAwMDAwIG4gCjAwMDAwMDAxMTAgMDAwMDAgbiAKMDAwMDAzMDQzNCAwMDAwMCBuIAowMDAwMDAwMTQ3IDAwMDAwIG4gCjAwMDAwMDAyMzMgMDAwMDAgbiAKMDAwMDAwMDY1NCAwMDAwMCBuIAowMDAwMDA1ODEwIDAwMDAwIG4gCjAwMDAwMDcxNTkgMDAwMDAgbiAKMDAwMDAwNzIxNCAwMDAwMCBuIAowMDAwMDA3MjYyIDAwMDAwIG4gCjAwMDAwMjkxOTMgMDAwMDAgbiAKMDAwMDAyOTQyOSAwMDAwMCBuIAowMDAwMDMwMDI3IDAwMDAwIG4gCnRyYWlsZXIKPDwvU2l6ZSAxNQovUm9vdCAxMCAwIFIKL0luZm8gMSAwIFI+PgpzdGFydHhyZWYKMzA1NzMKJSVFT0Y="

    }
}
{
    "transactionAsset": "ETH",
    "destination": "0xddfAbCdc4D8FfC6d5beaf154f18B778f892A0740",
    "transactionAmount": "10000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "originatorEqualsBeneficiary": true,
    "beneficiaryProof": {
        "proof": "N/A",
        "type": "N/A"
    }
}

In txCreate, the proof is added in the same way as txValidate:

{
    "transactionAsset": "ETH",
    "transactionAmount": "1000000000000000000000",
    "originatorVASPdid": "did:ethr:0x940a4b2a0932733b842e4aa906761bb3d3bd8148",
    "transactionBlockchainInfo": {
        "txHash": "",
        "origin": "0xa40dfee99e1c85dc97fdc594b16a460717838703",
        "destination": "0x00000000219ab540356cbb839cbe05303d7705fa"
    },
    "originator": {
        "originatorPersons": [
            {
                "naturalPerson": {
                    "name": [
                        {
                            "nameIdentifier": [
                                {
                                    "primaryIdentifier": "Bruce",
                                    "secondaryIdentifier": "Wayne"
                                }
                            ]
                        }
                    ],
                    "geographicAddress": [
                        {
                            "addressType": "HOME",
                            "streetName": "132 Test Street",
                            "city": "Milan",
                            "country": "IT",
                            "buildingNumber": "231",
                            "postCode": "M4R1V2"
                        }
                    ]
                }
            }
        ],
        "accountNumber": [
            "0xa40dfee99e1c85dc97fdc594b16a460717838703"
        ]
    },
    "beneficiary": {
        "beneficiaryPersons": [
            {
                "naturalPerson": {
                    "name": [
                        {
                            "nameIdentifier": [
                                {
                                    "primaryIdentifier": "Bruce",
                                    "secondaryIdentifier": "Wayne"
                                }
                            ]
                        }
                    ]
                   }
                }
            }
        ],
        "accountNumber": [
            "0x00000000219ab540356cbb839cbe05303d7705fa"
        ]
        
    },
    "beneficiaryProof": {
        "proof": "0xb4acba180b23dce8bad7cb49b26d34f580cda646280a2cec56fc6854da6c6fec57057132e26654178759f66e0b06769daff4d952e932c2da76b9a6c3cca00fb71c",
        "type": "personal_sign"
    },
}

In our widget, we use integrations into WalletConnect and Metamask to allow users to sign. You can click on the links to view their documentation if you wish to replicate it on your side.

The video below shows how the integration in our widget work with those two integrations:

Verifying proof

If you are using integrations into Metamask and WalletConnect, you can easily verify the proof since you know the content of the message and the public key

To verify the proof, you can use the following resourcehttps://docs.ethers.io/v5/api/utils/signing-key/:

ethers.utils.verifyMessage( message , signature ) ⇒ string\< Address >source

This returns the address that signed message producing signature. The signature may have a non-canonical v (i.e. does not need to be 27 or 28), in which case it will be normalized to compute the recoveryParam which will then be used to compute the address; this allows systems which use the v to encode additional data (such as EIP-155) to be used since the v parameter is still completely non-ambiguous.


Final validation

After reacting to the response of the initial txValidate request and collecting the necessary information about the beneficiary, you can perform a final request to confirm that you have everything needed:

{
    "transactionAsset": "ETH",
    "destination": "bc1qxy2kgdygjrsqtzq2n0yrf1234p83kkfjhx0wlh",
    "transactionAmount": "10000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "originatorEqualsBeneficiary": false,
    "beneficiaryVASPdid": "did:ethr:0x47463999eb42dc2aaacb29624c512603221227a1",
    "beneficiaryName": "Bruce Wayne",
    "beneficiaryAccountNumber": "bc1qxy2kgdygjrsqtzq2n0yrf1234p83kkfjhx0wlh"
}

If you have all the information needed, the response will say isValid=true:

{
    "isValid": true,
    "type": "TRAVELRULE",
    "beneficiaryAddressType": "HOSTED",
    "addressSource": "ADDRESS_GRAPH",
    "beneficiaryVASPname": "Notabene VASP US"
}

Once isValid=true, you should move the information you just used in this final validation request to your back-end, add information about your customer (the originator) and create the actual travel rule message with txCreate.


Using txValidate data in txCreate

The data you collect in txValidate cannot be used directly in txCreate as it is not in the IVMS101 structure. Below we will show an example of txValidate data converted into a txCreate payload.

Payload that returned isValid=true in the response:

{
    "transactionAsset": "BTC",
    "destination": "174nKd6adZPv7hhNc4U7yZ4N5QG7hbpU5g",
    "transactionAmount": "12000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "originatorEqualsBeneficiary": false,
    "travelRuleBehavior": true,
    "beneficiaryVASPdid": "did:ethr:0x47463999eb42dc2aaacb29624c512603221227a1",
    "beneficiaryVASPname": "",
    "beneficiaryName": "Bruce Wayne",
    "beneficiaryAccountNumber": "174nKd6adZPv7hhNc4U7yZ4N5QG7hbpU5g",
    "beneficiaryAddress": {
                            "addressLine": ["Wayne Manor, Gotham City", "New York, USA"]
                        }
}

Payload converted into valid IVMS101 structure:

  "originator": { ...
                },
"beneficiary": {
        "beneficiaryPersons": [
            {
                "naturalPerson": {
                    "name": [
                        {
                            "nameIdentifier": [
                                {
                                    "primaryIdentifier": "Wayne",
                                    "secondaryIdentifier": "Bruce"
                                }
                            ]
                        }
                    ],
                    "geographicAddress": [
                        {
                          "addressLine": ["Wayne Manor, Gotham City", "New York, USA"]
                        }
                    ]
                }
            }
        ],
        "accountNumber": [
            "174nKd6adZPv7hhNc4U7yZ4N5QG7hbpU5g"
        ]
    },
    "beneficiaryProof": {
        "type": "personal_sign",
        "proof": "0x4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b915621c"

    }

Complete payload validation

After collecting the beneficiary information from your frontend and getting the originator information, you can use txValidateFull to confirm that all the information needed in txCreate is present.

🚧

Token

Since this API is meant to be called from your back-end, it uses the accessToken

Payload - txValidateFull

AttributeRequiredTypeDescription
transactionAssetYesstring
transactionAmountYesstring
originatorDidstring (common_DID)
beneficiaryDidstring (common_DID)
originatorVASPdidYesstring (common_DID)
beneficiaryVASPdidstring (common_DID)
beneficiaryVASPnamestring
transactionBlockchainInfoYesobject (TransactionBlockchainInfo)
originator object (ivms101_Originator)
beneficiaryobject (ivms101_Beneficiary)
encryptedstring
protocolstring (tr_TravelRuleProtocol)
notificationEmailstring
skipBeneficiaryDataValidationboolean
travelRuleBehaviorbooleanThis will also check if the transaction is a TRAVEL_RULE in the beneficiary VASP's jurisdiction
originatorProofobject (OwnershipProof)
beneficiaryProofobject (OwnershipProof)
piiobject (PII_IVMS)

📘

travelRuleBehavior

If you want check if a transaction requires travel rule information according to the beneficiary VASP's jurisdiction, you can enable it by adding ["travelRuleBehavior":true].

The content of this call is similar to txValidate except it will also check your originator information and it follows the same format as txCreate:

{
    "transactionAsset": "ETH",
    "transactionAmount": "10000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "beneficiaryVASPdid": "did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9",
    "transactionBlockchainInfo": {
        "txHash": "",
        "origin": "5342b5234hioutewry87y78sdfghy783t4t34",
        "destination": "5643jn5h34y2g7hg42jt24j890y345gfgh65"
    }
}

In "warnings", you can see what the beneficiary VASPs jurisdiction requires in addition to what is required by yours (errors):

{
    "isValid": false,
    "type": "TRAVELRULE",
    "beneficiaryAddressType": "UNKNOWN",
    "addressSource": "UNKNOWN",
    "errors": [
        "originatorNameMissing",
        "originatorGeographicAddressMissing",
        "beneficiaryNameMissing",
        "originatorAccountNumberMissing",
        "beneficiaryAccountNumberMissing"
    ],
    "warnings": [
        "OR [",
        "originatorNationalIdentificationMissing",
        "originatorDateAndPlaceOfBirthMissing",
        "]"
    ]
}

All the beneficiary-related errors/warnings are covered at the beginning of txValidate, so we will only add descriptions of the originator warnings here:

ErrorsMissing
originatorNameMissingoriginator.....primaryIdentifier
originatorAccountNumberMissingoriginator.....accountNumber
originatorGeographicAddressMissingstreetName + buildingNumber OR addressLine
originatorCountryOfResidenceMissingoriginator..... countryOfResidence
originatorNationalIdentificationMissingnationalIdentifier + nationalIdentifierType
originatorCustomerIdentificationMissingoriginator..... customerIdentification
originatorDateAndPlaceOfBirthMissingdateOfBirth + placeOfBirth

📘

Why include more information?

If you do not provide information that is required by your counterparty VASP's jurisdiction, the travel rule transaction might be rejected.

Full validation

{
    "transactionAsset": "ETH",
    "transactionAmount": "10000000000000000000",
    "originatorVASPdid": "{{vaspDID}}",
    "beneficiaryVASPdid": "did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9",
    "transactionBlockchainInfo": {
        "txHash": "",
        "origin": "5342b5234hioutewry87y78sdfghy783t4t34",
        "destination": "5643jn5h34y2g7hg42jt24j890y345gfgh65"
    },
    "originator": {
        "originatorPersons": [
            {
                "naturalPerson": {
                    "name": [
                        {
                            "nameIdentifier": [
                                {
                                    "primaryIdentifier": "Wunderland",
                                    "secondaryIdentifier": "Alice"
                                }
                            ]
                        }
                    ],
                    "geographicAddress": [
                        {
                            "streetName": "Robinson road",
                            "townName": "Singapore",
                            "country": "SG",
                            "buildingNumber": "71",
                            "postCode": "123456"
                        }
                    ],
                    "nationalIdentification": {
                        "countryOfIssue": "SG",
                        "nationalIdentifier": "987654321",
                        "nationalIdentifierType": "DRLC"
                    }
                }
            }
        ],
        "accountNumber": [
            "5342b5234hioutewry87y78sdfghy783t4t34"
        ]
    },
    "beneficiary": {
        "beneficiaryPersons": [
            {
                "naturalPerson": {
                    "name": [
                        {
                            "nameIdentifier": [
                                {
                                    "primaryIdentifier": "Bobson",
                                    "secondaryIdentifier": "Bob"
                                }
                            ]
                        }
                    ]
                }
            }
        ],
        "accountNumber": [
            "5643jn5h34y2g7hg42jt24j890y345gfgh65"
        ]
    }
}

If all the information is present, the response will have isValid=true and you can use the same payload in txCreate to send the travel rule message:

{
    "isValid": true,
    "type": "TRAVELRULE",
    "beneficiaryAddressType": "UNKNOWN",
    "addressSource": "UNKNOWN",
    "beneficiaryVASPname": "Notabene VASP SG",
    "errors": [],
    "warnings": [
        "optional-originatorCountryOfResidence"
    ]
}

What’s Next

To enable your users to search in our VASP directory if blockchain analytics isn't able to identify the VASP, let's enable searching: