curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions \
--header 'Authorization: <api-key>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"readyToBind": true,
"failures": [],
"advisories": []
}Check Bind Conditions
Checks whether a saved quote is ready to bind, without binding it. It lists
every unmet bind condition (your configured bind rules and required policy
fields) and every billing or invoice problem, each with the message the bind
would give, and warns of out-of-date ratings. Call it before Bind Quote
(bindQuote), passing the same invoices value the bind will send.
Quote door, dry run (Invoicing a policy).
It checks the bind you are about to send, its invoices included: they come
from the quote, and invoices names which, as the bind will.
Runs the quote → policy conversion server-side and reports every unmet bind rule for a quote, before an underwriter commits the bind. This is a read-only diagnostic endpoint — no policy is created, the quote is not linked, and nothing is persisted.
The check produces the exact policy payload the bind would produce for this company, then evaluates the Policy entity invariants (the configured bind rules, framework and tenant) plus the structural policy-payload validation over it, and returns each failing condition’s message — the same message the bind’s rejection would carry.
Which quotes can be checked. Every quote type. newBusiness and
renewal check full policy conversion. endorsement, cancellation and
reinstatement check financial readiness and return checkScope
endorsement-billing, cancellation-billing or reinstatement-billing;
their other transaction checks remain at bind, except two: at every
company, an endorsement of a policy whose latest version carries a
cancellation is a payload failure carrying the bind’s
409 PolicyCancelled message (a cancelled policy takes no endorsement
until it is reinstated), and an endorsement whose bind would change
nothing on the policy is a payload failure carrying the bind’s
400 InvalidRequest message (This endorsement has no changes to bind.).
A quote already in a
terminal state (bound or cancelled) returns
409 BindCheckQuoteNotBindable — it cannot be bound, so there are no bind
conditions to check.
Required policy fields. Once the bind rules pass, a full-policy check
also checks the policy against the required fields and types the bind
enforces. Each field the policy would lack, such as a policyNumber
copied from a quote that has none, is a payload failure carrying the
bind’s 400 InvalidEntityShape message, for example
'policyNumber' is required but null. A value the configuration
calculates only at bind, such as a policy number generated from a
sequence, is not checked: it does not exist until the bind, which still
refuses the policy if that calculation leaves the value empty.
Every rule is checked. A bind rule whose condition cannot be evaluated
ahead of the bind (it reads the wall clock or mints a value) is reported as
a failure whose message names the rule, as the bind would refuse it. A
green full-policy check (readyToBind: true with no checkScope) evaluates
every such rule. Same-term billing scopes leave final transaction checks to Bind.
Billing. Stated receivables must equal the actual bind price. New business and renewal use the converted, resolved Policy; same-term changes use prepared transaction pricing, including the taxes and fees of a cancellation or reinstatement. A failure reports the signed price-minus-receivables gap and asks the caller to re-rate. Existing or planned invoices must add up to stated billing, as Invoice plans explains; matching posted invoices need no new plan.
The intended layer. The check runs the bind’s
intended-layer check: the bind must leave the policy at the quote’s intended
layer of the pricing stack, read
from the pricing and billing the bind would prepare and the invoices the
invoices you pass would leave. A quote with no intended layer, or one its
bind would miss, is an invariant failure carrying the message of the
bind’s 422 quote-pricing-stack-intended-layer-required or
422 quote-pricing-stack-intended-layer-mismatch, which names the fix with your
request’s ids. It is listed beside any other financial failure rather than
in its place. When the bind’s preparation fails before its result is known,
only a missing intended layer is reported.
Invoices. invoices mirrors the bind’s option exactly, so pass the one
your bind will send: invoices=generate checks the plan the bind would
generate from the quote’s invoice settings, invoices=saved checks the plan
saved on the quote, and leaving it out checks a bind of no invoices, which
fails while the quote holds a plan. The check never saves a plan or creates
invoices. Each refusal the bind would give is a payload failure carrying
the bind’s message, never a 409 or 422: no invoices while the quote
holds a plan (finv2-quote-has-invoice-plan at Bind), saved with no plan
saved (finv2-quote-invoice-plan-missing), a plan that no longer adds up,
or a generation that cannot run, such as excess on an unpaid invoice the
chosen handling keeps, or a quote whose fullTermBillingInfo is null (or
has no lines), which the failure names, as Bind’s
422 finv2-payment-generation-refused does.
Quote invoicing explains how
generation reads the settings, keeps or voids invoices, and credits paid
excess. Any other value returns 400.
Rating advisories. The response always carries advisories, possibly
empty: one for each rating workflow whose rating is out of date, meaning
something that could move its price changed after it was rated: an input
it read, its term, the workflow’s rating setup, a rater it used, which now
has a newer version, or, for an endorsement, the policy it endorses, which
now has a newer version. Its message names each change; a newer policy
version names both versions. An advisory never changes readyToBind or
failures; it names the request that rates the quote again and saves the
rating, and says that binding using the rating the quote holds needs
confirmStaleRating: true
(Bind Quote).
A rating saved in the app, or through the API with
Rate Saved Quote by Id
and saveToQuote: true, is checked. A rating whose freshness cannot be
checked, such as rating outputs a client wrote to the quote with Update
Entity, gets no advisory.
Required permission: quote.view
curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions \
--header 'Authorization: <api-key>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/bind-conditions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"readyToBind": true,
"failures": [],
"advisories": []
}Authorizations
Path Parameters
Query Parameters
Response
The bind-condition check result for the quote.
