Skip to main content
A case represents a single candidate or evaluation subject and is identified by 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.

Create a case / add an upload

POST /partner/v1/cases
Content-Type: multipart/form-data
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

files
file[]
required
One or more document files. Accepted formats: PDF, PNG, JPG, JPEG, WebP, ZIP. Up to 20 files per request. Max 30 MB per file, 40 MB 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 130 pages.
externalId
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.
features
string (JSON array)
Which capabilities to run on this upload. Valid values: "extraction", "forensics", "translation". Defaults to all three when omitted.
features=["extraction","forensics"]
classify
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. Set to false only if you know the document type in advance. Note: forensics requires classify: true.
metadata
object (JSON)
Arbitrary key-value pairs attached to the case. Values must be strings, numbers, or booleans.
metadata={"applicationCycle":"2025","region":"APAC"}

Example

curl -X POST https://api.truenroll.com/partner/v1/cases \
  -H "x-api-key: $TRUENROLL_API_KEY" \
  -F "files=@transcript.pdf" \
  -F "externalId=applicant-9876" \
  -F 'features=["extraction","forensics","translation"]'

Response fields

success
boolean
Always true on a successful response.
message
string
Human-readable confirmation, e.g. "Upload accepted".
data
object
{
  "success": true,
  "message": "Upload accepted",
  "data": {
    "caseId": "6850abc123def456ghi789",
    "externalId": "applicant-9876",
    "upload": {
      "uploadId": "6850def456ghi789abc123",
      "status": "queued",
      "classify": true,
      "features": ["extraction", "forensics", "translation"],
      "files": [
        { "fileId": "file_abc", "fileName": "transcript.pdf" }
      ],
      "createdAt": "2025-06-22T10:00:00Z",
      "updatedAt": "2025-06-22T10:00:00Z"
    }
  }
}

Get a case

GET /partner/v1/cases/{id}
Returns the full case including all uploads and their credentials.

Path parameters

id
string
required
TruEnroll case ID (caseId) returned when the case was created.

Response fields

data
object
{
  "success": true,
  "message": "Case retrieved",
  "data": {
    "id": "6850abc123def456ghi789",
    "externalId": "applicant-9876",
    "status": "processing",
    "createdAt": "2025-06-22T10:00:00Z",
    "updatedAt": "2025-06-22T10:05:00Z",
    "uploads": [
      {
        "uploadId": "6850def456ghi789abc123",
        "status": "completed",
        "classify": true,
        "features": ["extraction", "forensics", "translation"],
        "files": [
          { "fileId": "file_abc", "fileName": "transcript.pdf" }
        ],
        "createdAt": "2025-06-22T10:00:00Z",
        "updatedAt": "2025-06-22T10:04:00Z"
      }
    ],
    "credentials": [
      {
        "credentialId": "6850ghi789abc123def456",
        "uploadId": "6850def456ghi789abc123",
        "credentialType": "Academic Credentials",
        "status": "completed"
      }
    ]
  }
}

List cases

GET /partner/v1/cases
Returns all cases for your organization, newest first.

Query parameters

externalId
string
Filter by your external reference.
limit
number
Number of results per page. Default: 20, max: 100.
offset
number
Number of results to skip for pagination. Default: 0.

Delete a case

DELETE /partner/v1/cases/{id}
Soft-deletes the case. It no longer appears in list results and subsequent GET requests return 404. A deleted case cannot receive new uploads — submitting the same externalId after deletion returns 409 Conflict.

Path parameters

id
string
required
TruEnroll case ID.
Returns 204 No Content on success.

Error codes

CodeReason
400Missing files, unsupported format, classify: false with forensics, or invalid JSON
401No API key or malformed key
403Key is not a partner key, or organization lacks a requested feature
404Case not found or deleted
409Submitting to a deleted case
413Per-file (30 MB) or total payload (40 MB) size limit exceeded

Features & limits

Full details on upload constraints and feature capability requirements.