Identity Verification
Compares a user’s ID document photo to their selfie to determine if both images represent the same person. This endpoint is useful for KYC, onboarding, and fraud prevention.
Endpoint
POST https://cloud.ooto-ai.com/api/v1.0/doc/identify
Request Format
Method: POST
Content-Type: multipart/form-data
Authentication Headers
To access the API, you need to include the following headers in your request:
APP-ID: Your application's unique identifier.
APP-KEY: Your application's authentication key.
Form Data
Field
Type
Required
Description
doc
File
Yes
Photo of the identity document (JPEG or PNG)
selfie
File
Yes
User selfie (JPEG or PNG)
Example Request (cURL)
curl -X POST --location 'https://cloud.ooto-ai.com/api/v1.0/doc/identify' \
--header 'APP-ID: put_app_id_here' \
--header 'APP-KEY: put_app_key_here' \
--form 'doc=@"/path/to/doc_image"' \
--form 'selfie=@"/path/to/selfie_image"'
Replace «app_id», «app_key» with your actual credentials and the path to your doc image.
Successful Response (HTTP 200)
{
"transactionId": "string",
"result": {
"comparison": {
"similarity": 0,
"same": true
},
"face": {
"liveness": {
"score": 0,
"fine": true
},
"deepfake": {
"score": 0,
"fine": true
},
"quality": {
"age": 0,
"gender": "string",
"race": "string",
"pitch": 0,
"yaw": 0,
"roll": 0,
"uniformity": {
"value": 0,
"fine": true
},
"exposure": {
"value": 0,
"fine": true
},
"contrast": {
"value": 0,
"fine": true
},
"flare": {
"score": 0,
"fine": true
},
"blur": {
"score": 0,
"fine": true
},
"macroblocks": {
"score": 0,
"fine": true
},
"distortion": {
"score": 0,
"fine": true
},
"occlusion": {
"score": 0,
"fine": true
},
"emotion": {
"score": 0,
"fine": true
},
"left_eye_closed": {
"score": 0,
"fine": true
},
"right_eye_closed": {
"score": 0,
"fine": true
},
"crfiqa": {
"score": 0,
"fine": true
}
},
"box": {
"x": 0,
"y": 0,
"w": 0,
"h": 0
},
"landmarks": [
[
0
]
]
},
"document": {
"doc": "string",
"ocr": {
"countryName": "string",
"countryName_local": "string",
"dateOfBirth": "string",
"dateOfIssue": "string",
"dateOfExpiration": "string",
"IDPlaceOfBirthCountry": "string",
"givenNames": "string",
"givenNames_local": "string",
"surname": "string",
"surname_local": "string",
"identityCardNumber": "string",
"issuingStateCode": "string",
"sex": "string",
"mrz": "string",
"bookletNumber": "string",
"citizenshipStatus": "string",
"nationality": "string",
"height_cm": 0,
"weight_kg": 0,
"eyes": "string"
},
"position": {
"x": 0,
"y": 0,
"w": 0,
"h": 0,
"angle": 0
},
"portrait": {
"x": 0,
"y": 0,
"w": 0,
"h": 0,
"angle": 0
}
}
}
}
Field Explanation
Field
Description
similarity
Cosine similarity score between document portrait and selfie (0–1)
same
true if above threshold (typically ≥ 0.75)
document.ocr
Parsed fields from the document (name, birth date, number, etc.)
document.portrait.box
Bounding box of the extracted portrait photo
selfie.face.box
Bounding box of face on the selfie
Error response (HTTP 400)
{
"transactionId": "efb66e50-4c87-493d-b026-543dacdbe314",
"result": {
"status": "error",
"code": 5,
"info": "can not detect document"
}
}
Engine & OCR Errors
Code
Info
1
photo should not be empty
2
wrong mime-type in input data
3
photo size is 0 bytes
4
can not decode image, check it is valid jpeg or png file
5
can not detect face (in selfie)
6
more than one face detected on photo
8
portrait from document not similar to template
9
can not extract features from sample
201
can not detect document
202
more than one document detected
203
can not make OCR for document
208
can not find portrait on document
209
insufficient resolution of the photo
Notes
Both images must be high quality and well-lit
Document must be fully visible (no cropping or glare)
Only one face must be visible per image
Supports passports, ID cards, driver’s licenses (MRZ and visual zone)
Last updated