17 - Photo verification


Verification of identity based on a photo.


The service allows you to analyze the customer’s photos in the credit requests:

  • Customer verification (identity authentication),

  • Fraud prevention,

  • Identification of the facts of identity theft - a crime, in which a person's personal data are used to obtain illegally the material benefits (special cases: forgery and forgery of documents, in the simplest case – photo reglueing in the passport).

At the heart of the photo verification of the Ukrainian Bureau of Credit History is Microsoft Face API.


Requirements to the photo

1. Maximum size of a request with an encoded photo is 2 Mb

2. File extension - jpeg/jpg

3. XML request - photo base64

4. The higher quality of a face image means the better recognition accuracy: frontal, transparent and face size - 200x200 pixels (100 pixels between the eyes) or more.

5. The face area in the photo has to compose a maximum possible share of the entire image;

6. The photo must be clear, not fuzzy;

7. The color and brightness of the background have to provide a reliable definition of a head contour.

8. Location and lighting:

- The head location - without turning, straight, and the sight has to be directed strictly at the camera. The head bends or turnings in any direction or face focus changing will lead to deformation of the comparison results;

- There has to be no shadows from the head against the background, there has to be no shadows on the face or any objects;

- It isn’t recommended the close eyes on images of face; hair that covers the eyes and face;

- It isn’t recommended any light reflections and shadows at the images of faces;

- It isn’t recommended a photo with background: street, car, fences, trees, etc.

9. Glasses and headwears:

- It isn’t recommended on the images the availability of clothing elements, that cover (partially or completely) a face, i.e. hats, shawls, etc.; the thick frames of glasses, which deform the facial features;

- It is not recommended the reflections of flashes or highlightings reflected in the glasses of lenses or glasses.

10. Expression and frame:

- It is not recommended the availability of other person behind the face image;

- The look at the camera should be with a neutral facial expression and with closed mouth.

Http Method

POST

Request JSON
( **parameters are passed optionally)

{

"doc": {

"ubki": {

"req_envelope": {

"req_xml": {

"request": {

"i": {

"ident": {

"okpo": "Tax/Taxpayer Identification Number (INN-RNUKPN, for individuals)",

"lname": "**Last name",

"fname": "**First name",

"mname": "**Middle name",

"bdate": "**Date of birth"

},

"fotoverif": {

"freqtype": "Request Type",

"inn": "INN- RNUKPN",

"facelogic": "Type of algorithm for a person search",

"foto": "base64(Photo)",

"fotoext": "Extension to the photo of the incoming request (jpeg)",

"phone": "Phone for comparison"

},

"reqlng": "Search criteria language (Code from ref.23)"

},

"version": "1.0",

"reqtype": "Template code (Code from ref.49): Report 'Photo Verification' - 17",

"reqreason": "Purpose of the request (Code from ref.24)"

},

"descr": "Request object"

},

"descr": "Request envelope"

},

"sessid": "Session key (we receive it from the API authorization)"

}

}

}

Response JSON

