Skip to main content

Quick Offers

A quick offer answers the first question in a sales conversation: what could this contribution grow to? It needs the insured person's date of birth and the premium, not a customer record. createQuickOffer returns the projected values year by year and the insurance system's sample-offer PDF in the same response.

A quick offer is a calculation, not an offer. To offer the product to a customer, call createOffer.

Your account needs the right to sell the product, the same as for createOffer.

Product inputCurrencyTariff selection
valueInvestVWLEURValue Invest VWL 2022
bestValueRentEURBest Value Rent 2022
liechtensteinLifeInvestEUR049-0-LLI 2025
liechtensteinLifePensionEUR049-0-LL1B 2025
liechtensteinLifeWealthEUR049-0-LLW 2026
prosperityPlusGermanyEURbrokerageFeePayoutMethod: NET selects 049-0-PPD 2025; GROSS selects 049-1-PPD 2025
prosperityPlusCHFDomestic 041-1-PP3B 2026
prosperityDuoCHF041-1-PD3B 2026
prosperityJuniorCHF041-1-PJ3B 2026
liechtensteinLifeWealthCHCHF041-0-LLW3B 2025

Prosperity 3a and yourlife netto plus are not currently available through this operation. Cross-border Prosperity Plus is also unavailable: crossBorderTariffApplicable: true returns an input error rather than calculating the domestic tariff.

Calculating a quick offer​

Provide exactly one product. For Value Invest VWL the insured person and the policyholder are the same person, so there is a single date of birth.

mutation CreateQuickOffer($input: CreateQuickOfferInput!) {
createQuickOffer(input: $input) {
__typename
... on QuickOffer {
tariffName
currency
endDate
totalPremiums
funds {
isin
name
percentage
}
projections {
date
age
capital {
yieldPercent
amount
}
minimumDeathBenefit {
yieldPercent
amount
}
}
document {
__typename
... on QuickOfferDocument {
fileName
mimeType
contentBase64
}
... on QuickOfferDocumentUnavailableError {
message
}
}
}
... on InputValidationError {
invalidInput
message
}
... on InsuranceSystemError {
message
reasons
}
... on UnauthorizedOperationError {
message
}
... on UnexpectedError {
message
}
}
}
{
"input": {
"valueInvestVWL": {
"insuredBirthdate": "1990-01-01",
"startDate": "2026-11-01",
"durationInYears": 30,
"monthlyPremium": 4000,
"fundIsin": "LLA035"
}
}
}
FieldMeaning
insuredBirthdateDate of birth of the insured person.
startDateWhen the policy would start. Use the first of the next month if the customer has no wish.
durationInYearsLength of the policy. The insurance system checks it against the insured person's age.
premiumDurationInYearsYears the premium is paid. Defaults to durationInYears and cannot be longer.
monthlyPremiumMonthly premium in the smallest monetary unit (cents for EUR). The premium per year (12 times this amount) must be between EUR 168 and EUR 3,000, and together with additionalPayment at most EUR 3,000.
additionalPaymentOne-time payment at the start, in the smallest monetary unit. Defaults to 0. Otherwise at least EUR 50.
fundIsinISIN of the fund. Take it from availableFunds.
guaranteeCapital guarantee level. Defaults to NO_GUARANTEE.

Best Value Rent​

Use the same mutation with bestValueRent. The calculation uses tariff best value rent 2022, EUR, one fund and no separate compensation agreement. No health answers, customer names or addresses are needed.

{
"input": {
"bestValueRent": {
"insuredBirthdate": "1991-11-01",
"startDate": "2026-11-01",
"durationInYears": 30,
"monthlyPremium": 20000,
"fundIsin": "LU0159549145",
"guarantee": "NONE"
}
}
}

Choose a current fund from availableFunds with product: BEST_VALUE_RENT. Choose a start date from today to three months ahead. The example fund is a test allocation, not a recommendation.

