# Extracted from https://github.com/instructure/canvas-lms/blob/master/schema.graphql
"""
Autogenerated input type of AcceptEnrollmentInvitation
"""
input AcceptEnrollmentInvitationInput {
  enrollmentUuid: String!
}

"""
Autogenerated return type of AcceptEnrollmentInvitation.
"""
type AcceptEnrollmentInvitationPayload {
  enrollment: Enrollment
  errors: [ValidationError!]
  success: Boolean!
}

type Account implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!
  accountDomainLookups: [AccountDomainLookup!]
  accountDomains: [AccountDomain!]
  coursesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): CourseConnection
  customGradeStatusesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): CustomGradeStatusConnection
  id: ID!
  instructureIdentityOrganizationId: String
  name: String
  outcomeCalculationMethod: OutcomeCalculationMethod
  outcomeProficiency: OutcomeProficiency
  parentAccountsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): AccountConnection!
  proficiencyRatingsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ProficiencyRatingConnection
  rootOutcomeGroup: LearningOutcomeGroup!
  rubricsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): RubricConnection
  sisId: String
  standardGradeStatusesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): StandardGradeStatusConnection
  subAccountsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): AccountConnection
  workflowState: String!
}

"""
The connection type for Account.
"""
type AccountConnection {
  """
  A list of edges.
  """
  edges: [AccountEdge]

  """
  A list of nodes.
  """
  nodes: [Account]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

type AccountDomain implements LegacyIDInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  createdAt: DateTime
  host: String!
  updatedAt: DateTime
}

type AccountDomainLookup implements LegacyIDInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  accountDomain: AccountDomain
  authenticationProvider: String
  createdAt: DateTime
  name: String
  updatedAt: DateTime
}

"""
An edge in a connection.
"""
type AccountEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Account
}

type AccountNotification implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  accountId: ID!
  accountName: String
  createdAt: DateTime
  endAt: DateTime!
  icon: String
  id: ID!
  message: String!
  notificationType: String
  siteAdmin: Boolean!
  startAt: DateTime!
  subject: String!
  updatedAt: DateTime
}

"""
An activity stream
"""
type ActivityStream {
  """
  Returns a summary of the activity stream items for the current context
  """
  summary: [StreamSummaryItem!]
}

"""
Autogenerated input type of AddConversationMessage
"""
input AddConversationMessageInput {
  attachmentIds: [ID!]
  body: String!
  contextCode: String
  conversationId: ID!
  includedMessages: [ID!]
  mediaCommentId: ID
  mediaCommentType: String
  recipients: [String!]!
}

"""
Autogenerated return type of AddConversationMessage.
"""
type AddConversationMessagePayload {
  conversationMessage: ConversationMessage
  errors: [ValidationError!]
}

"""
A list of students that an `AssignmentOverride` applies to
"""
type AdhocStudents {
  students: [User!]
}

"""
An error that occurred while processing an allocation rule
"""
type AllocationError {
  assignmentId: ID!
  attribute: String
  attributeId: String
  message: String!
}

type AllocationRule implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!

  """
  Boolean indicating if this rule applies to the assessor (true) or assessee (false)
  """
  appliesToAssessor: Boolean!

  """
  The user who will be receiving the peer review
  """
  assessee: User

  """
  The user who will be doing the peer review
  """
  assessor: User
  assignmentId: ID!
  courseId: ID!
  createdAt: DateTime
  id: ID!

  """
  Boolean indicating if the assessor must review the assessee
  """
  mustReview: Boolean!

  """
  Boolean indicating if the assessor is permitted to review the assessee
  """
  reviewPermitted: Boolean!
  updatedAt: DateTime

  """
  The current state of the allocation rule
  """
  workflowState: String!
}

"""
The connection type for AllocationRule.
"""
type AllocationRuleConnection {
  """
  A list of edges.
  """
  edges: [AllocationRuleEdge]

  """
  A list of nodes.
  """
  nodes: [AllocationRule]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type AllocationRuleEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: AllocationRule
}

input AllocationRulesFilterInput {
  searchTerm: String
}

"""
Indicates whether a submission requires a provisional grade
"""
enum AllowProvisionalGradingType {
  """
  User can provide a provisional grade
  """
  allowed

  """
  User is not allowed to provide a provisional grade
  """
  not_allowed

  """
  Assignment does not use moderated grading or grades are already published
  """
  not_applicable
}

"""
An anonymous student identity
"""
type AnonymousStudentIdentity {
  anonymousId: ID!
  name: String!
  position: Int!
}

type AnonymousUser {
  avatarUrl: String
  id: ID!
  shortName: String!
}

type AssessmentRequest implements LegacyIDInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  anonymizedUser: User
  anonymousId: String
  assetId: String!
  assetSubmissionType: String
  available: Boolean
  createdAt: DateTime

  """
  Assessor's rubric assessment for the submission being peer reviewed
  """
  rubricAssessment: RubricAssessment

  """
  The submission being peer reviewed
  """
  submission: Submission

  """
  Assessor's comments for the submission being peer reviewed
  """
  submissionComments: [SubmissionComment!]
  updatedAt: DateTime
  user: User!
  workflowState: String!
}

"""
The type of assessment
"""
enum AssessmentType {
  grading
  peer_review
  provisional_grade
  self_assessment
}

interface AssetString {
  assetString: String
}

"""
Contains standardized date hash information for objects with date overrides
"""
interface AssignedDates {
  """
  Standardized date hash visible to current user
  """
  assignedToDates: [DateHash!]
}

input AssignedStudentsFilter {
  searchTerm: String
}

type Assignment implements AssignedDates & LegacyIDInterface & ModuleItemInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!

  """
  Allocation rules if peer review is enabled
  """
  allocationRules: AssignmentAllocationRules
  allowGoogleDocsSubmission: Boolean

  """
  Whether the current user can provide a provisional grade for this assignment
  """
  allowProvisionalGrading: AllowProvisionalGradingType!

  """
  The number of submission attempts a student can make for this assignment. null implies unlimited.
  """
  allowedAttempts: Int

  """
  permitted uploaded file extensions (e.g. ['doc', 'xls', 'txt'])
  """
  allowedExtensions: [String!]
  anonymizeStudents: Boolean
  anonymousGrading: Boolean
  anonymousInstructorAnnotations: Boolean
  anonymousStudentIdentities: [AnonymousStudentIdentity!]
  assessmentRequestsForCurrentUser: [AssessmentRequest!]

  """
  Assessment requests for a specific user where they are the assessor (peer reviewer)
  """
  assessmentRequestsForUser(userId: ID!): [AssessmentRequest!]
  assignedStudents(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: AssignedStudentsFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): UserConnection

  """
  Standardized date hash visible to current user
  """
  assignedToDates: [DateHash!]
  assignmentGroup: AssignmentGroup
  assignmentGroupId: ID
  assignmentOverrides(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): AssignmentOverrideConnection
  assignmentTargetConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    orderBy: AssignmentTargetSortOrder
  ): AssignmentOverrideConnection

  """
  Discriminator indicating the actual type of this assignment
  """
  assignmentType: AssignmentTypeEnum!

  """
  Returns empty array if visible to everyone
  """
  assignmentVisibility: [ID!]

  """
  Errors related to the assignment
  """
  autoGradeAssignmentErrors: [String!]!

  """
  Issues related to the assignment
  """
  autoGradeAssignmentIssues: EligibilityIssue
  canDuplicate: Boolean
  canManageAssignTo: Boolean
  canUnpublish: Boolean

  """
  specifies that the current user can update the rubric self-assessment.
  """
  canUpdateRubricSelfAssessment: Boolean

  """
  A list of checkpoints (also known as sub_assignments) that are associated with this assignment
  """
  checkpoints: [Checkpoint!]
  course: Course
  courseId: ID
  createdAt: DateTime
  description: String
  discussion: Discussion

  """
  when this assignment is due
  """
  dueAt(
    """
    When true, return the overridden dates.

    Not all roles have permission to view un-overridden dates (in which
    case the overridden dates will be returned)
    """
    applyOverrides: Boolean = true
  ): DateTime
  dueDateRequired: Boolean
  expectsExternalSubmission: Boolean
  expectsSubmission: Boolean

  """
  specifies that students are being graded as a group (as opposed to being graded individually).
  """
  gradeAsGroup: Boolean!
  gradeByQuestionEnabled: Boolean!

  """
  If this is a group assignment, boolean flag indicating whether or not students will be graded individually.
  """
  gradeGroupStudentsIndividually: Boolean
  graded: Boolean

  """
  If true, the assignment has at least one graded submission
  """
  gradedSubmissionsExist: Boolean

  """
  Grader identities if moderated assignment
  """
  graderIdentitiesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): GraderIdentityConnection
  gradesPublished: Boolean
  gradesPublishedAt: String
  gradingPeriodId: String

  """
  The grading role of the current user for this assignment. Returns null if the
  user does not have sufficient grading permissions.
  """
  gradingRole: GradingRole
  gradingStandard: GradingStandard
  gradingStandardId: ID
  gradingType: GradingType
  groupCategoryId: Int
  groupSet: GroupSet

  """
  returns submissions grouped to one submission object per group
  """
  groupSubmissionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionSearchFilterInput

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    orderBy: [SubmissionSearchOrder!]
  ): SubmissionConnection

  """
  specifies that this assignment is a group assignment
  """
  hasGroupCategory: Boolean!
  hasMultipleDueDates: Boolean

  """
  Indicates if the assignment has LTI 2.0 plagiarism detection tool configured
  """
  hasPlagiarismTool: Boolean!
  hasRubric: Boolean!

  """
  Boolean: returns true if the assignment is checkpointed. A checkpointed
  assignment has checkpoints ( also known as sub_assignments)
  """
  hasSubAssignments: Boolean!

  """
  If true, the assignment has been submitted to by at least one student
  """
  hasSubmittedSubmissions: Boolean
  htmlUrl: URL
  id: ID!
  importantDates: Boolean
  inClosedGradingPeriod: Boolean
  isLockedByMasterCourse: Boolean!

  """
  Assignment is connected to a New Quiz
  """
  isNewQuiz: Boolean!

  """
  the lock date (assignment is locked after this date)
  """
  lockAt(
    """
    When true, return the overridden dates.

    Not all roles have permission to view un-overridden dates (in which
    case the overridden dates will be returned)
    """
    applyOverrides: Boolean = true
  ): DateTime
  lockInfo: LockInfo
  ltiAssetProcessorsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): LtiAssetProcessorConnection
  moderatedGrading: ModeratedGrading
  moderatedGradingEnabled: Boolean
  moduleItems: [ModuleItem!]
  modules: [Module!]
  muted: Boolean

  """
  submissions for sub-assignments belonging to the current user
  """
  mySubAssignmentSubmissionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): SubmissionConnection
  name: String
  needsGradingCount: Int
  newQuizzesAnonymousParticipants: Boolean
  nonDigitalSubmission: Boolean

  """
  If true, the assignment will be omitted from the student's final grade
  """
  omitFromFinalGrade: Boolean

  """
  specifies that this assignment is only assigned to students for whom an
         `AssignmentOverride` applies.
  """
  onlyVisibleToOverrides: Boolean!
  originalityReportVisibility: String

  """
  The parent assignment (only for PeerReviewSubAssignment)
  """
  parentAssignment: Assignment

  """
  The parent assignment ID (only for PeerReviewSubAssignment)
  """
  parentAssignmentId: ID
  peerReviewSubAssignment: PeerReviewSubAssignment
  peerReviews: PeerReviews

  """
  the assignment is out of this many points
  """
  pointsPossible: Float

  """
  determines the order this assignment is displayed in in its assignment group
  """
  position: Int
  postManually: Boolean
  postPolicy: PostPolicy

  """
  present if Sync Grades to SIS feature is enabled
  """
  postToSis: Boolean

  """
  Indicates if the user is locked out of provisional grading for this assignment.
  """
  provisionalGradingLocked: Boolean!
  published: Boolean
  quiz: Quiz

  """
  Is the current user restricted from viewing quantitative data
  """
  restrictQuantitativeData(
    """
    Check extra permissions in RQD method
    """
    checkExtraPermissions: Boolean
  ): Boolean
  rubric: Rubric
  rubricAssessment: AssignmentRubricAssessment
  rubricAssociation: RubricAssociation

  """
  specifies that students can self-assess using the assignment rubric.
  """
  rubricSelfAssessmentEnabled: Boolean
  rubricUpdateUrl: String
  scheduledPost: ScheduledPost
  scoreStatistic: AssignmentScoreStatistic
  sisId: String
  state: AssignmentState!
  submissionTypes: [SubmissionType!]

  """
  submissions for this assignment
  """
  submissionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionSearchFilterInput

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    orderBy: [SubmissionSearchOrder!]
  ): SubmissionConnection
  submissionsDownloads: Int
  supportsGradeByQuestion: Boolean!

  """
  internal use
  """
  suppressAssignment: Boolean!
  timeZoneEdited: String
  title: String
  totalGradedSubmissions: Int
  totalSubmissions: Int
  type: String

  """
  the unlock date (assignment is unlocked after this date)
  """
  unlockAt(
    """
    When true, return the overridden dates.

    Not all roles have permission to view un-overridden dates (in which
    case the overridden dates will be returned)
    """
    applyOverrides: Boolean = true
  ): DateTime
  updatedAt: DateTime

  """
  specifies all other variables that can determine visiblity.
  """
  visibleToEveryone: Boolean!
}

"""
Allocation rules for peer review assignments
"""
type AssignmentAllocationRules {
  """
  Total count of allocation rules (filtered if search is applied)
  """
  count(filter: AllocationRulesFilterInput): Int

  """
  Paginated list of allocation rules
  """
  rulesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: AllocationRulesFilterInput

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): AllocationRuleConnection
}

"""
The connection type for Assignment.
"""
type AssignmentConnection {
  """
  A list of edges.
  """
  edges: [AssignmentEdge]

  """
  A list of nodes.
  """
  nodes: [Assignment]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

input AssignmentCreate {
  abGuid: [String!]
  assetProcessors: [LtiAssetProcessorCreateOrUpdate!]
  assignmentGroupId: ID
  assignmentOverrides: [AssignmentOverrideCreateOrUpdate!]
  courseId: ID!
  dueAt: DateTime

  """
  if true, this assignment is a parent assignment for checkpoints. cannot set points_possible, due_at, lock_at, or unlock_at
  """
  forCheckpoints: Boolean
  gradingStandardId: ID
  gradingType: GradingType
  groupCategoryId: ID
  importantDates: Boolean
  intraReviews: Boolean
  lockAt: DateTime
  name: String!
  onlyVisibleToOverrides: Boolean
  peerReviews: AssignmentPeerReviewsUpdate
  pointsPossible: Float
  postToSis: Boolean
  secureParams: String
  suppressAssignment: Boolean
  unlockAt: DateTime
}

"""
An edge in a connection.
"""
type AssignmentEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Assignment
}

input AssignmentFilter {
  """
  only return assignments for the given grading period. Defaults to
  the current grading period. Pass `null` to return all assignments
  (irrespective of the assignment's grading period)
  """
  gradingPeriodId: ID

  """
  only return assignments whose title matches this search term
  """
  searchTerm: String

  """
  only return assignments for the given submission types. Defaults to
  all.
  """
  submissionTypes: [SubmissionType!]

  """
  only return assignments for the given user. Defaults to
  the current user.
  """
  userId: ID
}

type AssignmentGroup implements AssignmentsConnectionInterface & LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!

  """
  returns a list of assignments.

  **NOTE**: for courses with grading periods, this will only return grading
  periods in the current course; see `AssignmentFilter` for more info.
  In courses with grading periods that don't have students, it is necessary
  to *not* filter by grading period to list assignments.
  """
  assignmentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: AssignmentFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): AssignmentConnection!
  createdAt: DateTime

  """
  grades for this assignment group
  """
  gradesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: GradesEnrollmentFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): GradesConnection
  groupWeight: Float
  id: ID!
  name: String
  position: Int
  rules: AssignmentGroupRules
  sisId: String
  state: AssignmentGroupState!
  updatedAt: DateTime
}

"""
The connection type for AssignmentGroup.
"""
type AssignmentGroupConnection {
  """
  A list of edges.
  """
  edges: [AssignmentGroupEdge]

  """
  A list of nodes.
  """
  nodes: [AssignmentGroup]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type AssignmentGroupEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: AssignmentGroup
}

type AssignmentGroupRules {
  """
  The highest N assignments are not included in grade calculations
  """
  dropHighest: Int

  """
  The lowest N assignments are not included in grade calculations
  """
  dropLowest: Int
  neverDrop: [Assignment!]
}

"""
States that Assignment Group can be in
"""
enum AssignmentGroupState {
  available
  deleted
}

input AssignmentModeratedGradingUpdate {
  enabled: Boolean
  finalGraderId: ID
  graderCommentsVisibleToGraders: Boolean
  graderCount: Int
  graderNamesVisibleToFinalGrader: Boolean
  gradersAnonymousToGraders: Boolean
}

type AssignmentOverride implements Timestamped {
  """
  legacy canvas id
  """
  _id: ID
  allDay: Boolean
  allDayDate: DateTime
  assignment: Assignment
  assignmentId: ID
  contextModule: Module
  createdAt: DateTime
  dueAt: DateTime
  id: ID
  lockAt: DateTime

  """
  This object specifies what students this override applies to
  """
  set: AssignmentOverrideSet
  title: String
  unassignItem: Boolean
  unlockAt: DateTime
  updatedAt: DateTime
}

"""
The connection type for AssignmentOverride.
"""
type AssignmentOverrideConnection {
  """
  A list of edges.
  """
  edges: [AssignmentOverrideEdge]

  """
  A list of nodes.
  """
  nodes: [AssignmentOverride]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

input AssignmentOverrideCreateOrUpdate {
  courseId: ID
  courseSectionId: ID
  dueAt: DateTime
  groupId: ID
  id: ID
  lockAt: DateTime
  noopId: ID
  studentIds: [ID!]
  title: String
  unassignItem: Boolean
  unlockAt: DateTime
}

"""
An edge in a connection.
"""
type AssignmentOverrideEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: AssignmentOverride
}

"""
Objects that can be assigned overridden dates
"""
union AssignmentOverrideSet = AdhocStudents | Course | Group | Noop | Section

input AssignmentPeerReviewsUpdate {
  acrossSections: Boolean
  anonymousReviews: Boolean
  automaticReviews: Boolean
  count: Int
  dueAt: DateTime
  enabled: Boolean
  intraReviews: Boolean
  submissionRequired: Boolean
}

"""
RubricAssessments on an Assignment
"""
type AssignmentRubricAssessment {
  """
  The count of RubricAssessments on an Assignment.
  """
  assessmentsCount: Int
}

"""
Statistics for an Assignment
"""
type AssignmentScoreStatistic {
  """
  The number of scores for the assignment
  """
  count: Int

  """
  The lower quartile score for the assignment
  """
  lowerQ: Float

  """
  The maximum score for the assignment
  """
  maximum: Float

  """
  The mean score for the assignment
  """
  mean: Float

  """
  The median score for the assignment
  """
  median: Float

  """
  The minimum score for the assignment
  """
  minimum: Float

  """
  The upper quartile score for the assignment
  """
  upperQ: Float
}

"""
States that an Assignment can be in
"""
enum AssignmentState {
  deleted
  duplicating
  fail_to_import
  failed_to_clone_outcome_alignment
  failed_to_duplicate
  failed_to_migrate
  importing
  migrating
  outcome_alignment_cloning
  published
  unpublished
}

"""
Field to sort by
"""
enum AssignmentTargetSortField {
  due_at
  lock_at
  title
  unlock_at
}

"""
Specify a sort order for the results
"""
input AssignmentTargetSortOrder {
  direction: OrderDirection
  field: AssignmentTargetSortField!
}

"""
Assignment subtypes for filtering queries and discriminating response types
"""
enum AssignmentTypeEnum {
  """
  Standard assignment
  """
  ASSIGNMENT

  """
  Peer review sub-assignment
  """
  PEER_REVIEW_SUB_ASSIGNMENT
}

input AssignmentUpdate {
  abGuid: [String!]
  assetProcessors: [LtiAssetProcessorCreateOrUpdate!]
  assignmentGroupId: ID
  assignmentOverrides: [AssignmentOverrideCreateOrUpdate!]
  dueAt: DateTime

  """
  if true, this assignment is a parent assignment for checkpoints. cannot set points_possible, due_at, lock_at, or unlock_at
  """
  forCheckpoints: Boolean
  gradingStandardId: ID
  gradingType: GradingType
  groupCategoryId: ID
  importantDates: Boolean
  intraReviews: Boolean
  lockAt: DateTime
  onlyVisibleToOverrides: Boolean
  peerReviews: AssignmentPeerReviewsUpdate
  pointsPossible: Float
  postToSis: Boolean
  secureParams: String
  setAssignment: Boolean
  suppressAssignment: Boolean
  unlockAt: DateTime
}

interface AssignmentsConnectionInterface {
  """
  returns a list of assignments.

  **NOTE**: for courses with grading periods, this will only return grading
  periods in the current course; see `AssignmentFilter` for more info.
  In courses with grading periods that don't have students, it is necessary
  to *not* filter by grading period to list assignments.
  """
  assignmentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: AssignmentFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): AssignmentConnection!
}

type AuditEvent implements LegacyIDInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  createdAt: DateTime
  eventType: AuditEventType!
  externalTool: AuditEventExternalTool
  payload: JSON
  quiz: AuditEventQuiz
  updatedAt: DateTime
  user: AuditEventUser
}

"""
The connection type for AuditEvent.
"""
type AuditEventConnection {
  """
  A list of edges.
  """
  edges: [AuditEventEdge]

  """
  A list of nodes.
  """
  nodes: [AuditEvent]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type AuditEventEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: AuditEvent
}

type AuditEventExternalTool implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  name: String!
  role: AuditEventRole!
}

type AuditEventQuiz implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  name: String!
  role: AuditEventRole!
}

enum AuditEventRole {
  admin
  final_grader
  grader
  student
}

enum AuditEventType {
  assignment_created
  assignment_updated
  docviewer_area_created
  docviewer_area_deleted
  docviewer_area_updated
  docviewer_comment_created
  docviewer_comment_deleted
  docviewer_comment_updated
  docviewer_free_draw_created
  docviewer_free_draw_deleted
  docviewer_free_draw_updated
  docviewer_free_text_created
  docviewer_free_text_deleted
  docviewer_free_text_updated
  docviewer_highlight_created
  docviewer_highlight_deleted
  docviewer_highlight_updated
  docviewer_point_created
  docviewer_point_deleted
  docviewer_point_updated
  docviewer_strikeout_created
  docviewer_strikeout_deleted
  docviewer_strikeout_updated
  grades_posted
  provisional_grade_created
  provisional_grade_selected
  provisional_grade_updated
  rubric_created
  rubric_deleted
  rubric_updated
  submission_comment_created
  submission_comment_deleted
  submission_comment_updated
  submission_updated
}

type AuditEventUser implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  name: String!
  role: AuditEventRole!
}

type AuditLogs {
  """
  A list of all recent graphql mutations run on the specified object
  """
  mutationLogs(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String
    assetString: String!

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    endTime: DateTime

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    startTime: DateTime
  ): MutationLogConnection
}

"""
Autogenerated input type of AutoGradeSubmission
"""
input AutoGradeSubmissionInput {
  submissionId: ID!
}

"""
Autogenerated return type of AutoGradeSubmission.
"""
type AutoGradeSubmissionPayload {
  error: String
  errors: [ValidationError!]
  progress: Progress
}

"""
Determines if/how a leader is chosen for each group
"""
enum AutoLeaderPolicy {
  """
  the first student assigned to the group is the leader
  """
  first

  """
  a leader is chosen at random
  """
  random
}

"""
Method of selecting an automatic leader for groups
"""
enum AutoLeaderType {
  first
  random
}

type Checkpoint implements AssignedDates {
  """
  Standardized date hash visible to current user
  """
  assignedToDates: [DateHash!]
  assignmentOverrides(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): AssignmentOverrideConnection

  """
  when this checkpoint is due
  """
  dueAt(
    """
    When true, return the overridden dates.

    Not all roles have permission to view un-overridden dates (in which
    case the overridden dates will be returned)
    """
    applyOverrides: Boolean = true
  ): DateTime

  """
  when this checkpoint is closed
  """
  lockAt(
    """
    When true, return the overridden dates.

    Not all roles have permission to view un-overridden dates (in which
    case the overridden dates will be returned)
    """
    applyOverrides: Boolean = true
  ): DateTime
  name: String

  """
  specifies that this checkpoint is only assigned to students for whom an override applies
  """
  onlyVisibleToOverrides: Boolean!

  """
  the checkpoint is out of this many points
  """
  pointsPossible: Float!

  """
  the tag of the checkpoint
  """
  tag: String!

  """
  when this checkpoint is available
  """
  unlockAt(
    """
    When true, return the overridden dates.

    Not all roles have permission to view un-overridden dates (in which
    case the overridden dates will be returned)
    """
    applyOverrides: Boolean = true
  ): DateTime
}

