Register address in address book

In the Notabene dashboard, you can upload the current list of your operational wallet addresses in a CSV file. Notabene will then automatically compare the destination address of your incoming travel rule messages against it and confirm that the address belongs to you.

Upload a file with blockchain addresses manually

Upload a file with blockchain addresses manually

The content of this CSV file needs to be formatted like this:

assetaddresscustomerRef
ETH0x1c7013B6C7250E6A8d6F87f22aa19fa8DB89694fAlice@SG987654321
BTC0xf92A864B7852DE1005ED4477cFFb8AAe5897B963Alice@SG987654321
USDT0x3b964fEc02c54395d5386B5AA2EDe3A91Ec7A28aAlice@SG987654321

If the address in the incoming travel rule message is present in the list you have uploaded, the status of the travel rule message will change to "ACK" and the full travel rule details will be made available to you.

The name of the originator is then processed by your sanctions screening provider and the originating wallet address by your blockchain analytics provider (if the integration with them is enabled in our marketplace).
If these integrations are not enabled, you can use the details pushed by the webhook instead to do this internally.

If there are no hits on the originator person or the originating wallet address, the travel rule should automatically change status to "ACCEPTED" after being processed by your rules.

📘

New addresses

This manual method works if your list of operational wallet addresses remains fairly static. If you frequently have new addresses, you can schedule an automated upload using API.

Uploading a list using API

To upload an address book using API, you must first request a short-lived AWS S3 bucket URL:

{{baseUrl}}/address/upload/:vaspDID

In the response you will get the URL:

{
    "uploadUrl": "https://api.notabene.dev/upload?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJpYXQiOjE2NTUxMDcyNzAsImV4cCI6MTY1NTEwNzg3MCwiQGNvbnRleHQiOlsiaHR0cHM6Ly9hcGkubm90YWJlbmUuaWQvc2NoZW1hcy92MSJdLCJ0eXBlIjpbIlVwbG9hZFVybCJdLCJ1cGxvYWRNZXRhZGF0YSI6eyJrZXkiOiJkaWQ6ZXRocjoweGQ0YmQ5MDJlYzc4NTc4ZjMzYTIwZmY2MDE1MDRkMmFiMzI0Y2ZhYjkvYWRkcmVzcy8xNjU1MTA3MjcwNjM3IiwidXBsb2FkVHlwZSI6ImFkZHJlc3NMfgwergidXNlckRJRCI6ImRpZDpldGhyOjB4ZWZiYjE0YjczNDczY2NmZDYxMDU0M2FmNGIxYzhmZGEwMjdjNTdiZiIsImV4dHJhIjp7InZhc3BESUQiOiJkaWQ6ZXRocjoweGQ0YmQ5MDJlYzc4NTc4ZjMzYTIwZmY2MDE1MDRkMmFiMzI0Y2ZhYjkifX0sImlzcyI6ImRpZDpldGhyOjB4MTliNWZmODQ0MDAxOWI2MzVhODZiYmI2MzJkYjg1NGYyZWE4MDQyMyJ9.crPXp5VRT3wc6u6314ivu82eKu8xhkSksbS2ypkULkrT8DoXVkzzpobZIyQzJBw01Eu7r4l_FGFsnElMY-K2bQ"
}

Use the URL above in a POST request with a CSV file in the payload as form data:

formData: {
    '': {
      'value': fs.createReadStream('/C:/Users/cnils/Downloads/sample.csv'),
      'options': {
        'filename': '/C:/Users/cnils/Downloads/sample.csv',
        'contentType': null
      }
{
    "text": "File uploaded!",
    "uploadedFile": {
        "locationURL": "s3://app-demo-s3/did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9/address/1680688383515",
        "mimeType": "text/csv",
        "name": "sample.csv",
        "metadata": {
            "key": "did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9/address/1680688383515",
            "uploadType": "addressList",
            "userDID": "did:ethr:0x1361d9d395ec01369042bcb7631fd80a4d564ac9",
            "extra": {
                "vaspDID": "did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9",
                "counter": 0
            }
        }
    }
}

Registering a single address using the API

It is also possible to add a single address ad-hoc by calling: https://api.notabene.dev/address/registerCustomer

{
    "vaspDID": "{{vaspDID}}",
    "asset": "ETH",
    "address": "0x1c7013B6C7250E6A8d6F87f22aa19fa8DB89694f",
    "customerRef": "Alice@SG987654321"
}

Is also possible to check the current list of registered addresses and delete all or part of them using this API endpoints.


What’s Next

Now that you are able to confirm that an address belongs to you, let's set up the process to make sure that all incoming blockchain deposits have a corresponding travel rule message: