• About TrustVision
  • Android SDK
  • iOS SDK
  • Flutter SDK
  • React Native SDK
  • Web SDK
  • API Client Libraries
  • eKYC Platform
  • Integration Case Studies
  • TS eKYC/FA App
TrustVision API Documentation

Java

Specification

  • Java version 7+

Installing SDK

  • Get library file apisdk-[VERSION].jar, put jar file to libs of project. Example: folder ${project.rootDir}/libs/

Please contact the administrator to get library file.

Get starts

Initialize SDK

SDK needs to be initialized first

java
// Init the TVAPI. Contact admin to get ACCESS_KEY/SECRET and how to use TVAuthorization
String accessKey = "YOUR ACCESS KEY";
String secretKey = "YOUR SERCRET KEY";
boolean encryptBody = false ;
String url = "https://tv-staging.trustingsocial.com/api";

TVAuthorizationProvider authorization = new TVAuthorizationProvider(accessKey, secretKey, encryptBody);
int connectionPoolSize = 30;
// Init SDK with custom connection pool
TVApi.initWithConnectionPool(url, authorization, connectionPoolSize);

Start SDK

The client should generate X-Request-Id to easy reconcile and tracing API's call. Reference

java
// X-Request-Id to group all requests of same user
Map<String, String> headers = new HashMap<String, String>();
headers.put("X-Request-Id", userID);

After having headers we should pass it via params header of each API.

java
// Example
// Upload
TVResponseData<TVUploadImageResponse> uploadQrResp = TVApi.getInstance().uploadImage(..., headers);
// Portrait Sanity
TVResponseData<TVSelfieSanityResponse> portraitSanityResp = TVApi.getInstance().syncVerifySelfieSanity(selfieSanityRequest, null, headers);
// Liveness check
TVResponseData<TVVerifyLivenessResponse> livenessResp = TVApi.getInstance().syncVerifyLiveness(verifyLivenessRequest, null, headers);
// ID Sanity
TVResponseData<TVIDSanityResponse> idSanityResponse = TVApi.getInstance().syncVerifyIDSanity(cardRequest, null, headers);
// OCR
TVResponseData<TVCardInfoResponse> ocrResp = TVApi.getInstance().syncReadIdCardInfo(cardRequest, null, headers);
// ID Tampering
TVResponseData<TVIdTamperingResponse> idCardTamperingResp = TVApi.getInstance().syncDetectIdTampering(detectIDTamperingRequest, null, headers);
// Compare faces
TVResponseData<TVCompareFaceResponse> compareFaceResp = TVApi.getInstance().syncCompareFaces(compareFaceRequest, null, headers);
// Index faces
TVResponseData<TVIndexFacesResponse> indexResponse = TVApi.getInstance().syncIndexFaces(indexFacesRequest, null, headers);
// Search faces
TVResponseData<TVSearchFacesResponse> searchResponse = TVApi.getInstance().syncSearchFaces(searchFacesRequest, null, headers);
//...

Create temporary credentials

java
// Create temporary credentials
int durationInSeconds = 900;
String transactionID = "";
String xRequestID = "";
String xRequestID2 = "";
Map<String, String> headers = new HashMap<String, String>();
headers.put("X-Request-Id", xRequestID);
headers.put("X-Request-Id2", xRequestID2);
TVTemporaryCredentialRequest request = new TVTemporaryCredentialRequest(durationInSeconds);
TVResponseData<TVTemporaryCredentialResponse> response = TVApi.getInstance().createTemporaryCredential(request, transactionID, headers);
System.out.println("TVTemporaryCredentialResponse: " + GsonUtils.toJson(response));
if (response.hasErrors()) {
    List<TVApiError> errors = response.getErrors();
    System.out.println("Create temporary credentials error:" + errors.get(0).getMessage());
} else {
    System.out.println("Create temporary credentials successful");
}

Get Client settings

java
// Get client settings
TVResponseData<TVClientSettings> response = TVApi.getInstance().getClientSettings();
if (response.hasErrors()) {
    List<TVApiError> errors = response.getErrors();
    System.out.println("Get client settings error:" + errors.get(0).getMessage());
} else {
    System.out.println("Get client settings successful");
}
System.out.println(response.getRawJSON());

Upload Image

java
//Upload id image
File idCardFrontFile = new File("./resources/id_card_front.jpg"); // CMND image
File selfieFile = new File("./resources/selfie.jpg");   // Selfie image
String idFrontLabel = "id_card.vn.national_id.front";
try {
    // Read Image
    BufferedImage image = ImageIO.read(idCardFrontFile);
    // Call API upload
    TVResponseData<TVUploadImageResponse> uploadIDCardResp = TVApi.getInstance()
            .uploadImage(TestEkycApplication.toByteArray(image), idFrontLabel, null);
    if (uploadIDCardResp.hasErrors()) {
        // Hanlder errors and return
    } else {
        idImageID = uploadIDCardResp.getData().getImageId();
    }

    // Upload selfie
    image = ImageIO.read(selfieFile);
    TVResponseData<TVUploadImageResponse> uploadSelfieResp = TVApi.getInstance()
            .uploadImage(TestEkycApplication.toByteArray(image), "portrait", null, headers);
    if (uploadSelfieResp.hasErrors()) {
        // Hanlder errors and return
    } else {
        selfieImageID = uploadSelfieResp.getData().getImageId();
        System.out.println(String.format("Selfie Image ID: %s", selfieImageID));
    }
} catch (IOException e) {
    e.printStackTrace();
}

Upload video frames

java
// Upload video frame batch
Map<String, String> headers = new HashMap<String, String>();
headers.put("X-Request-Id", userID);
headers.put("X-Request-Id2", "");
List<TVSyncFrame> frameBatch = new ArrayList<TVSyncFrame>();
// Read frames returned by SDK and parse to `frameBatch`
// Example:
// for (int index = 0; index < 50; index++) {
//     TVSyncFrame frame = TVSyncFrame.createByBase64("base64", "portrait", null, index);
//     frameBatch.add(frame);
// }
TVUploadFramesRequest request = new TVUploadFramesRequest(frameBatch, "portrait");
TVResponseData<TVUploadFramesResponse> response = TVApi.getInstance().uploadFrames(request, "portrait", headers);
if (response.hasErrors()) {
    System.out.println("Upload frames error:" + response.getErrors().get(0).getMessage());
} else {
    System.out.println("Upload frames successful");
}

Secure X-Request-Id2 for uploading

Use the secured X-Request-Id2 to pass to API Upload image/video/frames.

Use CryptoUtils to generate secured X-Request-Id2 in one of the following ways:

  • SHA256
  • AES-GCM
  • Digital Signature using RSA private key

The X-Request-Id2 max value length is 64.

java
import com.trustingsocial.apisdk.utils.CryptoUtils;
import java.security.KeyFactory;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;

String xRequestID2 = "";
Map<String, String> headers = new HashMap<String, String>();

// SHA256
headers.put("X-Request-Id2", CryptoUtils.SumOfSha256(xRequestID2));

// AES-GCM
String aesKey = "JwpOC9x3tjuEafEAcJGo3r7ts5dzC08X";
headers.put("X-Request-Id2", CryptoUtils.EncryptAesGcm(xRequestID2, aesKey));

// Digital Signature using RSA private key
String key = new String(Files.readAllBytes(file.toPath()), Charset.defaultCharset());
String privateKeyPEM = key
  .replace("-----BEGIN PRIVATE KEY-----", "")
  .replaceAll(System.lineSeparator(), "")
  .replace("-----END PRIVATE KEY-----", "");
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyFactory.generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKeyPEM)));
headers.put("X-Request-Id2", CryptoUtils.Sign(xRequestID2.getBytes(), rsaPrivateKey));

Verify portrait sanity

java
  TVSyncImage selfieImage = TVSyncImage.createById(selfieImageID); // Selfie
  // Portrait sanity
  TVSelfieSanityRequest selfieSanityRequest = new TVSelfieSanityRequest(selfieImage);
  TVResponseData<TVSelfieSanityResponse> portraitSanityResp = TVApi.getInstance().syncVerifySelfieSanity(selfieSanityRequest);
  if (portraitSanityResp.hasErrors()) {
      List<TVApiError> errors = portraitSanityResp.getErrors();
      System.out.println("Portrait Sanity verdict:" + errors.get(0).getMessage());
  } else {
      System.out.println("Portrait Sanity verdict: good");
  }

Liveness check

java
// Preparing liveness check request
List<TVSyncImage> listFrontalImages = new ArrayList<TVSyncImage>();
// Upload 2-4 frontal image from SDK, should upload in concurrency
for (int i = 0; i < 4; i++) {
    image = ImageIO.read(selfieFile);
    TVResponseData<TVUploadImageResponse> uploadSelfieResp = TVApi.getInstance()
            .uploadImage(TestEkycApplication.toByteArray(image), "portrait", null);
    if (uploadSelfieResp.hasErrors()) {
        // Hanlder errors and return
    } else {
        selfieImageID = uploadSelfieResp.getData().getImageId();
        System.out.println(String.format("Selfie Image ID: %s", selfieImageID));
        listFrontalImages.add(TVSyncImage.createById(selfieImageID));
    }
}

List<TVGestureImages> gestureImages = new ArrayList<TVGestureImages>();
// Upload 3 gesture images from SDK, should upload in concurrency
String[] gestures = new String[]{"left", "up", "right"};
for (String gesture : gestures) {
    image = ImageIO.read(selfieFile);
    TVResponseData<TVUploadImageResponse> uploadSelfieResp = TVApi.getInstance()
            .uploadImage(TestEkycApplication.toByteArray(image), "portrait", null);
    if (uploadSelfieResp.hasErrors()) {
        // Hanlder errors and return
    } else {
        selfieImageID = uploadSelfieResp.getData().getImageId();
        System.out.println(String.format("Selfie Image ID: %s", selfieImageID));
        // Create list images of a gesture
        List<TVSyncImage> listImageOfGesture = new ArrayList<TVSyncImage>();
        listImageOfGesture.add(TVSyncImage.createById(selfieImageID)); // currently use 1 image only

        // Create gesture image
        TVGestureImages gestureImage = new TVGestureImages(gesture, listImageOfGesture);
        gestureImages.add(gestureImage);
    }
}

List<TVSyncVideo> videos = new ArrayList<TVSyncVideo>();
// Upload video frame batches from SDK
int exampleNumberOfBatches = 20;
for (int i = 0; i < exampleNumberOfBatches; i++) {
    List<TVSyncFrame> frameBatch = new ArrayList<TVSyncFrame>();
    // Read frames returned by SDK and parse to `frameBatch`
    // int exampleBatchSize = 10;
    // for (int index = 0; index < exampleBatchSize; index++) {
    //     TVSyncFrame frame = TVSyncFrame.createByBase64("base64 here", "portrait", null, index);
    //     frameBatch.add(frame);
    // }
    TVUploadFramesRequest request = new TVUploadFramesRequest(frameBatch, "portrait");
    TVResponseData<TVUploadFramesResponse> response = TVApi.getInstance().uploadFrames(request, "portrait", headers);
    if (response.isSuccessful()) {
        String videoId = response.getData().getFileId();
        videos.add(TVSyncVideo.createById(videoId));
    } else {
        // Handle errors
    }
}

// Call API liveness check
String selfieType = com.trustingsocial.apisdk.constants.TVFaceAuthSelfieTypeConstant.ACTIVE;
TVVerifyLivnessRequest verifyLivenessRequest = new TVVerifyLivnessRequest(listFrontalImages, gestureImages, null, videos);
verifyLivenessRequest.setSelfieType(selfieType);
TVResponseData<TVVerifyLivenessResponse> livenessResp = TVApi.getInstance().syncVerifyLiveness(verifyLivenessRequest);

