---
title: "Get Suggested Exercises"
method: GET
path: "/teacher-analytics/suggested-exercises"
tags: ["teacher_recommendations"]
---

# Get Suggested Exercises

`GET /teacher-analytics/suggested-exercises`

Return up to 3 suggested public exercises for the current teacher.

## Query parameters

- `subject` 'maths' | 'physique-chimie', nullable
- `grade_key` string, nullable — Soft context: prefer suggestions inside this grade (tree root). Relaxed automatically if too few hits.
- `chapter_display` string, nullable — Soft context: prefer suggestions in this chapter. Relaxed automatically if too few hits. Expects the chapter's `display` name, not slug.
- `difficulty` string, nullable — Soft context: 'easy' | 'medium' | 'hard'. Relaxed first when narrowing too aggressively.
- `type_filter` string, nullable — Hard filter on `public_exercises.type` (exercice | automatisme | application_du_cours).

## Response `200`

Successful Response

- SuggestedExercisesResponse — Response shape for `GET /teacher-analytics/suggested-exercises`. `eligible` lets the frontend distinguish two "empty suggestions" reasons: - `eligible=false, suggestions=[]` → teacher hasn't assigned enough yet; show "first use" copy. - `eligible=true, suggestions=[]` → no good matches found for the current context; show "no matches, try widening filters" copy.
  - `eligible` boolean, required
  - `suggestions` PublicExerciseOut[], required
    - `id` string, required
    - `themes` string[], required
    - `content` string, required
    - `solution` string, required
    - `figure_content` string, nullable
    - `figure_solution` string, nullable
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `sequence_number` integer, nullable
    - `difficulty` string, nullable
    - `category_path` string[]
    - `subject` 'maths' | 'physique-chimie'
    - `diagnostic_info` DiagnosticInfoOut
      - `explanation` string, required
    - `library` 'excellence' | 'cpge' | 'remediation'
    - `type` 'exercice' | 'automatisme' | 'application_du_cours'
    - `cpge` RoutersPublicExercisesCpgeMetadata — CPGE-specific fields, present only when `library == "cpge"`. Grouped into a subdoc so that readers of a regular public exercise don't have to reason about hints / banque at all — those are genuinely prepa-only concerns.
      - `hints` string[]
      - `banque` string, nullable
    - `likes_count` integer
    - `savoirs_faire_ids` string[]
    - `title` string, nullable

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