QuizQuestion
A request or response body; the type column links to the schemas it refers to.
QuizQuestion
| Field | Type | Required | Description |
|---|---|---|---|
| id | string (uuid) | yes | — |
| question_bank_id | string (uuid) | yes | — |
| kind | string | yes | 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" |
| prompt | string | yes | — |
| prompt_format | string | yes | 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_name | string | null | yes | 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_display | boolean | yes | 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. |
| explanation | string | null | yes | Shown in answer review when the quiz reveals correct answers. |
| points | integer | yes | 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_grading | boolean | yes | 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_markdown | string | null | yes | 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_takers | boolean | yes | Whether takers see the rubric too — beneath the prompt while answering, and again in answer review. Off, the rubric reaches markers only. |
| drawing_starting_image | string | null | yes | 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_boolean | boolean | null | yes | The answer of a true_false question; null for every other kind. |
| correct_number | number | null | yes | The answer of a numeric question; null for every other kind. |
| tolerance | number | null | yes | How far a numeric response may stray and still count; null otherwise. |
| position | integer | yes | — |
| options | array of QuizQuestionOption | yes | 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_at | string (date-time) | null | yes | When set, the record is retired; it stays readable but should not grow. |
| created_at | string (date-time) | yes | — |
{
"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"
}