Sending travel rule messages
Originating VASPs must transmit mandated data to the Beneficiary VASP (if applicable) immediately and securely, ensuring that only those parties processing the transfer have access to the information.
After collecting all the necessary information using the widget or validation API, plus the DID of the VASP your customer is sending the value transfer to, you are ready to create a travel rule transaction by using txCreate.
Token
This call uses the accessToken.
Payload - txCreate
Attribute | Required | Type | Description |
---|---|---|---|
transactionAsset | Yes | string | Asset symbol (BTC,ETH) |
transactionAmount | Yes | string | Amount in base unit of the asset (satoshi, wei, etc) |
originatorDid | string (common_DID) | ||
beneficiaryDid | string (common_DID) | ||
originatorVASPdid | Yes | string (common_DID) | |
beneficiaryVASPdid | string (common_DID) | ||
beneficiaryVASPname | string | Beneficiary VASP Name | |
transactionBlockchainInfo | object (TransactionBlockchainInfo) | Information about the transaction on the blockchain | |
originator | object (ivms101_Originator) | The originator is defined in Section 1.1 as the account holder who allows the VA transfer from that account or, where there is no account, the natural or legal person that places the order with the originating VASP to perform the VA transfer. | |
beneficiary | object (ivms101_Beneficiary) | The beneficiary is defined in Section 1.1 as the natural or legal person or legal arrangement who is identified by the originator as the receiver of the requested VA transfer. | |
encrypted | string | Encrypted Personal Identificable Information (obscure schema-less value) | |
protocol | string (tr_TravelRuleProtocol) | Enum: "TRLight" "TRP" "OpenVASP" | |
notificationEmail | string | Beneficiary VASP Notification Email | |
skipBeneficiaryDataValidation | boolean | Disable beneficiary data validation (opportunistic compliance) | |
travelRuleBehavior | boolean | 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]. | |
originatorProof | object (OwnershipProof) | Ownership Proof data | |
beneficiaryProof | object (OwnershipProof) | Ownership Proof data | |
pii | object (PII_IVMS) |
Polymorphic asset field
We support three different ways of providing the transactionAsset in txCreate:
Format 1 - using Notabene coin standard: "asset": "USDC-SOL"
{
"transactionAsset": "USDC-SOL",
"transactionAmount": "1700000000000000000",
"originatorVASPdid": "{{vaspDID}}",
"beneficiaryVASPdid": "{{vaspDIDee}}",
"transactionBlockchainInfo": {
"origin": "{{$randomBitcoin}}",
"destination": "{{$randomBitcoin}}"
},
Format 2 - using Coingeko API ID + the network: "asset": { "coingeckoId": "usd-coin", "network": "solana" }
{
"transactionAsset":
{
"coingeckoId": "usd-coin",
"network": "solana"
},
"transactionAmount": "1700000000000000000",
"originatorVASPdid": "{{vaspDID}}",
"travelRuleBehavior": false,
"beneficiaryVASPdid": "{{vaspDIDee}}",
"beneficiaryVASPname":"",
"transactionBlockchainInfo": {
"origin": "{{$randomBitcoin}}",
"destination": "{{$randomBitcoin}}"
},
Format 3 - using the CAIP19 standard: "asset": { "caip19": "solana:4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" }
{
"transactionAsset":
{
"caip19": "solana:4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
},
"transactionAmount": "1700000000000000000",
"originatorVASPdid": "{{vaspDID}}",
"travelRuleBehavior": false,
"beneficiaryVASPdid": "{{vaspDIDee}}",
"beneficiaryVASPname":"",
"transactionBlockchainInfo": {
"origin": "{{$randomBitcoin}}",
"destination": "{{$randomBitcoin}}"
},
Preparing the content
Use the data you had in your final txValidate call that resulted in isValid=true, append the information about your customer together with the other transaction details like destination, asset type, amount, etc. Once everything is ready, call txCreate and we will handle the rest.
Things to check before creating the travel rule message:
- Make sure you use the correct number of decimal points in the amount.
- Is it a known or unknown VASP? If it is known, do you have the DID? If it is unknown, do you have the name?
- Is it to an unhosted wallet, and if so, is it a first or third party? If so, have you collected the proof?
- Are you going to also comply with the jurisdictional requirements of the beneficiary VASP when sending the travel rule message? Then you need txValidateFull
- Have you already executed the value transfer on the blockchain? If so, you can add the txhash already.
- Is the value transfer going to or from a natural or legal person?
Non-Latin characters
According to the IVMS101 standard:
" Data shall be submitted using UTF-8 character encoding. Unless otherwise specified, data shall be represented in Latin script (i.e. A to Z, a to z) and Arabic numerals (i.e. 1234567890)".
Where data is in a national language that does not use Latin script, it must be either:
• Transliterated into Latin characters; or
• Translated into a language to which it may be more commonly known to the international community.Some fields support national language when the elements are prefixed ‘local’.
You can see a list of scripts and which standard to use for transliteration on page 50-51.
Creating the travel rule transaction
{
"transactionAsset": "BTC",
"transactionAmount": "72000000000",
"originatorVASPdid": "{{vaspDID}}",
"beneficiaryVASPdid": "did:ethr:0x270d4f239359471f1d1c80781a53cf8105f7d08f",
"transactionBlockchainInfo": {
"txHash": "",
"origin": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wl4",
"destination": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh"
},
"originator": {
"originatorPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "Banner",
"secondaryIdentifier": "Bruce"
}
]
}
],
"geographicAddress": [
{
"addressType": "HOME",
"streetName": "132 Test Street",
"city": "Milan",
"country": "IT",
"buildingNumber": "231",
"postCode": "M4R1V2"
}
],
"nationalIdentification": {
"countryOfIssue": "IT",
"nationalIdentifier": "123EE22",
"nationalIdentifierType": "DRLC"
}
}
}
],
"accountNumber": [
"0xa40dfee99e1c85dc97fdc594b16a460717838703"
]
},
"beneficiary": {
"beneficiaryPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "Wayne",
"secondaryIdentifier": "Bruce"
}
]
}
]
}
}
],
"accountNumber": [
"0x00000000219ab540356cbb839cbe05303d7705fa"
]
}
}
The response will contain similar information as the request, but also a unique ID that identifies the transaction and its status:
{
"id": "61e5ca82-02c8-477a-abf9-72b32c832a27",
"status": "SENT",
"transactionType": "TRAVELRULE",
"transactionAsset": "BTC",
"transactionAmount": "72000000000",
"chargedQuantity": 8442269452,
"amountInLocalCurrency": {
"currency": "SGD",
"amountInLocalCurrency": 24114999650.653618},
"originatorDid": "did:ethr:0x3b27b7607f502a28dff6fcf5a64664eee13a2c4a",
"beneficiaryDid": "did:ethr:0xc9714508a64d880d477a5feeb4c2044295af13d1",
"isTest": null,
"originatorVASPdid": "did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9",
"beneficiaryVASPdid": "did:ethr:0x270d4f239359471f1d1c80781a53cf8105f7d08f",
"transactionBlockchainInfo": {
"txHash": "",
"origin": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wl4",
"destination": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh"
},
"ivms101": {
"originator": {
"accountNumber": [
"0xa40dfee99e1c85dc97fdc594b16a460717838703"
],
"originatorPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "Banner",
"secondaryIdentifier": "Bruce"
}
]
}
],
"nationalIdentification": {
"countryOfIssue": "LB",
"nationalIdentifier": "750",
"nationalIdentifierType": "DRLC"
},
"dateAndPlaceOfBirth": {
"dateOfBirth": "1999-01-01",
"placeOfBirth": "KG"
},
"geographicAddress": [
{
"streetName": "Silas Causeway",
"townName": "Escondido",
"country": "LU",
"buildingNumber": "666",
"postCode": "921"
}
]
}
}
]
},
"beneficiary": {
"accountNumber": [
"0x00000000219ab540356cbb839cbe05303d7705fa"
],
"beneficiaryPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "Wayne",
"secondaryIdentifier": "Bruce"
}
]
}
]
}
}
]
},
"originatingVASP": {
"originatingVASP": {
"legalPerson": {
"name": {
"nameIdentifier": [
{
"legalPersonName": "Notabene VASP SG",
"legalPersonNameIdentifierType": "LEGL"
}
]
}
}
}
},
"beneficiaryVASP": {
"beneficiaryVASP": {
"legalPerson": {
"name": {
"nameIdentifier": [
{
"legalPersonName": "Notabene VASP CA",
"legalPersonNameIdentifierType": "LEGL"
}
]
}
}
}
}
},
"ivms101Encrypted": null,
"protocol": "TRLight",
"protocolData": {
"trLightData": {
"notificationEmails": [],
"accessLinks": []
}
},
"originatorProof": null,
"beneficiaryProof": null,
"createdAt": "2022-08-29T10:08:03.266Z",
"createdBy": "did:ethr:0xefbb14b73473ccfd610543af4b1c8fda027c57bf",
"updatedAt": "2022-08-29T10:08:04.648Z",
"updatedBy": "did:ethr:0xefbb14b73473ccfd610543af4b1c8fda027c57bf",
"pii": {
"beneficiary": {
"accountNumber": [
"QmfBQKLu1USdGAV2Jf411rvoxh7VXfMZgjUHnmceWxejjP"
],
"beneficiaryPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "QmNNnUo6mSV27iP1zfLof4picURY8oZ2FWzcgvr8wKa7r4",
"secondaryIdentifier": "QmVB19JcjU9nkjjeoWJNYLYtht9Mb4CB2yXAfsNmiHbci3"
}
]
}
]
}
}
]
},
"beneficiaryVASP": {
"beneficiaryVASP": {
"legalPerson": {
"name": {
"nameIdentifier": [
{
"legalPersonName": "QmeuGk6jqg8DPLzQZ26nWpKZhAQmyGBDF9t9yHEt3AWdZt",
"legalPersonNameIdentifierType": "QmWraeER8NudJbsujNCsVvmjKjnqsYNzDeFTpVEXTHnv6W"
}
]
}
}
}
},
"originatingVASP": {
"originatingVASP": {
"legalPerson": {
"name": {
"nameIdentifier": [
{
"legalPersonName": "QmY7xi77fVkHiyDeCSDFmu685xyxcJpo13MSiuG1LdjzSz",
"legalPersonNameIdentifierType": "QmcQoATzddE2x7dymvwfRNXUJoBrwvL7zcYmBT1eQFjo8R"
}
]
}
}
}
}
},
"pii_url": "https://pii.notabene.dev/",
"actions": [
{
"hash": "7f8095a36a93c4ffe9405d499b8d51f21362657a535f3004d5bd29c9b33a9d89fb25f7ad5e079ee1cb605c4d96b487f781d679f72064a1a6dd016a9c3216f5e4",
"issuerDID": "did:ethr:0xefbb14b73473ccfd610543af4b1c8fda027c57bf",
"action": "create",
"actionData": "{\"transactionAsset\":\"BTC\",\"transactionAmount\":\"42494894443185\",\"originatorVASPdid\":\"did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9\",\"travelRuleBehavior\":true,\"beneficiaryVASPdid\":\"did:ethr:0x75215d5bfc19e1a4f0301b40abcf542aa6de8613\",\"beneficiaryVASPname\":\"\",\"transactionBlockchainInfo\":{\"txHash\":\"\",\"origin\":\"1qbP75q6vcEYeNgMAfZdqPiHUrVU8bzcP\",\"destination\":\"1gRySq9Kptke2zpjEguAt1TSxZEnrPM\"},\"originatorDid\":\"did:ethr:0x3b27b7607f502a28dff6fcf5a64664eee13a2c4a\",\"beneficiaryDid\":\"did:ethr:0xc9714508a64d880d477a5feeb4c2044295af13d1\",\"originator\":{\"accountNumber\":[\"47412027\"],\"originatorPersons\":[{\"naturalPerson\":{\"name\":[{\"nameIdentifier\":[{\"primaryIdentifier\":\"Raynor\",\"secondaryIdentifier\":\"Percival\"}]}],\"nationalIdentification\":{\"countryOfIssue\":\"LB\",\"nationalIdentifier\":\"750\",\"nationalIdentifierType\":\"DRLC\"},\"dateAndPlaceOfBirth\":{\"dateOfBirth\":\"1999-01-01\",\"placeOfBirth\":\"KG\"},\"geographicAddress\":[{\"streetName\":\"Silas Causeway\",\"townName\":\"Escondido\",\"country\":\"LU\",\"buildingNumber\":\"666\",\"postCode\":\"921\"}]}}]},\"beneficiary\":{\"accountNumber\":[\"53983380\"],\"beneficiaryPersons\":[{\"naturalPerson\":{\"name\":[{\"nameIdentifier\":[{\"primaryIdentifier\":\"Cormier\",\"secondaryIdentifier\":\"Ford\"}]}]}}]},\"pii\":{\"originator\":{\"accountNumber\":[\"QmcuBuwnGEwitSK387zu15BQk2Qty3EJQmFvkzuX27jYXq\"],\"originatorPersons\":[{\"naturalPerson\":{\"name\":[{\"nameIdentifier\":[{\"primaryIdentifier\":\"QmV4uxycBPUX8ia6QNL4qTe4bpiSL5y2tsTY93qofxdH5A\",\"secondaryIdentifier\":\"QmWLciuiXeo24zFCUkkMLo1t1ps7p8dEmxPxRA5JsbdFNz\"}]}],\"nationalIdentification\":{\"countryOfIssue\":\"QmQdfpTASfgUJnoSxC6Nh1T2xo2SYzr2qDSGg4NitEgfg1\",\"nationalIdentifier\":\"Qma9h2AdiSNXq6vGTMzi3oFWFE4b5R9bHYfXgYqXfqLvTc\",\"nationalIdentifierType\":\"QmcQUhQf6zJL1nDC7t31BHQV7mPJQ5gEK91vRzdJotk93o\"},\"dateAndPlaceOfBirth\":{\"dateOfBirth\":\"QmPraQhEG2j25J6FVMQUn4jc6vHfBwc6hjhNgWcj4YAJ7q\",\"placeOfBirth\":\"QmctmUNA5nBdsfZVsjZdU9F6tNpt2xKFS4PmwrQ44w2zCL\"},\"geographicAddress\":[{\"streetName\":\"QmPyx3oPifc3sECzfLJMuPSPYfVqWA9SrNrLyCW9B2SMzs\",\"townName\":\"QmVsfgVYxKWg4PWWWqY5VkSptLRKwb5GnUvJzYPSJ6UdnD\",\"country\":\"QmXR3EorYgVDpXqiNAUKua4pq1bV9s7ErojKFz47WrFsKf\",\"buildingNumber\":\"QmWUN1KzzoXvYk9pfgStB7MckU2H9dJhHhZ8Mv1dxYm5uG\",\"postCode\":\"QmcBtXTnMgKkmWU5BA8wRMS5fDR6okvuzTp9mrgbr55Dzu\"}]}}]},\"beneficiary\":{\"accountNumber\":[\"QmfBQKLu1USdGAV2Jf411rvoxh7VXfMZgjUHnmceWxejjP\"],\"beneficiaryPersons\":[{\"naturalPerson\":{\"name\":[{\"nameIdentifier\":[{\"primaryIdentifier\":\"QmNNnUo6mSV27iP1zfLof4picURY8oZ2FWzcgvr8wKa7r4\",\"secondaryIdentifier\":\"QmVB19JcjU9nkjjeoWJNYLYtht9Mb4CB2yXAfsNmiHbci3\"}]}]}}]},\"originatingVASP\":{\"originatingVASP\":{\"legalPerson\":{\"name\":{\"nameIdentifier\":[{\"legalPersonName\":\"QmY7xi77fVkHiyDeCSDFmu685xyxcJpo13MSiuG1LdjzSz\",\"legalPersonNameIdentifierType\":\"QmcQoATzddE2x7dymvwfRNXUJoBrwvL7zcYmBT1eQFjo8R\"}]}}}},\"beneficiaryVASP\":{\"beneficiaryVASP\":{\"legalPerson\":{\"name\":{\"nameIdentifier\":[{\"legalPersonName\":\"QmeuGk6jqg8DPLzQZ26nWpKZhAQmyGBDF9t9yHEt3AWdZt\",\"legalPersonNameIdentifierType\":\"QmWraeER8NudJbsujNCsVvmjKjnqsYNzDeFTpVEXTHnv6W\"}]}}}}}}",
"createdAt": "2022-08-29T10:08:03.279Z",
"createdBy": "did:ethr:0xefbb14b73473ccfd610543af4b1c8fda027c57bf"
},
{
"hash": "dd4c3c1f98d575979e499106ab70b90781332a166f72f7fb9bb274738d10f645eb975c01630014983c9d5376fa2d18a1881d8e2b277e25340ca40b2eba0b977c",
"issuerDID": "did:ethr:0xefbb14b73473ccfd610543af4b1c8fda027c57bf",
"action": "approve",
"actionData": null,
"createdAt": "2022-08-29T10:08:04.655Z",
"createdBy": "did:ethr:0xefbb14b73473ccfd610543af4b1c8fda027c57bf"
}
]
}
Unhosted wallet DD
When funds are sent to or received from a wallet that the customer identifies as their own, verify that the wallet address is effectively controlled by the customer;
When funds are sent to or received from a wallet that the customer identifies as belonging to a third party, verify the identity of that third party.First party unhosted --> cryptographic proof of self-declaration
Third-party unhosted --> self-declaration from the originatorSee more about the proof here
Encrypted response
We will remove the unencrypted PII from the response once you have implemented the decryption flow. Then the repsponse will be encrypted only:
{
"id": "261e697e-d39a-4bf1-8dea-d31d570d1d32",
"status": "NEW",
"transactionType": "TRAVELRULE",
"transactionAsset": "BTC",
"transactionAmount": "140884566",
"chargedQuantity": 33654,
"amountInLocalCurrency": {
"currency": "SGD",
"amountInLocalCurrency": 46466.54755812
},
"originatorDid": "did:ethr:0x6d58f4bf46e4ac48702fb6bc170f68019575183a",
"beneficiaryDid": "did:ethr:0xa001bef7aeebead93d160225ecb47df90ce453c3",
"showToBeneficiary": false,
"originatorVASPdid": "did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9",
"beneficiaryVASPdid": "did:ethr:0x270d4f239359471f1d1c80781a53cf8105f7d08f",
"transactionBlockchainInfo": {
"txHash": "",
"origin": "1LDWQhAeMYLgWa8DybvN8KbCq9rMAhiHdk",
"destination": "1wnwhwq2R5HhBpnJrqscjDJu42q"
},
"ivms101Encrypted": null,
"originatorProof": null,
"beneficiaryProof": null,
"createdBy": "did:ethr:0xefbb14b73473ccfd610543af4b1c8fda027c57bf",
"updatedBy": "did:ethr:0xefbb14b73473ccfd610543af4b1c8fda027c57bf",
"pii": {
"originator": {
"accountNumber": [
"QmdKzEM9vzhg2hvy21DDw43Wj9JyGisiCmJQe1mx2gbM1n"
],
"originatorPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "Qmdpwwa5ynXtw61nVjeE3YyZRq9BMLN8ZL3krPbwGc4AsY",
"secondaryIdentifier": "QmP9hMVJyTJvaW5TzZ9DRmssCjX9cQsFfDyKVwHQQ4b4Xc"
}
]
}
],
"nationalIdentification": {
"countryOfIssue": "QmeCAS15h7jep5jWQ9ZsCdptA4X3ntZCpsjNJ83J9LHyHD",
"nationalIdentifier": "QmZvhGajtf4wWJNSn2AXYmsi6K7eoFep2RFwqTWSonetan",
"nationalIdentifierType": "QmY5KcvoHF2ADxh44DZMFk55Ku61xdzoDdd4s88HowoW3L"
},
"dateAndPlaceOfBirth": {
"dateOfBirth": "QmTkEDjsoa6uniMaoiWDga6VCZ4j9xCodj68xi54DC6jF9",
"placeOfBirth": "QmUQJs6m5jfuwjJMAQvrMnGqYXaYbu5cJFiH2Dvc8GjcdR"
},
"geographicAddress": [
{
"streetName": "QmYGKSd5knHzmGUX8afXgunmNyTS7twTGB3q2xdFYawmF1",
"city": "QmW7JJaSG8EFqdfSSKKkzU3p4HzqVYXo5Ju2ArQyXd1g8h",
"country": "QmNjsXDjGfhRD1b1MbX1nHzMNcgdpzBQYSp1VfaboACcWZ",
"buildingNumber": "QmVozUtjU8BGXGng28ax5iQbqrW6DfdTgmqFDAJd613bLE",
"postCode": "QmY2czKxHEAP3FHNyq9w9NGssf7NVUndnM7K6y1eEqe9U3"
}
]
}
}
]
},
"beneficiary": {
"accountNumber": [
"QmP9eDGd4efEKJorfAAFAmDDJ5SL4nSusH3E4h39pwR2rc"
],
"beneficiaryPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "QmXF6yAEaKbmWmNga1spz7neUPd3jQwdjgsQ86v4wTkBnn",
"secondaryIdentifier": "QmY2DpQe47qxySEofJJxx57SM2GPdGhx8VByUu667d7B7s"
}
]
}
]
}
}
]
},
"originatingVASP": {
"originatingVASP": {
"legalPerson": {
"name": {
"nameIdentifier": [
{
"legalPersonName": "QmSfHiyLKuEsZBtsijTYzb2a6NCKBNgqeDapbB6Ash12WA",
"legalPersonNameIdentifierType": "QmerGy8FeEr7aWMRo8ADcHCz4LekRdaddwCLjgMXa1bm7Y"
}
]
}
}
}
},
"beneficiaryVASP": {
"beneficiaryVASP": {
"legalPerson": {
"name": {
"nameIdentifier": [
{
"legalPersonName": "QmeduqtN7Tj3KY2aY4PEwVhFHg8DSkeWDB5boXuCwesgzM",
"legalPersonNameIdentifierType": "QmcbNYgtbjSS9gH9MQxPhWRpsgo7csDWKwVY68KmQNLKGJ"
}
]
}
}
}
}
},
"pii_url": "https://pii.notabene.dev/",
"protocol": "TRLight",
"protocolData": {
"trLightData": {
"notificationEmails": [],
"accessLinks": []
}
},
"isTest": null,
"ivms101": null,
"createdAt": "2022-07-29T04:12:07.742Z",
"updatedAt": "2022-07-29T04:12:07.742Z"
}
Passing address information
There are two ways to pass the address details that will satisfy the minimum IVMS101 requirements:
- There must be at least streetName and buildingName and/or buildingNumber
"geographicAddress": [
{
"streetName": "Robinson Rd",
"buildingName": "The building",
"buildingNumber": "71"
}
- Or, it has to have one or more addressLines:
"geographicAddress": [
{
"addressLine": ["71 Robinson Rd","Singapore, 068895"]
}
]
Sending to an unknown VASP
If the VASP was not identified by blockchain analytics or couldn't be selected from from our directory, you can create it during txCreate:
{
"transactionAsset": "BTC",
"transactionAmount": "72000000000",
"originatorVASPdid": "{{vaspDID}}",
"beneficiaryVASPname": "NewVASPnameThatIwantToAdd",
"notificationEmail": "[email protected]",
"transactionBlockchainInfo": {
"txHash": "",
"origin": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wl4",
"destination": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh"
},
"originator": {
"originatorPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "Bobson",
"secondaryIdentifier": "Bob"
}
]
}
]
}
}
],
"accountNumber": [
"0xa40dfee99e1c85dc97fdc594b16a460717838703"
]
},
"beneficiary": {
"beneficiaryPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "Wunderland",
"secondaryIdentifier": "Alice"
}
]
}
]
}
}
],
"accountNumber": [
"0x00000000219ab540356cbb839cbe05303d7705fa"
]
}
}
If possible, we recommend that you provide the email address of this new VASP so that Notabene can reach out to them as soon as posspossi. If you do not provide it, we will try to find it ourselves and that may take some time.
Sending coins that have a memo/tag
If you are sending a virtual asset that has a unique ID in addition to the wallet address to identify the correct recipient, please follow our guide here.
{
"transactionAsset": "XRP",
"transactionAmount": "67843276843278423",
"originatorVASPdid": "{{vaspDID}}",
"beneficiaryVASPdid": "did:ethr:0x270d4f239359471f1d1c80781a53cf8105f7d08f",
"transactionBlockchainInfo": {
"txHash": "",
"origin": "rnoYZB3d7vQ5BH95tLJhbMuD9jR1p7ZZCc",
"destination": "rPEPPER7kfTD9w2To4CQk6UCfuHM9c6GDY"
},
"originator": {
"originatorPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "Wayne",
"secondaryIdentifier": "Bruce"
}
]
}
]
}
}
],
"accountNumber": [
"XRP TAG"
]
},
"beneficiary": {
"beneficiaryPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "Wick",
"secondaryIdentifier": "John"
}
]
}
]
}
}
],
"accountNumber": [
"XRP TAG"
]
}
}
Regulation example
In the case of a transfer from a VASP's client (originator) to a third-party unhosted wallet, the VASP cannot execute the transfer unless it is able to collect the complete required information (full name and DLT address).
The VASP should also take into account missing or incomplete information, as well as potential inaccurate information, when assessing whether the transfer should be reported as suspicious to the FIU.
Creating TR for unhosted wallet
{
"transactionAsset": "ETH",
"transactionAmount": "1000000000000000000000",
"originatorVASPdid": "did:ethr:0x940a4b2a0932733b842e4aa906761bb3d3bd8148",
"transactionBlockchainInfo": {
"txHash": "",
"origin": "0xa40dfee99e1c85dc97fdc594b16a460717838703",
"destination": "0x00000000219ab540356cbb839cbe05303d7705fa"
},
"originator": {
"originatorPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "Wayne",
"secondaryIdentifier": "Bruce"
}
]
}
],
"geographicAddress": [
{
"addressType": "HOME",
"streetName": "132 Test Street",
"city": "Milan",
"country": "IT",
"buildingNumber": "231",
"postCode": "M4R1V2"
}
]
}
}
],
"accountNumber": [
"0xa40dfee99e1c85dc97fdc594b16a460717838703"
]
},
"beneficiary": {
"beneficiaryPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "Wayne",
"secondaryIdentifier": "Bruce"
}
]
}
]
}
}
}
],
"accountNumber": [
"0x00000000219ab540356cbb839cbe05303d7705fa"
]
},
"beneficiaryProof": {
"proof": "0xb4acba180b23dce8bad7cb49b26d34f580cda646280a2cec56fc6854da6c6fec57057132e26654178759f66e0b06769daff4d952e932c2da76b9a6c3cca00fb71c",
"type": "personal_sign"
},
}
Please seethis section for txValidate and different kinds of beneficiaryProof.
Non-Latin Characters
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "Nilsvik",
"secondaryIdentifier": "Christoffer"
}
],
"localNameIdentifier": [
{
"primaryIdentifier": "ニルスビク",
"secondaryIdentifier": "クリストファー"
}
]
}
]
}
Transaction to an entity
If you the beneficiary of the transaction is a company/entity, you need so use "legalPerson" instead of "naturalPerson":
"originatorPersons": [
{
"legalPerson": {
"name": {
"nameIdentifier": [
{
"legalPersonName": "Apple Crypto INC"
}
]
},
Complete list of fields
{
"transactionAsset": "BTC",
"transactionAmount": "{{$randomInt}}{{$randomInt}}{{$randomInt}}",
"originatorVASPdid": "{{vaspDID}}",
"beneficiaryVASPdid": "did:ethr:0x270d4f239359471f1d1c80781a53cf8105f7d08f",
"transactionBlockchainInfo": {
"txHash": "",
"origin": "{{$randomBitcoin}}",
"destination": "{{$randomBitcoin}}"
},
"originator": {
"originatorPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "{{$randomLastName}}",
"secondaryIdentifier": "{{$randomFirstName}}"
}
]
}
],
"geographicAddress": [
{
"streetName": "{{$randomStreetName}}",
"city": "{{$randomCity}}",
"country": "{{$randomCountryCode}}",
"buildingNumber": "{{$randomInt}}",
"postCode": "{{$randomInt}}"
}
],
"nationalIdentification": {
"countryOfIssue": "{{$randomCountryCode}}",
"nationalIdentifier": "{{{{$randomInt}}}}",
"nationalIdentifierType": "DRLC"
},
"dateAndPlaceOfBirth": {
"dateOfBirth": "1999-01-01",
"placeOfBirth": "{{$randomCountryCode}}"
},
"countryOfResidence": "{{$randomCountryCode}}",
"customerIdentification": "{{$randomInt}}"
}
}
],
"accountNumber": [
"{{$randomBankAccount}}"
]
},
"beneficiary": {
"beneficiaryPersons": [
{
"naturalPerson": {
"name": [
{
"nameIdentifier": [
{
"primaryIdentifier": "{{$randomLastName}}",
"secondaryIdentifier": "{{$randomFirstName}}"
}
]
}
]
}
}
],
"accountNumber": [
"{{$randomBankAccount}}"
]
}
}
Testing VASPs and addreses
If you want to send travel rule messages and recieve automated responses, you can use the vaspDIDs below and their addresses:
Notabene VASP FATF (will automatically ACK) did:ethr:0xc9dc97121e4d0ab0ec2b569c3a16858f5e309ef0 | Notabene VASP SG (will automatically ACK + ACCEPT) did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9 | notabene-vasp-us | Notabene VASP CA (will automatically ACK) did:ethr:0x75215d5bfc19e1a4f0301b40abcf542aa6de8613 | notabene-vasp-ee |
---|---|---|---|---|
my1ChG3QronQu6MBwbffpM6fhHuZnkhtay | mwfy6iw5w7142szxaAkmCVLjBUHSvJPorC | mouAbzg87DWogx5jQQgMfm8iVnjweSgLf4 | n3GfSh9UmWmXeq2khB7SoJt8wVN9jHSaQc | mwSDPGfQK75PxcxBotgwBiuHwrBjnYLh43 |
mwr7oAmQ3AjgKNFRmiBwDQdofXGD2mE1YA | mvwRLEwB6fZGC9xTPLUvQwDBweugCkQGFY | mqEQXvH4fhXZZxkDg9zeJce3nf7aGfLyjE | n1P4D8KtWiECbDaac9DuPJncMy5n9azfks | n2uzHxx5WZrLGCDgcuKVnA4XSRoH6kEr72 |
mqfrJWaQMLqRA1r3epMKUgUMsKLNURfkQA | mzkdPAqX6zUpTtf1nUc6mKYaPiCKwZckz9 | n1vB1FqrBJotH6JZj1rsdeMLuFhHEeXssB | mvNovfUeS65AaUkmdPrSHejfuCMeCxRRZm | mn2AhguPwpByXdho9VvPzWHrmMgxa3rueG |
muC4c8VdMvC7DesiPXWyQGXsizTgJJbzXX | mp1jqcLZQFcusnrvkT82XHVyQULSBand3e | mkPvutTnLJ1LLCGZ7o9NxsKndYMTyqAz5U | n4mGemcryxGb8b5ALzwdwm76imzk5gD4gG | mjXzTjCL8oSjbMEH475JkFcVC8W74cX5yZ |
muDcTaqiLeLQdX1eYerNJsqoP39HbQ2Uww | muTLgopGApArfoX273tjzfa9XhamfLhewW | mrniFX9jvx8LT7H17Fagc5yQ4f34qFASYX | mnbm6pNKGrs1Spnpend6srhtcvpV33qB3L | mg6TMu91P6fW1LwEMW9ioVkJy4qgiteB4G |
0xDD57A27457401FA5A8DAE746F1B5ECADC5F7FDCB | 0xD6BD1C111FE8510E40E98DABA921133DC3AAD8DB | 0xDB6A31EC49D5FB35EF6BA6CE0A3B071C8BA7F7F0 | 0x62BB31F0C416352E5187C127F727EB833704E24F | 0xF2DA9C246AE2BFD670B0D1177311BCB8F3ADEAD0 |
0x8E6780B8E0FC85887AFFDAA9158F5C75A50689A2 | 0x3C043448BF14FA2C56F9E40CF6909F0D6B46E7E9 | 0x9D5D58D923E1DDAFFF92F762C5204D4D292C7781 | 0x6A0702F5AC3DC6E5802627DBAA2EF35BA0ED02B7 | 0x076C7CC6F520176E9FF9D757F0A767189217CCE5 |
0x414CA6602F0473A2DC910C09D255C5DBF92140EB | 0x7805F90B3D505D20C275B3C3CF717EDE899BD0DC | 0x11982C25606F2199EB56A2F769022417288D3002 | 0x91F73E7E560CC7FDFAD873B7F9B978116E9F19E0 | 0xA978EF13E908063A99383E11E30D56F2B6A3E2D2 |
0x4A083F04DC582758D00041C2EDFB020646333B4E | 0xD2C0F70A66A1AF896025F3FA2B2A0938A83EF0A2 | 0x26713E0C10545F9609D44EC5FFD6E0339BA09190 | 0xE4029D982DD1F9ACB777EA9618A6404D5C37FA6B | 0x4F1DB9C013127CE409A3FB8E3A1D57B55AB07DB1 |
0x0FCEE3C76029F412EC0FF521D1F2C85C80DEBF21 | 0x2250FE7539343FA340982F6B93E7B431FCA328FE | 0x3BB05AA82A1A60114D016BCE659FFFEE12783290 | 0x29C37C8ED4CF5ACD7F66A0C55EC2801CB430828A | 0xB2500CE11A2977DB6390C37F10194A1F931718D9 |
raugKprZQaBvqNZQzfcC5tN3zZiY2wFr4X | r4ZFXAAx9qJDRaFxSwDnX8cVgHtwxTTL8p | rpg8HXCTyNNvxsmhiJfZgot7qqGYqWSAKK | r9iXTh8kedkZRDWixrUrctrF5scM4Tnt4N | rHwZtqLMyo25vhUzBhSK2toDNWcoikdipd |
rs9T9GY1TKoyr8ZZyLSyRvBHTYCoXGGpfs | rP2dqvuCbQgBqpdnbYrXnSJfxUvNQW8z3h | r9Hf4v9g1LL9mMK2sHFYpoXmpUHs5NsV3V | rLoVfUBAuJ28QATYrKfcBBa1gZkcEWxUkg | rwJ6WyDWgSaqM4MmvPiUh4LEyFLEP9T5DS |
rfa4CDMdsd3cuHerwiRnsMAPKkZq3izGm7 | raPKEThrfTujKCWXaBMbavdRjDH3bq7Bn6 | rEFJrBvnFJVjZ5gmsGsDTY447nATUCvcg5 | rDPRGvMdnSnkQAfG9FuaM4orop6qLUE53P | rncmdpv4o8Kdfk4r6bDxHDSdHjhp1hi2bv |
rxnNXWiQaywjJmzGTkXCkTNYtnNFUPiit | rM1pAP2m9g2RNysq2nvtCmRQehXXsxAvQh | rwNxXkCfFbVKTmDwYW5798qpqenDgmdGQ9 | rLu2p1cdheCK8iLYAR9KAHZbxH7jVuvdBS | rakJoD5MebB3quTx4eLqQVHefbyoYaKVwa |
rDdyUTrs8aJVK3HVSXTYi2ghu3o8smBuqD | rUSABpw1wigbckkBM9iZKNoFP57KnpZcdD | r4XxvmX2Sg2uWoymLzuQwktyTVDo9ZtUrA | rEZkbynBMmXCwHzJckTANzaXE8fbiLVyE1 | rEjic39NEpXHvszPjxWmn1dPzEEGiFFZuz |
https://randommer.io/bitcoin-address-generator
Counterparty VASP discovery with txCreate
When creating a TR transfer using txCreate
with "skipBeneficiaryDataValidation": true,
is it possible not to provide the:
beneficiaryVASPdid
,beneficiaryVASPname
beneficiaryProof
if neither of these fields is provided, Notabene will try to discover the counterparty VASP using the integration with blockchain analytics service or the address book. If the counterparty VASP is discovered it will be automatically added to the TR transfer.
Updated 2 days ago
You are now able to authenticate, validate, searching, and sending travel rule messages, let's start implementing stage 3: