# MarketGuard

Plug-and-play AML & KYC solution for a blockchain business

{% embed url="<https://youtu.be/2eGAqXtzG3A>" %}
MarketGuard is an AML compliance solution for a blockchain company or a VASP
{% endembed %}

Proper AML monitoring is a challenge for any financial institution. Working with digital assets and complying with Swiss and European AML regulations make such a business even harder. In order not to be overwhelmed with the daily routine and still accurately identify risks, we have invested multiple years of teamwork to create the right solution - MarketGuard.

MarketGuard offers a convenient workspace for a compliance officer of a VASP. MarketGuard is a robust system that allows you to stay safe and compliant with the changing regulations.

MarketGuard is an automated AML, KYC/KYB, and KYT solution that helps you with

* **onboarding**: collect necessary individual, company and shareholder data for verification
* **ongoing monitoring**: automate continues due diligence once the initial verification has been done
* **risk profiling**: define in a semi-automated manner the risk profile of a client
* **transaction monitoring**: conduct real-time in-depth transaction monitoring based on the assessed client risk profile
* **case management**: manage automatically created cases&#x20;
* **regulatory** **reporting**: produce regulatory reports based on cases

Visit our website <https://marketguard.io> to learn more!


# Client onboarding

Client onboarding and continuous monitoring

MarketGuard offers a smooth and quick way to onboard your clients in compliance with regulatory requirements.&#x20;

The system is designed to collect necessary company and shareholder data for verification:

* A client fills in an AML form or questionnaire
* A client's identity may be verified in many ways:
  * SMS identification
  * Video identification&#x20;
  * Video-selfie
  * Photo-selfie

<figure><img src="/files/6y8NMqeMEXIbZTFfxJzH" alt=""><figcaption><p>MarketGuard - Client onboarding</p></figcaption></figure>

Please note that not all organisational forms of legal entities are supported, namely trusts and foundations are not supported.&#x20;

### AML monitoring

Utilizing the leading 3rd party AML service, our system thoroughly monitors all shareholders and key personnel of your client and detects if they are:

* Global sanctions list
* Politically exposed persons (PEP) list
* In other custom watch-lists
* You will be notified immediately if the client status changes

The main features are as follows:

* #### KYC / KYB

  Seamless onboarding of both retail and business customers
* **Continuous monitoring**

  Ongoing due diligence once the initial verification has been done
* **Wallet verification**

  Check easily the ownership of the blockchain wallets
* **Automated workflow**

  No more paperwork - gather and check documents online
* **Data protection**

  Store your client data in a secure manner
* **Custom statuses**

  Create your own workflow according to your needs
* **External integrations**

  Use SumSub for KYC checks or choose another provider


# Client risk profiling

Once a client has provided the required information, MarketGuard helps an AML officer needs to define a risk level of this client.

As AML activity focuses not only on gathering client data during the onboarding process but also on monitoring client transactions, MarketGuard requires certain parameters (thresholds) as inputs. For example, an AML compliance officer wants to monitor unexpectedly high daily or monthly turnover on a client account and sets a daily and monthly limit. As clients can be assigned a normal, medium or high-risk level, the limits can also vary.&#x20;

MarketGuard offers the following tool for risk profiling:

* An AML officer can create (and edit at any time) an AML Quiz in order to define the risk level of a client
* An AML Quiz can be found in *Settings > AML Quiz*
* Two different types of AML Quizzes can be created: for a business client and for a retail client
* An AML Quiz can have an unlimited number of questions
* Each question can be of two types: Yes/No, Normal/Medium/High. Each answer can be assigned a score of 0, 1, 2. The higher the score, the higher the overall risk of a client
* Based on the available client data, an AML officer must answer the AML Quiz questions. The score is calculated automatically
* Based on this score, an officer needs to assign a respective risk level and define the limits for this client
* If client's situation changes, limits and answers can be changed to new values


# Transaction monitoring (KYT)

Once a transaction is added to a MarketGuard database, it is automatically checked against a number of parameters

Once a transaction is loaded and linked to a client, a transaction is processed by the KYT module. The module fetches the client and transaction details and marks the transaction with a risk flag. If a transaction or a group of transactions receives a high-risk flag, it will be included in a KYT case. In GUI, these cases are shown separately in *Cases*.&#x20;

Currently, the following checks are set up for high-risk identification:

1. **Daily volume limit**&#x20;
   1. The transactions from 0:00 UTC are taken into account.
   2. The threshold value is compared with the maximum of deposits cumulative volume and withdrawals cumulative volume.
