Document Verification (Beta)
Product is in beta, please contact support if you require access to this product.

Overview

The Document Verification product lets you verify the authenticity of Identity documents submitted by your users and confirm that the document actually belongs to the user by comparing the user's selfie to the photo on the document. To run a document verification job, we require:
  1. 1.
    A selfie of the user
  2. 2.
    An image of the document
  3. 3.
    The document type and the country of issuance (this must be one of our supported document type and country, all supported documents and countries is listed in the next section)

Supported Documents

Currently, we only verify the document types listed below, more document types and countries coming soon.
Country
Country Code
Document Type Keyword
🇧🇼
Botswana
BW
EPASSPORT
Botswana
BW
DRIVERS_LICENSE
Botswana
BW
NATIONAL_ID
🇨🇲
Cameroon
CM
EPASSPORT
Cameroon
CM
PASSPORT
Cameroon
CM
NATIONAL_ID
🇨🇮
Côte d’Ivoire
CI
PASSPORT
Côte d’Ivoire
CI
NATIONAL_ID
🇬🇦
Gabon
GA
PASSPORT
🇬🇭
Ghana
GH
PASSPORT
Ghana
GH
DRIVERS_LICENSE
Ghana
GH
ECOWAS_ID
Ghana
GH
SSNIT
Ghana
GH
NATIONAL_ID
Ghana
GH
NATIONAL_ID_NON_CITIZEN
Ghana
GH
VOTER_ID
🇰🇪
Kenya
KE
NATIONAL_ID
Kenya
KE
PASSPORT
🇲🇼
Malawi
MW
DRIVERS_LICENSE
Malawi
MW
PASSPORT
🇲🇺
Mauritius
MU
PASSPORT
Mauritius
MU
NATIONAL_ID
🇳🇦
Namibia
NA
EPASSPORT
Namibia
NA
DRIVERS_LICENSE
Namibia
NA
NATIONAL_ID
🇳🇬
Nigeria
NG
PASSPORT
Nigeria
NG
DRIVERS_LICENSE
Nigeria
NG
VOTER_ID
🇷🇼
Rwanda
RW
PASSPORT
Rwanda
RW
DRIVERS_LICENSE
Rwanda
RW
RWANDA_CARD
Rwanda
RW
NATIONAL_ID
🇸🇳
Senegal
SN
PASSPORT
Senegal
SN
ECOWAS_ID
Senegal
SN
NATIONAL_ID
🇿🇦
South Africa
ZA
PASSPORT
South Africa
ZA
DRIVERS_LICENSE
South Africa
ZA
NATIONAL_ID
South Africa
ZA
NATIONAL_ID_DOC
🇹🇿
Tanzania
TZ
NATIONAL_ID
Tanzania
TZ
EPASSPORT
Tanzania
TZ
VOTER_ID
🇺🇬
Uganda
UG
PASSPORT
Uganda
UG
NATIONAL_ID
🇿🇲
Zambia
ZM
PASSPORT
Zambia
ZM
DRIVERS_LICENSE

Integration Options

Currently available via the Rest API.

Image Specifications

To check the authenticity of the document, we require high resolution images. The image should be cropped to include the entire document with minimal background. The following is the minimum specification we require for the document image:
  • Aspect ratio: 1.5
  • Minimum resolution: 1024x768

Request Values

You need to perform two steps to use this product:
  • Make a request to Smile Identity for a job to be performed
  • Upload the job payload

Making a Job Request

Request Type: POST
Keys
Type
Required
Description
file_name
string
Yes
This is the name of the zip file that will be uploaded in the PUT request to the upload URL
signature
string
Yes
Your calculated access signature
timestamp
string
Yes
The timestamp that was used to calculate the signature (in ISO date/time format)
smile_client_id
string
Yes
This is your partner id which can be found on the side navigation panel of the Smile ID partner portal
partner_params
object
Yes
A JSON object containing the partner parameters below as well as any additional key value pairs you wish to include for tracking which will be returned in the response
{job_type
string
Yes
The type of job you want to perform. This will be set to "6"
job_id
string
Yes
A value generated by you, so you can track jobs on your end. This value must be unique, can be any string and can follow your identifier convention
user_id}
string
Yes
A value generated by you, so you can track users on your end. This value must be unique, can be any string and can follow your identifier convention
model_parameters
string
No
This parameter is specific to mobile SDK, can be left as an empty JSON object
callback_url
string
Yes
A publicly available endpoint on your system where Smile ID will send the results of a job to in the form of a POST request (with no authorisation headers)
At the end of the request, you will receive a job number for tracking and a url where you will be uploading your images.

