# Welcome

Welcome to Progeny's knowledge base. &#x20;

In [Our solution](/our-solution), you will find information about Progeny's service offering.

In [Use Cases](/use-cases), we provide details of some typical use cases for Progeny's service offering. &#x20;

In [API reference](/our-api), we provide details of our API endpoints.

We've also provided the answers to some [frequently asked questions](/frequently-asked-questions) for readers looking to expand their knowledge in the biometric identity space.

Finally, feel free to reach out to us to discuss how your business can benefit from working with Progeny by [sending us an email](mailto:hello@progeny.tech). You can find more information about our services, use cases, customer testimonials, and much more at <https://progeny.tech/>.


# Our solution

Face-driven biometric authentication

## Overview

Progeny delivers advanced *face Id* technology that helps protect your data assets and acts as the second layer in Strong Customer Authentication (SCA).&#x20;

Our solution provides an intuitive and ultra-secure authentication process enabled by a state-of-the-art facial recognition system with advanced technologies for passive liveness detection.

The key to preventing biometric spoofing is our liveness check—this ensures that the person in the image is alive and captured in realistic settings and lighting, as opposed to a fake representation.  A simple glance at the camera is sufficient for authentication.&#x20;

## API first

Our API strategy ensures businesses looking to work with Progeny can integrate with us quickly and smoothly, without service disruption and having to deal with the complexities inherent in other solutions, such as SDKs. &#x20;

The service is made available as a RESTful API. It's frictionless to use, available for web and mobile integrations, runs on any device with a camera, is highly secure, and fully compliant with GDPR.

## Advanced technologies

We use a combination of facial identification technologies—amongst them a unique, PCT patent-pending method, for passive liveness detection. Through these technologies, we are well positioned to work with businesses, across a variety of sectors, to prevent fraud and ensure the integrity of facial biometrics as a means of authentication.

## Basic process

