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

# Concepts

> The ticket, the pack, the published version, the evaluation, and the label.

Six objects cover the product. Callers share them. The app, REST, MCP, webhooks, and simulations call the same judgment path.

## Ticket

A ticket is one support request. Every transport uses this shape. You map your own fields onto it. There is no connector for a specific helpdesk.

| Field | Required | Meaning |
| - | - | - |
| `subject` | Yes | Short title. |
| `customerMessage` | Yes | The message to judge. |
| `externalId` | No | Your id. Stored with the ticket. Not used as an idempotency key. |
| `messages` | No | Earlier turns. Each has `role` (`customer`, `agent`, or `system`), `text`, and an optional `at` time. |
| `metadata` | No | String keys to a string, number, boolean, or null. |
| `createdAt` | No | ISO 8601 time with an offset. |

Strings are trimmed. Empty messages are dropped. Then the ticket is [redacted](/docs/guides/redaction).

An array of messages is one conversation. It is not a batch of tickets. One judge call is one ticket.

## Pack

A pack is a name plus a document of questions. Each question is independent. The model answers all of them on the same ticket.

| Type | What you define | What comes back |
| - | - | - |
| `choice` | Mutually exclusive options | Selected option and a probability for each option |
| `score` | 2 to 10 ordered situations | A score and a probability for each level |
| `boolean` | Whether a statement is true | `probability` that the statement is true |

Question ids match `^[a-z][a-z0-9_]{0,63}$` and stay stable across versions. The model does not see the id as a name. It sees `name` and `instructions`.

How to write them: [Questions](/docs/guides/questions). How answers become a result: [Results](/docs/guides/results).

## Draft and published version

A draft can change. A published version cannot.

| Surface | Version |
| - | - |
| Playground | Draft or published |
| `POST /api/judge` | Published |
| MCP `judge_ticket` | Published |
| Inbound webhook | Published |
| Simulation | Published |

Publish copies the draft into a new version and makes that version live. Restore copies a published version back onto the draft. Compare lists question ids that were added, removed, or changed. See [Packs](/docs/guides/packs).

## Evaluation

An evaluation is the stored judgment. It keeps:

* the pack id and the version id that ran
* the redacted ticket and a hash of that projection
* the answers, review reasons, model id, usage, and latency
* the source: `playground`, `api`, `mcp`, `webhook`, or `simulation`

Rows are append-only. A new revision of a ticket is a new evaluation. Labels can be added later. They do not change `status`.

## Label

A label is a human answer for one question on one evaluation. The evaluation response includes `agreement` for that question:

* **Choice.** The label option equals the selected option.
* **Score.** The label level index equals the model score rounded to the nearest level, clamped to the criteria.
* **Boolean.** The label is true when the model probability is at least `0.5`.

Agreement is a comparison. It does not rescale the model probability.

## Result

`result.status` is `accept`, `review`, or `reject`. Pack thresholds produce `accept` or `review`. A failed model call is stored as `review` with the error kind in `reviewReasons`. The current threshold rules do not emit `reject`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.