{

"ubkidata": {

"tech": {

"trace": {

"step": {

"name": "Step name",

"stm": "Date - stamp of the starting step",

"ftm": "Date - stamp of the ending step"

}

},

"error": {

"errtype": "Error code (code from ref.0)",

"errtext": "Error text (value from ref.0)"

},

"reqinfo": {

"reqid": "Outstanding ID request, generated by the Ukrainian Bureau of Credit History"

},

"billing": {

"balance": {

"value": "Balance amount",

"date": "Date",

"time": "Time"

}

}

},

"comp": [

{

"fotoverif": {

"freqtype": "Request type (1 – in the in-house photo-database, 2 – in photo-databases of other banks, 3 – comparison of two persons on the photo (for example, face in the passport and face of the person holding it), 4 – reserved, 5 – in the photo-database of compromised persons, 6 – comparison with the photo from the document)",

"bdfd": "A checking sign by compromised persons’ photo database (Code from ref.47)",

"fotofd": "base64(Photo) photo of a compromised person",

"fotoextfd": "Expansion to the photo of a compromised person",

"commentfd": "Commentary on the results of comparison",

"verifclient": "The sign of the photo match (Code from ref.47)",

"fotovc": "base64(Photo) sample photo",

"fotoextvc": "Extension to the photo of the sample photo",

"commentvc": "Comment on the results of comparison with the sample photo",

"confidencefd": "A measure of similarity of persons when compared with a photo of a compromised person",

"confidencevc": "A measure of the similarity of individuals in the customers’ photos",

"datefotovc": "Date of a sample photo",

"phonematch": "Result of phones checking",

"phonematchref": "Result of phones checking in text form"

},

"gray": {

"inn": "TIN, according to which the query register worked",

"foto": "base64 (Photo) photographing faces from the registry of requests",

"fotoext": "Extension to the photo of a person from the registry of requests",

"datefoto": "Date photos from the registry of requests",

"confidence": "A measure of the similarity of individuals when compared with a photo from the registry of requests",

"algsearch": "Search type (1 - for a given TIN, 2 - for a given photo)",

"algsearchdescr": "Type of search in text form"

},

"resultsearch": {

"state": "Status of the natural person",

"category": "Classification of the status of the physical person in text form",

"lnameua": "Last Name in Ukrainian",

"fnameua": "Name in Ukrainian",

"mnameua": "Patronymic in Ukrainian",

"lnameru": "Last Name in Russian",

"fnameru": "Name in Russian",

"mnameru": "Patronymic in Russian",

"bdate": "Date of birth",

"lostdate": "date of disappearance",

"lostplace": "Place of Extinction",

"restraint": "preventive measure",

"contact": "Contacts to inform",

"confidence": "A measure of the similarity of individuals when compared with a photo from the base of the missing person",

"foto": "base64 (Photo) photographing faces from the base of missing persons",

"fotoext": "Extension to a photo of a person from the base of missing persons"

},

"id": "16",

"descr": "Components name"

},

{

"pret": {

"pretension": {

"inn": "INN (for natural persons)/OKPO (for legal entities)",

"crdeal": "Transaction identifier (reference)",

"source": "Disputing type (Code from ref.48)",

"sourceref": "Disputing type (Value from ref.48)",

"claim" : "Subject of dispute (Code from ref. 69)",

                         "claimref": "Subject of dispute (Value from ref. 69)",

"vdate": "Date of the request creation"

},

"commentcki": {

"comment": "Commentary of the subject of credit history",

"vdate": "Date of a comment creation"

},

"plost": {

"pser": "Passport series claimed by the client as lost (theft)",

"pnom": "Passport number declared by the client as lost (theft)",

"crdate": "ДDate of creation of an application for the loss/theft of a client's passport in UBCH",

"ldate": "The date of loss / theft of the client's passport indicated in the application in UBCH"

},

"changedeal": {

"crdeal": "Transaction identifier (reference)",

"changecode": "Code for the reason of correction/deletion of data (Code from ref.62)",

"changeref": "Text of the reason for correcting/deleting data (Value from ref.62)",

"vdate": "Date of data correction/deletion"

},

"freezedate": "FREEZE option connection date",

"nonewdealcomment": "Comment",

"nonewdeal": "Sign of reluctance to draw up new loan products, connection status of the FREEZE option: 0 - not enabled, 1 - enabled",

"nonewdealref": "The value of the sign of unwillingness to draw up new credit products, the connection status of the FREEZE option is 0-no (the option is not connected), 1-yes (the option is connected)",

"inn": "INN (for natural persons)/OKPO (for legal entities)"

},

"fcert": {

"inn": "TIN",

"cert": "Availability of a certificate from the UBCH (code from ref. 56) - 0 - no (no registered certificate), 1 - yes (registered certificate) ",

"certref": "Availability of a certificate from the UBCH (value from ref. 56)",

"certid": "Certificate number",

"certurl": "Link to the certificate"

},

"maybegone": {

"inn": "TIN",

"vdate": "Application creation date",

"dldonor": "Information provider (code from ref. 54)"

},

"id": "18",

"descr": "Components name"

},

{

"person": {

"bdate": "Date of birth",

"lngref": "Search/transfer language (ref. 23)",

"lng": "Part presentation language, value (ref. 23)",

"mname": "Middle name",

"fname": "First name",

"lname": "Last name",

"inn ": "TIN of the credit history subject",

},

"id": "72",

"descr": "Search by full name + inn if more than 1 person is found (The presence of the component is determined by searching for more than 1 person in the case of searching by full name + inn)"

}

]

}

}

Request XML
( **parameters are passed optionally)

<?xml version="1.0" encoding="utf-8"?>

<doc>

<ubki sessid="Session key (we receive it from the API authorization)">

<req_envelope descr="Request envelope">

<req_xml descr="Request object">

<!-- Request Parameters -->

<request version="1.0" reqtype="Template code (Code from ref.49): Report 'Photo Verification' - 17" reqreason="Purpose of the request (Code from ref.24)">

<!-- Parameters, describing the search criteria-->

<i reqlng="Search criteria language (Code from ref.23)">

<!-- Parameters of the subject identification -->

<ident okpo="Tax/Taxpayer Identification Number (INN-RNUKPN, for individuals)"

lname="**Last name"

fname="**First name"

mname="**Middle name"

bdate="**Date of birth">

</ident>

<!-- Parameters for photo verification -->

<fotoverif freqtype="Request Type"

inn="INN- RNUKPN"

facelogic="Type of algorithm for a person search"

foto="base64(Photo)"

fotoext="Extension to the photo of the incoming request (jpeg)"

phone="Phone for comparison" />

</i>

</request>

</req_xml>

</req_envelope>

</ubki>

</doc>

Response XML

<?xml version="1.0" encoding="utf-8"?>

<ubkidata>

<!-- System information block -->

<tech>

<trace>

<step name="Step name" stm="Date - stamp of the starting step" ftm="Date - stamp of the ending step">

<!-- The trace block contains metrics for timing of the steps for components formation -->

</step>

</trace>

<error errtype="Error code (Code from ref.0)" errtext="Error text (Value from ref.0)">

</error>

<reqinfo reqid="Outstanding ID request, generated by the Ukrainian Bureau of Credit History">

</reqinfo>

<!-- The block of information on the current state of the prepaid account-->

<billing>

<balance value="Balance amount" date="Date" time="Time" />

</billing>

</tech>

<!-- Block “Photo verification” -->

<comp id="16" descr="Components name">

<fotoverif freqtype="Request type (1 – in the in-house photo-database, 2 – in photo-databases of other banks, 3 – comparison of two persons on the photo (for example, face in the passport and face of the person holding it), 4 – reserved, 5 – in the photo-database of compromised persons, 6 – comparison with the photo from the document)"

bdfd="A checking sign by compromised persons’ photo database (Code from ref.47)"

fotofd="base64(Photo) photo of a compromised person"

fotoextfd="Expansion to the photo of a compromised person"

commentfd="Commentary on the results of comparison"

verifclient="The sign of the photo match (Code from ref.47)"

fotovc="base64(Photo) sample photo"

fotoextvc="Extension to the photo of the sample photo"

commentvc="Comment on the results of comparison with the sample photo"

confidencefd="A measure of similarity of persons when compared with a photo of a compromised person"

confidencevc="A measure of the similarity of individuals in the customers’ photos"

datefotovc="Date of a sample photo"

phonematch="Result of phones checking"

phonematchref="Result of phones checking in text form" />

<!-- Block "Search in the Register of application photos" -->

<gray inn="TIN, according to which the query register worked"

foto="base64 (Photo) photographing faces from the registry of requests"

fotoext="Extension to the photo of a person from the registry of requests"

datefoto="Date photos from the registry of requests"

confidence="A measure of the similarity of individuals when compared with a photo from the registry of requests"

algsearch="Search type (1 - for a given TIN, 2 - for a given photo)"

algsearchdescr="Type of search in text form" />

<!-- Block "Search in the database of missing people" -->

<resultsearch state="Status of the natural person"