2. **30d volume limit**
   1. The transactions for the last rolling 30 days are considered, excluding transactions from the previous 30d limit cases.
   2. The threshold value is compared with the maximum of deposits cumulative volume and withdrawals cumulative volume.
   3. The minimum number of transactions to trigger the 30d limit is two.
   4. Only the last transaction in a group of transactions has the high-risk status.
3. **Score of a blockchain transaction**&#x20;
   1. KYT score is calculated based on the 3rd party provider of blockchain scoring.
   2. The score ranges from 0 to 100, where 100 means that a transaction has no suspicious origins.
   3. KYT case by default is triggered with scores from 0 to 40.
4. **Country risk**&#x20;
   1. The case is created if the country of incorporation of a client is in the high-risk country list.
5. **Payment country**
   1. The case is created if the country of incorporation of a client's banking or payment institution is in the high-risk country list.
   2. For a blockchain transaction, the payment country is the country of incorporation of a client.


# Adding a transaction manually via GUI

You can add a transaction to MarketGuard manually using our web GUI

If your bank, brokerage or custodian account is not supported by MarketGuard, you can manually add transactions from such an account to MarketGuard. To this end, you need to do the following:

1. Log in to your MarketGuard account and go to *Transactions > Add a transaction > Add manually*&#x20;
2. Fill in the form
3. Click *Save & Close*

<figure><img src="/files/1raw04rZ4YPKRKEWTbKP" alt="" width="375"><figcaption><p>Adding a transaction manually </p></figcaption></figure>

Here is the meaning of the fields:

`Asset` - the currency and the network of the transaction (e.g., USDT - Ethereum or EUR - SEPA)&#x20;

`Amount`  - the quantity of the transaction (e.g., 1000.99)

`Tx Hash` - the hash of a blockchain transaction  &#x20;

`Direction` - (*incoming* or *outgoing*) the direction of the transaction; it might be important when there is a transaction between your own accounts&#x20;

`Transaction date` - the date of the transaction&#x20;

`Sender Accounts` - one or several blockchain addresses involved in a transaction or the accounts of a sender

`Recipient Accounts` - one or several blockchain addresses involved in a transaction or the accounts of a recipient&#x20;


# Adding a transaction manually via CSV

You can add a transaction to MarketGuard manually uploading a CSV file

If your bank, brokerage or custodian account is not supported by MarketGuard, you can manually add transactions from such an account to MarketGuard. To this end, you need to do the following:

1. download transactions from such an account
2. convert the downloaded data to the format supported by MarketGuard (MS Excel or Google Sheets can help you with that; please use a CSV template which is available here: *Transactions > Add a transaction > Import from a CSV file*)&#x20;
3. upload a CSV file to your MG workspace.

**Breaking down the CSV file**

You will need to fill in the following fields:

`sender_accounts` - *obligatory* - one or several blockchain addresses involved in a transaction or the accounts of a sender&#x20;

`recipient_accounts` - *obligatory* - one or several blockchain addresses involved in a transaction or the accounts of a recipient &#x20;

`direction` - *obligatory* - direction of the transaction (it can be either *incoming* or *outgoing*); it might be important when there is a transaction between your own accounts

`network` - *obligatory* - network of the transaction (e.g., Ethereum, Arbitrum or SEPA)&#x20;

`currency` - *obligatory -* currency of the transaction (e.g., EUR or BTC)&#x20;

`format` - *optional* - the format of network and currency naming; leave it blank for MarketGuard format; alternatively, you can specify one of the supported venues: *copper, fireblocks, kraken, clearjunction,* and *scorechain*; for example, you can indicate currency = XBT and specify format = kraken, and the system will automatically convert XBT into BTC.&#x20;

`amount` - *obligatory* - the quantity of the transaction (e.g., 1000.99)

`tx_hash` - *obligatory* - blockchain transaction hash (obligatory only for crypto transactions)&#x20;

`transferred_at` - *obligatory* - date and time of the transaction (e.g., 2024-08-13T17:21:00.000Z)&#x20;

`external_id` - *optional* - transaction ID; as defined on an external venue

`venue_name` - *optional* - the name of the external venue such as the name of a bank, custodian, broker etc. &#x20;

`venue_account_id` - *optional* - account ID where the transaction took place; as defined on an external venue&#x20;

`venue_transaction_id` - *optional* - transaction ID; as defined on an external venue&#x20;


# Case management

If a transaction or a group of transactions receives a red flag, it will be included in a KYT case.

You will find all automatically created cases in GUI on the *Cases* page. The functionality to create a case manually is on our roadmap already.&#x20;

You can filter cases by:

* Client
* Case type
* Status
* Date

Once a case is selected, a pop-up shows detailed information:

