Verifying an individual through manual KYC (mKYC)

Customers who have had their identity verified by other means ( such as face-to-face verification) can be manually approved to pass KYC by creating an mKYC approval.

📘

Note on Manual KYC (mKYC) results

Manual KYC verification is configurable to enforce validation against the individual entity to ensure there is enough evidence. This may be necessary depending on your compliance policy.

API Step

Step 1. Create Manual KYC Results

To generate manual KYC approval, begin by creating an individual entity, following the process outlined in use case 1.

Depending on the configurable mKYC validation requirements, you’ll also need to provide the specific documents (such as driver’s license, passport or other identity document) that should be captured as evidence of the verification. This will ensure the evidence is validated and audited as part of the mKYC verification.

Here’s a sample request that can be used to create an mKYC approval with a single identity document as evidence:

curl --location 'https://api.uat.frankie.one/v2/individuals/{{entityId}}/results/mkyc' \
--header 'api_key: {{your_apiKey}}' \
--header 'X-Frankie-CustomerID: {{your_CustomerID}}' \
--header 'X-Frankie-CustomerChildID: {{your_CustomerChildID}}' \
--header 'Content-Type: application/json' \
--data '{
  "approvedBy": "Mike Tyson",
  "approvedDocuments": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  ]
}'

Here is an example response showing a set of process results created using the previous request. As you can observe, there is a single process result for each of the following: name, date of birth, address, and document (such as a passport).

{
    "processResults": [
        {
            "class": "KYC",
            "createdAt": "2024-05-28T00:19:42.114183Z",
            "entityId": "{entityId}",
            "objectId": "{objectId}",
            "objectType": "NAME",
            "processResultId": "{processResultId}",
            "providerResult": {"name": "MANUAL"},
            "result": "MATCH",
            "schemaVersion": 2,
            "state": "COMPLETED",
            "stepName": "KYC",
            "systemStatus": "VALID"
        },
        {
            "class": "KYC",
            "createdAt": "2024-05-28T00:19:42.164316Z",
            "entityId": "950f483a-c064-4b77-9cce-0ae0f4ed1dec",
            "objectId": "{objectId}",
            "objectType": "DATE_OF_BIRTH",
            "processResultId": "{processResultId}",
            "providerResult": {"name": "MANUAL"},
            "result": "MATCH",
            "schemaVersion": 2,
            "state": "COMPLETED",
            "stepName": "KYC",
            "systemStatus": "VALID",
            "updatedAt": "2024-05-28T00:19:42.164316Z"
        },
        {
            "class": "KYC",
            "createdAt": "2024-05-28T00:19:42.199662Z",
            "entityId": "{entityId}",
            "objectId": "{objectId}",
            "objectType": "ADDRESS",
            "processResultId": "{processResultId}",
            "providerResult": {"name": "MANUAL"},
            "result": "MATCH",
            "schemaVersion": 2,
            "state": "COMPLETED",
            "stepName": "KYC",
            "systemStatus": "VALID",
            "updatedAt": "2024-05-28T00:19:42.199662Z"
        },
        {
            "class": "KYC",
            "createdAt": "2024-05-28T00:19:42.238474Z",
            "entityId": "{entityId}",
            "objectId": "{objectId}",
            "objectType": "DOCUMENT",
            "processResultId": "{processResultId}",
            "providerResult": {"name": "MANUAL"},
            "result": "MATCH",
            "schemaVersion": 2,
            "state": "COMPLETED",
            "stepName": "KYC",
            "systemStatus": "VALID",
            "updatedAt": "2024-05-28T00:19:42.238474Z"
        }
    ],
    "requestId": "{requestId}"
}

These process results will appear in the workflow step results for mKYC verification.

Step 2. Execute the workflow

Execute the workflow to verify the entity.

curl --location --request POST 'https://api.uat.frankie.one/v2/individuals/{entityId}/serviceprofiles/{serviceName}/workflows/{workflowName}/execute' \
--header 'api_key: {{your_apiKey}}' \
--header 'X-Frankie-CustomerID: {{your_CustomerID}}' \
--header 'X-Frankie-CustomerChildID: {{your_CustomerChildID}}' \
--header 'Content-Type: application/json' \

