# Getting Started

FACEKI Real-Time Identity Verification - KYC

## What is FACEKI Identity Verification?

Welcome to the FACEKI Developer Hub, your go-to resource for integrating and using our real-time user verification solution. Our solution offers a range of advanced verification solutions, including Liveness Check, Anti-Spoofing Check, Photo Face Match, Age Check, Gender Check, Nationality Check, and ID verification.

With FACEKI's real-time user verification, businesses can authenticate users quickly and securely while protecting against fraud and data discrepancies. Our solutions are designed to create a safer digital environment for all involved parties, allowing businesses to onboard customers safely and efficiently.

In this document hub, you will find comprehensive documentation, integration guides, tutorials, and API reference that will help you get started with using our solutions in your business. Whether you're a developer, a business owner, or an IT professional, our developer hub has the resources you need to integrate our solution with your systems and start verifying users in real-time.

Thank you for choosing FACEKI, and we look forward to helping you create a more secure and efficient digital environment for your business.

## How does it work?

1. User initiates verification: The user starts the verification process by submitting their photo or ID document through an app or website.
2. Liveness check: FACEKI's solution performs a liveness check to ensure that the user is physically present and not a spoofed image. This involves asking the user to perform a specific action, such as blinking or nodding their head.
3. Anti-spoofing check: FACEKI's solution uses advanced anti-spoofing technology to detect and prevent fraud attempts, such as the use of fake photos or videos.
4. Photo face match: FACEKI's solution compares the user's submitted photo or ID document with a live photo or video of the user to confirm that they are the same person.
5. Real-time object recognition: FACEKI's solution can also recognize real-time objects in the user's environment to ensure that the user is in a safe and appropriate setting.
6. Real-time face video recognition: In addition to photo verification, FACEKI's solution can also perform real-time face video recognition to further verify the user's identity.
7. Additional checks: Depending on the requirements of the business, additional checks may be performed, such as age verification, gender verification, and nationality verification.
8. Verification result: Once all the checks are completed, FACEKI's solution returns a verification result indicating whether the user is verified or not.

Overall, FACEKI's solution provides businesses with a fast, secure, and efficient way to authenticate users while also preventing fraud and creating a safer digital environment.

<br>

## Why FACEKI?

1. Advanced facial recognition technology: FACEKI's solution leverages advanced facial recognition technology to verify the identity of users in real time, providing a fast and efficient authentication process.
2. Liveness and anti-spoofing checks: FACEKI's solution includes liveness and anti-spoofing checks to ensure that the user is physically present and that fraud attempts are detected and prevented.
3. Real-time object and face video recognition: In addition to photo verification, FACEKI's solution can also recognize real-time objects in the user's environment and perform real-time face video recognition to further verify the user's identity.
4. Customizable verification checks: Depending on the requirements of the business, additional verification checks such as age, gender, and nationality verification can be added to the authentication process.
5. Secure and compliant: FACEKI's solution is designed with security and compliance in mind, with data encryption and compliance with GDPR and other data protection regulations.
6. User-friendly: To make life easier for your customers, FACEKI provides a liveness check that does not require your users to smile or do any specific moves. It also has a user-friendly interface that can be easily navigated.
7. Arabic + 200 languages support: For businesses with customers from the Middle East, FACEKI provides full Arabic language support plus more than +200 languages support.
8. Fast KYC process: FACEKI's solution can perform KYC within 30 seconds, saving time for both businesses and users.
9. Zero integration option: For businesses that don't want to integrate with FACEKI's solution, there is a "zero integration" option available.
10. Global document verification: FACEKI's solution can verify documents from over 180 countries, making it a great option for businesses that operate internationally.
11. AML/PEP checks: FACEKI's solution includes automatic and manual AML/PEP checks, further ensuring the security of the verification process.

Overall, FACEKI's solution offers a reliable, secure, and efficient way for businesses to authenticate users while also preventing fraud and creating a safer digital environment. With its additional features such as fast KYC, zero integration option, and AML/PEP checks, it is a great choice for businesses looking for a comprehensive verification solution.

## Verification Process Flow:

1. User accesses the dashboard and selects the number and type of documents to be verified.
2. User selects the desired liveness check option, which can include features such as a Moderate or High-security check.
3. User customizes the messaging that will be displayed to users during the verification process.
4. User sets up the Verification Process flow, which can be implemented in their API and SDK settings.

## Workflow:

Overall, the Verification Process flow and workflow are designed to be customizable and user-friendly, allowing businesses to tailor the verification process to their specific needs while ensuring the highest level of security and accuracy.

1. The user submits the document(s) to be verified through the API or SDK.
2. The FACEKI system receives the document(s) and checks for any discrepancies or signs of fraud.
3. If necessary, the system will prompt the user to perform the liveness check.
4. The system will then compare the user's face with the photo on the submitted document(s) to verify identity.
5. The system will conduct additional checks, such as age and gender verification, as requested by the user.
6. The system will generate a report indicating whether the document(s) and user identity have been successfully verified or if there are any issues or discrepancies.

<br>


# Integrations

Get started quickly using FACEKI's SDK to integrate identity verification into your app.

## API Integration

Integrate FACEKI document verification soulation to any platform, software, or app using our APIs.

[![](/files/IRPW0hC3YPXULbWCQwLQ)](/api-integration/verification-apis)

## Native Mobile App Integration

Integrate your native app with FACEKI in a very simple way using our SDKs for iOS and Android operating systems.

[![](/files/Jo34PwcAkks1ScLTOT9p)](/mobile-sdk/native-ios-sdk)[![](/files/0ldb7UVFEfdtHiR0pevN)](/mobile-sdk/native-android-sdk)

## Web App Integration

Integrate your web app and web platform using FACEKI SDK

[![](/files/a2dvHKJMRH4H9axXwCcX)](/web-sdk/react)![](/files/aoaeherGDi3OpArJd9kd)[![](/files/Hu4TGPhr8GYuruC2BkBq)](/web-sdk/laravel)

## Zero Integration

A no integration option for identity verifications. it can be used in varity of scenarios, or during development.

![](/files/9MeZ0JiTPYhsK8Rf8S4M)

{% hint style="info" %}
This funcation available directly from FACEKI dashboard. Zero (No) integration is required at all.
{% endhint %}


# Quick Guides

Accessing FACEKI dashboard

This guide will take you through FACEKI's dashboard that you have been granted access to upon subscribing to FACEKI.

### [Dashboard](/quick-guides/dashboard)

### [Integration Setting](#undefined)

### [SDK Settings](/quick-guides/sdk-settings)

### [Verification Settings](/quick-guides/verification-settings)

### [Verification Monitoring ](/quick-guides/verification-monitoring)


# Dashboard

Get the full overview of your current plan with up-to-date reports and detailed verification analytics.

## Login / Registration Page&#x20;

To access the dashboard, you can sign in using your Faceki email and password at the following URL: <https://apps.faceki.com/login>. If you don't remember your password, you can request a password reset by visiting <https://apps.faceki.com/forgot-password>. From there, you can enter the email address associated with your Faceki account and follow the instructions to reset your password. If you do not have an account, you can register for a new account by visiting <https://apps.faceki.com/pricing>. From there, you can select the plan that best suits your needs and complete the registration process. Once you have a Faceki account, you'll be able to sign in and access all of the features available in the dashboard.

<figure><img src="/files/TeelUakEhtDmSOl5GEhf" alt=""><figcaption><p>Login/ Registration screen</p></figcaption></figure>

## Subscription details

Once access the dashboard, you will be able to access to a section that includes the subscription details, the usage, and the quota.

<figure><img src="/files/vLKAAUkng7aJcAmhcSAB" alt=""><figcaption></figcaption></figure>

The subscription details page gives you an overview of your current plan, including its type and your usage statistics. You can see how much of your plan's usage quota you've used and how much you have remaining. If you need to use more than your remaining quota, you can enable **Excessive Use**, which will allow you to use additional quotas beyond your original plan.

<figure><img src="/files/7aeu98nj7DrKZGHx0ITM" alt=""><figcaption><p>Subscription Screen Dashboard</p></figcaption></figure>

On the dashboard, you'll find a subscription block where you can view the name of your current package and manage your subscription settings. If you click on "manage subscription," you'll be taken to the Subscription & Billing page where you can access your invoices, transactions, usage and limits, and company profile. This page allows you to manage your subscription and billing details in one convenient location.<br>

<figure><img src="/files/sO8EizeZnBDPoUXXTOsz" alt=""><figcaption><p>Subscription &#x26; Billing Screen</p></figcaption></figure>

## Analytic bars

This section gives you an up-to-date overview of the total verifications done, including how much time and money was saved and the analytics of the log-ins, signups, liveness and KYC.

<figure><img src="/files/z0c0ptw3sVDcRO8J3HrK" alt=""><figcaption></figcaption></figure>

**The analytic bars provides a holistic view of the total verifications performed, below is a more detailed explanation regarding each individual bar.**

**The time saved bar** shows the time saved during each verification done, the traditional average time of doing one verification is 18 minutes, our verification takes only 30 seconds.  &#x20;

**The money saved bar** shows the average cost saved during each verification, our verification cost is less than the traditional average wage of an employee preforming KYC.

<figure><img src="/files/D0BvxHtzdIuu8EDldGKk" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/95wSu4stayQVtV1r9hc5" alt=""><figcaption></figcaption></figure>


# SDK Settings

With SDK settings, you can customize your verification requirements and see immediate changes. Here's how to get started:

{% embed url="<https://www.youtube.com/watch?feature=youtu.be&v=W44LejBvNDM>" %}
SDK Setting Video
{% endembed %}

### SDK Setting Steps

![](/files/IQHeYV0fRaR0Z7ZUwb5E)

