curl --request POST \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/rating/retire \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"ratingWorkflowName": "GL Rating"
}
'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/rating/retire"
payload = { "ratingWorkflowName": "GL Rating" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({ratingWorkflowName: 'GL Rating'})
};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/rating/retire', 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}/rating/retire",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'ratingWorkflowName' => 'GL Rating'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/rating/retire"
payload := strings.NewReader("{\n \"ratingWorkflowName\": \"GL Rating\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/rating/retire")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"ratingWorkflowName\": \"GL Rating\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/rating/retire")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"ratingWorkflowName\": \"GL Rating\"\n}"
response = http.request(request)
puts response.read_body{
"quoteId": "550e8400-e29b-41d4-a716-446655440002",
"ratingWorkflowName": "GL Rating",
"outcome": "retired",
"ratingRunId": "550e8400-e29b-41d4-a716-446655440030"
}Retire Quote Rating
Retires a saved quote’s current rating for one rating workflow, once
that workflow has changed since the rating and nothing else makes the
rating out of date. Only the rating stops being current: nothing is saved
to the quote, which keeps everything the rating wrote,
fullTermPricingInfo included. With no current rating, the
workflow is not checked for staleness: the quote’s rating reads Not
Checked, and
Bind Quote
and
Check Bind Conditions
raise no out-of-date advisory or 409 quote-rating-out-of-date for it,
until the quote is rated again in the app or with
Rate Saved Quote by Id
and saveToQuote: true.
Clear Quote Rating,
which refuses a rating made under an earlier version of its workflow,
then clears the quote’s selected workflow.
Staff use it when a workflow changes in a way that leaves the ratings made under it standing, such as taking the pricing stage out of a workflow when a company’s quote price becomes a calculation: those ratings would otherwise read Rating setup changed although nothing they priced changed.
The rating’s freshness is judged as Bind Quote judges it. A rating that
is out of date for something besides its workflow’s change (an input it
read, the term or the policy version changed, or one of its raters has a
newer version) keeps that warning: it stays current, and the response
says outOfDate and names what changed. Every change to a workflow’s
setup reads as one change, so a rating an earlier setup change had
already put out of date is retired too, and while the rater catalog
cannot be read, a newer rater version goes unseen. A rating made under the
workflow as it is configured now stays current (workflowUnchanged), and
a quote with no current rating for the workflow answers
noCurrentRating. None of these changes anything, so the request is safe
to send again.
Refusals. A bound or cancelled quote returns 409. Nothing changes on
a refusal.
Required permission: none — staff level staff (a staff user’s own
Bearer token or a verified platform service identity); API keys are
rejected.
curl --request POST \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/rating/retire \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"ratingWorkflowName": "GL Rating"
}
'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/rating/retire"
payload = { "ratingWorkflowName": "GL Rating" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({ratingWorkflowName: 'GL Rating'})
};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/rating/retire', 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}/rating/retire",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'ratingWorkflowName' => 'GL Rating'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/rating/retire"
payload := strings.NewReader("{\n \"ratingWorkflowName\": \"GL Rating\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/rating/retire")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"ratingWorkflowName\": \"GL Rating\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/quotes/{quoteId}/rating/retire")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"ratingWorkflowName\": \"GL Rating\"\n}"
response = http.request(request)
puts response.read_body{
"quoteId": "550e8400-e29b-41d4-a716-446655440002",
"ratingWorkflowName": "GL Rating",
"outcome": "retired",
"ratingRunId": "550e8400-e29b-41d4-a716-446655440030"
}Authorizations
User-principal OAuth 2.0 Bearer authentication. Send a user-scoped Auth0 access token (audience = the app API audience) as Authorization: Bearer <jwt>. The request resolves to the user's identity and is authorized by their Role on the {companyId} in the path — the same role-based permissions the web app enforces. This is the path the MCP connector uses to act on a user's behalf; endpoints that accept it list both BearerAuth and ApiKeyAuth.
Path Parameters
Company identifier
Quote identifier
Body
The configured name of the workflow whose current rating to retire
1Response
The workflow's current rating is retired, or was left as it is. The quote itself is unchanged either way.
The quote
The workflow named in the request
retired: the rating was made under an earlier version of the workflow, or under a workflow no longer configured, or recorded nothing to judge it by, and nothing else makes it out of date; it is no longer current. noCurrentRating: the quote has no current rating for the workflow. workflowUnchanged: the rating was made under the workflow as it is configured now, so it stays current. outOfDate: the workflow changed since the rating, but the rating is out of date for changed too, so it stays current and keeps that warning.
retired, noCurrentRating, workflowUnchanged, outOfDate The rating retired, or the one that stays current. Absent with noCurrentRating.
outOfDate only: what besides the workflow changed since the rating. Each entry is the path of an input it read (such as quote.excessLiabilityPremium), window (the term), policyVersion, or raterVersion.
