# Home

## Introduction

Synapses is an integrated **all-in-one** platform from Kredibel, offering **Anti-fraud**, **Anti Money Laundering**, and **Counter-Terrorism Financial Service**.

## Products

![Kredibel Workflows](/files/-Mcweoj7xnC3132oOA5v)

Make smarter decisions with our real-time fraud detection. Our solutions help you to onboard more good users, comply with government regulations, and reduce fraud rates.

### Fraud Detection System

Monitor your transactions in real-time. Reject fraudulent transactions, review suspicious transactions, and accept legitimate transactions. Reduce fraud rates, and increase conversions.

#### API References

* [Account Screening](/api-references/account-screening)

### Customer Due Diligence

Identify risks by performing customer due diligence with Kredibel's AML Databases of PEPs, Sanctions, and Watchlists in a structured profile.

#### API References

* [Watchlist Screening](/api-references/account-screening/watchlist-screening)

### Know Your Customer

Shorten customer onboarding process and increase conversions. Onboard more good customers with Kredibel VisionAI technology.

#### API References

* [Identity Verification](/api-references/identity-verification)
* [Text Recognition](/api-references/text-recognition)
* [Face Recognition](/api-references/face-recognition)

## Pages

### Dashboard

| Environment | URL                                                                                                                      |
| ----------- | ------------------------------------------------------------------------------------------------------------------------ |
| Production  | [synapses.kredibel.com&#xD;](https://synapses.kredibel.co.id)                                                            |
| Development | [synapses.sandbox.kredibel.com](https://synapses.sandbox.kredibel.co.id)[&#xD;](https://synapses.sandbox.kredibel.co.id) |

## Support

| Channel | Value                      |
| ------- | -------------------------- |
| Email   | <developer@kredibel.co.id> |


# Security

## Compliances

Kredibel is certified **ISO 27001:2013** (Information Security Management System) company. Kredibel also listed as *Penyelenggara Sistem Elektronik* (**PSE KOMINFO**) in Indonesia.

| Type           | Number                                                                                                                                                          |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ISO 27001:2013 | [ISMS1001153](https://www.cbqaglobal.com/validation/company/pt-kredibel-teknologi-indonesia/)                                                                   |
| PSE KOMINFO    | [001901.01/DJAI.PSE/01/2022](https://pse.kominfo.go.id/tdpse-detail/2964) (SE Baru) & [03033/DJAI.PSE/10/2020](https://pse.kominfo.go.id/sistem/4069) (SE Lama) |

## Encryption

All sensitive informations are encrypted with **AES-GCM** with a 256-bit AES key and a 96-bit nonc&#x65;**.** We use our dedicated vault management system to encrypt and decrypt data. Decryption keys are safely stored on **separate machines**.

## Manage Data

Kredibel allows you to fully managed your data. You can easily delete data from your [Synapses Dashboard](/#pages).

{% hint style="danger" %}
When you delete the history, the data will be **hard deleted**. That means you **cannot restore** data that you have deleted.
{% endhint %}

1. Login to [Synapses Dashboard   ](/#pages)
2. Open the history data you want to delete
3. Click "**Delete Selected (n)**" or "**Delete All**"


# Scoring Engine

## Introduction

At Kredibel, we know every company and use case requires different configurations and scoring rules. That's why we created Scoring Engine, a tool that helps you to fully customize your risk scoring according to your use case and needs.

{% hint style="info" %}
Scoring engine can only be applied to [account screening](/api-references/account-screening)
{% endhint %}

Custom Config and Rules

Synapses API allows you to set up a custom configuration and define custom rules. To use custom config and rules, you need to create it first from the synapses dashboard.

### Create New Config

![Custom Config](/files/-MfyvELXwBMwFtor1RAV)

1. Login to [Synapses dashboard   ](/#pages)
2. Click the “**Config**” menu on the sidebar
3. Click "**Add New**" button
4. Add config’s name
5. Setup the config and add some rules
6. Save the config by click "**Create New**" button
7. Your configId is on the id column

### Create New Rules

![Custom Rules](/files/-Mfyv_vY3y-7LGzi9L5G)

1. Open your existing config or [create a new one](/system/scoring-engine#create-new-config)
2. Click tab "**Rules**"
3. Click "**Add New Rule**" button
4. Define the rule
5. Click "**Save Changes"** button

### How to Use

{% hint style="info" %}
Please read the [documentation](/api-references/account-screening#custom-config-and-rules) here
{% endhint %}


# Blacklist & Whitelist

If you have your own blacklist and whitelist data, you can easily add them to Kredibel.

### Available List Features

* Bank Account
* Phone Number
* Email Address
* IP Address
* Identity

## Add New Data

![Data List](/files/-MfyyuQDlO73uO6dYshO)

1. Login to [Synapses dashboard   ](/#pages)
2. Click the "**Fraud Detection**" > "**Account List**" menu on the sidebar
3. Click the "**Add New**" button
4. Input the data


# Team Management

![Team Management](/files/-MfyzMWyOtFDTe5dZUU_)

Kredibel allows you to collaborate by inviting your teammates to the dashboard.

## Invite User

1. Login to [Synapses dashboard   ](/#pages)
2. Click "**Team Management**" menu on the sidebar
3. Click "**Add New**" button
4. Input email and role

### User Roles

| Roles     | Description                                                   |
| --------- | ------------------------------------------------------------- |
| Admin     | Access all features and pages                                 |
| Developer | Access only developer page                                    |
| User      | Access all features except developer page and team management |


# Getting Started

New to Kredibel? Don't worry, we're here to help you to integrate with our system.

## Start

1. [Environment](/environment)
2. [Authorization](/authentication-1)

## Use Cases

### User Onboarding

#### Identify Risk

* [Account Screening](/api-references/account-screening)

#### Faster Onboarding

* [Text Recognition](/api-references/text-recognition)
* [Face Comparison](/api-references/face-recognition/face-comparison)


# Environment

Kredibel currently has two different environments, **sandbox** and **production**. The sandbox environment is only intended for the development or integration stage of the service. Meanwhile, the production environment is used when the integration status has entered the production stage.

Both of these environments have different network topologies and architectures. For example, we use a multi-zone data center in a production environment that can autoscale and fault tolerance for achieving high availability, while the sandbox environment only uses a single-zone data center.

{% hint style="info" %}
After completing the integration, you only need to change the **endpoint** to the production endpoints and replace the **token** with the production token.
{% endhint %}


# Authorization

Synapses API uses API keys to authenticate requests. These API keys can be generated from [synapses.kredibel.com](https://synapses.kredibel.com) or [synapses.sandbox.kredibel.com](https://synapses.sandbox.kredibel.com) for development purposes and must be supplied with each request.

## Generating API Key

1. Login to[ Synapses dashboard   ](/#pages)
2. Click on the `Setting` -> `API Token` or directly visit [`<dashboard>`](/#pages)`/developer/token`
3. Click “**Generate**”

## Using API Key

An API key is a token that a client provides when making API calls. Synapses API provides two methods for authentication.&#x20;

1. As a query string parameter

   | Method   | Key               |
   | -------- | ----------------- |
   | **POST** | <p><code>{</code> |

   </p><p>    <code>"key": "</code><strong><code>YOUR_API_KEY</code></strong><code>"</code>   </p><p><code>}</code></p> |
   | **GET**  | `<endpoint>/v1/example?key=`**`YOUR_API_KEY`**                                                                                       |
2. In the authorization header\
   `"Authorization: Bearer`` `**`YOUR_API_KEY`**`"`

{% hint style="info" %}
Both of the methods above work with Synapses API. The query string is easier to implement. But, makes it easier to discover for someone who should not have access to it. For every API call, we recommend using an **authorization header** since it is more secure.
{% endhint %}


# Responses & Errors

{% hint style="info" %}
Our API uses standard HTTP codes to indicate if the request is successful or failed
{% endhint %}

Successful requests will return both a `“message”` and `“data”` field with a 2XX status code. Data can be represented by an object or array type.

```
{
    "message": "Response message",
    "data": {
       # Response should be here
    }
}
```

```
{
    "message": "Response message",
    "data": [
       # Response should be here
    ]
}
```

Unsuccessful requests will return a “message” field containing the error message, with 4XX or 5XX status code.

**Common error message**

```
{
    "message": "Error message."
}
```

**Error message with error id**

{% hint style="info" %}
If you experience issues or errors while using our service, we highly recommend that you contact us by providing the **`errorId`** that you get along with the error message. That way, our team can easily trace the issue
{% endhint %}

```
{
    "errors": {
        "errorId": <log_id:uuid>
    },
    "message": "Error message."
}
```

**Error message with error type**

```
{
   "errors":{
      "errorId": <log_id:uuid>,
      "errorType": <error_type:str>
   },
   "message": "Error message."
}
```

**Validation error**

```
{
    "errors": {
        "fieldName": [
            "Unknown field."
        ]
    },
    "message": "Input payload validation failed."
}
```


# Account Screening

## Introduction

Account screening is an endpoint that can be used for many use cases. It’s an **all-in-one** API that helps you onboard more good users, comply with government regulations, and reduce fraud rates.

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

## Endpoints

| Method | URL                              |
| ------ | -------------------------------- |
| POST   | `$synapses/v1/account/screening` |

## Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

## Custom Config and Rules

To start using custom config and rules, you need to [create a config](/system/scoring-engine#create-new-config). Then, after you create a config and get `configId` you can use it by defining `configId` like the code below supplied in Account Screening.

![Config List](/files/-Mfyxr5gbJwp4L-yC0v2)

```
{
	"configId": "<YOUR_CONFIG_ID>",
	...
}
```

## General Response

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

| Field  | Type                                                           | Description                                      |
| ------ | -------------------------------------------------------------- | ------------------------------------------------ |
| id     | String                                                         | Unique identifier.                               |
| score  | Float                                                          | The accumulated value of all credibility scores. |
| status | <p>String</p><p><code>\["pass", "review", "reject"]</code></p> | <p><strong>Pass</strong>: Everything is alright. |

</p><p><strong>Review</strong>: There is something to be suspected. You have to check it manually.</p><p><strong>Reject</strong>: Potentially of high risk account. </p> |
{% endtab %}

{% tab title="Example" %}

```
{
    "message": "Account Screening - Single.",
    "data": {
        "id": "28b78927-8546-45fd-ba9f-17239bf366a9",
        "score": -15,
        "status": "review",
        ...
    }
```

{% endtab %}
{% endtabs %}

## Modules

To start using Account Screening Service, you must define at least **one or more** modules that you want to use.

* [Bank Account](/api-references/account-screening/bank-account)
* [Phone Number&#x20;  ](/api-references/account-screening/phone-number)
* [Email Address  ](/api-references/account-screening/email-address)
* [IP Address  ](/api-references/account-screening/ip-address)
* [AML ](/api-references/account-screening/watchlist-screening)[Screening](/api-references/account-screening/watchlist-screening)
* [KYC Identity Module  ](broken://pages/-McxZGFzhvdQORS_ppAI)
* [KYC Face Module  ](broken://pages/-McxZGcKxisa1ekZdky-)


# Watchlist Screening

You can use the Watchlist Screening module by defining a person's fullName to your JSON request. For a specific search, you can add birthDate and gender as a filter or using a pseudo filter.

## Description

A watchlist screening (AML/CFT) is a solution that helps financial institutions and other organizations comply with anti-money laundering (AML) and counter-financing of terrorism (CFT) regulations. This solution allows organizations to search for and identify potential matches against a list of known or suspected individuals and entities involved in money laundering or terrorist financing activities.

## Endpoints

| Method | URL                                  |
| ------ | ------------------------------------ |
| POST   | `$synapses`**/v1/account/screening** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

## **Using Standard Filter**

### **Request**

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

<table data-header-hidden><thead><tr><th width="242.66666666666666">Field</th><th width="176">Type</th><th width="300.33333333333337">Description</th></tr></thead><tbody><tr><td>Field</td><td>Type</td><td>Description</td></tr><tr><td><p>fullName </p><p><strong><code>(Required)</code></strong></p></td><td><code>String</code></td><td>Full name of the person you want to check </td></tr><tr><td>fullNameFilterTitle</td><td><code>Boolean</code></td><td>If <code>true</code>, then the academic degree on the name input will be filtered<br>e.g. "Drs. Setya Novanto" -> "Setya Novanto"<br><br>Note:<br>- Default is <code>false</code> </td></tr><tr><td>birthDate</td><td><p><code>Date</code></p><p><strong><code>("yyyy-mm-dd")</code></strong></p></td><td>Birthdate of the person</td></tr><tr><td>birthPlace</td><td><code>String</code></td><td>Birthplace of the person</td></tr><tr><td>gender</td><td><p><code>String</code></p><p><strong><code>["male", "female"]</code></strong></p></td><td>Gender of the person</td></tr><tr><td>country</td><td><code>String</code></td><td>Country of the person<br><br>e.g. Indonesia</td></tr><tr><td>searchAliasFields</td><td><code>String [Array]</code><br><strong><code>["nativeName", "alias", "lowAliases", "previousAliases", "spellingVariationNames", "languageVariationNames", "maidenNames"]</code></strong></td><td>Match the fullName query with the fields</td></tr><tr><td>searchType</td><td><p><code>String</code></p><p><strong><code>["match", "match_exact"]</code></strong></p></td><td>Type of the searching algorithm<br><br>Note:<br>- match: fuzzy searching <strong>(default, recommended)</strong><br>- exact match: only return 100% match</td></tr><tr><td>searchSimilarityAlgorithm</td><td><code>String</code><br><strong><code>["levenshtein", "n-gram"]</code></strong></td><td>Type of the similarity algorithm used for searching<br><br>Note:<br>- levenshtein: <strong>(default, recommended)</strong><br><strong>-</strong> n-gram: similarity between "Habibie" and "B.J. Habibie" is 100% match </td></tr><tr><td>searchDataSources</td><td><code>String [array]</code><br><strong><code>["kredibel"]</code></strong></td><td>Data source used for searching</td></tr><tr><td><a href="#profile-types">profileTypes</a></td><td><code>String [array]</code><br><strong><code>["PEP", "RCA", "SIP", "Sanction", "Watchlist", "Crime"]</code></strong></td><td>List of the profile types you want to check </td></tr><tr><td><a href="#crime-categories">crimeCategories</a></td><td><code>String [array]</code></td><td>Profile related to the category of crime you want to search</td></tr><tr><td><a href="#ongoing-screening">ongoingScreening</a></td><td><code>Boolean</code></td><td>If <code>true</code>, then Kredibel system will do regular monitoring. It means, you'll get notified when there is an update to the result.<br><br>Note:<br>- Only available for <strong>transaction monitoring</strong> subscription</td></tr><tr><td>minSimilarity</td><td><p><code>Float</code> </p><p><strong><code>(0-1)</code></strong></p></td><td><p>The minimum similarity of the result between the query name and the result name<br>e.g. if the treshold is 0.8, then only result has >= 0.8 (80%) match displayed <br><br><em>Note:</em> <br>- default treshold is 0.8</p><p><strong>-</strong> <em>0.5 = 50%, 1 = 100% match</em></p></td></tr></tbody></table>
{% endtab %}

{% tab title="Example  (Full)" %}

```
{
    "fullName": "Joko Widodo",
    "fullNameFilterTitle": false,
    "birthDate": "1961-06-21",
    "birthPlace": "Surakarta",
    "gender": "male",
    "country": "Indonesia",
    "searchType": "match",
    "searchAliasFields": ["nativeName", "alias", "lowAliases", "previousAliases", "spellingVariationNames", "languageVariationNames", "maidenNames"],
    "searchDataSources": ["kredibel"],
    "searchSimilarityAlgorithm": "levenshtein",
    "profileTypes": ["PEP", "SIP", "RCA", "Sanction", "Watchlist"],
    "ongoingScreening": true,
    "minSimilarity": 0.8
}
```

{% endtab %}

{% tab title="Example (Simple)" %}

```
{
    "fullName": "Joko Widodo"
}
```

{% endtab %}

{% tab title="Example (Recommend)" %}

```
{
    "fullName": "Joko Widodo",
    "birthDate": "1961-06-21"
}
```

{% endtab %}
{% endtabs %}

### **Response**

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

| Field              | Type     | Description                            |
| ------------------ | -------- | -------------------------------------- |
| id&#xD;            | `String` | Unique identifier of PEP search result |
| <p>fullName</p><p> |          |                                        |

</p>  | `String`                                                                        | Name of the person you search                                   |
| birthPlace               | `String`                                                                        | Birthplace of the person you search                             |
| birthDate&#xD;           | <p><code>Date</code> </p><p><strong><code>("yyyy-mm-dd")</code></strong></p>   | Birthdate of the person you search                              |
| gender                   | `String`                                                                        | Gender of the person you search                                 |
| country                  | `String`                                                                        | Country of the person you search                                |
| totalCount&#xD;          | `Integer`&#xD;                                                                  | Number of total matches profile                                 |
| maxSimilarity&#xD;       | `Float`&#xD;                                                                    | Maximum similarity value between your query and matches profile |
| result                   | `Array`                                                                         | List of matches politically exposed persons                     |
| [riskLevel](#risk-level) | <p><code>String</code><br><code>["high", "medium", "low", "unknown"]</code></p> | Level of risk                                                   |
| score&#xD;               | `Float`&#xD;                                                                    | Credibility score                                               |
{% endtab %}

{% tab title="Example" %}

```
{
    "message": "Watchlist screening",
    "data": {
        "id": "540d9073-62a3-4ea9-8693-ef9e5487e509",
        "fullName": "Joko Widodo",
        "birthPlace": "Surakarta",
        "birthDate": "1961-06-21",
        "gender": "male",
        "country": "Indonesia",
        "totalCount": 1,
        "totalSanctionCount": 0,
        "totalWatchlistCount": 0,
        "totalPepCount": 1,
        "totalRcaCount": 0,
        "totalSipCount": 0,
        "totalCrimeCount": 0,
        "maxSimilarity": 1.0,
        "kredibel": {
            "count": 1,
            "sanctionCount": 0,
            "watchlistCount": 0,
            "pepCount": 1,
            "rcaCount": 0,
            "sipCount": 0,
            "crimeCount": 0,
            "maxSimilarity": 1.0,
            "result": [
                {
                    "id": "66499d4f2099f613265313cee676cd1b",
                    "entity": "person",
                    "name": "Joko Widodo",
                    "nativeName": "Joko Widodo",
                    "gender": "male",
                    "birthPlace": "Surakarta, Central Java, Indonesia",
                    "birthDate": "1961-06-21 00:00:00",
                    "deathDate": null,
                    "description": "Presiden Indonesia ke-7 (2014-Sekarang)",
                    "detailDescription": "Ir. H. Joko Widodo adalah presiden Indonesia yang mulai menjabat sejak tanggal 20 Oktober 2014. Terpilih dalam Pemilu Presiden 2014, Jokowi menjadi presiden Indonesia pertama yang bukan berasal dari elite politik atau militer Indonesia. Dia terpilih bersama Wakil Presiden Jusuf Kalla dan kembali terpilih bersama Wakil Presiden Ma'ruf Amin dalam Pemilu Presiden 2019. Sebelumnya, Jokowi pernah menjabat sebagai gubernur Jakarta sejak 15 Oktober 2012 hingga 16 Oktober 2014 didampingi Basuki Tjahaja Purnama sebagai wakil gubernur. [Wikipedia]",
                    "updatedAt": null,
                    "alias": [
                        "Jokowi",
                        "President Joko Widodo",
                        "Џокови",
                        "佐科·维多多",
                        "Haji Joko Widodo",
                        "佐科威",
                        "Джокови",
                        "Cokovi",
                        "Мульоно",
                        "Джокоуи",
                        "Preisdent Jokowi",
                        "جۆکۆوی",
                        "Džokovi",
                        "Mulyono",
                        "Ir. H. Joko Widodo"
                    ],
                    "lowAliases": [],
                    "previousAliases": [],
                    "maidenNames": [],
                    "spellingVariationNames": [],
                    "languageVariationNames": [
                        "جوکو ویدودو",
                        "Џоко Видодо",
                        "佐科·维多多",
                        "Τζόκο Ουιντόντο",
                        "佐科·維多多",
                        "جوكو ويدودو",
                        "ג'וקו וידודו",
                        "Joko Widodo",
                        "ဂျိုကို ဝီဒိုဒို",
                        "जोको विडोडो",
                        "جوکو ودودو",
                        "Җоко Видодо",
                        "ജോക്കോ വിഡൊഡൊ",
                        "佐戈",
                        "Coko Vidodo",
                        "জোকো উইদোদো",
                        "โจโก วีโดโด",
                        "조코 위도도",
                        "ចូកូ វីដូដូ",
                        "ஜோக்கோ விடோடோ",
                        "Ջոկո Վիդոդո",
                        "جوکو ويدودو",
                        "جوڪو ودودو",
                        "ジョコ・ウィドド",
                        "Джоко Видодо",
                        "Джоко Уидодо",
                        "Ճոքօ Ուիտոտօ",
                        "Džoko Vidodo",
                        "Ҷоко Видодо",
                        "ਜੋਕੋ ਵਿਡੋਡੋ",
                        "جۆکۆ ویدۆدۆ",
                        "ჯოკო ვიდოდო",
                        "Джоко Відодо",
                        "Джока Відода"
                    ],
                    "birthPlaces": [],
                    "birthDates": [],
                    "images": [
                        "https://img.kredibel.co.id/politiface/profile/ac1aff11543cd387827c68a3371c72f0.png"
                    ],
                    "roles": [
                        {
                            "level": null,
                            "endDate": null,
                            "location": null,
                            "roleType": null,
                            "startDate": "2014-10-20 00:00:00",
                            "occupationTitle": "President of Indonesia"
                        },
                        {
                            "level": null,
                            "endDate": "2014-10-20 00:00:00",
                            "location": null,
                            "roleType": null,
                            "startDate": "2012-10-15 00:00:00",
                            "occupationTitle": "Governor of the Special Capital Region of Jakarta"
                        },
                        {
                            "level": null,
                            "endDate": "2012-10-01 00:00:00",
                            "location": null,
                            "roleType": null,
                            "startDate": "2005-07-28 00:00:00",
                            "occupationTitle": "Mayor of Surakarta"
                        }
                    ],
                    "residents": [
                        {
                            "type": "citizenship",
                            "value": "Indonesia"
                        }
                    ],
                    "crimes": [],
                    "sanctions": [],
                    "types": [
                        "PEP"
                    ],
                    "profileUrl": "https://synapses.sandbox.kredibel.com/watchlist/profile/540d9073-62a3-4ea9-8693-ef9e5487e509/66499d4f2099f613265313cee676cd1b",
                    "similarity": 1.0,
                    "dataset": "int-watchlist",
                    "matchFields": [
                        "name",
                        "birthDate"
                    ]
                }
            ],
            "start": 1,
            "size": 10
        },
        "riskLevel": "medium",
        "score": -15.0
    }
}
```

{% endtab %}
{% endtabs %}

## **Using Pseudo Filter (Recommended Method)**

{% hint style="info" %}
If you use a standard filter, data that has no date of birth will not be displayed. With a pseudo filter, you will get data that match with a query or does not have the attributes.
{% endhint %}

### **Request**

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

<table data-header-hidden><thead><tr><th width="242.66666666666666">Field</th><th width="176">Type</th><th width="300.33333333333337">Description</th></tr></thead><tbody><tr><td>Field</td><td>Type</td><td>Description</td></tr><tr><td><p>fullName </p><p><strong><code>(Required)</code></strong></p></td><td><code>String</code></td><td>Full name of the person you want to check </td></tr><tr><td>fullNameFilterTitle</td><td><code>Boolean</code></td><td>If <code>true</code>, then the academic degree on the name input will be filtered<br>e.g. "Drs. Setya Novanto" -> "Setya Novanto"<br><br>Note:<br>- Default is <code>false</code> </td></tr><tr><td>pseudoBirthDate</td><td><p><code>Date</code></p><p><strong><code>("yyyy-mm-dd")</code></strong></p></td><td>Birthdate of the person</td></tr><tr><td>pseudoBirthPlace</td><td><code>String</code></td><td>Birthplace of the person</td></tr><tr><td>pseudoGender</td><td><p><code>String</code></p><p><strong><code>["male", "female"]</code></strong></p></td><td>Gender of the person</td></tr><tr><td>pseudoCountry</td><td><code>String</code></td><td>Country of the person<br><br>e.g. Indonesia</td></tr><tr><td>searchAliasFields</td><td><code>String [Array]</code><br><strong><code>["nativeName", "alias", "lowAliases", "previousAliases", "spellingVariationNames", "languageVariationNames", "maidenNames"]</code></strong></td><td>Match the fullName query with the fields</td></tr><tr><td>searchType</td><td><p><code>String</code></p><p><strong><code>["match", "match_exact"]</code></strong></p></td><td>Type of the searching algorithm<br><br>Note:<br>- match: fuzzy searching <strong>(default, recommended)</strong><br>- exact match: only return 100% match</td></tr><tr><td>searchSimilarityAlgorithm</td><td><code>String</code><br><strong><code>["levenshtein", "n-gram"]</code></strong></td><td>Type of the similarity algorithm used for searching<br><br>Note:<br>- levenshtein: <strong>(default, recommended)</strong><br><strong>-</strong> n-gram: similarity between "Habibie" and "B.J. Habibie" is 100% match </td></tr><tr><td>searchDataSources</td><td><code>String [array]</code><br><strong><code>["kredibel"]</code></strong></td><td>Data source used for searching</td></tr><tr><td><a href="#profile-types">profileTypes</a></td><td><code>String [array]</code><br><strong><code>["PEP", "RCA", "SIP", "Sanction", "Watchlist", "Crime"]</code></strong></td><td>List of the profile types you want to check </td></tr><tr><td><a href="#profile-types">profileCategories</a></td><td><code>String [array]</code></td><td>Profile related to the category of crime you want to search</td></tr><tr><td><a href="#ongoing-screening">ongoingScreening</a></td><td><code>Boolean</code></td><td>If <code>true</code>, then Kredibel system will do regular monitoring. It means, you'll get notified when there is an update to the result.<br><br>Note:<br>- Only available for <strong>transaction monitoring</strong> subscription</td></tr><tr><td>minSimilarity</td><td><p><code>Float</code> </p><p><strong><code>(0-1)</code></strong></p></td><td><p>The minimum similarity of the result between the query name and the result name<br>e.g. if the treshold is 0.8, then only result has >= 0.8 (80%) match displayed <br><br><em>Note:</em> <br>- default treshold is 0.8</p><p><strong>-</strong> <em>0.5 = 50%, 1 = 100% match</em></p></td></tr><tr><td>pseudoMinSimilarity</td><td><p><code>Float</code> </p><p><strong><code>(0-1)</code></strong></p></td><td>The minimum similarity of the result between the query name and the pseudoResult name<br><br>Note:<br>- default treshold is 1</td></tr></tbody></table>
{% endtab %}

{% tab title="Example  (Full)" %}

```
{
    "fullName": "Joko Widodo",
    "fullNameFilterTitle": false,
    "pseudoBirthDate": "1961-06-21",
    "pseudoBirthPlace": "Surakarta",
    "pseudoGender": "male",
    "pseudoCountry": "Indonesia",
    "searchType": "match",
    "searchAliasFields": ["nativeName", "alias", "lowAliases", "previousAliases", "spellingVariationNames", "languageVariationNames", "maidenNames"],
    "searchDataSources": ["kredibel"],
    "searchSimilarityAlgorithm": "levenshtein",
    "profileTypes": ["PEP", "SIP", "RCA", "Sanction", "Watchlist"],
    "ongoingScreening": true,
    "minSimilarity": 0.8,
    "pseudoMinSimilarity": 0.8
}

```

{% endtab %}

{% tab title="Example (Simple)" %}

```
{
    "fullName": "Joko Widodo"
}
```

{% endtab %}

{% tab title="Example (Recommend)" %}

```
{
    "fullName": "Joko Widodo",
    "pseudoBirthDate": "1961-06-21",
    "pseudoBirthPlace": "Surakarta",
    "pseudoGender": "male",
    "pseudoCountry": "Indonesia"
}
```

{% endtab %}
{% endtabs %}

### **Response**

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

| Field              | Type     | Description                            |
| ------------------ | -------- | -------------------------------------- |
| id&#xD;            | `String` | Unique identifier of PEP search result |
| <p>fullName</p><p> |          |                                        |

</p>  | `String`                                                                        | Name of the person you search                                          |
| birthPlace               | `String`                                                                        | Birthplace of the person you search                                    |
| birthDate&#xD;           | <p><code>Date</code> </p><p><strong><code>("yyyy-mm-dd")</code></strong></p>   | Birthdate of the person you search                                     |
| gender                   | `String`                                                                        | Gender of the person you search                                        |
| country                  | `String`                                                                        | Country of the person you search                                       |
| totalCount&#xD;          | `Integer`&#xD;                                                                  | Number of total matches profile                                        |
| maxSimilarity&#xD;       | `Float`&#xD;                                                                    | Maximum similarity value between your query and matches profile        |
| pseudoMaxSimilarity      | `Float`                                                                         | Maximum similarity value between your query and pseudo matches profile |
| result                   | `Array`                                                                         | List of matches politically exposed persons                            |
| pseudoResult&#xD;        | `Array`&#xD;                                                                    | List of matches politically exposed persons with pseudoFilter          |
| [riskLevel](#risk-level) | <p><code>String</code><br><code>["high", "medium", "low", "unknown"]</code></p> | Level of risk                                                          |
| score&#xD;               | `Float`&#xD;                                                                    | Credibility score                                                      |
{% endtab %}

{% tab title="Example" %}

```
{
    "message": "Watchlist screening",
    "data": {
        "id": "bbfd43f3-ae91-4fd0-ba62-eaa177282aff",
        "fullName": "Joko Widodo",
        "birthPlace": "Surakarta",
        "birthDate": "1961-06-21",
        "gender": "male",
        "country": "Indonesia",
        "totalCount": 1,
        "totalPseudoCount": 0,
        "totalSanctionCount": 0,
        "totalPseudoSanctionCount": 0,
        "totalWatchlistCount": 0,
        "totalPseudoWatchlistCount": 0,
        "totalPepCount": 1,
        "totalPseudoPepCount": 0,
        "totalRcaCount": 0,
        "totalPseudoRcaCount": 0,
        "totalSipCount": 0,
        "totalPseudoSipCount": 0,
        "totalCrimeCount": 0,
        "totalPseudoCrimeCount": 0,
        "maxSimilarity": 1.0,
        "pseudoMaxSimilarity": 0,
        "kredibel": {
            "count": 1,
            "pseudoCount": 0,
            "sanctionCount": 0,
            "pseudoSanctionCount": 0,
            "watchlistCount": 0,
            "pseudoWatchlistCount": 0,
            "pepCount": 1,
            "pseudoPepCount": 0,
            "rcaCount": 0,
            "pseudoRcaCount": 0,
            "sipCount": 0,
            "pseudoSipCount": 0,
            "crimeCount": 0,
            "pseudoCrimeCount": 0,
            "maxSimilarity": 1.0,
            "pseudoMaxSimilarity": 0,
            "result": [
                {
                    "id": "66499d4f2099f613265313cee676cd1b",
                    "entity": "person",
                    "name": "Joko Widodo",
                    "nativeName": "Joko Widodo",
                    "gender": "male",
                    "birthPlace": "Surakarta, Central Java, Indonesia",
                    "birthDate": "1961-06-21 00:00:00",
                    "deathDate": null,
                    "description": "Presiden Indonesia ke-7 (2014-Sekarang)",
                    "detailDescription": "Ir. H. Joko Widodo adalah presiden Indonesia yang mulai menjabat sejak tanggal 20 Oktober 2014. Terpilih dalam Pemilu Presiden 2014, Jokowi menjadi presiden Indonesia pertama yang bukan berasal dari elite politik atau militer Indonesia. Dia terpilih bersama Wakil Presiden Jusuf Kalla dan kembali terpilih bersama Wakil Presiden Ma'ruf Amin dalam Pemilu Presiden 2019. Sebelumnya, Jokowi pernah menjabat sebagai gubernur Jakarta sejak 15 Oktober 2012 hingga 16 Oktober 2014 didampingi Basuki Tjahaja Purnama sebagai wakil gubernur. [Wikipedia]",
                    "updatedAt": null,
                    "alias": [
                        "Jokowi",
                        "President Joko Widodo",
                        "Џокови",
                        "佐科·维多多",
                        "Haji Joko Widodo",
                        "佐科威",
                        "Джокови",
                        "Cokovi",
                        "Мульоно",
                        "Джокоуи",
                        "Preisdent Jokowi",
                        "جۆکۆوی",
                        "Džokovi",
                        "Mulyono",
                        "Ir. H. Joko Widodo"
                    ],
                    "lowAliases": [],
                    "previousAliases": [],
                    "maidenNames": [],
                    "spellingVariationNames": [],
                    "languageVariationNames": [
                        "جوکو ویدودو",
                        "Џоко Видодо",
                        "佐科·维多多",
                        "Τζόκο Ουιντόντο",
                        "佐科·維多多",
                        "جوكو ويدودو",
                        "ג'וקו וידודו",
                        "Joko Widodo",
                        "ဂျိုကို ဝီဒိုဒို",
                        "जोको विडोडो",
                        "جوکو ودودو",
                        "Җоко Видодо",
                        "ജോക്കോ വിഡൊഡൊ",
                        "佐戈",
                        "Coko Vidodo",
                        "জোকো উইদোদো",
                        "โจโก วีโดโด",
                        "조코 위도도",
                        "ចូកូ វីដូដូ",
                        "ஜோக்கோ விடோடோ",
                        "Ջոկո Վիդոդո",
                        "جوکو ويدودو",
                        "جوڪو ودودو",
                        "ジョコ・ウィドド",
                        "Джоко Видодо",
                        "Джоко Уидодо",
                        "Ճոքօ Ուիտոտօ",
                        "Džoko Vidodo",
                        "Ҷоко Видодо",
                        "ਜੋਕੋ ਵਿਡੋਡੋ",
                        "جۆکۆ ویدۆدۆ",
                        "ჯოკო ვიდოდო",
                        "Джоко Відодо",
                        "Джока Відода"
                    ],
                    "birthPlaces": [],
                    "birthDates": [],
                    "images": [
                        "https://img.kredibel.co.id/politiface/profile/ac1aff11543cd387827c68a3371c72f0.png"
                    ],
                    "roles": [
                        {
                            "level": null,
                            "endDate": null,
                            "location": null,
                            "roleType": null,
                            "startDate": "2014-10-20 00:00:00",
                            "occupationTitle": "President of Indonesia"
                        },
                        {
                            "level": null,
                            "endDate": "2014-10-20 00:00:00",
                            "location": null,
                            "roleType": null,
                            "startDate": "2012-10-15 00:00:00",
                            "occupationTitle": "Governor of the Special Capital Region of Jakarta"
                        },
                        {
                            "level": null,
                            "endDate": "2012-10-01 00:00:00",
                            "location": null,
                            "roleType": null,
                            "startDate": "2005-07-28 00:00:00",
                            "occupationTitle": "Mayor of Surakarta"
                        }
                    ],
                    "residents": [
                        {
                            "type": "citizenship",
                            "value": "Indonesia"
                        }
                    ],
                    "crimes": [],
                    "sanctions": [],
                    "types": [
                        "PEP"
                    ],
                    "profileUrl": "https://synapses.sandbox.kredibel.com/watchlist/profile/bbfd43f3-ae91-4fd0-ba62-eaa177282aff/66499d4f2099f613265313cee676cd1b",
                    "similarity": 1.0,
                    "dataset": "int-watchlist",
                    "matchFields": [
                        "name",
                        "pseudoBirthDate"
                    ]
                }
            ],
            "pseudoResult": [],
            "start": 1,
            "size": 10
        },
        "riskLevel": "medium",
        "score": -15.0
    }
}
```

{% endtab %}
{% endtabs %}

## Knowledge

#### **Profile Types**

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

<table><thead><tr><th width="158">Types</th><th>Definition</th></tr></thead><tbody><tr><td>PEP</td><td>A Politically Exposed Person (PEP) is an individual who holds a prominent public position or has held such a position in the recent past. This can include government officials, high-ranking military officers, heads of state-owned enterprises, and leaders of political parties.</td></tr><tr><td>RCA</td><td>Relative and Close Associates (RCA) refers to Individuals who are closely related to a Politically Exposed Person (PEP). This can include immediate family members, such as spouses, children, and parents, as well as individuals with close business or personal relationships with the PEP. These individuals are considered high-risk for involvement in money laundering or terrorist financing due to their association with the PEP.</td></tr><tr><td>SIP</td><td>A Special Interest Person is an individual or entity that, while not necessarily a PEP, possesses a higher risk profile due to their involvement in industries or activities that are susceptible to money laundering or terrorist financing. These could include sectors like gambling, real estate, and non-profit organizations. SIPs are subject to closer scrutiny during AML/CFT procedures.</td></tr><tr><td>Sanction</td><td>Sanctions are punitive measures imposed by governments, international organizations, or regulatory bodies to deter and punish individuals, entities, or countries that have violated laws, regulations, or international agreements. Sanctions are typically imposed to address specific concerns, such as human rights abuses, proliferation of weapons of mass destruction, or support for terrorism.</td></tr><tr><td>Watchlist</td><td>A watchlist is a database maintained by financial institutions, law enforcement agencies, and regulatory bodies to identify individuals, entities, or organizations that are suspected or confirmed to be involved in money laundering, terrorist financing, or other illicit activities. Watchlists are used to enhance due diligence and screening processes.</td></tr><tr><td><a href="#crime-categories">Crime</a></td><td>Other criminal categories other than those related to AML/CFT.</td></tr></tbody></table>
{% endtab %}

{% tab title="Code" %}

```
["PEP", "RCA", "SIP", "Sanction", "Watchlist", "Crime"]
```

{% endtab %}
{% endtabs %}

#### **Crime Categories**

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

<table><thead><tr><th width="79" data-type="number">#</th><th>Categories</th><th>Version</th></tr></thead><tbody><tr><td>1</td><td>corruption</td><td>1.0</td></tr><tr><td>2</td><td>terrorism</td><td>1.0</td></tr><tr><td>3</td><td>national-security</td><td>1.1</td></tr><tr><td>4</td><td>gambling</td><td>1.0</td></tr><tr><td>5</td><td>embezzlement</td><td>1.0</td></tr><tr><td>6</td><td>fraud</td><td>1.0</td></tr><tr><td>7</td><td>money-laundering</td><td>1.0</td></tr><tr><td>8</td><td>human-trafficking</td><td>1.0</td></tr><tr><td>9</td><td>tax</td><td>1.0</td></tr><tr><td>10</td><td>customs</td><td>1.1</td></tr><tr><td>11</td><td>human-rights</td><td>1.0</td></tr><tr><td>12</td><td>forgery</td><td>1.0</td></tr><tr><td>13</td><td>foresty</td><td>1.0</td></tr><tr><td>14</td><td>environmental</td><td>1.0</td></tr><tr><td>15</td><td>illegal-logging</td><td>1.1</td></tr><tr><td>16</td><td>coastal-zone</td><td>1.1</td></tr><tr><td>17</td><td>money-counterfeiting</td><td>1.0</td></tr><tr><td>18</td><td>currency</td><td>1.0</td></tr><tr><td>19</td><td>election</td><td>1.0</td></tr><tr><td>20</td><td>banking</td><td>1.0</td></tr><tr><td>21</td><td>excise</td><td>1.0</td></tr><tr><td>22</td><td>narcotic</td><td>1.0</td></tr><tr><td>23</td><td>theft</td><td>1.0</td></tr><tr><td>24</td><td>firearm</td><td>1.0</td></tr><tr><td>25</td><td>defamation</td><td>1.1</td></tr><tr><td>26</td><td>persecution</td><td>1.0</td></tr><tr><td>27</td><td>murder</td><td>1.0</td></tr><tr><td>28</td><td>extortion</td><td>1.0</td></tr><tr><td>29</td><td>perjury</td><td>1.0</td></tr><tr><td>30</td><td>immigration</td><td>1.0</td></tr><tr><td>31</td><td>mining</td><td>1.0</td></tr><tr><td>32</td><td>pharmaceutical</td><td>1.0</td></tr><tr><td>33</td><td>cybercrime</td><td>1.0</td></tr><tr><td>34</td><td>domestic-violence</td><td>1.0</td></tr><tr><td>35</td><td>plantation</td><td>1.0</td></tr><tr><td>36</td><td>pornography</td><td>1.0</td></tr><tr><td>37</td><td>oil-gas</td><td>1.0</td></tr><tr><td>38</td><td>fishery</td><td>1.0</td></tr><tr><td>39</td><td>consumer-protection</td><td>1.0</td></tr><tr><td>40</td><td>cruise</td><td>1.0</td></tr><tr><td>41</td><td>fiduciary</td><td>1.0</td></tr><tr><td>42</td><td>copyright</td><td>1.0</td></tr><tr><td>43</td><td>food</td><td>1.0</td></tr><tr><td>44</td><td>economy</td><td>1.0</td></tr><tr><td>45</td><td>conservation</td><td>1.0</td></tr><tr><td>46</td><td>fence</td><td>1.0</td></tr><tr><td>47</td><td>obscenity</td><td>1.1</td></tr><tr><td>48</td><td>negligence</td><td>1.0</td></tr><tr><td>49</td><td>destruction</td><td>1.0</td></tr><tr><td>50</td><td>public-order</td><td>1.0</td></tr><tr><td>51</td><td>traffic</td><td>1.0</td></tr><tr><td>52</td><td>jinayah</td><td>1.0</td></tr><tr><td>53</td><td>marriage-origin</td><td>1.0</td></tr><tr><td>54</td><td>chins</td><td>1.1</td></tr><tr><td>55</td><td>children</td><td>1.1</td></tr><tr><td>56</td><td>migrant-worker</td><td>1.0</td></tr><tr><td>57</td><td>employment</td><td>1.0</td></tr><tr><td>58</td><td>broadcasting</td><td>1.0</td></tr><tr><td>59</td><td>electricity</td><td>1.0</td></tr><tr><td>60</td><td>local-government</td><td>1.1</td></tr><tr><td>61</td><td>trade-secret</td><td>1.1</td></tr><tr><td>62</td><td>education</td><td>1.0</td></tr><tr><td>63</td><td>housing</td><td>1.0</td></tr><tr><td>64</td><td>industry</td><td>1.0</td></tr><tr><td>65</td><td>military-desertion</td><td>1.1</td></tr><tr><td>66</td><td>military-obscenity</td><td>1.1</td></tr><tr><td>67</td><td>military-subordinate</td><td>1.1</td></tr></tbody></table>

{% endtab %}

{% tab title="Deprecated" %}

<table><thead><tr><th width="66">#</th><th>Deprecated Categories</th><th>New Categories</th></tr></thead><tbody><tr><td>1</td><td>custom</td><td>customs</td></tr><tr><td>2</td><td>insult</td><td>defamation</td></tr><tr><td>3</td><td>decency</td><td>obscenity</td></tr><tr><td>4</td><td>child</td><td>children, chins</td></tr><tr><td>5</td><td>government</td><td>local-government</td></tr><tr><td>6</td><td>trade</td><td>trade-secret</td></tr><tr><td>7</td><td>military</td><td>military-desertion, military-obscenity, military-subordinate</td></tr></tbody></table>
{% endtab %}

{% tab title="Code" %}
{% code overflow="wrap" %}

```json
["corruption", "terrorism", "national-security", "gambling", "embezzlement", "fraud", "money-laundering", "human-trafficking", "tax", "customs", "human-rights", "forgery", "foresty", "environmental", "illegal-logging", "coastal-zone", "money-counterfeiting", "currency", "election", "banking", "excise", "narcotic", "theft", "firearm", "defamation", "persecution", "murder", "extortion", "perjury", "immigration", "mining", "pharmaceutical", "cybercrime", "domestic-violence", "plantation", "pornography", "oil-gas", "fishery", "consumer-protection", "cruise", "fiduciary", "copyright", "food", "economy", "conservation", "fence", "obscenity", "negligence", "destruction", "public-order", "traffic", "jinayah", "marriage-origin", "migrant-worker", "employment", "broadcasting", "electricity", "local-government", "trade-secret", "education", "housing", "industry", "military-desertion", "military-obscenity", "military-subordinate"]
```

{% endcode %}
{% endtab %}
{% endtabs %}

#### Risk Level

| Risk    | Description                                                                               |
| ------- | ----------------------------------------------------------------------------------------- |
| high    | If **match** with one or more profiles related to **Sanction**, **Watchlist**, or **SIP** |
| medium  | If **match** with one or more profiles related to **PEP** or **Crime**                    |
| low     | If **match** with one or more profiles related to **RCA**                                 |
| unknown | No matching profiles                                                                      |

#### Ongoing Screening

You can set ongoing screening feature if:

* You are subscribed to **transaction monitoring**&#x20;
* `minSimilarity` >= 0.8
* Using `birthDate` or `pseudoBirthDate` in params


# Bank Account

You can use the Bank Account module by defining the bankAccount that you want to check to your request.

{% hint style="info" %}
This module only supports Indonesian bank accounts
{% endhint %}

## Endpoints

| Method | URL                                  |
| ------ | ------------------------------------ |
| POST   | `$synapses`**/v1/account/screening** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Request**

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

| Field                                                             | Type     | Description                                                                 |
| ----------------------------------------------------------------- | -------- | --------------------------------------------------------------------------- |
| <p>bankAccount</p><p><strong><code>(required)</code></strong></p> | `String` | Bank account number to be checked                                           |
| bankCode&#xD;                                                     | `String` | <p>Bank code of the bank account</p><p>(ATM Bersama dan Jaringan Prima)</p> |
| bankAccountName&#xD;                                              | `String` | Bank account holder name                                                    |
| bankReportStartDate&#xD;                                          | `Date`   | Get user reports history from date                                          |
| bankReportEndDate&#xD;                                            | `Date`   | Get user reports history to date                                            |
| {% endtab %}                                                      |          |                                                                             |

{% tab title="Example" %}

```
{
	  "bankAccount": "90150041843",
	  "bankCode": "008",
	  "bankAccountName": "Siti Astika Nurajizah",
    "bankReportStartDate": "2019-09-09",
    "bankReportEndDate": "2021-01-01"
}
```

{% endtab %}
{% endtabs %}

### **Response**

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

| Field                   | Type                                                                         | Description                                                               |
| ----------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| fullName&#xD;           | `String`                                                                     | Full name of the bank account holder (based on user report)               |
| bankAccount&#xD;        | `String`                                                                     | Bank account number.                                                      |
| bankName&#xD;           | `String`                                                                     | Name of the issuing bank                                                  |
| bankCode&#xD;           | `String`                                                                     | Bank code (ATM Bersama dan Jaringan Prima)                                |
| bankRegionName&#xD;     | `String`                                                                     | Region of the bank                                                        |
| bankBranchName&#xD;     | `String`                                                                     | Name of the bank branch                                                   |
| bankBranchAddress&#xD;  | `String`                                                                     | Address of the bank branch                                                |
| reportCount&#xD;        | `Integer`                                                                    | The number of fraud reports related to the bank account                   |
| reportScore&#xD;        | <p><code>Float</code> </p><p><strong><code>(-100 to 100)</code></strong></p> | Accumulated total report score                                            |
| reviewCount&#xD;        | `Integer`                                                                    | The number of reviews related to the bank account                         |
| reviewCountSummary&#xD; | `Integer`                                                                    | Review rating count&#xD;                                                  |
| reviewScore&#xD;        | <p><code>Float</code></p><p><strong><code>(-100 to 100)</code></strong></p>  | Accumulated review score                                                  |
| isAccountVerified&#xD;  | `Boolean`                                                                    | Define whether the bank account number is verified in the Kredibel system |
| isBankHighRisk&#xD;     | `Boolean`                                                                    | Define whether the bank is high risk                                      |
| isWhitelist&#xD;        | `Boolean`                                                                    | Bank account whitelist status                                             |
| isBlacklist&#xD;        | `Boolean`                                                                    | Bank account blacklist status                                             |
| score&#xD;              | <p><code>Float</code> </p><p><strong><code>(-100 to 100)</code></strong></p> | Total accumulated credibility score of the bank account                   |
| {% endtab %}            |                                                                              |                                                                           |

{% tab title="Example" %}

```
{
    "message": "Account Screening - Single.",
    "data": {
        "id": "bc07c1cb-f390-429e-9c57-8e02a12c3cc9",
        "score": -90.5,
        "status": "reject",
        "bankDetails": {
            "fullName": "Siti Astika Nurajizah",
            "bankAccount": "90150041843",
            "bankName": "Bank BTPN",
            "bankCode": "213",
            "bankRegionName": null,
            "bankBranchName": null,
            "bankBranchAddress": null,
            "reportCount": 13,
            "reportScore": -100,
            "reviewCount": 3,
            "reviewCountSummary": {
                "oneStars": 3,
                "twoStars": 0,
                "threeStars": 0,
                "fourStars": 0,
                "fiveStars": 0
            },
            "reviewScore": -7.5,
            "isAccountVerified": false,
            "isBankHighRisk": true,
            "isBlacklist": false,
            "isWhitelist": true,
            "score": -90.5
        }
    }
}
```

{% endtab %}
{% endtabs %}


# Phone Number

You can use the Phone module by defining the phoneNumber that you want to check to your request.

## Endpoints

| Method | URL                                  |
| ------ | ------------------------------------ |
| POST   | `$synapses`**/v1/account/screening** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Request**

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

| Field                                                         | Type | Description |
| ------------------------------------------------------------- | ---- | ----------- |
| <p>phoneNumber</p><p><strong><code>(Required)</code></strong> |      |             |

</p> | `String` | Phone number with national code (e.g. 6281234567890) |
| phoneReportStartDate&#xD;                                          | `Date`   | Get user reports history from date                   |
| phoneReportEndDate&#xD;                                            | `Date`   | Get user reports history to date                     |
{% endtab %}

{% tab title="Example" %}

```
{
	"phoneNumber": "085733756668"
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
If the phone number starts with 0 (not a national code), the system will automatically specify the number as the phone number from the Indonesia region.
{% endhint %}

### **Response**

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

| Field                  | Type                                                                         | Description                                                                     |
| ---------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| fullName&#xD;          | `String`&#xD;                                                                | Phone number full name                                                          |
| phoneNumber&#xD;       | `String`                                                                     | Phone number                                                                    |
| providerName&#xD;      | `String`                                                                     | Provider name                                                                   |
| providerType&#xD;      | `String`                                                                     | Provider type (e.g. Simpati)                                                    |
| countryName&#xD;       | `String`                                                                     | Country name                                                                    |
| countryCode&#xD;       | `String`                                                                     | Country code                                                                    |
| nationalNumber&#xD;    | `String`                                                                     | National number                                                                 |
| regionName&#xD;        | `String`                                                                     | Region name                                                                     |
| isPossibleNumber&#xD;  | `Boolean`&#xD;                                                               | Return true when it's a possible number (e.g. it has the right number of digits |
| isValidNumber&#xD;     | `Boolean`&#xD;                                                               | Return true when it's a valid number (e.g. it's in an assigned exchange)        |
| isTrustedProvider&#xD; | `Boolean`&#xD;                                                               | Return true when the provider is trusted                                        |
| reportCount&#xD;       | `Int`                                                                        | The number of fraud reports related to the phone numbers                        |
| reportScore&#xD;       | `Float` &#xD;                                                                | Accumulated total report score                                                  |
| isWhitelist&#xD;       | `Boolean`&#xD;                                                               | Phone number whitelist status                                                   |
| isBlacklist&#xD;       | `Boolean`&#xD;                                                               | Phone number blacklist status                                                   |
| score&#xD;             | <p><code>Float</code> </p><p><strong><code>(-100 to 100)</code></strong></p> | Total accumulated credibility score of the phone number                         |
| {% endtab %}           |                                                                              |                                                                                 |

{% tab title="Example" %}

```
{
    "message": "Account Screening - Single.",
    "data": {
        "id": "8838a65c-7a74-42e6-9c82-934338b84827",
        "score": -5,
        "status": "pass",
        "phoneDetails": {
            "fullName": null,
            "phoneNumber": "6285733756668",
            "providerName": "IM3",
            "providerType": null,
            "countryName": "Indonesia",
            "countryCode": null,
            "nationalNumber": "85733756668",
            "isValidNumber": true,
            "isTrustedProvider": false,
            "reportCount": 1,
            "reportScore": -5,
            "reviewCount": 0,
            "reviewCountSummary": {
                "oneStars": 0,
                "twoStars": 0,
                "threeStars": 0,
                "fourStars": 0,
                "fiveStars": 0
            },
            "reviewScore": 0,
            "isBlacklist": false,
            "isWhitelist": false,
            "score": -5
        }
    }
}
```

{% endtab %}
{% endtabs %}


# Email Address

You can use the Email module by defining the emailAddress that you want to check to your request.

## Endpoints

| Method | URL                                  |
| ------ | ------------------------------------ |
| POST   | `$synapses`**/v1/account/screening** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Request**

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

| Field                                                              | Type                                                                    | Description                                        |
| ------------------------------------------------------------------ | ----------------------------------------------------------------------- | -------------------------------------------------- |
| <p>emailAddress</p><p><strong><code>(required)</code></strong></p> | <p><code>String</code> </p><p><strong><code>(Email)</code></strong></p> | Email address used for transaction                 |
| verifyEmail                                                        | `Boolean`                                                               | If true, system will verify email address validity |
| {% endtab %}                                                       |                                                                         |                                                    |

{% tab title="Example" %}

```
{
	  "emailAddress": "contoh@gmail.com",
    "verifyEmail": true
}
```

{% endtab %}
{% endtabs %}

### **Response**

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

| Field               | Type                                                                                                        | Description                                                                                                                                                                                                                                                                                                                                                 |
| ------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| fullName&#xD;       | `String`&#xD;                                                                                               | Full name                                                                                                                                                                                                                                                                                                                                                   |
| emailAddress        | `String`&#xD;                                                                                               | Email address                                                                                                                                                                                                                                                                                                                                               |
| validity            | <p><code>String</code> </p><p><strong><code>\["valid", "risky", "invalid", "not\_sure"]</code></strong></p> | <p><strong><code>valid</code></strong>: Email address is exist and its safe to send mail</p><p><strong><code>risky</code></strong>: Email address is exist but its risky to send mail</p><p><strong><code>invalid</code></strong>: Email address not exist</p><p><strong><code>not\_sure</code></strong>: Our system failed to verify the email address</p> |
| isDisposable        | `Boolean`                                                                                                   | Define whether the email is disposable                                                                                                                                                                                                                                                                                                                      |
| smtp.isConnected    | `Boolean`                                                                                                   | Define can we connected to the domain of the email?                                                                                                                                                                                                                                                                                                         |
| smtp.isFull         | `Boolean`                                                                                                   | Define whether the email address mailbox is full                                                                                                                                                                                                                                                                                                            |
| smtp.isDeliverable  | `Boolean`                                                                                                   | Define whether an email sent to this address is deliverable                                                                                                                                                                                                                                                                                                 |
| smtp.records        | `List`                                                                                                      | MX records of the email address                                                                                                                                                                                                                                                                                                                             |
| images              | `List`                                                                                                      | Images of the email                                                                                                                                                                                                                                                                                                                                         |
| breaches            | `List`                                                                                                      | Is the email appear in the breach list                                                                                                                                                                                                                                                                                                                      |
| isPrivateHost       | `Boolean`                                                                                                   | Return true when it's a private email address (e.g. @google.com)                                                                                                                                                                                                                                                                                            |
| isPublicHost&#xD;   | `Boolean`                                                                                                   | Return true when it’s a public email address (e.g. @gmail.com)&#xD;                                                                                                                                                                                                                                                                                         |
| isHighRiskHost&#xD; | `Boolean`                                                                                                   | Return true when it’s a high risk email host (e.g. @gmail.my.id)&#xD;                                                                                                                                                                                                                                                                                       |
| isWhitelist&#xD;    | `Boolean`                                                                                                   | Define whether you have whitelisted this account number or not&#xD;                                                                                                                                                                                                                                                                                         |
| isBlacklist&#xD;    | `Boolean`                                                                                                   | Define whether you have blacklisted this account number or not                                                                                                                                                                                                                                                                                              |
| score               | `Float`&#xD;                                                                                                | Total accumulated credibility score of the Email Address                                                                                                                                                                                                                                                                                                    |
| {% endtab %}        |                                                                                                             |                                                                                                                                                                                                                                                                                                                                                             |

{% tab title="Example" %}

```
{
    "message": "Account Screening - Single.",
    "data": {
        "id": "49220c90-d83d-4c12-8fbc-55527bbcf40a",
        "score": 0,
        "status": "pass",
        "emailDetails": {
            "fullName": null,
            "emailAddress": "contoh@gmail.com",
            "validity": "valid",
            "isDisposable": false,
            "smtp": {
                "isConnected": true,
                "isFull": false,
                "isDeliverable": true,
                "records": [
                    "alt2.gmail-smtp-in.l.google.com.",
                    "alt1.gmail-smtp-in.l.google.com.",
                    "gmail-smtp-in.l.google.com.",
                    "alt3.gmail-smtp-in.l.google.com.",
                    "alt4.gmail-smtp-in.l.google.com."
                ]
            },
            "images": [],
            "breaches": [
                {
                    "name": "Bukalapak"
                },
                {
                    "name": "Cit0day"
                },
                {
                    "name": "Collection1"
                },
                {
                    "name": "Dailymotion"
                },
                {
                    "name": "Dropbox"
                },
                {
                    "name": "Edmodo"
                },
                {
                    "name": "Leet"
                },
                {
                    "name": "Lifeboat"
                },
                {
                    "name": "Nitro"
                },
                {
                    "name": "ShopBack"
                },
                {
                    "name": "Tamodo"
                },
                {
                    "name": "Tokopedia"
                },
                {
                    "name": "Wattpad"
                }
            ],
            "isBreached": true,
            "isPrivateHost": false,
            "isPublicHost": true,
            "isHighRiskHost": false,
            "isBlacklist": false,
            "isWhitelist": false,
            "score": 0
        }
    }
}
```

{% endtab %}
{% endtabs %}


# IP Address

You can use the IP module by defining the ipAddress that you want to check to your JSON request.

## Endpoints

| Method | URL                                  |
| ------ | ------------------------------------ |
| POST   | `$synapses`**/v1/account/screening** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Request**

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

| Field                                         | Type                                                                          | Description                  |
| --------------------------------------------- | ----------------------------------------------------------------------------- | ---------------------------- |
| <p>ipAddress </p><p><code>required</code></p> | <p><code>String</code> </p><p><strong><code>(IPv4 format)</code></strong></p> | IP address you want to check |
| {% endtab %}                                  |                                                                               |                              |

{% tab title="Example" %}

```
{
	"ipAddress": "159.253.145.183"
}
```

{% endtab %}
{% endtabs %}

### **Response**

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

| Field              | Type          | Description                                                               |
| ------------------ | ------------- | ------------------------------------------------------------------------- |
| as&#xD;            | `String`      | Autonomous system number and organization, separated by space (RIR).&#xD; |
| asname             | `String`&#xD; | Autonomous system name (RIR).&#xD;                                        |
| city               | `String`&#xD; | City name.&#xD;                                                           |
| continent&#xD;     | `String`&#xD; | Continent name.&#xD;                                                      |
| continentCode&#xD; | `String`&#xD; | Two-character continent code.&#xD;                                        |
| country&#xD;       | `String`&#xD; | Country name.&#xD;                                                        |
| countryCode&#xD;   | `String`&#xD; | Two-letter country code ISO 3166-1 alpha-2.&#xD;                          |
| currency           | `String`&#xD; | National currency.&#xD;                                                   |
| district&#xD;      | `String`      | District name.&#xD;                                                       |
| isp&#xD;           | `String`      | ISP name.&#xD;                                                            |
| lat                | `Float`       | Latitude.&#xD;                                                            |
| lon                | `Float`       | Longitude.&#xD;                                                           |
| org&#xD;           | `String`&#xD; | Organization name.&#xD;                                                   |
| regionName&#xD;    | `String`&#xD; | Region name.&#xD;                                                         |
| timezone           | `String`&#xD; | Time zone.&#xD;                                                           |
| zip&#xD;           | `String`&#xD; | Zip code.&#xD;                                                            |
| {% endtab %}       |               |                                                                           |

{% tab title="Example" %}

```
{
    "message": "Account Screening - Single.",
    "data": {
        "id": "28b78927-8546-45fd-ba9f-17239bf366a9",
        "score": -15,
        "status": "review",
        "ipDetails": {
            "ipAddress": "159.253.145.183",
            "as": "AS36351 SoftLayer Technologies Inc.",
            "asname": "SOFTLAYER",
            "city": "Amsterdam",
            "continent": "Europe",
            "continentCode": "EU",
            "country": "Netherlands",
            "countryCode": "NL",
            "currency": "EUR",
            "district": "",
            "isp": "SoftLayer",
            "lat": 52.3759,
            "org": "Hosting Services Inc. (dba Midphase)",
            "region": "NH",
            "regionName": "North Holland",
            "timezone": "Europe/Amsterdam",
            "zip": "1012",
            "isProxy": true,
            "isMobile": false,
            "isHosting": true,
            "isWhitelist": false,
            "isBlacklist": true,
            "score": -15
        }
    }
}
```

{% endtab %}
{% endtabs %}


# Electronic Certificate


# Certificate Issuance

The Electronic Certificate Issuance Service is the activity of identity checking that shows legal subjects in order to issue an Electronic Certificate with the purpose of doing verification of citizen

{% hint style="info" %}
This module only support verification for indonesian identity card (KTP)
{% endhint %}

##

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

## Endpoints

| Method | URL                                       |
| ------ | ----------------------------------------- |
| POST   | `$synapses`**`/v1/certificate/issuance`** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Request**

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

| Field                                                            | Type                                                                  | Description                                                |
| ---------------------------------------------------------------- | --------------------------------------------------------------------- | ---------------------------------------------------------- |
| <p>identityId</p><p><strong><code>(required)</code></strong></p> | <p><code>String</code><br><strong><code>(len: 16)</code></strong></p> | Nomor induk kependudukan (NIK) based on the identity card. |
| <p>fullName</p><p><strong><code>(required)</code></strong>       |                                                                       |                                                            |

</p>      | `String`                                                                         | Full name based on the identity card.                                                                                                                                                                                                 |
| <p>birthDate<br><strong><code>(required)</code></strong></p>         | <p><code>String</code><br><strong><code>(format: yyyy-mm-dd)</code></strong></p> | Birth Date based on the identity card.                                                                                                                                                                                                |
| <p>emailAddress<br><strong><code>(required)</code></strong></p>      | `String`                                                                         | Email address (must be unique per NIK).                                                                                                                                                                                               |
| <p>phoneNumber<br><strong><code>(required)</code></strong></p>       | `String`                                                                         | Valid phone number, use country code but without symbol (+), (must be unique per nik).                                                                                                                                                |
| <p>faceImage </p><p><strong><code>(required)</code></strong></p>     | `Base64`                                                                         | <p>Selfie photo of the identity card holder.</p><p></p><p>Image binary encoded in base64 without &#x3C;data:image/png;>.<br>- Supports: JPG, JPEG, PNG, SVG<br>- Min Size: 100KB<br>- Max Size: 4MB<br>- Min Pixel: 480px x 640px</p> |
| <p>identityImage </p><p><strong><code>(required)</code></strong></p> | `Base64`                                                                         | <p>Identity card photo.</p><p></p><p>Image binary encoded in base64 without &#x3C;data:image/png;>.<br>- Supports: JPG, JPEG, PNG, SVG<br>- Min Size: 100KB<br>- Max Size: 2MB<br>- Min Pixel: 480px x 360px</p>                      |
{% endtab %}

{% tab title="Example" %}

```
{
    "identityId": "1234567890123456",
    "fullName": "ASEP SUPRIYADI",
    "birthDate": "1990-07-06",
    "emailAddress": "test@email.com",
    "phoneNumber": "621234567890",
    "faceImage": "<base64>",
    "identityImage": "<base64>"
}
```

{% endtab %}
{% endtabs %}

#### **Testing**

{% hint style="info" %}
In the sandbox environment, we only response api call with dummy data. To get valid response data, you can use our production environment instead.
{% endhint %}

{% tabs %}
{% tab title="All Match" %}
You can use any identityId to produce verified status.

**Example:**

```
{
    "identityId": "1234567890123456",
    "fullName": "ASEP SUPRIYADI",
    "birthDate": "1990-07-06",
    "emailAddress": "test@email.com",
    "phoneNumber": "621234567890",
    "faceImage": "<base64>",
    "identityImage": "<base64>"
}
```

```
{
    "message": "Certificate electronic verification has been done",
    "data": {
        "id": "8c4d6927-b4e1-428b-b95f-c21b6734b73f",
        "status": "verified",
        "rejectFields": [],
        "referenceId": "ref_certel#e87c8bc2-5d10-455b-98a0-187d60f72873"
    }
}
```

{% endtab %}

{% tab title="Invalid NIK" %}
You can use identityId =`1234567890111111` to produce invalid identityId.

**Example:**

```
{
    "identityId": "1234567890111111",
    "fullName": "ASEP SUPRIYADI",
    "birthDate": "1990-07-06",
    "emailAddress": "test@email.com",
    "phoneNumber": "621234567890",
    "faceImage": "<base64>",
    "identityImage": "<base64>"
}
```

```
{
    "message": "Certificate electronic verification has been done",
    "data": {
        "id": "93db29c0-ca66-4803-aa70-537439c9cfff",
        "status": "not_verified",
        "rejectFields": [
            "identityId"
        ],
        "referenceId": "ref_certel#3c42fa6b-c2c9-4705-8117-cf9d08c8d2aa"
    }
}
```

{% endtab %}

{% tab title="Invalid Name" %}
You can use identityId =`1234567890111112` to produce invalid fullName.

**Example:**

```
{
    "identityId": "1234567890111112",
    "fullName": "ASEP SUPRIYADI",
    "birthDate": "1990-07-06",
    "emailAddress": "test@email.com",
    "phoneNumber": "621234567890",
    "faceImage": "<base64>",
    "identityImage": "<base64>"
}
```

```
{
    "message": "Certificate electronic verification has been done",
    "data": {
        "id": "716ccf7d-4620-4146-b889-8c660cc8f280",
        "status": "not_verified",
        "rejectFields": [
            "fullName"
        ],
        "referenceId": "ref_certel#8c679bd3-087b-49f7-bdd6-3f5c6300a927"
    }
}
```

{% endtab %}

{% tab title="Invalid Birth Date" %}
You can use identityId=`1234567890111113` to produce invalid birthDate.

**Example:**

```
{
    "identityId": "1234567890111113",
    "fullName": "ASEP SUPRIYADI",
    "birthDate": "1990-07-06",
    "emailAddress": "test@email.com",
    "phoneNumber": "621234567890",
    "faceImage": "<base64>",
    "identityImage": "<base64>"
}
```

```
{
    "message": "Certificate electronic verification has been done",
    "data": {
        "id": "bba69765-371c-45ac-b673-4bb36f07ab9c",
        "status": "not_verified",
        "rejectFields": [
            "birthDate"
        ],
        "referenceId": "ref_certel#763f7342-66f6-47eb-87d2-e9a11378d911"
    }
}
```

{% endtab %}

{% tab title="Invalid Face Image" %}
You can use identityId=`1234567890111114` to produce invalid face image.

**Example:**

```
{
    "identityId": "1234567890111114",
    "fullName": "ASEP SUPRIYADI",
    "birthDate": "1990-07-06",
    "emailAddress": "test@email.com",
    "phoneNumber": "621234567890",
    "faceImage": "<base64>",
    "identityImage": "<base64>"
}
```

```
{
    "message": "Certificate electronic verification has been done",
    "data": {
        "id": "a940e1e9-22f0-4154-8b0f-6219b417a6b1",
        "status": "not_verified",
        "rejectFields": [
            "faceImage"
        ],
        "referenceId": "ref_certel#8c946fc0-5ac2-4120-9ee5-415baf0b0e3a"
    }
}
```

{% endtab %}

{% tab title="Invalid Identity Image" %}
You can use identityId=`1234567890111115` to produce invalid identityImage.

**Example:**

```
{
    "identityId": "1234567890111115",
    "fullName": "ASEP SUPRIYADI",
    "birthDate": "1990-07-06",
    "emailAddress": "test@email.com",
    "phoneNumber": "621234567890",
    "faceImage": "<base64>",
    "identityImage": "<base64>"
}
```

```
{
    "message": "Certificate electronic verification has been done",
    "data": {
        "id": "3e37f95d-a1e8-4d89-8f0c-0f267ea0a36a",
        "status": "not_verified",
        "rejectFields": [
            "identityImage"
        ],
        "referenceId": "ref_certel#8c946fc0-5ac2-4120-9ee5-415baf0b0e2s"
    }
}
```

{% endtab %}

{% tab title="Invalid Email Address" %}
{% hint style="info" %}
It means that the email, phone number, or both have been used by another NIK (identification number).
{% endhint %}

You can use identityId=`1234567890111116` to produce invalid emailAddress.

**Example:**

```
{
    "identityId": "1234567890111116",
    "fullName": "ASEP SUPRIYADI",
    "birthDate": "1990-07-06",
    "emailAddress": "test@email.com",
    "phoneNumber": "621234567890",
    "faceImage": "<base64>",
    "identityImage": "<base64>"
}
```

```
{
    "message": "Certificate electronic verification has been done",
    "data": {
        "id": "368fea8e-0fad-4bc3-8ef6-fa2d8585d1d7",
        "status": "verified_with_reason",
        "rejectFields": [
            "emailAddress"
        ],
        "referenceId": "ref_certel#dfb8b449-4d83-41e8-b2f4-0343ead765f4"
    }
}
```

{% endtab %}

{% tab title="Invalid Phone Number" %}
{% hint style="info" %}
It means that the email, phone number, or both have been used by another NIK (identification number).
{% endhint %}

You can use identityId=`1234567890111117` to produce invalid phoneNumber.

**Example:**

```
{
    "identityId": "1234567890111117",
    "fullName": "ASEP SUPRIYADI",
    "birthDate": "1990-07-06",
    "emailAddress": "test@email.com",
    "phoneNumber": "621234567890",
    "faceImage": "<base64>",
    "identityImage": "<base64>"
}
```

```
{
    "message": "Certificate electronic verification has been done",
    "data": {
        "id": "a67c4ab8-c723-49f1-a2a8-e7a579df94f7",
        "status": "verified_with_reason",
        "rejectFields": [
            "phoneNumber"
        ],
        "referenceId": "ref_certel#a704a3ad-1986-4897-975e-16e015d88b2e"
    }
}
```

{% endtab %}

{% tab title="Invalid Email Address & Phone Number" %}
{% hint style="info" %}
It means that the email, phone number, or both have been used by another NIK (identification number).
{% endhint %}

You can use identityId=`1234567890111118` to produce invalid Email Address & phoneNumber.

**Example:**

```
{
    "identityId": "1234567890111118",
    "fullName": "ASEP SUPRIYADI",
    "birthDate": "1990-07-06",
    "emailAddress": "test@email.com",
    "phoneNumber": "621234567890",
    "faceImage": "<base64>",
    "identityImage": "<base64>"
}
```

```
{
    "message": "Certificate electronic verification has been done",
    "data": {
        "id": "d35484cc-7f49-4d23-8fdd-3052fd96c8b6",
        "status": "verified_with_reason",
        "rejectFields": [
            "phoneNumber",
            "emailAddress"
        ],
        "referenceId": "ref_certel#3c42fa6b-c2c9-4705-8117-cf9d08c8d2aa"
    }
}
```

{% endtab %}

{% tab title="Liveness Error" %}
{% hint style="info" %}
Failed because of liveness check, only liveness will be charged
{% endhint %}

You can use identityId=`1234567890111119` to produce liveness error.

**Example:**

```
{
    "identityId": "1234567890111119",
    "fullName": "ASEP SUPRIYADI",
    "birthDate": "1990-07-06",
    "emailAddress": "test@email.com",
    "phoneNumber": "621234567890",
    "faceImage": "<base64>",
    "identityImage": "<base64>"
}
```

```
{
    "message": "Certificate electronic verification has been done",
    "data": {
        "id": "36a6ed7b-cd7a-44d7-b4d2-d181cf561ea3",
        "status": "not_verified",
        "rejectFields": [
            "liveness_check"
        ],
        "referenceId": "ref_certel#3c42fa6b-c2c9-4705-8117-cf9d08c8d2aa"
    }
}
```

{% endtab %}
{% endtabs %}

### **Response**

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

| Field        | Type     | Description                                                                                                        |
| ------------ | -------- | ------------------------------------------------------------------------------------------------------------------ |
| id           | `String` | Kredibel history id (unique for every transactions).                                                               |
| status       | `String` | <p>Identifier of the transaction status:</p><p>- verified</p><p>- verified\_with\_reason</p><p>- not\_verified</p> |
| rejectFields | `Array`  | Indicator if there’s a false response to a or any parameter, example if nik.                                       |
| referenceId  | `String` | Reference id.                                                                                                      |
| {% endtab %} |          |                                                                                                                    |

{% tab title="Example" %}

```
{
    "message": "Certificate electronic verification has been done",
    "data": {
        "id": "8c4d6927-b4e1-428b-b95f-c21b6734b73f",
        "status": "verified",
        "rejectFields": [],
        "referenceId": "ref_certel#e87c8bc2-5d10-455b-98a0-187d60f72873"
    }
}
```

{% endtab %}
{% endtabs %}

### **Errors**

{% hint style="info" %}
Please read this [page \<Responses & Errors>](/responses-and-errors) to know more about response.
{% endhint %}


# Identity Verification \[Deprecated]

This service allows you to verify national identity card (KTP) data against government databases.

## Endpoints

| Method | Url                                                   | Description             |
| ------ | ----------------------------------------------------- | ----------------------- |
| POST   | `$synapses`**`/v1/identity/verification/demography`** | Demography verification |
| POST   | `$synapses`**`/v1/identity/verification/biometric`**  | Biometric verification  |
| POST   | `$synapses`**`/v1/identity/verification/full`**       | Full verification       |


# Biometric Verification

Face biometric verification to dukcapil database.

{% hint style="info" %}
This module only support biometric verification for indonesian identity card (KTP)
{% endhint %}

![](/files/4MXbZc0nryTfyYByi1TW)

## Endpoints

| Method | URL                                                  |
| ------ | ---------------------------------------------------- |
| POST   | `$synapses`**`/v1/identity/verification/biometric`** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Request**

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

| Field                                                            | Type                                                                  | Description                     |
| ---------------------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------- |
| <p>identityId</p><p><strong><code>(required)</code></strong></p> | <p><code>String</code><br><strong><code>(len: 16)</code></strong></p> | Nomor induk kependudukan (NIK). |
| <p>faceImage </p><p><strong><code>(required)</code></strong>     |                                                                       |                                 |

</p> | `Base64`                                                              | <p>Image binary encoded in base64 without &#x3C;data:image/png;>.<br>- Supports: JPG, JPEG, PNG, SVG<br>- Max Size: 1MB</p> |
{% endtab %}

{% tab title="Example" %}

```
{
    "identityId": "1234567890123456",
    "faceImage": "<base64>"
}
```

{% endtab %}
{% endtabs %}

#### **Testing**

{% hint style="info" %}
In the sandbox environment, we only response api call with dummy data. To get valid response data, you can use our production environment instead.
{% endhint %}

{% tabs %}
{% tab title="Face Match" %}
You can use identityId = `1234567890123456` to produce face not match result.

**Example:**

```
{
    "identityId": "1234567890123456",
    "faceImage": "<base64>"
}
```

```
{
    "message": "Identity biometric verification succeeded.",
    "data": {
        "id": "64d07984-81a8-4e79-ad16-a439f5885075",
        "identityId": "1234567890123456",
        "isValid": true,
        "isActive": true,
        "response": {
            "face": true,
            "faceSimilarity": 1.0
        }
    }
}
```

{% endtab %}

{% tab title="Face Not Match" %}
You can use any identityId except `1234567890123456` to produce face not match result.

**Example:**

```
{
    "identityId": "1234567890111111",
    "faceImage": "<base64>"
}
```

```
{
    "message": "Identity biometric verification succeeded.",
    "data": {
        "id": "cfe1732d-bd89-4e97-94c1-b3790a2952c4",
        "identityId": "1234567890111111",
        "isValid": true,
        "isActive": true,
        "response": {
            "face": false,
            "faceSimilarity": 0.24
        }
    }
}
```

{% endtab %}

{% tab title="Wrong Identity" %}
You can use any identityId except `1234567890123456` and `1234567890111111` to produce identity not valid result.

```
{
    "identityId": "1234567890123444",
    "faceImage": "<base64>"
}
```

```
{
    "message": "Identity biometric verification succeeded.",
    "data": {
        "id": "f989eae0-59a3-4a04-baac-6f16c8e7b7fd",
        "identityId": "1234567890123444",
        "isValid": false,
        "isActive": false,
        "response": {}
    }
}
```

{% endtab %}
{% endtabs %}

### **Response**

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

| Field                        | Type                                                             | Description                                                                                                      |
| ---------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| id                           | `String`                                                         | Unique identifier.                                                                                               |
| identityId                   | `String`                                                         | Nomor induk kependudukan (NIK).                                                                                  |
| isValid                      | `Boolean`                                                        | Return true if identityId is **exist** in the Dukcapil database.                                                 |
| isActive&#xD;                | `Boolean`                                                        | Return true if identityId is **active** in the Dukcapil database.                                                |
| response:face                | `Boolean`                                                        | <p>Return true if input face match with the face in dukcapil database.<br>- Default threshold: >= 0.75: True</p> |
| response:faceSimilarity&#xD; | <p><code>Float</code><br><strong><code>(0-1)</code></strong></p> | Similarity between the input face and the face in Dukcapil database.                                             |
| {% endtab %}                 |                                                                  |                                                                                                                  |

{% tab title="Example" %}

```
{
    "message": "Identity biometric verification succeeded.",
    "data": {
        "id": "7d7cb73b-c55a-4e93-b3d0-972058bd9ccd",
        "identityId": "1234567890123456",
        "isValid": false,
        "isActive": false,
        "response": {
            "face": false,
            "faceSimilarity": 0.36
        }
    }
}
```

{% endtab %}
{% endtabs %}

### **Errors**

{% hint style="info" %}
Please read this [page \<Responses & Errors>](/responses-and-errors) to know more about response.
{% endhint %}

**Error 4XX**

{% tabs %}
{% tab title="Error Type" %}

| Error Type                | Description                                                             | Is charged? |
| ------------------------- | ----------------------------------------------------------------------- | ----------- |
| invalid\_base64\_encoding | Invalid base64 encoding.                                                | False       |
| image\_too\_large         | Input image is greater than the maximum size allowed.                   | False       |
| no\_face\_detected        | No face was detected from the input image or the input image is blurry. | True        |
| request\_error            | Cannot get response from Dukcapil server.                               | False       |
| {% endtab %}              |                                                                         |             |

{% tab title="Structure" %}

```
{
   "errors":{
      "errorId": <log_id:uuid>,
      "errorType": <error_type:str>
   },
   "message": <message:str>
}
```

{% endtab %}
{% endtabs %}

**Error 5XX**

**F**or every 5XX http code response, there will be no charge.


# Demography Verification

Demography verification to dukcapil database.

{% hint style="info" %}
This module only support biometric verification for indonesian identity card (KTP)
{% endhint %}

![](/files/2ruXJEYyi11wQ4BHSaRZ)

## Endpoints

| Method | URL                                                   |
| ------ | ----------------------------------------------------- |
| POST   | `$synapses`**`/v1/identity/verification/demography`** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Request**

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

| Field                                                            | Type                                                                  | Description                     |
| ---------------------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------- |
| <p>identityId</p><p><strong><code>(required)</code></strong></p> | <p><code>String</code><br><strong><code>(len: 16)</code></strong></p> | Nomor induk kependudukan (NIK). |
| <p>fullName</p><p><strong><code>(optional)</code></strong>       |                                                                       |                                 |

</p>  | `String`                                                                         | Full name.                                                                                                                |
| <p>birthPlace<br><strong><code>(optional)</code></strong></p>    | `String`                                                                         | Birth Place.                                                                                                              |
| <p>birthDate<br><strong><code>(optional)</code></strong></p>     | <p><code>String</code><br><strong><code>(format: yyyy-mm-dd)</code></strong></p> | Birth Date.                                                                                                               |
| <p>address<br><strong><code>(optional)</code></strong></p>       | `String`                                                                         | Address.                                                                                                                  |
| <p>threshold<br><strong><code>(optional)</code></strong></p>     | <p>Float<br><strong>(0-1)</strong></p>                                           | <p>Matched threshold for demography data (fullName, birthPlace, address)<br>- 0=0% match, 0.5=50% match, 1=100% match</p> |
{% endtab %}

{% tab title="Example" %}

```
{
    "identityId": "1234567890123456",
    "faceImage": "<base64>"
}
```

{% endtab %}
{% endtabs %}

#### **Testing**

{% hint style="info" %}
In the sandbox environment, we only response api call with dummy data. To get valid response data, you can use our production environment instead.
{% endhint %}

{% tabs %}
{% tab title="All Match" %}
You can use identityId = `1234567890123456` to produce face not match result.

**Example:**

```
{
    "identityId": "1234567890123456",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06"
}
```

```
{
    "message": "Identity demography verification succeeded.",
    "data": {
        "id": "43ad6108-a5ce-452f-8603-d60d24c2ef3e",
        "identityId": "1234567890123456",
        "isValid": true,
        "isActive": true,
        "response": {
            "fullName": true,
            "fullNameSimilarity": 1.0,
            "address": true,
            "addressSimilarity": 1.0,
            "birthPlace": true,
            "birthPlaceSimilarity": 1.0,
            "birthDate": true
        }
    }
}
```

{% endtab %}

{% tab title="Wrong Identity" %}
You can use any identityId except `1234567890123456` to produce identity not valid result.

**Example:**

```
{
    "identityId": "1234567890123450",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06"
}
```

```
{
    "message": "Identity demography verification succeeded.",
    "data": {
        "id": "c1fa0289-b6ea-4ffe-9d05-10fd99143ad5",
        "identityId": "1234567890123450",
        "isValid": false,
        "isActive": false,
        "response": {}
    }
}
```

{% endtab %}

{% tab title="Wrong Name" %}
You can use identityId=`1234567890123451` to produce full name is not valid.

**Example:**

```
{
    "identityId": "1234567890123451",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06"
}
```

```
{
    "message": "Identity demography verification succeeded.",
    "data": {
        "id": "673a9284-87e9-4f08-bb08-b820844b6159",
        "identityId": "1234567890123451",
        "isValid": true,
        "isActive": true,
        "response": {
            "fullName": false,
            "fullNameSimilarity": 0.43,
            "address": true,
            "addressSimilarity": 1.0,
            "birthPlace": true,
            "birthPlaceSimilarity": 1.0,
            "birthDate": true
        }
    }
}
```

{% endtab %}

{% tab title="Wrong Address" %}
You can use identityId=`234567890123452` to produce address is not valid.

**Example:**

```
{
    "identityId": "1234567890123452",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06"
}
```

```
{
    "message": "Identity demography verification succeeded.",
    "data": {
        "id": "be99966d-597c-4da9-a475-83392ef899f4",
        "identityId": "1234567890123452",
        "isValid": true,
        "isActive": true,
        "response": {
            "fullName": true,
            "fullNameSimilarity": 1.0,
            "address": false,
            "addressSimilarity": 0.58,
            "birthPlace": true,
            "birthPlaceSimilarity": 1.0,
            "birthDate": true
        }
    }
}
```

{% endtab %}

{% tab title="Wrong Birthplace" %}
You can use identityId=`234567890123453` to produce birth place is not valid.

**Example:**

```
{
    "identityId": "1234567890123453",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06"
}
```

```
{
    "message": "Identity demography verification succeeded.",
    "data": {
        "id": "4faf35f4-44a1-47b2-8a18-07d243174aba",
        "identityId": "1234567890123453",
        "isValid": true,
        "isActive": true,
        "response": {
            "fullName": true,
            "fullNameSimilarity": 1.0,
            "address": true,
            "addressSimilarity": 1.0,
            "birthPlace": false,
            "birthPlaceSimilarity": 0.23,
            "birthDate": true
        }
    }
}
```

{% endtab %}

{% tab title="Wrong Birthdate" %}
You can use identityId=`234567890123454` to produce birth date is not valid.

**Example:**

```
{
    "identityId": "1234567890123454",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06"
}
```

```
{
    "message": "Identity demography verification succeeded.",
    "data": {
        "id": "41272ecf-b5e2-4897-a492-b89356fab0c2",
        "identityId": "1234567890123454",
        "isValid": true,
        "isActive": true,
        "response": {
            "fullName": true,
            "fullNameSimilarity": 1.0,
            "address": true,
            "addressSimilarity": 1.0,
            "birthPlace": true,
            "birthPlaceSimilarity": 1.0,
            "birthDate": false
        }
    }
}
```

{% endtab %}
{% endtabs %}

### **Response**

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

| Field                         | Type                                                             | Description                                                                       |
| ----------------------------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| id                            | `String`                                                         | Unique identifier.                                                                |
| identityId                    | `String`                                                         | Nomor induk kependudukan (NIK).                                                   |
| isValid                       | `Boolean`                                                        | Return true if identityId is **exist** in the Dukcapil database.                  |
| isActive&#xD;                 | `Boolean`                                                        | Return true if identityId is **active** in the Dukcapil database.                 |
| response:fullName             | `Boolean`                                                        | Return true if input fullName  match with the fullName in Dukcapil database.      |
| response:fullNameSimilarity   | <p><code>Float</code><br><strong><code>(0-1)</code></strong></p> | Similarity between the input fullName and the fullName in Dukcapil database.      |
| response:address              | `Boolean`                                                        | Return true if input birth date match with the birth date in Dukcapil database.   |
| response:addressSimilarity    | <p><code>Float</code><br><strong><code>(0-1)</code></strong></p> | Similarity between the input address and the address in Dukcapil database.        |
| response:birthPlace           | `Boolean`                                                        | Return true if input birth place match with the birth place in Dukcapil database. |
| response:birthPlaceSimilarity | <p><code>Float</code><br><strong><code>(0-1)</code></strong></p> | Similarity between the input birthPlace and the birthPlace in Dukcapil database.  |
| response:birthDate            | `Boolean`                                                        | Return true if input birth date match with the birth date in Dukcapil database.   |

{% endtab %}

{% tab title="Example" %}

```
{
    "message": "Identity demography verification succeeded.",
    "data": {
        "id": "948cc6f9-1662-4ae7-a578-fdaa50331507",
        "identityId": "1234567890123456",
        "isValid": true,
        "isActive": true,
        "response": {
            "fullName": true,
            "fullNameSimilarity": 1.0,
            "address": true,
            "addressSimilarity": 1.0,
            "birthPlace": true,
            "birthPlaceSimilarity": 1.0,
            "birthDate": true
        }
    }
}
```

{% endtab %}
{% endtabs %}

### **Errors**

{% hint style="info" %}
Please read this [page \<Responses & Errors>](/responses-and-errors) to know more about response.
{% endhint %}

**Error 4XX**

{% tabs %}
{% tab title="Error Type" %}

| Error Type     | Description                               | Is charged? |
| -------------- | ----------------------------------------- | ----------- |
| request\_error | Cannot get response from Dukcapil server. | False       |
| {% endtab %}   |                                           |             |

{% tab title="Structure" %}
In general, the error response structure is as belo&#x77;**:**

```
{
   "errors":{
      "errorId": <log_id:uuid>,
      "errorType": <error_type:str>
   },
   "message": <message:str>
}
```

{% endtab %}
{% endtabs %}

**Error 5XX**

**F**or every 5XX http code response, there will be no charge.


# Full Verification

Demography and Biometric verification to dukcapil database.

{% hint style="info" %}
This module only support verification for indonesian identity card (KTP)
{% endhint %}

![](/files/zjmMYHJD3aDRx94DxOZE)

## Endpoints

| Method | URL                                             |
| ------ | ----------------------------------------------- |
| POST   | `$synapses`**`/v1/identity/verification/full`** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Request**

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

| Field                                                            | Type                                                                  | Description                     |
| ---------------------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------- |
| <p>identityId</p><p><strong><code>(required)</code></strong></p> | <p><code>String</code><br><strong><code>(len: 16)</code></strong></p> | Nomor induk kependudukan (NIK). |
| <p>fullName</p><p><strong><code>(required)</code></strong>       |                                                                       |                                 |

</p>  | `String`                                                                         | Full name.                                                                                                                  |
| <p>birthPlace<br><strong><code>(required)</code></strong></p>    | `String`                                                                         | Birth Place.                                                                                                                |
| <p>birthDate<br><strong><code>(required)</code></strong></p>     | <p><code>String</code><br><strong><code>(format: yyyy-mm-dd)</code></strong></p> | Birth Date.                                                                                                                 |
| <p>address<br><strong><code>(required)</code></strong></p>       | `String`                                                                         | Address.                                                                                                                    |
| <p>faceImage </p><p><strong><code>(required)</code></strong></p> | `Base64`                                                                         | <p>Image binary encoded in base64 without &#x3C;data:image/png;>.<br>- Supports: JPG, JPEG, PNG, SVG<br>- Max Size: 1MB</p> |
| <p>threshold<br><strong><code>(optional)</code></strong></p>     | <p>Float<br><strong>(0-1)</strong></p>                                           | <p>Matched threshold for demography data (fullName, birthPlace, address)<br>- 0=0% match, 0.5=50% match, 1=100% match</p>   |
| <p>faceThreshold<br><strong><code>(optional)</code></strong></p> | **(0-1)**                                                                        | <p>Matched threshold for biometric data (face)<br>- 0=0% match, 0.5=50% match, 1=100% match</p>                             |
{% endtab %}

{% tab title="Example" %}

```
{
    "identityId": "1234567890123456",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06",
    "faceImage": "<base64>"
}
```

{% endtab %}
{% endtabs %}

#### **Testing**

{% hint style="info" %}
In the sandbox environment, we only response api call with dummy data. To get valid response data, you can use our production environment instead.
{% endhint %}

{% tabs %}
{% tab title="All Match" %}
You can use identityId=`1234567890123456` to produce all-match result.

**Example:**

```
{
    "identityId": "1234567890123456",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06",
    "faceImage": "<base64>"
}
```

```
{
    "message": "Identity full verification succeeded.",
    "data": {
        "id": "57746ec6-8b36-404c-890f-8a683f2372ef",
        "identityId": "1234567890123456",
        "isValid": true,
        "isActive": true,
        "response": {
            "fullName": true,
            "fullNameSimilarity": 1.0,
            "address": true,
            "addressSimilarity": 1.0,
            "birthPlace": true,
            "birthPlaceSimilarity": 1.0,
            "birthDate": true,
            "face": true,
            "face_similarity": 1.0
        }
    }
}
```

{% endtab %}

{% tab title="Wrong Identity" %}
You can use any identityId except `1234567890123456` to produce identity not valid result.

**Example:**

```
{
    "identityId": "1234567890123450",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06",
    "faceImage": "<base64>"
}
```

```
{
    "message": "Identity full verification succeeded.",
    "data": {
        "id": "f9f66616-12f0-402f-93bf-5b7f165ab23d",
        "identityId": "1234567890123450",
        "isValid": false,
        "isActive": false,
        "response": {}
    }
}
```

{% endtab %}

{% tab title="Wrong Name" %}
You can use identityId =`1234567890123451` to produce full name is not valid.

**Example:**

```
{
    "identityId": "1234567890123451",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06",
    "faceImage": "<base64>"
}
```

```
{
    "message": "Identity full verification succeeded.",
    "data": {
        "id": "df25614d-dce8-436e-9318-b3ac9bbda179",
        "identityId": "1234567890123451",
        "isValid": true,
        "isActive": true,
        "response": {
            "fullName": false,
            "fullNameSimilarity": 0.43,
            "address": true,
            "addressSimilarity": 1.0,
            "birthPlace": true,
            "birthPlaceSimilarity": 1.0,
            "birthDate": true,
            "face": false,
            "face_similarity": 0.12
        }
    }
}
```

{% endtab %}

{% tab title="Wrong Address" %}
You can use identityId=`234567890123452` to produce address is not valid.

**Example:**

```
{
    "identityId": "1234567890123452",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06",
    "faceImage": "<base64>"
}
```

```
{
    "message": "Identity full verification succeeded.",
    "data": {
        "id": "b26ebc48-20fa-4f53-8bb4-652058def9b0",
        "identityId": "1234567890123452",
        "isValid": true,
        "isActive": true,
        "response": {
            "fullName": true,
            "fullNameSimilarity": 1.0,
            "address": true,
            "addressSimilarity": 0.58,
            "birthPlace": true,
            "birthPlaceSimilarity": 1.0,
            "birthDate": true,
            "face": false,
            "face_similarity": 0.73
        }
    }
}
```

{% endtab %}

{% tab title="Wrong Birthplace" %}
You can use identityId=`234567890123453` to produce birth place is not valid.

**Example:**

```
{
    "identityId": "1234567890123453",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06",
    "faceImage": "<base64>"
}
```

```
{
    "message": "Identity full verification succeeded.",
    "data": {
        "id": "6fbf106c-ad7e-4371-8571-3e9615a9590d",
        "identityId": "1234567890123453",
        "isValid": true,
        "isActive": true,
        "response": {
            "fullName": true,
            "fullNameSimilarity": 1.0,
            "address": true,
            "addressSimilarity": 1.0,
            "birthPlace": false,
            "birthPlaceSimilarity": 0.23,
            "birthDate": true,
            "face": false,
            "face_similarity": 0.65
        }
    }
}
```

{% endtab %}

{% tab title="Wrong Birthdate" %}
You can use identityId=`234567890123454` to produce birth date is not valid.

**Example:**

```
{
    "identityId": "1234567890123454",
    "fullName": "ASEP SUPRIYADI",
    "address": "JL SESAMA NO 123",
    "birthPlace": "JAKARTA",
    "birthDate": "1990-07-06",
    "faceImage": "<base64>"
}
```

```
{
    "message": "Identity full verification succeeded.",
    "data": {
        "id": "84ede311-7eb7-462b-80ae-0795fafcf368",
        "identityId": "1234567890123454",
        "isValid": true,
        "isActive": true,
        "response": {
            "fullName": true,
            "fullNameSimilarity": 1.0,
            "address": true,
            "addressSimilarity": 1.0,
            "birthPlace": true,
            "birthPlaceSimilarity": 1.0,
            "birthDate": true,
            "face": false,
            "face_similarity": 0.46
        }
    }
}
```

{% endtab %}
{% endtabs %}

### **Response**

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

| Field                         | Type                                                             | Description                                                                                                      |
| ----------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| id                            | `String`                                                         | Unique identifier.                                                                                               |
| identityId                    | `String`                                                         | Nomor induk kependudukan (NIK).                                                                                  |
| isValid                       | `Boolean`                                                        | Return true if identityId is **exist** in the Dukcapil database.                                                 |
| isActive&#xD;                 | `Boolean`                                                        | Return true if identityId is **active** in the Dukcapil database.                                                |
| response:fullName             | `Boolean`                                                        | Return true if input fullName  match with the fullName in Dukcapil database.                                     |
| response:fullNameSimilarity   | <p><code>Float</code><br><strong><code>(0-1)</code></strong></p> | Similarity between the input fullName and the fullName in Dukcapil database.                                     |
| response:address              | `Boolean`                                                        | Return true if input birth date match with the birth date in Dukcapil database.                                  |
| response:addressSimilarity    | <p><code>Float</code><br><strong><code>(0-1)</code></strong></p> | Similarity between the input address and the address in Dukcapil database.                                       |
| response:birthPlace           | `Boolean`                                                        | Return true if input birth place match with the birth place in Dukcapil database.                                |
| response:birthPlaceSimilarity | <p><code>Float</code><br><strong><code>(0-1)</code></strong></p> | Similarity between the input birthPlace and the birthPlace in Dukcapil database.                                 |
| response:birthDate            | `Boolean`                                                        | Return true if input birth date match with the birth date in Dukcapil database.                                  |
| response:face                 | `Boolean`                                                        | <p>Return true if input face match with the face in dukcapil database.<br>- Default threshold: >= 0.75: True</p> |
| response:faceSimilarity       | <p><code>Float</code><br><strong><code>(0-1)</code></strong></p> | <p>Similarity between the input face and the face in Dukcapil database.<br>- Default threshold: >= 0.8: True</p> |

{% endtab %}

{% tab title="Example" %}

```
{
    "message": "Identity full verification succeeded.",
    "data": {
        "id": "68224a77-60f4-40f6-85ff-35801f4d6541",
        "identityId": "1234567890123451",
        "isValid": true,
        "isActive": true,
        "response": {
            "fullName": false,
            "fullNameSimilarity": 0.43,
            "address": true,
            "addressSimilarity": 1.0,
            "birthPlace": true,
            "birthPlaceSimilarity": 1.0,
            "birthDate": true,
            "face": true,
            "faceSimilarity": 0.81
        }
    }
}
```

{% endtab %}
{% endtabs %}

### **Errors**

{% hint style="info" %}
Please read this [page \<Responses & Errors>](/responses-and-errors) to know more about response.
{% endhint %}

**Error 4XX**

{% tabs %}
{% tab title="Error Type" %}

| Error Type                | Description                                                             | Is charged? |
| ------------------------- | ----------------------------------------------------------------------- | ----------- |
| invalid\_base64\_encoding | Invalid base64 encoding.                                                | False       |
| image\_too\_large         | Input image is greater than the maximum size allowed.                   | False       |
| no\_face\_detected        | No face was detected from the input image or the input image is blurry. | True        |
| request\_error            | Cannot get response from Dukcapil server.                               | False       |
| {% endtab %}              |                                                                         |             |

{% tab title="Structure" %}

```
{
   "errors":{
      "errorId": <log_id:uuid>,
      "errorType": <error_type:str>
   },
   "message": <message:str>
}
```

{% endtab %}
{% endtabs %}

**Error 5XX**

**F**or every 5XX http code response, there will be no charge.


# Text Recognition

## Introduction

Text Recognition can help you to automate tedious data entry and speed up the onboarding process.

## Ability

* Recognize text in all orientations
* Detect identity card in the image

## Limitations

The following is a list of conditions that can reduce performance of the model to recognize text.

* Blurry Image
* Glare Image
* Lightning
* Perspective

## Under the Hood

Kredibel is using **deep learning** to perform text recognition task. Below is an explanation of how a Kredibel Text Recognition system works.

### 1. Upload Image

Users can upload a **handheld** or **non-handheld** identity card image. Our system can handle both.&#x20;

### 2. Identity Card Detection

Our system will **detect** whether there is an identity card in the image or not.

### 3. Cropping

Our system will automatically **crop** the image region of interest (identity card) to prevent unwanted characters from being detected.

### 4. Orientation estimation

Our system will **estimate** text orientation and **normalize** it. Thats why our system can recognize text in all orientations.

### 5. Text Detection

Our system **detects** text on the image. Create a bounding box for each detected word.

### 6. Text Recognition

Our system **recognizes** each text detected by the text detection model.

### 7. POST-OCR Parsing

Our system will **parse** the unstructured data generated by the OCR system into structured data.

## Endpoints

| Method | URL                          | Description  |
| ------ | ---------------------------- | ------------ |
| POST   | `$vision/v1/ocr/id/ktp`      | KTP OCR      |
| POST   | `$vision/v1/ocr/id/sim`      | SIM OCR      |
| POST   | `$vision/v1/ocr/id/passport` | Passport OCR |


# National Identity

Text recognition on Indonesian Identity Card (KTP).

{% hint style="info" %}
This endpoint only supports Indonesian identity cards (KTP)
{% endhint %}

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

## Endpoints

| Method | URL                           |
| ------ | ----------------------------- |
| POST   | `$vision`**`/v1/ocr/id/ktp`** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Request**

{% hint style="info" %}
The OCR inference time may vary. It depends on many factors, one of them is the **image size**. We recommend you to **resize** the image before sending it to Kredibel system.
{% endhint %}

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

| Field                                                       | Type                                                                | Description                                                                                                                                                                                           |
| ----------------------------------------------------------- | ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p>image</p><p><strong><code>(Required)</code></strong></p> | \<base64:image>                                                     | <p>Image binary encoded in base64 without \<data:image/png;>.<br>- <strong>Supports:</strong> JPG, JPEG, PNG<br>- <strong>Max Size:</strong> 2MB<br>- <strong>Recommended size:</strong> 1024x768</p> |
| cardDetect                                                  | <p>Boolean</p><p><strong><code>(Default: true)</code></strong></p>  | Use card detection model                                                                                                                                                                              |
| passCardDetect                                              | <p>Boolean</p><p><strong><code>(Default: true)</code></strong></p>  | If `false`, when identity card is not detected on the image it will return an **error message**                                                                                                       |
| flipImage                                                   | <p>Boolean</p><p><strong><code>(Default: false)</code></strong></p> | If `true`, the system will flip your image                                                                                                                                                            |
| checkFlipImage                                              | <p>Boolean</p><p><strong><code>(Default: false)</code></strong></p> | If `true`, the system will check whether your image is flipped or not                                                                                                                                 |
| validateResult                                              | <p>Boolean</p><p><strong><code>(Default: false)</code></strong></p> | If `true`, you will get format validation information about result.                                                                                                                                   |
| {% endtab %}                                                |                                                                     |                                                                                                                                                                                                       |

{% tab title="Example (Recommendation)" %}
You just need to declare image field in order to use this service.

```
{
  "image": "/9j/..."
}
```

{% endtab %}

{% tab title="Example (Verbose)" %}

```
{
  "image": "string",
  "cardDetect": true,
  "passCardDetect": true,
  "flipImage": true,
  "checkFlipImage": true,
  "validateResult": true
}
```

{% endtab %}
{% endtabs %}

### **Response**

{% tabs %}
{% tab title="Description" %}
`result`

| Field         | Type                                                                       | Description       |
| ------------- | -------------------------------------------------------------------------- | ----------------- |
| identityId    | `String`                                                                   | Identity id (NIK) |
| fullName      | `String`                                                                   | Full name         |
| birthPlace    | `String`                                                                   | Place of birth    |
| birthDate     | <p><code>Date</code> </p><p><strong><code>(dd-mm-yyyy)</code></strong></p> | Date of birth     |
| gender        | `String`                                                                   | Gender            |
| address       | `String`                                                                   | Address           |
| province      | `String`                                                                   | Province          |
| city          | `String`                                                                   | City              |
| district      | `String`                                                                   | District          |
| village       | `String`                                                                   | Village           |
| rtrw          | `String`                                                                   | RT/RW             |
| religion      | `String`                                                                   | Religion          |
| maritalStatus | `String`                                                                   | Marital status    |
| occupation    | `String`                                                                   | Occupation        |
| nationality   | `String`                                                                   | Nationality       |

`information`

<table><thead><tr><th width="196.41311856857652">Field</th><th width="190.62541806020067">Type</th><th>Description</th></tr></thead><tbody><tr><td>tilt</td><td><code>Float</code></td><td>Tilt degree (0-360) on identity card. If it is upside-down, then the value is 180.</td></tr><tr><td>cardDetected</td><td><code>Boolean</code></td><td>Return true if out system detected identity card on the image.</td></tr></tbody></table>
{% endtab %}

{% tab title="Example" %}

```
{
  "message": "string",
  "data": {
    "id": "string",
    "result": {
      "identityId": "string",
      "fullName": "string",
      "birthPlace": "string",
      "birthDate": "string",
      "gender": "string",
      "address": "string",
      "province": "string",
      "city": "string",
      "district": "string",
      "village": "string",
      "rtrw": "string",
      "religion": "string",
      "maritalStatus": "string",
      "occupation": "string",
      "nationality": "string"
    },
    "information": {
        "tilt": float,
        "cardDetected": boolean
    }
  }
}
```

{% endtab %}
{% endtabs %}

### **Errors**

{% hint style="info" %}
Please read this [page \<Responses & Errors>](/responses-and-errors) to know more about response.
{% endhint %}

**Error 4XX**

{% tabs %}
{% tab title="Error Type" %}

<table><thead><tr><th width="261">Error Type</th><th width="352.3333333333333">Description</th><th>Is charged?</th></tr></thead><tbody><tr><td>invalid_base64_encoding</td><td>Invalid base64 encoding.</td><td><strong>false</strong></td></tr><tr><td>card_not_found</td><td>There is no identity card found in the image. This error only raised if you set <code>passCardDetect = False</code>.</td><td><strong>true</strong></td></tr><tr><td>text_not_found</td><td>There is no text found in the image.</td><td><strong>true</strong></td></tr><tr><td>invalid_document_type</td><td>The document sent does not appear to be the right identity type.</td><td><strong>true</strong></td></tr><tr><td>parsing_failed</td><td>System fail to parse identity card.</td><td><strong>true</strong></td></tr></tbody></table>
{% endtab %}

{% tab title="Structure" %}
In general, the error response structure is as belo&#x77;**:**

```
{
   "errors":{
      "errorId": <log_id:uuid>,
      "errorType": <error_type:str>
   },
   "message": <message:str>
}
```

{% endtab %}
{% endtabs %}

**Error 5XX**

**F**or every 5XX http code response, there will be no charge.


# Driver License

Text recognition on Indonesian driver's license (SIM).

{% hint style="info" %}
This service only supports Indonesian driver's license (SIM)
{% endhint %}

## Endpoints

| Method | URL                           |
| ------ | ----------------------------- |
| POST   | `$vision`**`/v1/ocr/id/sim`** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Request**

{% hint style="info" %}
The OCR inference time may vary. It depends on many factors, one of them is the **image size**. We recommend you to **resize** the image before sending it to Kredibel system.
{% endhint %}

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

| Field                                                       | Type                                                                             | Description                                                                                                                                                                                           |
| ----------------------------------------------------------- | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p>image</p><p><strong><code>(Required)</code></strong></p> | `<base64:image>`                                                                 | <p>Image binary encoded in base64 without \<data:image/png;>.<br>- <strong>Supports:</strong> JPG, JPEG, PNG<br>- <strong>Max Size:</strong> 2MB<br>- <strong>Recommended size:</strong> 1024x768</p> |
| cardDetect                                                  | <p><code>Boolean</code></p><p><strong><code>(Default: true)</code></strong></p>  | Use card detection model                                                                                                                                                                              |
| passCardDetect                                              | <p><code>Boolean</code></p><p><strong><code>(Default: true)</code></strong></p>  | If `false`, when identity card is not detected on the image it will return an **error message**                                                                                                       |
| flipImage                                                   | <p><code>Boolean</code></p><p><strong><code>(Default: false)</code></strong></p> | If `true`, the system will flip your image                                                                                                                                                            |
| checkFlipImage                                              | <p><code>Boolean</code></p><p><strong><code>(Default: false)</code></strong></p> | If `true`, the system will check whether your image is flipped or not                                                                                                                                 |
| {% endtab %}                                                |                                                                                  |                                                                                                                                                                                                       |

{% tab title="Example (Recommendation)" %}
You just need to declare image field in order to use this service.

```
{
  "image": "/9j/..."
}
```

{% endtab %}

{% tab title="Example (Verbose)" %}

```
{
  "image": "string",
  "cardDetect": true,
  "passCardDetect": true,
  "flipImage": true,
  "checkFlipImage": true
}
```

{% endtab %}
{% endtabs %}

### **Response**

{% tabs %}
{% tab title="Description" %}
`result`

| Field      | Type                                                                                | Description    |
| ---------- | ----------------------------------------------------------------------------------- | -------------- |
| identityId | `String`                                                                            | Identity id    |
| fullName   | `String`                                                                            | Full name      |
| birthPlace | `String`                                                                            | Place of birth |
| birthDate  | <p><code>Date</code> </p><p><strong><code>(dd-mm-yyyy)</code></strong></p>          | Date of birth  |
| gender     | <p><code>String</code> </p><p><strong><code>\["PRIA", "WANITA"]</code></strong></p> | Gender         |
| address    | `String`                                                                            | Address        |
| occupation | `String`                                                                            | Occupation     |
| expiryDate | <p><code>Date</code> </p><p><strong><code>(dd-mm-yyyy)</code></strong></p>          | Expiry date    |

`information`

| Field        | Type    | Description                                                                        |
| ------------ | ------- | ---------------------------------------------------------------------------------- |
| tilt         | `Float` | Tilt degree (0-360) on identity card. If it is upside-down, then the value is 180. |
| cardDetected | Boolean | Return true if out system detected identity card on the image.                     |
| {% endtab %} |         |                                                                                    |

{% tab title="Example" %}

```
{
  "message": "string",
  "data": {
    "id": "string",
    "result": {
      "identityId": "string",
      "indicator": "string",
      "country": "string",
      "countryCode": "string",
      "fullName": "string",
      "nationality": "string",
      "nationalityCode": "string",
      "birthDate": "string",
      "sex": "string",
      "personalNumber": "string",
      "expirationDate": "string"
    },
    "information": {
        "tilt": float,
        "cardDetected": boolean
    }
  }
}
```

{% endtab %}
{% endtabs %}

### **Errors**

{% hint style="info" %}
Please read this [page \<Responses & Errors>](/responses-and-errors) to know more about response.
{% endhint %}

**Error 4XX**

{% tabs %}
{% tab title="Error Type" %}

<table><thead><tr><th width="260">Error Type</th><th width="352.3333333333333">Description</th><th>Is charged?</th></tr></thead><tbody><tr><td>invalid_base64_encoding</td><td>Invalid base64 encoding.</td><td><strong>false</strong></td></tr><tr><td>card_not_found</td><td>There is no identity card found in the image. This error only raised if you set <code>passCardDetect = False</code>.</td><td><strong>true</strong></td></tr><tr><td>text_not_found</td><td>There is no text found in the image.</td><td><strong>true</strong></td></tr><tr><td>invalid_document_type</td><td>The document sent does not appear to be the right identity type.</td><td><strong>true</strong></td></tr><tr><td>parsing_failed</td><td>System fail to parse identity card.</td><td><strong>true</strong></td></tr></tbody></table>
{% endtab %}

{% tab title="Structure" %}

```
{
   "errors":{
      "errorId": <log_id:uuid>,
      "errorType": <error_type:str>
   },
   "message": <message:str>
}
```

{% endtab %}
{% endtabs %}

**Error 5XX**

**F**or every 5XX http code response, there will be no charge.


# Passport

Text recognition on Passport.

{% hint style="info" %}
This service supports almost **all type** of passports from around the world
{% endhint %}

## Endpoints

| Method | URL                                |
| ------ | ---------------------------------- |
| POST   | `$vision`**`/v1/ocr/id/passport`** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Request**

{% hint style="info" %}
The OCR inference time may vary. It depends on many factors, one of them is the **image size**. We recommend you to **resize** the image before sending it to Kredibel system.
{% endhint %}

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

| Field                                                       | Type                                                                             | Description                                                                                                                                                                                           |
| ----------------------------------------------------------- | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p>image</p><p><strong><code>(Required)</code></strong></p> | `<base64:image>`                                                                 | <p>Image binary encoded in base64 without \<data:image/png;>.<br>- <strong>Supports:</strong> JPG, JPEG, PNG<br>- <strong>Max Size:</strong> 2MB<br>- <strong>Recommended size:</strong> 1024x768</p> |
| cardDetect                                                  | <p><code>Boolean</code></p><p><strong><code>(Default: true)</code></strong></p>  | Use card detection model                                                                                                                                                                              |
| passCardDetect                                              | <p><code>Boolean</code></p><p><strong><code>(Default: true)</code></strong></p>  | If `false`, when identity card is not detected on the image it will return an **error message**                                                                                                       |
| flipImage                                                   | <p><code>Boolean</code></p><p><strong><code>(Default: false)</code></strong></p> | If `true`, the system will flip your image                                                                                                                                                            |
| checkFlipImage                                              | <p><code>Boolean</code></p><p><strong><code>(Default: false)</code></strong></p> | If `true`, the system will check whether your image is flipped or not                                                                                                                                 |
| {% endtab %}                                                |                                                                                  |                                                                                                                                                                                                       |

{% tab title="Example (Recommendation)" %}
You just need to declare image field in order to use this service.

```
{
  "image": "/9j/..."
}
```

{% endtab %}

{% tab title="Example (Verbose)" %}

```
{
  "image": "string",
  "cardDetect": true,
  "passCardDetect": true,
  "flipImage": true,
  "checkFlipImage": true
}
```

{% endtab %}
{% endtabs %}

### **Response**

{% tabs %}
{% tab title="Description" %}
`result`

| Field           | Type                                                                               | Description      |
| --------------- | ---------------------------------------------------------------------------------- | ---------------- |
| identityId      | `String`                                                                           | Identity id      |
| indicator       | `String`                                                                           | Indicator        |
| country         | `String`                                                                           | Country          |
| countryCode     | `String`                                                                           | Country code     |
| fullName        | `String`                                                                           | Full name        |
| nationality     | `String`                                                                           | Nationality      |
| nationalityCode | `String`                                                                           | Nationality code |
| birthDate       | `String`                                                                           | Date of birth    |
| sex             | <p><code>String</code></p><p><strong><code>\["male", "female"]</code></strong></p> | Sex              |
| personalNumber  | `String`                                                                           | Personal number  |
| expirationDate  | <p><code>Date</code> </p><p><strong><code>(dd-mm-yy)</code></strong></p>           | Expiration date  |

`information`

| Field          | Type      | Description                                                                        |
| -------------- | --------- | ---------------------------------------------------------------------------------- |
| tilt           | `Float`   | Tilt degree (0-360) on identity card. If it is upside-down, then the value is 180. |
| `cardDetected` | `Boolean` | Return true if out system detected identity card on the image.                     |
| {% endtab %}   |           |                                                                                    |

{% tab title="Example" %}

```
{
  "message": "string",
  "data": {
    "id": "string",
    "result": {
      "identityId": "string",
      "indicator": "string",
      "country": "string",
      "countryCode": "string",
      "fullName": "string",
      "nationality": "string",
      "nationalityCode": "string",
      "birthDate": "string",
      "sex": "string",
      "personalNumber": "string",
      "expirationDate": "string"
    },
    "information": {
        "tilt": float,
        "cardDetected": boolean
    }
  }
}
```

{% endtab %}
{% endtabs %}

### **Errors**

{% hint style="info" %}
Please read this [page \<Responses & Errors>](/responses-and-errors) to know more about response.
{% endhint %}

**Error 4XX**

{% tabs %}
{% tab title="Error Type" %}

<table><thead><tr><th width="256">Error Type</th><th width="352.3333333333333">Description</th><th>Is charged?</th></tr></thead><tbody><tr><td>invalid_base64_encoding</td><td>Invalid base64 encoding.</td><td><strong>false</strong></td></tr><tr><td>card_not_found</td><td>There is no identity card found in the image. This error only raised if you set <code>passCardDetect = False</code>.</td><td><strong>true</strong></td></tr><tr><td>text_not_found</td><td>There is no text found in the image.</td><td><strong>true</strong></td></tr><tr><td>invalid_document_type</td><td>The document sent does not appear to be the right identity type.</td><td><strong>true</strong></td></tr><tr><td>parsing_failed</td><td>System fail to parse identity card.</td><td><strong>true</strong></td></tr></tbody></table>
{% endtab %}

{% tab title="Structure" %}

```
{
   "errors":{
      "errorId": <log_id:uuid>,
      "errorType": <error_type:str>
   },
   "message": <message:str>
}
```

{% endtab %}
{% endtabs %}

**Error 5XX**

**F**or every 5XX http code response, there will be no charge.


# Face Recognition

## Introduction

Face recognition help you to matching a human face from an image.&#x20;

## Ability

* Recognize face(s) in all orientations
* Automatically detect and crop face(s) in the image

## Limitations

The following is a list of conditions that can reduce performance of the model to recognize face.

* Blurry image
* Noisy image
* Poorly lightning condition or light reflection (often flashlight)
* Partially hidden or obstructed faces

## Under the Hood

Kredibel is using **deep learning** to perform face recognition task. Our model achieve near **99.7%** accuracy in the labeled face in the wild (LFW) dataset. Below is an explanation of how our Face Detection system works.

### 1. Upload Image

Users can upload a **handheld** or **non-handheld** identity card image. Our system can handle both.&#x20;

### 2. Orientation estimation

Our system will estimate image orientation and normalize it. That's why our system can recognize faces in all orientations.

### 3. Face Detection

Our system will **detect** all face(s) in the image.

### 4. Cropping

Our system will automatically **crop** the face area detected by face detection model.

### 5. Face Recognition

Our system will **recognize** face(s) by extracting face unique features.

### 6. Face Comparison

We **compare** face unique features of the given image.

## Endpoints

| Method | URL                            |
| ------ | ------------------------------ |
| POST   | `$vision/v1/face/verification` |


# Face Comparison

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Content-Type`  | `application/json`                           |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Model**

Kredibel provide two different option of model for face recognition. Every model has its own advantages and disadvantages. We recommend you to try both of the model before deciding which model is the best fit for your case.

| Version | Description                                                                                                               | Threshold                                  |
| ------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
| **1**   | Model version 1 is the default model used for face recognition task. The model extract 512 facial features (landmarks).   | <p>< 0.80: not match<br>>= 0.80: match</p> |
| 2       | Model version 2 is the another model option for face recognition task. The model extract 128 facial features (landmarks). | <p>< 0.80: not match<br>>= 0.80: match</p> |

## **Non-Handheld**

### Endpoint

| Method | URL                                  |
| ------ | ------------------------------------ |
| POST   | `$vision`**`/v1/face/verification`** |

### **Request**

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

| Field                  | Type             | Description                                                                                                                                          |
| ---------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| image1                 | `<base64:image>` | <p>Image binary encoded in base64 without \<data:image/png;>.<br>- <strong>Supports:</strong> JPG, JPEG, PNG<br>- <strong>Max Size:</strong> 2MB</p> |
| image2                 | `<base64:image>` | <p>Image binary encoded in base64 without \<data:image/png;>.<br>- <strong>Supports:</strong> JPG, JPEG, PNG<br>- <strong>Max Size:</strong> 2MB</p> |
| [modelVersion](#model) | `Integer`        | Model version used to recognize the faces. Default version is 1.                                                                                     |
| threshold              | `Float (0-1)`    | Threshold of the matched faces.                                                                                                                      |
| {% endtab %}           |                  |                                                                                                                                                      |

{% tab title="Example" %}

```
{
    "image1": "<base64:image>",
    "image2": "<base64:image>"
}
```

{% endtab %}
{% endtabs %}

### **Response**

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

| Field        | Type          | Description                             |
| ------------ | ------------- | --------------------------------------- |
| similarity   | `Float (0-1)` | Similarity value between the two images |
| matched      | `Boolean`     | Matched                                 |
| {% endtab %} |               |                                         |

{% tab title="Example" %}

```
{
    "message": "face verification succeded",
    "data": {
        "id": "8f9efedc-d5bf-11eb-9953-5517feb46cc4",
        "similarity": 0.7396538793680758,
        "matched": true
    }
}
```

{% endtab %}
{% endtabs %}

## Handheld

### Endpoint

|        |                                               |
| ------ | --------------------------------------------- |
| Method | URL                                           |
| POST   | `$vision`**`/v1/face/verification/handheld`** |

### **Request**

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

| Field                  | Type             | Description                                                                                                                                          |
| ---------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| image                  | `<base64:image>` | <p>Image binary encoded in base64 without \<data:image/png;>.<br>- <strong>Supports:</strong> JPG, JPEG, PNG<br>- <strong>Max Size:</strong> 2MB</p> |
| [modelVersion](#model) | `Integer`        | Model version used to recognize the faces. Default version is 1.                                                                                     |
| threshold              | `Float (0-1)`    | Threshold of the matched faces.                                                                                                                      |
| {% endtab %}           |                  |                                                                                                                                                      |

{% tab title="Example" %}

```
{
    "image": "<base64:image>"
}
```

{% endtab %}
{% endtabs %}

### **Response**

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

| Field        | Type          | Description                             |
| ------------ | ------------- | --------------------------------------- |
| similarity   | `Float (0-1)` | Similarity value between the two images |
| matched      | `Boolean`     | Matched                                 |
| {% endtab %} |               |                                         |

{% tab title="Example" %}

```
{
    "message": "face verification succeded",
    "data": {
        "id": "8f9efedc-d5bf-11eb-9953-5517feb46cc4",
        "similarity": 0.7396538793680758,
        "matched": true
    }
}
```

{% endtab %}
{% endtabs %}

### **Errors**

{% hint style="info" %}
Please read this [page \<Responses & Errors>](/responses-and-errors) to know more about response.
{% endhint %}

**Error 4XX**

{% tabs %}
{% tab title="Error Type" %}

<table><thead><tr><th width="266">Error Type</th><th width="352.3333333333333">Description</th><th>Is charged?</th></tr></thead><tbody><tr><td>invalid_base64_encoding</td><td>Invalid base64 encoding.</td><td><strong>false</strong></td></tr><tr><td>no_face_detected</td><td>No face was detected from one of the images or both images.</td><td><strong>true</strong></td></tr></tbody></table>
{% endtab %}

{% tab title="Structure" %}

```
{
   "errors":{
      "errorId": <log_id:uuid>,
      "errorType": <error_type:str>
   },
   "message": <message:str>
}
```

{% endtab %}
{% endtabs %}

**Error 5XX**

**F**or every 5XX http code response, there will be no charge.


# Billing

## Endpoints

* [Get credit amount](/api-references/billing/credit)


# Credit

Get total available billing credits.

## Endpoint

| Method | URL                                 |
| ------ | ----------------------------------- |
| GET    | `$synapses`**`/v1/billing/credit`** |

### Headers

| Header          | Value                                        |
| --------------- | -------------------------------------------- |
| `Authorization` | `Bearer` [`YOUR_API_KEY`](/authentication-1) |

### **Response**

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

| Field        | Type        | Description             |
| ------------ | ----------- | ----------------------- |
| amount       | `Integer`   | Total available credits |
| updatedAt    | `Timestamp` | Last update             |
| {% endtab %} |             |                         |

{% tab title="Example" %}

```
{
    "message": "Billing Status",
    "data": {
        "amount": 965526063,
        "updatedAt": 1627531044
    }
}
```

{% endtab %}
{% endtabs %}