if (livenessResp.hasErrors()) {
    List<TVApiError> errors = livenessResp.getErrors();
    System.out.println("Liveness check error:" + errors.get(0).getMessage());
} else {
    TVVerifyLivenessResponse data = livenessResp.getData();
    System.out.println("Liveness check result:" + data.getIsLive()); // liveness or not
    System.out.println("Liveness check score:" + data.getScore());
    System.out.println("Request-ID: " + data.getRequestId());
}

ID Card Sanity

java
String cardType = "vn.national_id";
TVSyncCardInfoRequest cardRequest = new TVSyncCardInfoRequest(cardType, frontImage);

// ID Card Sanity
TVResponseData<TVIDSanityResponse> idSanityResponse = TVApi.getInstance().syncVerifyIDSanity(cardRequest);
if (idSanityResponse.hasErrors()) {
    List<TVApiError> errors = idSanityResponse.getErrors();
    System.out.println("ID Sanity verdict:" + errors.get(0).getMessage());
} else {
    System.out.println("ID Sanity verdict: good");
}

OCR

java
// Prepare image params
TVSyncImage frontImage = TVSyncImage.createById(idImageID); // Read frontside

// OCR request
String cardType = "vn.national_id";
TVSyncCardInfoRequest cardRequest = new TVSyncCardInfoRequest(cardType, frontImage);
/**
 * if card has back side, add this line to have ocr result of two sides.
 * cardRequest.setImage2(syncImageIDBack);
 */

/**
 * if we have QR code image, add QR image via this param
 * cardRequest.setQr1Images(Arrays.asList(TVSyncImage.createById("QR image_id was uploaded via upload API")));
 */
// Call API
TVResponseData<TVCardInfoResponse> ocrResp = TVApi.getInstance().syncReadIdCardInfo(cardRequest);
if (ocrResp.hasErrors()) {
    List<TVApiError> errors = ocrResp.getErrors();
    System.out.println("OCR error:" + errors.get(0).getMessage());
} else {
    TVCardInfoResponse data = ocrResp.getData();
    List<TVCardInfoResponse.Info> ocrInfo = data.getCardInformation();
    StringBuilder stringBuilder = new StringBuilder();
    System.out.println("====OCR Result====");
    for (TVCardInfoResponse.Info info : ocrInfo) {
        stringBuilder.append(info.getField());
        stringBuilder.append(":");
        stringBuilder.append(info.getValue());
        stringBuilder.append("\n");
    }
    System.out.println(stringBuilder.toString());
}

Detect ID Card tampering

java
TVSyncImage frontImage = TVSyncImage.createById(frontImageID); // Front side
TVSyncImage backImage = TVSyncImage.createById(backImageID); // Back side
String level = "";
String cardType = "vn.national_id";
TVDetectIDTamperingRequest detectIDTamperingRequest = new TVDetectIDTamperingRequest(cardType, frontImage, backImage, level);
// Call ID card tampering API
TVResponseData<TVIdTamperingResponse> idCardTamperingResp = TVApi.getInstance().syncDetectIdTampering(detectIDTamperingRequest, "", headers);
if (idCardTamperingResp.hasErrors()) {
  List<TVApiError> errors = idCardTamperingResp.getErrors();
  System.out.println("ID Tampering verdict:" + errors.get(0).getMessage());
} else {
  System.out.println("ID Tampering verdict: good");
}

Compare faces

java
//Compare faces
String idImageID = ""; //The image ID after uploaded id image
String selfieImageID = ""; //The image ID after uploaded selfie image
// Prepare image params
TVSyncImage frontImage = TVSyncImage.createById(idImageID); // Front side
TVSyncImage selfieImage = TVSyncImage.createById(selfieImageID); // Selfie