"""
Valid labels for discussion checkpoint types
"""
enum CheckpointLabelType {
  reply_to_entry
  reply_to_topic
}

"""
Comment bank items
"""
type CommentBankItem implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  assignmentId: ID
  comment: String!
  courseId: ID!
  createdAt: DateTime
  id: ID!
  updatedAt: DateTime
  userId: ID!
}

"""
The connection type for CommentBankItem.
"""
type CommentBankItemConnection {
  """
  A list of edges.
  """
  edges: [CommentBankItemEdge]

  """
  A list of nodes.
  """
  nodes: [CommentBankItem]
  pageInfo: TotalCountPageInfo!
}

"""
An edge in a connection.
"""
type CommentBankItemEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: CommentBankItem
}

type CommunicationChannel implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  createdAt: DateTime
  id: ID!
  notificationPolicies(contextType: NotificationPreferencesContextType): [NotificationPolicy!]
  notificationPolicyOverrides(accountId: ID, contextType: NotificationPreferencesContextType!, courseId: ID): [NotificationPolicy!]
  path: String
  pathType: String
  updatedAt: DateTime
}

"""
An edge in a connection.
"""
type ContentTag implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  canUnlink: Boolean
  createdAt: DateTime

  """
  A cursor for use in pagination.
  """
  cursor: String!
  group: LearningOutcomeGroup
  id: ID!

  """
  The item at the end of the edge.
  """
  node: ContentTagContent
  updatedAt: DateTime
}

"""
The connection type for ContentTagContent.
"""
type ContentTagConnection {
  """
  A list of edges.
  """
  edges: [ContentTag]

  """
  A list of nodes.
  """
  nodes: [ContentTagContent]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
Content of a Content Tag
"""
union ContentTagContent = LearningOutcome

type Conversation implements Node {
  """
  legacy canvas id
  """
  _id: ID!
  canReply: Boolean
  contextAssetString: String
  contextId: ID
  contextName: String
  contextType: String
  conversationMessagesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    createdBefore: DateTime

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    participants: [ID!]
  ): ConversationMessageConnection
  conversationMessagesCount: Int!
  conversationParticipantsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ConversationParticipantConnection
  id: ID!
  isPrivate: Boolean
  subject: String
  updatedAt: DateTime
}

type ConversationMessage {
  """
  legacy canvas id
  """
  _id: ID!
  attachments: [File!]
  attachmentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): FileConnection
  author: User
  body: String!
  conversationId: ID!
  createdAt: DateTime
  id: ID!
  mediaComment: MediaObject
  recipients: [User!]!
}

"""
The connection type for ConversationMessage.
"""
type ConversationMessageConnection {
  """
  A list of edges.
  """
  edges: [ConversationMessageEdge]

  """
  A list of nodes.
  """
  nodes: [ConversationMessage]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type ConversationMessageEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: ConversationMessage
}

type ConversationParticipant {
  """
  legacy canvas id
  """
  _id: ID!
  conversation: Conversation
  id: ID!
  label: String
  messages(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ConversationMessageConnection
  subscribed: Boolean!
  updatedAt: DateTime
  user: User
  userId: ID!
  workflowState: String!
}

"""
The connection type for ConversationParticipant.
"""
type ConversationParticipantConnection {
  """
  A list of edges.
  """
  edges: [ConversationParticipantEdge]

  """
  A list of nodes.
  """
  nodes: [ConversationParticipant]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type ConversationParticipantEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: ConversationParticipant
}

type Course implements AssetString & AssignmentsConnectionInterface & DiscussionsConnectionInterface & ExternalToolsConnectionInterface & FilesConnectionInterface & LegacyIDInterface & Node & PagesConnectionInterface & QuizzesConnectionInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  account: Account
  activityStream: ActivityStream
  allowFinalGradeOverride: Boolean
  applyGroupWeights: Boolean
  assetString: String
  assignmentGroups: [AssignmentGroup!]
  assignmentGroupsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): AssignmentGroupConnection!

  """
  PostPolicies for assignments within a course
  """
  assignmentPostPolicies(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): PostPolicyConnection

  """
  returns a list of assignments.

  **NOTE**: for courses with grading periods, this will only return grading
  periods in the current course; see `AssignmentFilter` for more info.
  In courses with grading periods that don't have students, it is necessary
  to *not* filter by grading period to list assignments.
  """
  assignmentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: AssignmentFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): AssignmentConnection!
  availableModerators(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): UserConnection
  availableModeratorsCount: Int

  """
  course short name
  """
  courseCode: String
  courseNickname: String
  createdAt: DateTime
  customGradeStatusesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): CustomGradeStatusConnection

  """
  returns dashboard card information for this course
  """
  dashboardCard: CourseDashboardCard

  """
  returns a list of discussions.
  """
  discussionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: DiscussionFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): DiscussionConnection
  enrollmentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: EnrollmentFilterInput

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): EnrollmentConnection

  """
  returns a list of external tools.
  """
  externalToolsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: ExternalToolFilterInput = {}

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ExternalToolConnection

  """
  returns a list of files.
  """
  filesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: FileFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): FileConnection

  """
  Folders for this course.
  """
  foldersConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): FolderConnection
  gradeStatuses: [CourseGradeStatus!]!
  gradingPeriodsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): GradingPeriodConnection!
  gradingStandard: GradingStandard

  """
  Project group sets for this course.
  """
  groupSets(includeNonCollaborative: Boolean = false): [GroupSet!]

  """
  Project group sets for this course.
  """
  groupSetsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int
    includeNonCollaborative: Boolean = false

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): GroupSetConnection
  groupsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int
    includeNonCollaborative: Boolean = false

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): GroupConnection
  horizonCourse: Boolean
  id: ID!

  """
  Returns a URL for the course image (this is the image used on dashboard
  course cards)
  """
  imageUrl: URL

  """
  Returns module progression statistics for the current user
  """
  moduleProgressionStatistics: ModuleProgressionStatistics
  modulesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Filter modules by various criteria
    """
    filter: ModuleFilterInput

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ModuleConnection
  name: String!
  outcomeAlignmentStats: CourseOutcomeAlignmentStats
  outcomeCalculationMethod: OutcomeCalculationMethod
  outcomeProficiency: OutcomeProficiency

  """
  returns a list of wiki pages.
  """
  pagesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: PageFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): PageConnection

  """
  returns permission information for the current user in this course
  """
  permissions: CoursePermissions

  """
  A course-specific post policy
  """
  postPolicy: PostPolicy

  """
  returns a list of quizzes.
  """
  quizzesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: QuizFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): QuizConnection
  relevantGradingPeriodGroup: GradingPeriodGroup
  rootOutcomeGroup: LearningOutcomeGroup!
  rubricsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): RubricConnection
  sectionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: CourseSectionsFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): SectionConnection!

  """
  Settings for the course
  """
  settings: CourseSettings
  sisId: String
  state: CourseWorkflowState!

  """
  Returns submission-related statistics for the current user
  """
  submissionStatistics(
    """
    Optional observed user ID for observer statistics
    """
    observedUserId: ID
  ): SubmissionStatistics

  """
  all the submissions for assignments in this course
  """
  submissionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionFilterInput

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    orderBy: [SubmissionOrderCriteria!]

    """
    Only return submissions for the given students.
    """
    studentIds: [ID!]
  ): SubmissionConnection
  syllabusBody: String
  term: Term
  updatedAt: DateTime
  usersConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: CourseUsersFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    sort: CourseUsersSortInputType

    """
    Only include users with the given ids.

    **This field is deprecated, use `filter: {userIds}` instead.**
    """
    userIds: [ID!]
  ): UserConnection
  usersConnectionCount(
    filter: CourseUsersFilter
    sort: CourseUsersSortInputType

    """
    Only include users with the given ids.

    **This field is deprecated, use `filter: {userIds}` instead.**
    """
    userIds: [ID!]
  ): Int
}

"""
The connection type for Course.
"""
type CourseConnection {
  """
  A list of edges.
  """
  edges: [CourseEdge]

  """
  A list of nodes.
  """
  nodes: [Course]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
A card on the course dashboard
"""
type CourseDashboardCard {
  assetString: String
  canChangeCoursePublishState: Boolean
  canManage: Boolean
  canReadAnnouncements: Boolean
  color: String
  courseCode: String
  defaultView: String
  enrollmentState: String
  enrollmentType: String
  frontPageTitle: String
  href: String
  image: URL
  isFavorited: Boolean
  isHomeroom: Boolean
  isK5Subject: Boolean
  links: [CourseDashboardCardLink!]
  longName: String
  observee: String
  originalName: String
  pagesUrl: URL
  position: Int
  published: Boolean
  shortName: String
  subtitle: String
  term: Term
  useClassicFont: Boolean
}

"""
A link on a course dashboard card
"""
type CourseDashboardCardLink {
  cssClass: String
  hidden: Boolean
  icon: String
  label: String
  path: String
}

"""
An edge in a connection.
"""
type CourseEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Course
}

"""
Users in a course can be returned based on these enrollment states
"""
enum CourseFilterableEnrollmentState {
  active
  completed
  creation_pending
  inactive
  invited
  rejected
}

"""
Users in a course can be returned based on these enrollment types
"""
enum CourseFilterableEnrollmentType {
  DesignerEnrollment
  ObserverEnrollment
  StudentEnrollment
  StudentViewEnrollment
  TaEnrollment
  TeacherEnrollment
}

"""
Grade statuses that can be applied to submissions in a course
"""
enum CourseGradeStatus {
  excused
  extended
  late
  missing
  none
}

type CourseOutcomeAlignmentStats {
  alignedArtifacts: Int
  alignedOutcomes: Int
  artifactAlignments: Int
  totalAlignments: Int
  totalArtifacts: Int
  totalOutcomes: Int
}

type CoursePermissions {
  becomeUser: Boolean
  manageGrades: Boolean
  sendMessages: Boolean
  viewAllGrades: Boolean
  viewAnalytics: Boolean
}

type CourseProgression {
  """
  Modules are ordered by position
  """
  incompleteModulesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ModuleProgressionConnection
  requirements: CourseRequirements!
}

type CourseRequirements {
  completed: Int!
  completionPercentage: Float!
  total: Int!
}

input CourseSectionsFilter {
  """
  Only include sections associated with users assigned to this assignment
  """
  assignmentId: ID
}

"""
Settings for a course
"""
type CourseSettings {
  """
  Whether the course allows final grade override
  """
  allowFinalGradeOverride: Boolean

  """
  Whether the course allows students to create anonymous discussion topics
  """
  allowStudentAnonymousDiscussionTopics: Boolean

  """
  Whether the course allows students to edit their discussion posts
  """
  allowStudentDiscussionEditing: Boolean

  """
  Whether the course allows students to report discussion posts
  """
  allowStudentDiscussionReporting: Boolean

  """
  Whether the course allows students to create discussion topics
  """
  allowStudentDiscussionTopics: Boolean

  """
  Whether the course allows students to attach files to discussion posts
  """
  allowStudentForumAttachments: Boolean

  """
  Whether the course allows student organized groups
  """
  allowStudentOrganizedGroups: Boolean

  """
  ID of the course banner image
  """
  bannerImageId: ID

  """
  URL to the course banner image
  """
  bannerImageUrl: String

  """
  Whether the course has conditional release enabled
  """
  conditionalRelease: Boolean

  """
  Color for the course
  """
  courseColor: String

  """
  Default due time for the course
  """
  defaultDueTime: String

  """
  Whether the course filters SpeedGrader by student group
  """
  filterSpeedGraderByStudentGroup: Boolean

  """
  Friendly name for the course
  """
  friendlyName: String

  """
  Grade passback setting for the course
  """
  gradePassbackSetting: String

  """
  Whether the course has a grading standard enabled
  """
  gradingStandardEnabled: Boolean

  """
  ID of the grading standard, if enabled
  """
  gradingStandardId: ID

  """
  Whether the course hides grade distribution graphs from students
  """
  hideDistributionGraphs: Boolean

  """
  Whether the course hides final grades from students
  """
  hideFinalGrades: Boolean

  """
  Whether the course hides sections on the course users page
  """
  hideSectionsOnCourseUsersPage: Boolean

  """
  Maximum number of announcements to show on the home page
  """
  homePageAnnouncementLimit: Int

  """
  Whether the course is a homeroom course
  """
  homeroomCourse: Boolean

  """
  ID of the course image
  """
  imageId: ID

  """
  URL to the course image
  """
  imageUrl: String

  """
  Whether the course locks all announcements
  """
  lockAllAnnouncements: Boolean

  """
  How the course restricts quantitative data for students
  """
  restrictQuantitativeData: Boolean

  """
  Whether the course restricts students from viewing future courses
  """
  restrictStudentFutureView: Boolean

  """
  Whether the course restricts students from viewing past courses
  """
  restrictStudentPastView: Boolean

  """
  Whether the course shows announcements on the home page
  """
  showAnnouncementsOnHomePage: Boolean

  """
  ID of the module that should only be shown to students
  """
  showStudentOnlyModuleId: ID

  """
  ID of the module that should only be shown to teachers
  """
  showTeacherOnlyModuleId: ID

  """
  Whether the course shows the syllabus course summary
  """
  syllabusCourseSummary: Boolean

  """
  Whether the course requires usage rights for uploaded files
  """
  usageRightsRequired: Boolean
}

input CourseUsersFilter {
  """
  Only return users with the specified enrollment role ids
  """
  enrollmentRoleIds: [ID!]

  """
  only return users with the given enrollment state. defaults
  to `invited`, `creation_pending`, `active`
  """
  enrollmentStates: [CourseFilterableEnrollmentState!]

  """
  Only return users with the specified enrollment types
  """
  enrollmentTypes: [CourseFilterableEnrollmentType!]

  """
  Exclude test students from results
  """
  excludeTestStudents: Boolean

  """
  Only return users that match the given search term. The search
  term is matched against the user's name and depending on current
  user permissions against the user's login id, email and sisid
  """
  searchTerm: String

  """
  only include users with the given ids
  """
  userIds: [ID!]
}

"""
Order direction for results
"""
enum CourseUsersSortDirectionType {
  asc
  desc
}

"""
Sort field for results
"""
enum CourseUsersSortFieldType {
  last_activity_at
  login_id
  name
  role
  section_name
  sis_id
  total_activity_time
}

"""
Specify sort field and direction for results
"""
input CourseUsersSortInputType {
  direction: CourseUsersSortDirectionType
  field: CourseUsersSortFieldType!
}

"""
Fields to order course work submissions by
"""
enum CourseWorkSubmissionsOrderField {
  """
  Order by due date
  """
  due_at

  """
  Order by graded date
  """
  graded_at
}

"""
States that Courses can be in
"""
enum CourseWorkflowState {
  available
  claimed
  completed
  created
  deleted
}

"""
Autogenerated input type of CreateAccountDomainLookup
"""
input CreateAccountDomainLookupInput {
  accountDomainId: ID!
  authenticationProvider: String
  name: String!
}

"""
Autogenerated return type of CreateAccountDomainLookup.
"""
type CreateAccountDomainLookupPayload {
  accountDomainLookup: AccountDomainLookup
  errors: [ValidationError!]
}

"""
Autogenerated input type of CreateAllocationRule
"""
input CreateAllocationRuleInput {
  appliesToAssessor: Boolean = true
  assesseeIds: [ID!]!
  assessorIds: [ID!]!
  assignmentId: ID!
  mustReview: Boolean = true
  reciprocal: Boolean = false
  reviewPermitted: Boolean = true
}

"""
Autogenerated return type of CreateAllocationRule.
"""
type CreateAllocationRulePayload {
  allocationErrors: [AllocationError!]
  allocationRules: [AllocationRule!]
  errors: [ValidationError!]
}

"""
Autogenerated input type of CreateAssignment
"""
input CreateAssignmentInput {
  allowedAttempts: Int
  allowedExtensions: [String!]

  """
  requires anonymous_marking course feature to be set to true
  """
  anonymousGrading: Boolean
  anonymousInstructorAnnotations: Boolean
  assignmentGroupId: ID
  assignmentOverrides: [AssignmentOverrideCreateOrUpdate!]
  courseId: ID!
  description: String
  dueAt: DateTime

  """
  if true, this assignment is a parent assignment for checkpoints. cannot set points_possible, due_at, lock_at, or unlock_at
  """
  forCheckpoints: Boolean
  gradeGroupStudentsIndividually: Boolean
  gradingStandardId: ID
  gradingType: GradingType
  groupCategoryId: ID
  groupSetId: ID
  lockAt: DateTime
  moderatedGrading: AssignmentModeratedGradingUpdate
  moduleIds: [ID!]
  name: String!
  omitFromFinalGrade: Boolean
  onlyVisibleToOverrides: Boolean
  peerReviews: AssignmentPeerReviewsUpdate
  pointsPossible: Float
  position: Int
  postToSis: Boolean
  secureParams: String
  state: AssignmentState
  submissionTypes: [SubmissionType!]
  suppressAssignment: Boolean
  unlockAt: DateTime
}

"""
Autogenerated return type of CreateAssignment.
"""
type CreateAssignmentPayload {
  assignment: Assignment
  errors: [ValidationError!]
}

"""
Autogenerated input type of CreateCommentBankItem
"""
input CreateCommentBankItemInput {
  assignmentId: ID
  comment: String!
  courseId: ID!
}

"""
Autogenerated return type of CreateCommentBankItem.
"""
type CreateCommentBankItemPayload {
  commentBankItem: CommentBankItem
  errors: [ValidationError!]
}

"""
Autogenerated input type of CreateConversation
"""
input CreateConversationInput {
  attachmentIds: [ID!]
  body: String!
  bulkMessage: Boolean
  contextCode: String
  conversationId: ID
  forceNew: Boolean
  groupConversation: Boolean
  mediaCommentId: ID
  mediaCommentType: String
  recipients: [String!]!
  subject: String
  tags: [String!]
}

"""
Autogenerated return type of CreateConversation.
"""
type CreateConversationPayload {
  conversations: [ConversationParticipant!]
  errors: [ValidationError!]
}

"""
Autogenerated input type of CreateDiscussionEntry
"""
input CreateDiscussionEntryInput {
  discussionTopicId: ID!
  fileId: ID
  isAnonymousAuthor: Boolean
  message: String!
  parentEntryId: ID
  quotedEntryId: ID
}

"""
Autogenerated return type of CreateDiscussionEntry.
"""
type CreateDiscussionEntryPayload {
  discussionEntry: DiscussionEntry
  errors: [ValidationError!]
  mySubAssignmentSubmissions: [Submission!]
}

"""
Autogenerated input type of CreateDiscussionTopic
"""
input CreateDiscussionTopicInput {
  allowRating: Boolean
  anonymousState: DiscussionTopicAnonymousStateType
  assignment: AssignmentCreate
  checkpoints: [DiscussionCheckpoints!]
  contextId: ID!
  contextType: DiscussionTopicContextType!
  delayedPostAt: DateTime
  discussionType: DiscussionTopicDiscussionType
  expanded: Boolean
  expandedLocked: Boolean
  fileId: ID
  groupCategoryId: ID
  isAnnouncement: Boolean
  isAnonymousAuthor: Boolean
  lockAt: DateTime
  locked: Boolean
  message: String
  onlyGradersCanRate: Boolean
  onlyVisibleToOverrides: Boolean
  podcastEnabled: Boolean
  podcastHasStudentPosts: Boolean
  published: Boolean
  requireInitialPost: Boolean
  sortOrder: DiscussionSortOrderType
  sortOrderLocked: Boolean
  specificSections: String
  title: String
  todoDate: DateTime
  ungradedDiscussionOverrides: [AssignmentOverrideCreateOrUpdate!]
}

"""
Autogenerated return type of CreateDiscussionTopic.
"""
type CreateDiscussionTopicPayload {
  discussionTopic: Discussion
  errors: [ValidationError!]
}

"""
Autogenerated input type of CreateGroupInSet
"""
input CreateGroupInSetInput {
  groupSetId: ID!
  name: String!
  nonCollaborative: Boolean = false
}

"""
Autogenerated return type of CreateGroupInSet.
"""
type CreateGroupInSetPayload {
  errors: [ValidationError!]
  group: Group
}

"""
Autogenerated input type of CreateGroupSet
"""
input CreateGroupSetInput {
  assignAsync: Boolean
  assignUnassignedMembers: Boolean
  autoLeaderType: AutoLeaderType
  contextId: ID!
  contextType: GroupSetContextType!
  createGroupCount: Int
  createGroupMemberCount: Int
  enableAutoLeader: Boolean
  enableSelfSignup: Boolean
  groupBySection: Boolean
  groupLimit: Int
  name: String!
  nonCollaborative: Boolean
  restrictSelfSignup: Boolean
  selfSignup: Boolean
}

"""
Autogenerated return type of CreateGroupSet.
"""
type CreateGroupSetPayload {
  errors: [ValidationError!]
  groupSet: GroupSet
}

"""
Autogenerated input type of CreateInternalSetting
"""
input CreateInternalSettingInput {
  name: String!
  value: String!
}

"""
Autogenerated return type of CreateInternalSetting.
"""
type CreateInternalSettingPayload {
  errors: [ValidationError!]
  internalSetting: InternalSetting
}

"""
Autogenerated input type of CreateLearningOutcomeGroup
"""
input CreateLearningOutcomeGroupInput {
  description: String
  id: ID!
  title: String!
  vendorGuid: String
}

"""
Autogenerated return type of CreateLearningOutcomeGroup.
"""
type CreateLearningOutcomeGroupPayload {
  errors: [ValidationError!]
  learningOutcomeGroup: LearningOutcomeGroup
}

"""
Autogenerated input type of CreateLearningOutcome
"""
input CreateLearningOutcomeInput {
  calculationInt: Int
  calculationMethod: String
  description: String
  displayName: String
  groupId: ID!
  masteryPoints: Float
  ratings: [ProficiencyRatingInput!]
  title: String!
  vendorGuid: String
}

"""
Autogenerated return type of CreateLearningOutcome.
"""
type CreateLearningOutcomePayload {
  errors: [ValidationError!]
  learningOutcome: LearningOutcome
}

"""
Autogenerated input type of CreateModule
"""
input CreateModuleInput {
  courseId: ID!
  name: String!
}

"""
Autogenerated return type of CreateModule.
"""
type CreateModulePayload {
  errors: [ValidationError!]
  module: Module
}

"""
Autogenerated input type of CreateOutcomeCalculationMethod
"""
input CreateOutcomeCalculationMethodInput {
  calculationInt: Int
  calculationMethod: String!
  contextId: ID!
  contextType: String!
}

"""
Autogenerated return type of CreateOutcomeCalculationMethod.
"""
type CreateOutcomeCalculationMethodPayload {
  errors: [ValidationError!]
  outcomeCalculationMethod: OutcomeCalculationMethod
}

"""
Autogenerated input type of CreateOutcomeProficiency
"""
input CreateOutcomeProficiencyInput {
  contextId: ID!
  contextType: String!
  proficiencyRatings: [OutcomeProficiencyRatingCreate!]!
}

"""
Autogenerated return type of CreateOutcomeProficiency.
"""
type CreateOutcomeProficiencyPayload {
  errors: [ValidationError!]
  outcomeProficiency: OutcomeProficiency
}

"""
Autogenerated input type of CreateSubmissionComment
"""
input CreateSubmissionCommentInput {
  attempt: Int
  comment: String!
  draftComment: Boolean = false
  fileIds: [ID!]

  """
  Post comment to entire group (only relevant for group assignments grading students individually)
  """
  groupComment: Boolean = false
  mediaObjectId: ID
  mediaObjectType: String
  reviewerSubmissionId: ID
  submissionId: ID!
}

"""
Autogenerated return type of CreateSubmissionComment.
"""
type CreateSubmissionCommentPayload {
  errors: [ValidationError!]
  submissionComment: SubmissionComment
}

"""
Autogenerated input type of CreateSubmissionDraft
"""
input CreateSubmissionDraftInput {
  activeSubmissionType: DraftableSubmissionType!
  attempt: Int
  body: String
  externalToolId: ID
  fileIds: [ID!]
  ltiLaunchUrl: String
  mediaId: ID
  resourceLinkLookupUuid: String
  submissionId: ID!
  url: String
}

"""
Autogenerated return type of CreateSubmissionDraft.
"""
type CreateSubmissionDraftPayload {
  errors: [ValidationError!]
  submissionDraft: SubmissionDraft
}

"""
Autogenerated input type of CreateSubmission
"""
input CreateSubmissionInput {
  annotatableAttachmentId: ID
  assignmentId: ID!
  body: String
  fileIds: [ID!]
  mediaId: ID
  resourceLinkLookupUuid: String
  studentId: ID
  submissionType: OnlineSubmissionType!
  url: String
}

"""
Autogenerated return type of CreateSubmission.
"""
type CreateSubmissionPayload {
  errors: [ValidationError!]
  submission: Submission
}

"""
Autogenerated input type of CreateUserInboxLabel
"""
input CreateUserInboxLabelInput {
  names: [String!]!
}

"""
Autogenerated return type of CreateUserInboxLabel.
"""
type CreateUserInboxLabelPayload {
  errors: [ValidationError!]
  inboxLabels: [String!]
}

type CustomGradeStatus implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!
  color: String!
  icon: String
  id: ID!
  name: String!
}

"""
The connection type for CustomGradeStatus.
"""
type CustomGradeStatusConnection {
  """
  A list of edges.
  """
  edges: [CustomGradeStatusEdge]

  """
  A list of nodes.
  """
  nodes: [CustomGradeStatus]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type CustomGradeStatusEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: CustomGradeStatus
}

input DashboardObserveeFilter {
  """
  Only view filtered user
  """
  observedUserId: ID
}

"""
Standardized date hash from backend assigned_to_dates field
"""
type DateHash {
  base: Boolean
  dueAt: DateTime
  id: ID
  lockAt: DateTime
  peerReviewDates: PeerReviewDates
  set: DateHashSet
  title: String
  unlockAt: DateTime
}

"""
Set information for a date hash entry
"""
type DateHashSet {
  id: ID
  type: String
}

"""
an ISO8601 formatted time string
"""
scalar DateTime

"""
a range of datetimes
"""
input DateTimeRange {
  end: DateTime
  start: DateTime
}

"""
Autogenerated input type of DeleteAccountDomainLookup
"""
input DeleteAccountDomainLookupInput {
  id: ID!
}

"""
Autogenerated return type of DeleteAccountDomainLookup.
"""
type DeleteAccountDomainLookupPayload {
  accountDomainLookupId: ID
  errors: [ValidationError!]
}

"""
Autogenerated input type of DeleteAllocationRule
"""
input DeleteAllocationRuleInput {
  ruleId: ID!
}

"""
Autogenerated return type of DeleteAllocationRule.
"""
type DeleteAllocationRulePayload {
  allocationRuleId: ID!
  errors: [ValidationError!]
}

"""
Autogenerated input type of DeleteCommentBankItem
"""
input DeleteCommentBankItemInput {
  id: ID!
}

"""
Autogenerated return type of DeleteCommentBankItem.
"""
type DeleteCommentBankItemPayload {
  commentBankItemId: ID!
  errors: [ValidationError!]
}

"""
Autogenerated input type of DeleteConversationMessages
"""
input DeleteConversationMessagesInput {
  ids: [ID!]!
}

"""
Autogenerated return type of DeleteConversationMessages.
"""
type DeleteConversationMessagesPayload {
  conversationMessageIds: [ID!]!
  errors: [ValidationError!]
}

"""
Autogenerated input type of DeleteConversations
"""
input DeleteConversationsInput {
  ids: [ID!]!
}

"""
Autogenerated return type of DeleteConversations.
"""
type DeleteConversationsPayload {
  conversationIds: [ID!]
  errors: [ValidationError!]
}

"""
Autogenerated input type of DeleteCustomGradeStatus
"""
input DeleteCustomGradeStatusInput {
  id: ID!
}

"""
Autogenerated return type of DeleteCustomGradeStatus.
"""
type DeleteCustomGradeStatusPayload {
  customGradeStatusId: ID
  errors: [ValidationError!]
}

"""
Autogenerated input type of DeleteDiscussionEntry
"""
input DeleteDiscussionEntryInput {
  id: ID!
}

"""
Autogenerated return type of DeleteDiscussionEntry.
"""
type DeleteDiscussionEntryPayload {
  discussionEntry: DiscussionEntry
  errors: [ValidationError!]
}

"""
Autogenerated input type of DeleteDiscussionTopic
"""
input DeleteDiscussionTopicInput {
  id: ID!
}

"""
Autogenerated return type of DeleteDiscussionTopic.
"""
type DeleteDiscussionTopicPayload {
  discussionTopicId: ID!
  errors: [ValidationError!]
}

"""
Autogenerated input type of DeleteInternalSetting
"""
input DeleteInternalSettingInput {
  internalSettingId: ID!
}

"""
Autogenerated return type of DeleteInternalSetting.
"""
type DeleteInternalSettingPayload {
  errors: [ValidationError!]
  internalSettingId: ID!
}

"""
Autogenerated input type of DeleteOutcomeCalculationMethod
"""
input DeleteOutcomeCalculationMethodInput {
  id: ID!
}

"""
Autogenerated return type of DeleteOutcomeCalculationMethod.
"""
type DeleteOutcomeCalculationMethodPayload {
  errors: [ValidationError!]
  outcomeCalculationMethodId: ID!
}

"""
Autogenerated input type of DeleteOutcomeLinks
"""
input DeleteOutcomeLinksInput {
  ids: [ID!]!
}

"""
Autogenerated return type of DeleteOutcomeLinks.
"""
type DeleteOutcomeLinksPayload {
  deletedOutcomeLinkIds: [ID!]!
  errors: [ValidationError!]
}

"""
Autogenerated input type of DeleteOutcomeProficiency
"""
input DeleteOutcomeProficiencyInput {
  id: ID!
}

"""
Autogenerated return type of DeleteOutcomeProficiency.
"""
type DeleteOutcomeProficiencyPayload {
  errors: [ValidationError!]
  outcomeProficiencyId: ID!
}

"""
Autogenerated input type of DeleteSubmissionComment
"""
input DeleteSubmissionCommentInput {
  submissionCommentId: ID!
}

"""
Autogenerated return type of DeleteSubmissionComment.
"""
type DeleteSubmissionCommentPayload {
  errors: [ValidationError!]
  submissionComment: SubmissionComment
}

"""
Autogenerated input type of DeleteSubmissionDraft
"""
input DeleteSubmissionDraftInput {
  submissionId: ID!
}

"""
Autogenerated return type of DeleteSubmissionDraft.
"""
type DeleteSubmissionDraftPayload {
  errors: [ValidationError!]
  submissionDraftIds: [ID!]
}

"""
Autogenerated input type of DeleteUserInboxLabel
"""
input DeleteUserInboxLabelInput {
  names: [String!]!
}

"""
Autogenerated return type of DeleteUserInboxLabel.
"""
type DeleteUserInboxLabelPayload {
  errors: [ValidationError!]
  inboxLabels: [String!]
}

type Discussion implements AssignedDates & LegacyIDInterface & ModuleItemInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  allowRating: Boolean
  anonymousAuthor: AnonymousUser
  anonymousState: DiscussionTopicAnonymousStateType

  """
  Standardized date hash visible to current user
  """
  assignedToDates: [DateHash!]
  assignment: Assignment
  attachment: File
  author(
    """
    Only return default/built_in roles
    """
    builtInOnly: Boolean
    courseId: String

    """
    Return only requested base role types
    """
    roleTypes: [String!]
  ): User
  availableForUser: Boolean!
  canDuplicate: Boolean
  canGroup: Boolean
  canManageAssignTo: Boolean
  canReplyAnonymously: Boolean!
  canUnpublish: Boolean!

  """
  a list of checkpoints(also known as sub_assignments) that belong to this discussion
  """
  checkpoints: [Checkpoint!]
  childTopics: [Discussion!]
  contextId: ID!
  contextName: String
  contextType: String!
  courseSections: [Section!]!
  createdAt: DateTime
  delayedPostAt: DateTime
  discussionEntriesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: DiscussionFilterType

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    rootEntries: Boolean
    searchTerm: String
    unreadBefore: String
    userSearchId: String
  ): DiscussionEntryConnection
  discussionType: DiscussionTopicDiscussionType
  editedAt: DateTime
  editor(
    """
    Only return default/built_in roles
    """
    builtInOnly: Boolean
    courseId: String

    """
    Return only requested base role types
    """
    roleTypes: [String!]
  ): User
  entriesTotalPages(filter: DiscussionFilterType, perPage: Int!, rootEntries: Boolean, searchTerm: String, sortOrder: DiscussionSortOrderType, unreadBefore: String): Int
  entryCounts: DiscussionEntryCounts
  expanded: Boolean
  expandedLocked: Boolean
  graded: Boolean
  groupSet: GroupSet
  id: ID!
  initialPostRequiredForCurrentUser: Boolean!
  isAnnouncement: Boolean!
  isAnonymousAuthor: Boolean
  isLockedByMasterCourse: Boolean!
  isSectionSpecific: Boolean
  lastReplyAt: DateTime
  lockAt: DateTime
  lockInformation: String
  locked: Boolean!
  mentionableUsersConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    searchTerm: String
  ): MessageableUserConnection
  message: String
  modules: [Module!]
  onlyGradersCanRate: Boolean
  onlyVisibleToOverrides: Boolean
  participant: DiscussionParticipant
  permissions: DiscussionPermissions
  pinnedEntries: [DiscussionEntry!]
  podcastEnabled: Boolean
  podcastHasStudentPosts: Boolean
  pointsPossible: Float
  position: Int
  postedAt: DateTime
  published: Boolean!
  replyToEntryRequiredCount: Int!
  requireInitialPost: Boolean
  rootEntriesTotalPages(filter: DiscussionFilterType, perPage: Int!, searchTerm: String, sortOrder: DiscussionSortOrderType): Int
  rootTopic: Discussion
  searchEntryCount(filter: DiscussionFilterType, searchTerm: String): Int
  sortByRating: Boolean
  sortOrder(sort: DiscussionSortOrderType): DiscussionSortOrderType
  sortOrderLocked: Boolean

  """
  submissions for this assignment
  """
  submissionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionSearchFilterInput

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    orderBy: [SubmissionSearchOrder!]
  ): SubmissionConnection
  subscribed: Boolean!
  subscriptionDisabledForUser: Boolean
  title: String
  todoDate: ISO8601DateTime
  type: String
  ungradedDiscussionOverrides(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): AssignmentOverrideConnection
  updatedAt: DateTime
  userCount: Int
  visibleToEveryone: Boolean
}

input DiscussionCheckpointDate {
  dueAt: DateTime
  id: Int
  lockAt: DateTime
  setId: Int
  setType: DiscussionCheckpointDateSetType
  studentIds: [ID!]
  type: DiscussionCheckpointDateType!
  unlockAt: DateTime
}

"""
Types of date set that can be set for discussion checkpoints
"""
enum DiscussionCheckpointDateSetType {
  ADHOC
  Course
  CourseSection
  Group
}

"""
Types of dates that can be set for discussion checkpoints
"""
enum DiscussionCheckpointDateType {
  everyone
  override
}

input DiscussionCheckpoints {
  checkpointLabel: CheckpointLabelType!
  dates: [DiscussionCheckpointDate!]!
  pointsPossible: Float!
  repliesRequired: Int
}

"""
The connection type for Discussion.
"""
type DiscussionConnection {
  """
  A list of edges.
  """
  edges: [DiscussionEdge]

  """
  A list of nodes.
  """
  nodes: [Discussion]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type DiscussionEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Discussion
}

type DiscussionEntry implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  allRootEntries: [DiscussionEntry!]
  anonymousAuthor: AnonymousUser
  attachment: File
  author(
    """
    Only return default/built_in roles
    """
    builtInOnly: Boolean
    courseId: String

    """
    Return only requested base role types
    """
    roleTypes: [String!]
  ): User
  createdAt: DateTime
  deleted: Boolean
  depth: Int
  discussionEntryVersions: [DiscussionEntryVersion!]
  discussionSubentriesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    beforeRelativeEntry: Boolean

    """
    Returns the first _n_ elements from the list.
    """
    first: Int
    includeRelativeEntry: Boolean

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    relativeEntryId: ID
    sortOrder: DiscussionSortOrderType
  ): DiscussionEntryConnection
  discussionTopic: Discussion!
  discussionTopicId: ID!
  editedAt: DateTime
  editor(
    """
    Only return default/built_in roles
    """
    builtInOnly: Boolean
    courseId: String

    """
    Return only requested base role types
    """
    roleTypes: [String!]
  ): User
  entryParticipant: EntryParticipant
  id: ID!
  lastReply: DiscussionEntry
  message: String
  parentId: ID
  permissions: DiscussionEntryPermissions
  pinType: DiscussionEntryPinningType
  pinnedBy: User
  previewMessage: String
  quotedEntry: DiscussionEntry
  ratingCount: Int
  ratingSum: Int
  reportTypeCounts: DiscussionEntryReportTypeCounts
  rootEntry: DiscussionEntry
  rootEntryId: ID
  rootEntryPageNumber(perPage: Int): Int
  rootEntryParticipantCounts: DiscussionEntryCounts
  subentriesCount: Int
  updatedAt: DateTime
}

"""
The connection type for DiscussionEntry.
"""
type DiscussionEntryConnection {
  """
  A list of edges.
  """
  edges: [DiscussionEntryEdge]

  """
  A list of nodes.
  """
  nodes: [DiscussionEntry]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

type DiscussionEntryCounts {
  deletedCount: Int!
  repliesCount: Int!
  unreadCount: Int!
}

"""
An edge in a connection.
"""
type DiscussionEntryEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: DiscussionEntry
}

type DiscussionEntryPermissions {
  attach: Boolean
  create: Boolean
  delete: Boolean
  rate: Boolean
  read: Boolean
  reply: Boolean
  update: Boolean
  viewRating: Boolean
}

enum DiscussionEntryPinningType {
  none
  reply
  thread
}

type DiscussionEntryReportTypeCounts {
  inappropriateCount: Int!
  offensiveCount: Int!
  otherCount: Int!
  total: Int!
}

type DiscussionEntryVersion implements LegacyIDInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  createdAt: DateTime
  id: ID!
  message: String!
  messageIntro: String!
  updatedAt: DateTime
  version: Int!
}

input DiscussionFilter {
  """
  only return discussions that are announcements (true) or
  regular discussions (false). If not provided, returns both.
  """
  isAnnouncement: Boolean

  """
  only return discussions whose title matches this search term
  """
  searchTerm: String

  """
  only return discussions for the given user. Defaults to
  the current user.
  """
  userId: ID
}

"""
Search types that can be associated with discussions
"""
enum DiscussionFilterType {
  all
  deleted
  drafts
  unread
}

type DiscussionParticipant {
  discussionTopic: Discussion!
  expanded: Boolean
  hasUnreadPinnedEntry: Boolean
  id: ID!
  posted: Boolean!
  preferredLanguage: PreferredLanguageType
  read: Boolean!
  showPinnedEntries: Boolean
  sortOrder: DiscussionSortOrderType
  summaryEnabled: Boolean
  workflowState: String!
}

"""
The connection type for DiscussionParticipant.
"""
type DiscussionParticipantConnection {
  """
  A list of edges.
  """
  edges: [DiscussionParticipantEdge]

  """
  A list of nodes.
  """
  nodes: [DiscussionParticipant]
  pageInfo: TotalCountPageInfo!
}

"""
An edge in a connection.
"""
type DiscussionParticipantEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: DiscussionParticipant
}

input DiscussionParticipantFilter {
  """
  only return participants for discussions in the specified course
  """
  courseId: ID

  """
  only return participants for discussions that are announcements (true) or
  regular discussions (false). If not provided, returns both.
  """
  isAnnouncement: Boolean

  """
  only return participants with specific read state: 'read', 'unread', or 'all' (default)
  """
  readState: String
}

type DiscussionPermissions {
  addRubric: Boolean
  attach: Boolean
  closeForComments: Boolean
  copyAndSendTo: Boolean
  create: Boolean
  delete: Boolean
  duplicate: Boolean
  manageAssignTo: Boolean
  manageCourseContentAdd: Boolean
  manageCourseContentDelete: Boolean
  manageCourseContentEdit: Boolean
  moderateForum: Boolean
  openForComments: Boolean
  peerReview: Boolean
  rate: Boolean
  read: Boolean
  readAsAdmin: Boolean
  readReplies: Boolean
  reply: Boolean
  showRubric: Boolean
  speedGrader: Boolean
  studentReporting: Boolean
  update: Boolean
  viewGroupPages: Boolean
}

enum DiscussionSortOrderType {
  asc
  desc
}

"""
Anonymous states for discussionTopics
"""
enum DiscussionTopicAnonymousStateType {
  full_anonymity
  off
  partial_anonymity
}

"""
Context types that can be associated with discussionTopics
"""
enum DiscussionTopicContextType {
  Course
  Group
}

"""
Discussion type for discussionTopics
"""
enum DiscussionTopicDiscussionType {
  flat
  not_threaded
  side_comment
  threaded
}

interface DiscussionsConnectionInterface {
  """
  returns a list of discussions.
  """
  discussionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: DiscussionFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): DiscussionConnection
}

"""
Autogenerated input type of DismissAccountNotification
"""
input DismissAccountNotificationInput {
  notificationId: ID!
}

"""
Autogenerated return type of DismissAccountNotification.
"""
type DismissAccountNotificationPayload {
  errors: [ValidationError!]
}

"""
Types of submissions that can have a submission draft
"""
enum DraftableSubmissionType {
  basic_lti_launch
  media_recording
  online_text_entry
  online_upload
  online_url
  student_annotation
}

type EligibilityIssue {
  level: EligibilityIssueLevel!
  message: String!
}

enum EligibilityIssueLevel {
  error
  warning
}

type Enrollment implements AssetString & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID
  assetString: String
  associatedUser: User
  canBeRemoved: Boolean
  concluded: Boolean
  course: Course
  courseSectionId: ID
  createdAt: DateTime
  endAt: DateTime
  enrollmentState: EnrollmentWorkflowState!
  grades(
    """
    The grading period to return grades for. If not specified, will use the
    current grading period (or the course grade for courses that don't use
    grading periods)
    """
    gradingPeriodId: ID
  ): Grades
  htmlUrl: URL
  id: ID!
  invitationSentAt: DateTime
  lastActivityAt: DateTime
  limitPrivilegesToCourseSection: Boolean
  role: EnrollmentRole
  roleLabel: String
  section: Section
  sisImportId: ID
  sisRole: String
  sisSectionId: ID
  startAt: DateTime
  state: EnrollmentWorkflowState!
  totalActivityTime: Int
  type: EnrollmentType!
  updatedAt: DateTime
  user: User
  userId: ID
  uuid: String
}

"""
The connection type for Enrollment.
"""
type EnrollmentConnection {
  """
  A list of edges.
  """
  edges: [EnrollmentEdge]

  """
  A list of nodes.
  """
  nodes: [Enrollment]
  pageInfo: TotalCountPageInfo!
}

"""
An edge in a connection.
"""
type EnrollmentEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Enrollment
}

input EnrollmentFilterInput {
  associatedUserIds: [ID!] = []
  states: [EnrollmentWorkflowState!] = null
  types: [EnrollmentType!] = null
  userIds: [ID!] = []
}

type EnrollmentRole {
  """
  legacy canvas id
  """
  _id: ID
  name: String
}

enum EnrollmentType {
  DesignerEnrollment
  ObserverEnrollment
  StudentEnrollment
  StudentViewEnrollment
  TaEnrollment
  TeacherEnrollment
}

enum EnrollmentWorkflowState {
  active
  completed
  creation_pending
  deleted
  inactive
  invited
  rejected
}

"""
Order direction for enrollments
"""
enum EnrollmentsSortDirectionType {
  asc
  desc
}

"""
Sort field for enrollments
"""
enum EnrollmentsSortFieldType {
  last_activity_at
  role
  section_name
}

"""
Specify sort field and direction for enrollments
"""
input EnrollmentsSortInputType {
  direction: EnrollmentsSortDirectionType
  field: EnrollmentsSortFieldType!
}

type EntryParticipant {
  forcedReadState: Boolean
  rating: Boolean
  read: Boolean!
  reportType: String
}

type ExternalTool implements LegacyIDInterface & ModuleItemInterface & PlacementsInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  canDuplicate: Boolean
  canManageAssignTo: Boolean

  """
  Whether the module item can be unpublished
  """
  canUnpublish: Boolean
  createdAt: DateTime
  description: String
  domain: String
  graded: Boolean
  isLockedByMasterCourse: Boolean!
  labelFor(placement: ExternalToolPlacement!): String
  modules: [Module!]
  name: String!

  """
  Placements for the external tool
  """
  placements: Placements!
  pointsPossible: Float
  published: Boolean
  settings: ExternalToolSettings
  state: ExternalToolState
  title: String
  type: String
  updatedAt: DateTime
  url: URL
}

"""
The connection type for ExternalTool.
"""
type ExternalToolConnection {
  """
  A list of edges.
  """
  edges: [ExternalToolEdge]

  """
  A list of nodes.
  """
  nodes: [ExternalTool]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type ExternalToolEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: ExternalTool
}

input ExternalToolFilterInput {
  placement: ExternalToolPlacement = null
  placementList: [ExternalToolPlacement!] = null
  state: ExternalToolState = null
}

"""
Placements that an External Tool can have
"""
enum ExternalToolPlacement {
  ActivityAssetProcessor
  homework_submission
  link_selection
  resource_selection
}

type ExternalToolPlacements {
  canvasIconClass: String
  iconUrl: URL
  messageType: String
  text: String
  url: URL
}

type ExternalToolSettings {
  homeworkSubmission: ExternalToolPlacements
  iconUrl: URL
  selectionHeight: Int
  selectionWidth: Int
  text: String
}

"""
States that an External Tool can be in
"""
enum ExternalToolState {
  anonymous
  email_only
  name_only
  public
}

interface ExternalToolsConnectionInterface {
  """
  returns a list of external tools.
  """
  externalToolsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: ExternalToolFilterInput = {}

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ExternalToolConnection
}

type ExternalUrl implements LegacyIDInterface & ModuleItemInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  canDuplicate: Boolean
  canManageAssignTo: Boolean

  """
  Whether the module item can be unpublished
  """
  canUnpublish: Boolean
  createdAt: DateTime
  graded: Boolean
  isLockedByMasterCourse: Boolean!
  modules: [Module!]
  newTab: Boolean
  pointsPossible: Float

  """
  Whether the module item is published
  """
  published: Boolean
  title: String
  type: String
  updatedAt: DateTime
  url: String
}

type File implements LegacyIDInterface & ModuleItemInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  canDuplicate: Boolean
  canManageAssignTo: Boolean

  """
  Whether the module item can be unpublished
  """
  canUnpublish: Boolean
  contentType: String
  createdAt: DateTime
  displayName: String
  fileState: String
  folder: Folder
  graded: Boolean
  id: ID!
  isLockedByMasterCourse: Boolean!
  lockAt: DateTime
  locked: Boolean
  mimeClass: String
  modules: [Module!]
  pointsPossible: Float

  """
  Whether the module item is published
  """
  published: Boolean
  size: String
  submissionPreviewUrl(submissionId: ID): URL
  thumbnailUrl: URL
  title: String
  type: String
  unlockAt: DateTime
  updatedAt: DateTime
  url: URL
  usageRights: UsageRights
  viewedAt: DateTime
  wordCount: Int
}

"""
The connection type for File.
"""
type FileConnection {
  """
  A list of edges.
  """
  edges: [FileEdge]

  """
  A list of nodes.
  """
  nodes: [File]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type FileEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: File
}

input FileFilter {
  """
  only return files whose name matches this search term
  """
  searchTerm: String

  """
  only return files for the given user. Defaults to
  the current user.
  """
  userId: ID
}

interface FilesConnectionInterface {
  """
  returns a list of files.
  """
  filesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: FileFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): FileConnection
}

type Folder implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  canUpload: Boolean!
  contextId: ID!
  contextType: String!
  createdAt: DateTime
  currentlyLocked: Boolean!
  files: [File!]
  filesCount: Int!
  foldersCount: Int!
  fullName: String!
  hidden: Boolean
  id: ID!
  lockAt: DateTime
  locked: Boolean
  name: String!
  parentFolder: Folder
  parentFolderId: ID
  position: Int
  rootFolder: Boolean!
  subFolders: [Folder!]
  unlockAt: DateTime
  updatedAt: DateTime
}

"""
The connection type for Folder.
"""
type FolderConnection {
  """
  A list of edges.
  """
  edges: [FolderEdge]

  """
  A list of nodes.
  """
  nodes: [Folder]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type FolderEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Folder
}

enum GradeState {
  active
  deleted
}

"""
Represents a grader's identity in a moderated grading context.
"""
type GraderIdentity {
  anonymousId: String!

  """
  The name of the grader, which may be anonymized in certain contexts.
  """
  name: String!
  position: Int!
}

"""
The connection type for GraderIdentity.
"""
type GraderIdentityConnection {
  """
  A list of edges.
  """
  edges: [GraderIdentityEdge]

  """
  A list of nodes.
  """
  nodes: [GraderIdentity]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type GraderIdentityEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: GraderIdentity
}

"""
Contains grade information for a course or grading period
"""
type Grades {
  assignmentGroup: AssignmentGroup
  currentGrade: String

  """
  The current score includes all graded assignments, excluding muted submissions.
  """
  currentScore: Float
  customGradeStatusId: ID
  enrollment: Enrollment
  finalGrade: String

  """
  The final score includes all assignments, excluding muted submissions
  (ungraded assignments are counted as 0 points).
  """
  finalScore: Float
  gradingPeriod: GradingPeriod
  htmlUrl: URL

  """
  The override grade. Supersedes the computed final grade if set.
  """
  overrideGrade: String

  """
  The override score. Supersedes the computed final score if set.
  """
  overrideScore: Float
  state: GradeState!
  unpostedCurrentGrade: String

  """
  The current score includes all graded assignments, including muted submissions.
  """
  unpostedCurrentScore: Float
  unpostedFinalGrade: String

  """
  The final score includes all assignments, including muted submissions
  (ungraded assignments are counted as 0 points).
  """
  unpostedFinalScore: Float
}

"""
The connection type for Grades.
"""
type GradesConnection {
  """
  A list of edges.
  """
  edges: [GradesEdge]

  """
  A list of nodes.
  """
  nodes: [Grades]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type GradesEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Grades
}

input GradesEnrollmentFilter {
  """
  only include users with the given enrollment ids
  """
  enrollmentIds: [ID!]
}

type GradingPeriod implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!

  """
  assignments can only be graded before the grading period closes
  """
  closeDate: DateTime
  createdAt: DateTime
  displayTotals: Boolean!
  endDate: DateTime
  id: ID!
  isClosed: Boolean!
  isLast: Boolean!
  startDate: DateTime
  title: String
  updatedAt: DateTime

  """
  used to calculate how much the assignments in this grading period
  contribute to the overall grade
  """
  weight: Float
}

"""
The connection type for GradingPeriod.
"""
type GradingPeriodConnection {
  """
  A list of edges.
  """
  edges: [GradingPeriodEdge]

  """
  A list of nodes.
  """
  nodes: [GradingPeriod]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type GradingPeriodEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: GradingPeriod
}

type GradingPeriodGroup implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  createdAt: DateTime
  displayTotals: Boolean!
  enrollmentTermIds: [String!]!
  gradingPeriodsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): GradingPeriodConnection
  id: ID!
  title: String
  updatedAt: DateTime
  weighted: Boolean!
}

"""
The grading role of the current user for this assignment
"""
enum GradingRole {
  """
  User is a standard grader for the assignment
  """
  grader

  """
  User is a moderator for the assignment
  """
  moderator

  """
  User is a provisional grader for the assignment
  """
  provisional_grader
}

type GradingStandard implements Node {
  """
  legacy canvas id
  """
  _id: ID
  contextCode: String
  contextId: ID
  contextType: String
  createdAt: DateTime
  data: [GradingStandardItem!]
  id: ID!
  migrationId: ID
  rootAccountId: ID
  title: String
  updatedAt: DateTime
  usageCount: Int
  userId: ID
  version: Int
  workflowState: String
}

type GradingStandardItem {
  baseValue: Float
  letterGrade: String
}

enum GradingType {
  gpa_scale
  letter_grade
  not_graded
  pass_fail
  percent
  points
}

type Group implements AssetString & LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  activityStream: ActivityStream
  assetString: String
  canMessage: Boolean!
  createdAt: DateTime
  groupCategory: GroupSet
  id: ID!
  member(userId: ID!): GroupMembership
  membersConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): GroupMembershipConnection
  membersCount: Int
  name: String
  nonCollaborative: Boolean
  sisId: String
  state: GroupState!
  updatedAt: DateTime
}

"""
The connection type for Group.
"""
type GroupConnection {
  """
  A list of edges.
  """
  edges: [GroupEdge]

  """
  A list of nodes.
  """
  nodes: [Group]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type GroupEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Group
}

type GroupMembership implements LegacyIDInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  createdAt: DateTime
  group: Group!
  state: GroupMembershipState!
  updatedAt: DateTime
  user: User
}

"""
The connection type for GroupMembership.
"""
type GroupMembershipConnection {
  """
  A list of edges.
  """
  edges: [GroupMembershipEdge]

  """
  A list of nodes.
  """
  nodes: [GroupMembership]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type GroupMembershipEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: GroupMembership
}

enum GroupMembershipState {
  accepted
  deleted
  invited
  rejected
  requested
}

type GroupSet implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!
  autoLeader: AutoLeaderPolicy
  currentGroup: Group
  groups: [Group!]
  groupsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): GroupConnection
  id: ID!

  """
  Sets a cap on the number of members in the group.  Only applies when
  self-signup is enabled.
  """
  memberLimit: Int
  name: String
  nonCollaborative: Boolean
  selfSignup: SelfSignupPolicy!
  singleTag: Boolean!
  sisId: String
}

"""
The connection type for GroupSet.
"""
type GroupSetConnection {
  """
  A list of edges.
  """
  edges: [GroupSetEdge]

  """
  A list of nodes.
  """
  nodes: [GroupSet]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
Type of context for group set
"""
enum GroupSetContextType {
  account
  course
}

"""
An edge in a connection.
"""
type GroupSetEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: GroupSet
}

enum GroupState {
  available
  deleted
}

"""
Autogenerated input type of HideAssignmentGradesForSections
"""
input HideAssignmentGradesForSectionsInput {
  assignmentId: ID!
  sectionIds: [ID!]!
}

"""
Autogenerated return type of HideAssignmentGradesForSections.
"""
type HideAssignmentGradesForSectionsPayload {
  assignment: Assignment
  errors: [ValidationError!]
  progress: Progress
  sections: [Section!]
}

"""
Autogenerated input type of HideAssignmentGrades
"""
input HideAssignmentGradesInput {
  assignmentId: ID!
  onlyStudentIds: [ID!]
  sectionIds: [ID!]
  skipStudentIds: [ID!]
}

"""
Autogenerated return type of HideAssignmentGrades.
"""
type HideAssignmentGradesPayload {
  assignment: Assignment
  errors: [ValidationError!]
  progress: Progress
  sections: [Section!]
}

"""
An ISO 8601-encoded datetime
"""
scalar ISO8601DateTime @specifiedBy(url: "https:\/\/tools.ietf.org\/html\/rfc3339")

"""
An ISO 8601-encoded duration
"""
scalar ISO8601Duration

"""
Autogenerated input type of ImportOutcomes
"""
input ImportOutcomesInput {
  groupId: ID
  outcomeId: ID
  sourceContextId: ID
  sourceContextType: String
  targetContextId: ID
  targetContextType: String
  targetGroupId: ID
}

"""
Autogenerated return type of ImportOutcomes.
"""
type ImportOutcomesPayload {
  errors: [ValidationError!]
  progress: Progress
}

type InboxSettings implements Timestamped {
  _id: ID!
  createdAt: DateTime
  outOfOfficeFirstDate: DateTime
  outOfOfficeLastDate: DateTime
  outOfOfficeMessage: String
  outOfOfficeSubject: String
  signature: String
  updatedAt: DateTime
  useOutOfOffice: Boolean!
  useSignature: Boolean!
  userId: ID!
}

type InstructorEnrollmentInfo {
  course: Course!
  enrollmentState: String!
  role: EnrollmentRole!
  type: String!
}

type InstructorWithEnrollments {
  enrollments: [InstructorEnrollmentInfo!]!
  user: User!
}

"""
The connection type for InstructorWithEnrollments.
"""
type InstructorWithEnrollmentsConnection {
  """
  A list of edges.
  """
  edges: [InstructorWithEnrollmentsEdge]

  """
  A list of nodes.
  """
  nodes: [InstructorWithEnrollments]
  pageInfo: TotalCountPageInfo!
}

"""
An edge in a connection.
"""
type InstructorWithEnrollmentsEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: InstructorWithEnrollments
}

type InternalSetting implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  createdAt: DateTime
  id: ID!
  name: String!
  secret: Boolean!
  updatedAt: DateTime
  value: String
}

"""
Represents untyped JSON
"""
scalar JSON

enum LatePolicyStatusType {
  extended
  late
  missing
  none
}

"""
Available tabs on the learner dashboard
"""
enum LearnerDashboardTabType {
  courses
  dashboard
}

type LearningOutcome implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  alignments(contextId: ID!, contextType: String!): [OutcomeAlignment!]
  assessed: Boolean!
  calculationInt: Int
  calculationMethod: String
  canArchive(contextId: ID!, contextType: String!): Boolean!
  canEdit: Boolean!
  contextId: ID
  contextType: String
  createdAt: DateTime
  description: String
  displayName: String
  friendlyDescription(contextId: ID!, contextType: String!): OutcomeFriendlyDescriptionType
  id: ID!
  isImported(targetContextId: ID!, targetContextType: String!): Boolean
  masteryPoints: Float
  pointsPossible: Float
  ratings: [ProficiencyRating!]
  title: String!
  updatedAt: DateTime
  vendorGuid: String
}

"""
Learning Outcome Group
"""
type LearningOutcomeGroup implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!
  canEdit: Boolean!
  childGroups(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): LearningOutcomeGroupConnection
  childGroupsCount: Int!
  contextId: ID
  contextType: String
  description: String
  id: ID!
  notImportedOutcomesCount(targetGroupId: ID): Int
  outcomes(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    searchQuery: String
  ): ContentTagConnection!
  outcomesCount(searchQuery: String): Int!
  parentOutcomeGroup: LearningOutcomeGroup
  title: String!
  vendorGuid: String
}

"""
The connection type for LearningOutcomeGroup.
"""
type LearningOutcomeGroupConnection {
  """
  A list of edges.
  """
  edges: [LearningOutcomeGroupEdge]

  """
  A list of nodes.
  """
  nodes: [LearningOutcomeGroup]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type LearningOutcomeGroupEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: LearningOutcomeGroup
}

interface LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
}

type LockInfo {
  canView: Boolean
  isLocked: Boolean!
  lockAt: DateTime
  lockedObject: Lockable
  module: Module
  unlockAt: DateTime
}

"""
Types that can be locked
"""
union Lockable = Assignment | Discussion | Module | Page | Quiz

type LtiAsset implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  attachmentId: ID
  attachmentName: String
  discussionEntryVersion: DiscussionEntryVersion
  submissionAttempt: Int
  submissionId: ID
}

type LtiAssetProcessor implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  externalTool: ExternalTool!
  iconOrToolIconUrl: String
  iframe: LtiAssetProcessorIframe
  text: String
  title: String
  window: LtiAssetProcessorWindowSettings
}

"""
The connection type for LtiAssetProcessor.
"""
type LtiAssetProcessorConnection {
  """
  A list of edges.
  """
  edges: [LtiAssetProcessorEdge]

  """
  A list of nodes.
  """
  nodes: [LtiAssetProcessor]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

input LtiAssetProcessorCreateOrUpdate {
  existingId: Int
  newContentItem: LtiAssetProcessorDto
}

input LtiAssetProcessorDto {
  contextExternalToolId: ID!
  custom: StringMap
  icon: LtiContentItemIcon
  iframe: LtiContentItemIframe
  report: LtiAssetProcessorReportSettings
  text: String
  thumbnail: LtiContentItemIcon
  title: String
  url: String
  window: LtiAssetProcessorWindowSettingsInput
}

"""
An edge in a connection.
"""
type LtiAssetProcessorEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: LtiAssetProcessor
}

type LtiAssetProcessorIframe {
  height: Int
  width: Int
}

input LtiAssetProcessorReportSettings {
  custom: StringMap
  url: String
}

type LtiAssetProcessorWindowSettings {
  height: Int
  targetName: String
  width: Int
  windowFeatures: String
}

input LtiAssetProcessorWindowSettingsInput {
  height: Int
  targetName: String
  width: Int
  windowFeatures: String
}

type LtiAssetReport implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  asset: LtiAsset!
  comment: String
  errorCode: String
  indicationAlt: String
  indicationColor: String
  launchUrlPath: String
  priority: Int!
  processingProgress: String!
  processorId: ID!
  reportType: String!
  resubmitAvailable: Boolean!
  result: String
  resultTruncated: String
  title: String
}

"""
The connection type for LtiAssetReport.
"""
type LtiAssetReportConnection {
  """
  A list of edges.
  """
  edges: [LtiAssetReportEdge]

  """
  A list of nodes.
  """
  nodes: [LtiAssetReport]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type LtiAssetReportEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: LtiAssetReport
}

input LtiContentItemIcon {
  height: Int
  url: String!
  width: Int
}

input LtiContentItemIframe {
  height: Int
  width: Int
}

"""
Autogenerated input type of MarkSubmissionCommentsRead
"""
input MarkSubmissionCommentsReadInput {
  submissionCommentIds: [ID!]!
  submissionId: ID!
}

"""
Autogenerated return type of MarkSubmissionCommentsRead.
"""
type MarkSubmissionCommentsReadPayload {
  errors: [ValidationError!]
  submissionComments: [SubmissionComment!]
}

type MediaObject implements Node {
  """
  legacy canvas id
  """
  _id: ID!
  canAddCaptions: Boolean
  id: ID!
  mediaDownloadUrl: String
  mediaSources: [MediaSource!]
  mediaTracks: [MediaTrack!]
  mediaType: MediaType
  thumbnailUrl: String
  title: String
}

type MediaSource {
  bitrate: String
  contentType: String
  fileExt: String
  height: String
  isOriginal: String
  size: String
  url: URL
  width: String
}

type MediaTrack implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  content: String!
  kind: String
  locale: String
  mediaObject: MediaObject
  webvttContent: String
}

enum MediaType {
  audio
  video
}

type MessagePermissions {
  sendMessages: Boolean!
  sendMessagesAll: Boolean!
}

type MessageableContext implements Node {
  avatarUrl: String!
  id: ID!
  itemCount: Int
  name: String!
  permissions: MessagePermissions
  userCount: Int
}

"""
The connection type for MessageableContext.
"""
type MessageableContextConnection {
  """
  A list of edges.
  """
  edges: [MessageableContextEdge]

  """
  A list of nodes.
  """
  nodes: [MessageableContext]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type MessageableContextEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: MessageableContext
}

type MessageableUser implements Node {
  """
  legacy canvas id
  """
  _id: ID!
  commonCoursesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): EnrollmentConnection
  commonGroupsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): GroupConnection
  id: ID!
  name: String!
  observerEnrollmentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    contextCode: String!

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): EnrollmentConnection
  pronouns: String
  shortName: String!
}

"""
The connection type for MessageableUser.
"""
type MessageableUserConnection {
  """
  A list of edges.
  """
  edges: [MessageableUserEdge]

  """
  A list of nodes.
  """
  nodes: [MessageableUser]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type MessageableUserEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: MessageableUser
}

"""
Settings for Moderated Grading on an Assignment
"""
type ModeratedGrading {
  """
  Boolean indicating if the assignment is moderated.
  """
  enabled: Boolean

  """
  The user of the grader responsible for choosing final grades for this assignment.
  """
  finalGrader: User

  """
  The anonymous ID of the final grader
  """
  finalGraderAnonymousId: String

  """
  Boolean indicating if provisional graders' comments are visible to other provisional graders.
  """
  graderCommentsVisibleToGraders: Boolean

  """
  The maximum number of provisional graders who may issue grades for this assignment.
  """
  graderCount: Int

  """
  Boolean indicating if provisional graders' identities are hidden from other provisional graders.
  """
  graderNamesVisibleToFinalGrader: Boolean

  """
  Boolean indicating if provisional grader identities are visible to the final grader.
  """
  gradersAnonymousToGraders: Boolean
}

type Module implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  completionRequirements: [ModuleCompletionRequirement!]
  createdAt: DateTime
  estimatedDuration: ISO8601Duration
  hasActiveOverrides: Boolean!
  id: ID!
  moduleItems: [ModuleItem!]
  moduleItemsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: ModuleItemFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ModuleItemConnection
  moduleItemsTotalCount: Int!
  name: String
  position: Int
  prerequisites: [ModulePrerequisite!]

  """
  The current user's progression through the module
  """
  progression: ModuleProgression
  published: Boolean
  requireSequentialProgress: Boolean
  requirementCount: Int
  submissionStatistics: ModuleStatistics
  unlockAt: DateTime
  updatedAt: DateTime
}

type ModuleCompletionRequirement {
  id: ID!
  minPercentage: Float
  minScore: Float
  type: String!
}

"""
Filter options for module completion status
"""
enum ModuleCompletionStatus {
  """
  Modules marked as completed
  """
  COMPLETED

  """
  Modules not yet completed (includes locked, unlocked, started)
  """
  INCOMPLETE

  """
  Modules that are started but not completed
  """
  IN_PROGRESS

  """
  Modules that are unlocked but not started
  """
  NOT_STARTED
}

"""
The connection type for Module.
"""
type ModuleConnection {
  """
  A list of edges.
  """
  edges: [ModuleEdge]

  """
  A list of nodes.
  """
  nodes: [Module]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type ModuleEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Module
}

type ModuleExternalTool implements LegacyIDInterface & ModuleItemInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  canDuplicate: Boolean
  canManageAssignTo: Boolean

  """
  Whether the module item can be unpublished
  """
  canUnpublish: Boolean
  createdAt: DateTime
  domain: String
  graded: Boolean
  isLockedByMasterCourse: Boolean!
  modules: [Module!]
  pointsPossible: Float

  """
  Whether the module item is published
  """
  published: Boolean
  title: String
  type: String
  updatedAt: DateTime
  url: String
}

"""
Input type for filtering modules in a course
"""
input ModuleFilterInput {
  """
  Filter modules by completion status
  """
  completionStatus: ModuleCompletionStatus

  """
  Filter by specific user's progress (requires permission). Defaults to current user if not specified.
  """
  userId: ID
}

type ModuleItem implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  content: ModuleItemInterface
  createdAt: DateTime
  estimatedDuration: ISO8601Duration
  id: ID!
  indent: Int

  """
  Restrictions from master courses for this module item
  """
  masterCourseRestrictions: ModuleItemMasterCourseRestriction

  """
  Mastery path information for this module item
  """
  masteryPaths: ModuleItemMasteryPathInfo
  module: Module
  moduleItemUrl: URL
  newTab: Boolean
  next: ModuleItem

  """
  Items are ordered based on distance to the current item, starting with the next item directly following it.
  """
  nextItemsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ModuleItemConnection
  position: Int
  previous: ModuleItem

  """
  Items are ordered based on distance to the current item, starting with the previous item directly preceding it.
  """
  previousItemsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ModuleItemConnection
  published: Boolean
  title: String
  updatedAt: DateTime
  url: URL
}

"""
The connection type for ModuleItem.
"""
type ModuleItemConnection {
  """
  A list of edges.
  """
  edges: [ModuleItemEdge]

  """
  A list of nodes.
  """
  nodes: [ModuleItem]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type ModuleItemEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: ModuleItem
}

input ModuleItemFilter {
  """
  Filter by content type (Assignment, WikiPage, etc.)
  """
  contentType: String

  """
  Filter by published status
  """
  published: Boolean

  """
  Filter by title or content
  """
  searchTerm: String
}

"""
An item that can be in context modules
"""
interface ModuleItemInterface {
  canDuplicate: Boolean
  canManageAssignTo: Boolean

  """
  Whether the module item can be unpublished
  """
  canUnpublish: Boolean
  graded: Boolean
  isLockedByMasterCourse: Boolean!
  modules: [Module!]
  pointsPossible: Float

  """
  Whether the module item is published
  """
  published: Boolean
  title: String
  type: String
}

"""
Restrictions for a module item defined in a blueprint course
"""
type ModuleItemMasterCourseRestriction {
  """
  Whether all aspects are restricted
  """
  all: Boolean

  """
  Whether availability dates are restricted
  """
  availabilityDates: Boolean

  """
  Whether content is restricted
  """
  content: Boolean

  """
  Whether due dates are restricted
  """
  dueDates: Boolean

  """
  Whether points are restricted
  """
  points: Boolean

  """
  Whether settings are restricted
  """
  settings: Boolean
}

"""
Mastery path information for a module item
"""
type ModuleItemMasteryPathInfo {
  """
  Number of assignment sets that can be selected
  """
  assignmentSetCount: Int

  """
  Whether the next assignment set can be chosen
  """
  awaitingChoice: Boolean

  """
  URL to expose next assignment set choice
  """
  chooseUrl: String

  """
  Indicates locked content
  """
  locked: Boolean

  """
  Indicates mastery path handler in-flight
  """
  stillProcessing: Boolean
}

type ModulePrerequisite {
  id: ID!
  name: String!
  type: String!
}

type ModuleProgression implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  collapsed: Boolean
  completed: Boolean!
  completedAt: DateTime
  contextModule: Module
  createdAt: DateTime
  current: Boolean
  currentPosition: Int
  evaluatedAt: DateTime
  id: ID!

  """
  Items are ordered by position
  """
  incompleteItemsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ModuleItemConnection!
  incompleteRequirements: [Requirement!]
  locked: Boolean!
  module: Module!
  requirementsMet: [Requirement!]
  started: Boolean!
  unlocked: Boolean!
  updatedAt: DateTime
  user: User
  workflowState: String!
}

"""
The connection type for ModuleProgression.
"""
type ModuleProgressionConnection {
  """
  A list of edges.
  """
  edges: [ModuleProgressionEdge]

  """
  A list of nodes.
  """
  nodes: [ModuleProgression]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type ModuleProgressionEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: ModuleProgression
}

type ModuleProgressionStatistics {
  completedModulesCount: Int!
  inProgressModulesCount: Int!
  lockedModulesCount: Int!
  totalModulesCount: Int!
}

type ModuleStatistics {
  latestDueAt: ISO8601DateTime
  missingAssignmentCount: Int!
}

"""
Autogenerated input type of MoveOutcomeLinks
"""
input MoveOutcomeLinksInput {
  """
  The id of the destination group
  """
  groupId: ID!

  """
  A list of ContentTags that will be moved
  """
  outcomeLinkIds: [ID!]!
}

"""
Autogenerated return type of MoveOutcomeLinks.
"""
type MoveOutcomeLinksPayload {
  errors: [ValidationError!]

  """
  List of Outcome Links that were sucessfully moved to the group
  """
  movedOutcomeLinks: [ContentTag!]!
}

type Mutation {
  acceptEnrollmentInvitation(
    """
    Parameters for AcceptEnrollmentInvitation
    """
    input: AcceptEnrollmentInvitationInput!
  ): AcceptEnrollmentInvitationPayload
  addConversationMessage(
    """
    Parameters for AddConversationMessage
    """
    input: AddConversationMessageInput!
  ): AddConversationMessagePayload
  autoGradeSubmission(
    """
    Parameters for AutoGradeSubmission
    """
    input: AutoGradeSubmissionInput!
  ): AutoGradeSubmissionPayload
  createAccountDomainLookup(
    """
    Parameters for CreateAccountDomainLookup
    """
    input: CreateAccountDomainLookupInput!
  ): CreateAccountDomainLookupPayload
  createAllocationRule(
    """
    Parameters for CreateAllocationRule
    """
    input: CreateAllocationRuleInput!
  ): CreateAllocationRulePayload
  createAssignment(
    """
    Parameters for CreateAssignment
    """
    input: CreateAssignmentInput!
  ): CreateAssignmentPayload
  createCommentBankItem(
    """
    Parameters for CreateCommentBankItem
    """
    input: CreateCommentBankItemInput!
  ): CreateCommentBankItemPayload
  createConversation(
    """
    Parameters for CreateConversation
    """
    input: CreateConversationInput!
  ): CreateConversationPayload
  createDiscussionEntry(
    """
    Parameters for CreateDiscussionEntry
    """
    input: CreateDiscussionEntryInput!
  ): CreateDiscussionEntryPayload
  createDiscussionTopic(
    """
    Parameters for CreateDiscussionTopic
    """
    input: CreateDiscussionTopicInput!
  ): CreateDiscussionTopicPayload
  createGroupInSet(
    """
    Parameters for CreateGroupInSet
    """
    input: CreateGroupInSetInput!
  ): CreateGroupInSetPayload
  createGroupSet(
    """
    Parameters for CreateGroupSet
    """
    input: CreateGroupSetInput!
  ): CreateGroupSetPayload
  createInternalSetting(
    """
    Parameters for CreateInternalSetting
    """
    input: CreateInternalSettingInput!
  ): CreateInternalSettingPayload
  createLearningOutcome(
    """
    Parameters for CreateLearningOutcome
    """
    input: CreateLearningOutcomeInput!
  ): CreateLearningOutcomePayload
  createLearningOutcomeGroup(
    """
    Parameters for CreateLearningOutcomeGroup
    """
    input: CreateLearningOutcomeGroupInput!
  ): CreateLearningOutcomeGroupPayload
  createModule(
    """
    Parameters for CreateModule
    """
    input: CreateModuleInput!
  ): CreateModulePayload
  createOutcomeCalculationMethod(
    """
    Parameters for CreateOutcomeCalculationMethod
    """
    input: CreateOutcomeCalculationMethodInput!
  ): CreateOutcomeCalculationMethodPayload
  createOutcomeProficiency(
    """
    Parameters for CreateOutcomeProficiency
    """
    input: CreateOutcomeProficiencyInput!
  ): CreateOutcomeProficiencyPayload

  """
  IN ACTIVE DEVELOPMENT, USE AT YOUR OWN RISK: Submit homework on an assignment.
  """
  createSubmission(
    """
    Parameters for CreateSubmission
    """
    input: CreateSubmissionInput!
  ): CreateSubmissionPayload
  createSubmissionComment(
    """
    Parameters for CreateSubmissionComment
    """
    input: CreateSubmissionCommentInput!
  ): CreateSubmissionCommentPayload
  createSubmissionDraft(
    """
    Parameters for CreateSubmissionDraft
    """
    input: CreateSubmissionDraftInput!
  ): CreateSubmissionDraftPayload
  createUserInboxLabel(
    """
    Parameters for CreateUserInboxLabel
    """
    input: CreateUserInboxLabelInput!
  ): CreateUserInboxLabelPayload
  deleteAccountDomainLookup(
    """
    Parameters for DeleteAccountDomainLookup
    """
    input: DeleteAccountDomainLookupInput!
  ): DeleteAccountDomainLookupPayload
  deleteAllocationRule(
    """
    Parameters for DeleteAllocationRule
    """
    input: DeleteAllocationRuleInput!
  ): DeleteAllocationRulePayload
  deleteCommentBankItem(
    """
    Parameters for DeleteCommentBankItem
    """
    input: DeleteCommentBankItemInput!
  ): DeleteCommentBankItemPayload
  deleteConversationMessages(
    """
    Parameters for DeleteConversationMessages
    """
    input: DeleteConversationMessagesInput!
  ): DeleteConversationMessagesPayload
  deleteConversations(
    """
    Parameters for DeleteConversations
    """
    input: DeleteConversationsInput!
  ): DeleteConversationsPayload
  deleteCustomGradeStatus(
    """
    Parameters for DeleteCustomGradeStatus
    """
    input: DeleteCustomGradeStatusInput!
  ): DeleteCustomGradeStatusPayload
  deleteDiscussionEntry(
    """
    Parameters for DeleteDiscussionEntry
    """
    input: DeleteDiscussionEntryInput!
  ): DeleteDiscussionEntryPayload
  deleteDiscussionTopic(
    """
    Parameters for DeleteDiscussionTopic
    """
    input: DeleteDiscussionTopicInput!
  ): DeleteDiscussionTopicPayload
  deleteInternalSetting(
    """
    Parameters for DeleteInternalSetting
    """
    input: DeleteInternalSettingInput!
  ): DeleteInternalSettingPayload
  deleteOutcomeCalculationMethod(
    """
    Parameters for DeleteOutcomeCalculationMethod
    """
    input: DeleteOutcomeCalculationMethodInput!
  ): DeleteOutcomeCalculationMethodPayload
  deleteOutcomeLinks(
    """
    Parameters for DeleteOutcomeLinks
    """
    input: DeleteOutcomeLinksInput!
  ): DeleteOutcomeLinksPayload
  deleteOutcomeProficiency(
    """
    Parameters for DeleteOutcomeProficiency
    """
    input: DeleteOutcomeProficiencyInput!
  ): DeleteOutcomeProficiencyPayload
  deleteSubmissionComment(
    """
    Parameters for DeleteSubmissionComment
    """
    input: DeleteSubmissionCommentInput!
  ): DeleteSubmissionCommentPayload
  deleteSubmissionDraft(
    """
    Parameters for DeleteSubmissionDraft
    """
    input: DeleteSubmissionDraftInput!
  ): DeleteSubmissionDraftPayload
  deleteUserInboxLabel(
    """
    Parameters for DeleteUserInboxLabel
    """
    input: DeleteUserInboxLabelInput!
  ): DeleteUserInboxLabelPayload
  dismissAccountNotification(
    """
    Parameters for DismissAccountNotification
    """
    input: DismissAccountNotificationInput!
  ): DismissAccountNotificationPayload
  hideAssignmentGrades(
    """
    Parameters for HideAssignmentGrades
    """
    input: HideAssignmentGradesInput!
  ): HideAssignmentGradesPayload
  hideAssignmentGradesForSections(
    """
    Parameters for HideAssignmentGradesForSections
    """
    input: HideAssignmentGradesForSectionsInput!
  ): HideAssignmentGradesForSectionsPayload
  importOutcomes(
    """
    Parameters for ImportOutcomes
    """
    input: ImportOutcomesInput!
  ): ImportOutcomesPayload
  markSubmissionCommentsRead(
    """
    Parameters for MarkSubmissionCommentsRead
    """
    input: MarkSubmissionCommentsReadInput!
  ): MarkSubmissionCommentsReadPayload
  moveOutcomeLinks(
    """
    Parameters for MoveOutcomeLinks
    """
    input: MoveOutcomeLinksInput!
  ): MoveOutcomeLinksPayload
  postAssignmentGrades(
    """
    Parameters for PostAssignmentGrades
    """
    input: PostAssignmentGradesInput!
  ): PostAssignmentGradesPayload
  postAssignmentGradesForSections(
    """
    Parameters for PostAssignmentGradesForSections
    """
    input: PostAssignmentGradesForSectionsInput!
  ): PostAssignmentGradesForSectionsPayload
  postDraftSubmissionComment(
    """
    Parameters for PostDraftSubmissionComment
    """
    input: PostDraftSubmissionCommentInput!
  ): PostDraftSubmissionCommentPayload
  rejectEnrollmentInvitation(
    """
    Parameters for RejectEnrollmentInvitation
    """
    input: RejectEnrollmentInvitationInput!
  ): RejectEnrollmentInvitationPayload
  reorderModuleItems(
    """
    Parameters for ReorderModuleItems
    """
    input: ReorderModuleItemsInput!
  ): ReorderModuleItemsPayload
  restoreDeletedDiscussionEntry(
    """
    Parameters for RestoreDeletedDiscussionEntry
    """
    input: RestoreDeletedDiscussionEntryInput!
  ): RestoreDeletedDiscussionEntryPayload
  saveRubricAssessment(
    """
    Parameters for SaveRubricAssessment
    """
    input: SaveRubricAssessmentInput!
  ): SaveRubricAssessmentPayload
  selectProvisionalGrade(
    """
    Parameters for SelectProvisionalGrade
    """
    input: SelectProvisionalGradeInput!
  ): SelectProvisionalGradePayload

  """
  Sets the post policy for the assignment.
  """
  setAssignmentPostPolicy(
    """
    Parameters for SetAssignmentPostPolicy
    """
    input: SetAssignmentPostPolicyInput!
  ): SetAssignmentPostPolicyPayload

  """
  Sets the post policy for the course, with an option to override and delete
  existing assignment post policies.
  """
  setCoursePostPolicy(
    """
    Parameters for SetCoursePostPolicy
    """
    input: SetCoursePostPolicyInput!
  ): SetCoursePostPolicyPayload
  setFriendlyDescription(
    """
    Parameters for SetFriendlyDescription
    """
    input: SetFriendlyDescriptionInput!
  ): SetFriendlyDescriptionPayload
  setModuleItemCompletion(
    """
    Parameters for SetModuleItemCompletion
    """
    input: SetModuleItemCompletionInput!
  ): SetModuleItemCompletionPayload

  """
  Sets the overridden final score for the associated enrollment, optionally limited to a specific
  grading period. This will supersede the computed final score/grade if present.
  """
  setOverrideScore(
    """
    Parameters for SetOverrideScore
    """
    input: SetOverrideScoreInput!
  ): SetOverrideScorePayload
  setOverrideStatus(
    """
    Parameters for SetOverrideStatus
    """
    input: SetOverrideStatusInput!
  ): SetOverrideStatusPayload
  setRubricSelfAssessment(
    """
    Parameters for SetRubricSelfAssessment
    """
    input: SetRubricSelfAssessmentInput!
  ): SetRubricSelfAssessmentPayload
  subscribeToDiscussionTopic(
    """
    Parameters for SubscribeToDiscussionTopic
    """
    input: SubscribeToDiscussionTopicInput!
  ): SubscribeToDiscussionTopicPayload
  updateAccountDomainLookup(
    """
    Parameters for UpdateAccountDomainLookup
    """
    input: UpdateAccountDomainLookupInput!
  ): UpdateAccountDomainLookupPayload
  updateAllocationRule(
    """
    Parameters for UpdateAllocationRule
    """
    input: UpdateAllocationRuleInput!
  ): UpdateAllocationRulePayload
  updateAssignment(
    """
    Parameters for UpdateAssignment
    """
    input: UpdateAssignmentInput!
  ): UpdateAssignmentPayload
  updateCommentBankItem(
    """
    Parameters for UpdateCommentBankItem
    """
    input: UpdateCommentBankItemInput!
  ): UpdateCommentBankItemPayload
  updateConversationParticipants(
    """
    Parameters for UpdateConversationParticipants
    """
    input: UpdateConversationParticipantsInput!
  ): UpdateConversationParticipantsPayload
  updateDiscussionEntriesReadState(
    """
    Parameters for UpdateDiscussionEntriesReadState
    """
    input: UpdateDiscussionEntriesReadStateInput!
  ): UpdateDiscussionEntriesReadStatePayload
  updateDiscussionEntry(
    """
    Parameters for UpdateDiscussionEntry
    """
    input: UpdateDiscussionEntryInput!
  ): UpdateDiscussionEntryPayload
  updateDiscussionEntryParticipant(
    """
    Parameters for UpdateDiscussionEntryParticipant
    """
    input: UpdateDiscussionEntryParticipantInput!
  ): UpdateDiscussionEntryParticipantPayload
  updateDiscussionReadState(
    """
    Parameters for UpdateDiscussionReadState
    """
    input: UpdateDiscussionReadStateInput!
  ): UpdateDiscussionReadStatePayload
  updateDiscussionThreadReadState(
    """
    Parameters for UpdateDiscussionThreadReadState
    """
    input: UpdateDiscussionThreadReadStateInput!
  ): UpdateDiscussionThreadReadStatePayload
  updateDiscussionTopic(
    """
    Parameters for UpdateDiscussionTopic
    """
    input: UpdateDiscussionTopicInput!
  ): UpdateDiscussionTopicPayload
  updateDiscussionTopicParticipant(
    """
    Parameters for UpdateDiscussionTopicParticipant
    """
    input: UpdateDiscussionTopicParticipantInput!
  ): UpdateDiscussionTopicParticipantPayload
  updateGradebookGroupFilter(
    """
    Parameters for UpdateGradebookGroupFilter
    """
    input: UpdateGradebookGroupFilterInput!
  ): UpdateGradebookGroupFilterPayload
  updateInternalSetting(
    """
    Parameters for UpdateInternalSetting
    """
    input: UpdateInternalSettingInput!
  ): UpdateInternalSettingPayload
  updateLearnerDashboardTabSelection(
    """
    Parameters for UpdateLearnerDashboardTabSelection
    """
    input: UpdateLearnerDashboardTabSelectionInput!
  ): UpdateLearnerDashboardTabSelectionPayload
  updateLearningOutcome(
    """
    Parameters for UpdateLearningOutcome
    """
    input: UpdateLearningOutcomeInput!
  ): UpdateLearningOutcomePayload
  updateLearningOutcomeGroup(
    """
    Parameters for UpdateLearningOutcomeGroup
    """
    input: UpdateLearningOutcomeGroupInput!
  ): UpdateLearningOutcomeGroupPayload
  updateMyInboxSettings(
    """
    Parameters for UpdateMyInboxSettings
    """
    input: UpdateMyInboxSettingsInput!
  ): UpdateMyInboxSettingsPayload
  updateNotificationPreferences(
    """
    Parameters for UpdateNotificationPreferences
    """
    input: UpdateNotificationPreferencesInput!
  ): UpdateNotificationPreferencesPayload
  updateOutcomeCalculationMethod(
    """
    Parameters for UpdateOutcomeCalculationMethod
    """
    input: UpdateOutcomeCalculationMethodInput!
  ): UpdateOutcomeCalculationMethodPayload
  updateOutcomeProficiency(
    """
    Parameters for UpdateOutcomeProficiency
    """
    input: UpdateOutcomeProficiencyInput!
  ): UpdateOutcomeProficiencyPayload
  updateRubricArchivedState(
    """
    Parameters for UpdateRubricArchivedState
    """
    input: UpdateRubricArchivedStateInput!
  ): UpdateRubricArchivedStatePayload
  updateRubricAssessmentReadState(
    """
    Parameters for UpdateRubricAssessmentReadState
    """
    input: UpdateRubricAssessmentReadStateInput!
  ): UpdateRubricAssessmentReadStatePayload
  updateSpeedGraderSettings(
    """
    Parameters for UpdateSpeedGraderSettings
    """
    input: UpdateSpeedGraderSettingsInput!
  ): UpdateSpeedGraderSettingsPayload
  updateSplitScreenViewDeeplyNestedAlert(
    """
    Parameters for UpdateSplitScreenViewDeeplyNestedAlert
    """
    input: UpdateSplitScreenViewDeeplyNestedAlertInput!
  ): UpdateSplitScreenViewDeeplyNestedAlertPayload
  updateSubmissionGrade(
    """
    Parameters for UpdateSubmissionsGrade
    """
    input: UpdateSubmissionsGradeInput!
  ): UpdateSubmissionsGradePayload
  updateSubmissionGradeStatus(
    """
    Parameters for UpdateSubmissionsGradeStatus
    """
    input: UpdateSubmissionsGradeStatusInput!
  ): UpdateSubmissionsGradeStatusPayload
  updateSubmissionSticker(
    """
    Parameters for UpdateSubmissionSticker
    """
    input: UpdateSubmissionStickerInput!
  ): UpdateSubmissionStickerPayload
  updateSubmissionStudentEnteredScore(
    """
    Parameters for UpdateSubmissionStudentEnteredScore
    """
    input: UpdateSubmissionStudentEnteredScoreInput!
  ): UpdateSubmissionStudentEnteredScorePayload
  updateSubmissionsReadState(
    """
    Parameters for UpdateSubmissionsReadState
    """
    input: UpdateSubmissionsReadStateInput!
  ): UpdateSubmissionsReadStatePayload
  updateUserDiscussionsSplitscreenView(
    """
    Parameters for UpdateUserDiscussionsSplitscreenView
    """
    input: UpdateUserDiscussionsSplitscreenViewInput!
  ): UpdateUserDiscussionsSplitscreenViewPayload
  updateWidgetDashboardConfig(
    """
    Parameters for UpdateWidgetDashboardConfig
    """
    input: UpdateWidgetDashboardConfigInput!
  ): UpdateWidgetDashboardConfigPayload
  updateWidgetDashboardLayout(
    """
    Parameters for UpdateWidgetDashboardLayout
    """
    input: UpdateWidgetDashboardLayoutInput!
  ): UpdateWidgetDashboardLayoutPayload
  upsertCustomGradeStatus(
    """
    Parameters for UpsertCustomGradeStatus
    """
    input: UpsertCustomGradeStatusInput!
  ): UpsertCustomGradeStatusPayload
  upsertStandardGradeStatus(
    """
    Parameters for UpsertStandardGradeStatus
    """
    input: UpsertStandardGradeStatusInput!
  ): UpsertStandardGradeStatusPayload
}

type MutationLog {
  assetString: ID!
  mutationId: ID!
  mutationName: String!
  params: JSON

  """
  If the mutation was performed by a user masquerading as another user,
  this field returns the "real" (logged-in) user.
  """
  realUser: User
  timestamp: DateTime
  user: User
}

"""
The connection type for MutationLog.
"""
type MutationLogConnection {
  """
  A list of edges.
  """
  edges: [MutationLogEdge]

  """
  A list of nodes.
  """
  nodes: [MutationLog]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type MutationLogEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: MutationLog
}

"""
An object with an ID.
"""
interface Node {
  """
  ID of the object.
  """
  id: ID!
}

enum NodeType {
  Account
  AllocationRule
  Assignment
  AssignmentGroup
  Conversation
  Course
  Discussion
  DiscussionEntry
  Enrollment
  File
  Folder
  GradingPeriod
  GradingPeriodGroup
  Group
  GroupSet
  InternalSetting
  LearningOutcomeGroup
  MediaObject
  Module
  ModuleItem
  ModuleProgression
  OutcomeCalculationMethod
  OutcomeProficiency
  Page
  PeerReviewSubAssignment
  PostPolicy
  Progress
  Rubric
  Section
  Submission
  Term
  UsageRights
  User
}

"""
A descriptive tag that doesn't link the assignment to a set
"""
type Noop {
  _id: ID!
}

type Notification implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  category: String!
  categoryDescription: String!
  categoryDisplayName: String!
  createdAt: DateTime
  id: ID!
  name: String!
  updatedAt: DateTime
  workflowState: String
}

"""
The categories that a notification can belong to
"""
enum NotificationCategoryType {
  Account_Notification
  Added_To_Conversation
  All_Submissions
  Announcement
  Announcement_Created_By_You
  Appointment_Availability
  Appointment_Cancelations
  Appointment_Signups
  Blueprint
  Calendar
  Content_Link_Error
  Conversation_Created
  Conversation_Message
  Course_Content
  Discussion
  DiscussionEntry
  DiscussionMention
  Due_Date
  Files
  Grading
  Grading_Policies
  Invitation
  Late_Grading
  Membership_Update
  Other
  Recording_Ready
  ReportedReply
  Student_Appointment_Signups
  Submission_Comment
}

"""
Frequency that notifications can be delivered on
"""
enum NotificationFrequencyType {
  daily
  immediately
  never
  weekly
}

type NotificationPolicy implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  communicationChannelId: ID!
  createdAt: DateTime
  frequency: String
  id: ID!
  notification: Notification
  updatedAt: DateTime
}

type NotificationPreferences {
  channels(channelId: ID = null): [CommunicationChannel!]
  readPrivacyNoticeDate: String
  sendObservedNamesInNotifications: Boolean
  sendScoresInEmails(courseId: ID): Boolean
}

"""
Context types that can be associated with notification preferences
"""
enum NotificationPreferencesContextType {
  Account
  Course
}

"""
Types that can be submitted online
"""
enum OnlineSubmissionType {
  basic_lti_launch
  media_recording
  online_text_entry
  online_upload
  online_url
  student_annotation
}

enum OrderDirection {
  ascending
  descending
}

type OutcomeAlignment implements Timestamped {
  _id: ID!
  alignmentsCount: Int!
  assignmentContentType: String
  assignmentWorkflowState: String
  contentId: ID!
  contentType: String!
  contextId: ID!
  contextType: String!
  createdAt: DateTime
  learningOutcomeId: ID!
  moduleId: String
  moduleName: String
  moduleUrl: String
  moduleWorkflowState: String
  quizItems: [QuizItem!]
  title: String!
  updatedAt: DateTime
  url: String!
}

"""
Customized calculation method
"""
type OutcomeCalculationMethod implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!
  calculationInt: Int
  calculationMethod: String!
  contextId: ID!
  contextType: String!
  id: ID!
  locked: Boolean!
}

type OutcomeFriendlyDescriptionType implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  contextId: ID!
  contextType: String!
  createdAt: DateTime
  description: String!
  id: ID!
  learningOutcomeId: ID!
  updatedAt: DateTime
  workflowState: String!
}

"""
Customized proficiency ratings
"""
type OutcomeProficiency implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!
  contextId: ID!
  contextType: String!
  id: ID!
  locked: Boolean!
  masteryPoints: Float!
  proficiencyRatingsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ProficiencyRatingConnection!
}

input OutcomeProficiencyRatingCreate {
  color: String!
  description: String!
  mastery: Boolean!
  points: Float!
}

type Page implements LegacyIDInterface & ModuleItemInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  canDuplicate: Boolean
  canManageAssignTo: Boolean

  """
  Whether the module item can be unpublished
  """
  canUnpublish: Boolean
  createdAt: DateTime
  graded: Boolean
  id: ID!
  isLockedByMasterCourse: Boolean!
  modules: [Module!]
  pointsPossible: Float

  """
  Whether the module item is published
  """
  published: Boolean
  title: String
  todoDate: DateTime
  type: String
  updatedAt: DateTime
}

"""
The connection type for Page.
"""
type PageConnection {
  """
  A list of edges.
  """
  edges: [PageEdge]

  """
  A list of nodes.
  """
  nodes: [Page]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type PageEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Page
}

input PageFilter {
  """
  only return pages whose title matches this search term
  """
  searchTerm: String

  """
  only return pages for the given user. Defaults to
  the current user.
  """
  userId: ID
}

"""
Information about pagination in a connection.
"""
type PageInfo {
  """
  When paginating forwards, the cursor to continue.
  """
  endCursor: String

  """
  When paginating forwards, are there more items?
  """
  hasNextPage: Boolean!

  """
  When paginating backwards, are there more items?
  """
  hasPreviousPage: Boolean!

  """
  When paginating backwards, the cursor to continue.
  """
  startCursor: String
}

type PageViewAnalysis {
  """
  This number (0-3) is intended to give an idea of how the student is doing relative to others in the course
  """
  level: Int

  """
  The maximum number of views/participations in this course
  """
  max: Int

  """
  The number of views/participations this student has
  """
  total: Int
}

interface PagesConnectionInterface {
  """
  returns a list of wiki pages.
  """
  pagesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: PageFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): PageConnection
}

"""
Peer review dates for an assignment date hash entry
"""
type PeerReviewDates {
  dueAt: DateTime
  lockAt: DateTime
  unlockAt: DateTime
}

"""
Peer review status for a student on an assignment
"""
type PeerReviewStatus {
  """
  Number of peer reviews the student has completed
  """
  completedReviewsCount: Int!

  """
  Number of peer reviews the student has been allocated
  """
  mustReviewCount: Int!
}

type PeerReviewSubAssignment implements AssignedDates & LegacyIDInterface & ModuleItemInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!

  """
  Allocation rules if peer review is enabled
  """
  allocationRules: AssignmentAllocationRules
  allowGoogleDocsSubmission: Boolean

  """
  Whether the current user can provide a provisional grade for this assignment
  """
  allowProvisionalGrading: AllowProvisionalGradingType!

  """
  The number of submission attempts a student can make for this assignment. null implies unlimited.
  """
  allowedAttempts: Int

  """
  permitted uploaded file extensions (e.g. ['doc', 'xls', 'txt'])
  """
  allowedExtensions: [String!]
  anonymizeStudents: Boolean
  anonymousGrading: Boolean
  anonymousInstructorAnnotations: Boolean
  anonymousStudentIdentities: [AnonymousStudentIdentity!]
  assessmentRequestsForCurrentUser: [AssessmentRequest!]

  """
  Assessment requests for a specific user where they are the assessor (peer reviewer)
  """
  assessmentRequestsForUser(userId: ID!): [AssessmentRequest!]
  assignedStudents(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: AssignedStudentsFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): UserConnection

  """
  Standardized date hash visible to current user
  """
  assignedToDates: [DateHash!]
  assignmentGroup: AssignmentGroup
  assignmentGroupId: ID
  assignmentOverrides(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): AssignmentOverrideConnection
  assignmentTargetConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    orderBy: AssignmentTargetSortOrder
  ): AssignmentOverrideConnection

  """
  Discriminator indicating the actual type of this assignment
  """
  assignmentType: AssignmentTypeEnum!

  """
  Returns empty array if visible to everyone
  """
  assignmentVisibility: [ID!]

  """
  Errors related to the assignment
  """
  autoGradeAssignmentErrors: [String!]!

  """
  Issues related to the assignment
  """
  autoGradeAssignmentIssues: EligibilityIssue
  canDuplicate: Boolean
  canManageAssignTo: Boolean
  canUnpublish: Boolean

  """
  specifies that the current user can update the rubric self-assessment.
  """
  canUpdateRubricSelfAssessment: Boolean

  """
  A list of checkpoints (also known as sub_assignments) that are associated with this assignment
  """
  checkpoints: [Checkpoint!]
  course: Course
  courseId: ID
  createdAt: DateTime
  description: String
  discussion: Discussion

  """
  when this assignment is due
  """
  dueAt(
    """
    When true, return the overridden dates.

    Not all roles have permission to view un-overridden dates (in which
    case the overridden dates will be returned)
    """
    applyOverrides: Boolean = true
  ): DateTime
  dueDateRequired: Boolean
  expectsExternalSubmission: Boolean
  expectsSubmission: Boolean

  """
  specifies that students are being graded as a group (as opposed to being graded individually).
  """
  gradeAsGroup: Boolean!
  gradeByQuestionEnabled: Boolean!

  """
  If this is a group assignment, boolean flag indicating whether or not students will be graded individually.
  """
  gradeGroupStudentsIndividually: Boolean
  graded: Boolean

  """
  If true, the assignment has at least one graded submission
  """
  gradedSubmissionsExist: Boolean

  """
  Grader identities if moderated assignment
  """
  graderIdentitiesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): GraderIdentityConnection
  gradesPublished: Boolean
  gradesPublishedAt: String
  gradingPeriodId: String

  """
  The grading role of the current user for this assignment. Returns null if the
  user does not have sufficient grading permissions.
  """
  gradingRole: GradingRole
  gradingStandard: GradingStandard
  gradingStandardId: ID
  gradingType: GradingType
  groupCategoryId: Int
  groupSet: GroupSet

  """
  returns submissions grouped to one submission object per group
  """
  groupSubmissionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionSearchFilterInput

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    orderBy: [SubmissionSearchOrder!]
  ): SubmissionConnection

  """
  specifies that this assignment is a group assignment
  """
  hasGroupCategory: Boolean!
  hasMultipleDueDates: Boolean

  """
  Indicates if the assignment has LTI 2.0 plagiarism detection tool configured
  """
  hasPlagiarismTool: Boolean!
  hasRubric: Boolean!

  """
  Boolean: returns true if the assignment is checkpointed. A checkpointed
  assignment has checkpoints ( also known as sub_assignments)
  """
  hasSubAssignments: Boolean!

  """
  If true, the assignment has been submitted to by at least one student
  """
  hasSubmittedSubmissions: Boolean
  htmlUrl: URL
  id: ID!
  importantDates: Boolean
  inClosedGradingPeriod: Boolean
  isLockedByMasterCourse: Boolean!

  """
  Assignment is connected to a New Quiz
  """
  isNewQuiz: Boolean!

  """
  the lock date (assignment is locked after this date)
  """
  lockAt(
    """
    When true, return the overridden dates.

    Not all roles have permission to view un-overridden dates (in which
    case the overridden dates will be returned)
    """
    applyOverrides: Boolean = true
  ): DateTime
  lockInfo: LockInfo
  ltiAssetProcessorsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): LtiAssetProcessorConnection
  moderatedGrading: ModeratedGrading
  moderatedGradingEnabled: Boolean
  moduleItems: [ModuleItem!]
  modules: [Module!]
  muted: Boolean

  """
  submissions for sub-assignments belonging to the current user
  """
  mySubAssignmentSubmissionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): SubmissionConnection
  name: String
  needsGradingCount: Int
  newQuizzesAnonymousParticipants: Boolean
  nonDigitalSubmission: Boolean

  """
  If true, the assignment will be omitted from the student's final grade
  """
  omitFromFinalGrade: Boolean

  """
  specifies that this assignment is only assigned to students for whom an
         `AssignmentOverride` applies.
  """
  onlyVisibleToOverrides: Boolean!
  originalityReportVisibility: String
  parentAssignment: Assignment!
  parentAssignmentId: ID!
  peerReviewSubAssignment: PeerReviewSubAssignment
  peerReviews: PeerReviews

  """
  the assignment is out of this many points
  """
  pointsPossible: Float

  """
  determines the order this assignment is displayed in in its assignment group
  """
  position: Int
  postManually: Boolean
  postPolicy: PostPolicy

  """
  present if Sync Grades to SIS feature is enabled
  """
  postToSis: Boolean

  """
  Indicates if the user is locked out of provisional grading for this assignment.
  """
  provisionalGradingLocked: Boolean!
  published: Boolean
  quiz: Quiz

  """
  Is the current user restricted from viewing quantitative data
  """
  restrictQuantitativeData(
    """
    Check extra permissions in RQD method
    """
    checkExtraPermissions: Boolean
  ): Boolean
  rubric: Rubric
  rubricAssessment: AssignmentRubricAssessment
  rubricAssociation: RubricAssociation

  """
  specifies that students can self-assess using the assignment rubric.
  """
  rubricSelfAssessmentEnabled: Boolean
  rubricUpdateUrl: String
  scheduledPost: ScheduledPost
  scoreStatistic: AssignmentScoreStatistic
  sisId: String
  state: AssignmentState!
  submissionTypes: [SubmissionType!]

  """
  submissions for this assignment
  """
  submissionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionSearchFilterInput

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    orderBy: [SubmissionSearchOrder!]
  ): SubmissionConnection
  submissionsDownloads: Int
  supportsGradeByQuestion: Boolean!

  """
  internal use
  """
  suppressAssignment: Boolean!
  timeZoneEdited: String
  title: String
  totalGradedSubmissions: Int
  totalSubmissions: Int
  type: String

  """
  the unlock date (assignment is unlocked after this date)
  """
  unlockAt(
    """
    When true, return the overridden dates.

    Not all roles have permission to view un-overridden dates (in which
    case the overridden dates will be returned)
    """
    applyOverrides: Boolean = true
  ): DateTime
  updatedAt: DateTime

  """
  specifies all other variables that can determine visiblity.
  """
  visibleToEveryone: Boolean!
}

"""
Settings for Peer Reviews on an Assignment
"""
type PeerReviews {
  """
  Boolean indicating if peer reviews can be assigned across different sections
  """
  acrossSections: Boolean

  """
  Boolean representing whether or not peer reviews are anonymous
  """
  anonymousReviews: Boolean

  """
  Boolean indicating peer reviews are assigned automatically. If false, the
  teacher is expected to manually assign peer reviews.
  """
  automaticReviews: Boolean

  """
  Integer representing the amount of reviews each user is assigned.
  """
  count: Int

  """
  Date and Time representing when the peer reviews are due
  """
  dueAt: DateTime

  """
  Boolean indicating if peer reviews are required for this assignment
  """
  enabled: Boolean

  """
  Boolean representing whether or not members from within the same group on a
  group assignment can be assigned to peer review their own group's work
  """
  intraReviews: Boolean

  """
  Points possible for the peer review sub-assignment
  """
  pointsPossible: Float

  """
  Boolean indicating if students must submit their assignment before they can do peer reviews
  """
  submissionRequired: Boolean
}

type Placement {
  title: String!
  url: String!
}

"""
A placement for an external tool in Canvas
"""
type Placements {
  """
  Placement for assignment selection
  """
  assignmentSelection: Placement

  """
  Placement for course assignments menu
  """
  courseAssignmentsMenu: Placement

  """
  Placement for editor button
  """
  editorButton: Placement

  """
  Placement for link selection
  """
  linkSelection: Placement

  """
  Placement for module index menu modal
  """
  moduleIndexMenuModal: Placement

  """
  Placement for module menu modal
  """
  moduleMenuModal: Placement

  """
  Placement for resource selection
  """
  resourceSelection: Placement
  title: String!
  url: String!
}

"""
Interface for placements
"""
interface PlacementsInterface {
  """
  Placements for the external tool
  """
  placements: Placements!
}

"""
Autogenerated input type of PostAssignmentGradesForSections
"""
input PostAssignmentGradesForSectionsInput {
  assignmentId: ID!
  gradedOnly: Boolean
  sectionIds: [ID!]!
}

"""
Autogenerated return type of PostAssignmentGradesForSections.
"""
type PostAssignmentGradesForSectionsPayload {
  assignment: Assignment
  errors: [ValidationError!]
  progress: Progress
  sections: [Section!]
}

"""
Autogenerated input type of PostAssignmentGrades
"""
input PostAssignmentGradesInput {
  assignmentId: ID!
  gradedOnly: Boolean
  onlyStudentIds: [ID!]
  sectionIds: [ID!]
  skipStudentIds: [ID!]
}

"""
Autogenerated return type of PostAssignmentGrades.
"""
type PostAssignmentGradesPayload {
  assignment: Assignment
  errors: [ValidationError!]
  progress: Progress
  sections: [Section!]
}

"""
Autogenerated input type of PostDraftSubmissionComment
"""
input PostDraftSubmissionCommentInput {
  submissionCommentId: ID!
}

"""
Autogenerated return type of PostDraftSubmissionComment.
"""
type PostDraftSubmissionCommentPayload {
  errors: [ValidationError!]
  submissionComment: SubmissionComment
}

"""
A PostPolicy sets the policy for whether a Submission's grades are posted
automatically or manually. A PostPolicy can be set at the Course and/or
Assignment level.
"""
type PostPolicy implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!
  assignment: Assignment
  course: Course!

  """
  ID of the object.
  """
  id: ID!
  postManually: Boolean!
}

"""
The connection type for PostPolicy.
"""
type PostPolicyConnection {
  """
  A list of edges.
  """
  edges: [PostPolicyEdge]

  """
  A list of nodes.
  """
  nodes: [PostPolicy]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type PostPolicyEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: PostPolicy
}

"""
The preferred language for the translation, currently supporting only Cedar languages.
"""
enum PreferredLanguageType {
  """
  Catalan
  """
  CA

  """
  German
  """
  DE

  """
  English
  """
  EN

  """
  Spanish
  """
  ES

  """
  French
  """
  FR

  """
  Dutch
  """
  NL

  """
  Portuguese (Brazil)
  """
  PT_BR

  """
  Russian
  """
  RU

  """
  Swedish
  """
  SV

  """
  Chinese (Simplified)
  """
  ZH_HANS
}

"""
Customized proficiency rating
"""
type ProficiencyRating implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  color: String
  description: String
  mastery: Boolean!
  points: Float!
}

"""
The connection type for ProficiencyRating.
"""
type ProficiencyRatingConnection {
  """
  A list of edges.
  """
  edges: [ProficiencyRatingEdge]

  """
  A list of nodes.
  """
  nodes: [ProficiencyRating]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type ProficiencyRatingEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: ProficiencyRating
}

input ProficiencyRatingInput {
  description: String!
  points: Float!
}

"""
Returns completion status and progress information about an asynchronous job
"""
type Progress implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!

  """
  percent completed
  """
  completion: Int
  context: ProgressContext
  createdAt: DateTime
  id: ID!

  """
  details about the job
  """
  message: String
  state: ProgressState!

  """
  the type of operation
  """
  tag: String!
  updatedAt: DateTime
}

union ProgressContext = Assignment | Course | File | GroupSet | User

enum ProgressState {
  completed
  failed
  queued
  running
}

type ProvisionalGrade implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  final: Boolean!
  grade: String
  score: Float
  scorerAnonymousId: ID
  selected: Boolean!
}

"""
The connection type for ProvisionalGrade.
"""
type ProvisionalGradeConnection {
  """
  A list of edges.
  """
  edges: [ProvisionalGradeEdge]

  """
  A list of nodes.
  """
  nodes: [ProvisionalGrade]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type ProvisionalGradeEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: ProvisionalGrade
}

type Query {
  account(
    """
    a graphql or legacy id
    """
    id: ID

    """
    a id from the original SIS system
    """
    sisId: String
  ): Account

  """
  Account notifications for the current user
  """
  accountNotifications(
    """
    Account ID to fetch notifications for
    """
    accountId: ID
  ): [AccountNotification!]!

  """
  All courses viewable by the current user
  """
  allCourses: [Course!]
  assignment(
    """
    a graphql or legacy id
    """
    id: ID

    """
    Types of assignments to include. Defaults to [ASSIGNMENT] for backward
    compatibility. Note: This parameter is ignored when using sisId lookup.
    """
    includeTypes: [AssignmentTypeEnum!] = [ASSIGNMENT]

    """
    an id from the original SIS system
    """
    sisId: String
  ): Assignment
  assignmentGroup(
    """
    a graphql or legacy id
    """
    id: ID

    """
    an id from the original SIS system
    """
    sisId: String
  ): AssignmentGroup
  auditLogs: AuditLogs
  course(
    """
    a graphql or legacy id, preference for search is given to this id
    """
    id: ID

    """
    a id from the original SIS system
    """
    sisId: String
  ): Course

  """
  Paginated instructors with their enrollments across multiple courses
  """
  courseInstructorsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Course IDs to get instructors for
    """
    courseIds: [ID!]!

    """
    Filter by enrollment types (TeacherEnrollment, TaEnrollment)
    """
    enrollmentTypes: [String!]

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int

    """
    ID of the observed user
    """
    observedUserId: ID
  ): InstructorWithEnrollmentsConnection

  """
  Courses by IDs that are viewable by the current user
  """
  courses(
    """
    graphql or legacy course IDs
    """
    ids: [ID!]

    """
    ids from the original SIS system
    """
    sisIds: [String!]
  ): [Course!]

  """
  Pending enrollment invitations for the current user
  """
  enrollmentInvitations(includeEnrollmentUuid: String): [Enrollment!]!

  """
  Folder
  """
  folder(
    """
    a graphql or legacy id
    """
    id: ID!
  ): Folder

  """
  Retrieves a single internal setting by its ID or name
  """
  internalSetting(
    """
    a graphql or legacy id
    """
    id: ID

    """
    the name of the Setting
    """
    name: String
  ): InternalSetting

  """
  All internal settings
  """
  internalSettings: [InternalSetting!]

  """
  LearningOutcome
  """
  learningOutcome(
    """
    a graphql or legacy id
    """
    id: ID!
  ): LearningOutcome

  """
  LearningOutcomeGroup
  """
  learningOutcomeGroup(
    """
    a graphql or legacy id
    """
    id: ID!
  ): LearningOutcomeGroup

  """
  Fetches an object given its type and legacy ID
  """
  legacyNode(_id: ID!, type: NodeType!): Node

  """
  ModuleItem
  """
  moduleItem(
    """
    a graphql or legacy id
    """
    id: ID!
  ): ModuleItem
  myInboxSettings: InboxSettings

  """
  Fetches an object given its ID.
  """
  node(
    """
    ID of the object.
    """
    id: ID!
  ): Node

  """
  OutcomeCalculationMethod
  """
  outcomeCalculationMethod(
    """
    a graphql or legacy id
    """
    id: ID!
  ): OutcomeCalculationMethod

  """
  OutcomeProficiency
  """
  outcomeProficiency(
    """
    a graphql or legacy id
    """
    id: ID!
  ): OutcomeProficiency
  peerReviewSubAssignment(
    """
    a graphql or legacy id
    """
    id: ID!
  ): PeerReviewSubAssignment

  """
  Rubric
  """
  rubric(
    """
    a graphql or legacy id
    """
    id: ID!
  ): Rubric
  submission(
    """
    an anonymous id in use when grading anonymously
    """
    anonymousId: ID

    """
    a graphql or legacy assignment id
    """
    assignmentId: ID

    """
    a graphql or legacy id
    """
    id: ID

    """
    a graphql or legacy user id
    """
    userId: ID
  ): Submission
  term(
    """
    a graphql or legacy id
    """
    id: ID

    """
    an id from the original SIS system
    """
    sisId: String
  ): Term
}

type Quiz implements AssignedDates & LegacyIDInterface & ModuleItemInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  anonymousSubmissions: Boolean!

  """
  Standardized date hash visible to current user
  """
  assignedToDates: [DateHash!]
  canDuplicate: Boolean
  canManageAssignTo: Boolean

  """
  Whether the module item can be unpublished
  """
  canUnpublish: Boolean
  createdAt: DateTime
  graded: Boolean
  id: ID!
  isLockedByMasterCourse: Boolean!
  modules: [Module!]
  pointsPossible: Float

  """
  Whether the module item is published
  """
  published: Boolean

  """
  The type of quiz: 'quiz' for regular quizzes, 'assignment' for LTI quiz assignments
  """
  quizType: String!

  """
  submissions for this quiz's assignment
  """
  submissionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionSearchFilterInput

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    orderBy: [SubmissionSearchOrder!]
  ): SubmissionConnection
  title: String
  type: String
  updatedAt: DateTime
}

"""
The connection type for Quiz.
"""
type QuizConnection {
  """
  A list of edges.
  """
  edges: [QuizEdge]

  """
  A list of nodes.
  """
  nodes: [Quiz]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type QuizEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Quiz
}

input QuizFilter {
  """
  only return quizzes whose title matches this search term
  """
  searchTerm: String

  """
  only return quizzes for the given user. Defaults to
  the current user.
  """
  userId: ID
}

type QuizItem {
  _id: ID!
  title: String!
}

type QuizSubmission implements LegacyIDInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  attempt: Int
  createdAt: DateTime
  extraAttempts: Int
  extraTime: Int
  finishedAt: DateTime
  fudgePoints: Float
  keptScore: Float
  manuallyScored: Boolean
  quizPointsPossible: Float
  quizVersion: Int
  score: Float
  startedAt: DateTime
  updatedAt: DateTime
  workflowState: String!
}

"""
The connection type for QuizSubmission.
"""
type QuizSubmissionConnection {
  """
  A list of edges.
  """
  edges: [QuizSubmissionEdge]

  """
  A list of nodes.
  """
  nodes: [QuizSubmission]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type QuizSubmissionEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: QuizSubmission
}

interface QuizzesConnectionInterface {
  """
  returns a list of quizzes.
  """
  quizzesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: QuizFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): QuizConnection
}

enum RatingInputType {
  liked
  not_liked
}

type Recipients {
  contextsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): MessageableContextConnection
  sendMessagesAll: Boolean
  usersConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): MessageableUserConnection
}

"""
Autogenerated input type of RejectEnrollmentInvitation
"""
input RejectEnrollmentInvitationInput {
  enrollmentUuid: String!
}

"""
Autogenerated return type of RejectEnrollmentInvitation.
"""
type RejectEnrollmentInvitationPayload {
  enrollment: Enrollment
  errors: [ValidationError!]
  success: Boolean!
}

"""
Autogenerated input type of ReorderModuleItems
"""
input ReorderModuleItemsInput {
  courseId: ID!
  itemIds: [ID!]!
  moduleId: ID!
  oldModuleId: ID
  targetPosition: Int
}

"""
Autogenerated return type of ReorderModuleItems.
"""
type ReorderModuleItemsPayload {
  errors: [ValidationError!]
  module: Module
  oldModule: Module
}

enum ReportType {
  inappropriate
  offensive
  other
}

type Requirement {
  id: ID!
  minPercentage: Float
  minScore: Float
  score: Float
  type: String!
}

"""
Autogenerated input type of RestoreDeletedDiscussionEntry
"""
input RestoreDeletedDiscussionEntryInput {
  discussionEntryId: ID!
}

"""
Autogenerated return type of RestoreDeletedDiscussionEntry.
"""
type RestoreDeletedDiscussionEntryPayload {
  discussionEntry: DiscussionEntry
  errors: [ValidationError!]
}

type Rubric implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!
  buttonDisplay: String!
  canUpdateRubric: Boolean!

  """
  The different criteria that makes up this rubric
  """
  criteria: [RubricCriterion!]!
  criteriaCount: Int!
  freeFormCriterionComments: Boolean!
  hasRubricAssociations: Boolean!
  hidePoints: Boolean
  hideScoreTotal: Boolean!
  id: ID!
  pointsPossible: Float
  ratingOrder: String!
  rubricAssociationForContext: RubricAssociation
  title: String
  unassessed: Boolean!
  workflowState: String!
}

"""
An assessment for a rubric
"""
type RubricAssessment implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  artifactAttempt: Int!

  """
  The assessments for the individual criteria in this rubric
  """
  assessmentRatings: [RubricAssessmentRating!]
  assessmentType: AssessmentType!
  assessor: User
  isCurrentUser: Boolean!
  rubricAssociation: RubricAssociation
  score: Float
  updatedAt: DateTime
  user: User
}

"""
The connection type for RubricAssessment.
"""
type RubricAssessmentConnection {
  """
  A list of edges.
  """
  edges: [RubricAssessmentEdge]

  """
  A list of nodes.
  """
  nodes: [RubricAssessment]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type RubricAssessmentEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: RubricAssessment
}

"""
An assessment for a specific criteria in a rubric
"""
type RubricAssessmentRating {
  """
  legacy canvas id
  """
  _id: ID
  artifactAttempt: Int!
  comments: String
  commentsEnabled: Boolean!
  commentsHtml: String

  """
  The rubric criteria that this assessment is for
  """
  criterion: RubricCriterion
  description: String
  outcome: LearningOutcome
  points: Float
  rubricAssessmentId: ID!
}

"""
How a rubric is being used in a context
"""
type RubricAssociation implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  associationId: String!
  associationType: String!
  hideOutcomeResults: Boolean!
  hidePoints: Boolean!
  hideScoreTotal: Boolean!
  savedComments: String
  useForGrading: Boolean!
}

"""
The connection type for Rubric.
"""
type RubricConnection {
  """
  A list of edges.
  """
  edges: [RubricEdge]

  """
  A list of nodes.
  """
  nodes: [Rubric]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
Individual criteria for a rubric
"""
type RubricCriterion implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  criterionUseRange: Boolean!
  description: String
  ignoreForScoring: Boolean!
  learningOutcomeId: ID
  longDescription: String
  masteryPoints: Float
  outcome: LearningOutcome
  points: Float

  """
  The possible ratings available for this criterion
  """
  ratings: [RubricRating!]
}

"""
An edge in a connection.
"""
type RubricEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Rubric
}

"""
Possible rating for a rubric criterion
"""
type RubricRating implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  description: String!
  longDescription: String
  points: Float!
  rubricId: ID!
}

"""
Autogenerated input type of SaveRubricAssessment
"""
input SaveRubricAssessmentInput {
  assessmentDetails: JSON!
  final: Boolean = false
  gradedAnonymously: Boolean!
  provisional: Boolean = false
  rubricAssessmentId: ID
  rubricAssociationId: ID!
  submissionId: ID!
}

"""
Autogenerated return type of SaveRubricAssessment.
"""
type SaveRubricAssessmentPayload {
  errors: [ValidationError!]
  rubricAssessment: RubricAssessment
  rubricAssociation: RubricAssociation
  submission: Submission
}

"""
A ScheduledPost represents an assignment grade and/or comment posting that is scheduled to be published at a
specific time.
"""
type ScheduledPost implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  postCommentsAt: DateTime!
  postGradesAt: DateTime!
}

type Section implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  allStudents(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): UserConnection
  createdAt: DateTime
  gradesPosted(assignmentId: ID): Boolean!
  gradesPresent(assignmentId: ID!): Boolean!
  id: ID!
  name: String!
  sisId: String
  students(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): UserConnection
  updatedAt: DateTime
  userCount: Int!
}

"""
The connection type for Section.
"""
type SectionConnection {
  """
  A list of edges.
  """
  edges: [SectionEdge]

  """
  A list of nodes.
  """
  nodes: [Section]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type SectionEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Section
}

"""
Autogenerated input type of SelectProvisionalGrade
"""
input SelectProvisionalGradeInput {
  assignmentId: ID!
  provisionalGradeId: ID!
}

"""
Autogenerated return type of SelectProvisionalGrade.
"""
type SelectProvisionalGradePayload {
  errors: [ValidationError!]
  provisionalGrade: ProvisionalGrade
}

"""
Determines if/how a student may join a group. A student can belong to
only one group per group set at a time.
"""
enum SelfSignupPolicy {
  """
  self signup is not allowed
  """
  disabled

  """
  students may join any group
  """
  enabled

  """
  students may join a group in their section
  """
  restricted
}

"""
Autogenerated input type of SetAssignmentPostPolicy
"""
input SetAssignmentPostPolicyInput {
  assignmentId: ID!
  postCommentsAt: String
  postGradesAt: String
  postManually: Boolean!
}

"""
Autogenerated return type of SetAssignmentPostPolicy.
"""
type SetAssignmentPostPolicyPayload {
  errors: [ValidationError!]
  postPolicy: PostPolicy
}

"""
Autogenerated input type of SetCoursePostPolicy
"""
input SetCoursePostPolicyInput {
  courseId: ID!
  postManually: Boolean!
}

"""
Autogenerated return type of SetCoursePostPolicy.
"""
type SetCoursePostPolicyPayload {
  errors: [ValidationError!]
  postPolicy: PostPolicy
}

"""
Autogenerated input type of SetFriendlyDescription
"""
input SetFriendlyDescriptionInput {
  contextId: ID!
  contextType: String!
  description: String!
  outcomeId: ID!
}

