Skip to main content

Quiz & Assessment Endpoints

Load quiz attempts and submit learner answers.

QueryLoadAssessmentAttempts1 pt

Fetch paginated assessment attempts

Returns a paginated list of all assessment attempts recorded in the school. You can narrow results by date range, a specific course, or a specific user. This query is useful for reporting dashboards, compliance tracking, and grading workflows. It requires an `authToken` header that identifies a manager-level user — the operation will run in the context of that user. Each attempt includes the associated assessment, individual answers, question details, pass/fail status, grade, and linked course and user records.

Arguments

NameTypeDescription
startDateDateFilters the returned results to the specified start date.
endDateDateFilters the returned results to the specified end date.
courseIdIDFilters the returned attempts to those belonging to the specified course.
userIdIDFilters the returned attempts to those belonging to the specified user.
pageIntThe page number to return within the collection.
perPageIntThe amount of items to be returned on the page.

Returns

FieldTypeDescription
pageInfoCursorPageInfo!Pagination metadata including total count, cursor, items per page, and whether more pages are available.
assessmentAttempts[AssessmentAttempt!]The list of assessment attempts for the current page, each containing grade, pass/fail status, answers, associated user, course, and topic details.

Example

query LoadAssessmentAttempts(
  $startDate: Date
  $endDate: Date
  $courseId: ID
  $userId: ID
  $page: Int
  $perPage: Int
) {
  LoadAssessmentAttempts(
    startDate: $startDate
    endDate: $endDate
    courseId: $courseId
    userId: $userId
    page: $page
    perPage: $perPage
  ) {
    pageInfo {
      perPage
      cursor
      total
      hasMore
    }
    assessmentAttempts {
      id
      status
      grade
      passed
      forgiven
      createdAt
      updatedAt
      timeElapsedInSeconds
      courseId
      assessment {
        id
        title
        type
        minPassingPercent
      }
      user {
        id
        email
        firstName
        lastName
      }
      course {
        id
        title
        slug
      }
      answers {
        id
        question
        answer
        correct
      }
    }
  }
}

Example Response

{
  "data": {
    "LoadAssessmentAttempts": {
      "pageInfo": {
        "perPage": 20,
        "cursor": "eyJpZCI6IjEwMCJ9",
        "total": 142,
        "hasMore": true
      },
      "assessmentAttempts": [
        {
          "id": "attempt_001",
          "status": "finished",
          "grade": 85,
          "passed": true,
          "forgiven": false,
          "createdAt": "2024-03-15T10:30:00Z",
          "updatedAt": "2024-03-15T10:45:00Z",
          "timeElapsedInSeconds": 900,
          "courseId": "course_abc123",
          "assessment": {
            "id": "assessment_xyz789",
            "title": "Module 3 Quiz",
            "type": "quiz",
            "minPassingPercent": 80
          },
          "user": {
            "id": "user_def456",
            "email": "[email protected]",
            "firstName": "Jane",
            "lastName": "Doe"
          },
          "course": {
            "id": "course_abc123",
            "title": "Introduction to Data Science",
            "slug": "intro-to-data-science"
          },
          "answers": [
            {
              "id": "answer_001",
              "question": "What is a variable?",
              "answer": "A named storage location",
              "correct": true
            }
          ]
        }
      ]
    }
  },
  "pageInfo": null,
  "assessmentAttempts": null
}

This query requires an `authToken` header set to a manager-level user. Without it the operation will fail or return no results.

QueryLoadAssessmentAttemptsByTopicOrCourse1 pt

Load assessment attempts by topic or course

Returns all assessment attempts made by the current user for a given topic and/or course. This is useful for displaying a learner's attempt history, reviewing past grades, and determining whether a user may retake an assessment. At least one of `topicId` or `courseId` should be provided to filter results. The user context is resolved from the session or an `authToken` header.

Arguments

NameTypeDescription
topicIdIDThe ID of the topic to filter assessment attempts by. At least one of `topicId` or `courseId` should be provided.
courseIdIDThe ID of the course to filter assessment attempts by. At least one of `topicId` or `courseId` should be provided.

Returns

FieldTypeDescription
idID!The unique identifier of the assessment attempt.
assessmentAssessmentMetadata about the assessment, including title and minimum passing percentage.
answers[AssessmentAnswer!]The answers submitted by the user in each attempt.
courseCourseThe course associated with each assessment attempt.
courseIdIDThe ID of the course associated with each attempt.
userUserThe user who owns each assessment attempt.
createdAtDateThe date and time when each attempt was created.
updatedAtDateThe date and time when each attempt was last updated.
timeElapsedInSecondsIntThe total time elapsed on each attempt in seconds.
statusAssessmentAttemptStatus!The status of each attempt: `started`, `finished`, or `pending`.
gradeIntThe grade achieved on each attempt, expressed as a percentage.
originalGradeIntThe original grade before any admin adjustments.
passedBoolean!Whether the user passed each attempt.
forgivenBoolean!Whether a failed attempt has been forgiven by an admin.
assignmentSubmissionIdIDThe ID of the linked assignment submission, if applicable.
questions[QuizQuestion!]The questions included in each attempt along with user responses.
topicTypeTopicTypeThe type of topic this assessment belongs to.
topicTopicThe topic associated with each attempt.
topicIdIDThe ID of the topic associated with each attempt.
questionsCountIntThe total number of questions in each attempt.
correctQuestionsCountIntThe number of correctly answered questions.
answeredQuestionsCountIntThe number of questions answered by the user.
unansweredQuestionsCountIntThe number of questions left unanswered.
questionsWithChoicesCountIntThe number of questions that include selectable answer choices.
poolLabelByQuestionIdJSONA JSON map of question IDs to their pool labels.
linkedWorkbookIDThe ID of any linked workbook associated with each attempt.
adminUpdatedGradeBoolean!Whether an admin has manually updated the grade for each attempt.
securityTokenStringA security token for proctored or secure assessment flows.

