Upsert up to 1000 courses in a single request. Returns 200 when all items succeed, 207 for partial success with per-item failures.
Resolution logic:
courseIdprovided → strict update by Edusign IDexternalReferenceIdprovided → create-or-update: lookup by external ID within school scope; create if not found- Neither provided → create (all mandatory fields required)
XOR rules (mutually exclusive):
courseId/externalReferenceId— provide one or neitherprofessorIds/professorExternalReferenceIds— provide exactly oneclassroomId/classroomExternalReferenceId— provide one or neitherstudents.studentIds/students.studentExternalReferenceIds— provide one or neitherstudents.groupIds/students.groupExternalReferenceIds— provide one or neither
Required fields for creation: name, startDateTime, endDateTime, and one of professorIds or professorExternalReferenceIds.
Student enrollment (optional): when the students field is provided, the resolved roster fully replaces the current one (replace semantics, mirroring PUT /courses/:id/students for the roster diff — survey recipient sync is not performed by this endpoint, use the mono-cours PUT if you need it). Past-protection: students currently enrolled in a course where endAt < now or locked === true are not removed. Multi-group protection: students still members of an assigned group are not removed. When students is omitted on an update, the roster is left unchanged.
Per-item error codes: VALIDATION_ERROR, AMBIGUOUS_COURSE_IDENTIFIER, DUPLICATE_IN_REQUEST, COURSE_NOT_FOUND, ARCHIVED_COURSE_EXISTS, REQUIRED_FIELD_MISSING, INVALID_DATE_RANGE, AMBIGUOUS_PROFESSOR_IDENTIFIER, PROFESSORS_NOT_FOUND, ARCHIVED_PROFESSOR_EXISTS, AMBIGUOUS_CLASSROOM_IDENTIFIER, CLASSROOM_NOT_FOUND, AMBIGUOUS_STUDENT_IDENTIFIER, STUDENTS_NOT_FOUND, ARCHIVED_STUDENT_EXISTS, AMBIGUOUS_GROUP_IDENTIFIER, GROUPS_NOT_FOUND, ARCHIVED_GROUP_EXISTS, MAX_STUDENTS_EXCEEDED, CREATE_FAILED, UPDATE_FAILED.
Rate limit: HEAVY. Idempotency: 5s deduplication window.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
