Duplicate a module version
Creates a copy of an existing module version with a new version label and DRAFT status. Copies examination requirements, additional descriptions, and time plan items. Returns the fully expanded new version (same shape as GET /modules/{id}/versions/{versionId}). Scoped to your integration’s institution via Basic Auth credentials.
/modules/{id}/versions/{versionId}/duplicateAuthorizationBasic auth · headerrequiredBasic Auth with clientId as username and clientSecret as password
idstringrequiredversionIdstringrequiredIdempotency-Keystringrequiredapplication/jsonobjectDuplicated module version
dataModuleVersionWithModulerequiredModule version from GET /modules/{id}/versions/{versionId}, including nested parent module with all sibling versions.
Show propertiesHide properties
idstringversionstringnamestringdescriptionstring | nulliconstring | nulliconTypestring | nullbannerstring | nullcreatedAtstring<date-time>updatedAtstring<date-time>requiredAttendancePercentageintegerectsPointsnumberECTS credit points. Halves only (0, 0.5, 1, 1.5, …). Breaking change: previously integer-only.
courseModuleIdstringstatusstringtimePlanIdstring | nullisDefaultbooleanearlyAssessmentEnabledbooleanisCurrentlyElectablebooleancapacityinteger | nullcolorinteger | nullcourseChatFileAttachmentsDefaultbooleancourseChatReadOnlyDefaultbooleancourseFeatureDefaultsobject | nullmoduleNamestring | nullattemptRulesobject | nullcreatedCoursesobject[]rows created from this version.
timePlanInstitutionLessonUnit | nullrelation.
Show propertiesHide properties
idstringrequirednamestringrequiredinstitutionIdstringrequiredminutesintegerrequiredisDefaultbooleanrequirednullparentConnectionsobject[]Nested childModuleVersion is the full
childConnectionsobject[]Nested parentModuleVersion is the full
examinationRequirementsModuleVersionExaminationRequirement[]Examination requirement with template defaults applied.
Show propertiesHide properties
ModuleVersionExaminationRequirementidstringrequiredcourseModuleVersionIdstringnamestringrequirednameEnglishstring | nulltypestringrequiredlengthinteger | nullratingModestringschedulingModestringisFinalExambooleanweightPercentageinteger | nullattemptWorkflowstringexaminationRequirementTemplateIdstring | nulltemplateIdstring | nullAlias of examinationRequirementTemplateId after merge.
allowAlternativeRequestbooleanneedsTopicConfirmationbooleantopicSubmissionDaysBeforeDeadlineinteger | nullexamineeAssignmentModestringcustomExamFormIdstring | nullnameTranslationsobject | nullexaminationRequirementTemplateobject | nulltimePlanItemsModuleVersionTimePlanItem[]Time plan item (id, name, needsAppointment, amount).
Show propertiesHide properties
ModuleVersionTimePlanItemidstringrequirednamestringrequiredneedsAppointmentbooleanrequiredamountintegerrequiredadditionalDescriptionsModuleVersionAdditionalDescription[]Additional description blocks, sorted by position.
Show propertiesHide properties
ModuleVersionAdditionalDescriptionidstringrequirednamestringrequireddescriptionstring | nullpositionintegerrequiredcourseModuleModuleInVersionDetailParent module on GET /modules/{id}/versions/{versionId}, including all sibling versions (fully expanded).
Show propertiesHide properties
idstringrequirednamestringrequiredinstitutionIdstringrequiredcodestring | nullisArchivedboolean | nullnameTranslationsobject | nullcourseModuleTagsModuleTag[]requiredShow propertiesHide properties
ModuleTagidstringrequiredcourseModuleIdstringrequiredtagIdstringrequiredtagobjectrequiredShow propertiesHide properties
idstringrequirednamestringrequiredinstitutionIdstringrequiredcolorstring | nulliconstring | nullversionsModuleVersionDetail[]requiredAll sibling versions, each fully expanded (same shape as the top-level version, without nested parent module).
Show propertiesHide properties
ModuleVersionDetailidstringversionstringnamestringdescriptionstring | nulliconstring | nulliconTypestring | nullbannerstring | nullcreatedAtstring<date-time>updatedAtstring<date-time>requiredAttendancePercentageintegerectsPointsnumberECTS credit points. Halves only (0, 0.5, 1, 1.5, …). Breaking change: previously integer-only.
courseModuleIdstringstatusstringtimePlanIdstring | nullisDefaultbooleanearlyAssessmentEnabledbooleanisCurrentlyElectablebooleancapacityinteger | nullcolorinteger | nullcourseChatFileAttachmentsDefaultbooleancourseChatReadOnlyDefaultbooleancourseFeatureDefaultsobject | nullmoduleNamestring | nullattemptRulesobject | nullcreatedCoursesobject[]rows created from this version.
timePlanInstitutionLessonUnit | nullrelation.
Show propertiesHide properties
InstitutionLessonUnitnullparentConnectionsobject[]Nested childModuleVersion is the full
childConnectionsobject[]Nested parentModuleVersion is the full
examinationRequirementsModuleVersionExaminationRequirement[]Examination requirement with template defaults applied.
timePlanItemsModuleVersionTimePlanItem[]Time plan item (id, name, needsAppointment, amount).
additionalDescriptionsModuleVersionAdditionalDescription[]Additional description blocks, sorted by position.
filesModuleVersionFile[]Files attached to this version (id, fileUrl).
filesModuleVersionFile[]Files attached to this version (id, fileUrl).
Show propertiesHide properties
ModuleVersionFileidstringrequiredfileUrlstringrequiredmetaResponseMetarequiredShow propertiesHide properties
requestIdstringrequiredtimestampstring<date-time>requiredversionstringrequiredv4watermarkstring<date-time>Present on GET /users?updatedSince= pages. Taken at the first page minus a 60s overlap. Bound into pagination.next_cursor. Use it as the next updatedSince after deduping by user id. Delivery is inclusive >= and at-least-once.
Unauthorized
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredNot Found
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredConflict — duplicate email or membership code (body includes existingUserId when known), a time-tracking session that is already running (activeSession), a time-tracking interval that overlaps an existing log (conflictingLog), idempotency key reused with a different body (idempotency_key_reused), or concurrent request with the same key still in progress (idempotency_key_in_progress)
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredUnprocessable Entity — validation or business rule error
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredToo Many Requests — 1000 requests per minute per institution. Includes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (ISO-8601), and Retry-After (seconds).
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredInternal Server Error
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequired