Skip to Content
Get Job Data

Get Job Data API

Retrieves the complete data payload for an onboarding job by its jobId.

The response body returns the application payload directly — identical to the webhook payload format, without the top-level event envelope object.

Use this endpoint when you want to pull results on your own schedule: as a fallback while webhooks are unconfigured or your listener is down, to backfill after an outage, or to re-read an application at any later time. Webhook delivery is the push equivalent and carries the same body; see Webhooks Overview.


Endpoint

POST https://portal.idmission.com/api/get-job-data Content-Type: application/json X-Api-Key-Id: urn:apikeysv1:prod:region:company:YOUR_KEY_UUID X-Api-Key-Secret: YOUR_API_KEY_SECRET

Call this endpoint from your server only. Never expose the API key secret in client-side code or mobile apps.


Authentication

Send the API key as two request headers:

HeaderRequiredDescription
X-Api-Key-IdYesAPI key identifier (URN format)
X-Api-Key-SecretYesAPI key secret

Credentials are not accepted in the request body. Sending them there returns HTTP 401.

OnBo validates the key and restricts job access strictly to the key’s bound company. Requesting a jobId that belongs to another company returns HTTP 404.


Request body

Send a JSON object containing the target jobId:

{ "jobId": "019fd6b7-3def-7ece-bd47-788508d3424d" }

Fields

FieldRequiredTypeDescription
jobIdYesStringUnique job identifier returned when the job was created

The jobId is passed in the request body (rather than URL path parameters) to keep job identifiers out of access logs and query strings.


Success response (200)

Returns the application payload directly — the same body an Onbo webhook carries, without the top-level event envelope, because a pull response describes no event.

The payload is organised into a small number of top-level objects. Every one except applicationDetails is omitted when the application produced nothing for it, so treat a missing key as “nothing to report”, never as an error:

ObjectContents
applicationDetailsWhich application this is — id, journey, status, timestamps. Always present.
verificationResultWhat the automated checks concluded — deduplication, face match and liveness, identity fraud.
documentsCaptured document URNs, grouped by kind.
applicantDataEverything about the person.
employeeI9DetailsI-9 specific fields. I-9 journeys only.
reviewDetailsThe human reviewer’s decision. Only for applications that were reviewed.

This endpoint always returns unmasked personal data, regardless of the PII mode configured for your webhook deliveries.

For the complete field dictionary — every object, field, type, and PII behavior — see the Webhook Payload Reference. The sections below summarise the response shape.