// Call API compare faces
TVResponseData<TVCompareFaceResponse> compareFaceResp = TVApi.getInstance().syncCompareFaces(frontImage, selfieImage);
if (compareFaceResp.hasErrors()) {
    List<TVApiError> errors = compareFaceResp.getErrors();
    System.out.println("Face matching error:" + errors.get(0).getMessage());
} else {
    TVCompareFaceResponse data = compareFaceResp.getData();
    if (data.getCompareFaces().isEmpty()) {
        return;
    }
    TVCompareFaceResponse.CompareFaces compareFace = data.getCompareFaces().get(0);
    TVCompareFaceResponse.MatchResult compareFaceResult = compareFace.getResult();
    System.out.println("Face matching result:" + compareFaceResult.name); // matched, unmatched, unsure
    System.out.println("Face matching score:" + compareFace.getScore());
}

Index faces

java
String collection = ""; // search and index are same collection
// Call index faces
HashMap<String, Object> metadata = new HashMap<>(); // Will return when search
metadata.put("ID", "1111");
TVSyncImage selfie =TVSyncImage.createById(selfieImageID, metadata);
TVIndexFacesRequest indexFacesRequest = new TVIndexFacesRequest(selfie, collection, true);
TVResponseData<TVIndexFacesResponse> indexResponse = TVApi.getInstance().syncIndexFaces(indexFacesRequest, null, headers);
if (indexResponse.hasErrors()) {
  // handle error here
} else {
  // handle result here, only check status
}

Search faces

java
// Call search faces
TVSyncImage searchImage =TVSyncImage.createById(selfieImageID, metadata);
TVSearchFacesRequest searchFacesRequest = new TVSearchFacesRequest(searchImage, collection);
TVResponseData<TVSearchFacesResponse> searchResponse = TVApi.getInstance().syncSearchFaces(searchFacesRequest, null, headers);
if (searchResponse.hasErrors()) {
  // handle error here
} else {
  TVSearchFacesResponse data = searchResponse.getData();
  List<List<TVFace>> faces = data.getFaces(); // 2 dim arrays, each face in input image has list matched faces
  if (faces != null) {
    for (List<TVFace> facesMatch : faces) { // Loop on each face input
      for (TVFace faceMatch : facesMatch) { // Loop on each face result that matched with input face
        System.out.println("Matched with face on image ID: " + faceMatch.getImageId());
        List<TVMetadata> metadataResults = faceMatch.getMetadata();
        if (metadataResults != null) {
          for (TVMetadata metadataResult : metadataResults) {
            System.out.println(String.format("%s=%s", metadataResult.getField(), metadataResult.getValue()));
          }
        }
      }
    }
  }
}

Delete files ID card and selfie

java
// Delete file ID Card and selfie
TVDeleteFilesRequest deleteFilesRequest = new TVDeleteFilesRequest(Arrays.asList(idImageID, selfieImageID));
TVResponseData<TVDeleteFilesResponse> deleteFilesResponse = TVApi.getInstance().deleteFiles(deleteFilesRequest);
if (deleteFilesResponse.hasErrors()) {
  List<TVApiError> errors = deleteFilesResponse.getErrors();
  System.out.println("Delete files error:" + errors.get(0).getMessage());
} else {
  System.out.println("Delete files successful");
}

Face Auth Registration

java
// Face Auth Registration
String transactionID = "";
Map<String, String> headers = new HashMap<String, String>();
headers.put("X-Request-Id", userID);
String cusUserID = "c1b3b3b3-1b3b-4b3b-8b3b-3b3b3b3b3b3b";
List<TVSyncImage> imagesFaceAuth = Arrays.asList(
        TVSyncImage.createById("3e2693e7-1e8f-40f0-be68-2cf73b09c61b"),
        TVSyncImage.createById("36dc7bd6-ed04-4bd3-bd32-61cb9ac4837c"),
        TVSyncImage.createById("15b0db75-d238-4a4b-bea9-4897c7af0a08"),
        TVSyncImage.createById("d8c330d4-5c7a-4f8e-a0f0-44efffb0cfc6"));
