API Changelog
The MILES API keeps evolving as new features land and old ones are removed. To keep API consumers up-to-date, changes in the schema – as well as changes the schema cannot express – are announced here.
To stay informed, you can subscribe via RSS too. Feed items are tagged with the kinds of changes they contain, so you can filter for releases that matter to you (e.g. only those with deprecations).
Details about this release in the version history
- DeprecatedOperation
onOwnUserUpdate - DeprecatedOperation
onAssessmentUpdate - DeprecatedOperation
onObjectiveRevisionUpdate - DeprecatedOperation
onFineObjectiveRevisionUpdate - DeprecatedOperation
onContentUnitRevisionUpdate - DeprecatedOperation
onLearningPhaseRevisionUpdate - DeprecatedOperation
onContentBlockRevisionUpdate - DeprecatedOperation
onCourseModuleRevisionUpdate - DeprecatedOperation
onTagUpdate - DeprecatedOperation
onExerciseRevisionUpdate - DeprecatedOperation
onNotificationsUpdate - AddedOperation
createOrUpdateGroupTagEdges - AddedOperation
deleteGroupTagEdges - AddedOperation
createOrUpdateRoleTagEdges - AddedOperation
deleteRoleTagEdges - AddedOperation
onOwnUserChangedTriggered whenever the logged in user’s own profile changes. Returns the logged in user’s id. Use getOwnUser to fetch the updates. Triggered by:updateOwnUser,updateUser. - AddedOperation
onNotificationsChangedTriggered whenever a notification for the logged in user is created, read or deleted. Returns the logged in user’s id. Use getNotifications to fetch the updates. - AddedOperation
onAssessmentChangedTriggered whenever the assessment, its user assignments or its content assignments change. Returns the assessment id. Use getAssessment to fetch the updates. Triggered by: -updateAssessment,updateAssessmentUser,updateAssessmentOwnUser- assignments:assignUsersToAssessment,unassignUsersFromAssessment,assignContentToAssessment,unassignContentFromAssessment-updateUsersInGroups(auto assign/unassign via group membership) - the scheduled assessment end job: a user’s time ran out, or the assessment started - AddedOperation
onCourseModuleRevisionChangedTriggered whenever the course module revision or one of its chapters changes. Returns the course module id. Use getCourseModuleRevision to fetch the updates. Triggered by: -updateCourseModule,publishCourseModule,resetCourseModuleRevisionand the editing lock mutations - the chapter mutations and the chapter/content unit edge mutations -createCourseModuleContentFile- the tag edge mutations - the collaborator, content rights and owner mutations -setContentsSharedBySystem,setContentsSharedByTenant - AddedOperation
onContentUnitRevisionChangedTriggered whenever the content unit revision, one of its learning phases or one of its content blocks changes. Returns the content unit id. Use getContentUnitRevision to fetch the updates. Triggered by: -updateContentUnit,publishContentUnits,resetContentUnitRevisionand the editing lock mutations - all learning phase and content block mutations - the exercise/learning phase and chapter/content unit edge mutations - the tag edge mutations - the collaborator, content rights and owner mutations -setContentsSharedBySystem,setContentsSharedByTenant - AddedOperation
onLearningPhaseRevisionChangedTriggered whenever the learning phase changes. Returns the learning phase id. Use getContentUnitRevision to fetch the updates. Triggered by: -updateLearningPhaseand the editing lock mutations - all content block mutations - the exercise/learning phase edge mutations - AddedOperation
onContentBlockRevisionChangedTriggered whenever the content block changes. Returns the content block id. Use getContentUnitRevision to fetch the updates. Triggered by:updateContentBlockand its editing lock mutations. - AddedOperation
onExerciseRevisionChangedTriggered whenever the exercise revision changes. Returns the exercise id. Use getExerciseRevision to fetch the updates. Triggered by: -updateExercise,publishExercises,resetExerciseRevisionand the editing lock mutations -generateExerciseHints(hints arrive asynchronously from the AI) - the fine objective edge and tag edge mutations - the collaborator, content rights and owner mutations - AddedOperation
onObjectiveRevisionChangedTriggered whenever the objective revision or one of its fine objectives changes. Returns the objective id. Use getObjectiveRevision to fetch the updates. Triggered by: -updateObjective,publishObjectives- all fine objective mutations - the editing lock mutations of objectives and fine objectives - the tag edge mutations - the collaborator, content rights and owner mutations - AddedOperation
onFineObjectiveRevisionChangedTriggered whenever the fine objective revision changes. Returns the fine objective id. Use getFineObjectiveRevision to fetch the updates. Triggered by:updateFineObjectiveand its editing lock mutations. - AddedOperation
onTagChangedTriggered whenever the tag itself or one of its content assignments changes. Returns the tag id. Use getTag to fetch the updates. Triggered by:updateTag,updateObjectiveand the tag edge mutations of all content types. - AddedType
GroupTagEdge - AddedType
GroupTagEdgeOrderArg - AddedType
GroupTagEdgeOrderField - AddedType
GroupTagEdgeOrderInfo - AddedType
GroupTagEdgesFilter - AddedType
GroupUserTagLogic - AddedType
InputGroupTagEdge - AddedType
InputGroupUserTagLogicWhen a connection with this logic is added: true: user gets added with this role false: no automatism - AddedType
InputRoleTagEdge - AddedType
RoleTagEdge - AddedType
RoleTagEdgesFilter - AddedField
PagedGroupTagEdgeList - AddedField
Chapter.updatedByfrom EditableContent: who made the last change (children included). null like CourseModule.createdBy. - AddedField
ContentBlock.updatedByfrom EditableContent: who made the last change (children included). null like CourseModule.createdBy. - AddedField
ContentUnit.updatedByfrom EditableContent: who made the last change (children included). null like createdBy. - AddedField
ContentUnit.publishedByfrom StandaloneContent: who published this version. null if unpublished / like createdBy. - AddedField
CourseModule.updatedByfrom EditableContent: who made the last change (children included). null like createdBy. - AddedField
CourseModule.publishedByfrom StandaloneContent: who published this version. null if unpublished / like createdBy. - AddedField
EditableContent.updatedByWho made the last change to the content (children included)?nullif the user is from a different tenant or without the corresponding LIST_/EDIT_ content privilege. Alwaysnullfor Objective/FineObjective (versioning is being removed from them). - AddedField
Exercise.updatedByfrom EditableContent: who made the last change (children included). null like createdBy. - AddedField
Exercise.publishedByfrom StandaloneContent: who published this version. null if unpublished / like createdBy. - AddedField
FineObjective.updatedByfrom EditableContent: always null for FineObjective (versioning being removed, #2517). - AddedField
Group.ownerthe user with the OWNER role in the group visible to everybody who can see the group (same as name), also to non-members null if the group has no owner or the owner was deleted - AddedField
LearningPhase.updatedByfrom EditableContent: who made the last change (children included). null like CourseModule.createdBy. - AddedField
Objective.updatedByfrom EditableContent: always null for Objective (versioning being removed, #2517). - AddedField
Objective.publishedByfrom StandaloneContent: always null for Objective (versioning being removed, #2517). - AddedField
StandaloneContent.publishedByWho published this version?nullfor unpublished contents, if the user is from a different tenant, or without the corresponding LIST_/EDIT_ content privilege. Alwaysnullfor Objective/FineObjective (versioning is being removed from them). - AddedField
TagEdges.numberGroupEdges - AddedField
TagEdges.numberRoleEdges - AddedField
TagEdges.numberGroupEdgesWithLogic - AddedField
TagEdges.numberGroupEdgesWithUserLogic - AddedField
TagEdges.numberGroupEdgesWithCourseModuleLogic - AddedField
TagEdges.numberRoleEdgesWithLogic - AddedField
TagEdges.groups - AddedField
TagEdges.roles - AddedInput field
AssessmentFilter2.courseModuleIdsonly returns assessments whose library contains at least one of the given course modules (CourseModule.id) with VIEW_ALL_GROUPS, this also returns the assessments of groups where the current user is not manager/tutor. those are restricted to basic information:usersis empty, allactionsare false,image,startInfo,startDate,endDate,duration,successThresholdandvalidityInMonthsare null - AddedInput field
GroupFilter.courseModuleIdsonly returns groups whose library contains at least one of the given course modules (CourseModule.id) visibility rules still apply: without VIEW_ALL_GROUPS only public groups and groups the user is member of are returned - AddedInput field
TagFilter.minGroupEdgesminimum required number ofGroupTagEdges the tag is only returned when it has at least this amount ofGroupTagEdges default = 0 (no edges required) - AddedInput field
TagFilter.minRoleEdgesminimum required number ofRoleTagEdges the tag is only returned when it has at least this amount ofRoleTagEdges default = 0 (no edges required) - AddedEnum value
TagOrderField.AMOUNT_GROUP_EDGESnumber of Groups the tag is assigned to - AddedEnum value
TagOrderField.AMOUNT_ROLE_EDGESnumber of Roles the tag is assigned to
Details about this release in the version history
- Changed behavior Some errors that were returned as
ACCESS_DENIED(“Internal error”) now carry their own error code, e.g.registerwith an invalid token returnsINVITATION_TOKEN_INVALID, a request for another tenant’s data returnsINVALID_TENANT. - RemovedOperation
exerciseImport - RemovedOperation
checkExerciseImport - RemovedType
ExcelImportError - RemovedEnum value
Privilege.EXERCISE_IMPORT - RemovedEnum value
UploadType.IMPORTFILE
Details about this release in the version history
- Changed behavior
AssessmentUser.completedSuccessfullyis nownullinstead offalsewhile pending exercises (hand in, open answer, …) could still change the result. - Changed behavior
inviteUserswithroleIdsnow additionally requiresEDIT_USER_ROLE.
Details about this release in the version history
- Changed behavior
updateExerciseOwner,updateContentUnitOwner,updateCourseModuleOwner,updateObjectiveOwnerand thecreateOrUpdate…CollaboratorEdgesmutations now reject users from another tenant. - Changed behavior
edges.exerciseRevisionsof a learning phase andedges.fineObjectiveRevisionsof an exercise on an older version now resolve from that version, likeedges.contentUnitRevisionsalready did.
Details about this release in the version history
Exercise content is now validated on write. See Schema Validation for details.
- Changed behavior
createExerciseandupdateExercisenow validatedefinition,answerandexplanationsagainst the JSON Schema of the exercise type and reject a mismatch withJSON_INVALID. - Changed behavior
publishExercisesnow publishes only exercises whoseExercise.validistrue. The rest are skipped and counted as errors in the result. - AddedField
Exercise.validtrue if the exercise passed the completeness check and is ready to be published
Details about this release in the version history
- Changed behavior
requestPasswordResetnow recognizes single sign-on users and sends them an email pointing to their identity provider instead of a reset token. - Changed behavior
setNewPasswordnow fails withINVALID_INPUTwhen the token belongs to a single sign-on user. - Changed behavior
addActivityLogsno longer writes learning-phase progress as a side effect of aLEARNING_PHASEentry —setPhaseCompletedhas taken over that responsibility.
Details about this release in the version history
Details about this release in the version history
- AddedOperation
updateFileReferencesupdates file meta data for given files. - AddedOperation
getFileReferencesget metadata on files - AddedType
UpdateFileReferenceInput - AddedField
FileReference.uuid - AddedField
FileReference.aiGeneratedwhether the file was produced by an AI feature - AddedField
Group.hasAiTutordoes the group have the ai tutor enabled? - AddedEnum value
Privilege.EDIT_FILE
This changelog starts with today’s release.
- DeprecatedField
Appointment.startDateString - DeprecatedField
Appointment.endDateString - DeprecatedEnum value
ActivityType.COURSE - DeprecatedEnum value
PrivilegeScope.HINT - DeprecatedArgument
filteronFineObjectiveEdges.exerciseRevisions - DeprecatedArgument
filteronLearningPhaseEdges.exerciseRevisions - DeprecatedInput field
SystemContentFilter.ordering