---
title: "Put Course Bookmarks"
method: PUT
path: "/teacher/courses/{course_id}/bookmarks"
tags: ["Teacher Course Bookmarks"]
---

# Put Course Bookmarks

`PUT /teacher/courses/{course_id}/bookmarks`

## Request

- Base URL: `https://api.excellence-ai.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.excellence-ai.com/teacher/courses/{course_id}/bookmarks`
- Auth: OAuth 2 (password, token URL `api/login`)

Move the bookmark of one or several classes of the course, all or
nothing, and answer with the bookmarks of every class on the course.
A class whose bookmark moves has its flashcards and knowledge-check
bookmarks put back to following the course; the manual ones so reset
come back in `reset_deck_bookmarks`, for « Annuler ce replacement ».

404: not a course of this teacher. 409: a class of a finished school year
(its bookmark is frozen). 422: a class listed twice or not on the course,
or a unit that is not in the course.

## Path parameters

- `course_id` string, required

## Request body

- PlaceBookmarksRequest: Several classes at once (the Plan popover, dragging several classes, the phone sheet, « Annuler »). Validated and written as a whole.
  - `bookmarks` ClassBookmarkPlacement[], required
    - `class_id` string, required
    - `position` BookmarkPosition, required: Where a class's bookmark sits. `unit_id` is set for a `unit` and a `block` position; `block_id` only for a `block` one.
      - `kind` 'unset' | 'nothing' | 'unit' | 'block', required
      - `unit_id` string, nullable
      - `block_id` string, nullable

## Response `200`

Successful Response

- CourseBookmarksResponse: The bookmarks of every class on the course, in the assignment's class order: the client replaces its cache with it. `reset_deck_bookmarks`: on a write, the manual flashcards / knowledge check bookmarks that moving the course bookmark put back to following the course (EXC-680), with their previous positions, for the toast's « Annuler ce replacement ». Empty when none was manual.
  - `bookmarks` ClassBookmarkResponse[], required
    - `class_id` string, required
    - `position` BookmarkPosition, required: Where a class's bookmark sits. `unit_id` is set for a `unit` and a `block` position; `block_id` only for a `block` one.
      - `kind` 'unset' | 'nothing' | 'unit' | 'block', required
      - `unit_id` string, nullable
      - `block_id` string, nullable
    - `is_past` boolean, required
  - `reset_deck_bookmarks` DeckBookmarkReset[]
    - `class_id` string, required
    - `deck` 'flashcards' | 'quiz', required
    - `previous` ItemBookmarkPosition, required: Where a deck bookmark sits: before the first item (`nothing`), after the last (`all`), or right after `item_id` (`item`), inclusive.
      - `kind` 'nothing' | 'all' | 'item', required
      - `item_id` string, nullable

## Other responses

- `400`: Malformed identifier
- `404`: Resource not found
- `409`: Business rule violated
- `422`: The body names something not on this resource

## Changes

> 55 revisions in range; 1 not diffed.

- **2026-09-30** `518c1e6178a3`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/excellence-ai/apis/excellence-learning/changes/teacher/courses/:course_id/bookmarks/put.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/379e4a57dee8?raw)