{ "applicationDetails": { "applicationId": "019fd6b7-3def-7ece-bd47-788508d3424d", "externalId": "REQ-2026-0084417", "companyId": "company-xyz-123", "journey": "employee_i9_onboarding", "status": "approved", "applicationCreatedAt": "2026-03-15T14:26:29Z", "applicationUpdatedAt": "2026-03-16T10:00:00Z" }, "verificationResult": { "dedupResult": { "matchFound": false, "matchCount": 0 }, "documentValidationResult": { "isLive": true, "selfieLiveCheckStatus": "Live Face Detected", "faceVerificationResult": "Verified", "faceVerificationScore": 86.09, "realScore": 0.921, "verificationResult": "Approved", "verificationResultCode": "00", "cellPhone": false, "cellPhoneScore": 0, "faceMask": false, "faceMaskScore": 0.023, "advancedLiveness": { "status": "AUTHENTIC", "score": 0.15 }, "idvFaceMatchDecision": { "Decision_FaceMatch": { "result": "OK", "stateCode": "00" }, "Decision_Expiration": { "result": "OK", "stateCode": "00" }, "Decision_Tamper": { "result": "OK", "stateCode": "00" } } }, "identiFraud": [ { "serviceName": "IdentiFraud", "profiles": [ { "firstName": "JANE", "lastName": "DOE", "address": "100 MAIN STREET", "city": "PHOENIX", "state": "AZ", "zipCode": "85001", "idNumber": "•••••0000", "dateOfBirths": "01/15/1990", "verificationResult": { "verified": true, "scores": [ { "fieldName": "name", "score": 100 } ] } } ] } ] }, "documents": { "id": { "idFront": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000f1", "idBack": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000f5", "idFrontListC": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000f8", "idBackListC": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000f9", "idFrontSecondListA": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000fa", "idBackSecondListA": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000fb", "videoIdImageFront": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000fc", "videoIdImageBack": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000fd", "videoData": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000fe" }, "selfie": { "selfie": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000f2", "selfieImage": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000f3", "enrollmentSelfie": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000f7", "signatureSelfieImage": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000f6" }, "signature": { "signatureImage": "urn:documentsv1:prod:00000000-0000-0000-0000-000000000001", "signatureVideo": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000f4" }, "other": { "i9FormPDF": "urn:documentsv1:prod:00000000-0000-0000-0000-0000000000f0" } }, "applicantData": { "personalData": { "name": "Jane Doe", "firstName": "Jane", "middleName": "A.", "lastName": "Doe", "email": "jane@example.com", "phone": "+15551234567", "dob": "01/15/1990", "gender": "F", "ssn": "123-45-6789", "address": "100 Main Street, Apt 4B", "addressLine1": "100 Main Street", "addressLine2": "Apt 4B", "city": "Phoenix", "state": "Arizona", "country": "UNITED STATES", "postalCode": "85001", "linkUniqueId": "USR-994812" }, "addressDetails": { "streetAddress": "100 Main Street, Apt 4B", "city": "Phoenix", "state": "Arizona", "postalCode": "85001", "country": "UNITED STATES", "countryCode": "US" }, "extractedIdData": { "i9Document": "ListA", "idType": "PP", "idNumber": "000000000", "idIssueDate": "04/19/2021", "idExpirationDate": "04/18/2031", "idExpirationDateFormatted": "04/18/2031", "idIssueCountry": "USA", "idCountry": "USA", "idDateOfBirth": "01/15/1990", "nationality": "USA", "placeOfBirth": "ARIZONA USA", "placeOfIssue": "DEPARTMENT OF STATE", "ageOver18": "Y", "idNotExpired": "Y", "validIdNumber": "Y" }, "attestationDetails": { "citizenshipStatus": "citizen", "attestedAt": "2026-03-15T14:32:00Z" }, "consents": [ { "consentType": "BIOMETRIC_PROCESSING", "version": "v1", "status": "GIVEN", "consentedAt": "2026-03-15T14:30:00Z" } ] }, "employeeI9Details": { "citizenshipStatus": "citizen", "firstDayOfEmployment": "2026-03-15", "secondDocumentCapture": true, "documentsCaptured": { "listA": "U.S. Passport" }, "employmentEligibilityDetails": { "completedReviews": [ { "phase": "i9_section2", "values": { "employerBusinessName": "ACME Corp", "employerLastFirstTitle": "Smith, John", "firstDayOfEmployment": "2026-03-15", "todaysDate": "2026-03-16" } } ] } }, "reviewDetails": { "outcome": "approved", "completedReviews": [ { "reviewType": "identifraud", "result": "pass", "completedAt": "2026-03-16T10:00:00Z" } ] } }

Response Objects

1. Application Details (applicationDetails)

Always present.

FieldTypeDescription
applicationIdStringUnique application (job) identifier
externalIdStringYour tracking identifier, supplied when the job was created
companyIdStringCompany / organization ID owning the application
journeyStringThe job type that produced this application, e.g. onbo_plus, employee_i9_onboarding. A stable discriminator: a given value always means the same kind of application
statusStringCurrent application state (e.g. approved, Approved, Review Identifraud)
applicationCreatedAtStringWhen the application was created
applicationUpdatedAtStringWhen its state last changed

status is carried verbatim and its casing varies by how the state was reached — compare case-insensitively.


2. Verification Result (verificationResult)

FieldTypeDescription
dedupResultObjectmatchFound (Boolean) and matchCount (Number). matchCount is absent when no deduplication ran — absent and 0 are different claims.
documentValidationResultObjectCombined face-match and liveness result — see below. Omitted when neither check ran.
identiFraudArrayIdentity-verification service results: serviceName plus profiles, each with the matched record and a verificationResult holding verified, per-field scores, and a data breakdown.

documentValidationResult

Onbo runs up to two face checks — an ID face match against the captured document, and a selfie live-check. This object merges them field by field, with the ID face match taking priority, so it is one consolidated verdict rather than a per-vendor audit trail.

FieldTypeDescription
isLiveBooleanWhether a live face was detected
selfieLiveCheckStatusStringHuman-readable liveness status, e.g. Live Face Detected
faceVerificationResultStringFace match verdict, e.g. Verified
faceVerificationScoreNumberFace match confidence, 0–100
realScoreNumberLiveness confidence, 0–1
verificationResultStringOverall document verdict, e.g. Approved
verificationResultCodeStringOverall result code, e.g. 00
cellPhone / cellPhoneScoreBoolean / NumberPhone screen detected in frame, and score
eyeCovering / eyeCoveringScoreBoolean / NumberEyewear obstruction, and score
faceMask / faceMaskScoreBoolean / NumberFace covering detected, and score
headCovering / headCoveringScoreBoolean / NumberHead covering detected, and score
advancedLivenessObjectDeepfake verdict — status (e.g. AUTHENTIC) and score
idvFaceMatchDecisionObjectPer-check decisions keyed by check name (Decision_FaceMatch, Decision_Expiration, …), each with result and stateCode. The set varies by document type — iterate the keys

