Liveness Secure
Introduction
Liveness Secure is an AI-powered liveness detection solution that simplifies verification without requiring any specific action or input from the user. It ensures the user in front of the camera is live, combating identity fraud, a prevalent issue today effectively.

Key features
- Seamless Process: Users simply grant camera access, align their face and it's done.
- We automatically perform liveness checks without manual selfie clicking.
- Swift Verification: The entire process takes less than 15 seconds.
- Modern UI/UX: Our product offers a modern interface and user experience, accommodating various scenarios like multiple faces, absence of a person in the frame, proximity to or distance from the camera, keeping us competitive in the market.
- High Accuracy: Liveness Secure boasts an accuracy rate of more than 95%.
- Face match capability: we provide image as an optional parameter to perform face match if required, improving fraud detection.
- Minimal User Intervention: With minimal user interaction, our product offers the least friction in liveness detection, requiring users to do virtually nothing, thus ensuring a smooth user experience.
- We support multiple global languages
Benefits
- Fraud Prevention: By visually confirming customers identities, institutions can prevent fraud effectively.
- Seamless Onboarding: Liveness Secure provides a seamless onboarding experience for users.
- Regulatory Compliance: Our product helps institutions meet regulatory requirements with ease.
- Seamless integration with just one API call
Customization
- Accent Color: Configure a single color to apply throughout the interface for consistent branding
- Powered by Signzy - hide or show
- Language
Output
The output of Liveness Secure ( async api) includes a passive liveness score along with the user's face snap and data from the passive liveness API.
Prerequisites
To use Liveness Secure, you need to obtain an access token from Signzy's systems. Follow this document for setup instructions.
When integrating the video URL in the iframe, ensure the "camera" attribute is allowed in the iframe tag, e.g., allow="camera"
After integration, you can listen to an event with message "Verification Done" in your parent window to know exactly when the whole liveness process has been completed. Below is the code for listening to the event
window.addEventListener('message', function(event) {
if (event.data== 'Verification Done') {
}
}, false);For react native
<WebView
source={{
uri: url,
}}
allowsFullscreenVideo={false}
playsinline
onMessage={(event) => console.log(event.nativeEvent.data)}
allowsInlineMediaPlayback={true}
javaScriptEnabled={true}
domStorageEnabled={true}
/>Understanding Iframes
An iframe is a special window within a webpage that can display content from another website, such as a video, map, or social media post. It allows you to bring different types of content together on your webpage, enhancing user interaction and information accessibility without leaving the main page.
For more information on iframe , read more.
Endpoint Details
Request type - POST
Pre-prod Environment ->
Production Environment ->
Request Body Parameters
Parameter | Data Type | Description | Required |
|---|---|---|---|
languageCode | String
| The language in which you want the liveness verification to be done by the consumer. Possible values include:
Upcoming languages : Arabic, Portuguese, Russian, Japanese, Vietnamese, Turkish, Korean, German, French | No |
matchImage | Array | Publically accessible URLs of ID document image/Face image of the individual which is to be matched with the face in the video. e.g: https://example.com/hosted_img.jpg | No |
hideBottomLogo | String | By default, Signzy's logo will be rendered with the iframe but can be removed by passing the value of this field as "true". | No |
callbackUrl | String | This URL will be used for posting the results from the video verification process. | No |
redirectUrl | String | Redirection URL to redirect user post verification process successfully | No |
accentColor | String | This property can be used to define the colors of the journey/ frontend. We accept hexacolor codes | No |
additionalChecks | String | This checks for mask, hat , glasses and sunglasses and will be flagged in frontend iteself. We allow user 3 chances, in the last 3rd chance, if we still detect mask,etc. we complete the journey | |
reviewImage | String | True - user can review the image clicked False - this screen will be skipped | No |
allowCameraSwitch | String | When opened in mobile, if True - user will see the flip camera icon False - when will not see the flip camera icon | No |
faceMatchThreshold | Float | Face Match Threshold: Accepts values between 0 and 0.99. The default threshold is set to 0.60 | No |
PiideletionTTL | String | Time to live for captured image persist url. The default value is 6 months. Sample input format: 2 mins, 13 mins, 38 mins, 2 hrs, 12 hrs, 24 hrs, 7 days, 66 days, 1 month, 3 months, 6 months, 1 year, 3 years | No |
backgroundColor | String | This property can be used to define the colors of the background of journey/frontend. We accept hex color codes, and transaprent as value. | No |
JSON
{
"languageCode":"en", // The language in which you want the custom text to be rendered for customer
"matchImage": [ "https://domain/hosted_image.jpg” ],
"hideBottomLogo": "true",
"callbackUrl": "https://webhook_URL.com", // The verification results will be posted on this URL
"redirectUrl": "https://www.thank_you_page.com", // After the journey where you want your customer to be taken
"accentColor” : “000000",
"backgroundColor": "transparent",
"reviewImage":"true",
"additionalChecks":"true",
"allowCameraSwitch":"true",
"faceMatchThreshold": 0.6,
"piiDeletionTTL:"6 months"
}
Request Headers
Name | Value |
|---|---|
Content-Type | application/json |
Authorization | XXXXXXXXXXX - Reach out to the Signzy support team to get one created. |
Code Sample:-
curl --location 'https://api-preproduction.signzy.app/api/v3/liveness-secure/createUrl' \
--header 'Content-Type: application/json' \
--header 'Authorization: XXXXXXXXXXX' \
--data '{
"languageCode": "en",
"hideBottomLogo": "false",
"accentColor": "#000000",
"matchImage": [
"https://domain/hosted_image.jpg"
],
"callbackUrl": "https://callback_URL.com",
"redirectUrl": "https://redirect_URL.com",
"reviewImage":"true",
"additionalChecks":"true",
"allowCameraSwitch":"true",
"faceMatchThreshold": 0.6,
"piiDeletionTTL:"6 months",
"backgroundColor": "transparent"
}'Response Body Parameters
Parameters | Data Type | Description |
|---|---|---|
consumerId | String | Unique identifier of the business |
Token | String | Unique ID for each liveliness verification session transaction. You would need this if you want to fetch video verification results via an API call. |
videoUrl | String | The unique URL generated in response of CreateURL request which should be loaded in the iframe. |
hideBottomLogo | String | By default, Signzy's logo will be rendered with the iframe but can be removed by passing the value of this field as "true". |
matchImage | Array | Publically accessible URLs of ID document image/Face image of the individual which is to be matched with the face in the video. Accepted format: [ .png, .jpg, .tiff ] |
languageCode | String | The language in which you want the video verification to be done by the customer. |
accentColor | String | This property can be used to define the colors of the iframe screen. |
callbackUrl | String | This URL will be used for posting the results from the liveliness verification process. |
redirectUrl | String | Redirection URL to redirect user posts successfully recording the video. |
| | |
JSON
{
"languageCode": "en",
"matchImage": [ "https://domain/hosted_image.jpg” ],
"hideBottomLogo": "true",
"accentColor": "#FF0000",
"token": "<unique_id_for_liveness_verification_session>",
"consumerId": "<consumer-id>",
"videoUrl": "http://liveliness.test/consumer/<consumer-id>/token/<token-id>",
"callbackUrl": "http://callback_URL.com",
"redirectUrl": "http://redirect_URL.com",
"additionalChecks": "false",
"backgroundColor": "#F4F4F4",
"reviewImage": "true",
"faceMatchThreshold": 0.6,
"piiDeletionTTL": "6 months",
"allowCameraSwitch": "true"
}
Getting the results
Approach 1(Automatic)
If a callback URL is provided then the whole response/error in JSON format will be posted to that URL.
Approach 2(Manual) -
Request type - POST
Pre-prod Environment ->
Production Environment ->
Request body parameters
Parameter | Data Type | Description | Required |
|---|---|---|---|
token | String | Token received in the video URL Generation Request. | Yes |
JSON
{
"token":"__token__"
}
Request headers
Name | Value |
|---|---|
Content-Type | application/json |
Authorization | XXXXXXXXXXX - Reach out to the Signzy support team to get one created. |
Code Sample
curl --location 'https://api-preproduction.signzy.app/api/v3/liveness-secure/getData' \
--header 'Content-Type: application/json' \
--header 'Authorization: XXXXXXXXXX' \
--data '{
"token": "__token__"
}'
Response body parameters
Parameter | Data type | Description |
|---|---|---|
result | Object | Contains the result of the verification |
result.consumerId | String | Unique identifier for the consumer |
result.token | String | Token received in the video URL Generation Request. |
result.isUsed | String | If value is 1 , it means the journey has been completed for the given consumer and token. |
result.capturedImage | String | The image of the user clicked during the liveness check |
result.faceMatch | Object | Contains the face match result |
result.faceMatch.verified | Boolean | Indicates whether the verification was successful (true or false). This is dependent on the face match threshold ( input param) |
result.faceMatch.message | String | A message describing the result of the verification process. |
result.faceMatch.matchPercentage | String | The percentage indicating the level of match or similarity. |
result.passiveLiveliness | Object | Contains the liveliness result of the input image. |
result.passiveLiveliness.liveness | Boolean | "true" if the image is live else "false" |
result.passiveLiveliness.score | String | Liveliness score of the input image. The value is either 0 or 1. |
result.status | Boolean | This is the status of the overall process. We calculate this on the basis of Liveness score and face match score |
result.additionalChecks | Object | Contains the data for additional checks |
result.additionalChecks.status | Boolean | Status of additional checks . True or false |
result.additionalChecks.attemptNumber | Integer | Gives number of attempts user took for additional checks. Please note, we give maximum of 3 retries ( not configurable) . |
result.additionalChecks.failedChecks | Array | Array of failed checks if any accessory is detected on face ( additional check) |
result.additionalChecks.isFaceCovered | Boolean | Returns true / false on whether the face was covered |
essentials | Object | Contains the data sent as part of the request. |
essentials.matchImage | Array | URL of the image, which is to be matched with the face in the video |
essentials.callbackUrl | String | This URL will be used for posting the results from the video verification process. |
essentials.redirectUrl | String | Redirection URL to redirect user posts successfully recording the video. |
essentials.languageCode | String | The language in which you want the video verification to be done by the customer. |
essentials.hideBottomLogo | String | By default, Signzy's logo will be rendered with the iframe but can be removed by passing the value of this field as "true". |
id | String | Unique identifier for the request |
JSON
{
"result": {
"consumerId": "<consumer-id>",
"token": "__token__",
"isUsed": 1,
"capturedImage": "https://domain/captured_image.jpg” ,
"passiveLiveliness": {
"liveness": true,
"score": 1
},
"faceMatch": {
"verified": false,
"message": "Verification completed with negative result",
"matchPercentage": "0.00%"
},
"status": false,
"additionalChecks": {
"status": true,
"attemptNumber": 2,
"failedChecks": [],
"isFaceCovered": false
}
},
"essentials": {
"matchImage": [ "https://domain/hosted_image.jpg” ],
"callbackUrl": "http://callback_URL.com",
"languageCode": "hi",
"hideBottomLogo": "false",
"accentColor": "#000000",
"redirectUrl": "http://redirect_URL.com"
},
"id": "<unique-id>"
}