List<TVGestureImages> gestureImagesFaceAuth = Arrays.asList(
        new TVGestureImages("right", Arrays.asList(TVSyncImage.createById("99bbe3b5-23e8-41d6-a496-956d7e5c3ed5"))),
        new TVGestureImages("down", Arrays.asList(TVSyncImage.createById("fe140383-81ff-47e3-930f-154272e7da6c"))),
        new TVGestureImages("left", Arrays.asList(TVSyncImage.createById("dd553b55-5b02-48e3-b2bf-ecfa45c9119b")))
        );
List<TVSyncVideo> videos = Arrays.asList(
    TVSyncVideo.createById("dfb4a246-09df-42fc-be41-0faafc8dc5bc")
);
List<TVGestureVideos> gestureVideos = Arrays.asList();
String deviceId = "";
String appId = "";
Double lat = Double.valueOf(0d);
Double lng = Double.valueOf(0d);
String faceType = TVFaceAuthFaceTypeConstant.FACE;
String selfieType = TVFaceAuthSelfieTypeConstant.ACTIVE;
TVSyncImage faceInIdCard = TVSyncImage.createById("e975bc8c-9d6e-4118-b905-da8c121636c9");
TVFaceAuthenRegistrationRequest faceAuthRegistrationRequest = TVFaceAuthenRegistrationRequest.builder(cusUserID)
        .cusUserId(cusUserID).faces(imagesFaceAuth).gestureFaces(gestureImagesFaceAuth)
        .videos(videos).gestureVideos(gestureVideos).selfieType(selfieType)
        .deviceId(deviceId).appId(appId).lat(lat).lng(lng)
        .faceType(faceType).faceInIdCard(faceInIdCard)
        .build();
TVResponseData<TVFaceAuthenResponse> faceAuthRegistrationResponse = TVApi.getInstance().faceAuthenRegister(faceAuthRegistrationRequest, transactionID, headers);
if (faceAuthRegistrationResponse.hasErrors()) {
    List<TVApiError> errors = faceAuthRegistrationResponse.getErrors();
    System.out.println("Face Auth Registration error:" + errors.get(0).getMessage());
} else {
    System.out.println("Face Auth Registration successful");
}

Face Auth User

java
// Face Auth User
String transactionID = "";
Map<String, String> headers = new HashMap<String, String>();
headers.put("X-Request-Id", userID);
String cusUserID = "c1b3b3b3-1b3b-4b3b-8b3b-3b3b3b3b3b3b";
TVFaceAuthenUserRequest faceAuthUserRequest = new TVFaceAuthenUserRequest(cusUserID);
TVResponseData<TVFaceAuthenUserResponse> faceAuthUserResponse = TVApi.getInstance().faceAuthenUser(faceAuthUserRequest, transactionID, headers);
if (faceAuthUserResponse.hasErrors()) {
    List<TVApiError> errors = faceAuthUserResponse.getErrors();
    System.out.println("Face Auth User error:" + errors.get(0).getMessage());
} else {
    System.out.println("Face Auth User successful");
}

Face Auth

java
// Face Auth
String transactionID = "";
Map<String, String> headers = new HashMap<String, String>();
headers.put("X-Request-Id", userID);
String cusUserID = "c1b3b3b3-1b3b-4b3b-8b3b-3b3b3b3b3b3b";
List<TVSyncImage> imagesFaceAuth = Arrays.asList(
        TVSyncImage.createById("3e2693e7-1e8f-40f0-be68-2cf73b09c61b"),
        TVSyncImage.createById("36dc7bd6-ed04-4bd3-bd32-61cb9ac4837c"),
        TVSyncImage.createById("15b0db75-d238-4a4b-bea9-4897c7af0a08"),
        TVSyncImage.createById("d8c330d4-5c7a-4f8e-a0f0-44efffb0cfc6"));
List<TVGestureImages> gestureImagesFaceAuth = Arrays.asList(
        new TVGestureImages("right", Arrays.asList(TVSyncImage.createById("99bbe3b5-23e8-41d6-a496-956d7e5c3ed5"))),
        new TVGestureImages("down", Arrays.asList(TVSyncImage.createById("fe140383-81ff-47e3-930f-154272e7da6c"))),
        new TVGestureImages("left", Arrays.asList(TVSyncImage.createById("dd553b55-5b02-48e3-b2bf-ecfa45c9119b")))
        );