The boolean flags appear only when a check reported them. An absent flag means “not assessed”, not false.


3. Documents (documents)

Document URNs (urn:documentsv1:<env>:<uuid>) grouped by what each document is, so you can find the identity document without knowing which slot name a given journey wrote. Use the URN to fetch binaries via the Documents API. A group with no captured documents is omitted.

GroupSlots
ididFront, idBack, idFrontListC, idBackListC, idFrontSecondListA, idBackSecondListA, videoIdImageFront, videoIdImageBack, videoData
selfieselfie, selfieImage, enrollmentSelfie, signatureSelfieImage
signaturesignatureImage, signatureVideo
otheri9FormPDF, pdfReport

Video captures group under id because a filmed identity document is the same evidence in another medium. i9FormPDF (the rendered Form I-9, on I-9 journeys) and pdfReport (the generated summary report, on Onbo Plus) are both rendered after the decision is reached. pdfReport is present once the render completes, and the Onbo Plus decision webhook waits for it; i9FormPDF may be absent on a recently-completed application.


4. Applicant Data (applicantData)

Everything about the person, under one key for every journey.

FieldTypeDescription
personalDataObjectName, date of birth, contact details, address, physical description, and the document’s own spellings of each — see below
addressDetailsObjectstreetAddress, city, state, postalCode, country, countryCode
extractedIdDataObjectFields read from the primary identity document — see below
extractedSecondaryIdDataObjectSame shape, for the companion document of a two-part List A capture
attestationDetailsObjectcitizenshipStatus, attestedAt
consentsArrayconsentType (TERMS_AND_CONDITIONS, BIOMETRIC_PROCESSING, PRIVACY_POLICY), version, status (GIVEN), consentedAt, text

Personal data fields (personalData)

Read off the identity document and from what the applicant supplied. Which of these appear depends on the document type and on what the capture could read — treat every field as optional.

FieldTypeDescription
firstNameStringFirst name
middleNameStringMiddle name
lastNameStringLast name
lastName2StringSecond surname, on documents that print two
nameStringFull name
additionalNamesStringAny further names the document lists
dobStringDate of birth
genderStringGender
uniqueNumberStringAn identifier the document assigns to the person
emailStringContact email address
phoneStringContact phone number
ssnStringSocial Security Number
addressStringFull address string
addressLine1StringAddress line 1
addressLine2StringAddress line 2
addressLine3StringAddress line 3
cityStringCity
stateStringState or province
parishStringParish, where the jurisdiction uses one
postalCodeStringPostal or ZIP code
countryStringCountry
eyeColorStringEye colour printed on the document
hairColorStringHair colour printed on the document
heightStringHeight printed on the document
weightStringWeight printed on the document
nameNonEngStringname in the document’s own script, when it is not Latin
firstNameNonEngStringfirstName in the document’s own script
middleNameNonEngStringmiddleName in the document’s own script
lastNameNonEngStringlastName in the document’s own script
additionalNamesNonEngStringadditionalNames in the document’s own script
addressNonEngStringaddress in the document’s own script
addressLine1NonEngStringaddressLine1 in the document’s own script
addressLine2NonEngStringaddressLine2 in the document’s own script
name_docStringname exactly as printed, before normalisation
firstName_docStringfirstName as printed
middleName_docStringmiddleName as printed
lastName_docStringlastName as printed
lastName2_docStringlastName2 as printed
dob_docStringdob as printed
linkUniqueIdStringYour own correlation identifier, echoed back

Extracted document fields

Fields read off the identity document by OCR, MRZ parsing and barcode decoding. Which fields appear depends on the document type and on what the capture could read — a passport yields MRZ fields and no driver-license fields, a US driver license yields the reverse. Treat every field here as optional.

