# OpenOLAT Grading Discrepancy Review

> OpenOLAT Grading Discrepancy Review is a paid API for AI agents from agent.halowerk.com, paid per call via x402, $0.0045/call, status unknown (last checked 2026-10-29).

Replays a grading scale against recorded assessment grades to identify and surface every discrepancy between what the scale yields and what was actually recorded.

## Facts

- Endpoint: POST https://agent.halowerk.com/v1/oss-openolat-grading-discrepancy-review?utm_source=zero.xyz
- Price: $0.0045/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-29
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/openolat-grading-discrepancy-review-76d021f1
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_HRamyaKIJSV-KZvi3byiT

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability openolat-grading-discrepancy-review-76d021f1 -d '<json body>'
```

Example prompt: Can you check our OpenOLAT assessments for grading errors? I'll give you the grading scale — scale ID 'MathFinal2024', bands from 0 to 100 with letter grades — and 50 assessment records with their scores and recorded grades, and I need to know which ones have the wrong grade entered.

## When to prefer this

Use this endpoint when you need to audit or validate that grades recorded in an OpenOLAT-compatible LMS match what the grading scale actually prescribes for each score — especially after manual data entry, imports, or scale changes. Prefer this over manual spot-checking or generic comparison scripts when you have a formal rubric or native OpenOLAT numeric scale definition and need discrepancies surfaced at the individual assessment row level with expected vs actual values.

## Known failure modes

- Overlapping or gapped rubric bands cause ambiguous band assignment and may return an error
- Score outside all rubric bands returns an unmatched assessment record
- Malformed scale_id or assessment ID (failing pattern validation) causes a 400 Bad Request
- More than 64 rubric bands or 1000 assessments triggers a payload size rejection
- Conflicting native_scale and rubric inputs may cause validation failure
- Missing required fields (id, score, recorded_grade, recorded_passed) per assessment causes schema rejection

## How this service works

Replays a grading scale through the native OpenOLAT implementation and compares, for each assessment, the grade that was recorded against the grade the scale actually yields. Every discrepancy comes back with the score, the band it falls into, the expected value and the recorded one, so a wrong entry can be corrected at the row instead of being argued about in the aggregate.

## Output

A structured list of discrepancies for each assessment where the recorded grade or pass/fail status diverges from what the grading scale actually yields for that score — each discrepancy includes the assessment ID, the numeric score, the scale band it falls into, the expected grade/pass value, and the recorded grade/pass value, enabling row-level corrections.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "rubric": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "id",
     "lower",
     "upper",
     "lower_inclusive",
     "upper_inclusive",
     "grade",
     "passed"
    ],
    "properties": {
     "id": {
      "type": "string",
      "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$"
     },
     "grade": {
      "type": "string",
      "maxLength": 128,
      "minLength": 1
     },
     "lower": {
      "type": "string",
      "pattern": "^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"
     },
     "upper": {
      "type": "string",
      "pattern": "^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"
     },
     "passed": {
      "type": [
       "boolean",
       "null"
      ]
     },
     "lower_inclusive": {
      "type": "boolean"
     },
     "upper_inclusive": {
      "type": "boolean"
     }
    },
    "additionalProperties": false
   },
   "maxItems": 64,
   "minItems": 1
  },
  "scale_id": {
   "type": "string",
   "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$"
  },
  "assessments": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "id",
     "score",
     "recorded_grade",
     "recorded_passed"
    ],
    "properties": {
     "id": {
      "type": "string",
      "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,31}$"
     },
     "score": {
      "type": "string",
      "pattern": "^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"
     },
     "recorded_grade": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 128,
        "minLength": 1
       },
       {
        "type": "null"
       }
      ]
     },
     "recorded_passed": {
      "type": [
       "boolean",
       "null"
      ]
     }
    },
    "additionalProperties": false
   },
   "maxItems": 1000,
   "minItems": 1
  },
  "native_scale": {
   "oneOf": [
    {
     "type": "object",
     "required": [
      "type",
      "lowest_grade",
      "best_grade",
      "resolution",
      "rounding",
      "cut_value",
      "breakpoints"
     ],
     "properties": {
      "type": {
       "const": "numeric"
      },
      "rounding": {
       "enum": [
        "nearest",
        "up",
        "down"
       ]
      },
      "cut_value": {
       "anyOf": [
        {
         "type": "string",
         "pattern": "^-?(0|[1-9][0-9]{0,6})(\\.[0-9]{1,6})?$"
        },
        {
         "type": "null"
        }
       ]
      },
      "best_grade": {
       "type": "string",
       "pattern": "^-?(0|[1-9][0-9]{0,6
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/openolat-grading-discrepancy-review-76d021f1/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from agent.halowerk.com](https://www.zero.xyz/host/agent.halowerk.com/llms.txt)
