Replace the membership of a group with the provided list of students. Students present in the payload but not in the group are added; students currently in the group but absent from the payload are removed; students in both are unchanged.
Body: studentIds XOR studentExternalReferenceIds. An empty array clears all members.
Limit: at most 1000 identifiers per call; above that the call is rejected with 400 and nothing is written.
Groups of more than 1000 students: this route does not fit. It replaces the whole membership, so splitting the payload over several calls removes, on each call, the students sent by the previous one. Send the changes instead, group by group:
- Compare the expected membership of the group with the last one you sent, to get the students to add and the students to remove.
- Add each student with POST /v3/groups/{id}/students.
- Remove each student with DELETE /v3/groups/{id}/students.
Both routes take one student per call (studentIds or studentExternalReferenceIds, with a single identifier) and cascade to courses like this route (cascadeToCourses, defaults to true). Once a group is managed this way, do not send it a PUT again: it would remove every student beyond the ones it carries.
Query (required): cascadeToCourses controls whether membership changes propagate to courses linked to the group:
cascadeToCourses=true— on add, students are enrolled in all future unlocked courses linked to the group (STUDENT_STATESand matchingABSENCESare created; already-enrolled students are skipped). On remove, students are unenrolled from those courses, except if they remain member of another group attached to the same course (multi-group protection). Survey recipients are kept in sync.cascadeToCourses=false— only theSTUDENT_GROUPS_STUDENTSjoin table is touched. Linked courses,STUDENT_STATES,ABSENCESand surveys are left untouched. Use this when the connector manages course enrollment independently of group membership.
Past courses, locked courses and group attribute changes (name, description, parent, logo) are never affected by this endpoint.
Errors: AMBIGUOUS_STUDENT_IDENTIFIER (400), MISSING_STUDENT_DATA (400), GROUP_NOT_FOUND (404), STUDENTS_NOT_FOUND (404), ARCHIVED_GROUP_EXISTS (422), ARCHIVED_STUDENT_EXISTS (422).
Rate limit: HEAVY. Idempotency: 5s deduplication window.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||

