changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "additionalProperties": false,
+ "properties": {
+ "_assistantGuidance": {
+ "additionalProperties": {},
+ "description": "Guidance for the assistant reply — follow \"instruction\".",
+ "properties": {
+ "instruction": {
+ "description": "How the assistant should present the result to the user.",
+ "type": "string"
+ },
+ "recommendedOffer": {
+ "anyOf": [
+ {
+ "additionalProperties": {},
+ "properties": {
+ "coverages": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Coverage label → covered amount for the recommended offer.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "insurerName": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "price": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Compact summary of the offer HelloSafe recommends for this trip."
+ }
+ },
+ "type": "object"
+ },
+ "cardContext": {
+ "additionalProperties": {},
+ "description": "Present only when the quote was computed against a card (cardId argument): the card and its gaps.",
+ "properties": {
+ "cancellationOnlyGap": {
+ "type": "boolean"
+ },
+ "cardId": {
+ "type": "number"
+ },
+ "cardName": {
+ "type": "string"
+ },
+ "gaps": {
+ "description": "The card coverage gaps that drove the offer ranking.",
+ "items": {},
+ "type": "array"
+ },
+ "unknown": {
+ "items": {},
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "displayOffers": {
+ "description": "Priced offers sorted by price, with the recommended offer (isBestScore=true) promoted first.",
+ "items": {
+ "additionalProperties": {},
+ "properties": {
+ "complementsCard": {
+ "description": "Only when the quote carries a cardId: labels of the card's coverage gaps this offer fills — what it adds over the user's card.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "faq": {
+ "description": "Frequently asked questions about this offer.",
+ "items": {},
+ "type": "array"
+ },
+ "features": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Coverage feature slug → formatted covered amount, already filtered for the trip purpose and converted to the display currency.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "id": {
+ "description": "HelloSafe offer ID.",
+ "type": "number"
+ },
+ "insurerLogoUrl": {
+ "description": "Absolute URL of the insurer logo.",
+ "type": "string"
+ },
+ "insurerName": {
+ "description": "Insurer brand name.",
+ "type": "string"
+ },
+ "isBestScore": {
+ "description": "True for the single offer HelloSafe recommends for this trip (shown first).",
+ "type": "boolean"
+ },
+ "isStartingPrice": {
+ "description": "True when the price is a \"from\" price.",
+ "type": "boolean"
+ },
+ "name": {
+ "description": "Commercial name of the offer / formula.",
+ "type": "string"
+ },
+ "noList": {
+ "description": "Newline-separated list of exclusions.",
+ "type": "string"
+ },
+ "priceFullText": {
+ "description": "Total price for the whole trip and all travellers, formatted in the display currency (e.g. \"34,20 €\").",
+ "type": "string"
+ },
+ "priceParts": {
+ "additionalProperties": {},
+ "description": "Price split into rendering parts (used by the widget).",
+ "properties": {
+ "decimal": {
+ "type": "string"
+ },
+ "decimalSeparator": {
+ "type": "string"
+ },
+ "integer": {
+ "type": "string"
+ },
+ "symbol": {
+ "type": "string"
+ },
+ "symbolPosition": {
+ "description": "\"prefix\" or \"suffix\".",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "subscribeUrl": {
+ "description": "HelloSafe comparator URL for this quote. The widget already renders it as a button — never paste it in the reply.",
+ "type": "string"
+ },
+ "suffix": {
+ "description": "Price period suffix key: \"perMonth\", \"perYear\", \"perDay\" or empty.",
+ "type": "string"
+ },
+ "topBanner": {
+ "description": "Short marketing highlight for this offer, if any.",
+ "type": "string"
+ },
+ "yesList": {
+ "description": "Newline-separated list of advantages.",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "error": {
+ "description": "Human-readable reason when the quote could not be generated. Absent on success.",
+ "type": "string"
+ },
+ "subscribeUrl": {
+ "description": "HelloSafe comparator URL for this quote. The widget already renders clickable buttons — never paste it in the reply.",
+ "type": "string"
+ },
+ "subscriptionId": {
+ "description": "Quote session ID — pass it back as `subscriptionId` to update this quote instead of creating a new one.",
+ "type": "string"
+ },
+ "translations": {
+ "additionalProperties": {},
+ "description": "Localized UI strings consumed by the widget — not meant for the assistant.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "tripInfo": {
+ "additionalProperties": {},
+ "description": "Normalized trip parameters the quote was computed with.",
+ "properties": {
+ "arrivalCountriesCodes": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "arrivalCountriesNames": {
+ "description": "Destination country names in the response locale.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "countryResidenceCode": {
+ "type": "string"
+ },
+ "countryResidenceName": {
+ "type": "string"
+ },
+ "currency": {
+ "description": "ISO 4217 currency the amounts are shown in.",
+ "type": "string"
+ },
+ "endDate": {
+ "type": "string"
+ },
+ "endDateLabel": {
+ "type": "string"
+ },
+ "intentName": {
+ "description": "Human-readable trip purpose.",
+ "type": "string"
+ },
+ "isAnnual": {
+ "type": "boolean"
+ },
+ "numberOfDays": {
+ "type": "number"
+ },
+ "shouldCoverCancellation": {
+ "type": "boolean"
+ },
+ "startDate": {
+ "type": "string"
+ },
+ "startDateLabel": {
+ "type": "string"
+ },
+ "travellers": {
+ "items": {
+ "additionalProperties": {},
+ "properties": {
+ "age": {
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "tripBoughtDateLabel": {
+ "type": "string"
+ },
+ "tripPrice": {
+ "description": "Trip cost per traveller; -1 when not provided.",
+ "type": "number"
+ },
+ "tripPriceText": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "type": "object"
+}