> ## Documentation Index
> Fetch the complete documentation index at: https://docs.truenroll.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Features & limits

> Features, upload constraints, and behavior when limits are exceeded.

## Features

The Partner API exposes three features you can request per case. Features must be
enabled for your organization before they can be used. Requesting an unavailable feature
fails **synchronously with `403`**, before any files are stored or processed.

### Extraction

Included in every case. AI-powered extraction of:

* Candidate identity (name, date of birth)
* Institution (name, country, state, accreditation)
* Qualification (degree, major, year of admission/completion)
* Courses (number, title, credits, grade, marks)
* CGPA and total credits

Extraction results are available via `GET /cases/{id}/extraction` once
`case.extraction.completed` is received.

**Organization requirement:** Always available. No special provisioning needed.

***

### Forensics

Runs in parallel with extraction. Checks the original uploaded file for tampering,
manipulation, metadata anomalies, and internal inconsistencies. See
[Forensics & verification](/concepts/forensics-and-verification) for details.

**Organization requirement:** Your organization must have the `forensics` feature
provisioned. Contact your TruEnroll account manager.

**Webhook:** `case.forensics.completed` / `case.forensics.failed`

***

### Translation

Produces a page-structured, readable representation of each uploaded document. Results are
returned per source file, preserving page order and file identity. Multi-file cases get
one translation output per file.

**Organization requirement:** Your organization must have either the standard
`translation` or `translation_on_demand` feature provisioned.

**Webhook:** `case.translation.completed` / `case.translation.failed`

***

## Upload limits

| Constraint            | Limit                                                                                                         |
| --------------------- | ------------------------------------------------------------------------------------------------------------- |
| Files per case        | 20                                                                                                            |
| File size per file    | 30 MB                                                                                                         |
| Total request payload | 40 MB                                                                                                         |
| Pages per PDF         | 130                                                                                                           |
| Accepted MIME types   | `application/pdf`, `image/png`, `image/jpeg`, `image/webp`, `application/zip`, `application/x-zip-compressed` |

ZIP archives are accepted and counted as a single file toward the 20-file limit. Files inside a ZIP that are not of a supported type will appear in the upload's `files[]` list but will not be processed.

<Note>
  Need higher limits? [Contact us](mailto:support@truenroll.com) to discuss increased file sizes or per-request limits for your organization.
</Note>

### Limit errors

| Error                       | HTTP status                                       |
| --------------------------- | ------------------------------------------------- |
| File count exceeds 20       | `400 Bad Request`                                 |
| Single file exceeds 30 MB   | `413 Content Too Large`                           |
| Total payload exceeds 40 MB | `413 Content Too Large`                           |
| PDF exceeds 130 pages       | Processing fails with an error on that credential |
| Unsupported MIME type       | `400 Bad Request`                                 |

```json theme={null}
{
  "statusCode": 413,
  "message": "File size exceeds the 30 MB limit"
}
```

***

## Feature validation timing

Feature checks happen **before any files are stored or processed**. This means:

1. TruEnroll receives the request and reads your `features` array.
2. It loads your organization's feature configuration.
3. If any requested feature is not available, it returns `403` immediately.
4. No files are persisted, no case or upload is created, and no processing is started.

This prevents documents from being stored or work from being kicked off when a feature is
misconfigured. (The multipart request body is still received before the check runs, so the
`403` does not save upload bandwidth; it prevents storage and processing.)

***

## Rate limits

Specific rate limits are configured per organization based on your contract. Contact your
TruEnroll account manager for your organization's limits. When a rate limit is exceeded,
the API returns `429 Too Many Requests` with a `Retry-After` header.