Step 1: [Access to workflow](https://apps.faceki.com/workflow/documents-to-verify) → Verification Workflow → Documents to Verify → Choose the number of documents.

<figure><img src="/files/8sUDxXN9OtTGolxvywZ7" alt=""><figcaption></figcaption></figure>

Step 2: Choose which type(s) of document you want your users to verify. You can choose from a range of options depending on your specific needs.

<figure><img src="/files/620ORJReZJi71J5j1Y2T" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
Depending on the selected number of documents chosen in step 1, you can choose different document types as shown above, in the order that you want your users to capture them.
{% endhint %}

<figure><img src="/files/wUGfnNVt1o14lEXOOKC9" alt=""><figcaption></figcaption></figure>

Step 3: Add a custom message under each verification option. This message will be displayed to your users after they complete the verification process. You can also insert a link that your users will be redirected to depending on their verification results. This allows you to customize the user experience and provide specific instructions or guidance as needed. You can use the following link for redirection: <https://apps.faceki.com/Workflow/Verification-Screens>.


# Verification Settings

In this section you can choose your verification settings.

## Data Storage Settings

<figure><img src="/files/PHhb4REuuYvhjFqVZdDr" alt=""><figcaption></figcaption></figure>

With the Data Storage settings, you can choose how to receive the results of your KYC verification requests. You have two options:

Option 1: Use our dashboard to view and manage your results. This option allows you to access your verification data through a user-friendly interface.

Option 2: Receive your results directly through the API. With this option, you can integrate the verification results into your own system or application without having to access the dashboard separately.

To access these settings and select the option that best suits your needs, visit this link: <https://apps.faceki.com/Settings/data-storage>.

## Invalid Status Settings

<figure><img src="/files/wcLUjOJz8jcFS7Av0IpN" alt=""><figcaption></figcaption></figure>

The Verification Settings section allows you to customize the KYC verification process and choose the documents you would like to include in the Invalid section. Some of the things you can choose to include in this section are:

* Document Type: You will Select the document you want to be invalid.
* Countries: Select the country, Any document from those countries will be accepted, all the rest will be invalid.
* Nationality: Any nationalities selected will be accepted, all the rest will be invalid.
* Age: It will be invalid if the user's age (years) is less than.
* Recaptured documents: The documents which is captured from the monitor or screen will be invalid if selected yes, if selected no will be valid.&#x20;

By selecting the options that best suit your needs, you can tailor the verification process to your specific requirements and improve the accuracy of your results. To access these settings and customize your verification rules, visit this link: <https://apps.faceki.com/Verification/Verification-Rules>.

<br>


# Verification Monitoring

The verification monitoring tab shows you every single verification done in more detail.

The verification Monitoring Page is a feature in the user dashboard that allows users to monitor the status of their KYC verification process. It displays real-time updates about the verification progress, including any pending documents or actions required by the user.

The page also provides a detailed breakdown of the user's verification status, including the date and time of the verification process, the documents submitted, and any comments or feedback provided by the verification team.

Users can use the Verification Monitoring Page to track their verification progress, view any errors or issues that may have arisen during the verification process, and take action to resolve them.

Overall, the Verification Monitoring Page provides users with a transparent and user-friendly way to monitor their KYC verification status and ensure that they meet all necessary compliance requirements.

## Steps Access to Verification Monitoring Page

1. [Log in](https://apps.faceki.com/login) to the user dashboard using your credentials.
2. Once you are logged in, navigate to the [verification monitoring section](https://apps.faceki.com/Verification/Monitoring), under Verification menu.
3. Click on the verification monitoring tab to access the screen.
4. Here, you will be able to view the status of all verification requests made by your users.
5. You can filter the results based on different parameters such as date range, verification type, and verification status.
6. Additionally, you can also view detailed reports for each verification request by clicking on the respective request ID.
7. You can also export the data for further analysis and reporting.
8. Once you are done, you can log out from the user dashboard.

<figure><img src="/files/4JRGMT1FxVsv9KgPlwTe" alt=""><figcaption><p>Under Verification Menu, select Verification monitoring</p></figcaption></figure>

## View by date

The top part of the verification section can help you customize the verifications done by day, week, month, year and a customized date selected by clicking on the calendar icon.

<figure><img src="/files/ViEhVcKUm0xbMXstxwPi" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/gIZtn8kWKgkGSI8mng6O" alt=""><figcaption><p>Select Action to Download CSV, Excel and delete selected KYC</p></figcaption></figure>

The bottom part provides a view of the verification metrics, including total number of verifications, and the total number of verification under each decision (accepted, declined, invalid and attempts that timed out)

Verification attempts are also recorded, a unique reference number is created with each attempt, and records can be viewed, searched, and exported.

## Verification details

<figure><img src="/files/1zvt4zvIaHhXz4lCAZEo" alt=""><figcaption></figcaption></figure>

You can click on the **view button** under the full details section to be able to view all of the verification checks preformed while verifying the users. Including the option to download the report or update the status.


# Integration Setting

A guide on how to access the dashboard and create a JWT secure token for integrations.

The Integration [Settings page](https://apps.faceki.com/integration/client-id) enables you to integrate API into your app or website using the FACEKI SDK. To get started, follow these steps:

1. After creating an account on the [pricing page.](https://apps.faceki.com/pricing)
2. Login to the [dashboard](https://apps.faceki.com/login) with your username and password.

<figure><img src="/files/TeelUakEhtDmSOl5GEhf" alt=""><figcaption></figcaption></figure>

3\. If you forget your access, you can retrieve it from the forget [password link ](https://apps.faceki.com/forgot-password)

![Forget password screen](/files/ZFRLCSWKLeZqGH8sRdhC)

4\. If you access the dashboard, navigate to the left menu >> **Integration** >> [**client-Id**](https://apps.faceki.com/integration/client-id)

5\. Click on the hidden eyes and securely copy the **Client ID** (token) & Client Secert.

<figure><img src="/files/aK59SQrm6apbo5i44YhD" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Please don't share the token with anybody, highly secure and confidential &#x20;
{% endhint %}


# Image Guidelines

Poor image quality may result in errors. Therefore, to reduce errors because of poor-quality images, note the following:

* Motion blur effect can significantly increase BPCER (“Bona Fide Presentation Classification Error Rate” or the rate of errors classifying a live person as a spoof).
* Fish-eye lenses are not supported by this API.
* The SDK  does not accept any fade, blur, not clear face image, two persons in a photo, stretch dimensions or filtered pictures and marks it as a spoof.
* The same image might result in a spoof based on SDK library confidence level, the same spoof picture may be a genuine picture in another capture due to SDK confidence level, an example may the background blur or fade the background confidence level failure, and another genuine picture the face may have an acceptable level, the face will pass liveliness, etc.&#x20;
* Texture filtering can significantly increase APCER. (“Attack Presentation Classification Error Rate” or the errors of allowing impostors through), therefore remove texture filtering
* Spotlights on the faces and nearest surroundings can significantly increase BPCER.
* Ill-lighted environment and colored light can significantly increase BPCER.
* Distance from the face should allow capturing the image that complies with Face Requirements. Please make sure that inter-pupillary distance, face size and recommended proportion of face on the image are preserved.
* SDK does not recognize small-dimension images as a small face with small height and weight dimension resolutions.&#x20;
* The face should have proper lighting and should fit in the oval with a proper ratio and dimensions.&#x20;

### Correct Sample

<figure><img src="/files/v2yqM4Do7kglLBENIb9N" alt=""><figcaption></figcaption></figure>

###

<figure><img src="/files/jkWvstc104aK9aeXPanq" alt=""><figcaption></figcaption></figure>

### Invalid Sample

<figure><img src="/files/aOuOqXudpTe94eApcAkM" alt=""><figcaption></figcaption></figure>

### Card Images Guidelines:

Please find the images below which will be marked invalid by the system

<figure><img src="/files/XVvqVXOIFcQoQcBghuPs" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/apkHcwBsbsyivKNrrXcT" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/K68xwbzXs4AXTQOVgD0M" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Likfctpb2VemVHNArK4y" alt=""><figcaption></figcaption></figure>

### Correct Sample:

<figure><img src="/files/irXc8A7OUNMFOZCUva4Y" alt=""><figcaption></figcaption></figure>


# Verification APIs

Detect human faces in photos and images. We will return information on facial features as coordinates on the image.

## Welcome to the latest version of our API documentation, version V2!&#x20;

As we continue to improve our services, we want to make sure you have the most up-to-date information available. If you're currently using our older API endpoint at **api.faceki.com**, we kindly ask that you switch to our new endpoint at sdk.faceki.com to take advantage of the latest features and improvements in version V2.

Thank you for choosing our service, and we're here to help if you have any questions or concerns during the migration process.

The Facki API follows the principles of Representational State Transfer (REST) architecture. This means that it utilizes commonly used HTTP response codes and verbs to facilitate communication between client and server. To ensure secure access, the API also uses token-based authentication. By adhering to these industry standards, Facki API aims to provide a reliable and familiar experience for developers integrating with our service.<br>

## Base URL

```
sdk.faceki.com
```

## Error Code

```
    INTERNAL_SYSTEM_ERROR = 1000,
    SUCCESS = 0,
    NO_RULES_FOR_COMPANY = 7001,
    NEED_REQUIRED_IMAGES = 8001,
    DOCUMENT_VERIFY_FAILED = 8002,
    PLEASE_TRY_AGAIN = 8003,
    FACE_CROPPED = 8004,
    FACE_TOO_CLOSED = 8005,
    FACE_NOT_FOUND = 8006,
    FACE_CLOSED_TO_BORDER = 8007,
    FACE_TOO_SMALL = 8008,
    POOR_LIGHT = 8009,
    ID_VERIFY_FAIL = 8010,
    DL_VERIFY_FAIL = 8011,
    PASSPORT_VERIFY_FAIL = 8012,
    DATA_NOT_FOUND = 8013,
    INVALID_VERIFICATION_LINK = 8014,
    VERIFICATION_LINK_EXPIRED = 8015,
    FAIL_TO_GENERATE_LINK = 8016,
    KYC_VERIFICATION_LIMIT_REACHED = 8017,
    SELFIE_MULTIPLE_FACES = 8018,
    FACE_BLURR = 8019
```

### Postman Collection

```
https://www.postman.com/facekiteam/workspace/official-faceki/collection
```


# Generate Token

Get an Authroization Bearer Token.

### Base URL

```
sdk.faceki.com
```

### Token Generation End Point

```
https://sdk.faceki.com/auth/api/access-token
```

## Token Authentication Postman

**Get a** Bearer Token **access token.**

Authentication for the Faceki API is achieved through token-based authentication. To authenticate requests made to the API, you must include an API token in the **Authorization** of your requests.

For the GET method, the "Authorization" header should include "Bearer Token" followed by your parameters. which are "clientId" and "clientSecret". These parameters help to ensure that the request is valid and authorized.

By including the necessary authentication details in your requests, you can ensure that your requests are processed correctly and securely.

This API is used to generate tokens, this token is client-specific and used to authenticate client identity before performing operations in the system.

{% hint style="info" %}
Method: GET

Authorization: Bearer Token

**Parameter:**

&#x20;clientId  \*(mandatary)

&#x20;clientSecret   \*(mandatory)
{% endhint %}

{% hint style="info" %}

```
Each token will have a token refresh expiry of 5 minutes/ 3600 seconds. 
```

{% endhint %}

{% hint style="info" %}
\*All Params are mandatary required
{% endhint %}

<figure><img src="/files/61j79SPFudAzXB8BuDi0" alt=""><figcaption><p>Choose GET, add End point api, then select Params, add ClientID &#x26; clientSecert</p></figcaption></figure>

<figure><img src="/files/TaZ31NmO2FrVeVPLt9iy" alt=""><figcaption><p>ClientID and CleintSecert should be selected in Parms</p></figcaption></figure>

<mark style="color:blue;">`GET`</mark> `https://sdk.faceki.com/auth/api/access-token`

#### Headers

| Name                                           | Type   | Description                                                                                                                                                                    |
| ---------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| clientSecret<mark style="color:red;">\*</mark> | String | <p>clientSecret will be found in the integration section.</p><p> <em>Example: <code>"clientSecret":"00nl0cuq780ur007spqspa94kq6rkn1fap1e0kdre7gdl97lvspk".</code></em><br></p> |
| clientid<mark style="color:red;">\*</mark>     | String | <p>(string, required) Client Id from integration settings.</p><p> <em>Example: <code>"client\_id":"0NTS4CBV8MVII02VGVSPICB00"</code>.</em><br></p>                             |
| Content-Type                                   | String | application/json                                                                                                                                                               |

{% tabs %}
{% tab title="200: OK " %}

```json
    "responseCode": 0,
    "data": {
        "access_token": "eyYkdDhiJuMVdFVFwvYWRPWFBCWTgxaCtTdEpcLytxUFVzSzFGSVlubXhSdUV4UWdJSkU9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiI3YnN2YW5jcGw0dGlvNjA2MDBwbjZobnI1OCIsInRva2VuX3VzZSI6ImFjY2VzcyIsInNjb3BlIjoia3ljXC9hbGwiLCJhdXRoX3RpbWUiOjE2ODI1MTM5NDksImlzcyI6Imh0dHBzOlwvXC9jb2duaXRvLWlkcC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb21cL21lLXNvdXRoLTFfNHRvVUVCem9mIiwiZXhwIjoxNjgyNTE3NTQ5LCJpYXQiOjE2ODI1MTM5NDksInZlcnNpb24iOjIsImp0aSI6Ijg2NjY3N2FkLTcyMDctNDFkOC1hZjI5LTk3OWU3MDA3YWViNiIsImNsaWVudF9pZCI6Ijdic3ZhbmNwbDR0aW82MDYwMHBuNmhucjU4In0.NTs5EgFlTlfslPIFZpqK5ABAj7oZMPlGMEvH4YeUHOSB0m7jo_TkzNTHm1GCp32Mz3qCBOHZPiic0PPPCFJ1p1A2o7WSmV4x6GQ9vS55kvOUcgaY0_wS37_2TQ7ObVUeMKAeuSqdE9QBWIiMDdZyslDb-pGlXjC4WE0g30TGbKuu2twungoUztyDS1HqBQUNnZ1T3HV0fOTYXwKmXjGCoP-gZHW3TRG8woF4QnPqoAYItV-aRT01fv2H62NdlL_VZ7A1cCHEClDIs5U5nagGjVWeIxJUTLQT0tFVvYVh6ViCaRCv2hlFcSrSwym0hvtGgPNV0H_eZ2yytoFjq0danQ",
        "expires_in": 3600,
        "token_type": "Bearer"
    }
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
{
  "status": false,
  "message": "",
  "statusCode": 422,
  "data": {}
}
```

{% endtab %}

{% tab title="402 " %}

```javascript
{
  "clientSecret": ""
}
```

{% endtab %}

{% tab title="403 " %}

```javascript
{
  "status": false,
  "message": "client id is required",
  "statusCode": 422,
  "data": {}
}
```

{% endtab %}
{% endtabs %}

### Response JSON format

<figure><img src="/files/uJMguyO2CbC828pBlofI" alt=""><figcaption></figcaption></figure>

Requests return a JSON object with the header:

```
// Content-Type: application/json
```

Responses return JSON with a consistent structure, except downloads.

You must make all your requests to the API over HTTPS and TLS 1.2, with Server Name Indication enabled. Any requests made over HTTP will fail.<br>

## Token authentication Codes <a href="#token-authentication" id="token-authentication"></a>

{% tabs %}
{% tab title="HTTP" %}

```html
Authorization: Token token=<YOUR_API_TOKEN>
```

{% endtab %}

{% tab title="Bash" %}

```
api_url='https://sdk.faceki.com/auth/api/access-token?clientId=7bsvancpl4tio60600pn6hnr58&clientSecret=1d5bssl48phc3vjfh5ljntkl9b2u6a0r80kit6vg08f9kpf70ch9'
curl -X GET $api_url
```

{% endtab %}

{% tab title="PHP" %}

```
$api_url='https://sdk.faceki.com/auth/api/access-token?clientId=00svancpl4tio60600pn6hnr58&clientSecret=0000sl48phc3vjfh5ljntkl9b2u6a0r80kit6vg08f9kpf70ch9';

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $api_url);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($curl);

curl_close($curl);
```

{% endtab %}

{% tab title="Java" %}

```
import requests

api_url = 'https://sdk.faceki.com/auth/api/access-token?clientId=7bsvancpl4tio60600pn6hnr58&clientSecret=1d5bssl48phc3vjfh5ljntkl9b2u6a0r80kit6vg08f9kpf70ch9'

response = requests.get(api_url)

output = response.content

```

{% endtab %}

{% tab title="JavaScript" %}

```
let api_url = 'https://sdk.faceki.com/auth/api/access-token?clientId=7bsvancpl4tio60600pn6hnr58&clientSecret=1d5bssl48phc3vjfh5ljntkl9b2u6a0r80kit6vg08f9kpf70ch9';

fetch(api_url)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

```

This code uses the `fetch` API to make a GET request to the API endpoint and returns a Promise that resolves to the response data. The `console.log` method is used to log the data to the console, and the `console.error` method is used to log any errors that may occur during the request.
{% endtab %}

{% tab title="Ruby" %}

```
require 'net/http'

api_url = URI('https://sdk.faceki.com/auth/api/access-token')
params = { clientId: '7bsvancpl4tio60600pn6hnr58', clientSecret: '1d5bssl48phc3vjfh5ljntkl9b2u6a0r80kit6vg08f9kpf70ch9' }
api_url.query = URI.encode_www_form(params)

response = Net::HTTP.get(api_url)

puts response

```

{% endtab %}

{% tab title="Python" %}

```
api_url = 'https://sdk.faceki.com/auth/api/access-token?clientId=00svancpl4tio60600pn6hnr58&clientSecret=0000sl48phc3vjfh5ljntkl9b2u6a0r80kit6vg08f9kpf70ch9'

import requests

response = requests.get(api_url)
output = response.json()

print(output)
```

{% endtab %}
{% endtabs %}

## Error Code

```
    INTERNAL_SYSTEM_ERROR = 1000,
    SUCCESS = 0,
    NO_RULES_FOR_COMPANY = 7001,
    NEED_REQUIRED_IMAGES = 8001,
    DOCUMENT_VERIFY_FAILED = 8002,
    PLEASE_TRY_AGAIN = 8003,
    FACE_CROPPED = 8004,
    FACE_TOO_CLOSED = 8005,
    FACE_NOT_FOUND = 8006,
    FACE_CLOSED_TO_BORDER = 8007,
    FACE_TOO_SMALL = 8008,
    POOR_LIGHT = 8009,
    ID_VERIFY_FAIL = 8010,
    DL_VERIFY_FAIL = 8011,
    PASSPORT_VERIFY_FAIL = 8012,
    DATA_NOT_FOUND = 8013,
    INVALID_VERIFICATION_LINK = 8014,
    VERIFICATION_LINK_EXPIRED = 8015,
    FAIL_TO_GENERATE_LINK = 8016,
    KYC_VERIFICATION_LIMIT_REACHED = 8017,
    SELFIE_MULTIPLE_FACES = 8018,
    FACE_BLURR = 8019
```

### /kyc-verification


# Get KYC Rules

This API endpoint allows clients to retrieve the rules associated with a specific KYC workflow based on the document type.

This API endpoint allows clients to retrieve the rules associated with a specific KYC workflow based on the document type. The KYC rules provide clients with the necessary information on the mandatory fields and additional requirements for the KYC process.

### Request Header:

* `Authorization`: Bearer \[token] (required): The authentication token for accessing the API.

Response: Upon a successful request, the API will return a response containing the KYC rules associated with the specified document type.

### Base URL

```
sdk.faceki.com
```

### KYC Rules End Point API

```
https://sdk.faceki.com/kycrules/api/kycrules
```

<mark style="color:blue;">`GET`</mark> `https://sdk.faceki.com/kycrules/api/kycrules`

#### Headers

| Name                                             | Type   | Description      |
| ------------------------------------------------ | ------ | ---------------- |
| Content-Type:<mark style="color:red;">\*</mark>  | String | application/json |
| Authorization:<mark style="color:red;">\*</mark> | String | Bearer \[token]  |

{% tabs %}
{% tab title="200: OK " %}

```json
{
    "responseCode": 0,
    "data": {
        "_id": "123",
        "companyId": "1234",
        "__v": 0,
        "allowedCountries": [],
        "allowedKycDocuments": [
            "Passport"
        ],
        "allowedNationalities": [],
        "createdAt": "2023-06-08T06:50:21.354Z",
        "dataStorageTime": "FOREVER",
        "declined": {
            "redirect_url": "https://www.faceki.com",
            "message": "Declined!"
        },
        "invalid": {
            "redirect_url": "https://www.faceki.com",
            "message": "Invalid!"
        },
        "invalidDocuments": [],
        "isRecapturedDocumentInvalid": false,
        "link": "",
        "livenessCheckType": "MODERATE",
        "multiKYCEnabled": true,
        "status": "ACTIVE",
        "storedData": true,
        "success": {
            "redirect_url": "https://www.faceki.com",
            "message": "Success!"
        },
        "updatedAt": "2023-06-10T12:01:25.835Z",
        "validAge": 18
    }
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="403: Forbidden " %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="404: Not Found " %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Method: GET

Authorization: Bearer Token
{% endhint %}

<figure><img src="/files/XP18BfRUVQD2Pqf6Lghv" alt=""><figcaption></figcaption></figure>

By utilizing the "Get KYC Rules" API, clients can retrieve the specific rules and requirements associated with different KYC workflows, allowing them to tailor their user interfaces and data collection processes accordingly. This enhances the overall user experience and ensures compliance with KYC regulations.

<br>

<br>


# Single KYC Verification

KYC Verification API Single Document

<figure><img src="/files/BKk6zHhndLjW5hw4Cy8m" alt=""><figcaption><p>Diagram flow e-KYC faceki</p></figcaption></figure>

### Base URL

```
sdk.faceki.com
```

### KYC Verification End Point API

```
https://sdk.faceki.com/kycverify/api/kycverify/kyc-verification
```

Welcome to the developer hub for the FACEKI KYCVerify API. Our API is designed to provide secure and accurate identity verification for your customers. This API call uses the POST method and requires Authorization: Bearer Token for authentication.

To verify national identity, passport, driving license, and other legal documents, simply call the API endpoint at <https://sdk.faceki.com/kycverify/api/kycverify/kyc-verification>. Our API can perform various security checks and face-matching to ensure the authenticity of the document and its holder.

Our API supports more than 200+ languages and uses an advanced OCR engine to extract all data from the documents. With this level of support, you can confidently verify customer identities from all around the world.

Once you get access to the user dashboard for clientId and clientSecret, the user also has to setup [KYC workflow and SDK settings](/quick-guides/sdk-settings).

Please note that three images are required for verification:&#x20;

* Document Front image (\*Mandatory)
* Document Back image (\*Mandatory)
* Face image (\*Mandatory)

{% hint style="info" %}
Method: **POST**

`Authorization: Bearer Token`

**Parameter**: &#x20;

`selfie_image (mandatary)`

`doc_front_image (mandatary)`

`doc_back_image (mandatary)`
{% endhint %}

<figure><img src="/files/eWOlIr4DHmsCviLcLlOh" alt=""><figcaption><p>Diagram Steps</p></figcaption></figure>

## To get started with this API, please follow the steps below:

1. Make a POST request to the URL <https://sdk.faceki.com/kycverify/api/kycverify/kyc-verification>.
2. Set the Authorization type to "Bearer Token" in the request header. You will need to generate a bearer token from /[getToken](/api-integration/verification-apis/generate-token) API.
3. In the body of your request, include the following parameters:

* selfie\_image (mandatory): This parameter should contain the image of the individual's face to be verified.
* doc\_front\_image (mandatory): This parameter should contain the image of the front of the identity document to be verified.
* doc\_back\_image (mandatory): This parameter should contain the image of the back of the identity document to be verified.

4. Send the request to receive a JSON response in the application/JSON format.

<figure><img src="/files/ToYxXPEmElBF0q74uF0L" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/i7x1wYHeMQXtZ4CQlVZt" alt=""><figcaption></figcaption></figure>

<mark style="color:green;">`POST`</mark> `https://sdk.faceki.com/kycverify/api/kycverify/kyc-verification`

#### Headers

| Name                                            | Type   | Description         |
| ----------------------------------------------- | ------ | ------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | \[token]            |
| Content-Type<mark style="color:red;">\*</mark>  | String | multipart/form-data |

#### Request Body

| Name                                                | Type | Description    |
| --------------------------------------------------- | ---- | -------------- |
| selfie\_image<mark style="color:red;">\*</mark>     | File | <p></p><p></p> |
| doc\_front\_image<mark style="color:red;">\*</mark> | File |                |
| doc\_back\_image<mark style="color:red;">\*</mark>  | File |                |

{% tabs %}
{% tab title="200: OK " %}

```json
{
    "responseCode": 0,
    "data": {
        "verification": {
            "passed": true,
            "result": {
                "face": true,
                "notexpired": true
            }
        },
        "face": {
            "isIdentical": true,
            "confidence": 0.9999440002441407
        },
        "confidence": {
            "backSideId": 1,
            "issuerOrg_full": 1,
            "issuerOrg_iso2": 1,
            "issuerOrg_iso3": 1,
            "document": 0.9222802519798279,
            "documentName": 1,
            "documentNumber": 0.992,
            "documentSide": 1,
            "documentType": 1,
            "face": 0.9468276304459636,
            "face0": 190.1085205078125,
            "firstName": 0.959,
            "fullName": 0.959,
            "internalId": 1,
            "lastName": 0.968,
            "middleName": 0.985,
            "nationality_full": 0.991,
            "reverseId": 1,
            "signature": 0.2879074811935425,
            "signature0": 0.2879074811935425
        },
        "result": {
            "backSideId": "8886",
            "issuerOrg_full": "Bahrain",
            "issuerOrg_iso2": "BH",
            "issuerOrg_iso3": "BHR",
            "document": "",
            "documentName": "Identity Card",
            "documentNumber": "987654321",
            "documentSide": "FRONT",
            "documentType": "I",
            "face": "",
            "face0": "",
            "firstName": "JOHN",
            "fullName": "JOHN DOE",
            "internalId": "437",
            "lastName": "DOE",
            "middleName": "JAMES",
            "nationality_full": "AMERICAN",
            "reverseId": "8886",
            "signature": "",
            "signature0": ""
        },
        "authentication": {
            "breakdown": {
                "recapture_check": {
                    "passed": true
                },
                "data_visibility": {
                    "passed": true
                },
                "image_quality": {
                    "passed": true
                },
                "feature_referencing": {
                    "passed": true
                },
                "exif_check": {
                    "passed": true
                },
                "publicity_check": {
                    "passed": true
                },
                "text_analysis": {
                    "passed": true
                },
                "biometric_analysis": {
                    "passed": true
                },
                "security_feature_check": {
                    "passed": true
                }
            },
            "warning": []
        },
        "aml": [],
        "responseID": "6e9fde27009444d59ce8e4d2e6d5d659",
        "images": {
            "doc_front_image": "imagelink",
            "doc_back_image": "imagelink",
            "selfie_image": "imagelink"
        },
        "link": "client",
        "requestId": "8b62fa2f-9e04-4036-82d5-154c513a5d47"
    }
}

```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

```
// Content-Type: application/json
```

Responses return JSON with a consistent structure, except downloads.

You must make all your requests to the API over HTTPS and TLS 1.2, with Server Name Indication enabled. Any requests made over HTTP will fail.

## Error Code

```
    INTERNAL_SYSTEM_ERROR = 1000,
    SUCCESS = 0,
    NO_RULES_FOR_COMPANY = 7001,
    NEED_REQUIRED_IMAGES = 8001,
    DOCUMENT_VERIFY_FAILED = 8002,
    PLEASE_TRY_AGAIN = 8003,
    FACE_CROPPED = 8004,
    FACE_TOO_CLOSED = 8005,
    FACE_NOT_FOUND = 8006,
    FACE_CLOSED_TO_BORDER = 8007,
    FACE_TOO_SMALL = 8008,
    POOR_LIGHT = 8009,
    ID_VERIFY_FAIL = 8010,
    DL_VERIFY_FAIL = 8011,
    PASSPORT_VERIFY_FAIL = 8012,
    DATA_NOT_FOUND = 8013,
    INVALID_VERIFICATION_LINK = 8014,
    VERIFICATION_LINK_EXPIRED = 8015,
    FAIL_TO_GENERATE_LINK = 8016,
    KYC_VERIFICATION_LIMIT_REACHED = 8017,
    SELFIE_MULTIPLE_FACES = 8018,
    FACE_BLURR = 8019
```


# Multiple KYC Verification

The KYC Verification API allows you to verify multiple types of legal documents, including national identity cards, passports, and driving licenses

### Base URL

```
sdk.faceki.com
```

### Multiple KYC Verification End Point API

```
https://sdk.faceki.com/kycverify/api/kycverify/multi-kyc-verification
```

{% hint style="info" %}
**HTTP Method: POST**

Authentication: `Bearer Token`

**Parameters:**

* `selfie_image (mandatory)`
* `id_front_image (mandatory)`
* `id_back_image (mandatory)`
* `dl_front_image (optional)`
* `dl_back_image (optional)`
* `pp_front_image (optional)`
* `pp_back_image (optional)`
  {% endhint %}

## Description:

The KYC Verification API Multiple Document allows for the verification of multiple identity documents, including national ID, passport, and driving license. The API uses the HTTP **POST** method, and authentication is performed using a Bearer Token.

In order to perform verification, the API requires the following mandatory parameters: selfie\_image, id\_front\_image, and id\_back\_image. These images should be in a supported format, and should meet the quality standards specified in the API documentation.

Optionally, the API also allows for the inclusion of images for the front and back of a driving license (dl\_front\_image and dl\_back\_image), as well as images for the front and back of a passport (pp\_front\_image and pp\_back\_image).

Upon successful verification, the API will return an application/json response containing the results of the verification process.

Note that additional fees may apply for the verification of multiple documents. Please refer to the pricing section of the API documentation for more information.

## Steps  for multiple KYC verification:

1. Generate a Bearer Token by making a POST request to /getToken API endpoint.
2. Make a POST request to <https://sdk.faceki.com/kycverify/api/kycverify/multi-kyc-verification> URL.
3. Set the Authorization type to "Bearer Token" in the request header using the token obtained in step 1.
4. In the body of the request, add the following parameters:

* Selfie\_image (mandatory)
* id\_front\_image (mandatory)&#x20;
* id\_back\_image (mandatory)
* dl\_front\_image (optional)
* dl\_back\_image (optional)
* pp\_front\_image (optional)
* pp\_back\_image (optional)

5. Send the request to the API.
6. The API will verify the identity documents and perform various security checks and face matching.
7. The response will be in JSON format and will contain the verification results.<br>

<figure><img src="/files/QbhAZCYObafLS032kmw3" alt=""><figcaption><p>First Step to Select POST, then add the API End Point and click on Authorization to add Bearer Token</p></figcaption></figure>

<figure><img src="/files/Vz3eoRpVmPa2J2bwfDbf" alt=""><figcaption><p>After adding Bearer Token then go to Body and add Keys as files</p></figcaption></figure>

<mark style="color:green;">`POST`</mark> `https://sdk.faceki.com/kycverify/api/kycverify/multi-kyc-verification`

#### Headers

| Name                                             | Type   | Description         |
| ------------------------------------------------ | ------ | ------------------- |
| Content-Type:<mark style="color:red;">\*</mark>  | String | multipart/form-data |
| Authorization:<mark style="color:red;">\*</mark> | String | \[token]            |

#### Request Body

| Name                                               | Type | Description                   |
| -------------------------------------------------- | ---- | ----------------------------- |
| Selfie\_image<mark style="color:red;">\*</mark>    | File | Live Selfie infront of Camera |
| id\_front\_image<mark style="color:red;">\*</mark> | File | id - Identity Document Front  |
| id\_back\_image<mark style="color:red;">\*</mark>  | File | id - Identity Document Back   |
| dl\_front\_image                                   | File | dl - Driving Licesne Front    |
| dl\_back\_image                                    | File | dl - Driving Licesne Back     |
| pp\_front\_image                                   | File | pp - Passport front           |
| pp\_back\_image                                    | File | pp - Passport front           |

{% tabs %}
{% tab title="200: OK " %}

```json
{
  "data": {
    "requestId": "b4b205b3-236f-42c7-b2f8-59c4c4bc6a0d",
    "ppKycData": {
      "responseCode": 0,
      "data": {
        "verification": {
          "passed": true,
          "result": {
            "face": true,
            "notexpired": true
          }
        },
        "face": {
          "isIdentical": true,
          "confidence": 0.9999440002441407
        },
        "confidence": {
          "backSideId": 0.876,
          "issuerOrg_full": 0.901,
          "issuerOrg_iso2": 0.812,
          "issuerOrg_iso3": 0.765,
          "document": 0.654,
          "documentName": 0.876,
          "documentNumber": 0.901,
          "documentSide": 0.812,
          "documentType": 0.987,
          "face": 0.765,
          "face0": 0.654,
          "firstName": 0.876,
          "fullName": 0.901,
          "internalId": 0.812,
          "lastName": 0.987,
          "middleName": 0.765,
          "nationality_full": 0.654,
          "reverseId": 0.876,
          "signature": 0.901,
          "signature0": 0.812
        },
        "result": {
          "backSideId": "8886",
          "issuerOrg_full": "Random Country",
          "issuerOrg_iso2": "RC",
          "issuerOrg_iso3": "RCO",
          "document": "",
          "documentName": "Passport",
          "documentNumber": "987654321",
          "documentSide": "FRONT",
          "documentType": "P",
          "face": "",
          "face0": "",
          "firstName": "Jane",
          "fullName": "Jane Smith",
          "internalId": "789",
          "lastName": "Smith",
          "middleName": "Random Middle",
          "nationality_full": "Random Nationality",
          "reverseId": "8886",
          "signature": "",
          "signature0": ""
        },
        "authentication": {
          "breakdown": {
            "recapture_check": {
              "passed": true
            },
            "data_visibility": {
              "passed": true
            },
            "image_quality": {
              "passed": true
            },
            "feature_referencing": {
              "passed": true
            },
            "exif_check": {
              "passed": true
            },
            "publicity_check": {
              "passed": true
            },
            "text_analysis": {
              "passed": true
            },
            "biometric_analysis": {
              "passed": true
            },
            "security_feature_check": {
              "passed": true
            }
          },
          "warning": []
        },
        "aml": [],
        "responseID": "a4606f4097ec4898b8216d918bfc6cac",
        "images": {
          "doc_front_image": "https://example.com/doc_front.jpg",
          "doc_back_image": "",
          "selfie_image": "https://example.com/selfie.jpg"
        }
      }
    },
    "dlKycData": {
      "responseCode": 0,
      "data": {
        "verification": {
          "passed": false,
          "result": {
            "face": true,
            "notexpired": true
          }
        },
        "face": {
          "isIdentical": true,
          "confidence": 0.9999440002441407
        },
        "confidence": {
          "backSideId": 1,
          "issuerOrg_full": 1,
          "issuerOrg_iso2": 1,
          "issuerOrg_iso3": 1,
          "document": 0.9222802519798279,
          "documentName": 1,
          "documentNumber": 0.992,
          "documentSide": 1,
          "documentType": 1,
          "face": 0.9468276304459636,
          "face0": 190.1085205078125,
          "firstName": 0.959,
          "fullName": 0.959,
          "internalId": 1,
          "lastName": 0.968,
          "middleName": 0.985,
          "nationality_full": 0.991,
          "reverseId": 1,
          "signature": 0.2879074811935425,
          "signature0": 0.2879074811935425
        },
        "result": {
          "backSideId": "8886",
          "issuerOrg_full": "Bahrain",
          "issuerOrg_iso2": "BH",
          "issuerOrg_iso3": "BHR",
          "document": "",
          "documentName": "Driving License",
          "documentNumber": "970343809",
          "documentSide": "FRONT",
          "documentType": "D",
          "face": "",
          "face0": "",
          "firstName": "John",
          "fullName": "John Doe",
          "internalId": "437",
          "lastName": "Doe",
          "middleName": "Random Middle",
          "nationality_full": "Random Nationality",
          "reverseId": "8886",
          "signature": "",
          "signature0": ""
        },
        "authentication": {
          "breakdown": {
            "recapture_check": {
              "passed": true
            },
            "data_visibility": {
              "passed": true
            },
            "image_quality": {
              "passed": true
            },
            "feature_referencing": {
              "passed": true
            },
            "exif_check": {
              "passed": true
            },
            "publicity_check": {
              "passed": true
            },
            "text_analysis": {
              "passed": true
            },
            "biometric_analysis": {
              "passed": true
            },
            "security_feature_check": {
              "passed": true
            }
          },
          "warning": [
            "Invalid Document Type"
          ]
        },
        "aml": [],
        "responseID": "e472cedeffc148789bbc9c9be3535477",
        "images": {
          "doc_front_image": "https://example.com/doc_front.jpg",
          "doc_back_image": "https://example.com/doc_back.jpg",
          "selfie_image": "https://example.com/selfie.jpg"
        }
      }
    },
    "idKycData": {
      "responseCode": 0,
      "data": {
        "verification": {
          "passed": true,
          "result": {
            "face": true,
            "notexpired": true
          }
        },
        "face": {
          "isIdentical": true,
          "confidence": 0.9999440002441407
        },
        "confidence": {
          "backSideId": 1,
          "issuerOrg_full": 1,
          "issuerOrg_iso2": 1,
          "issuerOrg_iso3": 1,
          "document": 0.9222802519798279,
          "documentName": 1,
          "documentNumber": 0.992,
          "documentSide": 1,
          "documentType": 1,
          "face": 0.9468276304459636,
          "face0": 190.1085205078125,
          "firstName": 0.959,
          "fullName": 0.959,
          "internalId": 1,
          "lastName": 0.968,
          "middleName": 0.985,
          "nationality_full": 0.991,
          "reverseId": 1,
          "signature": 0.2879074811935425,
          "signature0": 0.2879074811935425
        },
        "result": {
          "backSideId": "8886",
          "issuerOrg_full": "Bahrain",
          "issuerOrg_iso2": "BH",
          "issuerOrg_iso3": "BHR",
          "document": "",
          "documentName": "Identity Card",
          "documentNumber": "970343809",
          "documentSide": "FRONT",
          "documentType": "I",
          "face": "",
          "face0": "",
          "firstName": "Alice",
          "fullName": "Alice Johnson",
          "internalId": "437",
          "lastName": "Johnson",
          "middleName": "Random Middle",
          "nationality_full": "Random Nationality",
          "reverseId": "8886",
          "signature": "",
          "signature0": ""
        },
        "authentication": {
          "breakdown": {
            "recapture_check": {
              "passed": true
            },
            "data_visibility": {
              "passed": true
            },
            "image_quality": {
              "passed": true
            },
            "feature_referencing": {
              "passed": true
            },
            "exif_check": {
              "passed": true
            },
            "publicity_check": {
              "passed": true
            },
            "text_analysis": {
              "passed": true
            },
            "biometric_analysis": {
              "passed": true
            },
            "security_feature_check": {
              "passed": true
            }
          },
          "warning": []
        },
        "aml": [],
        "responseID": "1b4c7a3a316e43c38073ea3708ccf18b",
        "images": {
          "doc_front_image": "https://example.com/doc_front.jpg",
          "doc_back_image": "https://example.com/doc_back.jpg",
          "selfie_image": "https://example.com/selfie.jpg"
        }
      }
    }
  },
  "responseCode": 0
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

<pre class="language-javascript"><code class="lang-javascript"><strong>{
</strong>    "statusCode": 400,
    "message": "Unexpected field",
    "error": "Bad Request"
}
</code></pre>

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="404: Not Found " %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

You must make all your requests to the API over HTTPS and TLS 1.2, with Server Name Indication enabled. Any requests made over HTTP will fail.

Responses return JSON with a consistent structure, except downloads.

```
// Content-Type: application/json

```

## Error Code

```
    INTERNAL_SYSTEM_ERROR = 1000,
    SUCCESS = 0,
    NO_RULES_FOR_COMPANY = 7001,
    NEED_REQUIRED_IMAGES = 8001,
    DOCUMENT_VERIFY_FAILED = 8002,
    PLEASE_TRY_AGAIN = 8003,
    FACE_CROPPED = 8004,
    FACE_TOO_CLOSED = 8005,
    FACE_NOT_FOUND = 8006,
    FACE_CLOSED_TO_BORDER = 8007,
    FACE_TOO_SMALL = 8008,
    POOR_LIGHT = 8009,
    ID_VERIFY_FAIL = 8010,
    DL_VERIFY_FAIL = 8011,
    PASSPORT_VERIFY_FAIL = 8012,
    DATA_NOT_FOUND = 8013,
    INVALID_VERIFICATION_LINK = 8014,
    VERIFICATION_LINK_EXPIRED = 8015,
    FAIL_TO_GENERATE_LINK = 8016,
    KYC_VERIFICATION_LIMIT_REACHED = 8017,
    SELFIE_MULTIPLE_FACES = 8018,
    FACE_BLURR = 8019
```


# KYC Summary API

This API allows clients to retrieve a list of summary KYC's.

Description: The KYC Summary List API allows clients to retrieve a list of KYC summaries. This list provides an overview of the completed KYC process for each status, including the status of the total verification and any relevant details, such as invalid, declined, and accepted verifications.

### Base URL

```
sdk.faceki.com
```

### Summary KYC List End Point API

```
https://sdk.faceki.com/kycverify/api/kycverify/kyc-verify-summary
```

{% hint style="info" %}
Method: GET

Authorization: Bearer Token
{% endhint %}

<figure><img src="/files/fzGov9ATWcOEjFjkzyGB" alt=""><figcaption></figcaption></figure>

<mark style="color:blue;">`GET`</mark> `https://sdk.faceki.com/kycverify/api/kycverify/kyc-verify-summary`

#### Headers

| Name                                             | Type   | Description      |
| ------------------------------------------------ | ------ | ---------------- |
| Content-Type:<mark style="color:red;">\*</mark>  | String | application/json |
| Authorization:<mark style="color:red;">\*</mark> | String | Bearer \[token]  |

{% tabs %}
{% tab title="200: OK " %}

```javascript
    "responseCode": 0,
    "data": [
        {
            "status": "ACCEPTED",
            "total": 20,
            "selfieLinks": [
                "imageLink"
            ]
        },
        {
            "status": "DECLINED",
            "total": 5,
            "selfieLinks": [
                "imageLink"
            ]
        },
        {
            "status": "TIMEOUT",
            "total": 0,
            "selfieLinks": []
        },
        {
            "status": "INVALID",
            "total": 0,
            "selfieLinks": []
        },
        {
            "status": "TOTAL",
            "total": 25,
            "selfieLinks": [
                "imageLink"
            ]
        }
    ]

```

{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="403: Forbidden " %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="404: Not Found " %}

```javascript
{
    // Response
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

<br>


# Generate KYC Link

KYC Face verifications

This API allows clients to generate a unique KYC link for their users to verify their identity. The generated link can be sent to the user via the postman channel. Once the user follows the link, they will be prompted to provide the required information and documents for KYC verification.

### Base URL

```
sdk.faceki.com
```

### Generate KYC Link End Point API

```
https://sdk.faceki.com/kycverify/api/kycverify/kyc-verify-link
```

{% hint style="info" %}
Method: POST

Authorization: Bearer Token

Content-Type: application/json
{% endhint %}

<mark style="color:green;">`POST`</mark> `https://sdk.faceki.com/kycverify/api/kycverify/kyc-verify-link`

#### Headers

| Name                                            | Type   | Description      |
| ----------------------------------------------- | ------ | ---------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer \[token]  |
| Content-Type<mark style="color:red;">\*</mark>  | String | application/json |

#### Request Body

| Name               | Type    | Description                                                                      |
| ------------------ | ------- | -------------------------------------------------------------------------------- |
| expiryTime         | String  | expiryTime in minutes                                                            |
| applicationId      | String  | Unique Identifier for record                                                     |
| redirect\_url      | String  | Redirect URL After KYC                                                           |
| document\_optional | Boolean | Pass True if you want customer to choose 1 document out of N defined in workflow |

{% tabs %}
{% tab title="200: OK " %}

```
{
    "responseCode": 0,
    "data": "bdb21481-7873-45d5-0000-18df4a7bf778",
    "url": "https://apps.faceki.com/kycverify/bdb21481-7873-45d5-0000-18df4a7bf778"
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
    // Response
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

<figure><img src="/files/7YQq2RNfjUQo4jbb7Y8C" alt=""><figcaption></figcaption></figure>


# Get KYC records by Link

API to fetch KYC record

This API allows clients to fetch  KYC records

### Base URL

```
sdk.faceki.com
```

### Generate KYC Link End Point API

```
https://sdk.faceki.com/kycverify/api/kycverify/link
```

{% hint style="info" %}
Method: GET

Authorization: Bearer Token

Content-Type: application/json
{% endhint %}

<mark style="color:blue;">`GET`</mark> `https://sdk.faceki.com/kycverify/api/kycverify/link`

#### Query Parameters

| Name   | Type   | Description                                |
| ------ | ------ | ------------------------------------------ |
| linkId | String | Pass to get specific KYC done on that link |

#### Headers

| Name                                            | Type   | Description      |
| ----------------------------------------------- | ------ | ---------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer \[token]  |
| Content-Type<mark style="color:red;">\*</mark>  | String | application/json |

{% tabs %}
{% tab title="200: OK " %}

```
{
    "responseCode": 0,
    "data": [
        {
            "_id": "",
            "kycResponse": {
            
            },
            "livenessResponse": {
       
            },
            "fullName": "",
            "referenceId": "",
            "documentId": "",
            "DOB": "",
            "localName": "",
            "country": "",
            "countryCode": "",
            "countryCodeISO3": "",
            "idFrontImage": "",
            "idBackImage": "",
            "status": "ACCEPTED",
            "deleteStatus": "ACTIVE",
            "companyId": "",
            "selfieImage": "",
            "documentCropFaceImageUrl": "",
            "faceID": "",
            "difcCode": "",
            "link": "<LINK>",
            "deviceDetails": {},
            "modifiedBy": "",
            "createdAt": "2023-04-16T10:24:10.960Z",
            "updatedAt": "2023-05-26T12:26:02.656Z",
            "__v": 0,
            "requestId": ""
        }
    ]
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
    // Response
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

<figure><img src="/files/avfExBCTRsT9FqkLlqNZ" alt=""><figcaption></figcaption></figure>


# Get KYC records By Reference ID

API to fetch KYC record

This API allows clients to fetch  KYC records

### Base URL

```
sdk.faceki.com
```

### Generate KYC Link End Point API

```
https://sdk.faceki.com/kycverify/api/kycverify/reference
```

{% hint style="info" %}
Method: GET

Authorization: Bearer Token

Content-Type: application/json
{% endhint %}

<mark style="color:blue;">`GET`</mark> `https://sdk.faceki.com/kycverify/api/kycverify/reference`

#### Query Parameters

| Name        | Type   | Description                           |
| ----------- | ------ | ------------------------------------- |
| referenceId | String | Pass value of ResponseID from the KYC |

#### Headers

| Name                                            | Type   | Description      |
| ----------------------------------------------- | ------ | ---------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer \[token]  |
| Content-Type<mark style="color:red;">\*</mark>  | String | application/json |

{% tabs %}
{% tab title="200: OK " %}

```
{
    "responseCode": 0,
    "data": [
        {
            "_id": "",
            "kycResponse": {
            
            },
            "livenessResponse": {
       
            },
            "fullName": "",
            "referenceId": "",
            "documentId": "",
            "DOB": "",
            "localName": "",
            "country": "",
            "countryCode": "",
            "countryCodeISO3": "",
            "idFrontImage": "",
            "idBackImage": "",
            "status": "ACCEPTED",
            "deleteStatus": "ACTIVE",
            "companyId": "",
            "selfieImage": "",
            "documentCropFaceImageUrl": "",
            "faceID": "",
            "difcCode": "",
            "link": "<LINK>",
            "deviceDetails": {},
            "modifiedBy": "",
            "createdAt": "2023-04-16T10:24:10.960Z",
            "updatedAt": "2023-05-26T12:26:02.656Z",
            "__v": 0,
            "requestId": ""
        }
    ]
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
    // Response
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

<figure><img src="/files/dfl0dOtRF7zq5fc6k8p1" alt=""><figcaption></figcaption></figure>


# Get KYC records By RequestID

API to fetch KYC record

This API allows clients to fetch  KYC records

### Base URL

```
sdk.faceki.com
```

### Generate KYC Link End Point API

```
https://sdk.faceki.com/kycverify/api/kycverify/records
```

{% hint style="info" %}
Method: GET

Authorization: Bearer Token

Content-Type: application/json
{% endhint %}

<mark style="color:blue;">`GET`</mark> `https://sdk.faceki.com/kycverify/api/kycverify/records`

#### Query Parameters

| Name                                        | Type   | Description                           |
| ------------------------------------------- | ------ | ------------------------------------- |
| requestId<mark style="color:red;">\*</mark> | String | Pass value of Request ID from the KYC |

#### Headers

| Name                                            | Type   | Description      |
| ----------------------------------------------- | ------ | ---------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer \[token]  |
| Content-Type<mark style="color:red;">\*</mark>  | String | application/json |

{% tabs %}
{% tab title="200: OK " %}

```
{
    "responseCode": 0,
    "data": [
        {
            "_id": "",
            "kycResponse": {
            
            },
            "livenessResponse": {
       
            },
            "fullName": "",
            "referenceId": "",
            "documentId": "",
            "DOB": "",
            "localName": "",
            "country": "",
            "countryCode": "",
            "countryCodeISO3": "",
            "idFrontImage": "",
            "idBackImage": "",
            "status": "ACCEPTED",
            "deleteStatus": "ACTIVE",
            "companyId": "",
            "selfieImage": "",
            "documentCropFaceImageUrl": "",
            "faceID": "",
            "difcCode": "",
            "link": "<LINK>",
            "deviceDetails": {},
            "modifiedBy": "",
            "createdAt": "2023-04-16T10:24:10.960Z",
            "updatedAt": "2023-05-26T12:26:02.656Z",
            "__v": 0,
            "requestId": ""
        }
    ]
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
    // Response
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

<figure><img src="/files/qUMSHXgdjo6QDZcRFXXv" alt=""><figcaption></figcaption></figure>


# Face Match API (💲)

Allows users to log in using facial recognition technology. It matches the selfie captured by the user during login with the facial image on file for that user, providing an extra layer of se

This API is used to verify a user who has already undergone KYC verification or Multiple KYC verification. It verifies the user's identity by comparing their face with the previously submitted documents, eliminating the need for the user to undergo KYC onboarding again. If the user is already verified, the API will prevent them from undergoing the verification process again.

{% hint style="info" %}
Method: POST

Authorization: Bearer Token

Parameter:

selfie\_image  (Image File) (\*Mandatory)
{% endhint %}

## Face Match/ Login Stels

1. Make a POST request to the URL[ ](<https://sdk.faceki.com/facelink/api/face-check&#xA;>)[https://sdk.faceki.com/facelink/api/face-check](<https://sdk.faceki.com/facelink/api/face-check&#xA;>)
2. Set the Authorization type to "Bearer Token" in the request header. You will need to generate a bearer token from /getToken API.
3. In the body of the request, including the user's selfie image file as a parameter named "selfie\_image". This parameter is mandatory.
4. Send the request to the API.
5. The API will perform a face match verification to check if the user's selfie matches the face on file for their account.
6. If the face match is successful, the API will log the user into their account.
7. If the face match fails, the API will not log the user in and will return an error message.

<figure><img src="/files/sp5zay482sHpSuk0mEHb" alt=""><figcaption><p>Select Bearer Token as Authorization using GetToken API</p></figcaption></figure>

<figure><img src="/files/WOvvMW4iHsg6zOz07Lj0" alt=""><figcaption><p>Select POST call, from-data and add selfie_image </p></figcaption></figure>

<mark style="color:green;">`POST`</mark> `https://sdk.faceki.com/facelink/api/face-check`

#### Headers

| Name                                            | Type   | Description         |
| ----------------------------------------------- | ------ | ------------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer \[token]     |
| Content-Type<mark style="color:red;">\*</mark>  | String | multipart/form-data |

#### Request Body

| Name                                            | Type  | Description                |
| ----------------------------------------------- | ----- | -------------------------- |
| selfie\_image<mark style="color:red;">\*</mark> | Image | <p>Upload image</p><p></p> |

{% tabs %}
{% tab title="200: OK " %}

````
```json
{
    "responseCode": 0,
    "data": {
        "face_verified": true,
        "all_face_ids": [
            "2f1ebdb7-e6d1-448e-9b2c-3ddfe97672d7"
        ],
        "kyc_records": [
            {
                "_id": "644b7cff16cc73de26ff9b9c",
                "kycResponse": {
                    "result": {
                        "documentNumber": "930813316",
                        "firstName": "Name",
                        "middleName": "Middle name",
                        "lastName": "Last name",
                        "fullName": "FIRST MIDDLE LAST NAME",
                        "fullName_local": "الاسم بالعربي",
                        "sex": "F",
                        "age": 29,
                        "dob": "1993/08/29",
                        "dob_day": 29,
                        "dob_month": 8,
                        "dob_year": 1993,
                        "expiry": "2024/08/18",
                        "expiry_day": 18,
                        "expiry_month": 8,
                        "expiry_year": 2024,
                        "daysToExpiry": 479,
                        "documentType": "I",
                        "documentSide": "DUAL",
                        "issuerOrg_full": "Bahrain",
                        "issuerOrg_iso2": "BH",
                        "issuerOrg_iso3": "BHR",
                        "nationality_full": "Bahrain",
                        "nationality_iso2": "BH",
                        "nationality_iso3": "BHR",
                        "internalId": "MRZ"
                    },
                    "confidence": {
                        "documentNumber": 0.994,
                        "firstName": 1,
                        "middleName": 1,
                        "lastName": 1,
                        "fullName": 1,
                        "fullName_local": 0.962,
                        "sex": 1,
                        "age": 1,
                        "dob": 1,
                        "dob_day": 1,
                        "dob_month": 1,
                        "dob_year": 1,
                        "expiry": 1,
                        "expiry_day": 1,
                        "expiry_month": 1,
                        "expiry_year": 1,
                        "daysToExpiry": 1,
                        "documentType": 1,
                        "documentSide": 1,
                        "issuerOrg_full": 1,
                        "issuerOrg_iso2": 1,
                        "issuerOrg_iso3": 1,
                        "nationality_full": 1,
                        "nationality_iso2": 1,
                        "nationality_iso3": 1,
                        "internalId": 1
                    },
                    "face": {
                        "isIdentical": true,
                        "confidence": "0.786"
                    },
                    "verification": {
                        "passed": true,
                        "result": {
                            "face": true,
                            "notexpired": true
                        }
                    },
                    "output": [],
                    "outputface": null,
                    "authentication": {
                        "score": 0.7,
                        "breakdown": {
                            "data_visibility": {
                                "passed": true
                            },
                            "image_quality": {
                                "passed": false,
                                "code": 112,
                                "reason": "Document image too small",
                                "severity": "low"
                            },
                            "feature_referencing": {
                                "passed": true
                            },
                            "exif_check": {
                                "passed": true
                            },
                            "publicity_check": {
                                "passed": true
                            },
                            "text_analysis": {
                                "passed": true
                            },
                            "biometric_analysis": {
                                "passed": true
                            },
                            "security_feature_check": {
                                "passed": true
                            },
                            "recapture_check": {
                                "passed": true
                            }
                        },
                        "warning": [
                            "Document image too small"
                        ]
                    },
                    "matchrate": 1,
                    "executionTime": 8.750682830810547,
                    "responseID": "581de82ea2ee0ed36b907113ea4dff15",
                    "quota": 2537,
                    "credit": 0,
                    "aml": [],
                    "vaultid": "vPpYZxjrDTSnC8MmDeFPNzvLvFghaAyy"
                },
                "livenessResponse": {
                    "success": true,
                    "transactionId": "5ab497ca82f54e93b311445740472fcd",
                    "profileId": "b0ca5a9f3c174591941ed41616a08472",
                    "reviewScore": 0,
                    "rejectScore": 0,
                    "decision": "accept",
                    "quota": 2538,
                    "credit": 0,
                    "executionTime": 0.653205889
                },
                "fullName": "First middle last name",
                "referenceId": "581de82ea2ee0ed36b907113ea4dff15",
                "documentId": "930813316",
                "DOB": "1993/08/29",
                "localName": "الاسم بالعربي",
                "country": "Bahrain",
                "countryCode": "BH",
                "countryCodeISO3": "BHR",
                "idFrontImage": "imagelink",
                "idBackImage": "imagelink",
                "status": "ACCEPTED",
                "deleteStatus": "ACTIVE",
                "companyId": "d2504fcc-a1bd-4f4c-9874-dec3706123b4",
                "selfieImage": "imagelink",
                "documentCropFaceImageUrl": "imagelink",
                "faceID": "2f1ebdb7-e6d1-448e-9b2c-3ddfe97672d7",
                "imageID": "ff56ce6a-0326-3eaa-92c4-345d4a80a2db",
                "difcCode": "",
                "link": "client",
                "deviceDetails": {
                    "ipAddress": "54.86.50.139",
                    "browserName": "Postman Desktop",
                    "osName": ""
                },
                "modifiedBy": "",
                "createdAt": "2023-04-28T07:59:59.799Z",
                "updatedAt": "2023-04-28T07:59:59.799Z",
                "__v": 0
            }
        ]
    }
}
```

````

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
    // Response
}
```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}


# Verification Data

Faceki API Verification Response Documentation

When you perform a Know Your Customer (KYC) verification using the Faceki API, you receive a detailed verification response containing valuable information about the verification process, document authenticity, facial matching, and more. This documentation aims to help you understand the different fields present in the response and their significance.

### Response Structure

The response from the Faceki API verification consists of several key fields:

* `verification`
* `face`
* `confidence`
* `result`
* `authentication`
* `aml`
* `responseID`
* `images`
* `livenessResponse`

Below, we'll explain each of these fields in detail.

***

### `verification`

The `verification` field provides information about the overall result of the verification process.

* `passed`: A boolean indicating whether the KYC verification was successful (`true`) or not (`false`).
* `result`: An object containing specific verification results:
  * `face`: A boolean indicating whether the face in the submitted images is successfully matched and verified.
  * `notexpired`: A boolean indicating whether the submitted document is not expired.

***

### `face`

The `face` field contains information about the face matching results:

* `isIdentical`: A boolean indicating whether the face in the submitted selfie image matches the face in the provided document (`true`) or not (`false`).
* `confidence`: A numerical value indicating the confidence level of the face match. Higher values indicate a higher degree of confidence.

***

### `confidence`

The `confidence` field provides confidence scores for various document attributes and facial features. These scores indicate the level of certainty in the accuracy of each attribute. The confidence scores are provided as numerical values between 0 and 1.

Attributes include:

* `backSideId`
* `issuerOrg_full`
* `issuerOrg_iso2`
* `issuerOrg_iso3`
* `document`
* `documentName`
* `documentNumber`
* `documentSide`
* `documentType`
* `face`
* `face0`
* `firstName`
* `fullName`
* `internalId`
* `lastName`
* `middleName`
* `nationality_full`

***

### `result`

The `result` field contains specific details about the verified document and the individual:

* `issuerOrg_full`: The full name of the organization issuing the document.
* `issuerOrg_iso2`: The ISO 2-letter country code of the organization issuing the document.
* `issuerOrg_iso3`: The ISO 3-letter country code of the organization issuing the document.
* `document`: The document details.
* `documentName`: The name of the submitted document.
* `documentNumber`: The document number.
* `documentSide`: The side of the document that was verified.
* `documentType`: The type of the submitted document.  Possible Values   ID Card ( I ), Passport (P), Residence Card (R), D: Driving License (D)
* `firstName`: The first name of the individual.
* `fullName`: The full name of the individual. Based on data source: MRZ or Visual the format will be different
* `lastName`: The last name of the individual.
* `middleName`: The middle name of the individual.
* `nationality_full`: The full nationality of the individual.

***

### `authentication`

The `authentication` field provides a detailed breakdown of authentication checks performed on the document:

* `breakdown`: An object containing subfields that represent specific authentication checks. Each subfield contains:
  * `passed`: A boolean indicating whether the specific authentication check passed (`true`) or not (`false`).
* `warning`: An array of warning messages related to the authentication process.

The available authentication checks include:

* `recapture_check`
* `data_visibility`
* `image_quality`
* `feature_referencing`
* `exif_check`
* `publicity_check`
* `text_analysis`
* `biometric_analysis`
* `security_feature_check`

***

### `aml`

The `aml` field is an array that could potentially contain Anti-Money Laundering (AML) related information. In this case, it's an empty array, suggesting that no AML-related information was found.

***

### `responseID`

The `responseID` field is a unique identifier for this verification response. It can be used to uniquely identify and track this specific verification session.

***

### `images`

The `images` field provides URLs to the images used for verification:

* `doc_front_image`: The URL to the front image of the submitted document.
* `doc_back_image`: The URL to the back image of the submitted document (if applicable).
* `selfie_image`: The URL to the submitted selfie image.

***

### `livenessResponse`

The `livenessResponse` field provides confirmation about the liveness test:

* `status`:  A boolean indicating whether the Liveness verification was successful (`true`) or not (`false`).


# Error Codes

Information about the Error Code in Faceki System

#### Error Codes

1. **INTERNAL\_SYSTEM\_ERROR (Code: 1000)**\
   An internal system error occurred on the server side. This could indicate a technical issue with the Faceki service.
2. **SUCCESS (Code: 0)**\
   The request was successful. No errors occurred.
3. **NO\_RULES\_FOR\_COMPANY (Code: 7001)**\
   No verification rules were found for the specified company. This might indicate a configuration issue on the server side.
4. **NEED\_REQUIRED\_IMAGES (Code: 8001)**\
   Required images for verification are missing. Make sure you provide all the necessary images for the KYC process.
5. **DOCUMENT\_VERIFY\_FAILED (Code: 8002)**\
   Document verification failed. This could mean that the provided document images do not meet the verification criteria.
6. **PLEASE\_TRY\_AGAIN (Code: 8003)**\
   Verification failed. Please try the verification process again.
7. **FACE\_CROPPED (Code: 8004)**\
   The face in the image appears to be cropped or not fully visible.
8. **FACE\_TOO\_CLOSED (Code: 8005)**\
   The face in the image is too close to the camera, affecting the quality of the verification.
9. **FACE\_NOT\_FOUND (Code: 8006)**\
   The system could not detect a face in the provided image.
10. **FACE\_CLOSED\_TO\_BORDER (Code: 8007)**\
    The face in the image is too close to the border, affecting the quality of the verification.
11. **FACE\_TOO\_SMALL (Code: 8008)**\
    The face in the image is too small for accurate verification.
12. **POOR\_LIGHT (Code: 8009)**\
    The image quality is affected by poor lighting conditions, making verification difficult.
13. **ID\_VERIFY\_FAIL (Code: 8010)**\
    ID verification failed. The provided identification information could not be verified.
14. **DL\_VERIFY\_FAIL (Code: 8011)**\
    Driver's license verification failed. The provided driver's license information could not be verified.
15. **PASSPORT\_VERIFY\_FAIL (Code: 8012)**\
    Passport verification failed. The provided passport information could not be verified.
16. **DATA\_NOT\_FOUND (Code: 8013)**\
    The requested data was not found. This could occur if the requested record or information is missing.
17. **INVALID\_VERIFICATION\_LINK (Code: 8014)**\
    The verification link provided is invalid.
18. **VERIFICATION\_LINK\_EXPIRED (Code: 8015)**\
    The verification link has expired.
19. **FAIL\_TO\_GENERATE\_LINK (Code: 8016)**\
    Generating a verification link failed.
20. **KYC\_VERIFICATION\_LIMIT\_REACHED (Code: 8017)**\
    The maximum limit for KYC verifications has been reached.
21. **SELFIE\_MULTIPLE\_FACES (Code: 8018)**\
    The provided selfie image contains multiple faces, affecting the verification process.
22. **FACE\_BLURR (Code: 8019)**\
    The face in the image is blurred, affecting the quality of verification.
23. **MISSING\_ID\_CARD\_DOCUMENT\_WITH\_RULES (Code: 8020)**\
    A valid ID card document is missing for verification despite the presence of verification rules.
24. **MISSING\_PASSPORT\_DOCUMENT\_WITH\_RULES (Code: 8021)**\
    A valid passport document is missing for verification despite the presence of verification rules.
25. **MISSING\_DL\_DOCUMENT\_WITH\_RULES (Code: 8022)**\
    A valid driver's license document is missing for verification despite the presence of verification rules.
26. **KYC\_NOT\_ENOUGH\_WALLET\_CREDIT (Code: 8023)**\
    Your account doesn't have enough credits for verification
27. **USER\_ALREADY\_VERIFIED (Code: 8024)**\
    User verification already exist in the system


# Flutter SDK / Plugin

Flutter SDK for KYC

### Installation

First, add `facekikyc: ^1.0.0` as a \[dependency in your pubspec.yaml file]

```
https://pub.dev/packages/facekikyc
```

#### iOS Setup

Add the following keys to your *Info.plist* file, located in `<project root>/ios/Runner/Info.plist`:

* `NSPhotoLibraryUsageDescription` - describe why your app needs permission for the photo library. This is called *Privacy - Photo Library Usage Description* in the visual editor.
  * This permission will not be requested if you always pass `false` for `requestFullMetadata`, but App Store policy requires including the plist entry.
* `NSCameraUsageDescription` - describe why your app needs access to the camera. This is called *Privacy - Camera Usage Description* in the visual editor.

#### Android Setup

Add this permission to your AndroidManifest.xml File

* `<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>`
* `<uses-permission android:name="android.permission.INTERNET" />`

### Usage:

```dart

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
     
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: facekikyc(
        clientId: "2b8tr0234c8aq878vhdap44l63",
        clientSecret: "1caci0co3hs8rlc18tj7vbqadrb44nhtu7ipelk0nr4lftf0h5l6",
        onSuccess: (po) {
          // action to be done
          print("success response is $po");
        },
        onError: (po) {
// action to be done
          print("error response is $po");
        },
      ),
    );
  }
```


# React Native SDK / Plugin

SDK For React Native

### Installation (RN >= 0.72)

```
npm i @faceki/react-native-sdk
npm i react-native-vision-camera
npm i lottie-react-native
npm i @bam.tech/react-native-image-resizer@3.0.7
```

This SDK is tested with @bam.tech/react-native-image-resizer version 3.0.7, you can use the latest if doesn't work. Kindly use version 3.0.7

### Permissions

**Android:**

Add the following uses-permission to your AndroidManifest.xml (usually found at: android/app/src/main/)

```
<uses-permission android:name="android.permission.CAMERA" />

```

**IOS**

Add the following usage descriptions to your Info.plist (usually found at: ios/PROJECT\_NAME/)

```
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) needs access to your Camera.</string>


```

### Troubleshoot for react-native-vector-icons

**Android**

Add this in your android/app/build.gradle If not already added.

```
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
```

**IOS**

Add this to info.plist if you have issues in showing icons from react native vector icons

```
<key>UIAppFonts</key>
	<array>
		<string>AntDesign.ttf</string>
		<string>Entypo.ttf</string>
		<string>EvilIcons.ttf</string>
		<string>Feather.ttf</string>
		<string>FontAwesome.ttf</string>
		<string>FontAwesome5_Brands.ttf</string>
		<string>FontAwesome5_Regular.ttf</string>
		<string>FontAwesome5_Solid.ttf</string>
		<string>Fontisto.ttf</string>
		<string>Foundation.ttf</string>
		<string>Ionicons.ttf</string>
		<string>MaterialCommunityIcons.ttf</string>
		<string>MaterialIcons.ttf</string>
		<string>Octicons.ttf</string>
		<string>SimpleLineIcons.ttf</string>
		<string>Zocial.ttf</string>
	</array>

```

Add this in your podfile

```
target 'targetPackage' do
config = use_native_modules!

  pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons' 👈 Add this for vector icons
```

RUN

```
cd ios && pod install && cd ..
```

### USAGE

You would need to generate EKYC Link through the API here:

<https://docs.faceki.com/api-integration/verification-apis/generate-kyc-link>

In the response use the key "data" to initiate the SDK

```
import FacekiApp from '@faceki/react-native-sdk';

<>
  <FacekiApp
    verification_url="XXXX-XXXX-xxxX-XxXXX"
    onError={onError}
    onComplete={onComplete}
  />
</>;
```

Advance Usage

```
import FacekiApp from '@faceki/react-native-sdk';
import { Branding } from '@faceki/react-native-sdk/src/service/types/interfaces';

 const CustomBranding:Branding ={
    colors: {
      primary: '#F8B427',
      secondary: '#343333',
      buttonColor: 'rgba(253, 181, 40, 0.10)',
      success: '#59C547',
      danger: '#FF3B30',
      warning: '#FF9500',
      info: '#5AC8FA',
      light: '#F5F5F5',
      dark: '#1C1C1E',
      background: '#f5f5f5',
      backgroundSecondary: '#eeeeee',
      backgroundCaptureBtn: '#F6F6F7',
      textDefault: '#444343',
      textSecondary: '#3E3E3E',
      fontRegular:"Inter",
      fontMedium:"Inter-Medium",
      fontBold:"Inter-Bold"
    },
    images:{
      card_guidance:"", //optional
      selfie_guidance:"" //optional
    }
  }
  
<>

      <FacekiApp
        verification_url="XXXX-XXXX-xxxX-XxXXX"
        onError={(error) => { console.log("ERROR", error) }}
        onComplete={(data) => {

          if(data instanceof MultiDocumentKYCResponseClass){
            console.log("Multi Response")

          }else if(data instanceof SingleDocumentKYCResponseClass)
          {
            console.log("Single Response")
          }

         }}
        resultContent={{
          success:{
            heading:"",
            subHeading:""
          },
          fail:{
            heading:"",
            subHeading:""
          }
        }}

        consenttermofuseLink='https://faceki.com'
        logoURL='http://xyz.com/zyx.png'
        skipFirstScreen={true}. // true | false (If you want to disable first getting started screen)
        allowSingleOverride={false} // true | false (if you want customer to select the document)
        skipGuidanceScreens={true} // true | false (if you want to hide the guidance screens)
        skipResultScreen={true} // true | false (if you want to skip the result screen and manage your logic by onError or onComplete method)
        singleVerificationDoc="Driving License" (If you want to verify specific document with allowSingleOverride)
        branding={CustomBranding}
        skipFunc={
          ()=>{
            /// Logic To Skip SDK or Navigate
          }
        }

      />
</>;
```

### NOTE:

To request camera permissions from users on iOS in a your app, you can utilize the 'react-native-permissions' package. However, for Android devices, the camera permission is by default handled by the package. <https://www.npmjs.com/package/react-native-permissions>

### Troubleshoot

Vector icons are causing an issue in release build in version <= 9.2.0 in android. There is an ongoing discussion about it. Simple fix until new verion is released.

Go to node\_modules/react-native-vector-icons/fonts.gradle

Add this 👇

```
android.applicationVariants.all { def variant ->
    def targetName = variant.name.capitalize()
    // 👉 patch
       def lintVitalAnalyzeTask = tasks.findByName("lintVitalAnalyze${targetName}")
       if (lintVitalAnalyzeTask) {
         lintVitalAnalyzeTask.dependsOn(fontCopyTask)
       }
    // patch ends
    def generateAssetsTask = tasks.findByName("generate${targetName}Assets")
    generateAssetsTask.dependsOn(fontCopyTask)
}
```

You can read on 👉 <https://github.com/oblador/react-native-vector-icons/issues/1508>

Sometimes its better to reinstall all the node\_modules and pods again

```
rm -rf node_modules && rm -rf yarn.lock && watchman watch-del-all && cd ios && rm -rf Pods && rm -rf Podfile.lock && pod deintegrate && pod cache clean --all && cd ..

```

```
npm i
```

```
cd ios && pod install
```

## Changelog

All notable changes to this project will be documented in this file.

### \[2.0.9] - 16-05-2024

#### Changed

* README UPDATES

### \[2.0.8] - 16-05-2024

#### Changed

* Remove Client ID and Secret, replaced with Verification LINK
* Added SKIP button in header

### \[2.0.7] - 13-02-2024

#### Changed

* Upgraded React Vision Camera to V3

### \[2.0.6] - 22-12-2023

#### Changed

* Added Quality/Liveness Check While Capturing

<br>


# Native iOS SDK

iOS is a mobile operating system created and developed by Apple Inc. exclusively for its hardware.

{% hint style="warning" %}
*The latest Stable Version is V2.0*&#x20;
{% endhint %}

{% embed url="<https://github.com/faceki/Native-iOS-KYC-V2>" %}

### Let's Get your iOS App running with FACEKI SDK

### Requirements

1. **Xcode 13**&#x20;

{% hint style="info" %}
[Xcode 13](https://developer.apple.com/xcode/) adds powerful new team development features, perfect for working with Xcode Cloud as well as with GitHub, Bitbucket, and GitLab collaboration features. Initiate, review, comment, and merge pull requests directly within Xcode. See your teammates’ comments right inside your code. And quickly compare any two versions of your code files.
{% endhint %}

{% embed url="<https://developer.apple.com/documentation/xcode>" %}

\
2\. **iOS CocoaPod**&#x20;

{% hint style="info" %}
[CocoaPods](https://cocoapods.org/) is a dependency manager for Swift and Objective-C Cocoa projects. It has over 87 thousand libraries and is used in over 3 million apps. CocoaPods can help you scale your projects elegantly.
{% endhint %}

{% embed url="<https://guides.cocoapods.org/contributing/contribute-to-cocoapods.html>" %}

{% hint style="info" %}
View [Quick Guide](/quick-guides#dashboard) steps first&#x20;
{% endhint %}

### **Steps**

### iOS CocoaPod Integration

**1**. Create a new Xcode Project.&#x20;

![](/files/cXa6BbJkRydtqcEPxax4)

2\. Choose app in-app template.

![](/files/MPEGVhYBWqdITcZAfig6)

3\. Add unique Bundle Identifier, set product name and organization identifier.

![](/files/FxyNraZvGjDW1wV9KsKg)

## Apple Developer Account Setup

4\. Create an Apple Developer account ID and login & Select Identifiers and click + icon.

![](/files/Z8MwpqIP2zeQhWSH8o3e)

5\. Select App IDs in Certificates, Identifiers & Profiles Tab.

![](/files/85puW1LY1HR3QCp6E5eg)

6\. Select App as a type.

![](/files/eJMPBbhnPIsLzOUkjZzv)

7\. Add your bundle ID mentioned in the project created and&#x20;description. Now select App groups in the capabilities.

8\. Go to signing and capabilities and select teams with Apple developer account linked to it and. Click on the capabilities button.

9\. Select app groups in capabilities

10\. Add App group - “ ”

11\. To use Faceki API, you need to register any of [Faceki packages on the link](https://apps.faceki.com/pricing) then access  [Dashboard](<https://apps.faceki.com/integration/client-id >) >> Integration >> [Client-ID](<https://apps.faceki.com/integration/client-id >)

12\. Click on the hidden eyes and securely copy the **Client ID** (token).

<figure><img src="/files/e71MAaRcUJIXta6o4XS3" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Please don't share the token with anybody, highly secure and confidential&#x20;
{% endhint %}

13\. Copy the **Client ID** from the project and keep it safe and secure

14\. Faceki Framework is available through [Github link ](https://github.com/faceki/KYC-iOS-App-Connect-V2)

15\. Create a new Xcode Project with a View Controller

16\. To run the example project, clone the repo, and run `pod install` from the Example directory first.

17\. To install KYC-iOS-Native POD, simply add the following line to your Podfile:

```
pod 'KYC-iOS-Native', :git => 'https://github.com/faceki/KYC-iOS-Native.git'
```

{% embed url="<https://youtu.be/jbP5bGzRmkA>" %}

18\. Edit the source file in which you want to initiate Faceki SDK with your email and token, user can Simply add a button in his Project to initiate the Pod Library, the user needs to copay paste this code in his code file.

```
let smManagerVC = Logger.initiateSMSDK(setClientID : "YOUR_FACEKI_CLIENTID", userEmail: "YOUR_FACEKI_EMAIL") navigationController?.pushViewController(smManagerVC, animated: true)You can also check out FACEKI's Github 
```

19\. User needs to give Camera Usage permission in info.plist of Xcode project.

{% hint style="info" %}
**Good to know:** depending on the product you're building, it can be useful to explicitly document use cases. Got a product that can be used by a bunch of people in different ways? Maybe consider splitting it out!
{% endhint %}

### Arabic Language&#x20;

To disable the Arabic language, then after you install POD, In "KYC-iOS-Native" folder there is "MainFACEKI.storyboard" open that file you will see two localize string files.

```
MainFACEKI.strings(Arabic) & MainFACEKI.strings(English)
```

Copy Text of English file and then paste that into Arabic file (First clean all texts from Arabic File)

### Edit Splash Screen

To change the Splash screen, just replace the image with your splash image here

```
"/Assets/Splash.png"
```


# Native Android SDK

Android software development is the process by which applications are created for devices running the Android operating system.

{% hint style="warning" %}
*The latest Stable Version is V2.1*
{% endhint %}

### Let's Get your Android App running with FACEKI SDK

### Requirements

{% embed url="<https://github.com/faceki/KYC-Android-Native-V2>" %}
Github KYC Android Studio Native files
{% endembed %}

**In order to run the example project, you can change client\_id and client\_secret inside SdkSetting.kt**

#### [Android Studio](https://developer.android.com/studio)&#x20;

Android Studio provides the fastest tools for building apps on every type of Android device.

#### [Kotlin](https://kotlinlang.org/docs/releases.html) Language

Kotlin is a cross-platform, statically typed, general-purpose programming language with type inference. Kotlin is designed to interoperate fully with Java, and the JVM version of Kotlin's standard library depends on the Java Class Library, but type inference allows its syntax to be more concise. [Wikipedia](https://en.wikipedia.org/wiki/Kotlin_\(programming_language\))<br>

### Check [Getting Started](/)&#x20;

### Steps

1. Install the Latest Android Studio and Kotlin Language
2. To use Faceki API, you need to register any of [Faceki packages on the link](https://apps.faceki.com/pricing) and then access  [Dashboard](https://apps.faceki.com/) >> Integration >> [Client-ID](<https://apps.faceki.com/integration/client-id >)
3. . Click on the hidden eyes and securely copy the **Client ID** (token).

<figure><img src="/files/e71MAaRcUJIXta6o4XS3" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Please don't share the token with anybody, highly secure and confidential&#x20;
{% endhint %}

4\. Edit this to your Project's Main build.gradle in repositories block

```
maven { url 'https://jitpack.io' }
```

![](/files/VVYFX5CqonGUNU9o76OX)

"OR" put it in Settings.gradle in repositories block as follow:

```
dependencyResolutionManagement 
{
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories 
{
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
```

![](/files/LkVM2G15KCxG8HCxd5MA)

5\. Add this to your app level build.gradle android block.

```java
compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_8
         targetCompatibility JavaVersion.VERSION_1_8
     }

     kotlinOptions {
         jvmTarget = '1.8'
     }
```

![](/files/alpKdBElTDth0klwAraW)

6\. Add this to your app level build.gradle dependencies block

```java
implementation 'com.github.faceki:KYC-Android-Native-V2:$Version'
```

![](/files/2Gz22ammTIftMdAFPlyH)

{% hint style="info" %}
Add this to your app level build.gradle defaultConfig block&#x20;

{% hint style="info" %}

```java
minSdkVersion 24
```

{% endhint %}
{% endhint %}

7\. Sync your project.

{% hint style="info" %}
Refer to integration to register get the token and paste&#x20;
{% endhint %}

8\. Add the below code in your project file wherever you want to initialize sdk:

```
import com.facekikycverification.startup.FacekiVerification
```

#### Kotlin

```
var facekiVerification: FacekiVerification? = null
facekiVerification = FacekiVerification()
facekiVerification!!.initiateSMSDK(this, "YOUR_CLIENT_ID", "CLIENT-SECERT")
```

![](/files/i774ue75TbmW2zgP3tRh)

#### Java

```
FacekiVerification facekiVerification = null;
facekiVerification = new FacekiVerification();
facekiVerification.initiateSMSDK(this, "YOUR_CLIENT_ID", "CLIENT-SECERT");
```

### Arabic Language&#x20;

To disable the Arabic language, You can simply rename or delete this folder

```
 "/src/main/res/values-ar"
```

### Edit Splash Screen

To change the Splash screen, just replace the image with your splash image here

```
"/src/main/res/drawable/splash.png"
```

### API Response

To intercept with login, signup and KYC and SDK settings API response, you can make required changes in corresponding API calls in&#x20;

```
"/faceki/src/main/java/com/facekikycverification/network/ApiCall.kt" file
```

#### Video Demonstration&#x20;

{% file src="/files/tJFaUqX2G5q110tgTzr2" %}

#### You can also check out FACEKI's <img src="/files/wd3onXMzubZBcHScGA2v" alt="" data-size="line">Github <img src="/files/vjAMxR4F4m0YWUJdt6y4" alt="" data-size="line">


# React

React UI Package for KYC

### Installation

You can install the `@faceki/react-kyc-sdk` package using npm or yarn:

```
npm install @faceki/react-kyc-sdk
# or
yarn add @faceki/react-kyc-sdk
```

### Usage

To use the `<FacekiSDK>` component in your React application, follow these steps:

1. Import the component at the top of your component file:

```
import React from "react";
import FacekiSDK from "@faceki/react-kyc-sdk";
```

2. Configure the SDK by providing the necessary props:

```
const App = () => {
  const sdkConfig = {
    link="your-generated-link",
    theme: {
      mainColor: "#FF5733",
      secondaryColor: "#2ECC71",
      backgroundColor: "#F4F4F4",
      cardBackgroundColor: "#FFFFFF",
      headingTextColor: "#333333",
      secondaryTextColor: "#777777",
      secondaryBorderColor: "#DDDDDD",
      iconFillColor: "#555555",
      iconBorderColor: "#888888",
      iconTextColor: "#FFFFFF",
      logo: "https://example.com/logo.png",
      disableGuidance: false,
      failedText: "Operation failed. Please try again.",
      successText: "Operation successful!",
      buttonbg: "#F8B427",
      textBg: "#EFEFEF",
      verificationProcessingText: "Processing verification...",
    },
    onSuccess: (data) => {
      console.log("SDK operation successful:", data);
    },
    onFail: (data) => {
      console.error("SDK operation failed:", data);
    },
  };

  return <FacekiSDK {...sdkConfig} />;
};

export default App;
```

### Configurable Props

The `<FacekiSDK>` component accepts the following configurable props:

* `link` (required): Your generated link Id from <https://docs.faceki.com/api-integration/verification-apis/generate-kyc-link>

```
{
    "responseCode": 0,
    "data": "LINKID",  // This Value will be used here
    "url": "Verification URL"
}
```

* `theme` (optional): An object to customize the visual appearance of the SDK. It includes properties like `mainColor`, `secondaryColor`, etc.
* `onSuccess` (optional): A callback function to be called when the SDK operation is successful. It receives data as a parameter.
* `onFail` (optional): A callback function to be called when the SDK operation fails. It receives data as a parameter.

#### Theme Configuration

The `theme` object can be customized with the following properties:

* `mainColor`: Main color used in the theme.
* `secondaryColor`: Secondary color for the theme.
* `backgroundColor`: Background color of the SDK component.
* `cardBackgroundColor`: Background color of cards within the SDK.
* `headingTextColor`: Color of text used in headings.
* `secondaryTextColor`: Color of secondary text.
* `secondaryBorderColor`: Color of secondary borders.
* `iconFillColor`: Fill color for icons.
* `iconBorderColor`: Border color for icons.
* `iconTextColor`: Color of text within icons.
* `logo`: URL for a custom logo image.
* `disableGuidance`: A boolean to disable guidance (if applicable).
* `failedText`: Text to display on failure.
* `successText`: Text to display on success.
* `buttonbg`: Background color for buttons.
* `textBg`: Background color for text elements.
* `verificationProcessingText`: Text to display during verification processing.

### Example

Here's an example of how you can use the `<FacekiSDK>` component with minimal configuration:

```
<FacekiSDK link="your-generated-link" />
```

For advanced customization, you can provide additional theme properties and callback functions as needed.


# Angular

Angular UI Package for KYC

## Installation

You can install the `@faceki/angular-kyc-sdk` package using npm or yarn:

```
npm install @faceki/angular-kyc-sdk
# or
yarn add @faceki/angular-kyc-sdk
```

### Getting Started

#### Import the Module

Import the `FacekiKycModule` into your Angular application module:

```
import { FacekiKycModule } from '@faceki/angular-kyc-sdk';

@NgModule({
  imports: [FacekiKycModule],
  // ...
})
export class YourAppModule { }
```

#### Set Configuration

Provide your KYC service configuration in your Angular app, typically in the providers array of your module. For example:

```
import { FacekiKycService } from '@faceki/angular-kyc-sdk';

@NgModule({
  // ...
  providers: [
    {
      provide: FacekiKycService,
      useValue: {
        clientId: 'your-client-id',
        clientSecret: 'your-client-secret'
      },
    },
  ],
})
export class YourAppModule { }
```

#### Add Bootstrap in index.html

```
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">

```

#### Link Assets

Add this to your `angular.json` inside `projects -> architect -> build -> assets`

```

   {
     "glob": "**/*",
     "input": "node_modules/@faceki/angular-kyc-sdk/assets",
     "output": "assets/"
   }


```

#### Use the Component

In your Angular component template, use the `<lib-faceki-kyc></lib-faceki-kyc>` custom element to integrate KYC functionality into your application:

```
<lib-faceki-kyc></lib-faceki-kyc>
```

#### Handle KYC Responses & Text Controls

Implement success and failure callbacks to handle KYC responses within your component, as demonstrated in the provided code examples:

```
// Your component class
import { FacekiKycService,MultiDocumentKYCResponseClass, SingleDocumentKYCResponseClass } from '@faceki/angular-kyc-sdk';

@Component({
  // ...
})
export class YourComponent {
  constructor(private facekiConfig: FacekiKycService) {
    this.facekiConfig.onSuccess = this.onSuccessCallback;
    this.facekiConfig.onFail = this.onFailCallback;
    this.facekiConfig.failureText = "Verification Failed";
    this.facekiConfig.successText = "Verification Successful";
    this.facekiConfig.loadingText = "Verification In Progress";
  }

  onSuccessCallback(response:SingleDocumentKYCResponseClass | MultiDocumentKYCResponseClass) {

    if (response instanceof SingleDocumentKYCResponseClass) {
      console.log('SingleDocumentKYCResponse:');
    } else if (response instanceof MultiDocumentKYCResponseClass) {
      console.log('MultiDocumentKYCResponse:', response);
    } 
  }
  onFailCallback(response:SingleDocumentKYCResponseClass | MultiDocumentKYCResponseClass) {

    if (response instanceof SingleDocumentKYCResponseClass) {
      console.log('SingleDocumentKYCResponse:');
    } else if (response instanceof MultiDocumentKYCResponseClass) {
      console.log('MultiDocumentKYCResponse:', response);
    } 
  }
}
```


# HTML

HTML (HyperText Markup Language) is the most basic building block of the Web. It defines the meaning and structure of web content. Other technologies besides HTML are generally used to describe a web.

## KYC-HTML

{% hint style="warning" %}
*The latest Stable Version is V2.0*&#x20;
{% endhint %}

{% embed url="<https://github.com/faceki/KYC-HTML-JAVASCRIPT-V2>" %}

## #Faceki Platform HTML/ JavaScript official SDK

Welcome to Faceki Official HTML integration instructions.

HTML (HyperText Markup Language) is the most basic building block of the Web. It defines the meaning and structure of web content. Other technologies besides HTML are generally used to describe a web page's appearance/presentation (CSS) or functionality/behavior (JavaScript).

Please refer to GetStarted and Quickguides documents.

*This project is currently in V2.0 Stable version.*

Let's Get your HTML running with Faceki HTML JavaScript SDK

## HTML Installation

* [Compress zip folder](https://github.com/faceki/KYC-HTML-JAVA-V2) and keep all files on the root folder
* Change "client\_id" and "client\_email" in /assets/js/faceki-startup.js

{% hint style="info" %}

* Click on the hidden eyes and securely copy the **Client ID** (token).
* To get your **Client ID**, first access  [Dashboard](https://apps.faceki.com/login) >> **Integration** >> **Integration**

Please don't share the token with anybody, highly secure and confidential&#x20;
{% endhint %}

* Get Client ID and Client Secret: After selecting a package, users can go to the integration screen on the link <https://apps.faceki.com/integration/client-id> to get their Client ID and Client Secret.

<figure><img src="/files/e71MAaRcUJIXta6o4XS3" alt=""><figcaption></figcaption></figure>

## SDK Setting

* From FACEKI dashboard go to **Integrations** > **SDK Setting**
* To control the number of documents and results based on the ID requirements

{% hint style="info" %}
To login to FACEKI dashboard [Click here - LOGIN](https://apps.faceki.com/login)
{% endhint %}

## Verifications Setting

\* Login to Dashboard <https://apps.faceki.com/login> >> Verifications >> Verification Setting

* To control Data Storage and Invalid Status Setting

{% hint style="info" %}
If you don't have an account, you can register for your account from the link [https://faceki.com/identity-verification-prices/](https://apps.faceki.com/pricing)
{% endhint %}


# Laravel

Laravel is a free, open-source PHP web framework. Intended for the development of web applications following the model–view–controller architectural pattern and based on Symfony.

{% hint style="warning" %}
*The latest Stable Version is V1.0*&#x20;
{% endhint %}

{% embed url="<https://github.com/faceki/KYC-Laravel>" %}

### Let's Get your Laravel App running with Faceki&#x20;

### **Requirement**

1. [Download Laravel ](https://laravel.com/docs/4.2)
2. Install Composer&#x20;
3. [Install Laravel](https://laravel.com/docs/4.2#install-laravel)

```
// composer global require "laravel/installer=~1.1"
```

1. Server Requirements

```
// PHP >= 5.4
MCrypt PHP Extension
```

5\. To use Faceki API, you need to register any of [Faceki packages on the link](https://faceki.com/identity-verification-prices/) then access  [Dashboard](https://faceki.com/backend/login) >> Integration and Copy Token&#x20;

{% hint style="info" %}

* Click on the hidden eyes and securely copy the **Client ID** (token).
* To get your **Client ID**, first access  [Dashboard](https://faceki.com/backend/login) >> **Integration** >> **Integration**

Please don't share the token with anybody, highly secure and confidential&#x20;
{% endhint %}

![](/files/DCszFquEA4mmiaKhF6Ix)

```
```

More details on [Getting Started](/#what-is-faceki-identity-verification)&#x20;

6\. Composer install

7\. Compress zip folder and keep all files on the root folder

8\.  Change "client\_id" and "client\_email" in public/assets/js/faceki-startup.js

<br>


# NodeJS API Library

Node API Library for KYC

## Faceki API Client V2

The Faceki API Client V2 is a TypeScript library that simplifies interactions with the Faceki API for Know Your Customer (KYC) verifications. It provides a straightforward way to initiate KYC verifications, retrieve verification records, perform face matching, and more.

### Installation

To use the Faceki API Client V2 in your project, install it via npm:

```
npm install @faceki/nodejs-api-client
```

### Usage

1. Import the `FacekiAPIClientV2` class:

   ```
   import FacekiAPIClientV2 from '@faceki/nodejs-api-client';
   ```
2. Initialize an instance of the client with your credentials:

   ```
   const client = new FacekiAPIClientV2('your_client_id', 'your_client_secret');
   ```
3. Utilize the available methods to interact with the Faceki API:
   * **Initiate Multi-Document KYC Verification**:

     ```
     const multiKycResponse = await client.requestMultiDocumentKYC(
       selfieImageBuffer,
       idFrontImageBuffer,
       idBackImageBuffer,
       dlFrontImageBuffer,
       dlBackImageBuffer,
       ppFrontImageBuffer
     );
     ```
   * **Initiate Single-Document KYC Verification**:

     ```
     const singleKycResponse = await client.requestSingleDocumentKYC(
       selfieImageBuffer,
       docFrontImageBuffer,
       docBackImageBuffer
     );
     ```
   * **Generate KYC Verification Link**:

     ```
     const kycLink = await client.generateKYCLink(
      expireTime,
      applicationId,
      redirect_url,
      document_optional,
      require_additional_doc);
     ```
   * **Fetch KYC Verification Summary**:

     ```
     const summary = await client.getKycSummary();
     ```
   * **Fetch KYC Records by Link ID**:

     ```
     const kycRecordsByLink = await client.getKYCrecordsByLink(linkId);
     ```
   * **Fetch KYC Records by Request ID**:

     ```
     const kycRecordsByRequestId = await client.getKYCRecordByRequestId(requestId);
     ```
   * **Fetch KYC Records by Reference ID**:

     ```
     const kycRecordsByReference = await client.getKYCRecordByReference(referenceId);
     ```
   * **Fetch KYC Records by Selfie**:

     ```
     const kycRecordsBySelfie = await client.getKYCrecordsBySelfie(selfieImageBuffer);
     ```

### Error Handling

The client manages various response statuses and errors, throwing custom error messages when necessary. Make sure to handle these errors appropriately in your code.

### Contributing

Contributions are welcome! If you encounter issues, have suggestions, or wish to improve the client, please open issues and pull requests.


# Python API Library

The FacekiAPIClientV2 is a Python client for interacting with the Faceki API. It provides methods to generate an access token, perform various KYC (Know Your Customer) operations

Prerequisites

* Python 3.6 or above
* `requests` library

#### Installation

1. Ensure that Python is installed on your system.
2. Install the `facekiapiclientv2` library by running the following command:

```
pip install facekiapiclientv2
```

#### Usage

1. Import the `requests` library and the `FacekiAPIClientV2` class:

   ```python
   import requests
   from facekiapiclientv2 import FacekiAPIClientV2
   ```
2. Create an instance of the `FacekiAPIClientV2` class by providing your client ID and client secret:

   ```python
   client_id = 'your_client_id'
   client_secret = 'your_client_secret'
   api_client = FacekiAPIClientV2(client_id, client_secret)
   ```
3. Use the available methods to interact with the Faceki API. Here are some examples:
   * Generate an access token:

     ```python
     api_client.generate_token()
     ```
   * Get KYC rules:

     ```python
     kyc_rules = api_client.getKYCRules()
     ```
   * Perform a KYC verification:

     ```python
     selfie_image = 'path_to_selfie_image.jpg'
     id_front_image = 'path_to_id_front_image.jpg'
     id_back_image = 'path_to_id_back_image.jpg'
     dl_front_image = 'path_to_dl_front_image.jpg'
     dl_back_image = 'path_to_dl_back_image.jpg'
     pp_front_image = 'path_to_pp_front_image.jpg'
     pp_back_image = 'path_to_pp_back_image.jpg'

     result = api_client.requestKYC(selfie_image, id_front_image, id_back_image,
                                    dl_front_image, dl_back_image, pp_front_image,
                                    pp_back_image)
     ```
   * Get KYC verification summary:

     ```python
     kyc_summary = api_client.getKycSummary()
     ```
   * Generate a KYC verification link:

     ```python
     expire_time = 0
     application_id = 'your_application_id'

     link = api_client.generateKYCLink(expire_time, application_id)
     ```
   * Get KYC records:

     ```python
     link_id = 'your_link_id'
     kyc_records = api_client.getKYCrecords(link_id)
     ```
   * Perform a face check:

     ```python
     selfie_image = 'path_to_selfie_image.jpg'

     result = api_client.faceCheck(selfie_image)
     ```

#### Exception Handling

The `FacekiAPIClientV2` class may raise exceptions in case of errors. Ensure that you handle these exceptions appropriately in your code. Examples of possible exceptions include:

* `requests.exceptions.RequestException`: Raised when there is an issue with making a request to the Faceki API.
* `Exception`: Raised for various errors such as failed token generation or failed requests.

#### Disclaimer

Please note that this client code is provided as a starting point and may require modifications or updates depending on the Faceki API's specific requirements or changes. Refer to the Faceki API documentation for detailed information about the API's endpoints, request/response structures, and authentication requirements.


# .NET API Library

The .NET SDK for Faceki is a software development kit that provides easy integration with the Faceki platform. It offers a set of APIs to simplify authentication and communication with the Faceki API

#### Nuget Package

```markup
https://www.nuget.org/packages/FacekiDotNet/
```

### Prerequisites

* .NET Framework 4.7.2 or later
* Visual Studio or any other compatible IDE

### Installation

You can install the .NET SDK for Faceki by following these steps:

1. Open your project in Visual Studio or your preferred IDE.
2. Open the NuGet Package Manager Console.
3. Run the following command to install the package:

```powershell
dotnet add package FacekiDotNet --version 1.0.1
```

### Usage

#### Initialize the Faceki client

To start using the Faceki SDK, you need to initialize the FacekiDotNet class with your client ID and client secret:

```csharp
using FacekiDotNet;

var clientId = "yourClientId";
var clientSecret = "yourClientSecret";

FacekiAPIs client = new FacekiAPIs(clientId ,clientSecret);
```

Replace `"yourClientId"` and `"yourClientSecret"` with your actual Faceki client ID and client secret.

#### GetKYCRules

Retrieves the KYC rules from the Faceki API.

```csharp
KYCRuleResponse kycRules = await facekiAPIs.GetKYCRules();
```

#### KYCRequest

Performs KYC verification using the provided images.

```csharp
KYCVerificationResponse kycVerificationResult = await facekiAPIs.KYCRequest(
    selfie_image: "path_to_selfie_image",
    id_front_image: "path_to_id_front_image",
    id_back_image: "path_to_id_back_image",
    dl_front_image: "path_to_dl_front_image",
    dl_back_image: "path_to_dl_back_image",
    pp_front_image: "path_to_pp_front_image"
);
```

#### GetKYCSummary

Retrieves the summary of KYC verifications performed.

```csharp
KYCSummaryResponse kycSummary = await facekiAPIs.GetKYCSummary();
```

#### GenerateKYCLink

Generates a KYC verification link that can be shared with users for verification.

```csharp
int expiryTime = 60; // Expiry time in minutes
string applicationId = "your_application_id";
KYCLinkGenerate kycLink = await facekiAPIs.GenerateKYCLink(expiryTime, applicationId);
```

#### GetKycRecords

Retrieves KYC verification records based on the provided link ID.

```csharp
string linkId = "your_link_id";
GetKycResultsData kycRecords = await facekiAPIs.GetKycRecords(linkId);
```

#### FaceMatch

Performs a face match verification using the provided selfie image.

```csharp
FaceMatchResponseData faceMatchResult = await facekiAPIs.FaceMatach("path_to_selfie_image");
```

Dispose the `FacekiAPIs` an instance when you are done using it to release the underlying resources:

```csharp
facekiAPIs.Dispose();
```

### Conclusion

The FacekiAPIs package provides a simple and efficient way to integrate with the Faceki API for facial recognition and KYC verification. By following the steps outlined in this documentation, you can easily incorporate the package into your project and utilize its functionality.

<br>


# React Native Starter Kit

React Native SDK For Faceki KYC

{% hint style="warning" %}
*The latest Stable Version is V2.0.0*
{% endhint %}

### Let's Get your React Native App running with FACEKI SDK

### Requirements

{% embed url="<https://github.com/faceki/react-native-sdk-v2>" %}
Github Faceki React Native V2 SDK Files
{% endembed %}

#### Video Demonstration&#x20;

{% file src="/files/aPSBojrbTiOhzcbeOzs4" %}
Video Demostration For Getting Started
{% endfile %}

#### &#x20;React Native Getting Started

This project is build on react-native-cli. you can setup your development environment as per the detailed steps mentioned on this link

```
https://reactnative.dev/docs/environment-setup?guide=native
```

1. Install Node.js: React Native requires Node.js, so you'll need to install it on your system. You can download the installer from the Node.js website ([https://nodejs.org](https://nodejs.org/)) and follow the installation instructions for your operating system.
2. Install a code editor: Choose a code editor that you prefer to work with, such as Visual Studio Code, Atom, or Sublime Text. Install your chosen code editor on your system.
3. Install Java Development Kit (JDK): React Native relies on Java for Android development. Download and install the JDK appropriate for your operating system. You can find the JDK downloads on the Oracle website (<https://www.oracle.com/java/technologies/javase-jdk11-downloads.html>).
4. Install Android Studio: Android Studio provides the necessary tools for Android development. Download and install Android Studio from the official website (<https://developer.android.com/studio>). Follow the installation instructions and make sure to install the Android SDK during the setup process.
5. Configure Android environment variables: After installing Android Studio, you'll need to set up some environment variables on your system. These variables include `ANDROID_HOME`, which should point to the Android SDK directory, and `PATH`, which should include the `platform-tools` and `tools` directories of the Android SDK.
6. Install Xcode (for macOS only): If you're developing for iOS, you'll need to install Xcode, which is only available on macOS. You can download Xcode from the Mac App Store.
7. Install react-native-cli: Open a terminal or command prompt and run the following command to install react-native-cli globally on your system

```bash
npm install -g react-native-cli
```

### Check [Getting Started](/)&#x20;

### Steps

1. To use Faceki API, you need to register any of [Faceki packages on the link](https://apps.faceki.com/pricing) and then access  [Dashboard](https://apps.faceki.com/) >> Integration >> [Client-ID](<https://apps.faceki.com/integration/client-id >)
2. . Click on the hidden eyes and securely copy the **Client ID** (token).

<figure><img src="/files/e71MAaRcUJIXta6o4XS3" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Please don't share the token with anybody, highly secure and confidential&#x20;
{% endhint %}

3\. Edit this to your Project's config file located at src/configs/facekiConfig.ts

<figure><img src="/files/OguRCRacB8UhhDzEE5e0" alt=""><figcaption></figcaption></figure>

4\. Now you can install the NPM Packages using NPM:

```bash
npm i
```

5\. Now you can simply run the Application:

```bash
npx react-native start
```

#### You can also check out FACEKI's <img src="/files/wd3onXMzubZBcHScGA2v" alt="" data-size="line">Github <img src="/files/vjAMxR4F4m0YWUJdt6y4" alt="" data-size="line">


# Zero Integration

Start Verifying documents without the need to do any integration.

This feature allows you to generate a [KYC verification link](https://apps.faceki.com/Workflow/Verification-Link) from the user dashboard to verify users without the need for integration. The generated link can be sent directly to the users for verification.

{% hint style="info" %}
**User Dashboard/ KYC Verification screen Checks:**

* `number_of_documents` (required): The number of documents the user needs to provide for verification.
* `document_type` (required): The type of document required for verification.
* `liveliness_check` (required): Specifies whether a liveliness check should be performed during the verification process.
  {% endhint %}

Response: Upon successful generation of the KYC verification link, the API will return a response containing the generated link.

{% embed url="<https://www.youtube.com/watch?v=W44LejBvNDM>" %}

## **Step 1: Configure Verification Workflow**

1. From the [FACEKI dashboard](https://apps.faceki.com/login), navigate to **Workflow >** [**Verification Workflow** ](https://apps.faceki.com/workflow/documents-to-verify). Here, you can configure the verification workflow by selecting the desired number of documents, document type, and type a liveliness check should be performed.

<figure><img src="/files/IgDuZpyhnLBi3YvyHzDt" alt=""><figcaption></figcaption></figure>

## **Step 2: Customize Response Screens and Redirect Link**

2. Next, navigate to **Workflows >** [**Verification Screen** ](https://apps.faceki.com/Workflow/Verification-Screens)to customize the response screens that users will see once the verification process is completed. Additionally, you can specify a redirect URL (using HTTPS) where users will be redirected upon successful completion of the verification.

You can find 3 screens, Successful, Declined, and Invalid, you can edit the text field below.&#x20;

<figure><img src="/files/nIiFmVHSMQcfFLIy1PDX" alt=""><figcaption></figcaption></figure>

## **Step 3: Generate KYC Link**

Finally, go to **Workflows >** [**Verification Link**](https://apps.faceki.com/Workflow/Verification-Link) to generate the KYC verification link. Set the desired validity period for the link (how long it will remain active) and specify the usage count (how many times the link can be used, 0 for unlimited).

You can then copy the generated link and send it to the user for verification. The user will be able to follow the link to complete the KYC verification process.

By following these steps, you can easily generate and manage KYC verification links using the FACEKI web-based verification solution, providing a seamless and convenient experience for your users.&#x20;

<figure><img src="/files/X4qPJuZCd3hoQKFXNDHc" alt=""><figcaption></figcaption></figure>


# Support

Got an issue or a suggestion? you can reach us in three easy ways.

### [Support Ticket](/need-help/support/support-ticket)

### [Skype](/need-help/support/skype)

### [Email Support](/need-help/support/email-support)


# Support Ticket

Tickets section allows for the creation of support tickets with our team, the main dashboard shows the overall ticket counts, their category, status and last updated dates.

## How to Access Tickets

![](/files/F94CVSHbyQY2vSQIw8PY)

Click on 'Tickets' from the menu on the dashboard

## Create New Ticket

![](/files/cfjeJZxr24njG4ZNhcEj)

To create a ticket, click on 'New tickets', then fill up the complaint with a title, category, priority and then your message describing the issue you're facing.

Upon creating a ticket, you can choose one of the following categories:&#x20;

* Support - Tickets created for our technical team to verify integration, issues, troubleshoot etc.&#x20;
* Billing - Tickets created to our admin and operations stuff to verify billing or subscription information etc.&#x20;
* Sales - to contact our sales team, if in need for a quotation, upgrade etc.

## Open Tickets

![](/files/NXVyylxXrzQX9fJ9lRkG)

To find the recently opened or existing tickets, click on 'My tickets', you can click on the title of the ticket to view the ticket details with the replies. You can also view the status of the ticket and the last updated time.


# Skype

You can now contact us on Skype.

Communications are important to us, we want to be as close to you as possible.&#x20;

## Let's chat on Skype.

{% embed url="<https://join.skype.com/invite/yka4jSDkVvVm>" %}

{% hint style="success" %}
Use the link above to connect you directly to us.
{% endhint %}

![](/files/xlGOI8oS4lMjkW8EvmFV)

Upon clicking on the link, you will receive this message. Click on Join on web or Download Skype and click on the link again to connect you directly to us.


# Email Support

We're here to help, Email us.

You can always contact our support department for any enquiry or questions that you may have. You can email us at <Support@faceki.com>


# FAQ's

## Compliance and Data Security

<details>

<summary>Are all data encrypted during transfer to/from FACEKI?</summary>

All SDK related traffic is encrypted and sent over HTTPS using TLS 1.2.

</details>

<details>

<summary>What happens to my ID data? Does FACEKI share or Sell user's data?</summary>

Complying with the EU and UK GDPR, FACEKI does not sell data to any third parties. The processed data is stored encrypted, in secure data servers under strict security measures to provide maximum data protection for our clients and in compliance with security standards.

</details>

<details>

<summary>Does FACEKI have any compliance certificate?</summary>

FACEKI holds a variety of Compliance and Cyber Security certifications which include (QG) Quality Guild Management Standards – GDPR compliance certification, PCI Security Standards Council’s (PCI DSS)

</details>

<details>

<summary>Does FACEKI comply with GDPR?</summary>

Yes, FACEKI holds a GDPR compliance certificate issued by QG (Quality Guild Management Standards), assessed through GDPR Management Standards that have been written using the principles of the General Data Protection Regulation (EU 2016/679).

</details>

<details>

<summary>Does FACEKI store any data?</summary>

Because the data you host with us belongs to you, you have control over where it is stored and how it is accessed and deleted. you can control that through the Data storage option, in order to use our dashboard and view the users on the verification monitoring page, you require to keep the data storage on (with the ability to store for a customizable duration of time).&#x20;

However, you can turn the data storage off, the data will be pushed to you through API without the ability to view your verification monitoring page on the dashboard.

</details>

<details>

<summary>What kind of checks do you perform to validate the authenticity of the document?</summary>

FACEKI uses multiple authentication modules to identify fake documents. This is based on our own fake ID database and a sophisticated computer vision technology. Our checks includes, Data visibility, image quality, feature referencing, edits and text checks, and country specific security checks.

</details>

<details>

<summary>Do you perform independent security checks? </summary>

We collaborate with multiple security partners to validate our environment and code for vulnerabilities. We also perform periodic security assessments and penetration test as per industry best practices.&#x20;

</details>

## Integration

<details>

<summary>What type of integration does FACEKI offer?</summary>

FACEKI offers a restful API, No JS SDK, HTML SDK, Android SDK, iOS SDK, and FACEKI Zero-Integration.

</details>

<details>

<summary>Do I get any tech support for installation?</summary>

Our technical team can guide you through the integration and implementation process, you can contact us on [Support@faceki.com](mailto:support@faceki.com)

</details>

## Support

<details>

<summary>Can I request additional documents for the countries that are not included in the supported countries?</summary>

Yes, if documents are relevant and there is a demand, you may request supporting additional documents from the said country.

</details>

<details>

<summary>Will I be able to upgrade my package to a more suitable solution when I need to?</summary>

Yes. As a first step, we will help you choose the right plan for your needs accordingly to ensure that you are not overcharged or rushed.

As you grow and start progressing, your needs will change. Contact us again and we will adjust you to a solution that better fits your needs.

</details>

## Process

<details>

<summary>What do I need to start the verification process?</summary>

You must have a laptop or mobile with an operational camera and government-issued ID documents to begin the verification. These documents could be an ID card, passport, driving license or any other ID document that is supported by FACEKI.&#x20;

[View Supported Documents ](https://faceki.com/supported-documents/)

</details>

<details>

<summary>How long does the verification process take?</summary>

Your end-users can get themselves verified within 30-60 seconds.

</details>

<details>

<summary>Which Documents are acceptable for KYC?</summary>

Government-issued ID documents are acceptable that are not expired. Passports, ID cards, driving license. [View Supported Documents ](https://faceki.com/supported-documents/)

The choice of ID document to the merchant. If the merchant has chosen an ID card, all customers have to show their government-issued ID card for the process. Moreover, we allow merchants to choose more than one document for customer verification.

</details>

<details>

<summary>Does the required data fields differ according to the country?</summary>

Yes, the data fields that a person must provide in order to get verified vary from country to country as per their government-issued identity documents and regulatory framework. The format of ID documents differs between countries.

</details>

<details>

<summary>Can I re-verify my customers against AML watchlist?</summary>

Yes, manual AML/PEP verifications are available, you can find it in the dashboard under the verification bar.

</details>

<details>

<summary>Do I get the full verification details if the customer or regulator come knocking?</summary>

Yes, a whole report can be downloaded when you click on view full details of the users in the Verification Monitoring page.&#x20;

</details>

<details>

<summary>What can I do if I get stuck?</summary>

Step 1: Breathe.

Step 2: Head to our Ticket section.

Step 3: Issue a Ticket and describe your problem in great detail.

We'll respond as fast as we can.

</details>


