Start a car insurance quote
start_quoteStep 2 of 3: call it once, with the collected next_question returned when ready_to_quote was true. It returns a quote_id for get_quote. If it answers quote_in_progress, do not call it again: read the quote_id you already have. Retrying the same call, after a timeout say, is safe: while its rating runs, the retry starts no second one and answers quote_in_progress.
Asks Sigo's carriers for car insurance estimates. Carriers answer over tens of seconds, so this returns a quote_id straight away rather than waiting; read the prices with get_quote. Estimates are not binding: this does not select a policy, take payment or bind coverage. No browser is needed to get them: they come back in these tool calls, and the link in each one is where the customer continues if they want to buy.
Call it once the details are gathered. Gather them a step at a time in conversation — listing every field up front reads as a form and loses people before the first answer.
For a customer who already has a quote and wants something changed, pass that quote's id as revise_of instead of starting over: the same person re-quoted, not a second one. A call for a customer who already quoted today and is still at their first round revises that quote even without revise_of — the result says revised_from_quote: true — so a forgotten id never makes a second application.
The same call carries the second round. Once the customer has answered what next_question asks with stage: "second_round" — address, VIN, ownership and lienholder, licence status and months held, occupation, education, prior coverage, excluded drivers, and each driver's document number in drivers[].document.number — send them all here with revise_of, and the carriers price the quote again on what they now know.
The address the second round asks for is where the car is kept, and it is checked against the ZIP the quote is running on. They disagree, and the answer is to correct whichever one is wrong — never to move the customer onto a ZIP in a state the car is not kept in.
One quote at a time per customer. If their previous quote is still being answered, this fails with quote_in_progress and a poll_after_seconds: say so, read the earlier quote with get_quote when that time has passed, then ask for this one again with revise_of. Two asks at once ("the Civic and the Silverado") are run one after the other, and each result's asked_for says which is which.
Apart from arguments the schema rejects, a refusal comes back with a code, a message for the customer and a next_step for you, which says what to do next and which tool, if any, to call.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Identifies the customer and is how Sigo reaches them about this quote. No phone number is collected here, so nothing can be called or texted from this channel — which is not the same as Sigo not calling: a customer who wants a call leaves their number in Sigo's own flow, through the link on their estimate, and an agent calls them. | ||
| locale | Yes | The language the customer is writing in. Set it from their own messages rather than leaving the default: the estimate's notice comes back in this language, and a notice the customer cannot read discloses nothing. Sigo serves these two languages only. | |
| address | No | Second round only. The street address where the car is kept overnight — street and number; the ZIP already gave the city and the state. It is checked against that ZIP, and an address somewhere else is refused rather than quoted: this is the field that decides which state the policy is rated in. Where they work is not it. | |
| drivers | Yes | ||
| vehicles | Yes | ||
| zip_code | Yes | The 5-digit ZIP code where the vehicle is kept. It determines the state. | |
| collected | Yes | The `collected` next_question returned once `ready_to_quote` was true. Required: it is the record that every question was put to the customer. A call without it, or with one that still has questions pending, is refused with `questions_not_finished` and creates nothing. | |
| revise_of | No | When the customer wants a quote they already have run again with something changed — another deductible, another coverage, a detail they gave wrong: pass that quote's `quote_id` here, with the full details including the change. It re-quotes the same person instead of making them a second one. Never invent this value, and never use it for a different customer. | |
| is_student | No | ||
| is_homeowner | No | ||
| correction_of | No | Only when a previous call failed with `data_not_accepted`: pass the `correction_of` it returned, together with the corrected details. The quote is retried on the same record instead of starting a second one for the same person. Never invent this value. | |
| uninsured_motorist | Yes | Whether to include uninsured-motorist protection — cover for when the other driver has no insurance. Ask it; it is the one add-on offered at this step and it changes the price. | |
| has_prior_insurance | Yes | Whether the customer currently has car insurance. | |
| prior_coverage_months | No | Second round only, and only for a customer who has insurance now. How long they have been covered: offer 6 months, 1 year, 3 years, 4 or more. | |
| prior_coverage_expiration | No | Second round only. YYYY-MM-DD, when the current policy ends. Today is accepted; a date already past is refused: confirm it with the customer, and if their coverage really did end, they have no prior insurance to send. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | ||
| covers | Yes | ||
| quotes | Yes | ||
| status | Yes | ||
| contact | Yes | ||
| carriers | Yes | ||
| problems | Yes | ||
| quote_id | Yes | Pass this back to get_quote to read the result again. | |
| asked_for | Yes | Label each answer with this when comparing two quotes for the same customer, so "con deducible de 1000" is matched to the quote that asked for it. | |
| issued_by | Yes | ||
| quoted_at | Yes | ||
| expires_at | Yes | ||
| application | Yes | ||
| pending_note | Yes | What to do while carriers are still answering, in the customer's language. Null once the list is final. | |
| price_levers | Yes | ||
| to_final_quote | Yes | ||
| personal_use_note | Yes | Present when the customer said the vehicle is used for work. Say it with the prices: this quote is personal auto. Null when they said nothing about it, and then the subject is not raised. | |
| poll_after_seconds | Yes | How long to wait before calling get_quote again. | |
| revised_from_quote | Yes | True when this quote re-quoted the same customer: started with revise_of, or for a customer who already quoted today and was still at their first round. One person, one application, priced again. | |
| more_carriers_pending | Yes | True when more carriers may still return a price; the list is not final. |