FieldTypeDescription
i9DocumentStringWhich I-9 list the document satisfies: ListA, ListB, or ListC. Present on I-9 journeys only; absent when no list applies
idTypeStringDocument code, e.g. PP (passport), DL (driver license)
idStateStringIssuing state or province
idCountryStringDocument country of origin
idNumberStringPrimary document number
idNumber1StringAdditional number, for documents that print more than one
idNumber2StringAdditional number
idNumber3StringAdditional number
idNumber4StringAdditional number
idDateOfBirthStringDate of birth printed on the document
idDateOfBirthFormattedStringDate of birth, normalised
idExpirationDateStringExpiration date
idExpirationDateFormattedStringExpiration date, normalised
idIssueDateStringIssue date
idIssueCountryStringCountry of issue
placeOfIssueStringIssuing authority or place
mrzDataStringThe raw machine-readable zone as read off the document
idNumberNonEngStringidNumber in the document’s own script, when it is not Latin
idNumber2NonEngStringidNumber2 in the document’s own script
idDateOfBirthNonEngStringidDateOfBirth in the document’s own script
idExpirationDateNonEngStringidExpirationDate in the document’s own script
idIssueDateNonEngStringidIssueDate in the document’s own script
barcodeDataParsedStringDecoded barcode contents, for documents carrying one (PDF417 on US driver licenses, for example)
ageOver18StringAge check (Y / N)
nationalityStringNationality on the document
idNotExpiredStringExpiry check (Y / N)
validIdNumberStringDocument number structure check (Y / N)
negativeDBMatchFoundStringWhether the document matched a negative database (Y / N)
mrzErrorMessageStringWhy MRZ parsing failed, when it did. Present only on failure
idNumber_docStringidNumber exactly as printed, before normalisation
idNumber1_docStringidNumber1 as printed
idNumber2_docStringidNumber2 as printed
idNumber3_docStringidNumber3 as printed
idNumber4_docStringidNumber4 as printed
idExpirationDate_docStringidExpirationDate as printed
idIssueDate_docStringidIssueDate as printed
professionStringProfession or occupation
professionNonEngStringprofession in the document’s own script
employerStringEmployer named on the document
vehicleClassStringVehicle classes the holder may drive. Driving licences only
endorsementStringEndorsements granted (motorcycle, hazmat, and so on). Driving licences only
licenseTypeStringLicence category or type. Driving licences only
restrictionStringRestrictions imposed (corrective lenses, for example). Driving licences only
registrationDateStringRegistration date. Driving licences only
replacementDateStringReplacement or reissue date. Driving licences only
maritalStatusStringMarital status, where the document prints one
placeOfBirthStringPlace of birth on the document

The document’s own scans are not part of extractedIdData: idImageFront, idImageBack, idProcessImageFront and idProcessImageBack are never delivered here. The captured images are delivered as URNs under documents.id instead.


5. Employee I-9 Details (employeeI9Details)

Present on I-9 journeys only.

FieldTypeDescription
citizenshipStatusStringSelf-attested status (citizen, noncitizen_national, lawful_permanent_resident, authorized_alien)
firstDayOfEmploymentStringEmployment start date
secondDocumentCaptureBooleantrue when a companion document was captured; absent when it was not
documentsCapturedObjectWhich document was captured per list, e.g. {"listA": "U.S. Passport"}. Lists that captured nothing are omitted
employmentEligibilityDetailsObjectcompletedReviews: employer Section 2 records, each with a phase and the employer’s form values (employerBusinessName, employerLastFirstTitle, firstDayOfEmployment, todaysDate, …)

6. Review Details (reviewDetails)

Present only for applications that went through human review.

FieldTypeDescription
outcomeStringReview decision (approved, rejected, suspicious)
completedReviewsArrayIndividual check outcomes: reviewType, result, completedAt

Error responses

StatusMeaning
400Invalid request — missing or malformed jobId, invalid JSON body, or unsupported job type
401Invalid or missing X-Api-Key-Id / X-Api-Key-Secret header
404Job not found — jobId does not exist or does not belong to the API key’s company
500Server error — retry with backoff; contact support if persistent

Common errors

IssueStatusAction
Missing X-Api-Key-Id header401Include the X-Api-Key-Id header in your request
Missing jobId field400Pass { "jobId": "<valid_job_id>" } in the JSON request body
Job belongs to another company404Verify that the API key matches the organization that created the job
Unsupported job type400get-job-data supports employee_onboarding, employee_i9_onboarding, and onbo_plus jobs

Example (curl)

curl -X POST "https://portal.idmission.com/api/get-job-data" \ -H "Content-Type: application/json" \ -H "X-Api-Key-Id: urn:apikeysv1:prod:region:company:YOUR_KEY_UUID" \ -H "X-Api-Key-Secret: YOUR_API_KEY_SECRET" \ -d '{ "jobId": "019fd6b7-3def-7ece-bd47-788508d3424d" }'

Integration checklist

  • Call the API from your backend only
  • Send X-Api-Key-Id and X-Api-Key-Secret as request headers
  • Send jobId in the JSON body
  • Use API keys corresponding to the organization that owns the job
  • Read document URNs from the documents groups (id, selfie, signature, other) for file retrieval
  • Treat any missing top-level object as “nothing to report”, not as an error

Behavior notes

  • No event envelope — The response delivers job payload data directly without a wrapper event object.
  • Company scoping — Queries are strictly restricted to the caller’s company, reported as applicationDetails.companyId. Cross-company access is blocked and returns 404 Not Found.
  • Document references — Documents are returned as document URNs (e.g. urn:documentsv1:...), never as inline base64 bytes.
  • Unmasked personal data — This endpoint returns full personal data regardless of the PII mode configured for webhook deliveries.
  • Same body as webhooks — Any change to the webhook payload applies here too, minus the event envelope. See the Webhook Payload Reference.

See also

Last updated on