Skip to content

Quote-Page Components

A Quote-Page in Strapi defines the pricing and plan-selection screen of a questionnaire. In V2, all components live in a single content array (there is no separate quoteOptions zone). The footer is a standalone top-level field.

Every content component supports an optional ruleGroups field for conditional visibility — see Quote-Page Rules.

Field Type Required Description
name string Yes Unique slug identifier for this quote page
mergeQuoteOptionsToQuestionnaire boolean No When true, selected quote option values are merged into the main questionnaire answers
prefillQuoteOptionsFromParams boolean No When true, quote options are pre-filled from URL query parameters
content component array Yes Ordered list of V2 components (see below)
footer object Yes CTA footer (see footer)

Page-level header displayed at the top of the quote page.

Field Type Required Description
title string Yes Heading text (e.g., "Your quote")
description string No Subtitle or explanatory text
showPrice boolean Yes When true, the current price is displayed alongside the header
ruleGroups array No Visibility rules

Section heading used to visually separate groups of components.

Field Type Required Description
title string Yes Heading text
hint string No Subtext displayed next to the title (e.g., "With monthly cancellation policy")
documentLabel string No Label for a linked document (e.g., "Policy statement")
document object No Document link with url or src field
ruleGroups array No Visibility rules

These components let users customize their coverage. Each sends its value to the pricing engine via its optionKey.

Multi-option selector rendered as checkboxes or switches.

Field Type Required Description
title string Yes Display title
description string No Explanatory text
type enum Yes "checkbox" or "switch"
optionKey string Yes Answer key sent to the pricing engine
options array Yes Available choices (see below)
defaultValue string No Pre-selected value
hiddenValue string No Value used when the component is hidden by rules
availablePlans string[] No Restrict visibility to these plan IDs. Empty array = all plans.
label object No Badge label (see label)
ruleGroups array No Visibility rules

Each option in options:

Field Type Description
label string Display text
value string Value sent to the pricing engine when selected

Example (from liability):

{
"__component": "quote-page-v2.choice",
"title": "Add household members",
"type": "checkbox",
"optionKey": "inclusiveMembers",
"description": "Peace of mind for your loved ones, for a little extra",
"options": [
{ "label": "Partner", "value": "PARTNER" },
{ "label": "Kids(s)", "value": "KIDS" },
{ "label": "Parent(s)", "value": "PARENTS" }
]
}

A simple on/off toggle for boolean options.

Field Type Required Description
title string Yes Display title
description string No Explanatory text
optionKey string Yes Answer key sent to the pricing engine
defaultValue boolean No Initial state
hiddenValue boolean No Value used when the component is hidden by rules
availablePlans string[] No Restrict visibility to these plan IDs
label object No Badge label (see label)
ruleGroups array No Visibility rules

A slider for numeric customization (e.g., coverage amount, deductible).

Field Type Required Description
title string Yes Display title
description string No Explanatory text (supports markdown)
type enum Yes Always "slider"
optionKey string Yes Answer key sent to the pricing engine
minimumValue number Yes Minimum slider value
maximumValue number Yes Maximum slider value
step number No Increment between values. When null, a continuous range is used.
defaultValue number No Initial slider position
sliderLabel string No Label displayed on the slider track
sliderSubLabel string No Secondary label (e.g., "Recommended")
hiddenValue string No Value used when the component is hidden by rules
availablePlans string[] No Restrict visibility to these plan IDs
label object No Badge label (see label)
ruleGroups array No Visibility rules

Example (from household):

{
"__component": "quote-page-v2.range-input",
"title": "Insured sum",
"type": "slider",
"optionKey": "insuredSum",
"minimumValue": 0,
"maximumValue": 250000,
"defaultValue": 39000,
"sliderSubLabel": "Recommended",
"description": "The insured sum is the maximum amount covered if all your belongings are destroyed."
}

Plan selection cards displayed in a grid. Users pick their plan tier here.

Field Type Required Description
cards array Yes Array of plan card definitions (see below)
ruleGroups array No Visibility rules

Each card in cards:

Field Type Required Description
planId string Yes Plan identifier (must match the Vertical’s plan mapping)
name string Yes Display name (e.g., "Basic", "Extended")
features array Yes Array of feature items (see below)

Each feature in features:

Field Type Required Description
label string Yes Feature name
description string No Additional detail
included boolean Yes Whether this feature is included in the plan

Example (from household):

