Skip to main content
One POST /v1/quotes prices a deal: one insured and up to 25 policies financed together as one loan, from any mix of carriers. There’s no session to open and nothing to clean up afterwards.

Build the request

This example finances a general liability and property package plus a standalone windstorm policy, with the taxes and fees from the binder:
What each part does:
object
required
The borrower. name (legal name) and address.state, the two-letter USPS state code such as TX, are required to quote. A full state name such as Texas is a 422 (Use the two-letter state code, e.g. "TX" for Texas.), and so is any other value that isn’t a code (Must be a two-letter US state code, e.g. "TX".). A valid code outside Texas still gets a quote, marked ineligible. dba, fein and the rest of the address are optional now, but the full address is needed before the deal can bind, so send it if you have it.
string
required
The premium as the binder or quote shows it, excluding taxes and fees, as a decimal string. If you only have the total amount due, send it here with no taxes_and_fees; we’ll note that assumption.
object
required
Exactly one of rate (a fraction: 0.25 is 25%) or amount (the dollar minimum earned premium from the binder). We convert an amount to a rate and tell you so in assumptions. If the minimum earned changes during the policy, as hurricane-season windstorm forms do, send the highest one that applies during the loan.
array
Each with an amount and optional description. Mark earned: false for a tax or fee the insured gets back on cancellation, such as surplus lines tax; leave it out and we assume true. Every tax and fee is financed either way; earned only affects the collateral math.
string
required
YYYY-MM-DD. Every policy on one loan must share the same dates; mixed dates make the deal ineligible. Financing starts on the effective date, which can be at most 30 days in the past.
object
required
name, plus naic_code or am_best_id if you have them. We look up the AM Best rating ourselves and return the rating we used and where it came from.
array
required
The lines the policy covers, from the coverage types list. A package lists each line.
string
Not needed to price. document_type is quote, binder or policy. Both feed binding readiness.
string, object
Your own ids, returned unchanged on the quote. metadata (up to 20 string pairs) also works on each policy. See your ids.
string
The broker who owns the quote. Leave it out to use the key’s default broker. See acting as a broker.
Unknown fields are rejected, with a “did you mean” hint, and every problem in the body comes back in one 422, so you can fix them all at once. See VALIDATION_FAILED.

Read the response

A 201 Created returns the quote (illustrative figures; 29 of the 30 options removed):
201 Created
Work through it in this order:
1

eligibility

status is eligible or ineligible. checks lists every rule we ran, with its limit, and reasons says why an ineligible deal failed. An ineligible quote still returns 201 with no options. See eligibility.
2

assumptions and warnings

assumptions is everything we filled in, each pointing at the request field (param) it concerns. Here: one fee not marked as earned, an unverified carrier rating and an unknown audit status. warnings flags things to check before binding, like a windstorm policy’s minimum earned. Send the real values and quote again to clear them. See assumptions.
3

options

Every down payment and term we can offer. Each option has its own id, the APR, and every amount you’d put in front of a client: down_payment, amount_financed, monthly_payment, finance_charge, total_of_payments and total_cost. They add up to the cent: down_payment + total_of_payments = total_cost. Show recommended_option_id first. To pick one by rule, see choosing an option in code.
4

binding_readiness

What’s still needed before this deal can bind, such as a policy that is still a quote. It doesn’t stop you quoting or sharing the link. See binding readiness.
5

hosted_url

The page your client opens to choose. It’s returned only now, so store it. See the interactive quote.
The down payments in this example are 15%, 20%, 25%, 30% and 35%. They follow the deal’s premium-weighted minimum earned (25% here), not a fixed grid, so a deal with a different minimum earned gets different down payments. That’s why you shouldn’t hard-code an option id; choosing an option in code shows the safe way.

Good to know

  • A quote is a snapshot. We price once and store the result; GET /v1/quotes/{id} returns it unchanged and never re-prices. To change anything, create a new quote. See indicative quotes.
  • Quotes expire 30 days after they’re created (expires_at).
  • Comparing alternatives, such as two carriers for the same risk? Create one quote per alternative and give them the same client_reference_id.
  • Policies come back in the order you sent them, each with an id (pol_...) and your metadata.
  • The quote counts toward your daily quote limit whatever the outcome, including 422s. Validate on your side first. See rate limits.