BVR field or ruleMeaning
policyholderBirthdateSupply it when the policyholder is a different person. Otherwise the calculation uses insuredBirthdate for both roles.
AgesInsured age 0–63 at entry and at most 85 at maturity; policyholder age 18–80 at entry. A minor insured therefore needs an adult policyholder.
monthlyPremiumAt least 5000 cents for monthly premiums. Set 0 for a single premium.
additionalPaymentDefaults to 0. At least 10000 cents when added to monthly premiums, or 200000 cents for a single premium.
durationInYearsAt least 12 years.
premiumDurationInYearsDefaults to the policy term for monthly premiums; at least five years, ending by insured age 75 and no later than maturity. Omit for a single premium.
guaranteeNONE (default), SELECT50, or SELECT80. Monthly guarantees require both persons aged 18–47, at least 20 years of policy term and premiums, and payments ending by policyholder age 67. Single-premium guarantees require both persons aged 18–55.

For a EUR 2,000 single premium, set monthlyPremium: 0 and additionalPayment: 200000, and omit premiumDurationInYears. To add a EUR 100 initial payment to monthly premiums, set additionalPayment: 10000.

The result has the same QuickOffer shape as VWL, with tariffName: "best value rent 2022" and fileName: "quick-offer-best-value-rent.pdf". Pension projections are in the sample PDF. The structured response contains capital and minimum death-benefit scenarios. The quick calculation does not include dynamic premium increases or premium waiver; those belong to the full offer.

Example VWL response​

{
"data": {
"createQuickOffer": {
"__typename": "QuickOffer",
"tariffName": "value invest VWL 2022",
"endDate": "2056-11-01",
"totalPremiums": 1440000,
"funds": [
{ "isin": "LLA035", "name": "prosperity balanced II trust EUR", "percentage": 100 }
],
"projections": [
{
"date": "2027-11-01",
"age": 37,
"capital": [
{ "yieldPercent": 0, "amount": 27234 },
{ "yieldPercent": 3, "amount": 27744 },
{ "yieldPercent": 6, "amount": 28251 }
],
"minimumDeathBenefit": [{ "yieldPercent": 3, "amount": 720000 }]
}
],
"document": {
"__typename": "QuickOfferDocument",
"fileName": "quick-offer-value-invest-vwl.pdf",
"mimeType": "application/pdf",
"contentBase64": "JVBERi0xLjUK..."
}
}
}
}

All amounts are in the smallest monetary unit of the returned currency: cents for EUR or Rappen for CHF. projections has one entry per policy year, oldest first. The response above is shortened to one year.

Additional products​

The additional products use the same common fields: insuredBirthdate, startDate, durationInYears, premiumDurationInYears, monthlyPremium, additionalPayment, and fundIsin. Amounts use the product's minor units. These calculations use one fund, monthly recurring premiums, no capital guarantee, no premium waiver and the tariff's standard death-cover rule. Product eligibility still applies; a successful quick offer is not underwriting approval.

Quick-offer eligibility limits​

The supported quick-offer subset uses tariff metadata captured from the insurance system. It is not a promise that the same inputs pass a later application.

ProductQuick-offer limits
Invest and PensionAt least EUR 600 annual recurring premiums. A nonzero initial payment alongside recurring premiums is at least EUR 100. The current application validators instead require EUR 1,200 annually and EUR 10,000 for a nonzero initial payment. Reconcile those application requirements before proceeding from a sample calculation.
PensionPremium payments must end by age 75, including when the premium term defaults to the policy term.
Domestic Prosperity PlusThis operation supports policy and premium terms of at least 30 years and entry through age 64, and maturity by age 85. All bounds apply together. The broker guide describes a broader range; these narrower limits follow the captured 041-1-PP3B 2026 metadata for no_guarantee. Shorter terms or older entry ages are outside this quick-offer subset.

The EUR 10,000 minimum for a single premium without recurring premiums is distinct from the EUR 100 additional payment in the captured tariff metadata. These additional product inputs currently require recurring premiums.

For Duo and Junior, also supply policyholderBirthdate. This is the adult policyholder and insured provider. insuredBirthdate belongs to the protected person, or the child for Junior. Do not exchange these roles. Liechtenstein Life Pension also returns maturity pension figures in pension; yearly projections contain capital and minimum death-benefit scenarios.

