You can use the rules engine to reduce the number of travel rule transactions landing in your Inbox where it needs manual review. This gives your compliance time more time to focus on the cases where there might be some risk that has been detected. It will also make the response times much faster for everyone, both sender and receiver of travel rule messages.
Ideally, more than 98 percent of all your transactions should automatically get a decision by your rules.
Setting rules
vaspDID | string | The DID of your VASP to which you want to apply the rules |
ruleSet | set of rules, one per direction | |
order | number | The Notabene Rue engine works with a waterfall logic where the order of the rules dictates the order and preference that the system applies rules. This means that the first rule you have in place will take priority over any other rules you have in place. |
actionRule | string | "APPROVE", "REJECT", "SEND_TO_INBOX" |
ruleCheck | string | "VASP", "JURISDICTION", "RISK_SCORE", "SANCTION_LIST_CHECK" |
ruleValue | string | Value of the chosen rule - For VASP and JURISDICTION, it is possible to send multiple values, separated by a comma |
source | string | If the ruleCheck is RISK_SCORE or SANCTION_LIST_CHECK, this is where you fill in the name of your service provider. |
In the request, you must specify both sets of rules (independent rules sets, one for each direction, incoming or outgoing), like this:
{
"vaspDID": "{{vaspDID}}",
"ruleSet": {
"incoming": [
{
"order": 0,
"actionRule": "REJECT",
"ruleCheck": "JURISDICTION",
"ruleValue": "AF,AS,AO,AI,BY,VG,KY,CF,CI,CU,KP,DM,CD,ER,ET,FJ,GW,GU,HT,IR,IQ,LR,LY,ML,MM,PW,PA,RU,RW,WS,SC,SL,SO,SS,SD,SY,TH,TT,US,VI,VU,VE,YE,ZW"
},
{
"order": 1,
"actionRule": "APPROVE",
"ruleCheck": "VASP",
"ruleValue": "did:ethr:0xc9dc97121e4d0ab0ec2b569c3a16858f5e309ef0"
},
{
"order": 2,
"actionRule": "SEND_TO_INBOX",
"ruleCheck": "RISK_SCORE",
"ruleValue": "highRisk",
"source": "CHAINALYSIS"
},
{
"order": 3,
"actionRule": "SEND_TO_INBOX",
"ruleCheck": "SANCTION_LIST_CHECK",
"ruleValue": "medium",
"source": "COMPLY_ADVANTAGE"
},
],
"outgoing": []
}}
Adding one more rule
It is not possible to append a rule to what has been already set as every call will overwrite your current configuration. Both sets of rules (incoming and outgoing) must be always specified.
Available parameters
Source
SANCTION_LIST_CHECK | RISK_SCORE |
---|---|
COMPLY_ADVANTAGE | CHAINALYSIS |
REFINITIV | ELLIPTIC |
TRM_SANCTIONS_SCREENING | TRM |
COINFIRM | |
MERKLE_SCIENCE |
ruleValue for SANCTION_LIST_CHECK
COMPLY_ADVANTAGE | REFINITIV | TRM_SANCTIONS_SCREENING |
---|---|---|
high | EXACT | true |
medium | MEDIUM | false |
low | WEAK | |
unknown | NO_MATCH |
ruleValue for RISK_SCORE
CHAINALYSIS | ELLIPTIC | TRM | COINFIRM | MERKLE_SCIENCE |
---|---|---|---|---|
highRisk | 10 | SEVERE | highRisk | NoRiskDetected |
mediumRisk | 9 | HIGH | mediumRisk | Info |
lowRisk | 8 | MEDIUM | lowRisk | Caution |
7 | LOW | Medium | ||
.... | null | High | ||
0 | Critical |
Fetching rules
If you wish to see which rules have been set, you can use the following call:
https://api.notabene.dev/rules/get
[
{
"id": "977806c5-3bc3-4c64-a2f5-2d1a2b20c628",
"vaspDID": "did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9",
"direction": "incoming",
"order": 1,
"actionRule": "REJECT",
"ruleCheck": "JURISDICTION",
"ruleValue": "AF,AS,AO,AI,BY,VG,KY,CF,CI,CU,KP,DM,CD,ER,ET,FJ,GW,GU,HT,IR,IQ,LR,LY,ML,MM,PW,PA,RU,RW,WS,SC,SL,SO,SS,SD,SY,TH,TT,US,VI,VU,VE,YE,ZW",
"source": null,
"createdAt": "2022-07-27T07:36:35.817Z",
"createdBy": "did:ethr:0xefbb14b73473ccfd610543af4b1c8fda027c57bf",
"jurisdictions": [
"AF",
"AS",
"AO",
"AI",
"BY",
"VG",
"KY",
"CF",
"CI",
"CU",
"KP",
"DM",
"CD",
"ER",
"ET",
"FJ",
"GW",
"GU",
"HT",
"IR",
"IQ",
"LR",
"LY",
"ML",
"MM",
"PW",
"PA",
"RU",
"RW",
"WS",
"SC",
"SL",
"SO",
"SS",
"SD",
"SY",
"TH",
"TT",
"US",
"VI",
"VU",
"VE",
"YE",
"ZW"
]
},
{
"id": "33f5f5a4-6659-427d-8b9e-8e6a7fffdf55",
"vaspDID": "did:ethr:0xd4bd902ec78578f33a20ff601504d2ab324cfab9",
"direction": "incoming",
"order": 2,
"actionRule": "APPROVE",
"ruleCheck": "VASP",
"ruleValue": "HelloCrypto, Notabene VASP CA",
"source": null,
"createdAt": "2022-07-27T07:36:35.817Z",
"createdBy": "did:ethr:0xefbb14b73473ccfd610543af4b1c8fda027c57bf",
"vasps": [
{},
{}
]
}
]
Template rules
If you are looking for a foundation to build your own rules on, you can have a look at the example below suggestion below or this API request:
Sample rules
FIrst rule - blacklisted jurisdictions
Second rule - blacklisted VASPs
Third/Fourth rule - send to manual review if blockchain analytics detects risk
Fifth/SIxth rule- send to manual review if sanctions screening detects riskSeventh rule - whitelisted jurisdictions
Eigth rule - whitelisted VASPs
{
"vaspDID": "{{vaspDID}}",
"ruleSet": {
"incoming": [
{
"order": 0,
"actionRule": "REJECT",
"ruleCheck": "JURISDICTION",
"ruleValue": "KP,IR",
"source": "string"
},
{
"order": 1,
"actionRule": "REJECT",
"ruleCheck": "VASP",
"ruleValue": "did:ethr:0x468f7efd398fc4557410d944c0e581e115d09e33",
"source": "null"
},
{
"order": 2,
"actionRule": "SEND_TO_INBOX",
"ruleCheck": "RISK_SCORE",
"ruleValue": "mediumRisk",
"source": "CHAINALYSIS"
},
{
"order": 3,
"actionRule": "SEND_TO_INBOX",
"ruleCheck": "RISK_SCORE",
"ruleValue": "highRisk",
"source": "CHAINALYSIS"
},
{
"order": 4,
"actionRule": "SEND_TO_INBOX",
"ruleCheck": "SANCTION_LIST_CHECK",
"ruleValue": "high",
"source": "COMPLY_ADVANTAGE"
},
{
"order": 5,
"actionRule": "SEND_TO_INBOX",
"ruleCheck": "SANCTION_LIST_CHECK",
"ruleValue": "medium",
"source": "COMPLY_ADVANTAGE"
},
{
"order": 6,
"actionRule": "APPROVE",
"ruleCheck": "JURISDICTION",
"ruleValue": "US,SG,CH,HK,KR,NL,JP,CA,MY,DE,AU,GB,ZA,IN,AR,AT,BE,BR,CN,DK,FI,FR,GR,IS,IE,IL,IT,MX,NZ,NO,PT,RU,SA,ES,SE,LU,LI,BG,HR,CY,CZ,EE,HU,LV,LT,MT,PL,RO,SK,SI",
"source": "null"
},
{
"order": 7,
"actionRule": "APPROVE",
"ruleCheck": "VASP",
"ruleValue": "did:ethr:0x940a4b2a0932733b842e4aa906761bb3d3bd8148",
"source": "null"
}
],
"outgoing": []
}}
If you want to know more about how to create amazing rules, have a look at this article
Not ready to respond (applicable to incoming transactions only)
{
"vaspDID": "{{vaspDID}}",
"ruleSet": {
"incoming": [
{
"order": 0,
"actionRule": "NOT_READY",
"ruleCheck": "ALL",
"ruleValue": "ALL"
}],
"outgoing": []
}
}
Basic rules (example for one direction)
{
"vaspDID": "{{vaspDID}}",
"ruleSet": {
"incoming": [
{
"order": 0,
"actionRule": "APPROVE",
"ruleCheck": "ALL",
"ruleValue": "ALL"
}],
"outgoing": []
}
}
Remove rules (example for both directions)
{
"vaspDID": "{{vaspDID}}",
"ruleSet": {
"incoming": [],
"outgoing": []
}
}