---
title: "Api Learning Remediation Pending"
method: GET
path: "/api/learning/remediation/pending"
tags: ["Education"]
---

# Api Learning Remediation Pending

`GET /api/learning/remediation/pending`

## 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/pending`
- Auth: none declared

Return the user's pending remediation events ripe for re-check.

Phase 5 of the Adaptive Mastery System. Feeds the morning-brief
panel's 'Lock in X from N days ago' prompt. Unauthenticated users
get an empty list (no events to track); the frontend can skip
rendering when the response is empty.

Filter (mirrors list_pending_rechecks):
  - user_id matches session
  - reattempt_at IS NULL (the loop is still open)
  - remediation_shown_at between 48h and 30 days ago (ripe but
    not stale)

One row per module_id (the most recent pending event for that
module), capped at 3 so the morning brief doesn't overflow.
Each row carries: event_id, module_id, module_title (resolved
server-side from learning-paths.json), mastery_score,
shown_at_relative (human-readable).

## Response `200`

Successful Response

- RemediationPendingResponse: `GET /api/learning/remediation/pending` — list of pending re-check events for the morning-brief 'Lock in X from N days ago' prompt. Anonymous-readable — anon users get an empty list (the route doesn't require auth so the FE can call it on every page load without a branching path). Capped at 3 rows so the brief doesn't overflow.
  - `pending` RemediationPendingItem[], required: At most 3 rows; empty list when no events are ripe.
    - `event_id` integer, required: learn_remediation_events.id (primary key for /open + /primer-complete posts).
    - `module_id` string, required: LEARN module the user under-scored on.
    - `module_title` string, required: Resolved title from learning-paths.json (server-side join to save a FE lookup).
    - `mastery_score` integer, required: The original mastery_score that triggered the remediation.
    - `shown_at_relative` string, required: Human-readable 'Lock in X from N days ago' time ('2 days ago' / 'yesterday' / etc.).

---

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