Example Request

1
{
2
"file_name": "attachments.zip",
3
"signature": "<calculated signature>",
4
"timestamp": <timestamp e.g. 2021-08-12T17:57:00.614879>,
5
"smile_client_id": "<partner id>",
6
"partner_params":
7
{
8
"job_type": "6"
9
"job_id":"job_09876",
10
"user_id":"user_12345",
11
},
12
"model_parameters": {},
13
"callback_url": "https://<partner side callback URL>/"
14
}
Copied!
In the response body to the prep upload request, you will receive an AWS s3 bucket link. You will upload the images for face and identity document verification to this link. The URL is structured like:
"https://smile-uploads-test.s3.us-west-2.amazonaws.com/videos/ <partner_id>/<partner_id>-<smile_job_id>-<random hash>/attachments.zip ?AWSAccessKeyId=<> &Content-Type=application%2Fzip &Expires=1598449184&Signature=<> &x-amz-security-token=<>&x-amz-server-side-encryption=AES256"

Example Response

200: OK
A record has now been created waiting for the job to be processed once the required data has been uploaded
1
{
2
"upload_url": "https://smile-uploads-test.s3.us-west-2.amazonaws.com/videos/<partner_id>/<partner_id>-<smile_job_id>-<random hash>/selfie.zip?AWSAccessKeyId=<>&Content-Type=application%2Fzip&Expires=1598449184&Signature=<>&x-amz-security-token=<>&x-amz-server-side-encryption=AES256",
3
"ref_id": "<partner_id>-<smile_job_id>-<random hash>",
4
"smile_job_id": "0000000001",
5
"camera_config": "null", ---sdk specific---
6
"code": "2202"
7
}
Copied!
400: Bad Request
Trying to use a job_id in partner_params that has already been used
1
{
2
"error": "Job already exists. Did you mean to set the retry flag to true?",
3
"code": "2215"
4
}
Copied!

Uploading the Job Payload

To perform a job, Smile ID requires a Zip file that contains the following information:
  • images - images are Selfie and/or ID card photo and/or liveness images
  • Info.json file - the structure of the info.json file is detailed below
The Zip file must have the same name as the file_name specified while making a job request (prep upload). In the case of the example request above, the filename will be attachments.zip.
Request Type: PUT
Environment
URL
Sandbox
Upload URL you were supplied while making a Job Request
Production
Upload URL you were supplied while making a Job Request
The request body will be of type binary (the zip file)

Info.json file

The info.json file contains the selfie and ID card images required to process the document verification job. The images can either be parsed inline as a base64 encoded string or the image files themselves can be zipped with the info.json file. The supported file types for the images are png and jpg.
The structure of the info.json file is detailed below
Parameter
Description
package_information
This contains information about the rest api you’re calling. We recommend you use the following as the package_information:
"package_information":
{
"apiVersion": {
"buildNumber": 0,
"majorVersion": 2,
"minorVersion": 0
} }
id_info
The country and id type you want to verify. The uploaded ID card image must match the country and id type you specify in this json object. To view the list of supported documents check the supported documents section on this page. "id_info":
{
"country":"<country code e.g. KE>",
"id_type":"<smile ID type keyword e.g. NATIONAL_ID>"
}
images
The images required for the document verification job. There are 3 image types that can be uploaded:
  • Selfie - a single coloured selfie image of the user.
  • Liveness images (optional) - 7-8 grayscale images of the user’s face captured while the user was prepping to take the selfie image (it’s recommended you use either our mobile SDKs or Javascript SDK to capture the liveness images).
  • ID card image - a single front image of the user’s ID card or two images (front and back of ID card) if the back of the ID card contains vital information such as MRZ code.
The images can be added as base64 encoded strings or the image files themselves can be added to the zip and the filename specified in the info.json. {
"image_type_id": “varies based on image type and type of upload either base64 string or filename. Read more on image types in FAQs”,
"image": "<base64 string of image>",
"file_name": "<name of file in the zip that will be uploaded>"
}
Depending on the image_type_id one of the other parameters (image or file_name) will be an empty string (“”)

