The purpose of the liveness check is to ensure that the person undergoing the identity verification process is a real human being and not an image, a video or an attempt at fraud. This stage is performed to prevent the use of falsified photographs or videos and to protect the integrity of the KYC process.

During this stage, biometric validation will be performed to confirm that the person interacting with the system is actually who they say they are. Using advanced facial detection technologies, this check ensures that only real people can complete the identification process.

To use this step, a 5 second video with a person's face to validate is required. It's essential that the person doesn't wear accessories and that the video have good light.

That video should be converted to Base64 Before being sent to service. Thus, it's crucial to conduct the video encoding process to secure its proper transmission and processing.

Realizes next call API To conduct the life check process.

URL

POST https://api.sandbox.jaak.ai/api/v1/liveness/verify-and-bestframe
@POST("api/v1/liveness/verify-and-bestframe")
    suspend fun livenessVerifyApi(@Header("Authorization") auth: String,
                                  @Body request: LivenessVerifyRequest): Response<LivenessVerifyResponse>

Leader

Authorization: Bearer token-session-kyc
FieldTypeRequiredDescription
AuthorisationstringYesThe Session Token should be sent at this headquarters KYC That's been obtained from the exchange with Short Key

Request

{
  "video": String
}
data class LivenessVerifyBestframeRequest(
@SerializedName("video") val video: String, //base64
)
FieldTypeWithdrawal
videostringVideo of person sent in Base64 format

Answer

{
    "eventId": String,
    "requestId": String,
    "processTime": String,
    "score": Double,
    "bestFrame": String,
    "state": {
        "isRealPerson": Boolean,
        "message": String
    }
}
  data class LivenessVerifyResponse(
  @SerializedName("eventId") val eventId: String,
  @SerializedName("requestId") val requestId: String,
  @SerializedName("processTime") val processTime: Long,
  @SerializedName("score") val score: Double,
  @SerializedName("bestFrame") val bestFrame: String,  // base64 encoded string
  @SerializedName("state") val state: LivenessState
  )

  data class LivenessState(
  @SerializedName("isRealPerson") val isRealPerson: Boolean,
  @SerializedName("message") val message: String
  )
FieldTypeDescription
eventstringID for traceability of event details.
requeststringID for demand traceability.
ProcessTimestringTest processing time for milliseconds.
scoredoubleResults from different checks about video processing.
bestFramestringDetects best photo of video and generates an image in Base64 format
statusObjectThe detailed status of the life check processing.

Object * state *

FieldTypeDescription
isRealPerubooleanThat flag represents if the person in the video is real and approves of life check.
messagestringIt provides additional details in case of errors or discrepancies with expected results.

The true value * of property * state.isRealPerson *, within the * Response * of the Liveness detection call, confirms that the verification was successful and there was no attack.

Also, the same answer returns us a property called * bestFrame *, that's used to get the best frame of the video, that's to say, with the person with best place, light, etc. That frame will be used at the next step.