---
title: "Public learning paths catalog"
method: GET
path: "/api/learning/paths"
tags: ["Education"]
---

# Public learning paths catalog

`GET /api/learning/paths`

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

Stripped public learning paths (correct/explanation removed).

## Response `200`

Successful Response

- LearningPathsResponse: `GET /api/learning/paths` response. `paths` is REQUIRED (F4 schema tightening 2026-04-29). The handler in routes/routes_education_fastapi/paths.py always returns `LEARNING_PATHS_PUBLIC` which is initialized to `{"paths": []}` on every code path (load-success, load-failure fallback). Marking it required activates the F2.2 boundary test as a real assertion rather than a trivial-pass. `count` stays Optional — the handler doesn't compute it (it's derivable from `len(paths)` client-side; including a server-side count would require a backend change which isn't in scope here).
  - `paths` LearningPath[], required
    - `id` string, nullable
    - `title` string, nullable
    - `description` string, nullable
    - `modules` LearningModule[], nullable
      - `id` string, nullable
      - `title` string, nullable
      - `duration_min` integer, nullable
      - `difficulty` string, nullable
  - `count` integer, nullable

## Other responses

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