Serve Module Quiz
Serve module-quiz questions, creating or reusing the attempt server-side.
Auth: portal API key + X-Learner-Email header. 404 “Not enrolled in this course” if the header learner has no enrollment row for course_id.
Attempt lifecycle (server-owned, no client input selects questions):
- If the learner has an in-progress attempt for this module (finished_at IS NULL), this call is STICKY: it returns the exact same attempt_id + questions that were served when the attempt was created, so refreshing the page never reshuffles an in-flight quiz.
- If there is no in-progress attempt (first attempt, or the previous attempt for this module was already graded), a NEW attempt is created and stratified-random questions are drawn per difficulty tier, EXCLUDING every question_version_id the learner has already been served for this module — so a retry after a finished attempt always draws a fresh, previously-unseen set (falls back to repeats only once the pool of unseen questions is exhausted).
Returns 200 . questions is
[] with every answer-key field
(correct/key_points/rubric) stripped; id is str(question_version_id) and
must be echoed back as the answers’ question_id on grade. 404
quiz_not_available if the module has no question pool.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Response
Successful Response