Info.json Example

The zip file contains the info.json file only (if images are inline i.e. supplied as base64 encoded strings) or both an info.json file and image files (if the image files themselves are uploaded).
Example zip file and info.json when images are inline (i.e. base64 encoded strings)
The zip file contains only the info.json file and no image files.
The content of the info.json file below:
1
{
2
"package_information":
3
{
4
"apiVersion": {
5
"buildNumber": 0,
6
"majorVersion": 2,
7
"minorVersion": 0
8
}
9
},
10
"id_info":
11
{
12
"country":"<country code e.g. NG>",
13
"id_type":"<smile ID type keyword e.g. PASSPORT>",
14
},
15
"images": [
16
{
17
<Use this for the selfie>
18
"image_type_id": 2,
19
"image": "iVBORw0KGgoAAAANSUhEUgAAArgWElmTU0A- - -truncated base64 string",
20
"file_name": ""
21
}
22
{
23
<Use this for the ID card>
24
"Image_type_id": 3,
25
"image": "iVBORw0KGlDQ1BJQ0MgUHJvZmlsZQAASImVVw- - -truncated base64 string",
26
"file_name": ""
27
}
28
]
29
}
Copied!
Example zip file and info.json when images are uploaded as files
The zip file contains the info.json file, selfie and ID card images.
The content of the info.json file below:
1
{
2
"package_information":
3
{
4
"apiVersion": {
5
"buildNumber": 0,
6
"majorVersion": 2,
7
"minorVersion": 0
8
}
9
},
10
"id_info":
11
{
12
"country":"<country code e.g. NG>",
13
"id_type":"<smile ID type keyword e.g. PASSPORT>",
14
},
15
"images": [
16
{
17
<Use this for the selfie>
18
"image_type_id": 0,
19
"image": "",
20
"file_name": "Selfie.jpeg"
21
}
22
{
23
<Use this for the ID card>
24
"Image_type_id": 1,
25
"image": "",
26
"file_name": "ID.png"
27
}
28
]
29
}
Copied!

How Smile ID Processes the Job

Action
Description
Proof of life & spoof detection
Performed on user submitted selfie
Selfie compares
Selfie comparison to user submitted document image
Document Verification
To verify the document we confirm the following:
  • The data on the document is consistent i.e. MRZ and Human readable information match
  • Document has visible security features
  • Document is not expired
  • Document image is not blurry and can be processed
  • The document image provided matches the document type the user claims to have submitted

Return Values

The full list of keys and possible return values are highlighted below:
Name
Type
Description
Value
PartnerParams.job_id
String
A unique reference defined by you to keep track of the job
PartnerParams.job_type
String
The type of job you performed.
“6”
PartnerParams.user_id
String
A unique reference defined by you to keep track of the user
ResultCode
String
Numeric value of the job outcome.
For a list of potential error codes see here.
ResultText
String
Textual value of the job outcome. Human readable value for the result.
List of all result text is listed here.
SmileJobID
String
The Smile internal reference number for the job
Country
String
The country of issuance of the ID type
IDType
String
The ID type of the document ID
IDNumber*
String
The ID number extracted from the document ID either by OCR or decoding the MRZ
FullName*
String
The full names on the document ID extracted either by OCR or decoding the MRZ
DOB*
String
The date of birth extracted from the document ID either by OCR or decoding the MRZ
Gender*
String
The gender extracted from the document ID either by OCR or decoding the MRZ
ExpirationDate*
String
The expiration date of the document ID extracted from the document ID either by OCR or decoding the MRZ
Document
String
The cropped and upright document image returned as a base64 string
PhoneNumber*
String
The phone number extracted from the document ID either by OCR or decoding the MRZ
PhoneNumber2*
String
The second phone number extracted from the document ID either by OCR or decoding the MRZ
Address*
String
The address extracted from the document ID either by OCR or decoding the MRZ
signature
String
The outgoing signature, you can use this to verify that the response is from Smile ID
timestamp
String
The outgoing timestamp in ISO date/time format, use this to calculate the outgoing Signature
Actions
Object
The JSON object contains the results of checks Smile ID performed on the job
{Human_Review_Compare
String
If the Smile ID system can not automatically decide on the face compares it will be reviewed by humans and the result will be displayed here
“Passed”
“Failed”
“Unable to Determine”
“Not Applicable”
Human_Review_Liveness_Check
String
If the Smile ID system can not automatically decide on the liveness of the user submitted selfie, it will reviewed by humans. The result is displayed here
“Passed”
“Failed”
“Unable To Determine”
“Not Applicable”
Liveness_Check
String
Liveness check on user provided selfie
“Passed”
“Failed”
“Under Review”
“Not Applicable”
Register_Selfie
String
Register selfie of user
“Approved”
“Rejected”
“Not Applicable”
Verify_Document
String
Verify the document ID submitted by the user
“Passed”
“Failed”
“Under Review”
“Not Applicable”
Return_Personal_Info
String
Return user’s PII from OCR / MRZ
“Returned”
“Not Returned”
“Not Applicable”
Selfie_To_ID_Card_Compare}
String
Compare user-submitted selfie to photo on user-submitted ID card
“Completed”
“Under Review”
“Not Applicable”
*Only returned if information is on the physical ID card

