Pipeline overview
Forensics and translation run in parallel with extraction, not after it. A case reaches
terminal state only when every expected result — for every credential and every enabled feature
— has completed or failed.
Stage by stage
Ingestion
Files are validated (format, size, count limits) and stored. A case is created (or an
upload is added to an existing case if the
externalId already exists) and processing is
queued. The API responds immediately.At this point the upload is in queued status.Classification
TruEnroll analyses the uploaded files and splits them into credentials — one per
education qualification identified. A single file can produce multiple credentials (for
example, a transcript spanning two degrees). Non-education documents such as ID cards
or cover letters are identified and excluded from further processing.Can be skipped by setting
classify: false when submitting a case.Webhook: case.classification.completed / case.classification.failedExtraction
Structured fields are pulled from each education credential:
Extracted data is normalized into a consistent schema regardless of the source document’s
format or language.Webhook:
| Field group | Examples |
|---|---|
| Candidate identity | Full name, first/last name, date of birth |
| Institution | Name, country, state, accreditation status |
| Qualification | Degree name, level, major, year of admission, year of completion |
| Courses | Course number, title, credits, grade, grade point, marks |
| CGPA / totals | CGPA, total credits or marks |
case.extraction.completed / case.extraction.failedGrade normalization & equivalence
Extracted grades are interpreted against the issuing institution’s grading scale
(using TruEnroll’s built-in scale library or a custom scale) and converted to target
scales. Courses are mapped to CIP/SCED codes for domestic equivalence matching.
Forensics (parallel)
Running concurrently with extraction, the forensics engine checks the document for signs
of tampering, manipulation, and internal inconsistency. See
Forensics & verification for what’s checked.Webhook:
case.forensics.completed / case.forensics.failedTranslation (if enabled)
When the
translation feature is requested, TruEnroll produces a page-structured,
readable representation of the document in English. Each source file gets its own
translation output, preserving page order and file identity.Translation runs in parallel with forensics and extraction — triggered after
classification when classify: true (default), or immediately at upload time
when classify: false.Webhook: case.translation.completed / case.translation.failedCase status
A case moves through these states:| Status | Meaning |
|---|---|
queued | Case created, waiting for pipeline to start |
processing | At least one result is still being processed |
completed | Every expected result finished successfully |
failed | All results are terminal and at least one failed |
A failed extraction does not necessarily make the whole case
failed — if forensics and
translation both succeed, and extraction is the only failure, the overall status depends
on which features were requested. Every expected resource must reach a terminal state.Partner API event timeline
This is what the lifecycle looks like from a partner integration’s perspective.Webhook reference
Every event name, when it fires, and how to handle duplicates safely.