category="Classification of the status of the physical person in text form"

lnameua="Last Name in Ukrainian"

fnameua="Name in Ukrainian"

mnameua="Patronymic in Ukrainian"

lnameru="Last Name in Russian"

fnameru="Name in Russian"

mnameru="Patronymic in Russian"

bdate="Date of birth"

lostdate="date of disappearance"

lostplace="Place of Extinction"

restraint="preventive measure"

contact="Contacts to inform"

confidence="A measure of the similarity of individuals when compared with a photo from the base of the missing person"

foto="base64 (Photo) photographing faces from the base of missing persons"

fotoext="Extension to a photo of a person from the base of missing persons" />

</comp>

<!-- Alert -->

<comp id="18" descr="Components name">

<pret nonewdeal="Sign of reluctance to draw up new loan products, connection status of the FREEZE option: 0 - not enabled, 1 - enabled"

nonewdealref="The value of the sign of unwillingness to draw up new credit products, the connection status of the FREEZE option is 0-no (the option is not connected), 1-yes (the option is connected)"

freezedate="FREEZE option connection date"

nonewdealcomment="Comment"

inn="INN (for natural persons)/OKPO (for legal entities)">

<pretension inn="INN (for natural persons)/OKPO (for legal entities)"

crdeal="Transaction identifier (reference)"

source="Disputing type (Code from ref.48)"

sourceref="Disputing type (Value from ref.48)"

claim="Subject of dispute (Code from ref. 69)"

                         claimref="Subject of dispute (Value from ref. 69)"

vdate="Date of the request creation" />

<commentcki comment="Commentary of the subject of credit history"

vdate="Date of a comment creation" />

<plost pser="Passport series claimed by the client as lost (theft)"

pnom="Passport number declared by the client as lost (theft)"

crdate="ДDate of creation of an application for the loss/theft of a client's passport in UBCH"

ldate="The date of loss / theft of the client's passport indicated in the application in UBCH" />

<changedeal crdeal="Transaction identifier (reference)"

changecode="Code for the reason of correction/deletion of data (Code from ref.62)"

changeref="Text of the reason for correcting/deleting data (Value from ref.62)"

vdate="Date of data correction/deletion" />

</pret>

<fcert inn="TIN"

cert="Availability of a certificate from the UBCH (code from ref. 56) - 0 - no (no registered certificate), 1 - yes (registered certificate) "

certref="Availability of a certificate from the UBCH (value from ref. 56)"

certid="Certificate number"

certurl="Link to the certificate" />

<maybegone inn="TIN"

vdate="Application creation date"

dldonor="Information provider (code from ref. 54)"/>

</comp>

<!-- Search by full name + inn if more than 1 person is found (The presence of the component is determined by searching for more than 1 person in the case of searching by full name + inn)-->

<comp id="72" descr="Search by full name + inn if more than 1 person is found">

<person bdate="Date of birth"

lngref="Search/transfer language (ref. 23)"

lng="Part presentation language, value (ref. 23)"

mname="Middle name"

fname="First name"

lname="Last name"

inn="TIN of the credit history subject" />

</comp>

</ubkidata>

 

freqtype

Description

Reconciliation of incoming photos only, without connection of internal bases

Search in the database of creditor reference photos

Search in the fraud database

Search in the Register of application photos

Search in the database of missing people

Persons wanted

 

freqtype

Description

Reconciliation of incoming photos only, without connection of internal bases

Search in the database of creditor reference photos

Search in the fraud database

Search in the Register of application photos

Search in the database of missing people

Persons wanted

At its own base photo

1

Checking the incoming photo with your own photo, which was previously submitted to the bureau

-

-

-

-

-

-

In the base of the photos of the other banks

2

The incoming photo is checked against the historical photos of all donor organizations except our own

-

+

+

+

+

+

Comparison of two persons on the photo

3

Two photos are sent to the entrance. The person in the first photo is compared with the person in the second photo, in the request you need to send additional parameters for the second photo fotodocext="extension to photo", fotodoc ="photo in base64"

+

-

-

-

-

-

In the base of the photo of the compromised individuals

5

The face in the input photo is checked only against the fraud database.

-

-

+

-

-

-

Check the photo of the document

6

Only a photo of the document without the identity of the client is sent to the entrance. The reconciliation comes with historical photos of all photo donor organizations.

-

+

+

+

+

+

Comparison of two faces in one photo

7

At the entrance, one photo with two people is sent (for example, the client is holding a passport). These two people are reconciled.

+

-

-

-

-

-

Example

Example

Request JSON

{ "doc": { "ubki": { "req_envelope": { "req_xml": { "request": { "i": { "ident": { "okpo": "3278508288", "mname": "VASYLIVNA", "fname": "IRINA", "lname": "HARNA", "bdate": "1989-10-05" }, "fotoverif": { "freqtype": "2", "inn": "3278508288", "facelogic": "3", "fotoext": "jpg", "phone": "+380962134234", "foto": "/9j/4AAQSkZJRgABAQEASABIAA" }, "reqlng": "4" }, "version": "1.0", "reqtype": "17", "reqreason": "2" } } }, "sessid": "6D7D781B1E884A6AB384481804A35EA8" } } }

Response JSON

{ "ubkidata": { "tech": { "trace": { "step": { "name": "build report", "stm": "2022-08-25 15:36:10.798", "ftm": "2022-08-25 15:36:10.936" } }, "reqinfo": { "reqid": "req2#000002459882" } }, "comp": [ { "fotoverif": { "reqtype": "1", "bdfd": "1", "fotofd": "/9j/4AAQuLr5N2zke9//2Q==", "fotoextvc": "jpeg", "datefotovc": "2018-11-21", "commentvc": "The suspicion is not confirmed by the photo", "confidencevc": "0.90923", "phonematch": "2", "phonematchref": "there is a phone match" }, "id": "16", "descr": "Photo Verification" }, { "pret": { "inn": "3278508288", "nonewdeal": "0", "nonewdealref": "No", "nonewdealcomment": "", "freezedate":"" }, "fcert": { "inn": "3278508288", "cert": "0", "certref": "No", "certid": "", "certurl": "" }, "maybegone": { "inn": "3278508288", "vdate": "2022-12-01", "dldonor": "BNK" }, "id": "18", "descr": "Alert" } ] } }

Request XML

<?xml version="1.0" encoding="UTF-8"?> <doc> <ubki sessid="6D7D781B1E884A6AB384481804A35EA8"> <req_envelope> <req_xml> <request version="1.0" reqtype="17" reqreason="2"> <i reqlng="4"> <ident okpo="3278508288" mname="VASYLIVNA" fname="IRINA" lname="HARNA" bdate="1989-10-05" /> <fotoverif freqtype="2" inn="3278508288" facelogic="3" fotoext="jpg" phone="+380962134234" foto="/9j/4AAQSkZJRgABAQEASABIAA" /> </i> </request> </req_xml> </req_envelope> </ubki> </doc>

Response XML

Test URL

Test data

fotoverif: freqtype = "2", inn = "one from the bottom", facerlogic = "3", foto = "be it, go through the rules of validation", fotoext = "jpg/jpeg", phone = "+380662134234"

  • 2111118724, 3233312116, 3112579111  - Photo unfit for service (face not found)

  • 3112579786, 3333312110, 2726020593   - Suspicion on the photo is not confirmed + ext. information by tag Gray

  • 3278508288 - The suspicion of the photo is confirmed

  • 2972566397 - Suspicion on the photo is not confirmed

  • 3332643095, 2929952290 - Suspicion in the photo is not confirmed + ext. information on the tag resultsearch from the missing and the person hiding from the court

  • 2972566111 - The input photo coincided with the reference and the photo of the swindler

 

<comp id="18" descr="Alert">  tag <changedeal> 

  • 3332643095

 

<comp id="72" descr="Search by full name + inn if more than 1 person is found">

  • bdate="1985-03-20" mname="НИКИФОРОВНА" fname="АННА" lname="ЯРЦЕВА"