---
title: "Get Student Progression"
method: GET
path: "/student/progression"
tags: ["student_progression"]
---

# Get Student Progression

`GET /student/progression`

Skill + theme mastery for the authenticated student's dashboard.

Returns an empty payload with `readiness.is_ready` false — and does no work —
for a student who hasn't submitted enough exercises yet (EXC-451); the
frontend shows the "keep practising" state in that case.

Otherwise may generate (and persist) v2 evaluations on the fly for first
submissions that don't have one yet — the same cold-start routine the
error-analysis endpoint uses — so the first call after a stretch of activity
can take longer; subsequent calls reuse the persisted evaluations.

## Response `200`

Successful Response

- StudentProgressionResponse — Skill + theme mastery for the dashboard. `student_grade` is null when the student isn't classed; the frontend uses it to decide whether to show the bac-countdown framing. Empty `skills` means "not enough data yet" (the frontend shows a practise-more nudge). Recurring errors come from the EXC-257 endpoint and are merged client-side. `readiness.is_ready` false means the whole page is gated (EXC-451): every other field is empty and the frontend shows the "keep practising" state rather than the dashboard.
  - `student_grade` string, nullable, required
  - `readiness` ProgressionReadinessResponse, required — Whether the dashboard is worth showing yet, and the progress toward it. `is_ready` is serialized (rather than left for the client to recompute) so the threshold rule stays owned by the backend.
    - `submitted_exercises` integer, required
    - `required_exercises` integer, required
    - `is_ready` boolean, required
  - `skills_tracked` integer, required
  - `overall_mastery` number, required
  - `bac_date` string, required
  - `skills` SchemasStudentProgressionSkillMasteryResponse[], required
    - `savoir_faire_id` string, required
    - `name` string, required
    - `chapter` string, required
    - `posterior` number, required
    - `n_observations` integer, required
    - `prior_reason` string, required
  - `themes` ThemeMasteryResponse[], required
    - `chapter` string, required
    - `mastery` number, required
    - `skills_count` integer, required

## Other responses

- `400` — Malformed identifier
- `404` — Resource not found
- `502` — Upstream LLM returned unusable output

## Changes

- **2026-09-03** `ef67479ed898` — 1 info
  - added the required property `readiness` to the response with the `200` status

[Change history](https://skmtc.dev/excellence-ai/apis/excellence-learning/changes/student/progression/get.md)

---

[API](https://skmtc.dev/excellence-ai/apis/excellence-learning.md) · [All operations](https://skmtc.dev/excellence-ai/apis/excellence-learning/llms.txt) · [OpenAPI document](https://skmtc.dev/excellence-ai/apis/excellence-learning/revisions/2a0c1636fd3b?raw)
