Skip to main content
A case represents a single candidate or evaluation subject. It is the same case an operator sees in TruEnroll, so the IDs the API returns are TruEnroll’s own and match what operators see. You identify a case with your externalId. Each time you submit documents for the same externalId, a new upload is added to the existing case. Credentials (extracted documents) accumulate across all uploads. Case and upload statuses describe document processing. They do not indicate whether an operator has completed evaluation. Use evaluation results to check evaluation progress and download reports. Evaluation is not an upload feature.

Create a case / add an upload

If the externalId already exists for your organization, the files are added as a new upload to the existing case. If not, a new case is created.

Request fields

file[]
required
One or more document files. Accepted formats: PDF, PNG, JPG, JPEG, WebP, ZIP. Up to 20 files per request. The API accepts up to 100 MiB per file and 100 MiB total payload. Files inside a ZIP that are not of a supported type will appear in the upload’s files[] list but will not be processed. PDFs are limited to 200 pages in production.
string
required
Your reference for this case: the candidate ID, application number, or any identifier that maps to a person in your system. Unique per organization. Subsequent submissions with the same externalId append to the existing case. At most 128 characters.
string
Link an existing TruEnroll case, created by an operator in the TruEnroll UI, to your externalId. Pass its case ID or case number. The files become a new upload on that case, and later submissions with the same externalId go to it as well. See Linking a TruEnroll case.
string (JSON array)
Which capabilities to run on this upload. Valid values: "extraction", "forensics", "translation". Defaults to all three when omitted.A feature you do not request does not run. An operator can still start it later from TruEnroll, and once it has run, its results appear in the API like any requested feature.
boolean
default:"true"
Whether to run AI document classification. When true (default), TruEnroll analyses the uploaded files and splits them into credentials, one per education qualification identified. When false, classification is skipped and the whole upload becomes a single academic credential, which the requested features then run on. Use this only if you know the upload holds one qualification.classify: false with an empty features array returns 400, because there would be nothing to process.Either way the case appears in TruEnroll and receives a case number, so an operator can pick it up and evaluate it.
object (JSON)
Arbitrary key-value pairs attached to the case. Values must be strings, numbers, or booleans.

Optional headers

string
Makes the upload safe to retry. If a request fails or times out, resend it with the same Idempotency-Key and an identical payload, and TruEnroll returns the original upload instead of creating a duplicate, showing that upload’s current status. Reusing a key with a different payload returns 409 Conflict.
A successful submission returns 202 Accepted. The files are accepted and processing runs asynchronously. Watch webhooks or poll GET /cases/{id} for results.

Example

Response fields

boolean
Always true on a successful response.
string
Human-readable confirmation, e.g. "Upload accepted".
object

Addressing a case

Every /cases/{id} route accepts either identifier: The two never collide: a case ID is a 24-character hexadecimal string and a case number is digits only. The case ID is TruEnroll’s own ID for the case, and uploadId, credentialId, and evaluationId are likewise TruEnroll’s own IDs. Whether a case came from POST /cases or from the TruEnroll UI, its IDs are the same in the API, in webhooks, and in TruEnroll. Case numbers are unique across all organizations, and a lookup is still scoped to yours, so a number belonging to another organization returns 404.

Cases created in the TruEnroll UI

Your key can read every active case in your organization, including cases an operator created in TruEnroll rather than through POST /cases. They appear in GET /cases and behave like any other case, with these differences:
  • externalId is null, until you link the case to one
  • a credential an operator added by hand, with no upload behind it, has uploadId: null
  • an upload has the features that have actually run on it. A case that was never translated does not list translation, and GET /cases/{id}/translation returns 409 for it
  • no webhooks are sent for the case’s processing, since you did not submit its uploads
  • DELETE returns 403; delete the case in TruEnroll instead

Linking a TruEnroll case

To bring a TruEnroll case into your integration, submit an upload with caseId set to its case ID or case number, and your own externalId:
From then on the externalId names that case, and later uploads to it need only the externalId. Your uploads on the case send webhooks, and case.evaluation.completed fires for it. A linked case still belongs to TruEnroll, so DELETE returns 403. A matching externalId alone never links a case; only caseId does.
A case number is not a credential identifier. A case with three credentials still has one case number.

Get a case

Returns the full case including all uploads and their credentials.

Path parameters

string
required
TruEnroll case ID (caseId) returned when the case was created, or the case number. See Addressing a case.

Response fields

object

List cases

Returns every active case in your organization, newest first, in the same shape as GET /cases/{id}. This includes cases created in the TruEnroll UI. Deleted cases are not listed.

Query parameters

string
Return only the case with this externalId: a one-item list, or an empty list.
number
Number of results per page. Default: 20, max: 100.
number
Number of results to skip for pagination. Default: 0.

Delete a case

Deletes the case, with its documents, from TruEnroll as well. It no longer appears in list results and subsequent requests return 404. A deleted case cannot receive new uploads: submitting the same externalId after deletion returns 409 Conflict. Only cases you created through POST /cases can be deleted: A case an operator deletes in TruEnroll also returns 404 from then on.

Path parameters

string
required
TruEnroll case ID, or the case number. See Addressing a case.
Returns 204 No Content on success.

Error codes

Features & limits

Full details on upload constraints and feature capability requirements.