---
title: "Api Learning Remediation Primer"
method: GET
path: "/api/learning/remediation/primer/{module_id}"
tags: ["Education"]
---

# Api Learning Remediation Primer

`GET /api/learning/remediation/primer/{module_id}`

## 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/remediation/primer/{module_id}`
- Auth: none declared

Phase 8c flip (S50, 2026-07-19): serve the author-curated
"simpler primer" for a module, when one exists AND is
PROFESSOR-reviewed.

The drawer's primer mode calls this on open and, on
`available=true`, renders the curated primer_md ABOVE the stripped
prereq sections (plan §Phase 8: "reader auto-prefers the curated
primer over the stripped pre-req when available"). On
`available=false` — empty v47 table (the OWNER's 20-primer
bulk-import is a separate pending action), unreviewed row, PG down
— the drawer renders EXACTLY the pre-flip stripped-prereq
behavior: honest fallback, never a blank hole. This route
therefore NEVER 500s for a missing primer; absence is a normal,
well-formed answer.

Public (no auth): primers are educational content with no
user-specific fields — same exposure class as learning-paths.json.

## Path parameters

- `module_id` string, required: LEARN module id

## Response `200`

Successful Response

- LearnPrimerResponse: `GET /api/learning/remediation/primer/{module_id}` — Phase 8c. `available=false` is a NORMAL answer (empty v47 table / unreviewed row / PG down): the drawer then renders the pre-flip stripped-prereq content — honest fallback, never a blank hole. Only PROFESSOR-reviewed primers ever serve `available=true`.
  - `available` boolean, required: True iff a reviewed curated primer exists for this module.
  - `module_id` string, required: Echo of the requested module id.
  - `primer_md` string, nullable: Curated primer markdown; null when available=false.
  - `word_count` integer, nullable: Server-computed word count; null when available=false.

## Other responses

- `422`: Validation Error

---

[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)