"""
Autogenerated return type of SetFriendlyDescription.
"""
type SetFriendlyDescriptionPayload {
  errors: [ValidationError!]
  outcomeFriendlyDescription: OutcomeFriendlyDescriptionType
}

"""
Autogenerated input type of SetModuleItemCompletion
"""
input SetModuleItemCompletionInput {
  done: Boolean!
  itemId: ID!
  moduleId: ID!
}

"""
Autogenerated return type of SetModuleItemCompletion.
"""
type SetModuleItemCompletionPayload {
  errors: [ValidationError!]
  moduleItem: ModuleItem!
}

"""
Autogenerated input type of SetOverrideScore
"""
input SetOverrideScoreInput {
  enrollmentId: ID!
  gradingPeriodId: ID
  overrideScore: Float
}

"""
Autogenerated return type of SetOverrideScore.
"""
type SetOverrideScorePayload {
  errors: [ValidationError!]
  grades: Grades
}

"""
Autogenerated input type of SetOverrideStatus
"""
input SetOverrideStatusInput {
  customGradeStatusId: ID = null
  enrollmentId: ID!
  gradingPeriodId: ID = null
}

"""
Autogenerated return type of SetOverrideStatus.
"""
type SetOverrideStatusPayload {
  errors: [ValidationError!]
  grades: Grades
}

"""
Autogenerated input type of SetRubricSelfAssessment
"""
input SetRubricSelfAssessmentInput {
  assignmentId: ID!
  rubricSelfAssessmentEnabled: Boolean!
}

"""
Autogenerated return type of SetRubricSelfAssessment.
"""
type SetRubricSelfAssessmentPayload {
  errors: [ValidationError!]
}

type SpeedGraderSettings {
  gradeByQuestion: Boolean!
}

type StandardGradeStatus implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!
  color: String!
  id: ID!
  name: String!
}

"""
The connection type for StandardGradeStatus.
"""
type StandardGradeStatusConnection {
  """
  A list of edges.
  """
  edges: [StandardGradeStatusEdge]

  """
  A list of nodes.
  """
  nodes: [StandardGradeStatus]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type StandardGradeStatusEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: StandardGradeStatus
}

"""
Valid sticker types for submissions
"""
enum Sticker {
  apple
  basketball
  beaker
  bell
  book
  bookbag
  briefcase
  bus
  calculator
  calendar
  chem
  clock
  column
  composite_notebook
  computer
  design
  globe
  grad
  gym
  mail
  microscope
  mouse
  music
  notebook
  page
  paintbrush
  panda1
  panda2
  panda3
  panda4
  panda5
  panda6
  panda7
  panda8
  panda9
  paperclip
  pen
  pencil
  presentation
  ruler
  science
  science2
  scissors
  star
  tablet
  tag
  tape
  target
  telescope
  trophy
}

"""
An activity stream summary item
"""
type StreamSummaryItem {
  count: Int
  notificationCategory: String
  type: String
  unreadCount: Int
}

"""
A hash with string keys and string values
"""
scalar StringMap

"""
basic information about a students activity in a course
"""
type StudentSummaryAnalytics {
  pageViews: PageViewAnalysis
  participations: PageViewAnalysis
  tardinessBreakdown: TardinessBreakdown
}

type SubAssignmentSubmission {
  assignmentId: ID!
  cachedDueDate: DateTime
  customGradeStatusId: ID

  """
  how many points are being deducted due to late policy
  """
  deductedPoints: Float

  """
  the submission grade *before* late policy deductions were applied
  """
  enteredGrade: String

  """
  the submission score *before* late policy deductions were applied
  """
  enteredScore: Float

  """
  excused assignments are ignored when calculating grades
  """
  excused: Boolean
  grade: String
  gradeMatchesCurrentSubmission: Boolean
  late: Boolean
  latePolicyStatus: LatePolicyStatusType
  missing: Boolean
  publishedGrade: String
  publishedScore: Float
  score: Float
  secondsLate: Int
  statusTag: SubmissionStatusTagType!
  subAssignmentTag: String
  submittedAt: DateTime
}

type SubHeader implements ModuleItemInterface {
  canDuplicate: Boolean
  canManageAssignTo: Boolean

  """
  Whether the module item can be unpublished
  """
  canUnpublish: Boolean
  graded: Boolean
  isLockedByMasterCourse: Boolean!
  modules: [Module!]
  pointsPossible: Float

  """
  Whether the module item is published
  """
  published: Boolean
  title: String
  type: String
}

type Submission implements LegacyIDInterface & Node & SubmissionInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  anonymousId: ID
  assignedAssessments: [AssessmentRequest!]
  assignment: Assignment!
  assignmentId: ID!
  attachment: File
  attachments: [File!]
  attempt: Int!
  auditEventsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): AuditEventConnection

  """
  Indicates whether an auto-grading result exists for the submission.
  """
  autoGradeResultPresent: Boolean!

  """
  Errors related to the submission
  """
  autoGradeSubmissionErrors: [String!]!

  """
  Issues related to the submission
  """
  autoGradeSubmissionIssues: EligibilityIssue
  body: String
  cachedDueDate: DateTime
  commentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionCommentFilterInput = {}

    """
    Returns the first _n_ elements from the list.
    """
    first: Int
    includeDraftComments: Boolean = false

    """
    When true and include_draft_comments is true, draft comments from other teachers will be included.
    Only applies to users with grading permissions (teachers, TAs, etc).
    When false, only the current user's draft comments are included.
    Students never see draft comments from others regardless of this setting.
    """
    includeDraftsFromOthers: Boolean = false

    """
    When true, provisional comments that the current user has permission to see will be returned.
    The Moderator has permission to see all provisional comments.
    Provisional Graders can see each other's comments if "Graders can view each other's comments" is enabled.
    Otherwise, Provisional Graders can only see their own comments.
    Students cannot see provisional comments.
    """
    includeProvisionalComments: Boolean = false

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    sortOrder: SubmissionCommentsSortOrderType = null
  ): SubmissionCommentConnection!
  createdAt: DateTime
  customGradeStatus: String
  customGradeStatusId: ID

  """
  how many points are being deducted due to late policy
  """
  deductedPoints: Float
  enrollmentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): EnrollmentConnection

  """
  the submission grade *before* late policy deductions were applied
  """
  enteredGrade: String

  """
  the submission score *before* late policy deductions were applied
  """
  enteredScore: Float

  """
  excused assignments are ignored when calculating grades
  """
  excused: Boolean
  externalToolUrl: String
  extraAttempts: Int
  feedbackForCurrentAttempt: Boolean!
  grade: String
  gradeHidden: Boolean!

  """
  was the grade given on the current submission (resubmission)
  """
  gradeMatchesCurrentSubmission: Boolean
  gradedAnonymously: Boolean
  gradedAt: DateTime
  gradingPeriodId: ID
  gradingStatus: SubmissionGradingStatus
  groupId: ID
  hasOriginalityReport: Boolean!
  hasPostableComments: Boolean!

  """
  Whether the current user has provided a provisional grade with a non-null score for this submission
  """
  hasProvisionalGradeByCurrentUser: Boolean!
  hasSubAssignmentSubmissions: Boolean
  hasUnreadRubricAssessment: Boolean!

  """
  hide unpublished grades
  """
  hideGradeFromStudent: Boolean
  id: ID!
  lastCommentedByUserAt: DateTime
  late: Boolean
  latePolicyStatus: LatePolicyStatusType

  """
  Lti Asset Reports with active processors, with assets preloaded
  """
  ltiAssetReportsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int

    """
    When true, returns only the asset reports of the latest submission attempt (as students would see them)
    """
    latest: Boolean = false
  ): LtiAssetReportConnection
  mediaObject: MediaObject
  missing: Boolean
  originalityData: JSON
  posted: Boolean!
  postedAt: DateTime

  """
  This field is currently under development and its return value is subject to change.
  """
  previewUrl: String
  provisionalGradesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): ProvisionalGradeConnection
  proxySubmitter: String
  proxySubmitterId: ID
  readState: String
  redoRequest: Boolean
  resourceLinkLookupUuid: String
  rubricAssessmentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionRubricAssessmentFilterInput = {}

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): RubricAssessmentConnection!
  score: Float
  secondsLate: Float
  state: SubmissionState!
  status: String!
  statusTag: SubmissionStatusTagType!
  sticker: String
  studentEnteredScore: Float
  subAssignmentSubmissions: [SubAssignmentSubmission!]
  subAssignmentTag: String
  submissionCommentDownloadUrl: String
  submissionDraft: SubmissionDraft
  submissionHistoriesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionHistoryFilterInput = {}

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    orderBy: SubmissionHistoryOrder
  ): SubmissionHistoryConnection!
  submissionQuizHistoriesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): QuizSubmissionConnection
  submissionStatus: String
  submissionType: SubmissionType
  submittedAt: DateTime
  turnitinData: [TurnitinData!]
  unreadCommentCount: Int!
  updatedAt: DateTime
  url: URL
  user: User
  userId: ID
  vericiteData: [VericiteData!]
  wordCount: Float
}

type SubmissionComment implements LegacyIDInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  assignment: Assignment
  attachments: [File!]!
  attempt: Int!
  author: User
  authorVisibleName: String
  canReply: Boolean
  comment: String
  course: Course
  createdAt: DateTime!
  draft: Boolean!
  htmlComment: String
  id: ID!
  mediaCommentId: String
  mediaObject: MediaObject
  provisional: Boolean!
  read: Boolean!
  submissionId: ID!
  updatedAt: DateTime
}

"""
The connection type for SubmissionComment.
"""
type SubmissionCommentConnection {
  """
  A list of edges.
  """
  edges: [SubmissionCommentEdge]

  """
  A list of nodes.
  """
  nodes: [SubmissionComment]
  pageInfo: TotalCountPageInfo!
}

"""
An edge in a connection.
"""
type SubmissionCommentEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: SubmissionComment
}

input SubmissionCommentFilterInput {
  """
  If all of the comments, regardless of the submission attempt, should be returned.
  If this is true, the for_attempt argument will be ignored.
  """
  allComments: Boolean = false

  """
  What submission attempt the comments should be returned for. If not specified,
  it will return the comments for the current submission or submission history.
  """
  forAttempt: Int = null

  """
  Whether the current user is completing a peer review and should only see
  comments authored by themselves.
  """
  peerReview: Boolean = false
}

enum SubmissionCommentsSortOrderType {
  asc
  desc
}

"""
The connection type for Submission.
"""
type SubmissionConnection {
  """
  A list of edges.
  """
  edges: [SubmissionEdge]

  """
  A list of nodes.
  """
  nodes: [Submission]
  pageInfo: TotalCountPageInfo!
}

type SubmissionDraft implements LegacyIDInterface {
  """
  legacy canvas id
  """
  _id: ID!
  activeSubmissionType: DraftableSubmissionType
  attachments: [File!]
  body(rewriteUrls: Boolean): String
  externalTool: ExternalTool
  ltiLaunchUrl: URL
  mediaObject: MediaObject
  meetsAssignmentCriteria: Boolean!
  meetsBasicLtiLaunchCriteria: Boolean!
  meetsMediaRecordingCriteria: Boolean!
  meetsStudentAnnotationCriteria: Boolean!
  meetsTextEntryCriteria: Boolean!
  meetsUploadCriteria: Boolean!
  meetsUrlCriteria: Boolean!
  resourceLinkLookupUuid: String
  submissionAttempt: Int!
  url: URL
}

"""
An edge in a connection.
"""
type SubmissionEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: Submission
}

input SubmissionFilterInput {
  dueBetween: DateTimeRange
  gradedSince: DateTime
  includePeerReviewSubmissions: Boolean = false
  sectionIds: [ID!]
  states: [SubmissionState!] = [submitted, pending_review, graded]
  submittedSince: DateTime
  updatedSince: DateTime
}

enum SubmissionGradingStatus {
  excused
  graded
  needs_grading
  needs_review
}

type SubmissionHistory implements SubmissionInterface & Timestamped {
  anonymousId: ID
  assignedAssessments: [AssessmentRequest!]
  assignment: Assignment!
  assignmentId: ID!
  attachment: File
  attachments: [File!]
  attempt: Int!

  """
  Indicates whether an auto-grading result exists for the submission.
  """
  autoGradeResultPresent: Boolean!
  body: String
  cachedDueDate: DateTime
  commentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionCommentFilterInput = {}

    """
    Returns the first _n_ elements from the list.
    """
    first: Int
    includeDraftComments: Boolean = false

    """
    When true and include_draft_comments is true, draft comments from other teachers will be included.
    Only applies to users with grading permissions (teachers, TAs, etc).
    When false, only the current user's draft comments are included.
    Students never see draft comments from others regardless of this setting.
    """
    includeDraftsFromOthers: Boolean = false

    """
    When true, provisional comments that the current user has permission to see will be returned.
    The Moderator has permission to see all provisional comments.
    Provisional Graders can see each other's comments if "Graders can view each other's comments" is enabled.
    Otherwise, Provisional Graders can only see their own comments.
    Students cannot see provisional comments.
    """
    includeProvisionalComments: Boolean = false

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    sortOrder: SubmissionCommentsSortOrderType = null
  ): SubmissionCommentConnection!
  createdAt: DateTime
  customGradeStatus: String
  customGradeStatusId: ID

  """
  how many points are being deducted due to late policy
  """
  deductedPoints: Float

  """
  the submission grade *before* late policy deductions were applied
  """
  enteredGrade: String

  """
  the submission score *before* late policy deductions were applied
  """
  enteredScore: Float

  """
  excused assignments are ignored when calculating grades
  """
  excused: Boolean
  externalToolUrl: String
  extraAttempts: Int
  feedbackForCurrentAttempt: Boolean!
  grade: String
  gradeHidden: Boolean!

  """
  was the grade given on the current submission (resubmission)
  """
  gradeMatchesCurrentSubmission: Boolean
  gradedAnonymously: Boolean
  gradedAt: DateTime
  gradingStatus: SubmissionGradingStatus
  groupId: ID
  hasOriginalityReport: Boolean!
  hasPostableComments: Boolean!

  """
  Whether the current user has provided a provisional grade with a non-null score for this submission
  """
  hasProvisionalGradeByCurrentUser: Boolean!
  hasSubAssignmentSubmissions: Boolean
  hasUnreadRubricAssessment: Boolean!

  """
  hide unpublished grades
  """
  hideGradeFromStudent: Boolean
  lastCommentedByUserAt: DateTime
  late: Boolean
  latePolicyStatus: LatePolicyStatusType
  mediaObject: MediaObject
  missing: Boolean
  originalityData: JSON
  posted: Boolean!
  postedAt: DateTime

  """
  This field is currently under development and its return value is subject to change.
  """
  previewUrl: String
  proxySubmitter: String
  proxySubmitterId: ID
  redoRequest: Boolean
  resourceLinkLookupUuid: String

  """
  The canvas legacy id of the root submission this history belongs to
  """
  rootId: ID!
  rubricAssessmentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionRubricAssessmentFilterInput = {}

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): RubricAssessmentConnection!
  score: Float
  secondsLate: Float
  state: SubmissionState!
  status: String!
  statusTag: SubmissionStatusTagType!
  sticker: String
  subAssignmentSubmissions: [SubAssignmentSubmission!]
  submissionCommentDownloadUrl: String
  submissionDraft: SubmissionDraft
  submissionStatus: String
  submissionType: SubmissionType
  submittedAt: DateTime
  turnitinData: [TurnitinData!]
  unreadCommentCount: Int!
  updatedAt: DateTime
  url: URL
  user: User
  vericiteData: [VericiteData!]
  wordCount: Float
}

"""
The connection type for SubmissionHistory.
"""
type SubmissionHistoryConnection {
  """
  A list of edges.
  """
  edges: [SubmissionHistoryEdge]

  """
  A list of nodes.
  """
  nodes: [SubmissionHistory]

  """
  Information to aid in pagination.
  """
  pageInfo: PageInfo!
}

"""
An edge in a connection.
"""
type SubmissionHistoryEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: SubmissionHistory
}

input SubmissionHistoryFilterInput {
  """
  If the most current submission should be included in the submission
  history results. Defaults to true.
  """
  includeCurrentSubmission: Boolean = true
  states: [SubmissionState!] = [deleted, graded, pending_review, submitted, ungraded, unsubmitted]
}

"""
Specify a sort for the results
"""
input SubmissionHistoryOrder {
  direction: OrderDirection!
  field: SubmissionHistoryOrderField!
}

"""
The submission history field to sort by
"""
enum SubmissionHistoryOrderField {
  attempt
}

"""
Types for submission or submission history
"""
interface SubmissionInterface {
  anonymousId: ID
  assignedAssessments: [AssessmentRequest!]
  assignment: Assignment!
  assignmentId: ID!
  attachment: File
  attachments: [File!]
  attempt: Int!

  """
  Indicates whether an auto-grading result exists for the submission.
  """
  autoGradeResultPresent: Boolean!
  body: String
  cachedDueDate: DateTime
  commentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionCommentFilterInput = {}

    """
    Returns the first _n_ elements from the list.
    """
    first: Int
    includeDraftComments: Boolean = false

    """
    When true and include_draft_comments is true, draft comments from other teachers will be included.
    Only applies to users with grading permissions (teachers, TAs, etc).
    When false, only the current user's draft comments are included.
    Students never see draft comments from others regardless of this setting.
    """
    includeDraftsFromOthers: Boolean = false

    """
    When true, provisional comments that the current user has permission to see will be returned.
    The Moderator has permission to see all provisional comments.
    Provisional Graders can see each other's comments if "Graders can view each other's comments" is enabled.
    Otherwise, Provisional Graders can only see their own comments.
    Students cannot see provisional comments.
    """
    includeProvisionalComments: Boolean = false

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    sortOrder: SubmissionCommentsSortOrderType = null
  ): SubmissionCommentConnection!
  customGradeStatus: String
  customGradeStatusId: ID

  """
  how many points are being deducted due to late policy
  """
  deductedPoints: Float

  """
  the submission grade *before* late policy deductions were applied
  """
  enteredGrade: String

  """
  the submission score *before* late policy deductions were applied
  """
  enteredScore: Float

  """
  excused assignments are ignored when calculating grades
  """
  excused: Boolean
  externalToolUrl: String
  extraAttempts: Int
  feedbackForCurrentAttempt: Boolean!
  grade: String
  gradeHidden: Boolean!

  """
  was the grade given on the current submission (resubmission)
  """
  gradeMatchesCurrentSubmission: Boolean
  gradedAnonymously: Boolean
  gradedAt: DateTime
  gradingStatus: SubmissionGradingStatus
  groupId: ID
  hasOriginalityReport: Boolean!
  hasPostableComments: Boolean!

  """
  Whether the current user has provided a provisional grade with a non-null score for this submission
  """
  hasProvisionalGradeByCurrentUser: Boolean!
  hasSubAssignmentSubmissions: Boolean
  hasUnreadRubricAssessment: Boolean!

  """
  hide unpublished grades
  """
  hideGradeFromStudent: Boolean
  lastCommentedByUserAt: DateTime
  late: Boolean
  latePolicyStatus: LatePolicyStatusType
  mediaObject: MediaObject
  missing: Boolean
  originalityData: JSON
  posted: Boolean!
  postedAt: DateTime

  """
  This field is currently under development and its return value is subject to change.
  """
  previewUrl: String
  proxySubmitter: String
  proxySubmitterId: ID
  redoRequest: Boolean
  resourceLinkLookupUuid: String
  rubricAssessmentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: SubmissionRubricAssessmentFilterInput = {}

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): RubricAssessmentConnection!
  score: Float
  secondsLate: Float
  state: SubmissionState!
  status: String!
  statusTag: SubmissionStatusTagType!
  sticker: String
  subAssignmentSubmissions: [SubAssignmentSubmission!]
  submissionCommentDownloadUrl: String
  submissionDraft: SubmissionDraft
  submissionStatus: String
  submissionType: SubmissionType
  submittedAt: DateTime
  turnitinData: [TurnitinData!]
  unreadCommentCount: Int!
  url: URL
  user: User
  vericiteData: [VericiteData!]
  wordCount: Float
}

input SubmissionOrderCriteria {
  direction: OrderDirection
  field: SubmissionOrderField!
}

enum SubmissionOrderField {
  _id
  gradedAt
}

enum SubmissionPostingStatus {
  hideable
  postable
}

input SubmissionRubricAssessmentFilterInput {
  """
  it will return all rubric assessments for the current submission
  or submission history.
  """
  forAllAttempts: Boolean = null

  """
  What submission attempt the rubric assessment should be returned for. If not
  specified, it will return the rubric assessment for the current submission
  or submission history.
  """
  forAttempt: Int = null

  """
  When true, provisional rubric assessments that the current user has permission to see will be returned.
  The Moderator has permission to see all provisional rubric assessments.
  Provisional Graders only have permission to view their own provisional rubric assessments.
  Default behavior is to omit provisional assessments entirely.
  """
  includeProvisionalAssessments: Boolean = false
}

input SubmissionSearchFilterInput {
  """
  Return only submissions related to the given anonymous_id
  There is no character restriction on this field
  """
  anonymousId: ID

  """
  Filters submissions for deactivated and concluded users based on the calling user's
  'Show -> Inactive Enrollments' and 'Show -> Concluded Enrollments' settings in the Gradebook.
  When true, this filter takes precedence over the include_concluded and include_deactivated filters.
  """
  applyGradebookEnrollmentFilters: Boolean

  """
  Filters submissions for users in a specific group applied in the Gradebook.
  """
  applyGradebookGroupFilter: Boolean
  enrollmentTypes: [EnrollmentType!]

  """
  Limit results by grading status
  """
  gradingStatus: SubmissionGradingStatus

  """
  Include submissions for concluded students.
  """
  includeConcluded: Boolean

  """
  Include submissions for deactivated students.
  """
  includeDeactivated: Boolean
  includeUnsubmitted: Boolean

  """
  Limit results to submissions that are late
  """
  late: Boolean

  """
  Filter submissions by their posting status. Valid values: postable, hideable.
  Ignored if the current user cannot manage or view all grades for the assignment.
  """
  postingStatus: SubmissionPostingStatus

  """
  For group assignments, include submissions for group representatives only.
  Has no effect on non-group assignments or group assignments where students
  are being graded individually.
  """
  representativesOnly: Boolean

  """
  Limit results to submissions that scored below the specified value
  """
  scoredLessThan: Float

  """
  Limit results to submissions that scored above the specified value
  """
  scoredMoreThan: Float
  sectionIds: [ID!]
  states: [SubmissionState!] = [submitted, pending_review, graded]

  """
  Return only submissions related to the given user_id
  There is no character restriction on this field
  """
  userId: ID

  """
  Return only submissions related to group representative for the user_id
  There is no character restriction on this field
  """
  userRepresentativeId: ID

  """
  The partial name or full ID of the users to match and return in the
  results list. Must be at least 3 characters.
  Queries by administrative users will search on SIS ID, login ID, name, or email
  address; non-administrative queries will only be compared against name.
  """
  userSearch: String
}

"""
Specify a sort for the results. The 'direction' argument is ignored for 'random'
sorts. For sorts of boolean fields, 'true' comes before 'false' for ascending sorts.
"""
input SubmissionSearchOrder {
  direction: OrderDirection
  field: SubmissionSearchOrderField!
}

"""
The user or submission field to sort by
"""
enum SubmissionSearchOrderField {
  group_name
  needs_grading
  random
  score
  submission_status
  submitted_at
  test_student
  username
  username_first_last
}

enum SubmissionState {
  deleted
  graded
  pending_review
  submitted
  ungraded
  unsubmitted
}

type SubmissionStatistics {
  missingSubmissionsCount: Int!
  submissionsDueCount(endDate: ISO8601DateTime, startDate: ISO8601DateTime): Int!
  submissionsDueThisWeekCount: Int!
  submissionsOverdueCount(endDate: ISO8601DateTime, startDate: ISO8601DateTime): Int!
  submissionsSubmittedCount(endDate: ISO8601DateTime, startDate: ISO8601DateTime): Int!
  submittedAndGradedCount: Int!
  submittedNotGradedCount: Int!
  submittedSubmissionsCount: Int!
}

enum SubmissionStatusTagType {
  custom
  excused
  extended
  late
  missing
  none
}

"""
Types of submissions an assignment accepts
"""
enum SubmissionType {
  attendance
  basic_lti_launch
  discussion_topic
  external_tool
  media_recording
  none
  not_graded
  on_paper
  online_quiz
  online_text_entry
  online_upload
  online_url
  peer_review
  student_annotation
  wiki_page
}

"""
Autogenerated input type of SubscribeToDiscussionTopic
"""
input SubscribeToDiscussionTopicInput {
  discussionTopicId: ID!
  subscribed: Boolean!
}

