Every questionnaire in Strapi has a metadata component that defines its identity, configuration, and relationship to other system entities.
| Field |
Type |
Format |
Description |
name |
string |
Free text |
Display name for the questionnaire (shown in Strapi admin) |
slug |
string |
^[a-z]+(-[a-z]+)*$ |
URL-safe identifier. Used in sync commands, preview URLs, and routing. Must be lowercase with hyphens only. |
Slug examples: household, public-health, incoming-es, pet-health-claim
| Field |
Type |
Description |
questionList |
repeatable |
Ordered list of question references that defines the default question sequence |
Each entry in questionList has:
| Field |
Type |
Description |
name |
string |
The questionId of a question in the questions dynamic zone |
The order of entries in questionList determines the default flow sequence. Rules can override this order by routing to any question ID.
| Field |
Type |
Description |
vertical |
relation |
Links this questionnaire to a Vertical content type in Strapi |
The vertical determines insurance type, branding, Stripe product IDs, and other product-level configuration. A questionnaire must be linked to a vertical for signup flows.
| Field |
Type |
Description |
questionnaireType |
enum |
Categorizes the questionnaire’s purpose |
Enum values:
| Value |
Description |
SIGNUP |
New policy purchase flow |
CLAIM |
Insurance claim submission flow |
ADJUST_POLICY |
Modify an existing policy |
CANCEL_POLICY |
Cancel an existing policy |
| Field |
Type |
Description |
regions |
multi-select |
Countries/regions where this questionnaire is available |
Supports 100+ country codes. Used to determine which questionnaire version to show based on the user’s location or selected region.
| Field |
Type |
Description |
type |
enum |
Defines the questionnaire’s structural type |
Enum values:
| Value |
Description |
singleRegion |
One questionnaire for one region |
multiRegion |
One questionnaire serving multiple regions |
claim |
Claims flow |
adjustPolicy |
Policy adjustment flow |
cancelPolicy |
Policy cancellation flow |
| Field |
Type |
Default |
Description |
isDependent |
boolean |
false |
Marks this questionnaire as a dependent/secondary questionnaire |
Dependent questionnaires are variants that inherit from a main questionnaire. They are used for regional variations or conditional sub-flows.
| Field |
Type |
Description |
constants |
repeatable |
Key-value pairs available to the questionnaire at runtime |
Each entry has:
| Field |
Type |
Format |
Description |
key |
string |
camelCase |
The constant name |
value |
string |
JSON string |
The constant value (parsed as JSON at runtime) |
Example: A constant maxAge with value "65" would be available in rules and validations.
| Field |
Type |
Format |
Description |
translationKey |
string |
camelCase |
Prefix for i18n translation keys |
All translatable strings in the synced questionnaire file are wrapped with this prefix. For example, if translationKey is household, a question title becomes t('household.dateOfBirth.question').
| Field |
Type |
Description |
variants |
repeatable |
Regional or conditional variants of the questionnaire |
Variants allow a single questionnaire definition to have different behaviors based on region or other conditions, without creating entirely separate questionnaires.
| Field |
Type |
Description |
hiddenFields |
repeatable |
Fields that are part of the data model but not shown in the form |
Hidden fields can be pre-populated from URL parameters, previous answers, or external data sources. They are included in the submitted data but never rendered as visible questions.
| Field |
Type |
Description |
nestedQuestionIds |
repeatable |
Cross-question dependencies |
Defines which question IDs are referenced by other questions. Used by the framework to manage state dependencies — for example, when one question’s visibility depends on another question’s answer.
| Field |
Type |
Description |
progressBar |
auto-calculated |
Progress bar configuration |
The progress bar is automatically calculated from the question ordering. The following question types are excluded from progress calculation:
BLOCKER
PROCESSING / CLAIM_PROCESSING / CANCEL_POLICY_PROCESSING
QUOTE / QUOTE_CUSTOM
REDIRECT
This means the progress bar only reflects questions where the user actively provides input.
| Field |
Type |
Description |
adjustmentIdsToPopulate |
repeatable |
Question IDs to pre-fill during policy adjustment flows |
When a user enters an ADJUST_POLICY flow, the answers from their existing policy are used to pre-fill these question IDs. This avoids asking the user to re-enter information they have already provided.
| Field |
Type |
Required |
Format/Constraints |
name |
string |
Yes |
Free text |
slug |
string |
Yes |
^[a-z]+(-[a-z]+)*$ |
questionList |
repeatable |
Yes |
Ordered question ID references |
vertical |
relation |
No |
Link to Vertical content type |
questionnaireType |
enum |
No |
SIGNUP, CLAIM, ADJUST_POLICY, CANCEL_POLICY |
regions |
multi-select |
No |
Country codes |
type |
enum |
No |
singleRegion, multiRegion, claim, adjustPolicy, cancelPolicy |
isDependent |
boolean |
No |
Default: false |
constants |
repeatable |
No |
key (camelCase) + value (JSON string) |
translationKey |
string |
No |
camelCase |
variants |
repeatable |
No |
Regional/conditional variants |
hiddenFields |
repeatable |
No |
Non-visible data fields |
nestedQuestionIds |
repeatable |
No |
Cross-question dependencies |
progressBar |
auto |
N/A |
Auto-calculated |
adjustmentIdsToPopulate |
repeatable |
No |
Question IDs for pre-fill |