---
title: "Get Class Mastery"
method: GET
path: "/teacher/classes/{class_id}/dashboard/mastery"
tags: ["class_dashboard"]
---

# Get Class Mastery

`GET /teacher/classes/{class_id}/dashboard/mastery`

Chapters and savoir-faire with one strip cell per student.

Read CUMULATIVELY: covers the school year up to the END of the selected
period, not the period alone. A chapter taught in T1 is still part of what
the class knows in T3.

## Path parameters

- `class_id` string, required

## Query parameters

- `period` string, nullable — Selected period: t1 / t2 / t3 / this_week / this_month / vacances_ete / school_year. An unrecognised value falls back to the full school year rather than erroring, so a stale bookmark still renders.

## Response `200`

Successful Response

- ClassMasteryResponse — Both views in one payload. `skills` is the same set of savoir-faire as the ones nested under `chapters`, re-sorted hardest-first across chapters for the "par savoir-faire" toggle. Duplicating them costs a few hundred KB on a large class and buys an instant toggle with no second request — the alternative is re-sorting client-side, which would put the ranking rule in two places.
  - `class_name` string, required
  - `period` string, required
  - `students` MasteryStudentResponse[], required
    - `student_id` string, required
    - `display_name` string, required
  - `chapters` ChapterMasteryResponse[], required
    - `chapter` string, required
    - `evaluated_count` integer, required
    - `class_mastery` number, nullable
    - `is_fragile` boolean, required
    - `cells` MasteryCellResponse[], required
      - `mastery` number, nullable
      - `bucket` 'a_reprendre' | 'en_progres' | 'maitrise' | 'non_traite', required
      - `correct` integer, required
      - `partial` integer, required
      - `wrong` integer, required
    - `skills` SchemasClassDashboardMasterySkillMasteryResponse[], required
      - `savoir_faire_id` string, required
      - `name` string, required
      - `chapter` string, required
      - `evaluated_count` integer, required
      - `class_mastery` number, nullable
      - `cells` MasteryCellResponse[], required
        - `mastery` number, nullable
        - `bucket` 'a_reprendre' | 'en_progres' | 'maitrise' | 'non_traite', required
        - `correct` integer, required
        - `partial` integer, required
        - `wrong` integer, required
  - `skills` SchemasClassDashboardMasterySkillMasteryResponse[], required
    - `savoir_faire_id` string, required
    - `name` string, required
    - `chapter` string, required
    - `evaluated_count` integer, required
    - `class_mastery` number, nullable
    - `cells` MasteryCellResponse[], required
      - `mastery` number, nullable
      - `bucket` 'a_reprendre' | 'en_progres' | 'maitrise' | 'non_traite', required
      - `correct` integer, required
      - `partial` integer, required
      - `wrong` integer, required
  - `thresholds` MasteryThresholdsResponse, required — The bucket edges, sent so the legend and any client-side colouring read the same numbers the server bucketed with instead of restating them.
    - `a_reprendre` number, required
    - `maitrise` number, required

## Other responses

- `400` — Malformed identifier
- `403` — Not authorized for this resource
- `404` — Resource not found
- `422` — Validation Error

---

[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-service-production.skmtc.workers.dev/v1/apis/excellence-ai/excellence-learning/revisions/ef67479ed898/schema)