List<TVSyncVideo> videos = Arrays.asList(
  TVSyncVideo.createById("dfb4a246-09df-42fc-be41-0faafc8dc5bc")
);
List<TVGestureVideos> gestureVideos = Arrays.asList();
String deviceId = "";
String appId = "";
Double lat = Double.valueOf(0d);
Double lng = Double.valueOf(0d);
String authType = TVFaceAuthAuthTypeConstant.LOGIN;
String selfieType = TVFaceAuthSelfieTypeConstant.ACTIVE;
String clientTransactionID = "a9c9a80a-8ae8-4de9-8dab-d85a85d1882e";
TVFaceAuthenRequest faceAuthRequest = TVFaceAuthenRequest.builder(cusUserID)
        .cusUserId(cusUserID).faces(imagesFaceAuth).gestureFaces(gestureImagesFaceAuth)
        .videos(videos).gestureVideos(gestureVideos).selfieType(selfieType)
        .deviceId(deviceId).appId(appId).lat(lat).lng(lng)
        .authType(authType).clientTransactionId(clientTransactionID)
        .build();
TVResponseData<TVFaceAuthenResponse> faceAuthResponse = TVApi.getInstance().faceAuthen(faceAuthRequest, transactionID, headers);
if (faceAuthResponse.hasErrors()) {
    List<TVApiError> errors = faceAuthResponse.getErrors();
    System.out.println("Face Auth error:" + errors.get(0).getMessage());
} else {
    System.out.println("Face Auth successful");
}

Face Auth Unregister

java
// Face Auth Unregister
String transactionID = "";
Map<String, String> headers = new HashMap<String, String>();
headers.put("X-Request-Id", userID);
String cusUserID = "c1b3b3b3-1b3b-4b3b-8b3b-3b3b3b3b3b3b";
String deviceId = "";
String appId = "";
Double lat = Double.valueOf(0d);
Double lng = Double.valueOf(0d);
  TVFaceAuthenUnregistrationRequest faceAuthUserUnregisterRequest = TVFaceAuthenUnregistrationRequest
    .builder(cusUserID)
    .cusUserId(cusUserID)
    .deviceId(deviceId).appId(appId).lat(lat).lng(lng)
    .build();
TVResponseData<TVFaceAuthenUnregistrationResponse> faceAuthUserUnregistrationResponse = TVApi.getInstance().faceAuthenUnregister(faceAuthUserUnregisterRequest, transactionID, headers);
if (faceAuthUserUnregistrationResponse.hasErrors()) {
    List<TVApiError> errors = faceAuthUserUnregistrationResponse.getErrors();
    System.out.println("Face Auth User Unregistration error:" + errors.get(0).getMessage());
} else {
    System.out.println("Face Auth User Unregistration successful");
}

Get request result by ID

