Multi-select field
Use multi_select when you want respondents to choose several options from a dropdown. Its submission value is an array of strings.
Configuration
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
options | string[] | Yes | — | Choices shown in the dropdown. |
maxSelections | integer | No | No limit | Maximum choices a respondent can pick. Must be from 1 to 1000. |
scoring | number[] | No | Every option scores 0 | One score per option, in the same order as options. |
capacity | (integer | null)[] | No | No limit | One entry per option: an integer from 0 to 999,999, or null for no limit. Sets the maximum responses each option accepts across submissions. |
randomize | boolean | No | false | Set to true to show each respondent the options in a different order. |
For shared field properties such as name, label, and required, see Shared field properties.
Validation respondents see
- If the field is required and nothing is selected, the respondent cannot continue.
- When the selection limit is reached, the remaining options cannot be picked. An answer above
maxSelectionsblocks the page and is rejected again at submit. - An option that has reached its capacity cannot be picked.
Submission value
The answer is stored as a string[]. For example, choosing Slack and Linear produces ["Slack", "Linear"].
defaultValue is ignored for multi_select. If the respondent skips a page through form logic, choices made on that page are dropped before the submission is stored. For multi-answer fields, scoring sums the scores of the unique selections.
Example
{
"type": "multi_select",
"name": "tools_used",
"label": "Which tools does your team use?",
"options": ["Slack", "Notion", "Linear", "Figma", "GitHub"],
"maxSelections": 3,
"scoring": [1, 0, 2, 1, 2],
"capacity": [null, 50, 100, null, 200],
"randomize": true,
"required": true
}