Quiz & Assessment Authoring
Who this guide is for: Admins, Owners and Instructors (on the courses they are assigned to) building quizzes inside a course.
A quiz lives on a Quiz / Assessment module in a course. You add questions, mark the correct answers, set points, and configure the pass mark and attempt rules — all from the course editor. On a published course, click Start new version first: a published version is read-only.
Step 1 — Add a quiz module
- Go to Courses and open the course.
- On the Modules tab, add a module of type Quiz / Assessment.
Step 2 — Build the quiz
- On the quiz module row, click ▼ Manage Questions.
- If the module has no quiz yet, click Create quiz.
- Configure Settings:
- Passing score (%) — the percentage required to pass.
- Max attempts (0 = ∞) —
0means unlimited. - Time limit (min) — leave blank for no limit.
- Shuffle questions and Shuffle choices — randomize order per attempt.
- Click Save settings.
Step 3 — Add questions
- Click Add question.
- Choose the Type, enter the Question text and configure the type’s answers:
| Question type | Answer rule |
|---|---|
| Multiple choice (one answer) | Add 2–8 choices; select the single correct one |
| True / False | Pick whether True or False is correct |
| Multiple select (many answers) | Add 2–8 choices; check all correct ones |
| Short answer (auto-graded) | Add 1–8 accepted answers; the learner types their answer and it is marked correct if it matches any one of them |
| Essay (manually graded) | No answers to configure — an instructor grades the submission |
| File upload (manually graded) | No answers to configure — an instructor grades the uploaded file |
- Set Points (1–10) for the question.
- Click Save question.
Short-answer questions (LMS-729)
A short-answer question is graded automatically the moment the learner submits — there is no instructor step, unlike Essay and File upload.
- Choose Short answer (auto-graded) as the type.
- Enter the question text.
- Under Accepted answers, list every spelling you will accept — one per row. Click Add accepted answer for alternates. Any one match scores the question’s full points; there is no partial credit.
- Under Matching, decide how strict the comparison is:
| Option | Default | Effect |
|---|---|---|
| Case-sensitive (“Ottawa” ≠ “ottawa”) | Off | When off, Ottawa and ottawa both match. Turn it on for answers where capitalisation is the point (a code, a chemical symbol). |
| Ignore extra spaces around and between words | On | When on, leading/trailing spaces and doubled spaces between words are ignored. Turn it off only when spacing itself is part of the answer. |
Writing good accepted answers:
- List the realistic variants:
Ottawa,City of Ottawa,Ottawa, Ontario. - Accents are significant.
côtéandcoteare different words in French and do not match each other. If you will accept the unaccented spelling, add it as its own row. - Both spellings of a term (
color/colour) each need a row. - A blank row is ignored, so an empty accepted-answer list is rejected on save.
Learners never receive the accepted answers before they submit — the list is stripped server-side. After submitting, the results page shows what they typed and, if they were wrong, the accepted answers.
Edit or delete any question from its row. Deleting a question removes it from the quiz (the learner’s past attempts are unaffected).
Knowledge checks — practice inside a lesson, not graded (LMS-1163)
A knowledge check is a short set of questions a learner answers at the end of a lesson to test their understanding. It gives instant feedback with the explanation, the learner can try again as often as they like, and nothing is recorded: no score, no attempt, no effect on completion or the certificate.
- Build the quiz as in Steps 1–3. Use multiple choice, true/false or multi-select questions, and write an explanation for each — the explanation is what the learner sees after answering. (Short-answer, essay and file-upload questions are not shown in a knowledge check.)
- On the quiz module row, click the edit button and tick Knowledge check, not graded. Required to complete the course turns off and cannot be turned back on while the box is ticked. Save.
- Open the lesson the check belongs to (an HTML lesson) and add a quiz block: choose the quiz module in Quiz module, then Add block. Put it last so learners read the lesson first.
Learners do not see the knowledge check as a separate module in the course outline — only inside the lesson. Untick the box to turn the module back into a graded quiz; nothing was recorded while it was a knowledge check, so there are no attempts to clean up.
Generate questions with AI (LMS-586)
Available only when your platform has AI features enabled. The button does not appear otherwise.
The AI drafts quiz questions from source text you provide — it never invents material beyond what you paste, and it never adds anything to the quiz on its own. You review every draft and choose which to keep.
- In the quiz builder, click Generate with AI.
- Paste the course document’s text into Source text (a few paragraphs at minimum). Long documents are split into sections automatically so questions cover the whole text, not just the opening pages.
- Choose how many Questions to draft (1–20) and the output Language (English or French).
- Click Generate draft questions and wait — longer documents take longer.
- Review the drafts: each shows the question, its type, and the correct answer(s). Untick any you don’t want, then click the add button (it reads Add 3 questions when three are ticked). Added questions become ordinary quiz questions you can edit like any other.
Good to know:
- If you asked for fewer questions than the document has sections, a notice tells you part of the document was not examined — raise the question count or generate again with the remaining text.
- Generated questions can be wrong or miss nuance. Verify each against the source before publishing — you are the author of record, the AI is a drafting assistant.
- Your source text is processed in Canada (AWS ca-central-1) and is never used to train any model.
Import questions from a file — CSV, GIFT or AIKEN (LMS-749, LMS-873)
If your questions already exist outside the platform — generated with an AI tool, kept in a spreadsheet, or exported from Moodle or another question-authoring tool — you can upload them in one step instead of entering each one by hand. Three formats are accepted:
| Format | File | Where it comes from |
|---|---|---|
| CSV template | .csv | Our template (below) — any spreadsheet application |
| GIFT | .gift or .txt | Moodle’s question export (Question bank → Export → GIFT format) and most authoring tools |
| AIKEN | .txt | Simple multiple-choice files; Moodle and many tools export it |
- In the quiz builder, click Import questions. The import panel opens.
- Leave File format on Detect automatically, or pick the format if you
know it. Detection uses the file extension (
.csv,.gift) and, for.txtfiles, the content:ANSWER:lines mean AIKEN,{…}answer blocks mean GIFT. - Under Question file, choose your file (maximum 1 MB, 500 questions).
- Nothing is imported yet. The panel checks the file and shows:
- the format it read,
- how many questions are ready to import, and a preview list of them,
- every question that will be skipped, with its row (CSV) or line (GIFT / AIKEN) number and the reason.
- If the preview is right, click the import button (it reads Import 12 questions for twelve). Otherwise click Cancel, fix the file, and choose it again. Changing File format re-checks the same file.
- Imported questions are added to the end of the quiz and are editable afterwards like any other question. The report stays on screen so you can fix the skipped questions and import a file containing just those.
Every format goes through the same checks — question text up to 2,000 characters, choices up to 500 characters, 2–8 choices (2–6 in the CSV template, which has six choice columns), one correct answer for single-answer multiple choice — so a question that would be refused in the builder is refused in the import too, with a reason.
CSV template columns
Click Download CSV template and open it in any spreadsheet application. It contains one example row per supported type. Fill in one row per question, keeping the header row unchanged.
| Column | Required | Notes |
|---|---|---|
type | Yes | multiple_choice (or mcq), true_false (or tf), multi_select, short_answer, essay, file_upload |
question | Yes | The question text (max 2,000 characters) |
choice_a … choice_f | Choice types | 2–6 choices; leave unused columns blank. For True/False, leave blank to get standard True/False labels |
correct | Yes (except essay / file upload) | Multiple choice: one letter (B). Multi-select: letters separated by ; (A;C). True/False: TRUE or FALSE (VRAI/FAUX accepted). Short answer: accepted answers separated by ; |
explanation | No | Shown as answer feedback (max 2,000 characters) |
points | No | Whole number 1–10; blank = 1 |
File rules: comma-separated CSV (semicolons are reserved for multi-value cells), quoted fields for text containing commas, maximum 500 questions per file. Column order does not matter and extra columns are ignored.
GIFT files
GIFT is Moodle’s plain-text format. Separate questions with a blank line (a question itself must not contain one). A sample file:
// Lines starting with // are comments and are ignored.
$CATEGORY: Geography
::Capital of Canada:: What is the capital of Canada? {
=Ottawa#Right — the capital since 1857.
~Toronto#No, Toronto is the largest city.
~Vancouver
}
::Pacific:: The Pacific is the largest ocean on Earth. {T}
::Australia:: What is the capital of Australia? {=Canberra =Canberra ACT}
::Borders:: Which countries border France? {
~%50%Spain
~%50%Belgium
~%-100%Portugal
####Portugal borders Spain, not France.
}
::Tectonics:: Explain how tectonic plates create mountain ranges. {}
Canada's capital is {=Ottawa ~Toronto} in Ontario.How each GIFT construct is imported:
| GIFT | Imported as | Notes |
|---|---|---|
{=right ~wrong ~wrong} | Multiple choice (one answer) | Answers keep their order |
{~%50%A ~%50%B ~%-100%C} | Multiple select | Allowed only when there is no = answer and the positive weights add up to 100 %. Every positively weighted answer is correct; the question is scored all-or-nothing, like any multiple-select question |
{T} {TRUE} {F} {FALSE} | True / False | |
{=answer =other answer} | Short answer | Each = answer is an accepted answer |
{} | Essay (manually graded) | |
Text {=a ~b} more text. | Multiple choice | ”Missing word” format: the gap is shown as _____ in the question |
::title:: | — | Dropped; questions have no separate title |
[html] [markdown] [plain] [moodle] | — | [html] is reduced to plain text (tags removed, entities decoded); the others are kept as written |
####general feedback | Explanation | Shown to the learner after they submit |
=answer#feedback | Explanation | Used only when there is no #### general feedback: the feedback written on the correct answer(s). Feedback on wrong answers is not imported — questions have one explanation, not one per choice |
{T#wrong-answer feedback#right-answer feedback} | Explanation | The right-answer feedback |
~%-50%wrong (negative weight) | A wrong answer | There is no negative marking |
\~ \= \# \{ \} \: \\ | The literal character | \n is a line break |
$CATEGORY: | — | Ignored |
These GIFT question types have no equivalent here, so the question is skipped and reported — never silently dropped:
| GIFT | Reported as |
|---|---|
Matching — {=Canada -> Ottawa =France -> Paris} | ”matching questions (->) are not supported” |
Numerical — {#1857}, {#3.14:0.01}, {#3.1..3.2} | ”numerical questions ({#…}) are not supported” |
Partial credit — =%50% on a one-answer or short-answer question, or multi-answer weights that do not add up to 100 % | “partial-credit weights (%50%) are not supported…” |
Text with no {…} block (a Moodle description) | “no answer block {…}” |
Two or more {…} blocks in one question (embedded / cloze) | “more than one answer block {…}” |
Points: GIFT has no points field — every imported question is worth 1 point. Change it afterwards in the builder if needed.
AIKEN files
AIKEN holds single-answer multiple-choice questions only:
What is the capital of Canada?
A. Toronto
B. Ottawa
C. Vancouver
ANSWER: B
Quelle ville est la capitale du Québec?
A) Montréal
B) Québec
C) Trois-Rivières
ANSWER: B- The question text is everything before the first option (it may span several lines).
- An option is a capital letter, then
.or), a space, and the text. ANSWER:gives the letter of the correct option and ends the question. A blank line between questions is optional.- Files saved on Windows (CRLF line endings) or with a UTF-8 BOM, and accented French text, import as-is. Save the file as UTF-8.
Import troubleshooting
| Message | Cause | Fix |
|---|---|---|
| ”The file format wasn’t recognized” | Detection found no CSV header, no GIFT {…} block and no AIKEN ANSWER: line | Pick the format under File format, or check the file is the one you meant |
| ”The file is too large — maximum 1 MB” | The file is over 1 MB | Split it into several files |
| ”The file is missing required columns” | CSV header row was edited or the file isn’t comma-separated | Re-download the template; keep type, question, correct in the header |
| ”unknown question type” | The CSV type cell isn’t one of the supported values | Use the exact type names from the table above |
| ”multiple choice (one answer) allows only one correct answer” | Several correct answers on a one-answer question (CSV: several letters; GIFT: several =; AIKEN: several letters after ANSWER:) | Use multi_select (CSV) or ~%50% weights (GIFT), or keep one answer |
| ”a correct letter points at an empty choice” | CSV correct names a choice column that’s blank | Fill the choice cell or change the letter |
| ”missing the ANSWER: line” | An AIKEN question’s options are not followed by ANSWER: X | Add the line |
| ”the ANSWER letter does not match any option” | ANSWER: E when the options stop at D, or ANSWER: followed by a word | Use the letter of one of the options |
| ”no lettered options…” | AIKEN text followed by a blank line or ANSWER: with no A. / B) options — often a title line at the top of the file | Remove the stray line, or add the options |
| ”could not be read — check the braces…” | A GIFT { without its }, an unterminated ::title, or answer text not starting with = or ~ | Fix the braces; escape a literal { } = ~ # : with a backslash |
| ”too many choices (max 8)“ | A GIFT or AIKEN question with 9 or more answers | Split the question or remove choices |
| Questions skipped, others imported | Per-question validation failed for those only | Fix the reported questions and import a file containing just them |
Configuration reference
| Field | Where | Notes |
|---|---|---|
| Passing score | Quiz settings | 1–100 % |
| Max attempts | Quiz settings | 0 = unlimited |
| Time limit | Quiz settings | Minutes; blank = none |
| Shuffle questions, Shuffle choices | Quiz settings | Per-attempt randomization |
| Knowledge check, not graded | Module edit (quiz modules) | Practice inside a lesson: instant feedback, unlimited retries, nothing recorded, never required, not listed in the outline |
| Question type | Add/Edit question | multiple_choice / true_false / multi_select / short_answer / essay / file_upload |
| Points | Add/Edit question | 1–10 per question |
| Accepted answers | Add/Edit question (short answer) | 1–8 rows; any one match scores full points |
| Case-sensitive | Add/Edit question (short answer) | Default off |
| Ignore extra spaces | Add/Edit question (short answer) | Default on |
Reordering questions
Question order is pedagogy, not decoration — a warm-up first, the hard case last — so the order you see in the builder is the order a learner gets (unless the quiz shuffles, see below).
Each question row has ↑ and ↓ buttons. They are ordinary buttons, so the order can be changed from the keyboard and is announced by a screen reader; the button at each end of the list is disabled rather than hidden, so the controls do not move under your pointer as you work down a list.
Each move saves immediately. The whole order is written, not a single swap, so two people reordering the same quiz at once end up on one of the two orders rather than on a broken one.
Shuffle overrides order. If the quiz has Shuffle questions on, the order here is the authoring order and each learner still gets a random one. Turn shuffle off if the sequence matters.
Reviewing attempts
The Attempts panel sits under the question list, and it answers the question a score cannot: what did they actually write? On a published course, where the question builder is read-only, open it with the Attempts button on the quiz module’s row.
Each row is one attempt — the learner, which attempt it was, when it started, when it was submitted, how long it took, and the score with pass or fail. An attempt still in progress is shown as such and cannot be opened: there is nothing final to review yet.
View answers expands one attempt into its questions, in quiz order:
| Shown | Notes |
|---|---|
| Their answer | The choices they selected, resolved to the choice text, or their typed answer. Coloured by correctness. |
| Correct answer | Omitted for essay and file-upload questions, which have no single correct answer |
| Instructor feedback | Whatever was written when the answer was graded |
A question the learner skipped is listed with “(no answer given)” rather than being left out — a skipped question is information.
File-upload answers show the filename as a button. Clicking it mints a download link that expires after 15 minutes; the link is never embedded in the page, and a file that failed the malware scan is refused.
Who can see attempts
Reviewing someone else’s answers needs the same reporting permission as the rest of the analytics, and it is narrowed twice over:
| Role | Sees |
|---|---|
| Owner, Admin | Every attempt |
| Instructor | Attempts on the quizzes of the courses they are assigned to |
| Group Admin | Attempts by members of their assigned groups |
| Manager | Attempts by people in their reporting chain |
A Group Admin with no groups assigned sees nothing, rather than everything.
The same panel appears on Analytics → Learner Drill-Down, per course, for the times the question starts from a person rather than from a quiz.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| ”Add at least two choices” | Fewer than two non-empty choices | Add more choices |
| ”Add at least one accepted answer.” | A short-answer question was saved with every accepted-answer row blank | Type at least one accepted answer |
| Learners marked wrong despite a correct-looking answer | The accepted list is missing that variant, or the case-sensitive option is on | Add the variant as a new accepted answer, or turn off case-sensitivity |
| An accented answer is marked wrong | Accents are significant and are never folded | Add the unaccented spelling as an additional accepted answer |
| ”Mark at least one choice correct” | No correct answer selected | Select/check the correct choice(s) |
| A knowledge check does not appear in the lesson | The quiz module is flagged, but no quiz block points at it | Add a quiz block to the lesson and choose the module |
| A learner sees a full quiz instead of instant feedback | The module is not flagged as a knowledge check | Edit the module and tick Knowledge check, not graded |
| Manage Questions button missing | Module isn’t a Quiz / Assessment type, or the course is published and no draft is open (the row then shows only Attempts) | Use a Quiz / Assessment module; on a published course click Start new version |