API reference
The following provides information about API endpoints, response and error codes.
Endpoints
You can create two types of requests using the API:
Endpoint | Description |
---|---|
Use Yoti's Age estimation verify service. | |
Use Yoti's Age estimation verify service and the Anti-spoofing check. |
Request
The JSON object body for the API request has the following structure:
{
"img": "base64_image",
"threshold": "age_threshold",
"operator": "OVER" | "UNDER",
"metadata": (Optional) {
"device": "mobile", "laptop", "unknown"
},
}
Example request
A typical API request would have the following JSON body:
{
"img": "/9j/4AAQSkZJRgABAgAAAQABAAD/2wAcHNXCKigjEaYH51Me1Zy1Za0P/Z....",
"threshold": 25,
"operator": "OVER",
"metadata": {
"device": "mobile"
}
}
Relaxed image requirements
When using the Age only endpoint, it is possible to lower the threshold for face detection and image validation. A reason for this might be that images are not being captured live through Yoti's Face Capture module, or you may want to estimate age for images without needing to perform a liveness check.
{
"img": "/9j/4AAQSkZJRgABAgAAAQABAAD/2wAcHNXCKigjEaYH51Me1Zy1Za0P/Z....",
"img_validation_level": "low"
}
Response
The JSON object body returned from the API has the following structure:
{
"age": {
"age_check": "pass | fail" (string)
},
"antispoofing": {
"prediction": "real | fake"
}
}
Response | Explained |
---|---|
Prediction - real | Yoti has detected a real user. |
Prediction - fake | Yoti has detected a spoof attempt. |
Age - pass | The estimation age of the user has passed the age threshold. |
Age - fail | The estimation age of the user has failed the age threshold. |
Example response
The response received from the API will be below, depending on the endpoint used.
{
"age_check": "pass"
}
{
"age": {
"age_check": "pass"
},
"antispoofing": {
"prediction": "real"
}
}
Error codes
In case of any failure, you will receive the following error responses:
Error code | Error | Description |
---|---|---|
404 | APP_NOT_FOUND | Application app_id not found. |
401 | INVALID_X_YOTI_AUTH_ID |
|
400 | INVALID_APP_ID | Application id cannot be empty. |
400 | INVALID_PUBLIC_KEY | Application public key cannot be empty. |
403 | DISABLED_APP_STATE | Application must be enabled. |
400 | INVALID_ORG_ID | Organisation id cannot be empty. |
400 | INVALID_BILLING_SOURCE_ID | Application billing source id cannot be empty. |
404 | ORG_NOT_FOUND | Organisation org_id not found. |
401 | INVALID_YOTI_AUTH_DIGEST |
|
401 | INVALID_NONCE |
|
401 | INVALID_TIMESTAMP |
|
401 | INVALID_PUBLIC_KEY_ENCODING | Failed to load public key. key is not der encoded. |
401 | UNSUPPORTED_ALGORITHM | Serialised key is of a type that is not supported by the backend. |
401 | INVALID_SIGNATURE | Failed to verify signature. |
403 | INVALID_ORG_STATUS | Organisation has an invalid status. |
404 | INVALID_METADATA_DEVICE | Invalid device metadata provided. |
400 | INVALID_BODY_ENCODING | Request body should be a valid JSON. |
404 | INVALID_ENDPOINT | The endpoint request is invalid. |
413 | PAYLOAD_TOO_LARGE | Payload too large. |
400 | IMAGE_NOT_PROVIDED | Image has not been provided. |
400 | INVALID_B64_IMAGE |
|
400 | UNSUPPORTED_IMAGE_FORMAT | Image format not supported. Please use JPEGs (95 to 100 quality) and PNGs. |
400 | IMAGE_SIZE_TOO_BIG | Image size too big, the maximum size is 1.5MB. |
400 | IMAGE_SIZE_TOO_SMALL | Image size too small, the minimum size is 50KB. |
400 | MIN_HEIGHT | The image height is incorrect. Image minimum height required is 300 pixels. |
400 | MAX_HEIGHT | The image height is incorrect. Image maximum height required is 2000 pixels. |
400 | MIN_WIDTH | The image width is incorrect. Image minimum width required is 300 pixels. |
400 | MAX_WIDTH | The image width is incorrect. Image maximum width required is 2000 pixels. |
400 | MIN_PIXELS | To process the image the minimum number of pixels required is 90,000 pixels. |
400 | MAX_PIXELS | To process the image the maximum number of pixels required is 2,100,000 pixels. |
400 | IMAGE_WRONG_CHANNELS | Missing colour channel, the input image must be RGB or RGBA. |
400 | IMAGE_GRAYSCALE_NOT_SUPPORTED | Grayscale images not supported. |
503 | SERVICE_UNAVAILABLE | The service is temporarily unavailable. |
400 | FACE_NOT_FOUND | Face not found. |
400 | MULTIPLE_FACES | Multiple faces in the image provided. |
400 | FACE_BOX_TOO_SMALL | The face in the image provided is too small. |
400 | FACE_TO_IMAGE_RATIO_TOO_LOW | Face ratio is lower than the minimum ratio. |
400 | FACE_TO_IMAGE_RATIO_TOO_HIGH | Face ratio is bigger than the maximum ratio. |
400 | INSUFFICIENT_AREA_AROUND_THE_FACE | Insufficient area around the face in the image provided. |
400 | IMAGE_TOO_BRIGHT | Image too bright.. |
400 | IMAGE_TOO_DARK | Image too dark. |
400 | INVALID_LEVEL_OF_ASSURANCE | Invalid antispoofing level of assurance provided. |
400 | INVALID_REQUEST_BODY | Request body is invalid, '-' field is invalid. |
400 | INVALID_IMG_VALIDATION_LEVEL | The image validation level is invalid. |
401 | UNAUTHORIZED | The X-Yoti-Auth-Id provided isn't authorized to access this resource. |
500 | FAIL_PREDICTION |
|
500 | UNSPECIFIED_ERROR | An internal server error occurred. |
400 | SECURE_REQUEST_IS_EMPTY | Secure request field is empty. |
400 | SECURE_SESSION_NOT_FOUND | Secure session not found. |
400 | SECURE_SIGNATURE_NOT_FOUND | Secure signature not found. |
400 | SECURE_VERSION_NOT_FOUND | Secure version not found. |
400 | INVALID_SECURE_SIGNATURE | Failed to verify secure session signature. |
400 | SECURE_VERIFICATION_NOT_FOUND | Secure verification not found. |
400 | UNTRUSTED_SECURE_SESSION | Untrusted secure session |
401 | INVALID_SECURE_SESSION | Invalid secure session token. |