Example JSON Response

1
{
2
DOB: "1989-01-20",
3
FullName: “John Joe Doe”,
4
Gender: “M”,
5
IDType: "PASSPORT",
6
Actions: {
7
Liveness_Check: "Passed",
8
Register_Selfie: "Approved",
9
Verify_Document: "Passed",
10
Human_Review_Compare: "Passed",
11
Return_Personal_Info: "Returned",
12
Selfie_To_ID_Card_Compare: "Completed",
13
Human_Review_Liveness_Check: "Passed"
14
},
15
Country: "NG",
16
Document: "----base64 encoded string----”,
17
IDNumber: "B00123456",
18
ResultCode: "0810",
19
ResultText: "Document Verified After Human Review",
20
SmileJobID: "0000000046",
21
PartnerParams: {
22
job_id: "Testing_0036",
23
user_id: "Test_0036",
24
job_type: "6"
25
},
26
ExpirationDate: "2025-11-26",
27
timestamp: "2021-12-14T20:07:56.829Z",
28
signature: "---signature---”
29
}
30
Copied!

Evaluating the Results

Actions performed on the product are not completed at the same time, so we send results to your callback endpoint when they are ready. Also, if the Smile Identity system can not automatically make a decision on an action it is passed to our human reviewers, the system decision is sent via callback once the reviewers make a final decision.
The Document Verification can fail for multiple reasons:
  1. 1.
    A spoof was detected on the submitted selfie - if we believe the selfie has been tampered with or is a picture of a picture, the document verification will fail.
  2. 2.
    The submitted selfie does not match the face on the document - if the selfie and face on the document do not match, the document verification job will fail.
  3. 3.
    The document is expired.
  4. 4.
    The OCR extracted information and the decoded MRZ information do not match e.g. name encoded in the MRZ does not match the name that can be seen on the document.
  5. 5.
    The document image or selfie is blurry.
  6. 6.
    Some known visible security features on the document are missing e.g. the coat of arms on a Nigerian driver’s license.
  7. 7.
    The id type specified by the user does not match our system’s classification of the document type.

Result Codes and Result Texts

Result codes details what the current (or final) result of a job is. Result Codes for all jobs fall into one of two categories:
  1. 1.
    Approved (or Pass) This means that all applicable Actions passed and the overall job was approved.
  2. 2.
    Rejected (or Fail) This means that one or more of the applicable Actions for job failed, and thus, the overall job was rejected according to Smile Identity standards.

General Failures Result Codes and Texts

This means no further processing is possible on the job. General failures occur when a job could not be submitted due to a logical/technical issue. These jobs do not show up in the portal and do not have a Smile Job ID.
Code
Text
Description
Category
0001
Data Invalid
Rejected
0903
Zip Corrupt
The uploaded Zip file is corrupted.
Rejected
2405
Error - "You are not authorised to do that" *
An invalid signature was used to sign the request.
-
2314
Error - No Zip File Received
No Zip files was uploaded.
-
2203
Error - Invalid JSON
The info.json file in the Zip is not properly structured. Ensure all keys are present and properly named.
-
2213
Error - A required parameter is missing
Not all the required keys were submitted in the info.json or request payload. Please check request values for this product.
-
2204
Error - A parameter is of the wrong data type
The format of one of the request values was wrong. Please check request values for this product.
-
2205
Error - You are not authorised to do that. *
An invalid signature was used to sign the request. Please ensure you are using the correct signature for the environment (ie: sandbox vs production)
-
2220
Error - Production is not enabled for this account. Please complete your KYC with Smile Identity.
You have not completed your KYC.
-
2212
Error - Invalid job type
An invalid value was inputted in the job_type key. Change the value to "6".
-
2209
Error - Wrong user id. This user is already enrolled with user_id
An existing user_id was inputted. Enter a unique user id.
2215
Error - Job already exists for job_id
An existing job_id was inputted. Enter a unique job id.
-
* Read more on how to troubleshoot this error here

Product Specific Result Codes and Texts

Code
Text
Description
Category
0810
Document Verified
Images matched, no spoof was detected on Selfie and the document is valid.
Approved
0811
Unable to Verify Document - reason
Document verification failed due to the reason highlighted
Rejected

Running in Sandbox

Document verification can be tested in our sandbox environment. However, you will get a simulated response. In sandbox, the document verification job is processed as described below:
  • The selfie is compared to the photo on the identity document, if both images do not match the document verification job fails
  • The authenticity of the document is not confirmed and we will always return the document as been valid
  • The values you parse in id_type and country are not checked with the supported countries and ids

Performing Document Verification with a Registered User’s Selfie

Document verification can be performed on users that have been previously enrolled successfully through an Enhanced KYC + SmartSelfie™ or SmartSelfie™ Authentication - User Enrolment.
When performing document verification for an already enrolled user, you do not need to submit a selfie in the info.json file. You only send the user_id of the user, the image of the document ID, and set the flag use_enrolled_image to true during prep upload.

Request Values

You need to perform two steps to use this product:
  1. 1.
    Make a request to Smile Identity for a job to be performed
  2. 2.
    Upload the job payload

Making a Job Request

Request Type: POST
Keys
Type
Required
Description
file_name
string
Yes
This is the name of the zip file that will be uploaded in the PUT request to the upload URL
signature
string
Yes
Your calculated access signature
timestamp
string
Yes
The timestamp that was used to calculate the signature (in ISO date/time format)
smile_client_id
string
Yes
This is your partner id which can be found on the side navigation panel of the Smile ID partner portal
use_enrolled_image
boolean
No
Perform document verification for a registered user i.e. use the user’s registered selfie
partner_params
object
Yes
A JSON object containing the partner parameters below as well as any additional key value pairs you wish to include for tracking which will be returned in the response
{job_type
string
Yes
The type of job you want to perform. This will be set to "6".
job_id
string
Yes
A value generated by you, so you can track jobs on your end. This value must be unique, can be any string and can follow your identifier convention
user_id}
string
Yes
An existing user_id. The uploaded document will be compared to the selfie registered to this user.
model_parameters
string
No
This parameter is specific to mobile SDK, can be left as an empty JSON object
callback_url
string
Yes
A publicly available endpoint on your system where Smile ID will send the results of a job to in the form of a POST request (with no authorisation headers)
At the end of the request, you will receive a job number for tracking and a url where you will be uploading your images

Example Request

1
{
2
"file_name": "attachments.zip",
3
"signature": "<calculated signature>",
4
"timestamp": <timestamp e.g. 2021-08-12T17:57:00.614879>,
5
"smile_client_id": "<partner id>",
6
"use_enrolled_image": true,
7
"partner_params":
8
{
9
"job_type": "6"
10
"job_id":"job_09876",
11
"user_id":"user_12345",
12
},
13
"model_parameters": {},
14
"callback_url": "https://<partner side callback URL>/"
15
}
Copied!
In the response body to the prep upload request, you will receive an AWS s3 bucket link. You will upload the images for face and identity document verification to this link. The URL is structured like:
"https://smile-uploads-test.s3.us-west-2.amazonaws.com/videos/ <partner_id>/<partner_id>-<smile_job_id>-<random hash>/attachments.zip ?AWSAccessKeyId=<> &Content-Type=application%2Fzip &Expires=1598449184&Signature=<> &x-amz-security-token=<>&x-amz-server-side-encryption=AES256"

Example Response

