---
title: "Live curriculum + glossary counts"
method: GET
path: "/api/learning/stats"
tags: ["Education"]
---

# Live curriculum + glossary counts

`GET /api/learning/stats`

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

Return live curriculum counts (modules, paths, glossary_terms).

Single source of truth for any UI surface that wants to quote the
curriculum size — replaces the prior pattern of literal '222 lessons'
counts that decayed independently across 14+ sites. Cached
server-side for 5 minutes.

## Response `200`

Successful Response

- LearnStatsResponse: Wire shape for GET /api/learning/stats. Counts the live curriculum substrate (modules across all paths, paths total, glossary entries). All fields are required so the frontend never has to render `?` for a known live count.
  - `modules` integer, required: Total module count across all learning paths (audit's 'lessons' figure — same number, different vocabulary). Computed live at request time from static/data/learning-paths.json.
  - `paths` integer, required: Total learning-path count (audit's 'courses' figure).
  - `glossary_terms` integer, required: Total glossary-entry count (parsed from static/js/glossary.ts at request time).
  - `generated_at` string, required: ISO-8601 UTC timestamp of when this stats snapshot was computed. Use to detect stale cached responses (server-side cache TTL: 5 minutes).

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