QuizQuestion

A request or response body; the type column links to the schemas it refers to.

QuizQuestion

FieldTypeRequiredDescription
idstring (uuid)yes—
question_bank_idstring (uuid)yes—
kindstringyes

true_false: answered true or false. multiple_choice: exactly one correct option. multi_select: several options may be correct, scored all-or-nothing. ordering: the options are items whose authored order is the answer. short_answer: the options are the accepted spellings of a typed answer. numeric: a number within a tolerance of correct_number. matching: each option is a label/match_label pair the taker reunites. fill_in_blank: the prompt's runs of three or more underscores are blanks, and the options are the accepted answers, each naming its blank_index. long_answer: a free-text essay answer with no accepted spellings, always graded by hand. drawing: the taker draws on a canvas, over drawing_starting_image when one is attached, always graded by hand.

one of "true_false" | "multiple_choice" | "multi_select" | "ordering" | "short_answer" | "numeric" | "matching" | "fill_in_blank" | "long_answer" | "drawing"

promptstringyes—
prompt_formatstringyes

plaintext: the prompt renders verbatim. markdown: the same prompt text renders as Markdown. pdf: an uploaded PDF carries the question; the prompt text is the instruction shown above it.

one of "plaintext" | "markdown" | "pdf"

prompt_pdf_file_namestring | nullyes

Original name of the attached PDF, for pdf prompts; null otherwise. The file itself is fetched through the question's pdf endpoint.

prompt_pdf_prefer_inline_displaybooleanyes

Whether the attached PDF is drawn beside the question or offered as a download only (`00051`). A one-page scenario belongs on screen; a long reference the taker works from on paper only buries the answers beneath it. Ignored on prompts with no PDF.

explanationstring | nullyes

Shown in answer review when the quiz reveals correct answers.

pointsintegeryes

What a full-marks answer is worth, 1 to 1000; an attempt's score is the points earned as a percentage of the points presented.

minimum 1 · maximum 1000

requires_manual_gradingbooleanyes

Whether a marker awards the points by hand. Forced on for long_answer and drawing questions. A machine-gradable kind flagged this way is still checked at submit, and the verdict shown to the marker as a suggestion; nothing counts until the marker records points.

rubric_markdownstring | nullyes

The marking scheme, as markdown: shown to markers on the grading page, and to takers only when rubric_visible_to_takers. Rendered through the sanitized pipeline question prompts use.

at most 50000 characters

rubric_visible_to_takersbooleanyes

Whether takers see the rubric too — beneath the prompt while answering, and again in answer review. Off, the rubric reaches markers only.

drawing_starting_imagestring | nullyes

The image a drawing question's taker draws over, as a data URL; null for a blank canvas, and on every other kind.

at most 3000000 characters · matches ^data:image\/(png|jpeg|webp|gif);base64,[A-Za-z0-9+/]+=*$

correct_booleanboolean | nullyes

The answer of a true_false question; null for every other kind.

correct_numbernumber | nullyes

The answer of a numeric question; null for every other kind.

tolerancenumber | nullyes

How far a numeric response may stray and still count; null otherwise.

positionintegeryes—
optionsarray of QuizQuestionOptionyes

Choices, ordering items (authored order = correct order), accepted short answers, matching pairs or the accepted answers of each blank, in authored order; empty for true_false, numeric, long_answer and drawing questions.

archived_atstring (date-time) | nullyes

When set, the record is retired; it stays readable but should not grow.

created_atstring (date-time)yes—
jsonExample
{
  "id": "1b671a64-40d5-491e-99b0-da01ff1f3341",
  "question_bank_id": "1b671a64-40d5-491e-99b0-da01ff1f3341",
  "kind": "true_false",
  "prompt": "string",
  "prompt_format": "plaintext",
  "prompt_pdf_file_name": "string",
  "prompt_pdf_prefer_inline_display": true,
  "explanation": "string",
  "points": 1,
  "requires_manual_grading": true,
  "rubric_markdown": "- 2 points: names both hazards\n- 1 point: names one\n- 0: neither",
  "rubric_visible_to_takers": true,
  "drawing_starting_image": "data:image/png;base64,iVBORw0KGgo…",
  "correct_boolean": true,
  "correct_number": 0,
  "tolerance": 0,
  "position": 0,
  "options": [
    {
      "id": "1b671a64-40d5-491e-99b0-da01ff1f3341",
      "label": "string",
      "is_correct": true,
      "match_label": "string",
      "blank_index": 0,
      "position": 0
    }
  ],
  "archived_at": "2026-01-01T00:00:00.000Z",
  "created_at": "2026-01-01T00:00:00.000Z"
}