TakerQuestion

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

TakerQuestion

FieldTypeRequiredDescription
question_idstring (uuid)yes—
positionintegeryes—
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. Fetch the file through the attempt's question 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.

pointsintegeryes

What this question is worth on this paper, as snapshotted when it was built.

minimum 1 · maximum 1000

manually_gradedbooleanyes

Whether a marker will award this question's points by hand — the attempt's score waits for them.

rubric_markdownstring | nullyes

The marking scheme, when its author chose to show it to takers; null otherwise.

at most 50000 characters

optionsarray of TakerQuestionOptionyes

Choices, ordering items or the left column of a matching question, in the order this attempt presents them — correctness stripped. Empty for true_false, short_answer, numeric, fill_in_blank, long_answer and drawing questions.

match_optionsarray of TakerQuestionOptionyes

The right column of a matching question in its own shuffled order, each entry identified by the option whose match_label it is. Empty for every other kind.

drawing_starting_imagestring | nullyes

drawing questions: the image the 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+/]+=*$

response_booleanboolean | nullyes—
selected_option_idsarray of string (uuid) | nullyes

Chosen options of a choice question, or every item of an ordering question in the taker's arrangement.

response_textstring | nullyes

A short_answer or long_answer response.

response_numbernumber | nullyes

A numeric response.

response_matchesarray of ResponseMatch | nullyes

The pairs made so far on a matching question.

response_blanksarray of string | nullyes

A fill_in_blank response: one string per blank in prompt order, empty where the taker left a blank unfilled.

response_drawingstring | nullyes

A drawing response: the taker's canvas as one image data URL, the starting image beneath their strokes.

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

answered_atstring (date-time) | nullyes—
jsonExample
{
  "question_id": "1b671a64-40d5-491e-99b0-da01ff1f3341",
  "position": 0,
  "kind": "true_false",
  "prompt": "string",
  "prompt_format": "plaintext",
  "prompt_pdf_file_name": "string",
  "prompt_pdf_prefer_inline_display": true,
  "points": 1,
  "manually_graded": true,
  "rubric_markdown": "- 2 points: names both hazards\n- 1 point: names one\n- 0: neither",
  "options": [
    {
      "id": "1b671a64-40d5-491e-99b0-da01ff1f3341",
      "label": "string"
    }
  ],
  "match_options": [
    {
      "id": "1b671a64-40d5-491e-99b0-da01ff1f3341",
      "label": "string"
    }
  ],
  "drawing_starting_image": "data:image/png;base64,iVBORw0KGgo…",
  "response_boolean": true,
  "selected_option_ids": [
    "1b671a64-40d5-491e-99b0-da01ff1f3341"
  ],
  "response_text": "string",
  "response_number": 0,
  "response_matches": [
    {
      "option_id": "1b671a64-40d5-491e-99b0-da01ff1f3341",
      "match_option_id": "1b671a64-40d5-491e-99b0-da01ff1f3341"
    }
  ],
  "response_blanks": [
    "string"
  ],
  "response_drawing": "string",
  "answered_at": "2026-01-01T00:00:00.000Z"
}