Skip to content

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

  • Deprecated
    Operation onOwnUserUpdate
  • Deprecated
    Operation onAssessmentUpdate
  • Deprecated
    Operation onObjectiveRevisionUpdate
  • Deprecated
    Operation onFineObjectiveRevisionUpdate
  • Deprecated
    Operation onContentUnitRevisionUpdate
  • Deprecated
    Operation onLearningPhaseRevisionUpdate
  • Deprecated
    Operation onContentBlockRevisionUpdate
  • Deprecated
    Operation onCourseModuleRevisionUpdate
  • Deprecated
    Operation onTagUpdate
  • Deprecated
    Operation onExerciseRevisionUpdate
  • Deprecated
    Operation onNotificationsUpdate
  • Added
    Operation createOrUpdateGroupTagEdges
  • Added
    Operation deleteGroupTagEdges
  • Added
    Operation createOrUpdateRoleTagEdges
  • Added
    Operation deleteRoleTagEdges
  • Added
    Operation onOwnUserChanged
    Triggered 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.
  • Added
    Operation onNotificationsChanged
    Triggered 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.
  • Added
    Operation onAssessmentChanged
    Triggered 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
  • Added
    Operation onCourseModuleRevisionChanged
    Triggered 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, resetCourseModuleRevision and 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
  • Added
    Operation onContentUnitRevisionChanged
    Triggered 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, resetContentUnitRevision and 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
  • Added
    Operation onLearningPhaseRevisionChanged
    Triggered whenever the learning phase changes. Returns the learning phase id. Use getContentUnitRevision to fetch the updates. Triggered by: - updateLearningPhase and the editing lock mutations - all content block mutations - the exercise/learning phase edge mutations
  • Added
    Operation onContentBlockRevisionChanged
    Triggered whenever the content block changes. Returns the content block id. Use getContentUnitRevision to fetch the updates. Triggered by: updateContentBlock and its editing lock mutations.
  • Added
    Operation onExerciseRevisionChanged
    Triggered whenever the exercise revision changes. Returns the exercise id. Use getExerciseRevision to fetch the updates. Triggered by: - updateExercise, publishExercises, resetExerciseRevision and 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
  • Added
    Operation onObjectiveRevisionChanged
    Triggered 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
  • Added
    Operation onFineObjectiveRevisionChanged
    Triggered whenever the fine objective revision changes. Returns the fine objective id. Use getFineObjectiveRevision to fetch the updates. Triggered by: updateFineObjective and its editing lock mutations.
  • Added
    Operation onTagChanged
    Triggered whenever the tag itself or one of its content assignments changes. Returns the tag id. Use getTag to fetch the updates. Triggered by: updateTag, updateObjective and the tag edge mutations of all content types.
  • Added
    Type GroupTagEdge
  • Added
    Type GroupTagEdgeOrderArg
  • Added
    Type GroupTagEdgeOrderField
  • Added
    Type GroupTagEdgeOrderInfo
  • Added
    Type GroupTagEdgesFilter
  • Added
    Type GroupUserTagLogic
  • Added
    Type InputGroupTagEdge
  • Added
    Type InputGroupUserTagLogic
    When a connection with this logic is added: true: user gets added with this role false: no automatism
  • Added
    Type InputRoleTagEdge
  • Added
    Type RoleTagEdge
  • Added
    Type RoleTagEdgesFilter
  • Added
    Field PagedGroupTagEdgeList
  • Added
    Field Chapter.updatedBy
    from EditableContent: who made the last change (children included). null like CourseModule.createdBy.
  • Added
    Field ContentBlock.updatedBy
    from EditableContent: who made the last change (children included). null like CourseModule.createdBy.
  • Added
    Field ContentUnit.updatedBy
    from EditableContent: who made the last change (children included). null like createdBy.
  • Added
    Field ContentUnit.publishedBy
    from StandaloneContent: who published this version. null if unpublished / like createdBy.
  • Added
    Field CourseModule.updatedBy
    from EditableContent: who made the last change (children included). null like createdBy.
  • Added
    Field CourseModule.publishedBy
    from StandaloneContent: who published this version. null if unpublished / like createdBy.
  • Added
    Field EditableContent.updatedBy
    Who made the last change to the content (children included)? null if the user is from a different tenant or without the corresponding LIST_/EDIT_ content privilege. Always null for Objective/FineObjective (versioning is being removed from them).
  • Added
    Field Exercise.updatedBy
    from EditableContent: who made the last change (children included). null like createdBy.
  • Added
    Field Exercise.publishedBy
    from StandaloneContent: who published this version. null if unpublished / like createdBy.
  • Added
    Field FineObjective.updatedBy
    from EditableContent: always null for FineObjective (versioning being removed, #2517).
  • Added
    Field Group.owner
    the 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
  • Added
    Field Group.tags
    requires being manager of the group and LIST_TAG or EDIT_TAG empty list otherwise
  • Added
    Field LearningPhase.updatedBy
    from EditableContent: who made the last change (children included). null like CourseModule.createdBy.
  • Added
    Field Objective.updatedBy
    from EditableContent: always null for Objective (versioning being removed, #2517).
  • Added
    Field Objective.publishedBy
    from StandaloneContent: always null for Objective (versioning being removed, #2517).
  • Added
    Field Role.tags
    requires LIST_TAG or EDIT_TAG, empty list otherwise
  • Added
    Field StandaloneContent.publishedBy
    Who published this version? null for unpublished contents, if the user is from a different tenant, or without the corresponding LIST_/EDIT_ content privilege. Always null for Objective/FineObjective (versioning is being removed from them).
  • Added
    Field TagEdges.numberGroupEdges
  • Added
    Field TagEdges.numberRoleEdges
  • Added
    Field TagEdges.numberGroupEdgesWithLogic
  • Added
    Field TagEdges.numberGroupEdgesWithUserLogic
  • Added
    Field TagEdges.numberGroupEdgesWithCourseModuleLogic
  • Added
    Field TagEdges.numberRoleEdgesWithLogic
  • Added
    Field TagEdges.groups
  • Added
    Field TagEdges.roles
  • Added
    Input field AssessmentFilter2.courseModuleIds
    only 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: users is empty, all actions are false, image, startInfo, startDate, endDate, duration, successThreshold and validityInMonths are null
  • Added
    Input field GroupFilter.tags
    only returns groups that have all of the tags assigned (Tag.id)
  • Added
    Input field GroupFilter.courseModuleIds
    only 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
  • Added
    Input field TagFilter.minGroupEdges
    minimum required number of GroupTagEdges the tag is only returned when it has at least this amount of GroupTagEdges default = 0 (no edges required)
  • Added
    Input field TagFilter.minRoleEdges
    minimum required number of RoleTagEdges the tag is only returned when it has at least this amount of RoleTagEdges default = 0 (no edges required)
  • Added
    Enum value TagOrderField.AMOUNT_GROUP_EDGES
    number of Groups the tag is assigned to
  • Added
    Enum value TagOrderField.AMOUNT_ROLE_EDGES
    number of Roles the tag is assigned to

Details about this release in the version history

Details about this release in the version history

  • Changed behavior AssessmentUser.completedSuccessfully is now null instead of false while pending exercises (hand in, open answer, …) could still change the result.
  • Changed behavior inviteUsers with roleIds now additionally requires EDIT_USER_ROLE.

Details about this release in the version history

  • Changed behavior updateExerciseOwner, updateContentUnitOwner, updateCourseModuleOwner, updateObjectiveOwner and the createOrUpdate…CollaboratorEdges mutations now reject users from another tenant.
  • Changed behavior edges.exerciseRevisions of a learning phase and edges.fineObjectiveRevisions of an exercise on an older version now resolve from that version, like edges.contentUnitRevisions already did.

Details about this release in the version history

Exercise content is now validated on write. See Schema Validation for details.

  • Changed behavior createExercise and updateExercise now validate definition, answer and explanations against the JSON Schema of the exercise type and reject a mismatch with JSON_INVALID.
  • Changed behavior publishExercises now publishes only exercises whose Exercise.valid is true. The rest are skipped and counted as errors in the result.
  • Added
    Field Exercise.valid
    true if the exercise passed the completeness check and is ready to be published

Details about this release in the version history

  • Changed behavior requestPasswordReset now recognizes single sign-on users and sends them an email pointing to their identity provider instead of a reset token.
  • Changed behavior setNewPassword now fails with INVALID_INPUT when the token belongs to a single sign-on user.
  • Changed behavior addActivityLogs no longer writes learning-phase progress as a side effect of a LEARNING_PHASE entry — setPhaseCompleted has taken over that responsibility.

Details about this release in the version history

Details about this release in the version history

  • Added
    Operation updateFileReferences
    updates file meta data for given files.
  • Added
    Operation getFileReferences
    get metadata on files
  • Added
    Type UpdateFileReferenceInput
  • Added
    Field FileReference.uuid
  • Added
    Field FileReference.aiGenerated
    whether the file was produced by an AI feature
  • Added
    Field Group.hasAiTutor
    does the group have the ai tutor enabled?
  • Added
    Enum value Privilege.EDIT_FILE

This changelog starts with today’s release.