{
"input": {
"prosperityPlusGermany": {
"insuredBirthdate": "1996-10-28",
"insuredFirstName": "Testperson",
"insuredLastName": "Musterfall",
"startDate": "2026-11-01",
"durationInYears": 37,
"monthlyPremium": 20000,
"fundIsin": "IE00B5BMR087",
"brokerageFeePayoutMethod": "NET"
}
}
}

Use an eligible fund from availableFunds for the selected product. Example funds and amounts demonstrate the request format; they are not recommendations.

Partner pricing and annual fee reductions​

Existing requests retain the standard calculation. Set applyPartnerPricing: true to forward the product's configured partner pricing terms. Omitted, null or false leaves configured terms unset. This selects pricing terms only; it does not make every full-offer setting identical.

Value Invest VWL, Liechtenstein Life Invest, Pension and Wealth (Germany) also accept absoluteReductionFundAdministrationCost, using the same public name as full offers. The API uses the full-offer percentage-point convention, from 0 to 1, and forwards the numeric value unchanged. This input is not a currency amount or a relative discount percentage.

The applied quick-offer fee is not returned in JSON or disclosed numerically in the reviewed PDFs. Equivalence with the full-offer charge remains unverified. Do not derive or communicate an exact annual charge from this input. Confirm the applied charge with the insurance system before relying on pricing equivalence. Pricing terms are tariff-specific: a value inside the input range can still be refused, and acceptance alone does not prove a projection or charge changes.

InputsPricing selection
No pricing inputsStandard calculation; no configured partner terms
applyPartnerPricing: trueConfigured partner factors and the product's applicable configured absolute reduction
Explicit absolute reductionThat reduction, even without applyPartnerPricing; other partner factors remain unset
Explicit reduction and applyPartnerPricing: trueExplicit reduction overrides the configured absolute reduction; other configured factors remain selected
Explicit reduction 0No absolute reduction; does not cancel other explicitly selected partner factors
Reduction omitted or nullConfigured absolute reduction only when partner pricing is selected

The absolute reduction does not require 0.01 increments. Swiss partner factors use a separate mechanism. Swiss inputs do not expose the German absolute reduction. Do not display a Swiss factor as a fee reduction percentage.

Optional Invest simulation settings​

Liechtenstein Life Invest alone accepts simulation. Leave the object or either field unset to let the insurance system generate that setting. No default yield is inserted by this API.

{
"averageYieldPercent": 5.5,
"absoluteSpreadPercent": 2
}

Place this object under liechtensteinLifeInvest.simulation. averageYieldPercent accepts 3 through 6, including fractional values. absoluteSpreadPercent accepts exactly 1, 2 or 3 percentage points. The example selects 3.5%, 5.5% and 7.5% scenarios. Gross/net modes and relative spreads are unavailable. Read the returned yields as the effective scenarios.

Compatibility​

Existing VWL and Best Value Rent inputs remain valid. Existing response fields, monetary units and calculation defaults remain unchanged. currency is an additive response field. The adapter accepts both Lifeware projection formats and returns the same capital and minimumDeathBenefit arrays. Existing callers need no response migration.

Reading the projections​

Each entry in capital is the projected fund value at date if the funds earned a constant yieldPercent per year over the whole term. The entries are scenarios, not a forecast and not a guarantee. Show them together and never present one of them as the expected result. The risk notes in the sample-offer PDF belong with the figures when you show them to a customer.

Leave yield settings unset to use the scenarios generated by the insurance system, as in the app. Read each returned yieldPercent; do not assume three fixed rates across products. A rate of 0.75 means 0.75%, not 75%.

For Value Invest VWL you cannot choose between a calculation with and without fund costs.

minimumDeathBenefit is the minimum death benefit calculated by the insurance system for each listed yield. It can be empty. The benefit rule depends on the product. In the VWL example above, it follows a fixed share of the agreed premiums early in the term. Do not apply that rule to BVR: use its sample-offer PDF. Show the value as a minimum, never as the amount that will be paid.

Partner pricing is off unless explicitly selected. Additional death cover and other full-offer settings can also differ. A later full offer can therefore produce different figures, even when partner pricing is selected.