java
{
    // Face Auth
    TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
            .getRequestsByReqId("d56fc303-5da0-4b5f-82dd-2b2aadd4cf57");
    if (response.hasErrors()) {
        List<TVApiError> errors = response.getErrors();
        System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
    } else {
        System.out.println("getFaceAuthen: " + GsonUtils.toJson( response.getData().getFaceAuthen()));

    }
}
{
    // Face Auth Register
    TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
            .getRequestsByReqId("d873f2b9-4127-4a1e-99a3-c702472b76cd");
    if (response.hasErrors()) {
        List<TVApiError> errors = response.getErrors();
        System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
    } else {
        System.out.println("getFaceAuthenRegistration: " + GsonUtils.toJson( response.getData().getFaceAuthenRegistration()));

    }
}
Other examples
  {
      // Liveness
      TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
              .getRequestsByReqId("8fa7e086-cd3e-4e16-9c36-3b50c1d0a1f9");
      if (response.hasErrors()) {
          List<TVApiError> errors = response.getErrors();
          System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
      } else {
          System.out.println("getLivenessCheck: " + GsonUtils.toJson( response.getData().getLivenessCheck()));
      }
  }
  {
      // Compare faces
      TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
              .getRequestsByReqId("dc180c8a-3e07-4222-92e1-e93552efbcdc");
      if (response.hasErrors()) {
          List<TVApiError> errors = response.getErrors();
          System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
      } else {
          System.out.println("getCompareFaces: " + GsonUtils.toJson( response.getData().getCompareFaces()));
          System.out.println("getCompareFaces: " + GsonUtils.toJson(response.getData().getCompareFaces()));

      }
  }
  {
      // Card Sanity
      TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
              .getRequestsByReqId("8dfb44ac-80c9-41e6-8c1e-738ddeb8c5f4");
      if (response.hasErrors()) {
          List<TVApiError> errors = response.getErrors();
          System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
      } else {
          System.out.println("getCardSanity: " + GsonUtils.toJson( response.getData().getCardSanity()));

      }
  }
  {
      // Portrait Sanity
      TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
              .getRequestsByReqId("a4d8b62f-5694-45db-90ac-c8ae38c82ff6");
      if (response.hasErrors()) {
          List<TVApiError> errors = response.getErrors();
          System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
      } else {
          System.out.println("getPortraitSanity: " + GsonUtils.toJson( response.getData().getPortraitSanity()));

      }
  }
  {
      // Read ID Card Info
      TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
              .getRequestsByReqId("43cf328e-dc59-48be-8a56-e379f38ee482");
      if (response.hasErrors()) {
          List<TVApiError> errors = response.getErrors();
          System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
      } else {
          System.out.println("getReadIdCardInfo: " + GsonUtils.toJson( response.getData().getReadIdCardInfo()));

      }
  }
  {
      // Tampering
      TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
              .getRequestsByReqId("1d8ca09c-1270-4a4b-97ec-54e8a06d4912");
      if (response.hasErrors()) {
          List<TVApiError> errors = response.getErrors();
          System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
      } else {
          System.out.println("getCardTampering: " + GsonUtils.toJson( response.getData().getCardTampering()));

      }
  }
  {
      // Detect ID cards
      TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
              .getRequestsByReqId("18edb28f-d6c6-47bf-8b88-f7b6fdaeef76");
      if (response.hasErrors()) {
          List<TVApiError> errors = response.getErrors();
          System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
      } else {
          System.out.println("getDetectIdCards: " + GsonUtils.toJson( response.getData().getDetectIdCards()));

      }
  }
  {
      // Delete faces
      TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
              .getRequestsByReqId("");
      if (response.hasErrors()) {
          List<TVApiError> errors = response.getErrors();
          System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
      } else {
          System.out.println("getSearchFaces: " + GsonUtils.toJson( response.getData().getSearchFaces()));

      }
  }
  {
      // Delete files
      TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
              .getRequestsByReqId("");
      if (response.hasErrors()) {
          List<TVApiError> errors = response.getErrors();
          System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
      } else {
          System.out.println("getDeleteFiles: " + GsonUtils.toJson( response.getData().getDeleteFiles()));

      }
  }
  {
      // Delete faces
      TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
              .getRequestsByReqId("");
      if (response.hasErrors()) {
          List<TVApiError> errors = response.getErrors();
          System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
      } else {
          System.out.println("getDeleteFaces: " + GsonUtils.toJson( response.getData().getDeleteFaces()));

      }
  }
  {
      // Index faces
      TVResponseData<TVGetResultsByRequestIdResponse> response = TVApi.getInstance()
              .getRequestsByReqId("");
      if (response.hasErrors()) {
          List<TVApiError> errors = response.getErrors();
          System.out.println("GetRequestsByReqId error:" + errors.get(0).getMessage());
      } else {
          System.out.println("getIndexFaces: " + GsonUtils.toJson( response.getData().getIndexFaces()));

      }
  }