* Case ID
* Case status (e.g., Waiting for the data from the client)
* The reason why a case has been created (e.g., low KYT blockchain score)
* The list of affected transactions
* All the information related to the investigation (e.g., Source of funds sent by the client)
* Comments
* The result of the investigation (the list of suggested answers as well as a free text field)
* A downloadable AML report in PDF (the default template is prepared in accordance with the VQF standards)&#x20;


# Use cases

How MarketGuard can help different blockchain businesses

While MarketGuard can be used by any (even non-financial) company that needs to follow an AML compliance procedure, the product is designed for clients who work with cryptocurrencies and digital assets. The incomplete list is as follows:

* Any VASP
* Crypto OTC Desks
* Crypto (instant) exchanges
* Companies that undergo ICO or Token offering
* Digital asset managers&#x20;
* Digital wallets (crypto wallets, crypto custodians)

As the regulation in different countries varies and the European MICAR is yet to come, we need to adapt our solution to the local specifics. The current version of MarketGuard has the following geographic focus:

* Switzerland
* Cyprus
* Lithuania
* [Contact us](mailto:sales@marketguard.io) if your business is registered in another country!&#x20;


# Glossary

Look up a word to get its definition or description

#### Risk assessment

MarketGuard offers real-time monitoring of the companies, their key personnel and UBOs. If adverse information is found, a user is notified about it.

#### Risk classification

An AML officer can manually set a high or normal risk level for each client.&#x20;

#### Roles

MarketGuard supports the following user roles:&#x20;

* Admin/Director (all rights)
* AML officer (no rights to change settings or add new users)
* Client support (the right to leave comments and attachments)
* Read/only access.

#### Sanctions

MarketGuard allows checking a great number of sanction lists such as OFAC, UN, HMT, EU, DFAT and more.

#### Status updates

Push notifications to a dedicated Slack channel will help keep not only the compliance team but also your sales force informed about the current status of clients being onboarded.

#### Transaction monitoring

MarketGuard currently allows to set up the following alerts:

* daily turnover per client
* 30d turnover per client
* domicile (country of incorporation) of a client
* (*for fiat transactions*) payment country (where the bank of a client is located)
* (*for blockchain transactions*) a risk score that is calculated based on the share of high-risk sources associated with the transaction (examples are known hacks, scams, child abuse, gambling etc.)

#### Travel rule

