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

AttributeRequiredTypeDescription
transactionAssetYesstringAsset symbol (BTC,ETH)
transactionAmountYesstringAmount in base unit of the asset (satoshi, wei, etc)
originatorDidstring (common_DID)
beneficiaryDidstring (common_DID)
originatorVASPdidYesstring (common_DID)
beneficiaryVASPdidstring (common_DID)
beneficiaryVASPnamestringBeneficiary VASP Name
transactionBlockchainInfoobject (TransactionBlockchainInfo)Information about the transaction on the blockchain
originatorobject (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.
beneficiaryobject (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.
encryptedstringEncrypted Personal Identificable Information (obscure schema-less value)
protocolstring (tr_TravelRuleProtocol)Enum: "TRLight" "TRP" "OpenVASP"
notificationEmailstringBeneficiary VASP Notification Email
skipBeneficiaryDataValidationbooleanDisable beneficiary data validation (opportunistic compliance)
travelRuleBehaviorbooleanIf 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].
originatorProofobject (OwnershipProof)Ownership Proof data
beneficiaryProofobject (OwnershipProof)Ownership Proof data
piiobject (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 originator

See 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:

  1. There must be at least streetName and buildingName and/or buildingNumber
"geographicAddress": [
                        {
                            "streetName": "Robinson Rd",
                            "buildingName": "The building",
                            "buildingNumber": "71"
                        }
  1. 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:0xc9dc97121e4d0ab0ec2b569c3a16858f5e309ef0Notabene VASP SG (will automatically ACK + ACCEPT) did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9notabene-vasp-usNotabene VASP CA (will automatically ACK) did:ethr:0x75215d5bfc19e1a4f0301b40abcf542aa6de8613notabene-vasp-ee
my1ChG3QronQu6MBwbffpM6fhHuZnkhtaymwfy6iw5w7142szxaAkmCVLjBUHSvJPorCmouAbzg87DWogx5jQQgMfm8iVnjweSgLf4n3GfSh9UmWmXeq2khB7SoJt8wVN9jHSaQcmwSDPGfQK75PxcxBotgwBiuHwrBjnYLh43
mwr7oAmQ3AjgKNFRmiBwDQdofXGD2mE1YAmvwRLEwB6fZGC9xTPLUvQwDBweugCkQGFYmqEQXvH4fhXZZxkDg9zeJce3nf7aGfLyjEn1P4D8KtWiECbDaac9DuPJncMy5n9azfksn2uzHxx5WZrLGCDgcuKVnA4XSRoH6kEr72
mqfrJWaQMLqRA1r3epMKUgUMsKLNURfkQAmzkdPAqX6zUpTtf1nUc6mKYaPiCKwZckz9n1vB1FqrBJotH6JZj1rsdeMLuFhHEeXssBmvNovfUeS65AaUkmdPrSHejfuCMeCxRRZmmn2AhguPwpByXdho9VvPzWHrmMgxa3rueG
muC4c8VdMvC7DesiPXWyQGXsizTgJJbzXXmp1jqcLZQFcusnrvkT82XHVyQULSBand3emkPvutTnLJ1LLCGZ7o9NxsKndYMTyqAz5Un4mGemcryxGb8b5ALzwdwm76imzk5gD4gGmjXzTjCL8oSjbMEH475JkFcVC8W74cX5yZ
muDcTaqiLeLQdX1eYerNJsqoP39HbQ2UwwmuTLgopGApArfoX273tjzfa9XhamfLhewWmrniFX9jvx8LT7H17Fagc5yQ4f34qFASYXmnbm6pNKGrs1Spnpend6srhtcvpV33qB3Lmg6TMu91P6fW1LwEMW9ioVkJy4qgiteB4G
0xDD57A27457401FA5A8DAE746F1B5ECADC5F7FDCB0xD6BD1C111FE8510E40E98DABA921133DC3AAD8DB0xDB6A31EC49D5FB35EF6BA6CE0A3B071C8BA7F7F00x62BB31F0C416352E5187C127F727EB833704E24F0xF2DA9C246AE2BFD670B0D1177311BCB8F3ADEAD0
0x8E6780B8E0FC85887AFFDAA9158F5C75A50689A20x3C043448BF14FA2C56F9E40CF6909F0D6B46E7E90x9D5D58D923E1DDAFFF92F762C5204D4D292C77810x6A0702F5AC3DC6E5802627DBAA2EF35BA0ED02B70x076C7CC6F520176E9FF9D757F0A767189217CCE5
0x414CA6602F0473A2DC910C09D255C5DBF92140EB0x7805F90B3D505D20C275B3C3CF717EDE899BD0DC0x11982C25606F2199EB56A2F769022417288D30020x91F73E7E560CC7FDFAD873B7F9B978116E9F19E00xA978EF13E908063A99383E11E30D56F2B6A3E2D2
0x4A083F04DC582758D00041C2EDFB020646333B4E0xD2C0F70A66A1AF896025F3FA2B2A0938A83EF0A20x26713E0C10545F9609D44EC5FFD6E0339BA091900xE4029D982DD1F9ACB777EA9618A6404D5C37FA6B0x4F1DB9C013127CE409A3FB8E3A1D57B55AB07DB1
0x0FCEE3C76029F412EC0FF521D1F2C85C80DEBF210x2250FE7539343FA340982F6B93E7B431FCA328FE0x3BB05AA82A1A60114D016BCE659FFFEE127832900x29C37C8ED4CF5ACD7F66A0C55EC2801CB430828A0xB2500CE11A2977DB6390C37F10194A1F931718D9
raugKprZQaBvqNZQzfcC5tN3zZiY2wFr4Xr4ZFXAAx9qJDRaFxSwDnX8cVgHtwxTTL8prpg8HXCTyNNvxsmhiJfZgot7qqGYqWSAKKr9iXTh8kedkZRDWixrUrctrF5scM4Tnt4NrHwZtqLMyo25vhUzBhSK2toDNWcoikdipd
rs9T9GY1TKoyr8ZZyLSyRvBHTYCoXGGpfsrP2dqvuCbQgBqpdnbYrXnSJfxUvNQW8z3hr9Hf4v9g1LL9mMK2sHFYpoXmpUHs5NsV3VrLoVfUBAuJ28QATYrKfcBBa1gZkcEWxUkgrwJ6WyDWgSaqM4MmvPiUh4LEyFLEP9T5DS
rfa4CDMdsd3cuHerwiRnsMAPKkZq3izGm7raPKEThrfTujKCWXaBMbavdRjDH3bq7Bn6rEFJrBvnFJVjZ5gmsGsDTY447nATUCvcg5rDPRGvMdnSnkQAfG9FuaM4orop6qLUE53Prncmdpv4o8Kdfk4r6bDxHDSdHjhp1hi2bv
rxnNXWiQaywjJmzGTkXCkTNYtnNFUPiitrM1pAP2m9g2RNysq2nvtCmRQehXXsxAvQhrwNxXkCfFbVKTmDwYW5798qpqenDgmdGQ9rLu2p1cdheCK8iLYAR9KAHZbxH7jVuvdBSrakJoD5MebB3quTx4eLqQVHefbyoYaKVwa
rDdyUTrs8aJVK3HVSXTYi2ghu3o8smBuqDrUSABpw1wigbckkBM9iZKNoFP57KnpZcdDr4XxvmX2Sg2uWoymLzuQwktyTVDo9ZtUrArEZkbynBMmXCwHzJckTANzaXE8fbiLVyE1rEjic39NEpXHvszPjxWmn1dPzEEGiFFZuz

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.


What’s Next

You are now able to authenticate, validate, searching, and sending travel rule messages, let's start implementing stage 3: