quiz-grading

5 endpoints.

GET/api/grading-queue Bearer token

List attempts awaiting grading

Every attempt in pending_grading across the quizzes the caller's quizzes:grade scope reaches, oldest submission first, one page at a time; `quiz` narrows it to one quiz. Each row says how many manually graded questions the paper holds and how many still want points — zero means the attempt is ready to finalize. A caller holding no quizzes:grade anywhere gets an empty list, not an error.

Parameters

NameInTypeRequiredDescription
quizquerystring (uuid)noOnly attempts of this quiz (UUID id).
limitqueryintegernoPage size, 1-200. Defaults to 50.
cursorquerystringnoOpaque cursor from a previous page's next_cursor.

Responses

StatusDescriptionBody
200One page of the queue, and the cursor for the next.GradingQueueList
400The cursor is malformed.ErrorResponse
401The access token is missing or invalid.ErrorResponse
500The database could not be read.ErrorResponse
GET/api/quiz-attempts/{attempt_id}/grading Bearer token

Read an attempt for grading

The attempt's paper as a marker sees it: every question with the taker's response, the correct answer where the kind has one, the rubric, and on manually graded questions the machine's suggestion, the points awarded so far and the feedback written. For holders of quizzes:grade or quizzes:read over the quiz; the taker reads their own paper through the review endpoint instead.

Parameters

NameInTypeRequiredDescription
attempt_idpathstring (uuid)yesUUID id of the attempt.

Responses

StatusDescriptionBody
200The paper, marker fields included.QuizAttemptReview
401The access token is missing or invalid.ErrorResponse
404No visible attempt has that id.ErrorResponse
500The database could not be read.ErrorResponse
PUT/api/quiz-attempts/{attempt_id}/grades/{question_id} Bearer token

Award points on one question

Records the marker's points — and, when sent, feedback for the taker — on one manually graded question of a submitted attempt. Full marks records the question as correct. While the attempt awaits finalization the grade is a draft the taker cannot see; on an already finalized attempt the change rescores it at once, and if its results were released the learning record gains a further score row labelled as a regrade. Requires quizzes:grade over the quiz.

Parameters

NameInTypeRequiredDescription
attempt_idpathstring (uuid)yesUUID id of the attempt.
question_idpathstring (uuid)yesUUID id of a question on the attempt's paper.

Request body

application/jsonrequiredGradeQuestionRequest
FieldTypeRequiredDescription
points_awardedintegeryes

Whole points, 0 up to the question's points_possible on this paper. Full marks records the question as correct; anything less as incorrect.

minimum 0

feedback_markdownstring | nullno

A note to the taker, as markdown, shown beside the question in their answer review once the attempt's results are released. Omit to keep the current note; send null or empty to clear it.

at most 20000 characters

Responses

StatusDescriptionBody
200The paper with the grade recorded.QuizAttemptReview
400The request body failed validation.ErrorResponse
401The access token is missing or invalid.ErrorResponse
403The caller can read this quiz but does not hold quizzes:grade.ErrorResponse
404No visible attempt has that id.ErrorResponse
409The attempt is still in progress, the question is not on its paper or not manually graded, or the points exceed what the question is worth.ErrorResponse
500The database could not be reached, or the write failed.ErrorResponse
POST/api/quiz-attempts/{attempt_id}/finalize-grading Bearer token

Finalize an attempt's grading

Scores a pending_grading attempt from its points once every manually graded question has some, and moves it to submitted. Nothing is released by this: the taker sees the result only once an administrator releases the attempt. Requires quizzes:grade over the quiz.

Parameters

NameInTypeRequiredDescription
attempt_idpathstring (uuid)yesUUID id of the attempt.

Responses

StatusDescriptionBody
200The scored paper.QuizAttemptReview
401The access token is missing or invalid.ErrorResponse
403The caller can read this quiz but does not hold quizzes:grade.ErrorResponse
404No visible attempt has that id.ErrorResponse
409The attempt is not awaiting grading, or a question still wants points.ErrorResponse
500The database could not be reached, or the write failed.ErrorResponse
POST/api/quizzes/{quiz_id}/release-attempts Bearer token

Release chosen attempts' results

Stamps results_released_at on the named attempts of the quiz, making each taker's score and pass/fail visible to them and — for attempts that needed a marker — reporting the score into their learning record. Only scored (submitted), unreleased attempts of this quiz are stamped; the rest of the list is skipped and the response says which ids went. Expired in-progress attempts are finalized first. Requires quizzes:write over the quiz's owner.

Parameters

NameInTypeRequiredDescription
quiz_idpathstringyesUUID id, or a slug resolved within the organization given by the org query parameter.
orgquerystringnoOrganization UUID id or slug to filter by (and to resolve slug refs in).

Request body

application/jsonrequiredReleaseAttemptsRequest
FieldTypeRequiredDescription
attempt_idsarray of string (uuid)yes

Attempts of this quiz to release. Ones already released, still in progress or still awaiting grading are skipped, not refused; ids of other quizzes are ignored.

1–500 items

Responses

StatusDescriptionBody
200Which attempts were released.ReleaseAttemptsResponse
400The request body failed validation.ErrorResponse
401The access token is missing or invalid.ErrorResponse
403The caller can read this quiz but does not hold quizzes:write.ErrorResponse
404No visible quiz has that id or slug.ErrorResponse
500The database could not be reached, or the write failed.ErrorResponse