The [travel rule](https://marketguard.io/knowledge.html#rule) requires verification of the ownership of the wallet from/to which digital assets are sent. A VASP has to identify a sender for incoming and a recipient for outgoing blockchain transactions.&#x20;

1. If a sender or a recipient of a transaction is the same client of the VASP (for transfer of own funds), [wallet verification](#wallet-verification) is sufficient. MarketGuard has implemented this.&#x20;
2. If a sender or a recipient of a transaction is an independent party(for transfer from/to third parties), information must be exchanged between the VASPs involved. MarketGuard will implement this feature in 2024.&#x20;

#### Wallet verification

MarketGuard supports the following methods of wallet verification (as per the Travel Rule requirements):

1. Satoshi test
2. Print screens (screenshots)
3. Connecting a Web3 wallet (such as MetaMask or any other wallet supported by Wallet Connect)


# Integration guide

Step-by-step guidelines to start using MarketGuard

Get ready with third-party integrations. &#x20;

1. **Slack**. To get notifications to Slack, you need to create a webhook.
2. **SumSub**.&#x20;

   &#x20;\- Create a questionnaire that your clients will use during onboarding&#x20;

   &#x20;\- Create an API key

   &#x20;\- Create a webhook
3. **Email**. Create a new email address and share it with us. You will get a letter from AWS that you will need to confirm.&#x20;

Make it your own.&#x20;

1. **Design**. Send us your logo, colours, brand name, relevant web links etc.
2. **Domain**. Add *app.yourcompany.com* and *admin.yourcompany.com* to your DNS settings.&#x20;
3. **Data storage**. Inform us whether you want to keep your client data on the servers in the EU or Switzerland.&#x20;
4. **Workflow**. Decide on a particular onboarding pipeline for your clients&#x20;

Don't be shy and ask for help. Our support team will guide you through the entire process.


# API reference


# Transactions

{% openapi src="/files/8DyrnSQ48F6MW2cEyRdF" path="/api/v1/transactions" method="post" %}
[sauron.json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2FyLdA2HUostNxkjKsa1Tw%2Fsauron.json?alt=media\&token=164e4037-5e3f-4380-a052-129a1e1b7131)
{% endopenapi %}


# Addresses

## Search for an address

{% openapi src="/files/GsIjqE4jAiBj6l608HNt" path="/api/v1/addresses" method="get" %}
[addressbook.json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2Fkrgj2td39nxPePSjbNqD%2Faddressbook.json?alt=media\&token=1006a83e-e918-437c-8e16-96b96516ab21)
{% endopenapi %}

## Adding address to address book

{% openapi src="/files/jFEsXPrakwlF6donYrnD" path="/api/v1/addresses" method="post" %}
[openapi (1).json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2FgPJpWGqqFWMYx2kmNtx6%2Fopenapi%20\(1\).json?alt=media\&token=902a01ab-4e52-4748-9216-4a87f7bb4947)
{% endopenapi %}

## Approve address by internal UID

{% openapi src="/files/jFEsXPrakwlF6donYrnD" path="/api/v1/addresses/{address\_uid}/approve" method="post" %}
[openapi (1).json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2FgPJpWGqqFWMYx2kmNtx6%2Fopenapi%20\(1\).json?alt=media\&token=902a01ab-4e52-4748-9216-4a87f7bb4947)
{% endopenapi %}

## Approve address by external ID

{% openapi src="/files/jFEsXPrakwlF6donYrnD" path="/api/v1/addresses/ext/{external\_id}/approve" method="post" %}
[openapi (1).json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2FgPJpWGqqFWMYx2kmNtx6%2Fopenapi%20\(1\).json?alt=media\&token=902a01ab-4e52-4748-9216-4a87f7bb4947)
{% endopenapi %}

## Get an address by internal UID

{% openapi src="/files/jFEsXPrakwlF6donYrnD" path="/api/v1/addresses/{address\_uid}" method="get" %}
[openapi (1).json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2FgPJpWGqqFWMYx2kmNtx6%2Fopenapi%20\(1\).json?alt=media\&token=902a01ab-4e52-4748-9216-4a87f7bb4947)
{% endopenapi %}

{% openapi src="/files/jFEsXPrakwlF6donYrnD" path="/api/v1/addresses/{address\_uid}" method="delete" %}
[openapi (1).json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2FgPJpWGqqFWMYx2kmNtx6%2Fopenapi%20\(1\).json?alt=media\&token=902a01ab-4e52-4748-9216-4a87f7bb4947)
{% endopenapi %}

{% openapi src="/files/jFEsXPrakwlF6donYrnD" path="/api/v1/addresses/{address\_uid}" method="patch" %}
[openapi (1).json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2FgPJpWGqqFWMYx2kmNtx6%2Fopenapi%20\(1\).json?alt=media\&token=902a01ab-4e52-4748-9216-4a87f7bb4947)
{% endopenapi %}

{% openapi src="/files/jFEsXPrakwlF6donYrnD" path="/api/v1/addresses/ext/{external\_id}" method="get" %}
[openapi (1).json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2FgPJpWGqqFWMYx2kmNtx6%2Fopenapi%20\(1\).json?alt=media\&token=902a01ab-4e52-4748-9216-4a87f7bb4947)
{% endopenapi %}

{% openapi src="/files/jFEsXPrakwlF6donYrnD" path="/api/v1/addresses/ext/{external\_id}" method="delete" %}
[openapi (1).json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2FgPJpWGqqFWMYx2kmNtx6%2Fopenapi%20\(1\).json?alt=media\&token=902a01ab-4e52-4748-9216-4a87f7bb4947)
{% endopenapi %}

{% openapi src="/files/jFEsXPrakwlF6donYrnD" path="/api/v1/addresses/ext/{external\_id}" method="patch" %}
[openapi (1).json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2FgPJpWGqqFWMYx2kmNtx6%2Fopenapi%20\(1\).json?alt=media\&token=902a01ab-4e52-4748-9216-4a87f7bb4947)
{% endopenapi %}

{% openapi src="/files/jFEsXPrakwlF6donYrnD" path="/api/v1/addresses/{address\_uid}/verify" method="post" %}
[openapi (1).json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2FgPJpWGqqFWMYx2kmNtx6%2Fopenapi%20\(1\).json?alt=media\&token=902a01ab-4e52-4748-9216-4a87f7bb4947)
{% endopenapi %}

{% openapi src="/files/jFEsXPrakwlF6donYrnD" path="/api/v1/addresses/ext/{external\_id}/verify" method="post" %}
[openapi (1).json](https://628482644-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVD9ONd5sB2hc2EELxt6t%2Fuploads%2FgPJpWGqqFWMYx2kmNtx6%2Fopenapi%20\(1\).json?alt=media\&token=902a01ab-4e52-4748-9216-4a87f7bb4947)
{% endopenapi %}