Example

query LoadAssessmentAttemptsByTopicOrCourse {
  LoadAssessmentAttemptsByTopicOrCourse(
    topicId: "topic-abc123"
    courseId: "course-xyz789"
  ) {
    id
    status
    grade
    passed
    forgiven
    createdAt
    updatedAt
    questionsCount
    correctQuestionsCount
    timeElapsedInSeconds
    assessment {
      id
      title
      type
      minPassingPercent
    }
    topic {
      id
      title
      type
    }
    course {
      id
      title
      slug
    }
  }
}

Example Response

{
  "data": {
    "LoadAssessmentAttemptsByTopicOrCourse": [
      {
        "id": "attempt-001",
        "status": "finished",
        "grade": 75,
        "passed": false,
        "forgiven": false,
        "createdAt": "2024-03-01T10:00:00Z",
        "updatedAt": "2024-03-01T10:15:00Z",
        "questionsCount": 10,
        "correctQuestionsCount": 7,
        "timeElapsedInSeconds": 900,
        "assessment": {
          "id": "assessment-001",
          "title": "Module 1 Quiz",
          "type": "quiz",
          "minPassingPercent": 80
        },
        "topic": {
          "id": "topic-abc123",
          "title": "Module 1 Quiz",
          "type": "quiz"
        },
        "course": {
          "id": "course-xyz789",
          "title": "Introduction to APIs",
          "slug": "introduction-to-apis"
        }
      },
      {
        "id": "attempt-002",
        "status": "finished",
        "grade": 90,
        "passed": true,
        "forgiven": false,
        "createdAt": "2024-03-05T14:00:00Z",
        "updatedAt": "2024-03-05T14:12:00Z",
        "questionsCount": 10,
        "correctQuestionsCount": 9,
        "timeElapsedInSeconds": 720,
        "assessment": {
          "id": "assessment-001",
          "title": "Module 1 Quiz",
          "type": "quiz",
          "minPassingPercent": 80
        },
        "topic": {
          "id": "topic-abc123",
          "title": "Module 1 Quiz",
          "type": "quiz"
        },
        "course": {
          "id": "course-xyz789",
          "title": "Introduction to APIs",
          "slug": "introduction-to-apis"
        }
      }
    ]
  },
  "id": "abc-123",
  "assessment": null,
  "answers": null,
  "course": null,
  "courseId": "abc-123",
  "user": null,
  "createdAt": "2026-01-01T00:00:00Z",
  "updatedAt": "2026-01-01T00:00:00Z",
  "timeElapsedInSeconds": 0,
  "status": "started",
  "grade": 0,
  "originalGrade": 0,
  "passed": false,
  "assignmentSubmissionId": "abc-123",
  "questions": null,
  "topicType": "ad",
  "forgiven": false,
  "topic": null,
  "topicId": "abc-123",
  "questionsCount": 0,
  "correctQuestionsCount": 0,
  "answeredQuestionsCount": 0,
  "unansweredQuestionsCount": 0,
  "questionsWithChoicesCount": 0,
  "poolLabelByQuestionId": {},
  "linkedWorkbook": "abc-123",
  "adminUpdatedGrade": false,
  "securityToken": "example"
}

Both `topicId` and `courseId` are optional individually, but providing at least one is recommended to return meaningful results. Results are scoped to the current authenticated user.

QueryLoadAssessmentAttemptWithQuestions1 pt

Load assessment attempt with questions

Returns an existing or newly created assessment attempt for a given topic, populated with all quiz questions. Call this query when a user starts a new attempt or resumes an in-progress one. If `assessmentAttemptId` is supplied, the matching in-progress attempt is resumed; otherwise, a new attempt is initiated. You can optionally shuffle and subset questions, associate the attempt with a course or linked workbook, or take the assessment on behalf of a learner as an instructor. The user context is resolved from the session or an `authToken` header.

Arguments

NameTypeDescription
idID!The ID of the Topic.
shouldShuffleAndSubsetBooleanFlag to randomly order questions and choose a subset of questions to use.
courseIdIDThe ID of the course.
linkedWorkbookdeprecatedIDThe ID of the linked workbook to associate with this assessment attempt. Deprecated in favor of `linkedWorkbookId`.
linkedWorkbookIdIDThe ID of the linked workbook.
instructorAssessmentUserdeprecatedIDThe ID of the user on behalf of whom the instructor is taking the assessment. Deprecated in favor of `instructorAssessmentUserId`.
instructorAssessmentUserIdIDThe ID of the user on behalf of whom the instructor takes the assessment.
topicTypeAssessmentTopicType!The type of the Topic.
assessmentAttemptIdIDThe ID of the in-progress assessment attempt to resume from.

Returns

FieldTypeDescription
idID!The unique identifier of the assessment attempt.
assessmentAssessmentMetadata about the assessment being attempted, including title and minimum passing percentage.
answers[AssessmentAnswer!]The answers submitted by the user in this attempt, including correctness details.
courseCourseThe course associated with this assessment attempt.
courseIdIDThe ID of the course associated with this attempt.
userUserThe user who owns this assessment attempt.
createdAtDateThe date and time when this attempt was created.
updatedAtDateThe date and time when this attempt was last updated.
timeElapsedInSecondsIntThe total time elapsed on this attempt in seconds.
statusAssessmentAttemptStatus!The current status of the attempt: `started`, `finished`, or `pending`.
gradeIntThe grade achieved on this attempt, expressed as a percentage.
originalGradeIntThe original grade before any admin adjustments.
passedBoolean!Whether the user passed this assessment attempt.
forgivenBoolean!Whether a failed attempt has been forgiven by an admin.
assignmentSubmissionIdIDThe ID of the linked assignment submission, if applicable.
questions[QuizQuestion!]The list of quiz questions included in this attempt, with answer choices and response data.
topicTypeTopicTypeThe type of topic this assessment belongs to (e.g., quiz, survey, test).
topicTopicThe topic associated with this assessment attempt.
topicIdIDThe ID of the topic associated with this attempt.
questionsCountIntThe total number of questions in this attempt.
correctQuestionsCountIntThe number of questions answered correctly.
answeredQuestionsCountIntThe number of questions the user has answered so far.
unansweredQuestionsCountIntThe number of questions the user has not yet answered.
questionsWithChoicesCountIntThe number of questions that include answer choices.
poolLabelByQuestionIdJSONA JSON map of question IDs to their question pool labels, used when questions are drawn from pools.
linkedWorkbookIDThe ID of the linked workbook associated with this attempt, if any.
adminUpdatedGradeBoolean!Whether an admin has manually updated the grade for this attempt.
securityTokenStringA security token associated with this attempt, used for proctored or secure assessment flows.

Example

query LoadAssessmentAttemptWithQuestions {
  LoadAssessmentAttemptWithQuestions(
    id: "topic-abc123"
    topicType: quiz
    courseId: "course-xyz789"
    shouldShuffleAndSubset: true
  ) {
    id
    status
    grade
    passed
    forgiven
    questionsCount
    correctQuestionsCount
    answeredQuestionsCount
    unansweredQuestionsCount
    timeElapsedInSeconds
    assessment {
      id
      title
      type
      minPassingPercent
    }
    questions {
      questionId
      body
      type
      required
      choices {
        choiceId
        value
        correct
      }
    }
    topic {
      id
      title
      type
    }
    course {
      id
      title
      slug
    }
  }
}

Example Response

{
  "data": {
    "LoadAssessmentAttemptWithQuestions": {
      "id": "attempt-001",
      "status": "started",
      "grade": null,
      "passed": false,
      "forgiven": false,
      "questionsCount": 10,
      "correctQuestionsCount": 0,
      "answeredQuestionsCount": 0,
      "unansweredQuestionsCount": 10,
      "timeElapsedInSeconds": 0,
      "assessment": {
        "id": "assessment-001",
        "title": "Module 1 Quiz",
        "type": "quiz",
        "minPassingPercent": 80
      },
      "questions": [
        {
          "questionId": "q-001",
          "body": "What is the primary purpose of GraphQL?",
          "type": "multipleChoice",
          "required": true,
          "choices": [
            {
              "choiceId": "c-001",
              "value": "Query and manipulate data via a typed schema",
              "correct": true
            },
            {
              "choiceId": "c-002",
              "value": "Style web pages",
              "correct": false
            },
            {
              "choiceId": "c-003",
              "value": "Manage relational databases",
              "correct": false
            }
          ]
        }
      ],
      "topic": {
        "id": "topic-abc123",
        "title": "Module 1 Quiz",
        "type": "quiz"
      },
      "course": {
        "id": "course-xyz789",
        "title": "Introduction to APIs",
        "slug": "introduction-to-apis"
      }
    }
  },
  "id": "abc-123",
  "assessment": null,
  "answers": null,
  "course": null,
  "courseId": "abc-123",
  "user": null,
  "createdAt": "2026-01-01T00:00:00Z",
  "updatedAt": "2026-01-01T00:00:00Z",
  "timeElapsedInSeconds": 0,
  "status": "started",
  "grade": 0,
  "originalGrade": 0,
  "passed": false,
  "assignmentSubmissionId": "abc-123",
  "questions": null,
  "topicType": "ad",
  "forgiven": false,
  "topic": null,
  "topicId": "abc-123",
  "questionsCount": 0,
  "correctQuestionsCount": 0,
  "answeredQuestionsCount": 0,
  "unansweredQuestionsCount": 0,
  "questionsWithChoicesCount": 0,
  "poolLabelByQuestionId": {},
  "linkedWorkbook": "abc-123",
  "adminUpdatedGrade": false,
  "securityToken": "example"
}

Either a new attempt is created or an existing in-progress attempt is resumed depending on whether `assessmentAttemptId` is provided. Pass `shouldShuffleAndSubset: true` to randomize and limit the question set presented to the learner.

QueryLoadSuperQuizInfo1 pt

Load super quiz questions and settings

Retrieves the combined question set and configuration data for one or more quizzes that make up a super quiz experience. This is typically used to assemble a single, unified quiz session that spans multiple underlying quiz topics within a course. You can optionally pass a `courseId` to scope the request and control whether previously correct answers are included. If an `authToken` header is provided, the response may be personalized to reflect the authenticated user's previous answers and progress.

Arguments

NameTypeDescription
courseIdIDThe ID of the course that contains the quizzes, used to scope the query context.
includeCorrectAnswersBooleanFlag to include questions the user previously got correct.
quizzes[ID!]!The IDs of the Quizzes user selects.

Returns

FieldTypeDescription
quizzes[ID!]The IDs of the quizzes included in this super quiz session.
questions[QuizQuestion!]The aggregated list of questions drawn from all specified quizzes.
totalTimeInSecondsIntThe total time limit for the entire super quiz session in seconds, if a timer is enabled.
questionSkipEnabledBooleanWhether the learner is allowed to skip questions and return to them later.
timerEnabledBooleanWhether a countdown timer is active for this super quiz.
navigationDisabledBooleanWhether backward navigation between questions is disabled.
displayAllHintsBooleanWhether hints are shown for all questions by default.
timePerQuestionInSecondsIntPer-question time limit in seconds, if applicable.

Example

query LoadSuperQuizInfo(
  $courseId: ID
  $includeCorrectAnswers: Boolean
  $quizzes: [ID!]!
) {
  LoadSuperQuizInfo(
    courseId: $courseId
    includeCorrectAnswers: $includeCorrectAnswers
    quizzes: $quizzes
  ) {
    quizzes
    totalTimeInSeconds
    timerEnabled
    navigationDisabled
    questionSkipEnabled
    displayAllHints
    timePerQuestionInSeconds
    questions {
      questionId
      body
      type
      required
      isMultipleChoice
      isOpenEnded
      choices {
        choiceId
        value
        correct
      }
    }
  }
}

Example Response

{
  "data": {
    "LoadSuperQuizInfo": {
      "quizzes": [
        "quiz_001",
        "quiz_002"
      ],
      "totalTimeInSeconds": 1800,
      "timerEnabled": true,
      "navigationDisabled": false,
      "questionSkipEnabled": true,
      "displayAllHints": false,
      "timePerQuestionInSeconds": null,
      "questions": [
        {
          "questionId": "q_abc123",
          "body": "Which of the following is a supervised learning algorithm?",
          "type": "multipleChoice",
          "required": true,
          "isMultipleChoice": true,
          "isOpenEnded": false,
          "choices": [
            {
              "choiceId": "choice_1",
              "value": "Linear Regression",
              "correct": true
            },
            {
              "choiceId": "choice_2",
              "value": "K-Means Clustering",
              "correct": false
            }
          ]
        }
      ]
    }
  },
  "quizzes": [
    "abc-123"
  ],
  "questions": null,
  "totalTimeInSeconds": 0,
  "questionSkipEnabled": false,
  "timerEnabled": false,
  "navigationDisabled": false,
  "displayAllHints": false,
  "timePerQuestionInSeconds": 0
}
MutationCreateAssessmentAttempt1 pt

Create an assessment attempt

Creates a new assessment attempt for a learner on a specific course topic. This mutation is primarily used to initiate a super quiz attempt, where the caller supplies the set of questions the learner has selected. An optional `userId` allows an admin or integration to create the attempt on behalf of a specific user; if omitted, the authenticated user is used. A `grade` value can also be provided directly to set the attempt's score at creation time. The acting user can be overridden by supplying an `authToken` header.

Arguments

NameTypeDescription
topicIdID!The ID of the topic.
courseIdID!The ID of the course.
questions[QuestionInput!]!The questions user selected for super quiz.
userIdIDThe ID of the user to take the assessment.
gradeIntThe grade of the assessment attempt.

Returns

FieldTypeDescription
idID!The unique identifier of the newly created assessment attempt.
assessmentAssessmentThe assessment definition linked to this attempt.
answers[AssessmentAnswer!]The individual answers recorded for this attempt.
courseCourseThe course associated with this attempt.
courseIdIDThe ID of the associated course.
userUserThe learner who owns this attempt.
createdAtDateTimestamp when the attempt was created.
updatedAtDateTimestamp when the attempt was last updated.
timeElapsedInSecondsIntTime spent on the attempt, in seconds.
statusAssessmentAttemptStatus!Current status of the attempt: started, finished, or pending.
gradeIntThe grade assigned to this attempt as a percentage.
originalGradeIntThe grade before any administrative overrides.
passedBoolean!Whether the learner passed the assessment.
assignmentSubmissionIdIDID of a related assignment submission, if applicable.
questions[QuizQuestion!]The quiz questions included in this attempt.
topicTypeTopicTypeThe topic type (e.g. quiz, test, survey) for this attempt.
forgivenBoolean!Whether the attempt has been administratively forgiven.
topicTopicThe topic resource this attempt is associated with.
topicIdIDThe ID of the topic.
questionsCountIntTotal number of questions in the attempt.
correctQuestionsCountIntNumber of correctly answered questions.
answeredQuestionsCountIntNumber of questions that received an answer.
unansweredQuestionsCountIntNumber of questions that were not answered.
questionsWithChoicesCountIntNumber of questions that offered selectable choices.
poolLabelByQuestionIdJSONMap of question IDs to their question pool labels.
linkedWorkbookIDID of a linked workbook, if any.
adminUpdatedGradeBoolean!Whether the grade was manually overridden by an administrator.
securityTokenStringA security token associated with this attempt.

Example

mutation CreateAssessmentAttempt {
  CreateAssessmentAttempt(
    topicId: "topic_quiz_001"
    courseId: "course_abc123"
    questions: [
      { questionId: "q1", response: "Paris" }
      { questionId: "q2", response: "choice_b" }
    ]
    userId: "user_001"
  ) {
    id
    status
    grade
    passed
    forgiven
    adminUpdatedGrade
    createdAt
    updatedAt
    timeElapsedInSeconds
    assessment {
      id
      title
      type
      minPassingPercent
    }
    questionsCount
    correctQuestionsCount
    answeredQuestionsCount
    unansweredQuestionsCount
    topic {
      id
      title
      type
    }
    user {
      id
      email
      firstName
      lastName
    }
  }
}

Example Response

{
  "data": {
    "CreateAssessmentAttempt": {
      "id": "attempt_new_def456",
      "status": "finished",
      "grade": 90,
      "passed": true,
      "forgiven": false,
      "adminUpdatedGrade": false,
      "createdAt": "2024-03-15T09:00:00Z",
      "updatedAt": "2024-03-15T09:12:00Z",
      "timeElapsedInSeconds": 720,
      "assessment": {
        "id": "assessment_002",
        "title": "Super Quiz - Chapter 5",
        "type": "quiz",
        "minPassingPercent": 80
      },
      "questionsCount": 10,
      "correctQuestionsCount": 9,
      "answeredQuestionsCount": 10,
      "unansweredQuestionsCount": 0,
      "topic": {
        "id": "topic_quiz_001",
        "title": "Chapter 5 Quiz",
        "type": "quiz"
      },
      "user": {
        "id": "user_001",
        "email": "[email protected]",
        "firstName": "Jane",
        "lastName": "Doe"
      }
    }
  },
  "id": "abc-123",
  "assessment": null,
  "answers": null,
  "course": null,
  "courseId": "abc-123",
  "user": null,
  "createdAt": "2026-01-01T00:00:00Z",
  "updatedAt": "2026-01-01T00:00:00Z",
  "timeElapsedInSeconds": 0,
  "status": "started",
  "grade": 0,
  "originalGrade": 0,
  "passed": false,
  "assignmentSubmissionId": "abc-123",
  "questions": null,
  "topicType": "ad",
  "forgiven": false,
  "topic": null,
  "topicId": "abc-123",
  "questionsCount": 0,
  "correctQuestionsCount": 0,
  "answeredQuestionsCount": 0,
  "unansweredQuestionsCount": 0,
  "questionsWithChoicesCount": 0,
  "poolLabelByQuestionId": {},
  "linkedWorkbook": "abc-123",
  "adminUpdatedGrade": false,
  "securityToken": "example"
}

The `questions` argument accepts a list of `QuestionInput` objects representing the learner's selected questions for a super quiz. If `userId` is omitted, the attempt is created for the authenticated user.

MutationCreateAssignmentSubmission1 pt

Create an assignment submission

Creates a new assignment submission for the current user within a specified course. This mutation is used when a learner completes a manually graded assignment — which may include written text, an uploaded file, a video, or a linked quiz attempt. When a quiz attempt is associated, it ties the assessment answers to the submission for instructor review. The acting user can be overridden by supplying an `authToken` header.

Arguments

NameTypeDescription
bodyStringThe body of the assignment submission.
videoAssetStringThe URL of the video asset.
assetStringThe URL of the asset.
quizAttemptIDThe ID of the assessment attempt.
assignmentIDThe ID of the assignment.
courseID!The ID of the course.

Returns

FieldTypeDescription
idID!Unique identifier of the assignment submission.
assignmentAssignmentThe assignment this submission belongs to.
courseIdIDThe ID of the course in which the submission was made.
courseCourseThe full course object associated with this submission.
userUserThe user who created the submission.
bodyStringThe written text body of the submission.
assetURLURL of an uploaded file asset attached to the submission.
additionalAssetURLURL of a secondary uploaded file asset, if any.
videoAssetStringIdentifier or URL of a video asset attached to the submission.
gradeAssignmentSubmissionGradeThe grade applied to the submission: completed or incomplete.
numericGradeFloatA numeric grade value assigned to the submission by an instructor.
gradeFeedbackStringWritten feedback from the instructor about the submission's grade.
commentsCountInt!The number of comments attached to this submission.
adminUpdatedGradeBoolean!Indicates whether an administrator has manually updated the grade.
quizAttemptAssessmentAttemptAn associated assessment attempt linked to this assignment submission, if applicable.
licenseLicenseThe license under which this submission was made, if applicable.
createdAtDateTimestamp when the submission was created.
updatedAtDateTimestamp when the submission was last updated.

Example

mutation CreateAssignmentSubmission {
  CreateAssignmentSubmission(
    course: "course_abc123"
    assignment: "assignment_def456"
    body: "My completed assignment response goes here."
    asset: "https://cdn.example.com/uploads/submission_file.pdf"
    videoAsset: null
    quizAttempt: null
  ) {
    id
    body
    grade
    numericGrade
    gradeFeedback
    commentsCount
    adminUpdatedGrade
    createdAt
    updatedAt
    assignment {
      id
      title
      description
    }
    course {
      id
      title
      slug
    }
    user {
      id
      email
      name
    }
    asset
    videoAsset
  }
}

Example Response

{
  "data": {
    "CreateAssignmentSubmission": {
      "id": "submission_ghi789",
      "body": "My completed assignment response goes here.",
      "grade": "completed",
      "numericGrade": null,
      "gradeFeedback": null,
      "commentsCount": 0,
      "adminUpdatedGrade": false,
      "createdAt": "2024-06-01T10:30:00Z",
      "updatedAt": "2024-06-01T10:30:00Z",
      "assignment": {
        "id": "assignment_def456",
        "title": "Final Project Essay",
        "description": "Write a 500-word essay on the topic covered in Module 5."
      },
      "course": {
        "id": "course_abc123",
        "title": "Introduction to Geography",
        "slug": "intro-to-geography"
      },
      "user": {
        "id": "user_456",
        "email": "[email protected]",
        "name": "Jane Doe"
      },
      "asset": "https://cdn.example.com/uploads/submission_file.pdf",
      "videoAsset": null
    }
  },
  "id": "abc-123",
  "assignment": null,
  "courseId": "abc-123",
  "course": null,
  "user": null,
  "asset": "https://example.com",
  "additionalAsset": "https://example.com",
  "videoAsset": "example",
  "body": "example",
  "commentsCount": 0,
  "numericGrade": 0,
  "grade": "completed",
  "gradeFeedback": "example",
  "createdAt": "2026-01-01T00:00:00Z",
  "updatedAt": "2026-01-01T00:00:00Z",
  "quizAttempt": null,
  "adminUpdatedGrade": false,
  "license": null
}
MutationCreateUnansweredAssessmentAttempt1 pt

Create an assessment attempt for unanswered questions

Creates a new assessment attempt that contains only the questions the user left unanswered in a prior completed attempt. This is used in assessment flows where question-skipping is enabled and the learner chooses to go back and answer skipped questions after completing the rest of the assessment. You must provide the topic ID, course ID, and the ID of the previously completed attempt to derive which questions were unanswered. The acting user can be overridden by supplying an `authToken` header.

Arguments

NameTypeDescription
topicIdID!The ID of the topic.
courseIdID!The ID of the course.
completedAssessmentAttemptIdID!The ID of the last completed assessment attempt.

Returns

FieldTypeDescription
idID!Unique identifier of the newly created unanswered-questions attempt.
assessmentAssessmentThe assessment this attempt belongs to.
answers[AssessmentAnswer!]Recorded answers for this attempt (initially empty until questions are answered).
courseCourseThe course containing the assessment topic.
courseIdIDThe ID of the course for this attempt.
userUserThe user this attempt belongs to.
statusAssessmentAttemptStatus!Current status of the attempt (started, finished, or pending).
gradeIntThe percentage grade for this attempt once completed.
passedBoolean!Whether the user passed this attempt.
forgivenBoolean!Whether this attempt has been administratively forgiven.
adminUpdatedGradeBoolean!Whether an administrator has manually overridden the grade.
questions[QuizQuestion!]The unanswered questions from the prior attempt, now presented for answering.
topicTopicThe topic that contains the assessment.
topicIdIDThe ID of the topic for this attempt.
topicTypeTopicTypeThe type of topic (quiz, test, survey, etc.).
questionsCountIntTotal number of questions in this unanswered attempt.
unansweredQuestionsCountIntNumber of questions still unanswered in this attempt.
answeredQuestionsCountIntNumber of questions answered so far in this attempt.
correctQuestionsCountIntNumber of questions answered correctly.
assignmentSubmissionIdIDID of a linked assignment submission, if applicable.
securityTokenStringSecurity token for proctored assessment validation.
createdAtDateTimestamp when this attempt was created.
updatedAtDateTimestamp when this attempt was last updated.

Example

mutation CreateUnansweredAssessmentAttempt {
  CreateUnansweredAssessmentAttempt(
    topicId: "topic_pqr678"
    courseId: "course_abc123"
    completedAssessmentAttemptId: "attempt_xyz789"
  ) {
    id
    status
    grade
    passed
    questionsCount
    unansweredQuestionsCount
    answeredQuestionsCount
    forgiven
    adminUpdatedGrade
    createdAt
    assessment {
      id
      title
      minPassingPercent
    }
    questions {
      questionId
      body
      type
      choices {
        choiceId
        value
        correct
      }
    }
    course {
      id
      title
    }
    user {
      id
      email
    }
  }
}

Example Response

{
  "data": {
    "CreateUnansweredAssessmentAttempt": {
      "id": "attempt_stu901",
      "status": "started",
      "grade": null,
      "passed": false,
      "questionsCount": 3,
      "unansweredQuestionsCount": 3,
      "answeredQuestionsCount": 0,
      "forgiven": false,
      "adminUpdatedGrade": false,
      "createdAt": "2024-06-01T12:00:00Z",
      "assessment": {
        "id": "assessment_001",
        "title": "Module 3 Quiz",
        "minPassingPercent": 80
      },
      "questions": [
        {
          "questionId": "q_003",
          "body": "What is the largest ocean on Earth?",
          "type": "multipleChoice",
          "choices": [
            {
              "choiceId": "c_001",
              "value": "Pacific Ocean",
              "correct": true
            },
            {
              "choiceId": "c_002",
              "value": "Atlantic Ocean",
              "correct": false
            }
          ]
        }
      ],
      "course": {
        "id": "course_abc123",
        "title": "Introduction to Geography"
      },
      "user": {
        "id": "user_456",
        "email": "[email protected]"
      }
    }
  },
  "id": "abc-123",
  "assessment": null,
  "answers": null,
  "course": null,
  "courseId": "abc-123",
  "user": null,
  "createdAt": "2026-01-01T00:00:00Z",
  "updatedAt": "2026-01-01T00:00:00Z",
  "timeElapsedInSeconds": 0,
  "status": "started",
  "grade": 0,
  "originalGrade": 0,
  "passed": false,
  "assignmentSubmissionId": "abc-123",
  "questions": null,
  "topicType": "ad",
  "forgiven": false,
  "topic": null,
  "topicId": "abc-123",
  "questionsCount": 0,
  "correctQuestionsCount": 0,
  "answeredQuestionsCount": 0,
  "unansweredQuestionsCount": 0,
  "questionsWithChoicesCount": 0,
  "poolLabelByQuestionId": {},
  "linkedWorkbook": "abc-123",
  "adminUpdatedGrade": false,
  "securityToken": "example"
}

