IVMS

Notabene utilizes the IVMS 101 interVASP messaging standard to transmit required originator and beneficiary information.

const ivms = {
  originator: {
    originatorPersons: [
      {
        naturalPerson: {
          name: [
            {
              nameIdentifier: [
                {
                  primaryIdentifier: 'Wayne',
                  secondaryIdentifier: 'Bruce'
                },
              ],
            },
          ],
          nationalIdentification: {
            nationalIdentifier: 'AABBCCDDEEFF0011223344',
            nationalIdentifierType: 'CCPT',
            countryOfIssue: 'NZ',
          },
          dateAndPlaceOfBirth: {
            dateOfBirth: '1900-01-01',
            placeOfBirth: 'Planet Earth',
          },
          geographicAddress: [
            {
              addressLine: ['Cool Road /-.st'],
              country: 'BE',
              addressType: 'HOME',
            },
          ],
        },
      },
    ],
    accountNumber: ['01234567890'],
  },

  beneficiary: {
    beneficiaryPersons: [
      {
        naturalPerson: {
          name: [
            {
              nameIdentifier: [
                {
                  primaryIdentifier: 'Greyson',
                  secondaryIdentifier: 'Dick'
                },
              ],
            },
          ],
        },
      },
    ],
    accountNumber: ['01234567890'],
  },
};

Payload

// transaction.create payload:
const payload = {
  transactionAsset: 'ETH',
  transactionAmount: '1111111000000000000',
  originatorVASPdid: 'did:ethr:0xb086499b7f028ab7d3c96c4c2b71d7f24c5a0772',
  beneficiaryVASPdid: 'did:ethr:0xa80b54afa45dc22a4ebc0e1a9b638998a7899c33',
  transactionBlockchainInfo: {
    origin: '0x123',
    destination: '0x321',
  },
  originator: ivms.originator,
  beneficiary: ivms.beneficiary,
};

VASP methods

get properties of a VASP

client.trustFramework.get(...) get properties of a VASP

get a list of VASPs

client.trustFramework.list(...) get a list of VASPs

update properties of your VASP

client.trustFramework.update(...) update properties of your VASP

Transaction methods

txValidate

Coming.

txValidateFull

Coming.

create a new outgoing transaction

client.transaction.create(...) create a new outgoing transaction (see details below)

Creates a new transaction. The fields required in a transaction differ depending on the jurisdiction of the originating VASP. Additional data may be provided to the beneficiary VASP depending on their jurisdiction.

// transaction.create payload:
const payload = {
  transactionAsset: 'ETH',
  transactionAmount: '1111111000000000000',
  originatorVASPdid: 'did:ethr:0xb086499b7f028ab7d3c96c4c2b71d7f24c5a0772',
  beneficiaryVASPdid: 'did:ethr:0xa80b54afa45dc22a4ebc0e1a9b638998a7899c33',
  transactionBlockchainInfo: {
    origin: '0x123',
    destination: '0x321',
  },
  originator: ivms.originator,
  beneficiary: ivms.beneficiary,
};

update transaction

client.transaction.update(...)

Update a transaction with the passed parameters.

const updatedTx = await client.transaction.update({
  id: txCreated.id,
  beneficiaryVASPdid: '...',
});

Note, you need specify an encryption method just like in transaction.create (and your jsonDIDKey):

const updatedTxEnd2End = await client.transaction.update(
  { id: txCreated.id, beneficiaryVASPdid: '...' },
  jsonDIDKey // for END_2_END | HYBRID
  // false | true
);

get transaction by id

client.transaction.get(...)

Gets the detail of a transaction that has been created based on the passed transaction ID.

const txInfo = await client.transaction.get(id);
// or
const txInfo = await client.transaction.get(id, jsonDIDKey);

If the transaction was encrypted with the HOSTED (default) or HYBRID strategy, the PII Service will be able to decrypt it for you, the ivms101 property will contain the decrypted data. However, for END_2_END encrypted data you can pass your jsonDIDKey argument to decrypt it locally.

retrieve a list of transactions

client.transaction.list(did)

Fetches a list of transactions belonging to a VASP. Transactions can be sorted, filtered, and searched and results are paginated.

approve a transaction by ID

client.transaction.approve(id)

Approves an outgoing transaction. If the VASP is present in the Notabene Directory, approving a transaction will send the transaction to them and set the transaction status to SENT. If the VASP is not in the Notabene Directory, approving the transaction will set the status to WAITING_FOR_INFORMATION.

cancel a transaction by ID

client.transaction.cancel(id)

Cancels the outgoing transaction and sets the status to CANCELLED.

confirm a transaction by ID

client.transaction.confirm(id)

Confirms that the blockchain address of the transaction belongs to the beneficiary VASP. Confirming sets the status of a transaction to ACK.

create an empty incoming transaction

client.transaction.notify(...)

Notifies the originator VASP of an incoming transaction on the blockchain.

reject a transaction by ID

client.transaction.reject(id)

Rejects a transaction indicating that the blockchain address is not owned by the beneficiary VASP. Rejecting sets the transaction status to REJECTED.

accept a transaction by ID

client.transaction.accept(id)

Accepts a transaction setting the status to ACCEPTED. Transactions can be automatically accepted by setting rules in the rules engine or manually using this endpoint.

decline a transaction by ID

client.transaction.decline(id)

Declines a transaction setting the status to DECLINED. Transactions can be automatically declined by setting rules in the rules engine or manually using this endpoint.

redirect transaction

client.transaction.redirect(fromDID, toDID)

Redirecting transaction allows beneficiary VASPs to route incoming transactions from one subsidiary to another.

txNotify

Check if an incoming deposit has received travel rule information or not.

const myfunc = async function () {
  const txNotified = await client.transaction.notify(
    "thisisthehash",
    "123456789",
    "BTC",
    "did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9",
    "destinationAddress",
    "originAddress"
  );
  console.log(txNotified);
};
myfunc().catch((err) => console.error(err));