---
title: "Single LEARN path with nested modules"
method: GET
path: "/api/learn/paths/{path_id}"
tags: ["Education"]
---

# Single LEARN path with nested modules

`GET /api/learn/paths/{path_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/learn/paths/{path_id}`
- Auth: none declared

Return one LEARN path keyed by slug, with its modules nested.

Same shape as one element of `/api/learn/paths`.paths — `id`,
`title`, `modules: [...]`, plus the optional metadata fields.
Returns 404 when the path slug is unknown.

## Path parameters

- `path_id` string, required

## Response `200`

Successful Response

- LearnDataPathDetailResponse: `GET /api/learn/paths/{path_id}` response. Single path with its modules nested as `.modules[]` — matches the shape returned by `/api/learning/paths/{path_id}` so the existing drawer renderer reads identically. `modules` is required; PR0 Phase 2 reader-swap callers iterate it without null-checks.
  - `id` string, required
  - `title` string, required
  - `modules` unknown[], required
    - unknown
  - `description` string, nullable
  - `level` string, nullable
  - `prerequisites` string[], nullable
  - `masteryThreshold` number, nullable: ADVISORY path/module metadata only (#193/LR-16, 2026-07-27): set by 4 of ~435 modules and read by NOTHING - the real mastery gate is the concept-level EMA in learn/mastery/layer.py (see /methodology/mastery-threshold). Kept on the wire for shape stability; never treat it as a gating threshold.
  - `disclaimer` string, nullable

## Other responses

- `404`: Not Found
- `422`: Validation Error
- `500`: Internal Server 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)
