Screen Individual - Determine AML Risk

In addition to KYC, generally our customers want to screen individuals they're onboarding against a range of globally recognized PEP, Sanctions and Watchlists to ensure they don't present a risk for money laundering or terrorism activities.

Screening an individual for AML risk is identical to kicking off a KYC process with the exception that the workflow being executed contains AML screening as a workflow step.

API Steps

Step 1. Create an Individual

To complete an AML screening process, you’ll need to provide a name at a minimum. Providing other personal information such as date of birth, residential address, id number and birthplace can help reduce the likelihood of false positives. Generally, consent must also be captured prior to performing any verification and so it recommended that it be provided in the request.

Here’s a sample request that can be used to create an individual entity with a name, date of birth, address, passport and consent.

curl --location 'http://api.{{env}}.frankie.one/v2/individuals' \
--header 'api_key: {{your_apiKey}}' \
--header 'X-Frankie-CustomerID: {{your_CustomerID}}' \
--header 'X-Frankie-CustomerChildID: {{your_CustomerChildID}}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
    "individual": {
        "name": 
            {
                "givenName": "JOHNNY",
                "middleName": "TAN",
                "familyName": "WILCOX"
            },
        "dateOfBirth": 
            {
                "year": "1990",
                "month": "05",
                "day": "15"
            },
        "addresses": 
            [
                {
                    "type": "RESIDENTIAL",
                    "streetName": "King",
                    "streetNumber": "123",
                    "streetType": "Street",
                    "locality": "Melbourne",
                    "subdivision": "VIC",
                    "country": "AUS",
                    "postalCode": "3000",
                    "status": "CURRENT"
                }
            ],
	"documents": 
{
		"IDENTITY": [
			{
				"primaryIdentifier": "P12345678",
				"type": "PASSPORT",
				"country": "AUS"
			}
			]
		},
        "consents": 
            [
                {
                    "type": "GENERAL"
                },
                {
                    "type": "CREDITHEADER"
                },
                {
                    "type": "DOCS"
                }
            ]
    }
}
'

Upon receiving the expected response, you’ll notice that names, addresses, dates of birth and documents are assigned unique IDs. These IDs facilitate future updates when needed.

200 OK
{
    "individual": {
        "addresses": [
            {
               "addressId": "{addressId}",
                "country": "AUS",
                "locality": "Melbourne",
                "postalCode": "3000",
                "status": "CURRENT",
                "streetName": "King",
                "streetNumber": "123",
                "streetType": "Street",
                "subdivision": "VIC",
                "type": "RESIDENTIAL"
            }
        ],
        "consents": [
            {
                "type": "GENERAL"
            },
            {
                "type": "CREDITHEADER"
            },
            {
                "type": "DOCS"
            }
        ],
        "createdAt": "2024-05-23T01:10:50.787294Z",
        "dateOfBirth": {
            "dateOfBirthId": "{dateOfBirthId}",
            "day": "15",
            "month": "05",
            "normalized": "1990-05-15",
            "type": "GREGORIAN",
            "year": "1990"
        },
        "entityId": "{entityId}",
        "entityType": "INDIVIDUAL",
        "name": {
            "familyName": "WILCOX",
            "givenName": "JOHNNY",
            "middleName": "TAN",
            "nameId": "{nameId}"
        },
	"documents": {
		"IDENTITY": [
			{
				"documentId": "{documentId}"
				"primaryIdentifier": "P12345678",
				"type": "PASSPORT",
				"country": "AUS"
			}
		]
	},
        "schemaVersion": 2
    },
    "requestId": "{requestId}"
}	

Step 2. Execute an Individual Verification Workflow

To execute a workflow, you need to provide an entityId, service name and workflow name:

  • {entityId} - a unique reference assigned to an individual or business entity within the FrankieOne system that serves as a way to uniquely identify and differentiate entities from one another
  • {serviceName} - name of the service profile in which you are assessing an entity. FrankieOne will issue a default service profile for use.
  • {workflowName} - name of the workflow as published in the workflow builder. FrankieOne will issue a default workflow for use.
POST 'https://api.uat.frankie.one/v2/individuals/{entityId}/serviceprofiles/{serviceName}/workflows/{workflowName}/execute'

Here’s a sample request that can be used to execute the workflow “aml_only” within the “KYC” service profile.

curl --location --request
POST 'https://api.latest.frankiefinancial.io/v2/individuals/{entityId}/serviceprofiles/KYC/workflows/aml_only/execute' \  
--header 'api_key: {{your_apiKey}}'  
--header 'X-Frankie-CustomerID: {{your_CustomerID}}'  
--header 'X-Frankie-CustomerChildID: {{your_CustomerChildID}}'  
--header 'Content-Type: application/json'

Upon successful execution of the workflow you should either get a response indicating a successful screening with no hits or a successful screening with potential hits.

Success - No Hit

{  
  "requestId": "01HN9XHZN6MGXM9JXG50K59Q85",  
  "workflowResult": {  
    "serviceProfileId": "{serviceProfileId}",
    "serviceName": "KYC",
    "entityId": "{entityId}",  
    "workflowName": "aml_only",  
    "workflowExecutionId": "{workflowExecutionId}",  
    "workflowExecutionState": "COMPLETED",  
    "result": "PASS",  
    "status": "PASS",  
    "riskAssessment": {...},  
    "steps": {  
                    "failed": \[],  
                    "incomplete": \[],  
                    "notApplicable": \[],  
                    "order": [  
                        "START",  
                        "AML",  
                        "RISK",  
                        "DECISION",  
                        "FINISH"  
                    ],  
                    "passed": [  
                        "START",  
                        "AML",  
                        "RISK",  
                        "DECISION",  
                        "FINISH"  
                    ]  
                }  
,  
    "entityType": "INDIVIDUAL",  
    "startedAt": "2024-05-29T07:42:41.674Z",  
    "endedAt": "2024-05-29T07:43:41.674Z",  
    "issues": [...],  
    "workflowStepResults": [...],  
  }  
}

Success - Potential Hits

{  
  "requestId": "01HN9XHZN6MGXM9JXG50K59Q85",  
  "workflowResult": {  
    "serviceProfileId": "{serviceProfileId}",
    "serviceName": "KYC",  
    "entityId": "{entityId}",  
    "workflowName": "aml_only",  
    "workflowExecutionId": "{workflowExecutionId}",  
    "workflowExecutionState": "COMPLETED",  
    "result": "FAIL",  
    "status": "FAIL",  
    "riskAssessment": {...},  
    "steps": {  
		"failed": [  
			"AML"  
		],  
		"incomplete": \[],  
		"notApplicable": \[],  
		"order": [  
			"START",  
			"AML",  
			"RISK",  
			"DECISION",  
			"FINISH"  
		],  
		"passed": [  
			"START",  
			"RISK",  
			"DECISION",  
			"FINISH"  
		]  
	},  
    "entityType": "INDIVIDUAL",  
    "startedAt": "2024-05-29T07:42:41.674Z",  
    "endedAt": "2024-05-29T07:43:41.674Z",  
    "issues": [...],  
    "workflowStepResults": [...],  
  }  
}

To review and classify the potential hits as true positive or false positive, see the next use case around classifying individuals.