"""
Autogenerated return type of SubscribeToDiscussionTopic.
"""
type SubscribeToDiscussionTopicPayload {
  discussionTopic: Discussion!
  errors: [ValidationError!]
}

"""
statistics based on timeliness of student submissions
"""
type TardinessBreakdown {
  late: Float
  missing: Float
  onTime: Float
  total: Int
}

type Term implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!

  """
  courses for this term
  """
  coursesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): CourseConnection
  endAt: DateTime
  id: ID!
  name: String
  sisId: String
  sisTermId: ID
  startAt: DateTime
}

"""
Contains timestamp metadata
"""
interface Timestamped {
  createdAt: DateTime
  updatedAt: DateTime
}

"""
Information about pagination in a connection.
"""
type TotalCountPageInfo {
  """
  When paginating forwards, the cursor to continue.
  """
  endCursor: String

  """
  When paginating forwards, are there more items?
  """
  hasNextPage: Boolean!

  """
  When paginating backwards, are there more items?
  """
  hasPreviousPage: Boolean!

  """
  When paginating backwards, the cursor to continue.
  """
  startCursor: String

  """
  Total number of items in the connection, ignoring pagination.
  """
  totalCount: Int
}

union TurnitinContext = File | Submission

type TurnitinData {
  assetString: String!
  reportUrl: String
  score: Float
  state: String
  status: String
  target: TurnitinContext!
}

scalar URL

"""
Autogenerated input type of UpdateAccountDomainLookup
"""
input UpdateAccountDomainLookupInput {
  accountDomainId: ID
  accountDomainLookupId: ID!
  authenticationProvider: String
  name: String
}

"""
Autogenerated return type of UpdateAccountDomainLookup.
"""
type UpdateAccountDomainLookupPayload {
  accountDomainLookup: AccountDomainLookup
  errors: [ValidationError!]
}

"""
Autogenerated input type of UpdateAllocationRule
"""
input UpdateAllocationRuleInput {
  appliesToAssessor: Boolean = true
  assesseeIds: [ID!]!
  assessorIds: [ID!]!
  mustReview: Boolean = true
  reciprocal: Boolean = false
  reviewPermitted: Boolean = true
  ruleId: ID!
}

"""
Autogenerated return type of UpdateAllocationRule.
"""
type UpdateAllocationRulePayload {
  allocationErrors: [AllocationError!]
  allocationRules: [AllocationRule!]
  errors: [ValidationError!]
}

"""
Autogenerated input type of UpdateAssignment
"""
input UpdateAssignmentInput {
  allowedAttempts: Int
  allowedExtensions: [String!]

  """
  requires anonymous_marking course feature to be set to true
  """
  anonymousGrading: Boolean
  anonymousInstructorAnnotations: Boolean
  assignmentGroupId: ID
  assignmentOverrides: [AssignmentOverrideCreateOrUpdate!]
  description: String
  dueAt: DateTime

  """
  if true, this assignment is a parent assignment for checkpoints. cannot set points_possible, due_at, lock_at, or unlock_at
  """
  forCheckpoints: Boolean
  gradeGroupStudentsIndividually: Boolean
  gradingStandardId: ID
  gradingType: GradingType
  groupCategoryId: ID
  groupSetId: ID
  id: ID!
  lockAt: DateTime
  moderatedGrading: AssignmentModeratedGradingUpdate
  moduleIds: [ID!]
  name: String
  omitFromFinalGrade: Boolean
  onlyVisibleToOverrides: Boolean
  peerReviews: AssignmentPeerReviewsUpdate
  pointsPossible: Float
  position: Int
  postToSis: Boolean
  state: AssignmentState
  submissionTypes: [SubmissionType!]
  suppressAssignment: Boolean
  unlockAt: DateTime
}

"""
Autogenerated return type of UpdateAssignment.
"""
type UpdateAssignmentPayload {
  assignment: Assignment
  errors: [ValidationError!]
}

"""
Autogenerated input type of UpdateCommentBankItem
"""
input UpdateCommentBankItemInput {
  comment: String!
  id: ID!
}

"""
Autogenerated return type of UpdateCommentBankItem.
"""
type UpdateCommentBankItemPayload {
  commentBankItem: CommentBankItem
  errors: [ValidationError!]
}

"""
Autogenerated input type of UpdateConversationParticipants
"""
input UpdateConversationParticipantsInput {
  conversationIds: [ID!]!
  starred: Boolean
  subscribed: Boolean
  workflowState: String
}

"""
Autogenerated return type of UpdateConversationParticipants.
"""
type UpdateConversationParticipantsPayload {
  conversationParticipants: [ConversationParticipant!]
  errors: [ValidationError!]
}

"""
Autogenerated input type of UpdateDiscussionEntriesReadState
"""
input UpdateDiscussionEntriesReadStateInput {
  discussionEntryIds: [ID!]!
  read: Boolean!
}

"""
Autogenerated return type of UpdateDiscussionEntriesReadState.
"""
type UpdateDiscussionEntriesReadStatePayload {
  discussionEntries: [DiscussionEntry!]
  errors: [ValidationError!]
}

"""
Autogenerated input type of UpdateDiscussionEntry
"""
input UpdateDiscussionEntryInput {
  discussionEntryId: ID!
  fileId: ID
  message: String
  pinType: DiscussionEntryPinningType
  quotedEntryId: ID
  removeAttachment: Boolean
}

"""
Autogenerated input type of UpdateDiscussionEntryParticipant
"""
input UpdateDiscussionEntryParticipantInput {
  discussionEntryId: ID!
  forcedReadState: Boolean
  rating: RatingInputType
  read: Boolean
  reportType: ReportType
}

"""
Autogenerated return type of UpdateDiscussionEntryParticipant.
"""
type UpdateDiscussionEntryParticipantPayload {
  discussionEntry: DiscussionEntry!
  errors: [ValidationError!]
}

"""
Autogenerated return type of UpdateDiscussionEntry.
"""
type UpdateDiscussionEntryPayload {
  discussionEntry: DiscussionEntry
  errors: [ValidationError!]
}

"""
Autogenerated input type of UpdateDiscussionReadState
"""
input UpdateDiscussionReadStateInput {
  discussionTopicId: ID!
  read: Boolean!
}

"""
Autogenerated return type of UpdateDiscussionReadState.
"""
type UpdateDiscussionReadStatePayload {
  discussionTopic: Discussion!
  errors: [ValidationError!]
}

"""
Autogenerated input type of UpdateDiscussionThreadReadState
"""
input UpdateDiscussionThreadReadStateInput {
  discussionEntryId: ID!
  read: Boolean!
}

"""
Autogenerated return type of UpdateDiscussionThreadReadState.
"""
type UpdateDiscussionThreadReadStatePayload {
  discussionEntry: DiscussionEntry!
  errors: [ValidationError!]
}

"""
Autogenerated input type of UpdateDiscussionTopic
"""
input UpdateDiscussionTopicInput {
  allowRating: Boolean
  anonymousState: DiscussionTopicAnonymousStateType
  assignment: AssignmentUpdate
  checkpoints: [DiscussionCheckpoints!]
  delayedPostAt: DateTime
  discussionTopicId: ID!
  discussionType: DiscussionTopicDiscussionType
  expanded: Boolean
  expandedLocked: Boolean
  fileId: ID
  groupCategoryId: ID
  lockAt: DateTime
  locked: Boolean
  message: String
  notifyUsers: Boolean
  onlyGradersCanRate: Boolean
  onlyVisibleToOverrides: Boolean
  podcastEnabled: Boolean
  podcastHasStudentPosts: Boolean
  published: Boolean
  removeAttachment: Boolean
  requireInitialPost: Boolean
  setCheckpoints: Boolean
  sortOrder: DiscussionSortOrderType
  sortOrderLocked: Boolean
  specificSections: String
  title: String
  todoDate: DateTime
  ungradedDiscussionOverrides: [AssignmentOverrideCreateOrUpdate!]
}

"""
Autogenerated input type of UpdateDiscussionTopicParticipant
"""
input UpdateDiscussionTopicParticipantInput {
  discussionTopicId: ID!
  expanded: Boolean
  hasUnreadPinnedEntry: Boolean
  preferredLanguage: PreferredLanguageType
  showPinnedEntries: Boolean
  sortOrder: DiscussionSortOrderType
  summaryEnabled: Boolean
}

"""
Autogenerated return type of UpdateDiscussionTopicParticipant.
"""
type UpdateDiscussionTopicParticipantPayload {
  discussionTopic: Discussion!
  errors: [ValidationError!]
}

"""
Autogenerated return type of UpdateDiscussionTopic.
"""
type UpdateDiscussionTopicPayload {
  discussionTopic: Discussion
  errors: [ValidationError!]
}

"""
Autogenerated input type of UpdateGradebookGroupFilter
"""
input UpdateGradebookGroupFilterInput {
  anonymousId: ID
  assignmentId: ID!
  courseId: ID!
}

"""
Autogenerated return type of UpdateGradebookGroupFilter.
"""
type UpdateGradebookGroupFilterPayload {
  errors: [ValidationError!]
  groupName: String
  reasonForChange: String
}

"""
Autogenerated input type of UpdateInternalSetting
"""
input UpdateInternalSettingInput {
  internalSettingId: ID!
  value: String!
}

"""
Autogenerated return type of UpdateInternalSetting.
"""
type UpdateInternalSettingPayload {
  errors: [ValidationError!]
  internalSetting: InternalSetting!
}

"""
Autogenerated input type of UpdateLearnerDashboardTabSelection
"""
input UpdateLearnerDashboardTabSelectionInput {
  tab: LearnerDashboardTabType!
}

"""
Autogenerated return type of UpdateLearnerDashboardTabSelection.
"""
type UpdateLearnerDashboardTabSelectionPayload {
  errors: [ValidationError!]
  tab: LearnerDashboardTabType!
}

"""
Autogenerated input type of UpdateLearningOutcomeGroup
"""
input UpdateLearningOutcomeGroupInput {
  description: String
  id: ID!
  parentOutcomeGroupId: ID
  title: String
  vendorGuid: String
}

"""
Autogenerated return type of UpdateLearningOutcomeGroup.
"""
type UpdateLearningOutcomeGroupPayload {
  errors: [ValidationError!]
  learningOutcomeGroup: LearningOutcomeGroup
}

"""
Autogenerated input type of UpdateLearningOutcome
"""
input UpdateLearningOutcomeInput {
  calculationInt: Int
  calculationMethod: String
  description: String
  displayName: String
  id: ID!
  masteryPoints: Float
  ratings: [ProficiencyRatingInput!]
  title: String!
  vendorGuid: String
}

"""
Autogenerated return type of UpdateLearningOutcome.
"""
type UpdateLearningOutcomePayload {
  errors: [ValidationError!]
  learningOutcome: LearningOutcome
}

"""
Autogenerated input type of UpdateMyInboxSettings
"""
input UpdateMyInboxSettingsInput {
  outOfOfficeFirstDate: String
  outOfOfficeLastDate: String
  outOfOfficeMessage: String
  outOfOfficeSubject: String
  signature: String
  useOutOfOffice: Boolean!
  useSignature: Boolean!
}

"""
Autogenerated return type of UpdateMyInboxSettings.
"""
type UpdateMyInboxSettingsPayload {
  errors: [ValidationError!]
  myInboxSettings: InboxSettings
}

"""
Autogenerated input type of UpdateNotificationPreferences
"""
input UpdateNotificationPreferencesInput {
  accountId: ID
  communicationChannelId: ID
  contextType: NotificationPreferencesContextType!
  courseId: ID
  enabled: Boolean
  frequency: NotificationFrequencyType
  hasReadPrivacyNotice: Boolean
  isPolicyOverride: Boolean
  notificationCategory: NotificationCategoryType
  sendObservedNamesInNotifications: Boolean
  sendScoresInEmails: Boolean
}

"""
Autogenerated return type of UpdateNotificationPreferences.
"""
type UpdateNotificationPreferencesPayload {
  errors: [ValidationError!]
  user: User
}

"""
Autogenerated input type of UpdateOutcomeCalculationMethod
"""
input UpdateOutcomeCalculationMethodInput {
  calculationInt: Int
  calculationMethod: String
  id: ID!
}

"""
Autogenerated return type of UpdateOutcomeCalculationMethod.
"""
type UpdateOutcomeCalculationMethodPayload {
  errors: [ValidationError!]
  outcomeCalculationMethod: OutcomeCalculationMethod
}

"""
Autogenerated input type of UpdateOutcomeProficiency
"""
input UpdateOutcomeProficiencyInput {
  id: ID!
  proficiencyRatings: [OutcomeProficiencyRatingCreate!]
}

"""
Autogenerated return type of UpdateOutcomeProficiency.
"""
type UpdateOutcomeProficiencyPayload {
  errors: [ValidationError!]
  outcomeProficiency: OutcomeProficiency
}

"""
Autogenerated input type of UpdateRubricArchivedState
"""
input UpdateRubricArchivedStateInput {
  archived: Boolean!
  id: ID!
}

"""
Autogenerated return type of UpdateRubricArchivedState.
"""
type UpdateRubricArchivedStatePayload {
  errors: [ValidationError!]
  rubric: Rubric
}

"""
Autogenerated input type of UpdateRubricAssessmentReadState
"""
input UpdateRubricAssessmentReadStateInput {
  submissionIds: [ID!]!
}

"""
Autogenerated return type of UpdateRubricAssessmentReadState.
"""
type UpdateRubricAssessmentReadStatePayload {
  errors: [ValidationError!]
  submissions: [Submission!]
}

"""
Autogenerated input type of UpdateSpeedGraderSettings
"""
input UpdateSpeedGraderSettingsInput {
  gradeByQuestion: Boolean!
}

"""
Autogenerated return type of UpdateSpeedGraderSettings.
"""
type UpdateSpeedGraderSettingsPayload {
  errors: [ValidationError!]
  speedGraderSettings: SpeedGraderSettings!
}

"""
Autogenerated input type of UpdateSplitScreenViewDeeplyNestedAlert
"""
input UpdateSplitScreenViewDeeplyNestedAlertInput {
  splitScreenViewDeeplyNestedAlert: Boolean!
}

"""
Autogenerated return type of UpdateSplitScreenViewDeeplyNestedAlert.
"""
type UpdateSplitScreenViewDeeplyNestedAlertPayload {
  errors: [ValidationError!]
  user: User!
}

"""
Autogenerated input type of UpdateSubmissionSticker
"""
input UpdateSubmissionStickerInput {
  anonymousId: ID!
  assignmentId: ID!
  sticker: Sticker
}

"""
Autogenerated return type of UpdateSubmissionSticker.
"""
type UpdateSubmissionStickerPayload {
  errors: [ValidationError!]
  submission: Submission!
}

"""
Autogenerated input type of UpdateSubmissionStudentEnteredScore
"""
input UpdateSubmissionStudentEnteredScoreInput {
  enteredScore: Float!
  submissionId: ID!
}

"""
Autogenerated return type of UpdateSubmissionStudentEnteredScore.
"""
type UpdateSubmissionStudentEnteredScorePayload {
  errors: [ValidationError!]
  submission: Submission
}

"""
Autogenerated input type of UpdateSubmissionsGrade
"""
input UpdateSubmissionsGradeInput {
  score: Int!
  submissionId: ID!
}

"""
Autogenerated return type of UpdateSubmissionsGrade.
"""
type UpdateSubmissionsGradePayload {
  errors: [ValidationError!]
  parentAssignmentSubmission: Submission
  submission: Submission
}

"""
Autogenerated input type of UpdateSubmissionsGradeStatus
"""
input UpdateSubmissionsGradeStatusInput {
  checkpointTag: String
  customGradeStatusId: ID
  latePolicyStatus: String
  submissionId: ID!
}

"""
Autogenerated return type of UpdateSubmissionsGradeStatus.
"""
type UpdateSubmissionsGradeStatusPayload {
  errors: [ValidationError!]
  submission: Submission
}

"""
Autogenerated input type of UpdateSubmissionsReadState
"""
input UpdateSubmissionsReadStateInput {
  read: Boolean!
  submissionIds: [ID!]!
}

"""
Autogenerated return type of UpdateSubmissionsReadState.
"""
type UpdateSubmissionsReadStatePayload {
  errors: [ValidationError!]
  submissions: [Submission!]
}

"""
Autogenerated input type of UpdateUserDiscussionsSplitscreenView
"""
input UpdateUserDiscussionsSplitscreenViewInput {
  discussionsSplitscreenView: Boolean!
}

"""
Autogenerated return type of UpdateUserDiscussionsSplitscreenView.
"""
type UpdateUserDiscussionsSplitscreenViewPayload {
  errors: [ValidationError!]
  user: User!
}

"""
Autogenerated input type of UpdateWidgetDashboardConfig
"""
input UpdateWidgetDashboardConfigInput {
  filters: JSON
  widgetId: String!
}

"""
Autogenerated return type of UpdateWidgetDashboardConfig.
"""
type UpdateWidgetDashboardConfigPayload {
  errors: [ValidationError!]
  filters: JSON
  widgetId: String!
}

"""
Autogenerated input type of UpdateWidgetDashboardLayout
"""
input UpdateWidgetDashboardLayoutInput {
  layout: String!
}

"""
Autogenerated return type of UpdateWidgetDashboardLayout.
"""
type UpdateWidgetDashboardLayoutPayload {
  errors: [ValidationError!]
  layout: String
}

"""
Autogenerated input type of UpsertCustomGradeStatus
"""
input UpsertCustomGradeStatusInput {
  color: String!
  id: ID
  name: String!
}

"""
Autogenerated return type of UpsertCustomGradeStatus.
"""
type UpsertCustomGradeStatusPayload {
  customGradeStatus: CustomGradeStatus
  errors: [ValidationError!]
}

"""
Autogenerated input type of UpsertStandardGradeStatus
"""
input UpsertStandardGradeStatusInput {
  color: String!
  id: ID
  name: String!
}

"""
Autogenerated return type of UpsertStandardGradeStatus.
"""
type UpsertStandardGradeStatusPayload {
  errors: [ValidationError!]
  standardGradeStatus: StandardGradeStatus
}

type UsageRights implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!
  id: ID!
  legalCopyright: String
  license: String
  useJustification: String
}

type User implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  activityStream(onlyActiveCourses: Boolean): ActivityStream
  avatarUrl: URL
  commentBankItemsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String
    assignmentId: ID

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    courseId: ID

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int

    """
    Only include comments that match the query string.
    """
    query: String
  ): CommentBankItemConnection
  conversationsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: [String!]

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    scope: String
    showHorizonConversations: Boolean
  ): ConversationParticipantConnection

  """
  Returns null if either of these conditions are met:
  * the course is not module based
  * no module in it has completion requirements
  * the queried user is not a student in the course
  * insufficient permissions for the request
  """
  courseProgression: CourseProgression
  courseRoles(
    """
    Only return default/built_in roles
    """
    builtInOnly: Boolean
    courseId: String

    """
    Return only requested base role types
    """
    roleTypes: [String!]
  ): [String!]

  """
  All actionable submissions for the current user across enrolled courses, for course work widget
  """
  courseWorkSubmissionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    courseFilter: String

    """
    End date for due date range filter
    """
    endDate: ISO8601DateTime

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Include assignments with no due date
    """
    includeNoDueDate: Boolean

    """
    Include overdue assignments
    """
    includeOverdue: Boolean

    """
    Returns the last _n_ elements from the list.
    """
    last: Int

    """
    ID of the observed user
    """
    observedUserId: ID

    """
    Show only submitted assignments
    """
    onlySubmitted: Boolean

    """
    Field to order results by
    """
    orderBy: CourseWorkSubmissionsOrderField

    """
    Start date for due date range filter
    """
    startDate: ISO8601DateTime
  ): SubmissionConnection
  createdAt: DateTime
  differentiationTagsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    courseId: ID!

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): GroupMembershipConnection

  """
  All discussion topic participants for the user, optionally filtered by announcement status
  """
  discussionParticipantsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: DiscussionParticipantFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int

    """
    ID of the observed user
    """
    observedUserId: ID
  ): DiscussionParticipantConnection
  discussionsSplitscreenView: Boolean!
  email: String
  enrollments(
    """
    only return enrollments for this course
    """
    courseId: ID

    """
    Whether or not to restrict results to `active` enrollments in `available` courses
    """
    currentOnly: Boolean

    """
    Whether or not to exclude `completed` enrollments
    """
    excludeConcluded: Boolean

    """
    Whether or not to include or exclude Canvas Career courses
    """
    horizonCourses: Boolean

    """
    The fields to order the results by
    """
    orderBy: [String!]

    """
    The sort field and direction for the results. Secondary sort is by section name
    """
    sort: EnrollmentsSortInputType
  ): [Enrollment!]!
  enrollmentsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    only return enrollments for this course
    """
    courseId: ID

    """
    only return enrollments for these courses
    """
    courseIds: [ID!]

    """
    Whether or not to restrict results to `active` enrollments in `available` courses
    """
    currentOnly: Boolean

    """
    Filter by enrollment types (e.g., TeacherEnrollment, TaEnrollment)
    """
    enrollmentTypes: [EnrollmentType!]

    """
    Whether or not to exclude `completed` enrollments
    """
    excludeConcluded: Boolean

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Whether or not to include or exclude Canvas Career courses
    """
    horizonCourses: Boolean

    """
    Returns the last _n_ elements from the list.
    """
    last: Int

    """
    The fields to order the results by
    """
    orderBy: [String!]

    """
    The sort field and direction for the results. Secondary sort is by section name
    """
    sort: EnrollmentsSortInputType
  ): EnrollmentConnection
  favoriteCoursesConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    dashboardFilter: DashboardObserveeFilter

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): CourseConnection

  """
  Favorite groups for the user.
  """
  favoriteGroupsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String

    """
    Returns the first _n_ elements from the list.
    """
    first: Int
    includeNonCollaborative: Boolean = false

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): GroupConnection
  firstName: String
  groupMemberships(filter: UserGroupMembershipsFilterInput): [GroupMembership!]!

  """
  **NOTE**: this only returns groups for the currently logged-in user.
  """
  groups: [Group!]
  htmlUrl(courseId: ID): URL
  id: ID!
  inboxLabels: [String!]
  instructureIdentityGlobalUserId: String
  instructureIdentityOrganizationUserId: String
  integrationId: String
  lastName: String
  loginId: String
  name: String
  notificationPreferences: NotificationPreferences
  notificationPreferencesEnabled(accountId: ID, contextType: NotificationPreferencesContextType!, courseId: ID): Boolean!

  """
  Peer review status for assignments where peer reviews are enabled
  """
  peerReviewStatus: PeerReviewStatus
  pronouns: String
  recipients(context: String, search: String): Recipients
  recipientsObservers(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    contextCode: String!

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
    recipientIds: [String!]!
  ): MessageableUserConnection

  """
  A short name the user has selected, for use in conversations or other less formal places through the site.
  """
  shortName: String
  sisId: String

  """
  The name of the user that is should be used for sorting groups of users, such as in the gradebook.
  """
  sortableName: String
  summaryAnalytics(
    """
    returns summary analytics for this course
    """
    courseId: ID!
  ): StudentSummaryAnalytics
  totalRecipients(context: String): Int!
  updatedAt: DateTime
  uuid: String

  """
  All submissions with comments that the current_user is able to view
  """
  viewableSubmissionsConnection(
    """
    Returns the elements in the list that come after the specified cursor.
    """
    after: String

    """
    Returns the elements in the list that come before the specified cursor.
    """
    before: String
    filter: [String!]

    """
    Returns the first _n_ elements from the list.
    """
    first: Int

    """
    Returns the last _n_ elements from the list.
    """
    last: Int
  ): SubmissionConnection
  widgetDashboardConfig: String
}

"""
The connection type for User.
"""
type UserConnection {
  """
  A list of edges.
  """
  edges: [UserEdge]

  """
  A list of nodes.
  """
  nodes: [User]
  pageInfo: TotalCountPageInfo!
}

"""
An edge in a connection.
"""
type UserEdge {
  """
  A cursor for use in pagination.
  """
  cursor: String!

  """
  The item at the end of the edge.
  """
  node: User
}

input UserGroupMembershipsFilterInput {
  """
  Only return group memberships in the specified group course ids
  """
  groupCourseId: [ID!]

  """
  Only return group memberships with the specified group workflow states
  """
  groupState: [GroupState!]

  """
  Only return group memberships with the specified workflow states
  """
  state: [GroupMembershipState!]
}

type ValidationError {
  attribute: String
  message: String!
}

union VericiteContext = File | Submission

type VericiteData {
  assetString: String!
  reportUrl: String
  score: Float
  state: String
  status: String
  target: VericiteContext!
}
