Add a student to a group, without rewriting its membership. This endpoint never removes anyone.
Use it to turn a single enrolment event from your system into a single call: PUT /v3/groups/{id}/students requires reading the group first and sending back its whole membership.
One student per call. Send studentIds or studentExternalReferenceIds, never both, with exactly one identifier. The field is an array so the limit can be raised later without breaking your integration. To replace a whole membership use PUT /v3/groups/{id}/students; to move a batch without touching courses use POST /v3/groups/students/batch-upsert.
Safe to replay. A student already in the group is reported in unchangedCount — no error, no duplicate. Replaying a call that failed partway also finishes the job. The removal endpoint behaves differently on purpose, see DELETE /v3/groups/{id}/students.
All or nothing. An unknown student identifier fails the whole call and writes nothing.
Rate limit: standard. Concurrency: two identical calls sent at the same moment share a single execution; a call replayed after the response has come back runs again in full.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||

