Our screening system is designed to monitor a watchlist of companies. We group these companies with the rightsholders, then perform screening agains PEP and Sanction lists.
We monitor the company structure for changes in ownership and board of directors. Based on this we turn on or off screening for the relevant persons.
Enin's screening system is flexible, and has different modes of screening.
We also provide a way to only screen persons, not connected to companies trough so called customer persons.
When you setup screening, you must choose if you want to manually look over the beneficial owners we connect to a company, or if you want this to happen automatically.
If you choose manual, Enin will suggest per company what persons should be screened. No persons will be screened until they are approved.
With automatic screening, the persons Enin detects as either beneficial or alternative beneficial owner will automatically be screened. And if there are changes to the beneficial owner structure, we will automatically screen the current owners.
Here we outline a step-by-step with basic instructions, to see examples and more details you can use our swagger, and scroll down to the "screening" section. Also if you have any question you can ask us in slack or send an email to team@enin.ai, and a developer will help you.
Documentation of all our endpoints and entities: https://api.enin.ai/analysis/
Start by creating a screening config. A screening config includes your settings, and is where you attatch your watchlist. You most likely need only one screening config.
You will need to note your screening-config-uuid (unique key), and use them in most of the endpoint you will call later.
/app-customer/<string:app_customer_uuid>/screening-config
with the following json.{
"auto_approve_monitoring_flag": bool
}
Check https://docs.enin.ai/en/api/managing-watchlists for information about managing watchlists, and how to find the desired watchlist uuid.
/v1/screening-config/{screening_config_uuid}/screening-config-watchlist
with the following json.{
"watchlist_uuid": string
}
/v1/screening-config/{screening_config_uuid}/screening-config-watchlist
and you will get a list of "screening-config-watchlist" entities, that contain the mapping between screening config and watchlist. Find the "uuid" of the link you want to break (screening-config-watchlist-uuid) . /v1/screening-config/{screening_config_uuid}/screening-config-watchlist/{screening_config_watchlist_uuid}
In the same manner as above, you need to choose what sanction lists to follow.
If you do not choose a sanction list, you will not recieve sanction hits.
/v1/screening-list-category
and find your desired list category./v1/screening-config/{screening_config_uuid}/screening-config-screening-list-category
with the following json:{
"screening_config_uuid": string
"screening_list_category_uuid": string // The category you are interested in
}
If you want to screen a person that is not part of Enin, you can create a "customer-person". The more information you can add about a person, the better screening-hits you will recieve.
/v1/screening-config/{screening_config_uuid}/customer-person
with the following json:{
"full_name": "string",
"birth_date": "2022-10-07",
"screening_config_uuid": "string",
"gender_uuid": "string",
}
You can then add extra information, such as national-identification-number (nin). In norwegian this is what is refered to as personnummer, and location information (addresses and so on).
/v1/customer-person/{customer_person_uuid}/customer-person-national-identification
with the following json:{
"customer_person_uuid": "string", <-- The person you want to add NIN to.
"national_identification_schema": "string", <-- NO,SE,DK
"national_identification_number": "string", <-- The national identification number
"geo_country_uuid": "string", <-- The country the person belongs to.
}
/v1/customer-person/{customer_person_uuid}/customer-person-location
with the following json:{
"customer_person_uuid": "string",
"person_location_type_uuid": "string",
"geo_location_uuid": "string",
"street_address": "string",
"postal_code": "string",
"postal_place": "string",
"municipality_code": "string",
"municipality_name": "string",
"country_code_two": "string",
"country_name": "string",
"street_name": "string",
"street_number": "string",
"street_letter": "string",
}
After you are happy with the person information you have added, you need to set the person to be screened. This does not happen automatically.
A entity is screened if there exists an entity-monitoring
with removed_flag=false
, and a entity-monitoring-descision
with approved_flag=true
.
Companies in your watchlist and persons related to these companies will automatically be screened if
auto_approve_monitoring_flag
is set totrue
on the screening config. If it is not set to true, you need to approve the entity monitorings. See below "Turn on and off screening for a entity."
Add customer person to screening
/v1/screening-config/{screening_config_uuid}/entity-monitoring-composite
with the following json{
"entity_monitoring": {
"related_company_uuid": "string", <-- Optional if person is connected to a company.
"monitoring_customer_person_uuid": "string", <-- The customer person
"entity_monitoring_type_uuid": "string", <-- Type of entity monitoring
"removed_flag": false,
"monitoring_comment": "string" <-- Why is this person screened.
},
"entity_monitoring_decision": {
"approved_flag": true,
"decision_comment": "string" <-- Why do you approve/decline
}
}
Type of entity monitoring You need to specify what type of monitoring you are doing. You might be adding a beneficial owner to a company. If person is not connected to a company you can use other.
/v1/entity-monitoring-type
[
{
"uuid": "string",
"entity_monitoring_type_key": "beneficial_owners",
},
{
"uuid": "string",
"entity_monitoring_type_key": "alternative_beneficial_owners",
},
{
"uuid": "string",
"entity_monitoring_type_key": "other",
},
{
"uuid": "string",
"entity_monitoring_type_key": "company",
}
]
As mentioned you can choose between automatic and manual screening. With manual screening you will have to approve beneficial or alternative beneficial owners per company.
A entity is screened if there exists an entity-monitoring
with removed_flag=false
, and a entity-monitoring-descision
with approved_flag=true
.
/v1/screening-config/{screening_config_uuid}/entity-monitoring-composite
. With these possible query params:
no_related_company_flag
(get entity monitorings for entities without a related company)related_company_uuid
(Filter on a related company)approval_status_key
(pending/active)To get persons that are not actively being screened, add the query param approval_status_key="pending"
. These entities need a entity_monitoring_decision.
{
"entity_monitoring": {
"uuid": "string",
"screening_config_uuid": "string",
"related_company_uuid": "string",
"monitoring_person_uuid": "string",
"monitoring_customer_person_uuid": "string",
"monitoring_company_uuid": "string",
"removed_flag": true,
"app_membership_uuid": "string",
"monitoring_comment": "string",
"monitoring_origin_key": "string",
"create_timestamp": "2022-10-07T09:41:24.786Z",
"monitoring_entity_uuid": "string",
"monitoring_entity_key": "string",
"entity_monitoring_type_uuid": "string",
"relationship_start_date": "2022-10-07T09:41:24.786Z",
"entity_inquiry_uuid": "string",
"entity_monitoring_reason_uuid": "string",
"app_url": "string"
},
"entity_monitoring_decision": [
{
"uuid": "string",
"entity_monitoring_uuid": "string",
"app_membership_uuid": "string",
"approved_flag": true,
"decision_origin_key": "string",
"decision_comment": "string",
"decision_timestamp": "2022-10-07T09:41:24.786Z",
"app_url": "string"
}
]
}
]
Approve entity monitoring
/v1/screening-config/{screening_config_uuid}/entity-monitoring-decision
with the following json{
"entity_monitoring_uuid": "string",
"approved_flag": true,
"decision_origin_key": "user",
"decision_comment": "string",
"decision_timestamp": "2022-10-07"
}
Screening-case-composite represents a paginated list of multiple entities. With the main entity being a screening case. It contains who is screened, the pep/sanction hit, and case-reviews.
Screening-case: A screening case represents a possible PEP or Sanction hit that can be reviewed by a user (or machine). PEP-flag and Sanction-flag lets you know what kind of hit this is. It can be both, but not usually.
In order to get the original PDF you can use the screening_case_report_uuid.
Entity Inquiry: Entity inquiry represents who is being screened, and one of 3 fields are set, depending on wheter or not a person, a company or a customer person is screened.
Screening Case Review Cases can be reviewed by users. Users then review if the persons match (entity_match_decision_type_uuid), and if it is considered a PEP/Sanction hit (screening_case_review_status_uuid).
Do a GET on /v1/screening-config/{screening_config_uuid}/screening-case-composite-collection?limit=100&offset=0
You can filter this list to get cases with different statuses by adding a query param:
?screening_case_status_identifiers="pending,ongoing,complete"
You can also filter on a related company
?related_company_uuid="f0e01f1e-f977-429f-ac12-0f0418901bfe"
To offset by one page, set an offset that is equal to the limit * number of pages. EG. limit=100&offset=100 will give you page 2. limit=100&offset=200 will give you page 3. You choose the limit, but a higher limit will give a slower response. You know you have reached the end when has_more = false, or the number of elements is less than your limit.
Result:
[
{
"count": 0,
"elements": [
{
"screening_case": { <--- the main entity (A possible pep or sanction hit).
"uuid": "string",
"grid_alert_uuid": "string",
"entity_inquiry_uuid": "string",
"assignee_app_membership_uuid": "string",
"screening_config_uuid": "string",
"created_timestamp": "2022-10-07T08:07:59.112Z",
"screening_case_report_uuid": "string",
"pep_flag": true,
"sanction_flag": true,
"app_url": "string"
},
"entity_inquiry": { <--- Tells us who/what is screened
"uuid": "string",
"screening_config_uuid": "string",
"grid_inquiry_uuid": "string",
"inquiry_person_uuid": "string", <-- One of these three are set
"inquiry_customer_person_uuid": "string", <-- One of these three are set
"inquiry_company_uuid": "string", <-- One of these three are set
"inquiry_entity_uuid": "string",
"inquiry_entity_key": "string",
"monitored_flag": true, <-- Determined by entity monitoring
"app_url": "string"
},
"related_companies": [],
"monitoring_person": {}, <-- One of these three are set
"monitoring_customer_person": {}, <-- One of these three are set
"monitoring_company": {}, <-- One of these three are set
"screening_case_review_composites": [ <-- List of reviews done by user.
{
"screening_case_review": {
"uuid": "string",
"screening_case_uuid": "string",
"reviewer_app_membership_uuid": "string",
"screening_case_review_status_uuid": "string",
"entity_match_decision_type_uuid": "string",
"created_timestamp": "2022-10-07T08:07:59.112Z",
"screening_case_review_comment": "string",
"save_timestamp": "2022-10-07T08:07:59.112Z",
"complete_timestamp": "2022-10-07T08:07:59.112Z",
"pep_confirmed_flag": true,
"app_url": "string"
},
"screening_case_review_status": {
"uuid": "string",
"screening_case_review_status_key": "string",
"app_url": "string"
},
"entity_match_decision_type": {
"uuid": "string",
"entity_match_decision_type_key": "string",
"app_url": "string"
},
"screening_case_reviewer_email": "string" <- Who did the review
}
],
"screening_state_aggregate": { <- Information about the case status.
"pep_flag": true,
"sanction_flag": true,
"pep_confirmed_flag": true,
"entity_match_decision_type_keys": [
"string"
],
"screening_case_review_status_keys": [
"string"
],
"screening_case_latest_update_timestamp": "2022-10-07"
}
}
],
"has_more": true
}
]
When you have found a screening-case that is interesting - note down the UUID, and you can fetch the pdf report:
/v1/screening-config/{screening_config_uuid}/screening-case-report
with the desired screening_case_uuid[
{
"uuid": "string",
"grid_alert_uuid": "string",
"pdf_base64": "string",
"app_url": "string"
}
]
You can also get screening cases from another composite-collection endpoint that is centered around "related companies". This will however not give you cases for "customer persons". One row, is one related company.
This endpoint will not give you cases for customer persons, if they don't have a related company
/v1/screening-config/{screening_config_uuid}/screening-related-company-status-composite-collection
[
{
"count": 0,
"elements": [
{
"related_company": {
"uuid": "string",
"name": "string",
"org_nr": "string",
"org_nr_schema": "string",
"app_url": "string"
},
"entity_monitoring_composites": [
{
"entity_monitoring": {
...
},
"entity_monitoring_decision": {
...
},
"entity_monitoring_status": {
...
}
}
],
"screening_case_composites": [
{
"screening_case": {
...
},
"screening_case_review_composites": [
{
"screening_case_review": {
...
},
"screening_case_review_status": {
...
},
"entity_match_decision_type": {
...
},
"screening_case_reviewer_email": "string"
}
]
}
],
"company_flag_history_composites": [
{
"uuid": "string",
"company_flag_history": {
...
},
"company": {
...
},
"company_flag_type": {
...
}
}
],
"related_company_screening_state_aggregate": {
"pep_flag": true,
"sanction_flag": true,
"pep_confirmed_flag": true,
"entity_match_decision_type_keys": [
"string"
],
"screening_case_review_status_keys": [
"string"
],
"active_entity_monitoring_entities_flag": true,
"pending_entity_monitoring_entities_flag": true,
"screening_case_latest_update_timestamp": "2022-10-07"
}
}
],
"has_more": true
}
]