Skip to content

Vertical Schema

A Vertical represents an insurance product type in Feather’s system. It ties together questionnaires, pricing, branding, Stripe products, and policy modals into a single content entity.

Field Type Required Format Description
name string Yes ^[a-z0-9]+(-[a-z0-9]+)*$ Unique slug identifier. Lowercase alphanumeric with hyphens.
humanReadableName string No Free text Display name shown in admin interfaces
insuranceType string Yes ^[A-Z0-9]+(_[A-Z0-9]+)*$ SCREAMING_SNAKE_CASE identifier used in code

insuranceType examples: HOUSEHOLD, PUBLIC_HEALTH, INCOMING, PET_HEALTH, DENTAL, LIABILITY, LEGAL, LIFE, CAR, DISABILITY, TRAVEL

There are 32 insurance types currently defined in the system.


Field Type Description
regions multi-select Countries/regions where this vertical is available. Includes EU countries and a worldwide option.

Field Type Description
providerId string Insurance provider identifier
stripeProductionId string Stripe product ID for production environment
stripeStagingId string Stripe product ID for staging environment

Both Stripe IDs are required for verticals that involve payment. They link the vertical to a Stripe product for billing.


Field Type Required Description
image media Yes Vertical icon or logo image. Used throughout the app in cards, headers, and navigation.
colorCode string Yes Hex color code in format #RRGGBB (6 digits) or #RGB (3 digits shorthand). Used as the accent color for this vertical in the UI.

colorCode examples: #4A90D9, #2ECC71, #E74C3C


Field Type Default Description
hasAutomatedCancelProcess boolean false Whether this vertical supports automated policy cancellation through the cancel-policy questionnaire
policyInfoKind string Determines the policy info display variant
translationKey string i18n prefix for translations related to this vertical
legacyVerticalIdForMapping string Maps to the old vertical system for backwards compatibility during migration

Field Type Description
content component Marketing/display content for this vertical

Content fields:

Field Type Required Description
title string Yes Vertical title used in product listings and headers
excerpt string No Short description (1-2 sentences) for cards and previews
description richtext No Full description with formatting (used in product detail pages)
label string No Badge label (e.g., “New”, “Popular”, “Coming Soon”)

Field Type Description
planMapping repeatable Maps internal plan names to display names

Each entry:

Field Type Description
planName string Internal plan identifier (as used in pricing and backend)
mappedName string Human-readable display name shown to users

Example:

planName mappedName
BASIC Basic
ADVANCED Advanced
PREMIUM Premium Plus

Field Type Description
addonMapping repeatable Maps internal addon keys to display labels

Each entry:

Field Type Description
key string Internal addon identifier
label string Human-readable display label

Field Type Description
subTitleMetadata repeatable Fields used to build the policy card subtitle

Each entry:

Field Type Description
field string Data field name to include in the subtitle

Field Type Description
financeAdsLookup component Finance advertising identifiers per locale
Field Type Description
de string German locale identifier
en string English locale identifier
es string Spanish locale identifier
fr string French locale identifier

The policy modal is the expandable detail view shown when a user clicks on a policy card.

Field Type Description
policyModalSections dynamic zone Content sections inside the policy modal

Available components:

Rich text body content.

Field Type Description
body richtext Formatted text content

List of items.

Field Type Description
title string List heading
items repeatable List items with title and description
Field Type Description
policyModalButtons repeatable Action buttons at the bottom of the modal

Each button:

Field Type Description
text string Button label
href string Link URL
variant string Button style variant

Field Type Required Description
name string Yes Slug identifier
humanReadableName string No Display name
insuranceType string Yes SCREAMING_SNAKE type code
regions multi-select No Available regions
providerId string No Provider identifier
stripeProductionId string No Stripe prod product ID
stripeStagingId string No Stripe staging product ID
image media Yes Icon/logo
colorCode string Yes Hex color (#RRGGBB)
hasAutomatedCancelProcess boolean No Default: false
policyInfoKind string No Policy info display variant
translationKey string No i18n prefix
legacyVerticalIdForMapping string No Legacy system mapping
content component No Title, excerpt, description, label
planMapping repeatable No Plan name display mapping
addonMapping repeatable No Addon key display mapping
subTitleMetadata repeatable No Subtitle fields
financeAdsLookup component No Finance ad IDs per locale
policyModalSections dynamic zone No Modal content sections
policyModalButtons repeatable No Modal action buttons