On success, you should see a mKYC workflow step (as indicated by the stepName of “**KYC**” and providerResult.name as “MANUAL” ) result as “**PASS**” and the process results created in the previous step will be present as processResults.

{
    "individual": {...},
    "requestId": "{requestId}",
    "workflowResult": {
    "workflowExecutionId": "{workflowExecutionId}",
    "startedAt": "2024-01-15T02:18:11.365Z",
    "endedAt": "2024-01-15T02:18:11.365Z",
    "workflowResult": "PASS",
    "status": "PASS",
    "workflowExecutionState": "COMPLETED",
    "riskAssessment": {...},
    "workflowStepResults": [
	{...},
	{
		"endedAt": "2024-05-14T04:04:12.66319Z",
		"objectId": "objectId",
		"objectType": "INDIVIDUAL",
"requestId": "requestId",
		"result": "PASS",
		"serviceProviders": [...],
		"startedAt": "2024-05-14T04:04:11.849152Z",
		"stepData": {...},
		"stepName": "KYC",
		"stepResultId": "{stepResultId}",
		"workflowExecutionId": "{stepResultId}"
		"processResults": [
			{
				"class": "KYC",
				"createdAt": "2024-05-28T00:19:42.114183Z",
				"entityId": "{stepResultId}",
				"objectId": "{objectId}",
				"objectType": "NAME",
				"processResultId": "{processResultId}",
				"providerResult": {...},
				"result": "MATCH",
				"schemaVersion": 2,
				"state": "COMPLETED",
				"stepName": "KYC",
				"systemStatus": "VALID",
				"updatedAt": "2024-05-28T00:19:42.114183Z"
			},
			{
				"class": "KYC",
				"createdAt": "2024-05-28T00:19:42.164316Z",
				"entityId": "{entityId}",
				"objectId": "{objectId}",
				"objectType": "DATE_OF_BIRTH",
				"processResultId": "{processResultId}",
				"providerResult": {...},
				"result": "MATCH",
				"schemaVersion": 2,
				"state": "COMPLETED",
				"stepName": "KYC",
				"systemStatus": "VALID",
				"updatedAt": "2024-05-28T00:19:42.164316Z"
			},
			{
				"class": "KYC",
				"createdAt": "2024-05-28T00:19:42.199662Z",
				"entityId": "{entityId}",
				"objectId": "{objectId}",
				"objectType": "ADDRESS",
				"processResultId": "{processResultId}",
				"providerResult": {...},
				"result": "MATCH",
				"schemaVersion": 2,
				"state": "COMPLETED",
				"stepName": "KYC",
				"systemStatus": "VALID",
				"updatedAt": "2024-05-28T00:19:42.199662Z"
			},
			{
				"class": "KYC",
				"createdAt": "2024-05-28T00:19:42.238474Z",
				"entityId": "{entityId}",
				"objectId": "{objectId}",
				"objectType": "DOCUMENT",
				"processResultId": "{processResultId}",
				"providerResult": {...},
				"result": "MATCH",
				"schemaVersion": 2,
				"state": "COMPLETED",
				"stepName": "KYC",
				"systemStatus": "VALID",
				"updatedAt": "2024-05-28T00:19:42.238474Z"
			}
		]
	},
	{...},
    ]
}
}

Diagram to show sequence of calls

Portal Steps

Step 1. Create a New entity

Similar to Use-case #1, you would have to select the New Entity button.

Step 2. Enable manual KYC (mKYC) from the Identity documents section.

Once in the Identity documents section, an option to toggle off the eKYC is available. Toggling it off would tell the system that the entity is tagged as mKYC. You are required to provide identity documents with attachments and consent is updated accordingly.
Once you've provided the entity information, select Save & verify or Save changes. Save & verify is the preferred method as it triggers the execution of the workflow against the entity.