---
title: "Admin Savoirs Faire Coverage"
method: GET
path: "/admin/savoirs-faire/coverage"
tags: ["Admin Savoirs Faire"]
---

# Admin Savoirs Faire Coverage

`GET /admin/savoirs-faire/coverage`

Per grade × chapter × savoir-faire exercise counts (admin diag).

Strategy: load programmes (grade tree + chapter list) and savoirs_faire
once, then run a single aggregation over public_exercises grouping by
(grade_display, chapter_display, sf_id, difficulty). The aggregation
excludes Legacy + remediation rows so the counts match what teachers
actually browse. We `$unwind` `savoirs_faire_ids` with
`preserveNullAndEmptyArrays` so untagged rows still feed the
chapter-level "untagged_exercise_count" tally.

## Query parameters

- `subject` 'maths' | 'physique-chimie'

## Response `200`

Successful Response

- SFCoverageResponse
  - `grades` SFCoverageGrade[], required
    - `grade_key` string, required
    - `grade_display` string, required
    - `sort_order` integer, required
    - `chapters` SFCoverageChapter[], required
      - `chapter_display` string, required
      - `savoirs_faire` SFCoverageItem[], required
        - `id` string, required
        - `name` string, required
        - `description` string, nullable
        - `exercise_count` integer, required
        - `by_difficulty` SFCoverageDifficultyBreakdown, required
          - `easy` integer
          - `medium` integer
          - `hard` integer
          - `unknown` integer
      - `untagged_exercise_count` integer, required
      - `total_exercise_count` integer, required

## Other responses

- `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.dev/excellence-ai/apis/excellence-learning/revisions/2a0c1636fd3b?raw)