200: OK
A record has now been created waiting for the job to be processed once the required data has been uploaded
1
{
2
"upload_url": "https://smile-uploads-test.s3.us-west-2.amazonaws.com/videos/<partner_id>/<partner_id>-<smile_job_id>-<random hash>/selfie.zip?AWSAccessKeyId=<>&Content-Type=application%2Fzip&Expires=1598449184&Signature=<>&x-amz-security-token=<>&x-amz-server-side-encryption=AES256",
3
"ref_id": "<partner_id>-<smile_job_id>-<random hash>",
4
"smile_job_id": "0000000001",
5
"camera_config": "null", ---sdk specific---
6
"code": "2202"
7
}
Copied!
400: Bad Request
Trying to use a job_id in partner_params that has already been used
1
{
2
"error": "Job already exists. Did you mean to set the retry flag to true?",
3
"code": "2215"
4
}
Copied!

Uploading the Job Payload

To perform a job, Smile ID requires a Zip file that contains the following information:
  • ID card image
  • Info.json file - the structure of the info.json file is detailed below
The Zip file must have the same name as the file_name specified while making a job request (prep upload). In the case of the example request above, the filename will be attachments.zip.
Request Type: PUT
Environment
URL
Sandbox
Upload URL you were supplied while making a Job Request
Production
Upload URL you were supplied while making a Job Request
The request body will be of type binary (the zip file)

Info.json file

The info.json file contains the ID card image required to process the document verification job. The image can either be parsed inline as a base64 encoded string or the image files themselves can be zipped with the info.json file. The supported file types for the images are png and jpg.
The structure of the info.json file is detailed below
Parameter
Description
package_information
This contains information about the rest api you’re calling. We recommend you use the following as the package_information:
"package_information":
{
"apiVersion": {
"buildNumber": 0,
"majorVersion": 2,
"minorVersion": 0 }
}
id_info
The country and id type you want to verify. The uploaded ID card image must match the country and id type you specify in this json object. To view the list of supported documents check the supported documents section on this page. "id_info":
{
"country":"<country code e.g. KE>",
"id_type":"<smile ID type keyword e.g. NATIONAL_ID>"
}
images
The image required for the document verification job. There is only one image type required, since the job will use a registered selfie:
  • ID card image - a single front image of the user’s ID card or two images (front and back of the ID card) if the back of the ID card contains vital information such as MRZ code.
The images can be added as base64 encoded strings or the image files themselves can be added to the zip and the filename specified in the info.json. {
"image_type_id": “varies based on image type and type of upload either base64 string or filename. Read more on image types in FAQs”,
"image": "<base64 string of image>",
"file_name": "<name of file in the zip that will be uploaded>"
}
Depending on the image_type_id one of the other parameters (image or file_name) will be an empty string (“”)

Info.json Example

The zip file contains the info.json file only (if images are inline i.e. supplied as base64 encoded strings) or both an info.json file and image files (if the image files themselves are uploaded).
Example zip file and info.json when images are inline (i.e. base64 encoded strings)
The zip file contains only the info.json file and no image files.
The content of the info.json file below:
1
{
2
"package_information":
3
{
4
"apiVersion": {
5
"buildNumber": 0,
6
"majorVersion": 2,
7
"minorVersion": 0
8
}
9
},
10
"id_info":
11
{
12
"country":"<country code e.g. NG>",
13
"id_type":"<smile ID type keyword e.g. PASSPORT>",
14
},
15
"images": [
16
{
17
<Use this for the ID card>
18
"Image_type_id": 3,
19
"image": "iVBORw0KGlDQ1BJQ0MgUHJvZmlsZQAASImVVw- - -truncated base64 string",
20
"file_name": ""
21
}
22
]
23
}
Copied!
Example zip file and info.json when images are uploaded as files
The zip file contains the info.json file and the ID card image.
The content of the info.json file below:
1
{
2
"package_information":
3
{
4
"apiVersion": {
5
"buildNumber": 0,
6
"majorVersion": 2,
7
"minorVersion": 0
8
}
9
},
10
"id_info":
11
{
12
"country":"<country code e.g. NG>",
13
"id_type":"<smile ID type keyword e.g. PASSPORT>",
14
},
15
"images": [
16
{
17
<Use this for the ID card>
18
"Image_type_id": 1,
19
"image": "",
20
"file_name": "ID.png"
21
}
22
]
23
}
Copied!
The return values, result codes and texts all remain the same as submitting the job with a selfie
Last modified 7d ago