{
"__component": "quote-page-v2.plan-cards",
"cards": [
{
"planId": "BASIC",
"name": "Basic",
"features": [
{ "label": "Robberies, burglary and theft", "included": true },
{ "label": "Theft from car and boat", "included": false }
]
},
{
"planId": "EXTENDED",
"name": "Extended",
"features": [
{ "label": "Robberies, burglary and theft", "included": true },
{ "label": "Theft from car and boat", "included": true }
]
}
]
}

Selectable add-on items for optional extras (e.g., glass coverage, bicycle protection).

Field Type Required Description
addonItems array Yes Array of addon definitions (see below)
ruleGroups array No Visibility rules

Each item in addonItems:

Field Type Required Description
addonKey string Yes Unique key sent to the pricing engine (e.g., "BROKEN_GLASS_COVERAGE")
title string Yes Display title
description string No Short explanation
icon object No Icon with src (URL) and alt (alt text)
label object No Badge label (see label)
availablePlans string[] No Restrict this addon to specific plan IDs
range object No Optional slider for numeric addon customization (see below)

The range sub-component (when present) turns the addon into a slider addon:

Field Type Required Description
optionKey string Yes Answer key for the slider value
minimumValue number Yes Minimum value
maximumValue number Yes Maximum value
step number No Increment step size
defaultValue number No Initial value
sliderLabel string No Label on the slider track

Example (from household — addon with range slider):

{
"addonKey": "ADDITIONAL_BIKE_COVERAGE",
"title": "Premium bike coverage",
"description": "Increase your bike theft cover up to €3,000",
"label": { "text": "Extended plan only", "variant": "warning" },
"availablePlans": ["EXTENDED"],
"range": {
"optionKey": "bikeInsuredSum",
"minimumValue": 1000,
"maximumValue": 3000
}
}

Card section showing what a plan covers. Each card has an icon, title, and description.

Field Type Required Description
iconSize enum No "large" (default) or "small"
card array Yes Array of coverage cards (see below)
ruleGroups array No Visibility rules

Each card:

Field Type Required Description
title string Yes Card title
description string Yes Card description
icon object Yes Icon with src (URL) and alt (alt text)

Coverage comparison table for side-by-side plan comparison. References a Table content type from Strapi.

Field Type Required Description
table object Yes Table data structure (see Configure Coverage Table)
ruleGroups array No Visibility rules

The table data includes tableData (array of sections, each with rows), collapsibleSections, and hideDetails flags. At runtime, the app filters table columns by available plans and replaces price cells with live quote data.

FAQ accordion section with expandable question/answer pairs.

Field Type Required Description
faq array Yes Array of FAQ items (see below)
ruleGroups array No Visibility rules

Each FAQ item:

Field Type Description
question string The question text
answer string The answer (supports rich text)

The footer is a top-level field on the Quote-Page (not part of the content array). It provides the primary call-to-action.

Field Type Required Description
bookACallUrl string Yes URL for the “Book a call” CTA link
secondaryAction string No Label for a secondary link (e.g., "Visit FAQ")
secondaryActionLink string No URL for the secondary link

A conditional footer that replaces the default footer when its ruleGroups match. Added as a component in the content array, but filtered out during rendering and resolved separately.

Field Type Required Description
bookACallUrl string Yes Override URL for “Book a call”
secondaryAction string No Override secondary link label
secondaryActionLink string No Override secondary link URL
ruleGroups array No Conditions that trigger this override

When a footer-override’s rules match, it replaces the default footer’s fields. If no override matches, the default footer is used.


Badge label that can be attached to customization components, addon items, or plan cards.

Field Type Description
text string Label text
variant enum Visual style (see variants below)

Variants: primary, secondary, success, warning, error, info, neutral, primaryOutline, secondaryOutline, successOutline, warningOutline


Component __component value Purpose
header quote-page-v2.header Page title and optional price display
title quote-page-v2.title Section heading with optional document link
choice quote-page-v2.choice Multi-option selector (checkbox/switch)
boolean quote-page-v2.boolean On/off toggle
range-input quote-page-v2.range-input Numeric slider
plan-cards quote-page-v2.plan-cards Plan selection grid
addons quote-page-v2.addons Add-on items with optional slider
covered quote-page-v2.covered Coverage cards
table quote-page-v2.table Plan comparison table
faq-collection quote-page-v2.faq-collection FAQ accordion
footer-override quote-page-v2.footer-override Conditional footer replacement