---
title: "Api Learning Calibration Submit"
method: POST
path: "/api/learning/calibration/submit"
tags: ["Education"]
---

# Api Learning Calibration Submit

`POST /api/learning/calibration/submit`

## Request

- Base URL: `https://www.oxfordledge.com` (the document declares no server; this is the origin it was published from)
- URL: `https://www.oxfordledge.com/api/learning/calibration/submit`
- Auth: none declared

Grade one calibration item and apply the mastery-calibration
decision pipeline (events.py → v136/v167 state → v137 audit row).

Body: {"calibration_id": int, "selected_option": int}.

## Response `200`

Successful Response

- CalibrationSubmitResponse: `POST /api/learning/calibration/submit` — Phase 9b grade-of-record. `calibration_recorded=false` covers the honest no-op branches (no concept state to calibrate; repeat pass inside the 14-day anti-farming guard) — the item still grades + teaches (correct_option + explanation disclose post-submit), but no mastery state changes. `mastery_transition` rides back on a layer crossing (advance via a calibration pass, regression via the D2 two-fails demotion); `regression` carries the D2 three-part diagnostic copy (headline / items_detail / next_steps) for the quiet inline render — never an alarming banner.
  - `correct` boolean, required: True iff the submitted option matched correct_idx.
  - `calibration_recorded` boolean, required: True iff this submission changed mastery-calibration state (pass counted, failure counted, or demotion applied).
  - `correct_option` integer, nullable: The correct option index — disclosed post-submit (calibration items are teaching moments).
  - `explanation` string, nullable: The item's authored explanation — disclosed post-submit.
  - `offer_remediation` boolean, nullable: True when events.py says the failure deserves the remediation surface (plan D2).
  - `reason` string, nullable: Diagnostic decision label (events.py reason, or the no-op branch name).
  - `mastery_transition` object, nullable: Layer crossing, when one fired: {concept_slug, concept_title, from_layer, to_layer, direction, message}.
  - `regression` object, nullable: D2 diagnostic copy on demotion: {headline, items_detail, next_steps}.
  - `error` string, nullable: Failure message on the 4xx branches.

---

[API](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api.md) · [All operations](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/llms.txt) · [OpenAPI document](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/revisions/e832a1260f0b?raw)
