type Account implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!
  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!
  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
}

"""
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!
}

"""
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
}

"""
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!]
}

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
  updatedAt: DateTime
  user: User!
  workflowState: String!
}

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

interface AssetString {
  assetString: String
}

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

  """
  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
  assessmentRequestsForCurrentUser: [AssessmentRequest!]
  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
  canDuplicate: Boolean
  canUnpublish: Boolean
  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

  """
  If true, the assignment has at least one graded submission
  """
  gradedSubmissionsExist: Boolean
  gradesPublished: Boolean
  gradingPeriodId: String
  gradingStandard: GradingStandard
  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
  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

  """
  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
  moderatedGrading: ModeratedGrading
  moderatedGradingEnabled: Boolean
  modules: [Module!]
  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
  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
  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
  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
  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!
  timeZoneEdited: String
  totalGradedSubmissions: Int
  totalSubmissions: Int

  """
  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!
}

"""
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!]
  assignmentGroupId: ID
  assignmentOverrides: [AssignmentOverrideCreateOrUpdate!]
  courseId: ID!
  dueAt: DateTime
  forCheckpoints: Boolean
  gradingStandardId: ID
  gradingType: GradingType
  groupCategoryId: ID
  importantDates: Boolean
  intraReviews: Boolean
  lockAt: DateTime
  name: String!
  onlyVisibleToOverrides: Boolean
  peerReviews: AssignmentPeerReviewsUpdate
  pointsPossible: Float
  postToSis: 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 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
  assignment: Assignment
  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 {
  anonymousReviews: Boolean
  automaticReviews: Boolean
  count: Int
  dueAt: DateTime
  enabled: Boolean
  intraReviews: 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!
}

input AssignmentUpdate {
  abGuid: [String!]
  assignmentGroupId: ID
  assignmentOverrides: [AssignmentOverrideCreateOrUpdate!]
  dueAt: DateTime
  forCheckpoints: Boolean
  gradingStandardId: ID
  gradingType: GradingType
  groupCategoryId: ID
  importantDates: Boolean
  intraReviews: Boolean
  lockAt: DateTime
  onlyVisibleToOverrides: Boolean
  peerReviews: AssignmentPeerReviewsUpdate
  pointsPossible: Float
  postToSis: Boolean
  setAssignment: 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 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
}

"""
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
}

type Checkpoint {
  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!
  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]

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

"""
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 & LegacyIDInterface & Node & 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
  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
  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
  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

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

  """
  Returns a URL for the course image (this is the image used on dashboard
  course cards)
  """
  imageUrl: URL
  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

    """
    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 permission information for the current user in this course
  """
  permissions: CoursePermissions

  """
  A course-specific post policy
  """
  postPolicy: PostPolicy
  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
  sisId: String
  state: CourseWorkflowState!

  """
  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

    """
    Only include users with the given ids.

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

"""
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
}

input CourseUsersFilter {
  """
  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!]

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

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

"""
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
  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
  state: AssignmentState
  submissionTypes: [SubmissionType!]
  unlockAt: DateTime
}

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

"""
Autogenerated input type of CreateCommentBankItem
"""
input CreateCommentBankItemInput {
  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 CreateDiscussionEntryDraft
"""
input CreateDiscussionEntryDraftInput {
  discussionEntryId: ID
  discussionTopicId: ID!
  fileId: ID
  message: String!
  parentId: ID
}

"""
Autogenerated return type of CreateDiscussionEntryDraft.
"""
type CreateDiscussionEntryDraftPayload {
  discussionEntryDraft: DiscussionEntryDraft
  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
  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
  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 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!
  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
}

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

"""
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 LegacyIDInterface & ModuleItemInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  allowRating: Boolean
  anonymousAuthor: AnonymousUser
  anonymousState: DiscussionTopicAnonymousStateType
  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!
  canGroup: Boolean
  canReplyAnonymously: Boolean!
  canUnpublish: Boolean!
  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
    sortOrder: DiscussionSortOrderType
    unreadBefore: String
    userSearchId: String
  ): DiscussionEntryConnection
  discussionEntryDraftsConnection(
    """
    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
  ): DiscussionEntryDraftConnection
  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
  groupSet: GroupSet
  id: ID!
  initialPostRequiredForCurrentUser: Boolean!
  isAnnouncement: Boolean!
  isAnonymousAuthor: 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
  permissions: DiscussionPermissions
  podcastEnabled: Boolean
  podcastHasStudentPosts: Boolean
  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
  subscribed: Boolean!
  subscriptionDisabledForUser: Boolean
  title: String
  todoDate: ISO8601DateTime
  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
}

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
  previewMessage: String
  quotedEntry: DiscussionEntry
  ratingCount: Int
  ratingSum: Int
  reportTypeCounts: DiscussionEntryReportTypeCounts
  rootEntry: DiscussionEntry
  rootEntryId: ID
  rootEntryPageNumber(perPage: Int, sortOrder: DiscussionSortOrderType): 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!
}

type DiscussionEntryDraft implements LegacyIDInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  attachment: File
  createdAt: DateTime
  discussionEntryId: ID
  discussionTopicId: ID!
  id: ID!
  message: String!
  parentId: ID
  rootEntryId: ID
  updatedAt: DateTime
}

"""
The connection type for DiscussionEntryDraft.
"""
type DiscussionEntryDraftConnection {
  """
  A list of edges.
  """
  edges: [DiscussionEntryDraftEdge]

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

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

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

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

"""
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
}

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!
  updatedAt: DateTime
  version: Int!
}

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

type DiscussionPermissions {
  addRubric: Boolean
  attach: Boolean
  closeForComments: Boolean
  copyAndSendTo: Boolean
  create: Boolean
  delete: Boolean
  duplicate: Boolean
  manageAssignTo: Boolean
  manageContent: 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
}

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
}

"""
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 Enrollment implements AssetString & LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  assetString: String
  associatedUser: User
  canBeRemoved: Boolean
  concluded: Boolean
  course: Course
  courseSectionId: ID
  createdAt: DateTime
  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!
  lastActivityAt: DateTime
  limitPrivilegesToCourseSection: Boolean
  section: Section
  sisImportId: ID
  sisRole: String
  state: EnrollmentWorkflowState!
  totalActivityTime: Int
  type: EnrollmentType!
  updatedAt: DateTime
  user: User
}

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

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

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

"""
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
}

enum EnrollmentType {
  DesignerEnrollment
  ObserverEnrollment
  StudentEnrollment
  StudentViewEnrollment
  TaEnrollment
  TeacherEnrollment
}

enum EnrollmentWorkflowState {
  active
  completed
  creation_pending
  deleted
  inactive
  invited
  rejected
}

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

type ExternalTool implements LegacyIDInterface & ModuleItemInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  createdAt: DateTime
  description: String
  modules: [Module!]
  name: String
  settings: ExternalToolSettings
  state: ExternalToolState
  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
  state: ExternalToolState = null
}

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

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
}

type ExternalUrl implements LegacyIDInterface & ModuleItemInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  createdAt: DateTime
  modules: [Module!]
  title: String
  updatedAt: DateTime
  url: String
}

type File implements LegacyIDInterface & ModuleItemInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  contentType: String
  createdAt: DateTime
  displayName: String
  id: ID!
  mimeClass: String
  modules: [Module!]
  size: String
  submissionPreviewUrl(submissionId: ID): URL
  thumbnailUrl: URL
  updatedAt: DateTime
  url: URL
  usageRights: UsageRights
  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
}

enum GradeState {
  active
  deleted
}

"""
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

  """
  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!
}

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
  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
  sisId: String
  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
  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
  selfSignup: SelfSignupPolicy!
  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!
}

"""
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
}

"""
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")

"""
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 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
}

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

"""
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

  """
  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!
  createdAt: DateTime
  id: ID!
  moduleItems: [ModuleItem!]
  name: String
  position: Int
  unlockAt: DateTime
  updatedAt: DateTime
}

"""
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!
  createdAt: DateTime
  modules: [Module!]
  updatedAt: DateTime
  url: String
}

type ModuleItem implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  content: ModuleItemInterface
  createdAt: DateTime
  id: ID!
  module: Module
  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
  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
  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
}

"""
An item that can be in context modules
"""
interface ModuleItemInterface {
  modules: [Module!]
}

type ModuleProgression {
  """
  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!
  module: Module!
}

"""
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
}

"""
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 {
  addConversationMessage(
    """
    Parameters for AddConversationMessage
    """
    input: AddConversationMessageInput!
  ): AddConversationMessagePayload
  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
  createDiscussionEntryDraft(
    """
    Parameters for CreateDiscussionEntryDraft
    """
    input: CreateDiscussionEntryDraftInput!
  ): CreateDiscussionEntryDraftPayload
  createDiscussionTopic(
    """
    Parameters for CreateDiscussionTopic
    """
    input: CreateDiscussionTopicInput!
  ): CreateDiscussionTopicPayload
  createGroupInSet(
    """
    Parameters for CreateGroupInSet
    """
    input: CreateGroupInSetInput!
  ): CreateGroupInSetPayload
  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
  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
  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

  """
  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
  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
  updateDiscussionExpanded(
    """
    Parameters for UpdateDiscussionExpanded
    """
    input: UpdateDiscussionExpandedInput!
  ): UpdateDiscussionExpandedPayload
  updateDiscussionReadState(
    """
    Parameters for UpdateDiscussionReadState
    """
    input: UpdateDiscussionReadStateInput!
  ): UpdateDiscussionReadStatePayload
  updateDiscussionSortOrder(
    """
    Parameters for UpdateDiscussionSortOrder
    """
    input: UpdateDiscussionSortOrderInput!
  ): UpdateDiscussionSortOrderPayload
  updateDiscussionThreadReadState(
    """
    Parameters for UpdateDiscussionThreadReadState
    """
    input: UpdateDiscussionThreadReadStateInput!
  ): UpdateDiscussionThreadReadStatePayload
  updateDiscussionTopic(
    """
    Parameters for UpdateDiscussionTopic
    """
    input: UpdateDiscussionTopicInput!
  ): UpdateDiscussionTopicPayload
  updateInternalSetting(
    """
    Parameters for UpdateInternalSetting
    """
    input: UpdateInternalSettingInput!
  ): UpdateInternalSettingPayload
  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
  updateSubmissionStudentEnteredScore(
    """
    Parameters for UpdateSubmissionStudentEnteredScore
    """
    input: UpdateSubmissionStudentEnteredScoreInput!
  ): UpdateSubmissionStudentEnteredScorePayload
  updateSubmissionsReadState(
    """
    Parameters for UpdateSubmissionsReadState
    """
    input: UpdateSubmissionsReadStateInput!
  ): UpdateSubmissionsReadStatePayload
  updateUserDiscussionsSplitscreenView(
    """
    Parameters for UpdateUserDiscussionsSplitscreenView
    """
    input: UpdateUserDiscussionsSplitscreenViewInput!
  ): UpdateUserDiscussionsSplitscreenViewPayload
  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
  Assignment
  AssignmentGroup
  Conversation
  Course
  Discussion
  DiscussionEntry
  Enrollment
  File
  GradingPeriod
  GradingPeriodGroup
  Group
  GroupSet
  InternalSetting
  LearningOutcomeGroup
  MediaObject
  Module
  ModuleItem
  OutcomeCalculationMethod
  OutcomeProficiency
  Page
  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!
  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!
  createdAt: DateTime
  id: ID!
  modules: [Module!]
  title: String
  updatedAt: DateTime
}

"""
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
}

"""
Settings for Peer Reviews on an Assignment
"""
type PeerReviews {
  """
  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
}

"""
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
}

"""
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 Query {
  account(
    """
    a graphql or legacy id
    """
    id: ID

    """
    a id from the original SIS system
    """
    sisId: String
  ): Account

  """
  All courses viewable by the current user
  """
  allCourses: [Course!]
  assignment(
    """
    a graphql or legacy id
    """
    id: ID

    """
    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

  """
  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

  """
  Rubric
  """
  rubric(
    """
    a graphql or legacy id
    """
    id: ID!
  ): Rubric
  submission(
    """
    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 LegacyIDInterface & ModuleItemInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  createdAt: DateTime
  id: ID!
  modules: [Module!]
  updatedAt: DateTime
}

type QuizItem {
  _id: ID!
  title: String!
}

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
}

enum ReportType {
  inappropriate
  offensive
  other
}

type Rubric implements LegacyIDInterface & Node {
  """
  legacy canvas id
  """
  _id: ID!
  buttonDisplay: String!

  """
  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
  rubricAssociation: RubricAssociation
  score: Float
  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!
  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!
}

type Section implements LegacyIDInterface & Node & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  createdAt: DateTime
  gradesPosted(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
}

"""
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!
  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
}

"""
An activity stream summary item
"""
type StreamSummaryItem {
  count: Int
  notificationCategory: String
  type: String
  unreadCount: Int
}

"""
basic information about a students activity in a course
"""
type StudentSummaryAnalytics {
  pageViews: PageViewAnalysis
  participations: PageViewAnalysis
  tardinessBreakdown: TardinessBreakdown
}

type SubAssignmentSubmission {
  assignmentId: ID!

  """
  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
  publishedGrade: String
  publishedScore: Float
  score: Float
  subAssignmentTag: String
}

type SubHeader implements ModuleItemInterface {
  modules: [Module!]
  title: String
}

type Submission implements LegacyIDInterface & Node & SubmissionInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  assignedAssessments: [AssessmentRequest!]
  assignment: Assignment
  assignmentId: ID!
  attachment: File
  attachments: [File!]
  attempt: Int!
  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

    """
    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
  gradingPeriodId: ID
  gradingStatus: SubmissionGradingStatus
  groupId: ID
  hasUnreadRubricAssessment: Boolean!

  """
  hide unpublished grades
  """
  hideGradeFromStudent: Boolean
  id: ID!
  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
  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
  ): SubmissionHistoryConnection
  submissionStatus: String
  submissionType: SubmissionType
  submittedAt: DateTime
  turnitinData: [TurnitinData!]
  unreadCommentCount: Int!
  updatedAt: DateTime
  url: URL
  user: User
  userId: ID!
  wordCount: Float
}

type SubmissionComment implements LegacyIDInterface & Timestamped {
  """
  legacy canvas id
  """
  _id: ID!
  assignment: Assignment
  attachments: [File!]
  attempt: Int!
  author: User
  canReply: Boolean
  comment: String
  course: Course
  createdAt: DateTime!
  draft: Boolean!
  htmlComment: String
  id: ID!
  mediaCommentId: String
  mediaObject: MediaObject
  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]

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

"""
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]

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

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 {
  gradedSince: DateTime
  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 {
  assignedAssessments: [AssessmentRequest!]
  assignment: Assignment
  assignmentId: ID!
  attachment: File
  attachments: [File!]
  attempt: Int!
  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

    """
    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
  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
  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]
}

"""
Types for submission or submission history
"""
interface SubmissionInterface {
  assignedAssessments: [AssessmentRequest!]
  assignment: Assignment
  assignmentId: ID!
  attachment: File
  attachments: [File!]
  attempt: Int!
  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

    """
    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
  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
  wordCount: Float
}

input SubmissionOrderCriteria {
  direction: OrderDirection
  field: SubmissionOrderField!
}

enum SubmissionOrderField {
  _id
  gradedAt
}

input SubmissionRubricAssessmentFilterInput {
  """
  What submission attempt the rubric assessment should be returned for. If not
  specified, it will return the rubric assessment for the current submisssion
  or submission history.
  """
  forAttempt: Int = null
}

input SubmissionSearchFilterInput {
  """
  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
  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

  """
  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

  """
  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
"""
input SubmissionSearchOrder {
  direction: OrderDirection
  field: SubmissionSearchOrderField!
}

"""
The user or submission field to sort by
"""
enum SubmissionSearchOrderField {
  score
  submitted_at
  username
}

enum SubmissionState {
  deleted
  graded
  pending_review
  submitted
  ungraded
  unsubmitted
}

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
  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
}

union TurnitinContext = File | Submission

type TurnitinData {
  reportUrl: String
  score: Float
  state: String
  status: String
  target: TurnitinContext!
}

scalar URL

"""
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
  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!]
  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
  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 UpdateDiscussionExpanded
"""
input UpdateDiscussionExpandedInput {
  discussionTopicId: ID!
  expanded: Boolean!
}

"""
Autogenerated return type of UpdateDiscussionExpanded.
"""
type UpdateDiscussionExpandedPayload {
  discussionTopic: Discussion!
  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 UpdateDiscussionSortOrder
"""
input UpdateDiscussionSortOrderInput {
  discussionTopicId: ID!
  sortOrder: DiscussionSortOrderType!
}

"""
Autogenerated return type of UpdateDiscussionSortOrder.
"""
type UpdateDiscussionSortOrderPayload {
  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
  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
  specificSections: String
  title: String
  todoDate: DateTime
  ungradedDiscussionOverrides: [AssignmentOverrideCreateOrUpdate!]
}

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

"""
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 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 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!]
  submission: Submission
}

"""
Autogenerated input type of UpdateSubmissionsGradeStatus
"""
input UpdateSubmissionsGradeStatusInput {
  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 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

    """
    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
    limit: 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
  ): 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!]
  createdAt: DateTime
  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

    """
    The fields to order the results by
    """
    orderBy: [String!]
  ): [Enrollment!]!
  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
  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

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

  """
  **NOTE**: this only returns groups for the currently logged-in user.
  """
  groups: [Group!]
  htmlUrl(courseId: ID): URL
  id: ID!
  inboxLabels: [String!]
  integrationId: String
  loginId: String
  name: String
  notificationPreferences: NotificationPreferences
  notificationPreferencesEnabled(accountId: ID, contextType: NotificationPreferencesContextType!, courseId: ID): Boolean!
  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
}

"""
The connection type for User.
"""
type UserConnection {
  """
  A list of edges.
  """
  edges: [UserEdge]

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

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

"""
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
}

type ValidationError {
  attribute: String
  message: String!
}
