Skip to navigation

Show quotes to a person

Read a quote, show its price and coverage, and send the person to buy it.
View as Markdown

Once a quote request lists a quote in quotes, read it with GET /v1/quotes/{id}. This is a recorded sandbox auto quote:

Response
{
"id": "qt_5509b679fd9c50116b9d7791078a12ab",
"version": 1,
"environment": "sandbox",
"quote_request_id": "qreq_f09d1472f363261d325ba98ca1d965ee",
"created_at": "2026-09-27T15:00:20.000000Z",
"updated_at": "2026-09-27T15:00:24.000Z",
"status": "active",
"status_details": {
"reason": "available",
"message": "This quote is available."
},
"source": {
"carrier": {
"id": "assurance-america",
"name": "Assurance America"
},
"product": "Sandbox Auto",
"carrier_quote_id": null
},
"price": {
"premium": {
"amount_minor": 186000,
"currency": "USD"
},
"term_months": 6,
"billing_cycle": "pay_in_full",
"fees": []
},
"coverage": {
"conditions": [
"Sandbox premium. Not a carrier price."
],
"subjects": [
{
"subject_id": "vehicle-1",
"kind": "vehicle",
"label": "2019 Toyota Camry",
"coverages": [
{
"code": "bodily_injury_per_person",
"limit": {
"amount_minor": 10000000,
"currency": "USD"
},
"deductible": null,
"included": true
},
{
"code": "bodily_injury_per_accident",
"limit": {
"amount_minor": 30000000,
"currency": "USD"
},
"deductible": null,
"included": true
},
{
"code": "property_damage",
"limit": {
"amount_minor": 5000000,
"currency": "USD"
},
"deductible": null,
"included": true
},
{
"code": "comprehensive",
"limit": null,
"deductible": {
"amount_minor": 100000,
"currency": "USD"
},
"included": true
},
{
"code": "collision",
"limit": null,
"deductible": {
"amount_minor": 100000,
"currency": "USD"
},
"included": true
}
]
}
]
},
"availability": {
"expires_at": "2026-10-27T15:00:20.000Z"
},
"next_actions": [
{
"id": "qt_5509b679fd9c50116b9d7791078a12ab",
"resource": "quote",
"type": "read_status"
},
{
"open": "new_tab",
"quote_id": "qt_5509b679fd9c50116b9d7791078a12ab",
"quote_version": 1,
"redirect_path": "/v1/handoffs/hoff_353aed36c3e9329734184da6ed7de6a6",
"type": "continue_on_carrier_site",
"url": "https://www.truvo.com/s/eadd89e890e1a1871517"
}
],
"evidence": {
"assumptions": [],
"label": "mock"
}
}

Quote fields

FieldWhat it holds
statusactive or inactive. Offer the quote’s next actions only while it’s active.
status_detailsWhy the quote has its status: a reason and a message that you can show the person. The reasons today are available (active), and expired (inactive).
sourceThe carrier and the product that priced the quote, and carrier_quote_id: the carrier’s own number for the quote, or null. A person can give that number to the carrier. product is the name of the carrier’s product, or null when Truvo has none. A carrier can give a quote for each of several products.
pricepremium, with an amount_minor and a currency of USD, or null when the price is unknown. Also term_months, billing_cycle (pay_in_full or monthly), and fees. premium is the price for the whole term of term_months months, as the carrier states it, even when billing_cycle is monthly. term_months is null when the term is unknown. On a renters quote, premium already includes every fee in fees: show it as the total, and don’t add the fees to it. On other lines, the quote doesn’t say whether premium includes fees.
coverageconditions and the covered subjects.
availabilityexpires_at, when the quote turns inactive. See When does a quote expire?.
next_actionsThe actions this quote supports.
evidencelabel: mock for a made-up sandbox price, or live for a carrier’s price. Also the assumptions specific to this quote, such as a value the carrier changed. The quote request’s assumptions lists the ones every quote shares.

The API reference lists every field.

Show the price

  • Show premium with its term: the auto quote above is $1,860 for 6 months.
  • To give a monthly figure, divide premium.amount_minor by term_months and round up to the dollar. Say that it’s the premium spread over the term, not a payment plan: $310 a month for the quote above. When term_months is null, show only the premium.
  • An unknown value stays unknown. Don’t fill in a price, a fee, or a limit that the quote doesn’t give.
  • A quote is a price offer, not coverage. A checkout link isn’t proof of payment or coverage either.
  • One carrier’s quote isn’t a market comparison.
  • A sandbox quote has evidence.label mock and the coverage condition Sandbox premium. Not a carrier price.

Send the person to buy

Offer only the actions a quote lists, and never infer one from the line or the carrier. Skip an action of a type that you don’t know.

  • continue_on_carrier_site gives a url to open in a new tab. The link goes through a Truvo redirect to the carrier’s site and works until availability.expires_at. After that, it opens a Truvo page that says the quote has expired. In the sandbox, the link opens a Truvo sandbox page, never a carrier site.
  • read_status names a resource to read again. An inactive quote lists only read_status. Send a new quote request for a new price.

The quote request has next actions of its own:

  • continue_on_truvo: a personal auto request that completes with a quote can list a url to Truvo’s results page for the request, to open in a new tab, where the customer can see more options and go on to buy. A live request lists it only when the customer agreed to the quote disclosure that includes contact consent. The page shows the customer’s details to anyone who opens the link, so give it only to the customer.
  • request_assistance: give the person advisor_line.phone from GET /v1/capabilities, or send POST /v1/callback_requests with the number they asked Truvo to call.

Mobile apps and web views

In a mobile app, open a continue_on_carrier_site link in the system browser or an in-app browser tab: SFSafariViewController on iOS, or Custom Tabs on Android. Don’t load it in an embedded web view such as WKWebView or Android WebView.

The link redirects to the carrier’s own site, where the customer enters personal details and pays. A browser tab shows the carrier’s address, and it gives the customer the browser’s saved passwords, autofill, and payment methods. An embedded web view shows no address, doesn’t share the browser’s saved data, and lets the host app read the page, which is the carrier’s checkout.