![The basic authentication process](https://3976359161-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LsMxtbkxGNgXBnIx_up%2F-LsY-1xOUsjaO3uUIstG%2F-LsY21Z1Lj6iKFb_RizI%2FScreen%20Shot%202019-10-31%20at%2019.20.09.png?alt=media\&token=889307ae-6313-4e6b-acb6-75e8eb187ce8)

{% hint style="info" %}
Not depicted in this illustration is liveness detection, which ensures the person is a real, live human being looking at the camera.
{% endhint %}

## Security safeguards

Progeny only stores a universally unique identifier (UUID) and the associated facial fingerprin&#x74;**—**&#x61; mathematical representation of a face in binary form. The UUID provides a secure means for account retrieval.  The fingerprint is encrypted and protected with a key only available to Progeny. &#x20;

No images, such as profile photos are stored.  Facial fingerprints can be deleted at any time in accordance with GDPR.

Rebuilding a face from the binary form is close to impossible, even in the event of a breach or loss of the key.  We match against reflections, distortions, shearlets, etc. in an end-user's face, using sophisticated anti-spoofing neural networks.

## Strong Customer Authentication

Strong Customer Authentication (SCA) is an EU-wide measure to combat fraud in (online) payments. It obliges companies to implement even stricter authentication procedures in their payment processes, requiring a two-factor authentication using two of the following security components:

![The three components of SCA](https://3976359161-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LsMxtbkxGNgXBnIx_up%2F-LsYacQ_XrbMnQ53mOnl%2F-LsYaiT3OpHdWAIOjnOg%2FSCA.png?alt=media\&token=36c06400-f3ea-4422-a4ef-1e2cc43fca07)

Each of these components must be independent of each other so that the security of the others is not compromised in the event of a security breach. Our face-driven biometric authentication solution, in combination with a PIN code, can be used as SCA measure in payments.


# Use cases

Some typical use cases for Progeny's service offering

## Two-factor authentication

Confirm a user's claimed identity independent of a user's device or add a second security layer to payment authorization.

#### Use cases

* **Login** - seamless, secure login across any device with a simple glance at a camera
* **Payments -** Authorize payments by looking at any device's camera

#### Benefits

* Strengthens authentication and reduces fraud
* Reduces friction in the user experience
* Platform agnostic
* Available on both web and mobile platforms, platform agnostic

## Anti-spoofing

Prevent spoofing attacks via facial liveness detection to confirm that a biometric is of a live, real person.

#### Use cases

* **Remote customer onboarding** - biometric matching of a photo on government-issued Id with selfie&#x20;
* **Verified user accounts** **-** verify whether a person is the holder/user of a specific account
* **Scam** - prevent account access/takeover or fund transfers in case of phishing attacks and other scams
* **Abuse** - prevent the handover of an account to another person(s) operating under the same account or the use of multiple accounts by the same person
* **Captcha** - make sure it's a real person interacting with a website

#### Benefits

* Reduces fraud and abuse
* Improves security and accurate biometric matching
* Alerts fraudsters that they are being checked

## Remote identity verification

Validate the identity of a person through facial liveness to combat fraud in the usage of services.

#### Use cases

* **Know Your Customer** (KYC) - onboarding using biometric matching (see above)
* **Remote service delivery** - verify whether a person claiming to be the service deliverer is a person assigned to the task
* **Remote access management** - verify whether a person requesting remote access to a data asset is the employee working from home / remote location

#### Benefits

* Decreases the costs of identity verification
* Speeds up onboarding and identity verification processes
* Combats fraud in remote onboarding, service delivery, and access management

## Physical access authentication

Manage (restricted) access to a facility or area based on a range of parameters.

#### Use cases

* **Building access control** - control access throughout an entire facility, single, or multiple areas to authenticated users only
* **Age verification** - prevent access to specific areas for people under a specified age
* **Females/males only** - provide access to areas reserved for a specific gender only
* **Ticketing** - make sure the identity of the person who bought the ticket matches the ticket holder and provide for faster check-in

#### Benefits

* Increases the security of physical access, without adding layers to the authentication process
* Delivers fast, touch-free, and secure verification
* Provides entry to authenticated users only

## Identity verification and binding

Binding the vetted claimed identity to the individual through biometrics.

#### Use cases

* **Account takeover** - prevent access or takeover of an account (see above)
* **Account recovery** - maintain the integrity of a user's account by adding the user's face as a recovery option
* **Booking & check-in** - tie verified identity to booking for ultra-fast check-in at a separate 'fast track' terminal/kiosk without the need for an Id check
* **Account re-verification** - prevent fraud following the initial remote onboarding by re-verifying customers in the background

#### Benefits

* Protects against account takeover through phishing and other credential-based attacks
* Allows for simple account recovery
* Enables significantly faster check-in
* Customer can be re-verified at any moment, even in the background

## User-rights control

Manage access control and permission management for data in critical business areas or at point of service.

#### Use cases

* **Role-based access control** - restrict access to systems and data
* **Audits and ratings** - provide access to specific confidential information as part of a quantified assessment
* **Security check** - prevent hacking when moving funds between hot and cold wallets
* **Access to patient information** - where access is required for urgent care at point of service

#### Benefits

* Improves the security of access control and permission management processes
* Ensures seamless and frictionless process
* Reduces the risk of hacking

## Payment

Use the secure biometric identity of a person to authorize transactions (online and in-store) and to combat fraud.

#### Use cases

* **Authorization** - enables the authorization of payments on web, mobile, and in-store with a simple glance and by entering bank details only once
* **Strong Customer Authentication** (SCA) - adds a second security layer to payments

#### Benefits

* Provides a frictionless and fast payment process
* Reduces the risk of chargebacks
* Offers a highly secure second layer for SCA

## Continuous authentication

Adopt biometric facial security as authentication for chatbots, virtual assistants, mobility services, and real-time chat interfaces

#### Use cases

* **Customer service** - use mobile-friendly authentication to retrieve a customer's account information and perform transactions directly in conversational interfaces
* **Perform active and passive authentication** - use a device camera for one-off authentication or use the same device to provide continuous authentication in the background with or without user interaction

#### Benefits

* Not required to force customers to switch channels
* Frictionless and highly secure, with the ability to run in the background to monitor an entire session, journey, etc
* No passwords required

## Call centre fraud

Prevent bad actors from beating knowledge-based authentication (KBA) when pretending to be someone they aren't.

#### Use cases

* **Customer support** - prevent account take-over attacks when someone calls pretending to be a valid customer

#### Benefits:

* Enables highly accurate caller authentication
* Strengthens security and reduces fraud costs
* Reduces agent time spent on KBA


# API reference

## Overview

This Progeny RESTful API `https://be.progeny.tech/api/v3/`uses the HTTP POST and GET methods to create and update resources in our database. &#x20;

Our API endpoint enables you to perform several common tasks in the biometric and document authentication processes, including:

* **Registering image of a face** - register a user's face in our database and return a token.&#x20;
* **Authenticate images against a registered token/uuid** - after a successful liveness check, uses token returned from register api to to determine if upload image matches the image associated with that id or not.
* **Comparing and matching additional images against a reference facial fingerprint** -  ensure not only liveness but also biometric likeness
* **Liveness check** - perform a standalone liveness check, including age verification
* **Know Your Customer** - send a scanned image of an ID or password and return a JSON object containing the extracted text


# Overview

Learn how to use our endpoint to perform several common tasks in the biometric and document verification processes

The Progeny RESTful API `https://be.progeny.tech/api/v3`uses the HTTP POST and GET methods to create and update resources in our database.

{% hint style="warning" %}
The request body must be encoded as multipart/form-data.
{% endhint %}

{% hint style="info" %}
All API methods return JSON response.
{% endhint %}

## Making API calls and getting a response

To get a response from each of our endpoints you will first need to make a POST request to obtain a task Id.  You then pass in the Id when forming your GET request to get a response.

We'll look at an example using the /liveness endpoint.

## Get a task Id

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/services/face_liveness/`

#### Request Body

| Name                                    | Type    | Description                                                                   |
| --------------------------------------- | ------- | ----------------------------------------------------------------------------- |
| image<mark style="color:red;">\*</mark> | String  | The file path to an image of the user's face in PNG, JPEG, or JPG file format |
| extend\_data                            | Boolean | Set to true to retrieve extended data in the liveness response                |

{% tabs %}
{% tab title="200: OK A task Id" %}

```javascript
{
    "id": "98008e56-cd6f-410c-9d8d-f9e620661395"
}
```

{% endtab %}
{% endtabs %}

The next step is to pass in that Id into your GET request.

## Perform a liveness check

<mark style="color:blue;">`GET`</mark> `https://be.progeny.tech/api/v3/services/task/?id={{task_id}}`

#### Path Parameters

| Name                                 | Type   | Description                                |
| ------------------------------------ | ------ | ------------------------------------------ |
| id<mark style="color:red;">\*</mark> | String | The Id you obtained from your POST request |

{% tabs %}
{% tab title="200: OK The result of the liveness check" %}

```javascript
{
    "id": 2158,
    "status": "SUCCESS",
    "result": {
        "data": {
            "liveness": {
                "data": {
                    "error": "Failed to detect face",
                    "error_code": "FACE_NOT_FOUND"
                },
                "result": false
            },
            "issues": {
                "liveness": {
                    "FACE_NOT_FOUND": "Failed to detect face"
                }
            }
        },
        "status": 200
    }
}
```

{% endtab %}
{% endtabs %}

## A quick word about images

Please be aware that our algorithm requires the submitted picture to simulate real-life scenarios.  When testing but also in providing guidance to your end-users, please bear in mind the following points:

* Images should be taken with a device under real-life lightning conditions and without filters
* Avoid using artificially generated selfies, filtered, or enhanced images
* Similarly, avoid using images where the subject is wearing sunglasses, has long or bushy facial hair that sticks out a lot in front of the face, or has a significantly distorted face
* Images taken under bad light conditions, with high motion blur, or excessive light will not provide the most accurate results<br>

Furthermore, images included in each API request must conform to the following requirements:

* PNG, JPEG, or JPG file format and as uncompressed as possible.  Do not go below 70%
* Between 480x480 and 4096x4096 pixels.  **For the best results, we recommend a maximum height of 1080px**
* No larger than 2MB
* Face size should be no lower than 224 pixels
* The minimum resolution between the subject's eyes should be no lower than 85 pixels
* Orientation:
  * Face pitch (equivalent to looking up and down) should be between -25 to 25 degrees
  * Yaw angle (equivalent to looking left and right) should be between -25 to 25 degrees
  * Face roll angle (equivalent to tilting left and right) from -35 to 35 degrees

## Endpoints - Quick View

| Endpoint                      | Description                                                                                                                                                                                                                                                                                                            |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| /accounts/token/obtain        | authenticate and obtain an access token                                                                                                                                                                                                                                                                                |
| /accounts/token/refresh       | <p>Can be used to obtain new token without the need to send username/password again <br><br>See: <a href="https://www.oauth.com/oauth2-servers/making-authenticated-requests/refreshing-an-access-token/"><https://www.oauth.com/oauth2-servers/making-authenticated-requests/refreshing-an-access-token/></a>    </p> |
| /services/register\_face/     | Register an image of a person's face with selected provider to be used later for Authentication                                                                                                                                                                                                                        |
| /services/authenticate\_face/ | Given an image of a person's face and an ID (provided by register\_face API), it determine whether the registered face match the provided image or not                                                                                                                                                                 |
| /services/liveness/           | Perform a standalone liveness check against an image                                                                                                                                                                                                                                                                   |
| /services/ocr\_card/          | Detect and extract text from a card (ID, Driver License, ..)                                                                                                                                                                                                                                                           |
| /services/ocr\_passport/      | Same as ocr\_card but for reading passports                                                                                                                                                                                                                                                                            |
| /services/kyc\_card/          | A combination ocr\_card, liveness APIs plus comparing ID/Drive License picture against the one provided in the request                                                                                                                                                                                                 |
| /services/kyc\_passport       | Same as kyc\_card but for passports                                                                                                                                                                                                                                                                                    |


# /token/obtain

Authenticate and obtain an access token

#### Endpoint

```http
https://be.progeny.tech/api/v3/accounts/token/obtain/
```

#### Purpose

Allows you to exchange the username and password provided by Progeny, for an access token and refresh token.

To access API endpoints that require authentication, you should include the access token in the header of all requests.&#x20;

#### Sample request and response

## Exchange username and password for a token

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/accounts/token/obtain/`

#### Request Body

| Name                                       | Type   | Description                      |
| ------------------------------------------ | ------ | -------------------------------- |
| username<mark style="color:red;">\*</mark> | String | The username provided by Progeny |
| password<mark style="color:red;">\*</mark> | String | The password provided by Progeny |

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

```javascript
{
    "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY0OTg3MzI0NywianRpIjoiN2YxZjBjNWFhNWNmNGY1NTg5ZWQ0NGMzYWRjZjRmZmEiLCJ1c2VyX2lkIjo0MX0.7sN29T5abguGOGR3dmwxNfVJZcMxE9qDSxFcYXIKYEc",
    "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjQ4NjYzOTQ3LCJqdGkiOiJhMjg3MmQ4ZmIzY2Y0NTVkYWE3ZmRiMWVmZmZjM2UzZSIsInVzZXJfaWQiOjQxfQ.L4GXorALzmFOuu-NnyumEY7SbQum4kCdAQJ3QolGbqc"
}
```

{% endtab %}

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

```javascript
{
    "detail": "No active account found with the given credentials"
}
```

{% endtab %}

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

```javascript
{
    "password": [
        "This field is required."
    ]
}
```

{% endtab %}
{% endtabs %}

The "access" token used to make API calls is only valid for five minutes.  To obtain a new access token without having to re-enter username/password, use the  /refresh endpoint.

## Get a new access token

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/accounts/token/refresh/`

#### Request Body

| Name                                      | Type   | Description                    |
| ----------------------------------------- | ------ | ------------------------------ |
| refresh<mark style="color:red;">\*</mark> | String | The refresh value from /obtain |

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

```javascript
{
    "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjQ4NjY0NTQzLCJqdGkiOiI3YjkwYTgwMWU2ZGI0OTY4YTJmYTc3NmI1NmUzNDJkMCIsInVzZXJfaWQiOjQxfQ.-FPwOlMLX4WqGsJmmeY74F9R7EldudpvNnxO65hyeTw",
    "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY0OTg3Mzg0MywianRpIjoiZGY2YTdhNmViMTlkNGE5YWE1ZTg1NTAwZWMwMDYyNGMiLCJ1c2VyX2lkIjo0MX0.FKJnVtXGyWu5_5s4TAHOuoF0iW8TmDe-Chcnt4XcWq0"
}
```

{% endtab %}

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

```javascript
{
    "detail": "Token is invalid or expired",
    "code": "token_not_valid"
}
```

{% endtab %}
{% endtabs %}


# /register\_face

Create a new user in our database

#### Endpoint

```http
https://be.progeny.tech/api/v3/services/register_face/
```

#### Purpose

Allows you to connect to the Liveness service, using the provider configured in the **Progeny Console**, to register a face image in database.

If the image passes the liveness check, the result is a UUID.

If the image does not contain a face, only contains a partial face, or if the quality of the image is too low, we will return  an error code, for example `FACE_TOO_SMALL` . See our image requirements above for more information.

{% hint style="info" %}
Please refer to the section on [images](/our-api/overview#a-quick-word-about-images) for guidance before posting.  For the best results, we recommend a maximum height of 1080px.
{% endhint %}

#### Sample request and response

## Get a task Id

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/services/register_face`

#### Request Body

| Name                                    | Type    | Description                                                                                       |
| --------------------------------------- | ------- | ------------------------------------------------------------------------------------------------- |
| image<mark style="color:red;">\*</mark> | String  | The file path to an image of the user's face in PNG, JPEG, or JPG file format                     |
| extend\_data                            | Boolean | Set to true to retrieve the original response from the 3rd-party provider of the Liveness service |

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

```javascript
{
    "id": "58bf8a18-b10b-409d-91d6-fdd358408dff"
}
```

{% endtab %}

{% tab title="400: Bad Request Image is missing or not in the correct format" %}

```javascript
    "image": [
        "The submitted data was not a file. Check the encoding type on the form."
    ]
}
```

{% endtab %}
{% endtabs %}

## Get UUID

<mark style="color:blue;">`GET`</mark> `https://be.progeny.tech/api/v3/services/task/?id={{task_id}}`

#### Path Parameters

| Name                                 | Type   | Description                                     |
| ------------------------------------ | ------ | ----------------------------------------------- |
| id<mark style="color:red;">\*</mark> | String | The task Id you obtained from your POST request |

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

```javascript
{
    "id": 2170,
    "status": "SUCCESS",
    "result": {
        "status": 200,
        "data": {
            "uuid": "d3da2b7a-b062-11ec-b3b9-0242ac190002"
        }
    }
}
```

{% endtab %}

{% tab title="400: Bad Request Image does not meet requirements" %}

```javascript
{
    "id": 2165,
    "status": "SUCCESS",
    "result": {
        "data": {
            "liveness": {
                "result": false,
                "error": "Interpupillary distance is too small",
                "error_code": "FACE_TOO_SMALL"
            }
        },
        "status": 400,
        "issues": {
            "FACE_TOO_SMALL": "Interpupillary distance is too small"
        }
    }
}
```

{% endtab %}
{% endtabs %}

##


# /authenticate\_face

Authorize an additional image against a user already registered in our database

#### Endpoint

```http
https://be.progeny.tech/api/v3/services/authenticate_face/
```

#### Purpose

Allows you to connect to the Liveness and Face Compare services, using the providers configured in the **Progeny Console**, to authenticate an image of a person's face against the UUID of an already registered image in our database, performing both a liveness and likeness check. &#x20;

Connecting to both services means we can determine whether the image is of a live human being and additionally that the image represents a likeness of the person already registered.

{% hint style="info" %}
Please refer to the section on [images](/our-api/overview#a-quick-word-about-images) for guidance before posting.  For the best results, we recommend a maximum height of 1080px.
{% endhint %}

#### Sample request and response

## Get a task Id

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/services/authenticate_face/`

#### Request Body

| Name                                    | Type   | Description                                                                                                                                              |
| --------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| image<mark style="color:red;">\*</mark> | String | The file path to an image of the user's face in PNG, JPEG, or JPG file format                                                                            |
| uuid<mark style="color:red;">\*</mark>  | String | The universally unique identifier of the registered user you want to authorize the image against.  See /[register\_face](/our-api/register_face#purpose) |
| extend\_data                            | String | Set to true to retrieve the original response from the 3rd-party providers of Liveness and Face Compare services                                         |

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

```javascript
{
    "image": [
        "The submitted data was not a file. Check the encoding type on the form."
    ],
    "uuid": [
        "This field is required."
    ]
}
```

{% endtab %}

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

```javascript
{
    "id": "d48eac86-228e-4933-a01d-279886a9c6b5"
}
```

{% endtab %}
{% endtabs %}

## Authorize an additional image

<mark style="color:blue;">`GET`</mark> `https://be.progeny.tech/api/v3/services/task/?id={{task_id}}`&#x20;

#### Path Parameters

| Name                                 | Type   | Description                                     |
| ------------------------------------ | ------ | ----------------------------------------------- |
| id<mark style="color:red;">\*</mark> | String | The task Id you obtained from your POST request |

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

```javascript
{
    "id": 2172,
    "status": "SUCCESS",
    "result": {
        "status": 200,
        "data": {
            "authentication": {
                "result": true,
                "data": {
                    "matchScore": "20.0",
                    "scorePercent": "100.0"
                }
            },
            "liveness": {
                "data": {
                    "score": 2.5943651,
                    "quality": 0.8175214,
                    "probability": 0.930498
                },
                "result": true
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

##


# /face\_liveness

Perform a standalone liveness check against an image

#### Endpoint

```http
https://be.progeny.tech/api/v3/services/face_liveness/
```

#### Purpose

Allows you to connect to the Liveness service, using the provider configured in the **Progeny Console**, to perform a standalone liveness check against an image.  If the `image` parameter is missing from the request, we will return `Bad POST`.

{% hint style="info" %}
Please refer to the section on [images](/our-api/overview#a-quick-word-about-images) for guidance before posting.  For the best results, we recommend a maximum height of 1080px.
{% endhint %}

#### Sample request and response

## Get a task Id

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/services/face_liveness/`

#### Request Body

| Name                                    | Type    | Description                                                                                       |
| --------------------------------------- | ------- | ------------------------------------------------------------------------------------------------- |
| image<mark style="color:red;">\*</mark> | String  | The file path to an image of the user's face in PNG, JPEG, or JPG file format                     |
| extend\_data                            | Boolean | Set to true to retrieve the original response from the 3rd-party provider of the Liveness service |

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

```javascript
{
    "id": "f22a63b1-7d05-4bf1-9633-a623a2799c22"
}
```

{% endtab %}

{% tab title="400: Bad Request Image is missing or not in the correct format" %}

```javascript
{
    "image": [
        "No file was submitted."
    ]
}
```

{% endtab %}
{% endtabs %}

## Perform a standalone liveness check

<mark style="color:blue;">`GET`</mark> `https://be.progeny.tech/api/v3/services/task/?id={{task_id}}`

#### Path Parameters

| Name                                 | Type   | Description                                     |
| ------------------------------------ | ------ | ----------------------------------------------- |
| id<mark style="color:red;">\*</mark> | String | The task Id you obtained from your POST request |

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

```javascript
{
    "id": 2182,
    "status": "SUCCESS",
    "result": {
        "data": {
            "liveness": {
                "data": {
                    "score": 2.5943651,
                    "quality": 0.8175214,
                    "probability": 0.930498
                },
                "result": true
            }
        },
        "status": 200
    }
}
```

{% endtab %}

{% tab title="400: Bad Request Image does not meet requirements" %}

```javascript
{
    "id": 2183,
    "status": "SUCCESS",
    "result": {
        "data": {
            "liveness": {
                "result": false,
                "error": "Absolute face size is too small",
                "error_code": "FACE_TOO_SMALL"
            },
            "issues": {
                "liveness": {
                    "FACE_TOO_SMALL": "Absolute face size is too small"
                }
            }
        },
        "status": 400
    }
}
```

{% endtab %}
{% endtabs %}


# /ocr\_card

#### Endpoint

```http
https://be.progeny.tech/api/v3/services/ocr_card/
```

#### Purpose

Allows you to connect to the OCR\_Card service, using the provider configured in the **Progeny Console**, to extract an image from a driving license or ID.

{% hint style="info" %}
Please refer to the section on [images](/our-api/overview#a-quick-word-about-images) for guidance before posting.  For the best results, we recommend a maximum height of 1080px.
{% endhint %}

#### Sample request and response

## Get task Id

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/services/ocr_card/`

#### Request Body

| Name                                        | Type   | Description                                                                                        |
| ------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------- |
| front\_id<mark style="color:red;">\*</mark> | String | Scanned Image of user's ID (front) in PNG, JPEG or JPG file format                                 |
| back\_id<mark style="color:red;">\*</mark>  | String | Scanned Image of user's ID (back)  in PNG, JPEG, or JPG file format                                |
| extend\_data                                | String | Set to true to retrieve the original response from the 3rd-party provider of the OCR\_Card service |

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

```javascript
{
    "id": "08bcb59c-c01c-42b9-b666-44df639cff78"
}
```

{% endtab %}

{% tab title="400: Bad Request Image is missing or not in the correct format" %}

```javascript
{
    "selfie_image": [
        "No file was submitted."
    ],
    "front_id": [
        "No file was submitted."
    ],
    "back_id": [
        "No file was submitted."
    ],
    "extend_data": [
        "This field is required."
    ]
}
```

{% endtab %}
{% endtabs %}

## Extract an image from a driving license or ID

<mark style="color:blue;">`GET`</mark> `https://be.progeny.tech/api/v3/services/task/?id={{task_id}}`

#### Path Parameters

| Name | Type   | Description                                     |
| ---- | ------ | ----------------------------------------------- |
| id   | String | The task Id you obtained from your POST request |

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

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

{% endtab %}

{% tab title="400: Bad Request Image does not meet requirements" %}

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

{% endtab %}
{% endtabs %}


# /ocr\_passport

#### Endpoint

```http
https://be.progeny.tech/api/v3/services/ocr_passport/
```

#### Purpose

Allows you to connect to the OCR\_Card service, using the provider configured in the **Progeny Console**, to extract an image from a passport.

{% hint style="info" %}
Please refer to the section on [images](/our-api/overview#a-quick-word-about-images) for guidance before posting.  For the best results, we recommend a maximum height of 1080px.
{% endhint %}

#### Sample request and response

## Get a task Id

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/services/ocr_passport/`

#### Request Body

| Name                                              | Type   | Description                                                                                        |
| ------------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------- |
| passport\_image<mark style="color:red;">\*</mark> | String | The file path to an image of the passport page in PNG, JPEG, or JPG file format                    |
| extend\_data                                      | String | Set to true to retrieve the original response from the 3rd-party provider of the OCR\_Card service |

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

```javascript
{
    "id": "efe46711-b1d8-43f1-9d02-7a54c43b79a2"
}
```

{% endtab %}

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

```javascript
{
    "selfie_image": [
        "No file was submitted."
    ],
    "passport_image": [
        "No file was submitted."
    ],
    "extend_data": [
        "This field is required."
    ]
}
```

{% endtab %}
{% endtabs %}

## Extract an image from a passport

<mark style="color:blue;">`GET`</mark> `https://be.progeny.tech/api/v3/services/task/?id={{task_id}}`&#x20;

#### Path Parameters

| Name                                 | Type   | Description                                     |
| ------------------------------------ | ------ | ----------------------------------------------- |
| id<mark style="color:red;">\*</mark> | String | The task Id you obtained from your POST request |

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

```javascript
{
    "id": 2188,
    "status": "SUCCESS",
    "result": {
        "status": 200,
        "data": {
            "document": {
                "is_valid": true,
                "is_expired": false,
                "dateOfBirth": "1991-9-24",
                "age": 30,
                "firstName": "VALERIA",
                "lastName": "PERFILOVA",
                "dateOfIssue": "None-None-None",
                "dateOfExpiry": "2023-9-25",
                "documentNumber": "XX008080",
                "sex": "F",
                "nationality": "UKRAINIAN",
                "portrait": "images/services/ocr_passport/9456633680.jpg",
                "portrait_url": "https://dev.progeny.tech/media/images/services/ocr_passport/9456633680.jpg"
            },
            "compare": true,
            "liveness": true
        }
    }
}
```

{% endtab %}
{% endtabs %}


# /kyc\_card

Compare an image extracted from a ID to a selfie image

#### Endpoint

```http
https://be.progeny.tech/api/v3/services/kyc_card/
```

#### Purpose

Allows you to connect to the Liveness, Face Compare, and OCR\_Card services, using the providers configured in the **Progeny Console**, to extract an image from a driving license or ID and compare it to a selfie image.

{% hint style="info" %}
Please refer to the section on [images](/our-api/overview#a-quick-word-about-images) for guidance before posting.  For the best results, we recommend a maximum height of 1080px.
{% endhint %}

#### Sample request and response

## Get task Id

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/services/kyc_card/`

#### Request Body

| Name                                            | Type   | Description                                                                                                                  |
| ----------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------- |
| selfie\_image<mark style="color:red;">\*</mark> | String | The file path to an image of the user's face in PNG, JPEG, or JPG file format                                                |
| front\_id<mark style="color:red;">\*</mark>     | String | Scanned Image of user's ID (front) in PNG, JPEG or JPG file format                                                           |
| back\_id<mark style="color:red;">\*</mark>      | String | Scanned Image of user's ID (back)  in PNG, JPEG, or JPG file format                                                          |
| extend\_data                                    | String | Set to true to retrieve the original response from the 3rd-party providers of Liveness, Face Compare, and OCR\_Card services |

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

```javascript
{
    "id": "08bcb59c-c01c-42b9-b666-44df639cff78"
}
```

{% endtab %}

{% tab title="400: Bad Request Image is missing or not in the correct format" %}

```javascript
{
    "selfie_image": [
        "No file was submitted."
    ],
    "front_id": [
        "No file was submitted."
    ],
    "back_id": [
        "No file was submitted."
    ],
    "extend_data": [
        "This field is required."
    ]
}
```

{% endtab %}
{% endtabs %}

## Extract an image from a driving license or ID and compare it to a selfie image

<mark style="color:blue;">`GET`</mark> `https://be.progeny.tech/api/v3/services/task/?id={{task_id}}`

#### Path Parameters

| Name | Type   | Description                                     |
| ---- | ------ | ----------------------------------------------- |
| id   | String | The task Id you obtained from your POST request |

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

```javascript
{
    "document": {
        "is_valid": true,
        "is_expired": false,
        "full_name": "ERIKA MUSTERMANN",
        "date_of_birth": "1983-08-12",
        "card_number": "L01XM00CH",
        "country": "Germany",
        "gender": "",
        "marital_status": "",
        "occupation": "",
        "religion": "",
        "portrait": "images/services/ocr_card/1795633768.jpg",
        "portrait_url": "https://be.progeny.tech/media/images/services/ocr_card/1795633768.jpg"
    },
    "compare": true,
    "liveness": true
}
```

{% endtab %}

{% tab title="400: Bad Request Image does not meet requirements" %}

```javascript
{
    "selfie_image": [
        "No file was submitted."
    ],
    "front_id": [
        "No file was submitted."
    ],
    "back_id": [
        "No file was submitted."
    ],
    "extend_data": [
        "This field is required."
    ]
}
```

{% endtab %}
{% endtabs %}


# /kyc\_passport

Compare an image extracted from a passport to a selfie image

#### Endpoint

```http
https://be.progeny.tech/api/v3/services/kyc_passport/
```

#### Purpose

Allows you to connect to the Liveness, Face Compare, and OCR\_Card services, using the providers configured in the **Progeny Console**, to extract an image from a passport and compare it against a selfie image.

{% hint style="info" %}
Please refer to the section on [images](/our-api/overview#a-quick-word-about-images) for guidance before posting.  For the best results, we recommend a maximum height of 1080px.
{% endhint %}

#### Sample request and response

## Get a task Id

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/services/kyc_passport/`

#### Request Body

| Name                                              | Type   | Description                                                                                                                  |
| ------------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------- |
| selfie\_image<mark style="color:red;">\*</mark>   | String | The file path to an image of the user's face in PNG, JPEG, or JPG file format                                                |
| passport\_image<mark style="color:red;">\*</mark> | String | The file page to an image of the passport page in PNG, JPEG, or JPG file format                                              |
| extend\_data                                      | String | Set to true to retrieve the original response from the 3rd-party providers of Liveness, Face Compare, and OCR\_Card services |

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

```javascript
{
    "id": "efe46711-b1d8-43f1-9d02-7a54c43b79a2"
}
```

{% endtab %}

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

```javascript
{
    "selfie_image": [
        "No file was submitted."
    ],
    "passport_image": [
        "No file was submitted."
    ],
    "extend_data": [
        "This field is required."
    ]
}
```

{% endtab %}
{% endtabs %}

## Extract an image from a passport and compare it to a selfie image

<mark style="color:blue;">`GET`</mark> `https://be.progeny.tech/api/v3/services/task/?id={{task_id}}`&#x20;

#### Path Parameters

| Name                                 | Type   | Description                                     |
| ------------------------------------ | ------ | ----------------------------------------------- |
| id<mark style="color:red;">\*</mark> | String | The task Id you obtained from your POST request |

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

```javascript
{
    "id": 2188,
    "status": "SUCCESS",
    "result": {
        "status": 200,
        "data": {
            "document": {
                "is_valid": true,
                "is_expired": false,
                "dateOfBirth": "1991-9-24",
                "age": 30,
                "firstName": "VALERIA",
                "lastName": "PERFILOVA",
                "dateOfIssue": "None-None-None",
                "dateOfExpiry": "2023-9-25",
                "documentNumber": "XX008080",
                "sex": "F",
                "nationality": "UKRAINIAN",
                "portrait": "images/services/ocr_passport/9456633680.jpg",
                "portrait_url": "https://dev.progeny.tech/media/images/services/ocr_passport/9456633680.jpg"
            },
            "compare": true,
            "liveness": true
        }
    }
}
```

{% endtab %}
{% endtabs %}


# /background\_check

Compare an image extracted from a passport to a selfie image

#### Endpoint

```http
https://be.progeny.tech/api/v3/services/background_check/
```

#### Purpose

Allows you to perform a background check for Anti Money Laundering (AML).

#### Sample request and response

## Get a task Id

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/services/background_check/`

#### Request Body

| Name                                          | Type   | Description                                      |
| --------------------------------------------- | ------ | ------------------------------------------------ |
| fullname<mark style="color:red;">\*</mark>    | String | The fullname as written in the official document |
| birth\_date<mark style="color:red;">\*</mark> | String | The date of birth in yyyy-mm-dd format           |

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

```javascript
{
    "id": "efe46711-b1d8-43f1-9d02-7a54c43b79a2"
}
```

{% endtab %}

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

```javascript
{
    "fullname": [
        "This field is required."
    ],
    "birth_date": [
        "This field is required."
    ]
}
```

{% endtab %}
{% endtabs %}

## Extract an data from the Background Check

<mark style="color:blue;">`GET`</mark> `https://be.progeny.tech/api/v3/services/task/?id={{task_id}}`&#x20;

#### Path Parameters

| Name                                 | Type   | Description                                     |
| ------------------------------------ | ------ | ----------------------------------------------- |
| id<mark style="color:red;">\*</mark> | String | The task Id you obtained from your POST request |

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

```javascript
{
    "background_check": {
        "potential_match": false,
        "risk_level": "unknown",
        "total_matches": 0,
        "hits": []
    }
}
```

{% endtab %}
{% endtabs %}


# /kyc\_card\_with\_background\_check

Compare an image extracted from a ID to a selfie image

#### Endpoint

```http
https://be.progeny.tech/api/v3/services/kyc_card_with_background_check/
```

#### Purpose

Allows you to connect to the Liveness, Face Compare, and OCR\_Card services, using the providers configured in the **Progeny Console**, to extract an image from a driving license or ID and compare it to a selfie image.

Additionally, a background check for Anti Money Laundering (AML) is performed.

{% hint style="info" %}
Please refer to the section on [images](/our-api/overview#a-quick-word-about-images) for guidance before posting.  For the best results, we recommend a maximum height of 1080px.
{% endhint %}

#### Sample request and response

## Get task Id

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/services/kyc_card/`

#### Request Body

| Name                                            | Type   | Description                                                                                                                  |
| ----------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------- |
| selfie\_image<mark style="color:red;">\*</mark> | String | The file path to an image of the user's face in PNG, JPEG, or JPG file format                                                |
| front\_id<mark style="color:red;">\*</mark>     | String | Scanned Image of user's ID (front) in PNG, JPEG or JPG file format                                                           |
| back\_id<mark style="color:red;">\*</mark>      | String | Scanned Image of user's ID (back)  in PNG, JPEG, or JPG file format                                                          |
| extend\_data                                    | String | Set to true to retrieve the original response from the 3rd-party providers of Liveness, Face Compare, and OCR\_Card services |

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

```javascript
{
    "id": "08bcb59c-c01c-42b9-b666-44df639cff78"
}
```

{% endtab %}

{% tab title="400: Bad Request Image is missing or not in the correct format" %}

```javascript
{
    "selfie_image": [
        "No file was submitted."
    ],
    "front_id": [
        "No file was submitted."
    ],
    "back_id": [
        "No file was submitted."
    ],
    "extend_data": [
        "This field is required."
    ]
}
```

{% endtab %}
{% endtabs %}

## Extract an image from a driving license or ID and compare it to a selfie image

<mark style="color:blue;">`GET`</mark> `https://be.progeny.tech/api/v3/services/task/?id={{task_id}}`

#### Path Parameters

| Name | Type   | Description                                     |
| ---- | ------ | ----------------------------------------------- |
| id   | String | The task Id you obtained from your POST request |

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

```javascript
{
    "document": {
        "is_valid": true,
        "is_expired": false,
        "full_name": "ERIKA MUSTERMANN",
        "date_of_birth": "1983-08-12",
        "card_number": "L01XM00CH",
        "country": "Germany",
        "gender": "",
        "marital_status": "",
        "occupation": "",
        "religion": "",
        "portrait": "images/services/ocr_card/271602820.jpg",
        "portrait_url": "https://be.progeny.tech/media/images/services/ocr_card/271602820.jpg"
    },
    "compare": true,
    "liveness": true,
    "criminal_background": false
}
```

{% endtab %}

{% tab title="400: Bad Request Image does not meet requirements" %}

```javascript
{
    "selfie_image": [
        "No file was submitted."
    ],
    "front_id": [
        "No file was submitted."
    ],
    "back_id": [
        "No file was submitted."
    ],
    "extend_data": [
        "This field is required."
    ]
}
```

{% endtab %}
{% endtabs %}


# /kyc\_passport\_with\_background\_check

Compare an image extracted from a passport to a selfie image

#### Endpoint

```http
https://be.progeny.tech/api/v3/services/kyc_passport_with_background_check/
```

#### Purpose

Allows you to connect to the Liveness, Face Compare, and OCR\_Card services, using the providers configured in the **Progeny Console**, to extract an image from a passport and compare it against a selfie image.

Additionally, a background check for Anti Money Laundering (AML) is performed.

{% hint style="info" %}
Please refer to the section on [images](/our-api/overview#a-quick-word-about-images) for guidance before posting.  For the best results, we recommend a maximum height of 1080px.
{% endhint %}

#### Sample request and response

## Get a task Id

<mark style="color:green;">`POST`</mark> `https://be.progeny.tech/api/v3/services/kyc_passport/`

#### Request Body

| Name                                              | Type   | Description                                                                                                                  |
| ------------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------- |
| selfie\_image<mark style="color:red;">\*</mark>   | String | The file path to an image of the user's face in PNG, JPEG, or JPG file format                                                |
| passport\_image<mark style="color:red;">\*</mark> | String | The file page to an image of the passport page in PNG, JPEG, or JPG file format                                              |
| extend\_data                                      | String | Set to true to retrieve the original response from the 3rd-party providers of Liveness, Face Compare, and OCR\_Card services |

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

```javascript
{
    "id": "efe46711-b1d8-43f1-9d02-7a54c43b79a2"
}
```

{% endtab %}

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

```javascript
{
    "selfie_image": [
        "No file was submitted."
    ],
    "passport_image": [
        "No file was submitted."
    ],
    "extend_data": [
        "This field is required."
    ]
}
```

{% endtab %}
{% endtabs %}

## Extract an image from a passport and compare it to a selfie image

<mark style="color:blue;">`GET`</mark> `https://be.progeny.tech/api/v3/services/task/?id={{task_id}}`&#x20;

#### Path Parameters

| Name                                 | Type   | Description                                     |
| ------------------------------------ | ------ | ----------------------------------------------- |
| id<mark style="color:red;">\*</mark> | String | The task Id you obtained from your POST request |

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

```javascript
{
    "id": 2188,
    "status": "SUCCESS",
    "result": {
        "status": 200,
        "data": {
            "document": {
                "is_valid": true,
                "is_expired": false,
                "dateOfBirth": "1991-9-24",
                "age": 30,
                "firstName": "VALERIA",
                "lastName": "PERFILOVA",
                "dateOfIssue": "None-None-None",
                "dateOfExpiry": "2023-9-25",
                "documentNumber": "XX008080",
                "sex": "F",
                "nationality": "UKRAINIAN",
                "portrait": "images/services/ocr_passport/9456633680.jpg",
                "portrait_url": "https://dev.progeny.tech/media/images/services/ocr_passport/9456633680.jpg"
            },
            "compare": true,
            "liveness": true,
            "criminal_background": false
        }
    }
}
```

{% endtab %}
{% endtabs %}


# Frequently asked questions

Get the answers to some commonly asked questions

## What is liveness detection?

Liveness detection is a method that identifies if an authentication attempt is by a real human being rather than via a photo, video, or spoofing attack.&#x20;

## What is the difference between active and passive liveness detection?

Active liveness detection refers to methods where the end-user is required to interact with the authentication process in some way.  Typically, this means the person looking to authenticate is required to perform an action, such as blinking, making facial movements, or keystroking. The advantage of active liveness detection lies in the fact that it can make it more difficult and time-consuming for someone to spoof the system.

Conversely, passive liveness detection methods are invisible to the end-user and require no interaction on the part of end-user.  Passive detection is often the preferred option where a frictionless authentication process is required.

## What is biometric authentication?

Biometric authentication is the use of a person’s unique human characteristics for verifying their identity.

## How does facial recognition work?

Facial recognition compares many characteristics of a person’s facial structure, not eye or skin color, against a previously stored model of that person’s facial structure to determine a match.  Facial recognition works because facial structure is significantly different for each person.

## What is facial liveness and how is it used?

Facial liveness, short for facial liveness detection, determines if a face presented to a facial recognition system is that of a live person or a high-resolution photo, cut out photo, 3D mask, or video.&#x20;

Typical liveness techniques include asking the person in front of the camera to blink, smile, move their head a certain way, or move the camera itself in some way, all resulting in time and complexity for detecting liveness.&#x20;

Further, there are known techniques for beating these active liveness methods. Passive facial liveness is the ability to determine liveness without the person’s participation.&#x20;

Facial liveness is a critical step in the process of accurately authenticating a person with facial recognition technology when the facial recognition system is operating without human supervision, such as authentication on a mobile phone.

## What is biometric spoofing?

Biometric spoofing is an attempt to gain access using falsified biometrics to appear as a real person. For example, a voice biometric spoofing attempt may use a recording of the target person’s voice. Or the spoofing attempt may use a computer to synthesize the person speaking a voice biometric passphrase.&#x20;

For facial recognition systems, the spoofing attempt may be a photograph, cut out photo, video screen, or a moving video. Spoofing attempts like these are best combated with voice liveness and passive facial liveness detection technology.


