Question Types Reference
WittyForm supports 20 question types for quizzes. Each type has its own scoring behavior, validation options, and configuration properties. This reference covers every type in detail.
Multiple Choice (Single Answer)
Presents a list of options where only one can be selected. This is the most common quiz question type.
| Property | Type | Description |
|---|---|---|
options | string[] | Array of answer choices |
correctAnswer | number | Index of the correct option (0-based) |
shuffleOptions | boolean | Randomize option order per attempt |
points | number | Points awarded for correct answer |
Scoring: Full points for correct answer, zero for incorrect. No partial credit.
Checkboxes (Multiple Select)
Like multiple choice but allows selecting more than one option. Useful for "select all that apply" questions.
| Property | Type | Description |
|---|---|---|
options | string[] | Array of answer choices |
correctAnswers | number[] | Indices of all correct options |
minSelect | number | Minimum selections required |
maxSelect | number | Maximum selections allowed |
partialCredit | boolean | Award partial points for partially correct answers |
Scoring: When partialCredit is enabled, points are calculated as (correct selections / total correct answers) × points, minus deductions for wrong selections.
True/False
A simplified multiple choice with exactly two options: True and False.
| Property | Type | Description |
|---|---|---|
correctAnswer | boolean | true or false |
points | number | Points for correct answer |
Scoring: Full points for correct, zero for incorrect.
Short Answer
A single-line text input. Answers are compared against accepted values.
| Property | Type | Description |
|---|---|---|
acceptedAnswers | string[] | List of accepted answer strings |
caseSensitive | boolean | Whether matching is case-sensitive |
trimWhitespace | boolean | Ignore leading/trailing whitespace |
maxLength | number | Maximum character count |
Scoring: Full points if the response matches any accepted answer.
Long Answer
A multi-line text area for open-ended responses. Typically used in surveys or manually graded assessments.
| Property | Type | Description |
|---|---|---|
minLength | number | Minimum character count |
maxLength | number | Maximum character count |
placeholder | string | Placeholder text in the textarea |
rows | number | Visible rows (default: 4) |
Scoring: Manual grading only. Cannot be auto-scored.
Fill in the Blank
Presents a sentence with one or more blanks that the respondent fills in. Type three underscores (___) wherever you want a blank to appear in the question text.
// Question text example
"The capital of France is ___ and it sits on the ___ river."
// Configuration
{
"blanks": [
{ "acceptedAnswers": ["Paris", "paris"], "caseSensitive": false },
{ "acceptedAnswers": ["Seine", "seine"], "caseSensitive": false }
],
"pointsPerBlank": 1
}Scoring: Points awarded per correct blank. Total = pointsPerBlank × number of blanks.
Ranking
Respondents drag items into the correct order.
| Property | Type | Description |
|---|---|---|
correctOrder | string[] | Items in the correct sequence |
partialCredit | boolean | Award points for each correctly placed item |
Scoring: Full points for exact match, or partial points per correctly positioned item.
Picture Choice
Like multiple choice but each option is an image with an optional label.
| Property | Type | Description |
|---|---|---|
options | { imageUrl: string; label?: string }[] | Image choices |
correctAnswer | number | Index of the correct image |
columns | number | Grid columns (2, 3, or 4) |
multiSelect | boolean | Allow multiple image selections |
Scoring: Same as multiple choice or multiple select depending on multiSelect.
Rating Scale
A numeric scale (for example, 1 to 5 stars or 1 to 10). Commonly used in surveys.
| Property | Type | Description |
|---|---|---|
min | number | Minimum value (default: 1) |
max | number | Maximum value (default: 5) |
step | number | Increment step (default: 1) |
style | string | "stars", "numbers", "slider", or "emoji" |
labels | { min: string; max: string } | Labels for endpoints (e.g., "Poor" / "Excellent") |
Scoring: The selected value is used directly as the score, or mapped to a correct answer.
Matrix (Rating Grid)
A grid of rows and columns. Each row is a sub-question with the same set of column options.
| Property | Type | Description |
|---|---|---|
rows | string[] | Row labels (sub-questions) |
columns | string[] | Column options |
correctAnswers | Record<number, number> | Map of row index to correct column index |
multiplePerRow | boolean | Allow selecting multiple columns per row |
Scoring: Points awarded per correctly answered row.
Dropdown
A dropdown select menu. Functionally identical to multiple choice but takes less vertical space.
| Property | Type | Description |
|---|---|---|
options | string[] | Dropdown choices |
correctAnswer | number | Index of the correct option |
placeholder | string | Placeholder text (default: "Select an option") |
searchable | boolean | Enable search filtering for long lists |
Scoring: Same as multiple choice.
Date
A date picker input. Can be scored against a correct date or used for data collection.
| Property | Type | Description |
|---|---|---|
correctAnswer | string | Correct date in ISO 8601 format |
minDate | string | Earliest selectable date |
maxDate | string | Latest selectable date |
format | string | Display format ("MM/DD/YYYY", "DD/MM/YYYY", etc.) |
Scoring: Full points for exact date match.
Yes/No
A single-tap binary choice with exactly two options: Yes and No.
| Property | Type | Description |
|---|---|---|
correctAnswer | boolean | true for Yes, false for No |
points | number | Points for correct answer |
Scoring: Full points for correct, zero for incorrect.
Star Rating
A row of stars the respondent taps to rate. Commonly used for satisfaction and feedback.
| Property | Type | Description |
|---|---|---|
max | number | Number of stars (default: 5) |
allowHalf | boolean | Allow half-star ratings |
Scoring: The selected value is used directly, or mapped to a correct answer.
Opinion Scale
A horizontal row of numbered buttons (often 0 to 10) for measuring sentiment or agreement.
| Property | Type | Description |
|---|---|---|
min | number | Lowest value (default: 0) |
max | number | Highest value (default: 10) |
labels | { min: string; max: string } | Labels for the endpoints |
Scoring: The selected value is used directly as the score.
Slider
A draggable slider for selecting a value along a continuous range.
| Property | Type | Description |
|---|---|---|
min | number | Minimum value |
max | number | Maximum value |
step | number | Increment step (default: 1) |
Scoring: The selected value is used directly, or mapped to a correct answer.
NPS
A Net Promoter Score question. Respondents pick a value from 0 to 10 to rate how likely they are to recommend you.
| Property | Type | Description |
|---|---|---|
lowLabel | string | Label under the 0 end (e.g., "Not likely") |
highLabel | string | Label under the 10 end (e.g., "Very likely") |
Scoring: The selected value is recorded for NPS reporting (Promoters, Passives, Detractors).
Name
A field for collecting the respondent’s name. Used for data collection, leaderboards, and certificates.
| Property | Type | Description |
|---|---|---|
required | boolean | Whether the field must be filled |
placeholder | string | Placeholder text |
Scoring: Not scored. Used for data collection.
A field for collecting and validating an email address.
| Property | Type | Description |
|---|---|---|
required | boolean | Whether the field must be filled |
placeholder | string | Placeholder text |
Scoring: Not scored. Validates email format on submit.
Phone
A field for collecting a phone number with formatting support.
| Property | Type | Description |
|---|---|---|
required | boolean | Whether the field must be filled |
placeholder | string | Placeholder text |
Scoring: Not scored. Used for data collection.