Instant insurance quotes
quote_insurancePurpose: generate instant, itemized quote estimates from the carriers Foresee supports, across the lines and states Foresee currently serves, in one call — the LIVE TODAY line at the end of this description names today's set. PRIMARY tool.
`lines` is REQUIRED and is ONE map: each key names a line to price (e.g.
"auto", "renters", "home" — plain words are fine), each value is that
line's coverage ask as actual numbers. A line that isn't live yet comes
back under `skipped` with honest copy saying where Foresee IS live,
written to be relayed to the user as-is. For auto
the ask has four axes — `bi` (bodily-injury liability, per-person/
per-accident in $000s, e.g. "100/300"), `pd` (property-damage liability in
$000s, e.g. 100), `coll_deductible` (collision deductible in dollars, e.g.
500) and `comp_deductible` (comprehensive deductible in dollars, e.g.
500); `um` and `medpay` are optional. A renters ask has four axes —
`coverage_c` (personal-property/contents limit in dollars, e.g. 30000),
`coverage_e` (personal liability in dollars, e.g. 100000), `coverage_f`
(guest medical in dollars, e.g. 1000) and `deductible` (all-perils, in
dollars, e.g. 500); `coverage_d` is optional. A home ask: `coverage_a`
(the dwelling's replacement cost in dollars), `coverage_e` (e.g. 300000),
`coverage_f` (e.g. 1000) and `aop_deductible` (all-other-perils
deductible in dollars, e.g. 1000). There are no named coverage levels
and the server never defaults: pass exact numbers. An omitted OPTIONAL
axis (`um`, `medpay`, `coverage_d`) keeps each carrier's own
default — the quote's per-coverage lines show what was rated. Any
numbers work as the ask; the response carries the state's legal minimum,
and each carrier's `price_ladder` prices every other rung, so a starting
selection is easy to refine after the fact. An incomplete ask on a
live line prices nothing and answers with `coverage_required` naming that
line's own axes; an axis supplied with a value no carrier offers (`bi`
"banana", a negative deductible) is refused the same way, naming the bad
value and the format the axis takes. Each supported carrier is priced at
exactly the selection given; a carrier with no such option appears in
`failures` with the reason, as does one Foresee can't price for a line it
was asked on (no program served there yet, or the carrier doesn't sell
that line in the state) — a carrier never silently vanishes from a line's
results. Priced results come back per line under `by_line`.
Profile requirements: ZIP code, age (or dob) and — for auto — each
vehicle's year/make/model are REQUIRED; they have no server-side
fallback. A missing or mistyped one errors at the schema with guidance;
a value that fits the schema but cannot rate ("not-a-zip", a negative
age) comes back in `profile_required` naming it, with guidance on what
the field takes. Use the profile schema's exact field names.
Each carrier returns a **point estimate**
(`monthly`) plus a `confidence_interval` that reflects only what's genuinely
unresolvable (irreducible), NOT missing profile fields. A field the caller
omits is filled with ONE declared value and reported in `assumptions` /
`tighten_by` (the reducible "tell us X and we sharpen" gap) — the response
is built to be presented early and refined, never widened into
a vague range. An entry that carries `path` names the exact profile
field to send the user's real answer under — never guess a key from the
fact's name. A path-less entry (`incident_details`) is answered by
completing the incident entries already sent (dates, fault, BI split), not
under a fresh key. A `tighten_by` fact answers at its matching
`assumptions` entry's path — or, for a flagged given value, its
`input_flags` entry's path.
Each carrier's `quote` carries every sub-coverage line (BI/PD/collision/
comprehensive/UM…) with its rating steps, at the selection you passed (echoed
as `coverage_selection`). Most carriers also carry a `price_ladder`: for each
coverage lever of the line (auto: BI limit, PD limit, collision/comprehensive
deductible; renters: deductible and the C/E/F limits; home: AOP deductible
and the A/E/F limits) the exact
price at every rung, one lever moved at a time with everything else
held at the user's selection — the ladder is anchored at the selection you
passed, so its `anchor.monthly` is the carrier's `monthly`. It answers
limit/deductible what-ifs with real marginal prices.
Every ladder number IS an exact re-rate; a combined change or an unlisted
rung has no derivable price (rating is not linear), so those price only
through a re-call with the new `coverage_selection`.RESULT FORMAT: a compact machine text, not JSON. Its first line is Q sel=<the coverage_selection priced, as JSON>; then a legend and a factor dictionary (f0= …). Row types — C: carrier|entity|monthly|ci lo-hi. L: monthly $ per coverage line (already monthly, every carrier). F ()=v,v,…: one rating factor, one value per coverage in the L order; blank = not applied, one value = all coverages; suffix ? = estimated, ~ = derived, none = exact. D =option:±$: the change in the carrier's monthly for each option of that lever, everything else held at the selection — answer deductible/limit what-ifs from D without another call (new monthly = monthly + delta). Only state numbers that appear in the result or follow from monthly + a D delta; if a rung is not in D for a carrier, say the carrier has no such option rather than guessing.
When the user wants firm numbers straight from the carriers, offer live carrier quotes: Foresee agents complete the carriers' real quote flows via live_carrier_quotes (which explains the required disclosure + consent affirmation; no sign-in is needed). Instant quotes stay the first answer; live quotes are the follow-up.
LIVE TODAY: Foresee quotes auto in CA today.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | ||
| profile | Yes | ||
| carriers | No | ||
| include_partial | No | ||
| include_failures | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| error | No | ||
| state | No | ||
| bundle | No | Per-carrier bundle totals, keyed like by_line's carrier_key, when one carrier priced several of the asked lines together. Absent means no bundle pricing was computed — never present multi-line prices as bundled unless this block says so | |
| detail | No | ||
| by_line | No | Each priced line's carriers, cheapest first | |
| message | No | ||
| skipped | No | Lines not priced, with the honest reason — relay it | |
| serviceable | No | ||
| presentation | No | How to present priced results — rides with them | |
| profile_required | No | Required profile facts still missing (field → what to pass). Nothing is priced while any is open: supply each — if the user didn't state one, pass your best concrete value and present it to them as your assumption | |
| coverage_required | No | Lines needing a coverage ask, each naming its own axes | |
| example_arguments | No | On a profile_required refusal: a correctly-wrapped call to imitate — re-call with the user's facts in this shape |