Question Types
Every question in a Birdhouse questionnaire is a component added to the questions dynamic zone in Strapi. Each component maps to a specific type value at runtime.
This page lists every supported question type, its Strapi component name, key props, and typical usage.
Common Fields
Section titled “Common Fields”All question types share these fields:
| Field | Type | Required | Description |
|---|---|---|---|
questionId |
string | Yes | Unique identifier for the question. Used in rules, validations, and answer keys. |
questionType |
enum | No | Categorization: Personal, Tariff, or MedicalHistory |
required |
boolean | No | Whether the user must answer before continuing |
groupId |
enum | No | Logical grouping: intro, preQuote, postQuote, or signup |
screen |
component | No | Screen configuration (layout, header, description, button text, etc.) |
validations |
array | No | Post-submission validation rules |
Input Question Types
Section titled “Input Question Types”ADDRESS
Section titled “ADDRESS”| Strapi component | questionnaire.address-question |
| Runtime type | ADDRESS |
| Purpose | Address input with autocomplete (Google Maps) |
Props:
| Prop | Type | Description |
|---|---|---|
placeholders |
object | Custom placeholder text for street, houseNumber, postcode, city, additionalInformation |
manualAddressEntryTexts |
object | Text overrides when the user switches to manual address entry |
countryCode |
string | Fixed country code for address lookup |
dynamicCountryCode |
string | Question ID whose answer provides the country code dynamically |
Usage: Signup flows where a mailing or residence address is needed.
AUTOSUGGEST
Section titled “AUTOSUGGEST”| Strapi component | questionnaire.autosuggest-question |
| Runtime type | AUTOSUGGEST |
| Purpose | Text input with autocomplete suggestions from a predefined list |
Props:
| Prop | Type | Description |
|---|---|---|
options |
array | Inline list of suggestion options |
validate |
function | Custom validation function |
cmsList |
relation | Link to an option-list content type in Strapi for reusable option sets |
Usage: Occupation selection, employer lookup, or any field where users pick from a large predefined list.
BOOLEAN
Section titled “BOOLEAN”| Strapi component | questionnaire.boolean-question |
| Runtime type | BOOLEAN |
| Purpose | Yes/No toggle |
Props: No special props beyond common fields.
Usage: Simple binary questions like “Do you have pre-existing conditions?” or “Are you currently employed?”
CHECKBOX
Section titled “CHECKBOX”| Strapi component | questionnaire.checkbox-question |
| Runtime type | CHECKBOX |
| Purpose | Multi-select checkboxes |
Props:
| Prop | Type | Description |
|---|---|---|
mapValue |
Record | Maps values to labels. Each entry can be a simple string label or an object with title and description. |
Usage: “Select all that apply” questions, such as selecting coverage options or medical conditions.
COUNTRY_MULTI
Section titled “COUNTRY_MULTI”| Strapi component | questionnaire.country_multi-question |
| Runtime type | COUNTRY_MULTI |
| Purpose | Select multiple countries from a dropdown |
Props:
| Prop | Type | Description |
|---|---|---|
filterCountry |
array | Restrict the list to specific country codes |
locale |
string | Locale for country name display |
Usage: “Which countries have you lived in?” or multi-country coverage selection.
COUNTRY_SINGLE
Section titled “COUNTRY_SINGLE”| Strapi component | questionnaire.country_single-question |
| Runtime type | COUNTRY_SINGLE |
| Purpose | Select one country from a dropdown |
Props:
| Prop | Type | Description |
|---|---|---|
filterCountry |
array | Restrict the list to specific country codes |
locale |
string | Locale for country name display |
placeholder |
string | Placeholder text for the dropdown |
Usage: “What is your country of origin?” or single-country selection.
CURRENCY
Section titled “CURRENCY”| Strapi component | questionnaire.currency-question |
| Runtime type | CURRENCY |
| Purpose | Monetary amount input |
Props:
| Prop | Type | Description |
|---|---|---|
validate |
function | Custom validation function (e.g., minimum/maximum amount) |
Usage: Income input, coverage amount selection.
| Strapi component | questionnaire.date-question |
| Runtime type | DATE |
| Purpose | Date picker with optional calendar widget |
Props:
| Prop | Type | Required | Description |
|---|---|---|---|
yearRange |
object | Yes | { min, max } — defines the selectable year range |
displayCalendar |
boolean | No | Show a calendar widget instead of dropdowns |
placeholders |
object | No | Custom placeholder text for day/month/year fields |
dayjsLocale |
string | No | Locale for date formatting |
firstDayOfWeek |
number | No | 0 = Sunday, 1 = Monday, etc. |
Usage: Date of birth, policy start date, travel dates.
DROPDOWN_SINGLE
Section titled “DROPDOWN_SINGLE”| Strapi component | questionnaire.dropdown_single-question |
| Runtime type | DROPDOWN_SINGLE |
| Purpose | Single-select dropdown |
Props:
| Prop | Type | Description |
|---|---|---|
options |
array | Array of { value, label } objects |
returnValueAsString |
boolean | Return the selected value as a string instead of its native type |
cmsList |
relation | Link to an option-list content type for reusable options |
Usage: Selecting a plan tier, occupation category, or any single-choice question.
| Strapi component | questionnaire.email-question |
| Runtime type | EMAIL |
| Purpose | Email input with additional fields |
Props: Supports additional input fields alongside the email.
Usage: Signup flows where email plus other contact details are collected together.
EMAIL_BASIC
Section titled “EMAIL_BASIC”| Strapi component | questionnaire.email_basic-question |
| Runtime type | EMAIL_BASIC |
| Purpose | Simple email-only input |
Props: No special props beyond common fields.
Usage: Simple email collection for leads or notifications.
| Strapi component | questionnaire.phone-question |
| Runtime type | PHONE |
| Purpose | Phone number input with country code |
Props: No special props beyond common fields.
Usage: Contact information collection during signup.
| Strapi component | questionnaire.input-question |
| Runtime type | INPUT |
| Purpose | Generic text input |
Props:
| Prop | Type | Description |
|---|---|---|
minLength |
number | Minimum character length |
maxLength |
number | Maximum character length |
validate |
function | Custom validation function |
type |
string | HTML input type (text, number, etc.) |
Usage: Free-text fields like “What is your employer’s name?” or reference numbers.
| Strapi component | questionnaire.name-question |
| Runtime type | NAME |
| Purpose | First name + last name input |
Props: No special props beyond common fields.
Usage: Collecting the user’s legal name during signup.
NUMBER
Section titled “NUMBER”| Strapi component | questionnaire.number-question |
| Runtime type | NUMBER |
| Purpose | Numeric input |
Props: No special props beyond common fields.
Usage: Age, number of dependents, or other numeric values.
NUMERIC_CONVERSION
Section titled “NUMERIC_CONVERSION”| Strapi component | questionnaire.numeric_conversion-question |
| Runtime type | NUMERIC_CONVERSION |
| Purpose | Numeric input with unit conversion |
Props: Supports conversion between units (e.g., meters to feet).
Usage: Height, weight, or other measurements where the user might use different unit systems.
| Strapi component | questionnaire.radio-question |
| Runtime type | RADIO |
| Purpose | Single-select radio buttons |
Props:
| Prop | Type | Description |
|---|---|---|
mapValue |
Record | Maps values to labels. Each entry can be a simple string label or an object with title and description. |
informationBox |
object | Display an information box alongside the radio options |
Usage: Most single-choice questions: “What type of coverage do you need?”, “How often do you visit the dentist?”
| Strapi component | questionnaire.text-question |
| Runtime type | TEXT |
| Purpose | Multi-line text input (textarea) |
Props: No special props beyond common fields.
Usage: Open-ended responses like “Describe your medical condition” or claim descriptions.
| Strapi component | questionnaire.iban-question |
| Runtime type | IBAN |
| Purpose | Bank IBAN number input with validation |
Props: No special props beyond common fields.
Usage: Payment setup during signup for SEPA direct debit.
UPLOAD
Section titled “UPLOAD”| Strapi component | questionnaire.upload-question |
| Runtime type | UPLOAD |
| Purpose | Single file upload |
Props: No special props beyond common fields.
Usage: Uploading a single document such as a prescription or proof of insurance.
MULTI_UPLOAD
Section titled “MULTI_UPLOAD”| Strapi component | questionnaire.multi_upload-question |
| Runtime type | MULTI_UPLOAD |
| Purpose | Multiple file upload |
Props: No special props beyond common fields.
Usage: Uploading multiple documents (e.g., claim receipts, medical records).
SIGNATURE_UPLOAD
Section titled “SIGNATURE_UPLOAD”| Strapi component | questionnaire.signature_upload-question |
| Runtime type | SIGNATURE_UPLOAD |
| Purpose | Digital signature capture |
Props:
| Prop | Type | Description |
|---|---|---|
checkboxOptions |
array | Consent checkboxes the user must check alongside the signature |
Usage: Legal consent and signature capture during checkout or claims.
HAS_POLICY
Section titled “HAS_POLICY”| Strapi component | questionnaire.has_policy-question |
| Runtime type | HAS_POLICY |
| Purpose | Check whether the user has an existing policy |
Props: No special props beyond common fields.
Usage: Policy adjustment and cancellation flows to verify the user has an active policy.
COVERED_GROUP
Section titled “COVERED_GROUP”| Strapi component | questionnaire.covered_group-question |
| Runtime type | COVERED_GROUP |
| Purpose | Coverage group selection (e.g., individual, couple, family) |
Props: No special props beyond common fields.
Usage: Health insurance flows where coverage group affects pricing and eligibility.
Vehicle Lookup Types
Section titled “Vehicle Lookup Types”CAR_LOOKUP
Section titled “CAR_LOOKUP”| Strapi component | questionnaire.car_lookup-question |
| Runtime type | CAR_LOOKUP |
| Purpose | Vehicle lookup for Germany |
Props: No special props beyond common fields.
Usage: German car insurance flows — looks up vehicle details by registration or HSN/TSN.
CAR_LOOKUP_SPAIN
Section titled “CAR_LOOKUP_SPAIN”| Strapi component | questionnaire.car_lookup_spain-question |
| Runtime type | CAR_LOOKUP_SPAIN |
| Purpose | Vehicle lookup for Spain |
Props: No special props beyond common fields.
Usage: Spanish car insurance flows — looks up vehicle details by matricula.
Screen / Layout Types
Section titled “Screen / Layout Types”| Strapi component | questionnaire.intro |
| Runtime type | INTRO |
| Purpose | Welcome/intro screen at the start of a flow |
Props:
| Prop | Type | Description |
|---|---|---|
infoCards |
array | Array of cards with title, description, and icon |
Usage: Landing screen for a questionnaire with product highlights and key information.
BLOCKER
Section titled “BLOCKER”| Strapi component | questionnaire.blocker |
| Runtime type | BLOCKER |
| Purpose | Blocks the user from continuing the flow |
| Layout | Always uses Standalone layout |
Props:
| Prop | Type | Description |
|---|---|---|
buttonProps |
array | Array of button objects with text, href, and variant |
Usage: Eligibility blockers — e.g., “Sorry, this product is not available in your region.” Provides buttons to redirect the user.
SUCCESS
Section titled “SUCCESS”| Strapi component | questionnaire.success |
| Runtime type | SUCCESS |
| Purpose | Completion/confirmation screen |
Props:
| Prop | Type | Description |
|---|---|---|
buttonProps |
array | Buttons with optional redirectToQuestionId to restart or navigate |
infoCards |
array | Information cards with title, description, and icon |
Usage: Final “Thank you” screen after signup, claim submission, or cancellation.
REDIRECT
Section titled “REDIRECT”| Strapi component | questionnaire.redirect |
| Runtime type | REDIRECT |
| Purpose | Automatically redirects the user to another URL |
Props: Redirect target URL.
Usage: Routing users to an external partner, a different questionnaire, or a specific app page.
| Strapi component | questionnaire.tally |
| Runtime type | TALLY |
| Purpose | Embed a Tally form within the questionnaire flow |
Props: Tally form ID/configuration.
Usage: Embedded surveys or feedback forms within the flow.
Processing / Submission Types
Section titled “Processing / Submission Types”PROCESSING
Section titled “PROCESSING”| Strapi component | questionnaire.processing |
| Runtime type | PROCESSING |
| Purpose | Loading/processing state while the backend creates a policy or performs an action |
Props:
| Prop | Type | Description |
|---|---|---|
textList |
array | Array of strings displayed sequentially during the loading animation |
Usage: Shown after checkout while the backend processes the signup.
CLAIM_PROCESSING
Section titled “CLAIM_PROCESSING”| Strapi component | questionnaire.claim_processing |
| Runtime type | CLAIM_PROCESSING |
| Purpose | Claims-specific processing state |
Props: Similar to PROCESSING.
Usage: Shown while a claim is being submitted to the backend.
CANCEL_POLICY_PROCESSING
Section titled “CANCEL_POLICY_PROCESSING”| Strapi component | questionnaire.cancel_policy_processing |
| Runtime type | CANCEL_POLICY_PROCESSING |
| Purpose | Cancellation processing state |
Props:
| Prop | Type | Description |
|---|---|---|
textList |
array | Loading text messages |
submitKeys |
array | Question IDs whose answers are submitted with the cancellation request |
Usage: Shown while a policy cancellation is being processed.
GENERIC_CHECKOUT_V2
Section titled “GENERIC_CHECKOUT_V2”| Strapi component | questionnaire.generic_checkout_v2 |
| Runtime type | GENERIC_CHECKOUT_V2 |
| Purpose | Stripe-integrated checkout page |
Props:
| Prop | Type | Description |
|---|---|---|
policyDetails |
array | Key-value pairs shown in the policy summary |
productCardDetails |
object | Product card display configuration |
additionalPolicyDetails |
array | Extra details below the main policy summary |
priceBreakdown |
object | Price breakdown display |
billingConfig |
object | contractCycle: yearly or monthly |
icon |
media | Product icon shown in the checkout |
Usage: The main checkout step in signup flows, integrating Stripe payment collection.
GENERIC_SUBMISSION
Section titled “GENERIC_SUBMISSION”| Strapi component | questionnaire.generic_submission |
| Runtime type | GENERIC_SUBMISSION |
| Purpose | Form submission endpoint (non-payment) |
Props:
| Prop | Type | Description |
|---|---|---|
policyDetails |
array | Summary of collected information |
productCardDetails |
object | Product card display |
Usage: Final review-and-submit step for claims or non-paid flows.
ADD_TO_CART
Section titled “ADD_TO_CART”| Strapi component | questionnaire.add_to_cart-question |
| Runtime type | ADD_TO_CART |
| Purpose | Add an item to the shopping cart |
Props: No special props beyond common fields.
Usage: Multi-product flows where the user adds insurance products to a cart before checkout.
Quote Types
Section titled “Quote Types”| Strapi component | questionnaire.quote |
| Runtime type | QUOTE |
| Purpose | Basic quote display |
Props: No special props beyond common fields.
Usage: Legacy basic pricing display. For new verticals, always use QUOTE_CUSTOM with a CMS quote-page (Quote Page V2) instead.
QUOTE_CUSTOM (Quote Page V2)
Section titled “QUOTE_CUSTOM (Quote Page V2)”| Strapi component | questionnaire.quote_custom |
| Runtime type | QUOTE_CUSTOM |
| Purpose | Quote/pricing page — either CMS-driven (Quote Page V2) or code-based |
This question type has two modes:
Mode 1: Quote Page V2 (CMS-driven) — Recommended
Section titled “Mode 1: Quote Page V2 (CMS-driven) — Recommended”Set the cmsQuote relation to a quote-page content type. The entire pricing page is configured in Strapi — customizations, coverage tables, add-ons, FAQ, and footer. No code changes needed.
| Prop | Type | Description |
|---|---|---|
cmsQuote |
relation | Links to a quote-page content type in Strapi |
This is the standard approach for all new verticals. See Quote Page V2 component and Create a Quote Page.
Mode 2: Quote Custom (code-based) — Legacy
Section titled “Mode 2: Quote Custom (code-based) — Legacy”Set the customQuote enum to render a hardcoded React component. Only use this when the CMS-driven approach cannot support a specific layout.
| Prop | Type | Description |
|---|---|---|
customQuote |
enum | HOUSEHOLD, PET_HEALTH, LIFE_EU |
Review Types
Section titled “Review Types”REVIEW
Section titled “REVIEW”| Strapi component | questionnaire.review |
| Runtime type | REVIEW |
| Purpose | Summary review screen showing all collected answers |
Props: No special props beyond common fields.
Usage: Pre-checkout review step where the user confirms all their answers before proceeding.
CANCELLATION_REVIEW
Section titled “CANCELLATION_REVIEW”| Strapi component | questionnaire.cancellation_review-question |
| Runtime type | CANCELLATION_REVIEW |
| Purpose | Cancellation-specific review screen |
Props: No special props beyond common fields.
Usage: Review step in cancellation flows showing policy details and cancellation terms.
EFFECTIVE_DATE_DROPDOWN
Section titled “EFFECTIVE_DATE_DROPDOWN”| Strapi component | questionnaire.effective_date_dropdown-question |
| Runtime type | EFFECTIVE_DATE_DROPDOWN |
| Purpose | Dropdown for selecting a coverage start date |
Props: Generates available dates based on product rules.
Usage: Selecting when coverage should begin, typically in signup flows.
See also
Section titled “See also”- Add Question Types – quick guide to choosing the right type for your use case
- Your First Questionnaire – hands-on tutorial using common question types
- Component Overview – how question types map to rendered React components