This mutation is intended for assessments where `questionSkipEnabled` is true on the topic. It requires a previously completed attempt ID to determine which questions were skipped.

MutationMergeAssessmentAttemptIntoComplete1 pt

Merge assessment attempt into completed attempt

Merges an in-progress assessment attempt into the most recently completed assessment attempt. This mutation is intended for use after a learner finishes reviewing unanswered questions in a resumed session — the answers from the current attempt are folded into the last completed attempt, producing a single unified result. The acting user can be overridden by supplying an `authToken` header.

Arguments

NameTypeDescription
completedAssessmentAttemptIdID!The ID of the last completed assessment attempt.
assessmentAttemptIdID!The ID of the assessment attempt.

Returns

FieldTypeDescription
idID!The unique identifier of the merged assessment attempt.
assessmentAssessmentThe assessment definition associated with this attempt, including title, type, and passing threshold.
answers[AssessmentAnswer!]The list of individual answers recorded in this attempt.
courseCourseThe course to which this assessment attempt belongs.
courseIdIDThe ID of the associated course.
userUserThe learner who submitted this assessment attempt.
createdAtDateTimestamp when the attempt was first created.
updatedAtDateTimestamp when the attempt was last updated.
timeElapsedInSecondsIntTotal time the learner spent on the attempt, in seconds.
statusAssessmentAttemptStatus!Current status of the attempt: started, finished, or pending.
gradeIntThe final grade (as a percentage) assigned to this attempt.
originalGradeIntThe grade before any administrative overrides.
passedBoolean!Whether the learner passed the assessment.
assignmentSubmissionIdIDID of the associated assignment submission, if applicable.
questions[QuizQuestion!]The list of quiz questions included in this attempt.
topicTypeTopicTypeThe type of topic this assessment belongs to (e.g. quiz, test, survey).
forgivenBoolean!Whether this attempt has been forgiven by an admin.
topicTopicThe topic resource this assessment attempt is linked to.
topicIdIDThe ID of the associated topic.
questionsCountIntTotal number of questions in the attempt.
correctQuestionsCountIntNumber of questions answered correctly.
answeredQuestionsCountIntNumber of questions that were answered.
unansweredQuestionsCountIntNumber of questions left unanswered.
questionsWithChoicesCountIntNumber of questions that included selectable answer choices.
poolLabelByQuestionIdJSONA JSON map of question IDs to their question pool labels.
linkedWorkbookIDID of a linked workbook associated with this attempt, if any.
adminUpdatedGradeBoolean!Whether an administrator has manually overridden the grade.
securityTokenStringA security token associated with this assessment attempt.

Example

mutation MergeAssessmentAttemptIntoComplete {
  MergeAssessmentAttemptIntoComplete(
    completedAssessmentAttemptId: "attempt_completed_abc123"
    assessmentAttemptId: "attempt_current_xyz789"
  ) {
    id
    status
    grade
    passed
    forgiven
    adminUpdatedGrade
    createdAt
    updatedAt
    timeElapsedInSeconds
    assessment {
      id
      title
      type
      minPassingPercent
    }
    answers {
      id
      question
      answer
      correct
    }
    questionsCount
    correctQuestionsCount
    answeredQuestionsCount
    unansweredQuestionsCount
    user {
      id
      email
      firstName
      lastName
    }
  }
}

Example Response

{
  "data": {
    "MergeAssessmentAttemptIntoComplete": {
      "id": "attempt_completed_abc123",
      "status": "finished",
      "grade": 85,
      "passed": true,
      "forgiven": false,
      "adminUpdatedGrade": false,
      "createdAt": "2024-03-10T14:22:00Z",
      "updatedAt": "2024-03-10T14:35:00Z",
      "timeElapsedInSeconds": 780,
      "assessment": {
        "id": "assessment_001",
        "title": "Module 3 Final Quiz",
        "type": "test",
        "minPassingPercent": 75
      },
      "answers": [
        {
          "id": "answer_001",
          "question": "What is the capital of France?",
          "answer": "Paris",
          "correct": true
        },
        {
          "id": "answer_002",
          "question": "What is 2 + 2?",
          "answer": "4",
          "correct": true
        }
      ],
      "questionsCount": 20,
      "correctQuestionsCount": 17,
      "answeredQuestionsCount": 20,
      "unansweredQuestionsCount": 0,
      "user": {
        "id": "user_001",
        "email": "[email protected]",
        "firstName": "Jane",
        "lastName": "Doe"
      }
    }
  },
  "id": "abc-123",
  "assessment": null,
  "answers": null,
  "course": null,
  "courseId": "abc-123",
  "user": null,
  "createdAt": "2026-01-01T00:00:00Z",
  "updatedAt": "2026-01-01T00:00:00Z",
  "timeElapsedInSeconds": 0,
  "status": "started",
  "grade": 0,
  "originalGrade": 0,
  "passed": false,
  "assignmentSubmissionId": "abc-123",
  "questions": null,
  "topicType": "ad",
  "forgiven": false,
  "topic": null,
  "topicId": "abc-123",
  "questionsCount": 0,
  "correctQuestionsCount": 0,
  "answeredQuestionsCount": 0,
  "unansweredQuestionsCount": 0,
  "questionsWithChoicesCount": 0,
  "poolLabelByQuestionId": {},
  "linkedWorkbook": "abc-123",
  "adminUpdatedGrade": false,
  "securityToken": "example"
}

The `authToken` request header determines which user's attempt is acted upon. Ensure `assessmentAttemptId` refers to the current in-progress attempt and `completedAssessmentAttemptId` refers to the previously finished attempt for the same assessment.

MutationUpdateAssessmentAttempt1 pt

Update an assessment attempt

Updates an in-progress assessment attempt for the current user. This mutation is called repeatedly during an assessment session — once per question to record the user's selected answer, and again when the user submits the assessment to mark it as finished. The returned `AssessmentAttempt` includes grading details, question-level data, and associated course and user information. The acting user can be overridden by supplying an `authToken` header.

Arguments

NameTypeDescription
activeQuestionQuestionInputThe active question with user's selected choice(s).
assessmentAttemptAssessmentAttemptInputThe assessment attempt to be updated.

Returns

FieldTypeDescription
idID!Unique identifier of the assessment attempt.
assessmentAssessmentThe assessment associated with this attempt, including its title, type, and minimum passing percentage.
answers[AssessmentAnswer!]List of recorded answers for this attempt, including correctness indicators.
courseCourseThe course in which this assessment attempt was made.
courseIdIDThe ID of the course associated with this attempt.
userUserThe user who made this assessment attempt.
statusAssessmentAttemptStatus!Current status of the attempt: started, finished, or pending.
gradeIntThe calculated percentage grade for this attempt.
originalGradeIntThe original grade before any administrative overrides.
passedBoolean!Whether the user passed the assessment based on the minimum passing percentage.
forgivenBoolean!Whether this attempt has been forgiven (overridden to passing) by an administrator.
adminUpdatedGradeBoolean!Indicates whether an administrator has manually updated the grade for this attempt.
questions[QuizQuestion!]The list of quiz questions included in this attempt, with response and grading details.
topicTopicThe topic (lesson page) that contains the assessment.
topicIdIDThe ID of the topic containing the assessment.
topicTypeTopicTypeThe type of topic (e.g., quiz, test, survey) for this attempt.
questionsCountIntTotal number of questions in the assessment.
correctQuestionsCountIntNumber of questions answered correctly.
answeredQuestionsCountIntNumber of questions the user has answered.
unansweredQuestionsCountIntNumber of questions left unanswered.
questionsWithChoicesCountIntNumber of questions that have predefined answer choices.
timeElapsedInSecondsIntTotal time the user has spent on this attempt, in seconds.
assignmentSubmissionIdIDIf this attempt is linked to an assignment submission, the ID of that submission.
linkedWorkbookIDThe ID of a linked workbook associated with this attempt, if any.
poolLabelByQuestionIdJSONA JSON map of question IDs to their question pool labels, used for pooled assessments.
securityTokenStringA security token associated with this attempt, used for proctored assessments.
createdAtDateTimestamp when the attempt was created.
updatedAtDateTimestamp when the attempt was last updated.

Example

mutation UpdateAssessmentAttempt(
  $activeQuestion: QuestionInput
  $assessmentAttempt: AssessmentAttemptInput
) {
  UpdateAssessmentAttempt(
    activeQuestion: $activeQuestion
    assessmentAttempt: $assessmentAttempt
  ) {
    id
    status
    grade
    passed
    questionsCount
    correctQuestionsCount
    answeredQuestionsCount
    unansweredQuestionsCount
    timeElapsedInSeconds
    forgiven
    adminUpdatedGrade
    assessment {
      id
      title
      type
      minPassingPercent
    }
    answers {
      id
      question
      answer
      correct
    }
    course {
      id
      title
      slug
    }
    user {
      id
      email
      name
    }
  }
}

Example Response

{
  "data": {
    "UpdateAssessmentAttempt": {
      "id": "attempt_xyz789",
      "status": "finished",
      "grade": 85,
      "passed": true,
      "questionsCount": 10,
      "correctQuestionsCount": 8,
      "answeredQuestionsCount": 10,
      "unansweredQuestionsCount": 0,
      "timeElapsedInSeconds": 342,
      "forgiven": false,
      "adminUpdatedGrade": false,
      "assessment": {
        "id": "assessment_001",
        "title": "Module 3 Quiz",
        "type": "quiz",
        "minPassingPercent": 80
      },
      "answers": [
        {
          "id": "answer_001",
          "question": "What is the capital of France?",
          "answer": "Paris",
          "correct": true
        }
      ],
      "course": {
        "id": "course_abc123",
        "title": "Introduction to Geography",
        "slug": "intro-to-geography"
      },
      "user": {
        "id": "user_456",
        "email": "[email protected]",
        "name": "Jane Doe"
      }
    }
  },
  "id": "abc-123",
  "assessment": null,
  "answers": null,
  "course": null,
  "courseId": "abc-123",
  "user": null,
  "createdAt": "2026-01-01T00:00:00Z",
  "updatedAt": "2026-01-01T00:00:00Z",
  "timeElapsedInSeconds": 0,
  "status": "started",
  "grade": 0,
  "originalGrade": 0,
  "passed": false,
  "assignmentSubmissionId": "abc-123",
  "questions": null,
  "topicType": "ad",
  "forgiven": false,
  "topic": null,
  "topicId": "abc-123",
  "questionsCount": 0,
  "correctQuestionsCount": 0,
  "answeredQuestionsCount": 0,
  "unansweredQuestionsCount": 0,
  "questionsWithChoicesCount": 0,
  "poolLabelByQuestionId": {},
  "linkedWorkbook": "abc-123",
  "adminUpdatedGrade": false,
  "securityToken": "example"
}