The sample-offer PDF​

document carries the insurance system's own sample-offer PDF, base64 encoded, so the figures you show match the document the customer can keep. The PDF states how long the proposal is valid.

Names are optional. Supply insuredFirstName and insuredLastName to name the insured person in the sample PDF. Omitted names use the insurance system's placeholders. When the policyholder is the insured person, that name also appears for the policyholder. Separate policyholder names cannot be supplied through this operation.

The PDF remains a sample calculation, including when it contains a name. Test environments mark it "TEST". Collect names only when needed and protect the returned PDF as personal data.

We do not store the PDF. It exists only in this response, and no query returns it again. Save it on your side if you need it.

If the calculation succeeds but the PDF cannot be delivered, document is a QuickOfferDocumentUnavailableError and projections are still present. Calling createQuickOffer again recalculates and may return the PDF.

Errors​

Handle two error channels. Schema constraints run before the resolver: out-of-range simulation, reduction or term values can produce a top-level GraphQL errors entry with extensions.code: "BAD_USER_INPUT" and HTTP 400. For example, averageYieldPercent: 2.9 violates its @constraint(min: 3). The result union is not returned for that failure; inspect the GraphQL errors even when no data.createQuickOffer value exists. Multiple constraint failures can appear under extensions.validationErrors.

Resolver validation and calculation failures use the result union described below. Clients must handle both channels. The agreed premium sum must fit the safe-integer minor-unit range; independently valid premiums can still exceed that range over the payment term. Returned totals, capital and death-benefit amounts are checked before success logging or PDF retrieval. An invalid response produces UnexpectedError after a calculation may already have happened; do not automatically repeat it.

ResultWhen
InputValidationErrorA term, date, premium, role, pricing or simulation setting is invalid. Existing VWL and BVR validation codes remain available.
InsuranceSystemErrorThe insurance system rejects the request, for example because of the customer's age, the premium limits, the requested pricing terms or the fund. reasons carries its explanation. A fund from availableFunds can still be refused for a quick offer.
UnauthorizedOperationErrorYour account may not sell the product.
UnexpectedErrorThe calculation failed or the response could not be validated. Contact support before repeating a timed-out calculation; its outcome can be unknown.
Each call is a new calculation

Every call calculates again at the insurance system. We cannot yet say whether it keeps the calculation, so do not tell customers that nothing is stored.

Full field-by-field reference: Schema Reference.

Liechtenstein Life Pension: retirement income​

For liechtensteinLifePension (Basisrente), select pension to receive the pension figures at endDate. These figures come directly from Lifeware's calculation, alongside the values shown in the sample PDF. They are not annual entries in projections.

mutation PensionQuickOffer($input: CreateQuickOfferInput!) {
createQuickOffer(input: $input) {
__typename
... on ErrorInterface { message }
... on QuickOffer {
currency
endDate
pension {
guaranteedAnnuityFactor
currentDynamicAnnuityFactor
guaranteedMonthlyPension { yieldPercent amount }
currentDynamicMonthlyPensionFirstYear { yieldPercent amount }
}
}
}
}

Both factors are monthly pension in EUR per EUR 1,000 of fund value, in major units with the precision returned by Lifeware. For example, a factor of 2.55 means EUR 2.55 monthly pension per EUR 1,000 of fund value. currentDynamicAnnuityFactor is the dynamic pension factor, not the separate variable pension factor.

Pension scenario amounts use minor units, like existing monetary fields: 24416 means EUR 244.16 per month. guaranteedMonthlyPension applies the guaranteed factor to the projected fund value for that scenario; the projected fund value and resulting payout are not guaranteed. currentDynamicMonthlyPensionFirstYear is the current dynamic monthly pension for the first retirement year, including non-guaranteed surplus assumptions. Do not describe this figure as a guaranteed payout or an annual payment. Read each returned yieldPercent and match scenarios by that value.

pension is null for other products and when Lifeware omits the required pension blocks. Missing figures are not replaced with zero. Invalid supplied pension values follow the existing calculation error channel. No input fields or existing output fields change. Omitting document excludes the PDF from the GraphQL response; the backend still downloads it internally.