BriteQuote allows insurers to configure customized quoting and application workflows for targeted user experiences. BriteQuote is the API backend that stores quotes, risks, field answers, coverages, and premiums.
To create a quote, BriteQuote interacts with various back-end services, including BriteRules, BriteLines, and BriteCore. To summarize the interactions:
- Lines controls the definition of the information to be collected on a quote.
- Lines also defines calculations and rate tables, which it then passes to the rating engine to calculate the premium for quote.
- Quoting controls the display of information on a quote.
- Rules control the behaviors and validation of information on a quote.
In this tutorial, we will guide you through creating your own custom quoting application workflow using BriteQuote. This tutorial covers the key concepts, prerequisites, process flows, and steps involved to use BriteQuote’s endpoints.
Processing policy applications through API endpoints in BriteCore occurs in the following broad steps:
- Choose a product for a quote.
- Create a quote.
- Get form details, assets, and coverages from risk type states.
- Add an asset (risk type to a quote).
- Add coverages (items).
- Update an asset (risk type) and quote.
- Submit the quote for review.
- List possible quote transition states.
- Approve your quote.
- Bind a quote.
- Collect billing information.
- Upload an attachment to BriteQuote.
Key concepts
- Application: An application is a form submitted to an insurer requesting an insurance policy. Applications extend quotes with additional information.
- Bound/Unbound: Binding refers to insurance coverage and means that coverage is in place, although a policy has yet to be issued. Binding often takes place through a verbal agreement, in person, or by phone.
- Coverage: Coverage is a guarantee of financial restoration in the event of a loss. In BriteCore, coverages are considered a line item under Items.
- Policy: A policy is a contract that guarantees insurance coverage for a period of time.
- Premium: A premium is money paid by a policyholder to an insurance carrier in exchange for insurance.
- Quote: A quote is a snapshot of a quoted premium with supporting risk and insurance information.
- Quoting: Quoting is the process of entering risk information, requesting a given level of insurance, and receiving a premium quote for a policy.
- Risk: A risk is an asset protected by insurance.
Prerequisites
Define Line of Business in BriteLines
You can't instantiate quotes without a Line of Business (LOB) definition in BriteLines. BriteLines includes a rating engine, which is a service that evaluates field answers and items (coverages) on a quote or policy and provides a premium. The rating engine is one of the primary features of BriteLines.
LOBs define:
- Different types of risks. Think of risk types as a class (for example, vehicles) and risks as instances of a risk type (for example, a particular vehicle).
- The relationship between risk types; for example, a policy with several drivers who have multiple driving violations.
- Fields that can be collected during a quote and their definitions. For example, the Vehicle Identification Number (VIN) field is defined as a string.
- Rate tables, rate factors, rate modifiers, and calculations, which are used to determine premiums on coverages.
- Items, which are coverages, fees, and other line items that might appear on the Policy Declaration.
BriteLines defines all of the data points that will be captured and evaluated during a quote, so it's important to understand the structure of the LOB before working on building a quoting front end.
The quoting front end won't interact with BriteLines directly. Instead, the quoting front end will submit requests to BriteQuote, which will communicate with BriteLines to create new quotes for a given line and new risks from a given risk group.
Define rules in BriteRules
BriteRules evaluates business rules during different transactions like new business (quoting), endorsement, and renewal.
For quoting, the following rule types are important:
- Validation rules: Rules that validate that field answer values and items are allowed.
- Behavior rules: Rules that change values on a quote, like adding/removing a field, adding/removing a coverage, or showing/hiding a field. It may also restrict the number of options for a given field.
- Underwriting rules: Rules that automatically evaluate a quote and approve/decline based on the contents.
BriteQuote handles submitting risks to BriteRules, so the quoting front end won't be expected to interact directly with BriteRules.
BriteRules returns a list of actions for BriteQuote to perform. BriteQuote performs these actions by updating the risks on the quote and returning the changes. The quoting front end is expected to respond by displaying the changes that are received from BriteQuote. Those changes will include displaying validation errors, showing/hiding fields, and changing field values.
BriteRules also determines which documents and forms need to be generated by BriteDocs. BriteDocs then interacts directly with BriteQuote to deliver the appropriate forms and deliverables.
Set up vendor integrations (if applicable)
Each vendor integration is a REST API service that sits between the quoting front end (or other API consumers) and the third-party vendor product. Each vendor integration must provide a well-structured REST API that is documented with OpenAPI.
Vendor Integrations are called from the quoting front end. Requests are sent to the Integration REST API service. The response data is mapped on the frontend into risks and risk field answers.
Quoting proposal flow
Figure 1 shows the interactions between BriteQuote, BriteDocs, and BriteRules to deliver the appropriate documentation for a quote application.
Figure 1: Interactions between BriteQuote, BriteDocs, and BriteRules.
Quoting submission flow
Figure 2 shows the quoting submission flow from agent log in to submission, highlighting all of the interactions between different BriteCore services.
Figure 2: The quoting submission flow from agent log in through submission.
Policy binding flow
Figure 3 illustrates how a quote is bound after submission.
Figure 3: Quote binding after submission.
Create and bind a quote using BriteQuote
Note: Blocks of code are hidden by default to make the page more navigable. Select View code and Hide code to view or hide these sections as needed.
Step 1: Get a security token
You will need to request an ID
and Secret
to use OAuth 2.0.
For more information, refer to How do I get started?
Step 2: Choose a product for a quote
Use the getQuotableProducts endpoint (/quote/quotable-products/
) to view the list of products available for quoting. You pass the effective date as the starting point. It defaults to the current date. Use the name
field from this list as a parameter to pass in the next step.
Sample request
curl --location --request GET 'https://{urL}/api/quote/quotable-products/?effective_before=06/24/2020' \
--header 'Authorization: Bearer
Sample response
[
{
"parent_product": null,
"line": {
"id": "0bae26bf-0daa-4c05-bd51-5d4dfdbb3a3f",
"label": "Personal Auto",
"name": "Personal Auto",
"description": "A line of business to represent personal auto "
},
"version": {
"id": "093cdf4e-8711-482a-bf22-94084bb42574",
"date_added": "2019-05-20",
"date_modified": "2019-08-19",
"name": "Initial Version",
"effective_date": "2020-05-19",
"status": "published",
"description": "The first version of the product.",
"previous": null
},
"name": "personalAutoCW",
"label": "Personal Auto LOB - Countrywide"
},
{
"parent_product": null,
"line": {
"id": "0bae26bf-0daa-4c05-bd51-5d4dfdbb3a3f",
"label": "Personal Auto",
"name": "Personal AutoLob",
"description": "Second version of the product"
}
}
]
Step 3: Create a quote
BriteAPI uses the createQuote endpoint (/quote/
)to create a quote. You must pass the required parameters effective_date
and product_name
(which maps to line_name
or line of business) to instantiate a quote.
Sample request
'curl --request POST \
--url /api/quote/ \
--header 'authorization: ' \
--header 'content-type: application/json' \
--data '{
"product_name": "personalAutoCW",
"effective_date": "2020-07-16",
"expiration_date": "2020-07-16"
}
Sample response
{
"id": "8bd1a736-5d17-4bd8-8e47-1da7627ad102",
"quote_number": "Q-personalAutoCW-2020-159",
"transaction_type": "new_business",
"source_quote_number": null,
"status": "In Progress",
"policy_state": {
"policy": {
"inception_date": "2020-07-16",
"number": ""
},
"term": {
"effective_date": "2020-07-16",
"expiration_date": "2020-07-16"
},
"revision": {
"revision_date": "2020-07-16",
"description": "New Policy"
}
},
"root_risk_quote_id": "e54ef2f5-b129-4e4d-96a7-f8d6a7dba800",
"product_name": "personalAutoCW",
"product_version": "eaa6cb9f-4602-4c8e-9bbc-b064755143bf",
"product_label": "Personal Auto - Countrywide",
"agency": null,
"agents": [
{
"id": "5c7376a9-1ca8-4a1c-896e-7b9cb71fe26f",
"name": "Maliha Balala"
}
],
"is_bound": false,
"redirect_uri": "/quote/Q-personalAutoCW-2020-159/",
"owner": {
"id": "5c7376a9-1ca8-4a1c-896e-7b9cb71fe26f",
"name": "Maliha Balala"
},
"named_insured": {
"id": "e40f5f35-9ad1-4985-b38a-6d061ee7c368",
"name": ""
},
"submitted_for_review_date": null,
"date_added": "2020-07-16T19:24:21.687058Z",
"meta": {
"locked": false
}
}
Step 4: Get quote form details, assets, and coverages from risk type state
The risk type state returns a JSON representation of a risk type for a given product and version. It contains information regarding a risk type's entities fields, rate tables, calculations, and items, as well as its line. The risk type state is used by the rating engine to rate a risk, as well as by quoting to display information about fields and items.
For more information, refer to Retrieve product definition tutorial to get all the relevant endpoints and details.
Step 5: Add an asset (risk type) to the quote
Use the createRisk object (/quote/risks/
) to link an asset (risk type) to the quote and pull the relevant field definitions from Lines. For instance, a vehicle risk type will pull field information such as model, VIN, etc. This step creates a risk state which is a JSON representation of a risk type at a point in time.
Sample request
curl --request POST \
--url /api/quote/risks/ \
--header 'authorization: \
--header 'content-type: application/json' \
--data '{
"quote": "8bd1a736-5d17-4bd8-8e47-1da7627ad102",
"parent_risk_quote": "e54ef2f5-b129-4e4d-96a7-f8d6a7dba800",
"risk_type_name": "privatePassengerAutos",
"generated_by": "LexisNexis"
}
Sample response
{
"id": "95fd4cbe-b34a-49a9-9977-4105ce99b75b",
"number": 1,
"risk_state": {
"schema_version": "1.3",
"id": "95fd4cbe-b34a-49a9-9977-4105ce99b75b",
"name": "Private Passenger Auto 1",
"number": 1,
"total_premium": 55.0,
"type": {
"id": "33ae7229-eaa5-4481-b330-f0fe8edbb4ac",
"name": "privatePassengerAutos",
"label": "Private Passenger Auto"
},
"items": {
"bodilyInjury": {
"premium": null,
"pro_rata": {
"value": null
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
},
"limits": {
"BIPerOccurrenceLimit": 300000.0,
"BIPerPersonLimit": 100000.0
}
},
"propertyDamage": {
"premium": null,
"pro_rata": {
"value": null
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
},
"limits": {
"PDLimit": 100000.0
}
},
"uninsuredMotorist": {
"premium": 55.0,
"pro_rata": {
"value": 55.0
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
},
"limits": {
"UMBIPerOccurrenceLimit": 300000.0,
"UMBIPerPersonLimit": 100000.0,
"UMPDLimit": 100000.0
}
}
},
"detached_items": [],
"item_overrides": {},
"field_answers": {
"zipCode5DigitsOnly": "",
"bodilyInjuryLimit": "bodilyInjuryLimit_100000300000",
"program": "program_standard",
"modelYear": null,
"performance": "performance_standard",
"vehiclePoints": null,
"assignedOwnerPrincipalOperator": "",
"vehicleUse": "vehicleUse_1530milestowork",
"additionalDriver": "",
"hasAntiLock": false,
"propertyDamageLimit": "propertyDamageLimit_100000",
"uninsuredMotoristBodilyInjuryLimit": "uninsuredMotoristBodilyInjuryLimit_100000300000",
"uninsuredMotoristPropertyDamageLimit": "uninsuredMotoristPropertyDamageLimit_100000",
"serialVin": "",
"make": "",
"model": "",
"garagingAddress": "",
"garagingTown": "",
"garagingState": "garagingState_vAVirginia",
"uninsuredMotoristFormRequired": false,
"grossWeight": null,
"jointOwned": false,
"bodyStyle": "",
"registrationState": "registrationState_VA",
"ownerFactor": "",
"additionalFactor": 0.5
},
"field_overrides": {
"modelYear": {
"required": false
},
"performance": {
"required": false
},
"vehiclePoints": {
"required": false
},
"additionalDriver": {
"required": false,
"options": []
},
"assignedOwnerPrincipalOperator": {
"options": []
},
"payee": {
"options": []
},
"lessor": {
"options": []
},
"trust": {
"options": []
}
},
"detached_answers": {},
"calculations": {
"additionalFactorComputedFieldCalculation": 0.5,
"otherAutoPolicy": 0.0,
"termFactor": 1.0,
"antiLockFactor": 1.0,
"multiCarFactor": 0.0
},
"rate_tables": {
"vehicleUseValue": "More than 15 miles to work",
"bodilyInjuryIncreasedLimitFactor": 1.47,
"bodilyInjuryPerOccurrenceLimit": 300000.0,
"bodilyInjuryPerPersonLimit": 100000.0,
"increasedBodilyInjuryCharge": 10.0,
"increasedPropertyDamageCharge": 5.0,
"propertyDamageDisplayLimit": 100000.0,
"propertyDamageIncreasedLimitFactor": 1.1,
"uninsuredMotoristBiPerOccurrenceLimit": 300000.0,
"uninsuredMotoristBiPerPersonLimit": 100000.0,
"uninsuredMotoristPdLimit": 100000.0
},
"pro_rata": {
"value": 55.0
},
"meta": {
"static_id": "95fd4cbe-b34a-49a9-9977-4105ce99b75b"
}
},
"final_rate": null,
"risk_quotes": [],
"generated_by": "LexisNexis",
"date_added": "2020-07-16T19:50:06.294818Z",
"date_modified": "2020-07-16T19:50:06.294861Z",
"meta": {
"locked": false
}
}
Step 6: Add coverage to the quote (item)
Use the addRiskQuoteItem endpoint(/quote/items/
) to add additional coverages/items and details to the risk quotes.
Sample request
curl --request POST \
--url /api/quote/items/ \
--header 'authorization: ' \
--header 'content-type: application/json' \
--data '{
"risk_quote": "95fd4cbe-b34a-49a9-9977-4105ce99b75b",
"risk_item_name": "medicalExpense"
}
Sample response
{
"id": "95fd4cbe-b34a-49a9-9977-4105ce99b75b",
"number": 1,
"risk_state": {
"schema_version": "1.3",
"id": "95fd4cbe-b34a-49a9-9977-4105ce99b75b",
"name": "Private Passenger Auto 1",
"number": 1,
"total_premium": 55.0,
"type": {
"id": "33ae7229-eaa5-4481-b330-f0fe8edbb4ac",
"name": "privatePassengerAutos",
"label": "Private Passenger Auto"
},
"items": {
"bodilyInjury": {
"premium": null,
"pro_rata": {
"value": null
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
},
"limits": {
"BIPerOccurrenceLimit": 300000.0,
"BIPerPersonLimit": 100000.0
}
},
"propertyDamage": {
"premium": null,
"pro_rata": {
"value": null
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
},
"limits": {
"PDLimit": 100000.0
}
},
"uninsuredMotorist": {
"premium": 55.0,
"pro_rata": {
"value": 55.0
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
},
"limits": {
"UMBIPerOccurrenceLimit": 300000.0,
"UMBIPerPersonLimit": 100000.0,
"UMPDLimit": 100000.0
}
},
"medicalExpense": {
"premium": null,
"pro_rata": {
"value": null
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
}
}
},
"detached_items": [],
"item_overrides": {},
"field_answers": {
"zipCode5DigitsOnly": "",
"bodilyInjuryLimit": "bodilyInjuryLimit_100000300000",
"program": "program_standard",
"modelYear": null,
"performance": "performance_standard",
"vehiclePoints": null,
"assignedOwnerPrincipalOperator": "",
"vehicleUse": "vehicleUse_1530milestowork",
"additionalDriver": "",
"hasAntiLock": false,
"propertyDamageLimit": "propertyDamageLimit_100000",
"uninsuredMotoristBodilyInjuryLimit": "uninsuredMotoristBodilyInjuryLimit_100000300000",
"uninsuredMotoristPropertyDamageLimit": "uninsuredMotoristPropertyDamageLimit_100000",
"serialVin": "",
"make": "",
"model": "",
"garagingAddress": "",
"garagingTown": "",
"garagingState": "garagingState_vAVirginia",
"uninsuredMotoristFormRequired": false,
"grossWeight": null,
"jointOwned": false,
"bodyStyle": "",
"registrationState": "registrationState_VA",
"ownerFactor": "",
"additionalFactor": 0.5,
"medicalExpenseLimit": "",
"multiCarChargeME": true,
"passiveRestraint": "passiveRestraint_none"
},
"field_overrides": {
"modelYear": {
"required": false
},
"performance": {
"required": false
},
"vehiclePoints": {
"required": false
},
"additionalDriver": {
"required": false,
"options": []
},
"assignedOwnerPrincipalOperator": {
"options": []
},
"payee": {
"options": []
},
"lessor": {
"options": []
},
"trust": {
"options": []
}
},
"detached_answers": {},
"calculations": {
"additionalFactorComputedFieldCalculation": 0.5,
"otherAutoPolicy": 0.0,
"termFactor": 1.0,
"antiLockFactor": 1.0,
"multiCarFactor": 0.0
},
"rate_tables": {
"vehicleUseValue": "More than 15 miles to work",
"bodilyInjuryIncreasedLimitFactor": 1.47,
"bodilyInjuryPerOccurrenceLimit": 300000.0,
"bodilyInjuryPerPersonLimit": 100000.0,
"increasedBodilyInjuryCharge": 10.0,
"increasedPropertyDamageCharge": 5.0,
"propertyDamageDisplayLimit": 100000.0,
"propertyDamageIncreasedLimitFactor": 1.1,
"uninsuredMotoristBiPerOccurrenceLimit": 300000.0,
"uninsuredMotoristBiPerPersonLimit": 100000.0,
"uninsuredMotoristPdLimit": 100000.0,
"passiveRestraintFactor": 1.0
},
"pro_rata": {
"value": 55.0
},
"meta": {
"static_id": "95fd4cbe-b34a-49a9-9977-4105ce99b75b"
}
},
"final_rate": null,
"risk_quotes": [],
"generated_by": "LexisNexis",
"date_added": "2020-07-16T19:50:06.294818Z",
"date_modified": "2020-07-16T20:06:03.127207Z",
"meta": {
"locked": false
}
}
Step 7: Update an asset (risk quote)
When you change the quote's details, a new risk state is created. Use the updateRisk endpoint (/quote/risks/{risk_quote_id}
), which triggers BriteRules and the rating engine to validate the details and adjust totals.
Sample request
curl --request PUT \
--url /api/quote/risks/95fd4cbe-b34a-49a9-9977-4105ce99b75b/ \
--header 'authorization: \
--header 'content-type: application/json' \
--data '{
"risk_state": {
"schema_version": "1.3",
"id": "95fd4cbe-b34a-49a9-9977-4105ce99b75b",
"name": "Private Passenger Auto 1",
"number": 1,
"total_premium": 55,
"type": {
"id": "33ae7229-eaa5-4481-b330-f0fe8edbb4ac",
"name": "privatePassengerAutos",
"label": "Private Passenger Auto"
},
"items": {
"bodilyInjury": {
"premium": null,
"pro_rata": {
"value": null
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
},
"limits": {
"BIPerOccurrenceLimit": 300000,
"BIPerPersonLimit": 100000
}
},
"propertyDamage": {
"premium": null,
"pro_rata": {
"value": null
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
},
"limits": {
"PDLimit": 100000
}
},
"uninsuredMotorist": {
"premium": 55,
"pro_rata": {
"value": 55
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
},
"limits": {
"UMBIPerOccurrenceLimit": 300000,
"UMBIPerPersonLimit": 100000,
"UMPDLimit": 100000
}
}
},
"detached_items": [],
"item_overrides": {},
"field_answers": {
"zipCode5DigitsOnly": "",
"bodilyInjuryLimit": "bodilyInjuryLimit_100000300000",
"program": "program_standard",
"modelYear": null,
"performance": "performance_standard",
"vehiclePoints": null,
"assignedOwnerPrincipalOperator": "",
"vehicleUse": "vehicleUse_1530milestowork",
"additionalDriver": "",
"hasAntiLock": false,
"propertyDamageLimit": "propertyDamageLimit_100000",
"uninsuredMotoristBodilyInjuryLimit": "uninsuredMotoristBodilyInjuryLimit_100000300000",
"uninsuredMotoristPropertyDamageLimit": "uninsuredMotoristPropertyDamageLimit_100000",
"serialVin": "",
"make": "",
"model": "",
"garagingAddress": "",
"garagingTown": "",
"garagingState": "garagingState_vAVirginia",
"uninsuredMotoristFormRequired": false,
"grossWeight": null,
"jointOwned": false,
"bodyStyle": "",
"registrationState": "registrationState_VA",
"ownerFactor": "",
"additionalFactor": 0.5
},
"field_overrides": {
"modelYear": {
"required": false
},
"performance": {
"required": false
},
"vehiclePoints": {
"required": false
},
"additionalDriver": {
"required": false,
"options": []
},
"assignedOwnerPrincipalOperator": {
"options": []
},
"payee": {
"options": []
},
"lessor": {
"options": []
},
"trust": {
"options": []
}
},
"detached_answers": {},
"calculations": {
"additionalFactorComputedFieldCalculation": 0.5,
"otherAutoPolicy": 0,
"termFactor": 1,
"antiLockFactor": 1,
"multiCarFactor": 0
},
"rate_tables": {
"vehicleUseValue": "More than 15 miles to work",
"bodilyInjuryIncreasedLimitFactor": 1.47,
"bodilyInjuryPerOccurrenceLimit": 300000,
"bodilyInjuryPerPersonLimit": 100000,
"increasedBodilyInjuryCharge": 10,
"increasedPropertyDamageCharge": 5,
"propertyDamageDisplayLimit": 100000,
"propertyDamageIncreasedLimitFactor": 1.1,
"uninsuredMotoristBiPerOccurrenceLimit": 300000,
"uninsuredMotoristBiPerPersonLimit": 100000,
"uninsuredMotoristPdLimit": 100000
},
"pro_rata": {
"value": 55
},
"meta": {
"static_id": "95fd4cbe-b34a-49a9-9977-4105ce99b75b"
}
}
}
Sample response
{
"id": "95fd4cbe-b34a-49a9-9977-4105ce99b75b",
"number": 1,
"risk_state": {
"schema_version": "1.3",
"id": "95fd4cbe-b34a-49a9-9977-4105ce99b75b",
"name": "Private Passenger Auto 1",
"number": 1,
"total_premium": 55.0,
"type": {
"id": "33ae7229-eaa5-4481-b330-f0fe8edbb4ac",
"name": "privatePassengerAutos",
"label": "Private Passenger Auto"
},
"items": {
"bodilyInjury": {
"premium": null,
"pro_rata": {
"value": null
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
},
"limits": {
"BIPerOccurrenceLimit": 300000.0,
"BIPerPersonLimit": 100000.0
}
},
"propertyDamage": {
"premium": null,
"pro_rata": {
"value": null
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
},
"limits": {
"PDLimit": 100000.0
}
},
"uninsuredMotorist": {
"premium": 55.0,
"pro_rata": {
"value": 55.0
},
"meta": {
"resolved_refs": [],
"unresolved_refs": []
},
"limits": {
"UMBIPerOccurrenceLimit": 300000.0,
"UMBIPerPersonLimit": 100000.0,
"UMPDLimit": 100000.0
}
}
},
"detached_items": [],
"item_overrides": {},
"field_answers": {
"zipCode5DigitsOnly": "",
"bodilyInjuryLimit": "bodilyInjuryLimit_100000300000",
"program": "program_standard",
"modelYear": null,
"performance": "performance_standard",
"vehiclePoints": null,
"assignedOwnerPrincipalOperator": "",
"vehicleUse": "vehicleUse_1530milestowork",
"additionalDriver": "",
"hasAntiLock": false,
"propertyDamageLimit": "propertyDamageLimit_100000",
"uninsuredMotoristBodilyInjuryLimit": "uninsuredMotoristBodilyInjuryLimit_100000300000",
"uninsuredMotoristPropertyDamageLimit": "uninsuredMotoristPropertyDamageLimit_100000",
"serialVin": "",
"make": "",
"model": "",
"garagingAddress": "",
"garagingTown": "",
"garagingState": "garagingState_vAVirginia",
"uninsuredMotoristFormRequired": false,
"grossWeight": null,
"jointOwned": false,
"bodyStyle": "",
"registrationState": "registrationState_VA",
"ownerFactor": "",
"additionalFactor": 0.5
},
"field_overrides": {
"modelYear": {
"required": false
},
"performance": {
"required": false
},
"vehiclePoints": {
"required": false
},
"additionalDriver": {
"required": false,
"options": []
},
"assignedOwnerPrincipalOperator": {
"options": []
},
"payee": {
"options": []
},
"lessor": {
"options": []
},
"trust": {
"options": []
}
},
"detached_answers": {},
"calculations": {
"additionalFactorComputedFieldCalculation": 0.5,
"otherAutoPolicy": 0.0,
"termFactor": 1.0,
"antiLockFactor": 1.0,
"multiCarFactor": 0.0
},
"rate_tables": {
"vehicleUseValue": "More than 15 miles to work",
"bodilyInjuryIncreasedLimitFactor": 1.47,
"bodilyInjuryPerOccurrenceLimit": 300000.0,
"bodilyInjuryPerPersonLimit": 100000.0,
"increasedBodilyInjuryCharge": 10.0,
"increasedPropertyDamageCharge": 5.0,
"propertyDamageDisplayLimit": 100000.0,
"propertyDamageIncreasedLimitFactor": 1.1,
"uninsuredMotoristBiPerOccurrenceLimit": 300000.0,
"uninsuredMotoristBiPerPersonLimit": 100000.0,
"uninsuredMotoristPdLimit": 100000.0
},
"pro_rata": {
"value": 55.0
},
"meta": {
"static_id": "95fd4cbe-b34a-49a9-9977-4105ce99b75b"
}
},
"final_rate": null,
"risk_quotes": [],
"generated_by": "LexisNexis",
"date_added": "2020-07-16T19:50:06.294818Z",
"date_modified": "2020-07-16T20:15:22.954648Z",
"meta": {
"locked": false
}
}
Step 8: Rate your quote
Use the rateQuote endpoint (quote/{quote_number}/rate
) to rate the entire quote. Quote number is the required parameter.
Sample request
curl --location --request POST 'https://<client url>/quote/Q-personalAutoCW-2020-1139/rate/' \
--header 'Content-Type: application/vnd.api+json' \
--header 'Authorization:
Sample response
{
"id": "0032775c-772a-4c24-bb5c-83c1c9278479",
"quote_number": "Q-personalAutoCW-2020-1139",
"transaction_type": "endorsement",
"source_quote_number": "Q-personalAutoCW-2020-1138",
"status": "In Progress",
"policy_state": {
"policy": {
"inception_date": "2020-10-22",
"number": ""
},
"term": {
"effective_date": "2020-10-31",
"expiration_date": "2021-10-22"
},
"revision": {
"revision_date": "2020-10-31",
"description": "New Policy"
}
},
"root_risk_quote_id": "56da4e52-e634-4e94-93cc-ea214c4127a8",
"product_name": "personalAutoCW",
"product_version": "98f2af68-c252-47d6-bbc1-7c925e1443ef",
"product_label": "Personal Auto - Countrywide",
"agency": {
"id": "dcadb160-128c-4586-88e0-18be6b9e1835",
"name": "Rogahn Insurance LLC"
},
"agents": [
{
"id": "bf0824bf-2982-4c67-9494-fa8868d420ff",
"name": "Matilde Langworth"
}
],
"is_bound": false,
"redirect_uri": "/quote/Q-personalAutoCW-2020-1139/",
"owner": {
"id": "c95f52e5-4816-48ed-bd59-4317759f107c",
"name": ""
},
"named_insured": {
"id": "ff358af6-dc1d-43b0-bfd8-9e11b6ad7f38",
"name": "driver1 driver"
},
"named_insureds": [
{
"id": "ff358af6-dc1d-43b0-bfd8-9e11b6ad7f38",
"name": "driver1 driver"
}
],
"submitted_for_review_date": null,
"date_added": "2020-10-22T14:15:06.919275Z",
"last_rated_at": "2020-11-10T12:59:14.901572Z",
"meta": {
"locked": true
}
}
Step 9: Submit a quote for review
Use the rateQuote endpoint (quote/{quote_number}/rate
) to rate the entire quote. Quote number is the required parameter.
Sample request
curl --request POST \
--url /api/quote/Q-personalAutoCW-2020-159/submit/ \
--header 'authorization: '
Sample response
This request doesn't return a response.
Step 10: List possible quote transition states
When a quote is submitted, it moves to the In Review state. Depending on your workflow, an underwriter may have to review the quote and approve it. BriteQuote uses triggers to change the state from one transition to another. Use the ListStatusTrigger endpoint (quote/{quote_number}/status/triggers
) to see the possible transitions available for your quote.
Sample request
{
"id": "0032775c-772a-4c24-bb5c-83c1c9278479",
"quote_number": "Q-personalAutoCW-2020-159",
"transaction_type": "endorsement",
"source_quote_number": "Q-personalAutoCW-2020-1138",
"status": "In Progress",
"policy_state": {
"policy": {
"inception_date": "2020-10-22",
"number": ""
},
"term": {
"effective_date": "2020-10-31",
"expiration_date": "2021-10-22"
},
"revision": {
"revision_date": "2020-10-31",
"description": "New Policy"
}
},
"root_risk_quote_id": "56da4e52-e634-4e94-93cc-ea214c4127a8",
"product_name": "personalAutoCW",
"product_version": "98f2af68-c252-47d6-bbc1-7c925e1443ef",
"product_label": "Personal Auto - Countrywide",
"agency": {
"id": "dcadb160-128c-4586-88e0-18be6b9e1835",
"name": "Rogahn Insurance LLC"
},
"agents": [
{
"id": "bf0824bf-2982-4c67-9494-fa8868d420ff",
"name": "Matilde Langworth"
}
],
"is_bound": false,
"redirect_uri": "/quote/Q-personalAutoCW-2020-1139/",
"owner": {
"id": "c95f52e5-4816-48ed-bd59-4317759f107c",
"name": ""
},
"named_insured": {
"id": "ff358af6-dc1d-43b0-bfd8-9e11b6ad7f38",
"name": "driver1 driver"
},
"named_insureds": [
{
"id": "ff358af6-dc1d-43b0-bfd8-9e11b6ad7f38",
"name": "driver1 driver"
}
],
"submitted_for_review_date": null,
"date_added": "2020-10-22T14:15:06.919275Z",
"last_rated_at": "2020-11-10T12:59:14.901572Z",
"meta": {
"locked": true
}
}
Sample response
{
"data": [{"type": "transitions","id": "abandon","attributes": {"name": "abandon"}},
{"type": "transitions","id": "uw_approve","attributes": {"name": "uw_approve"}},
{"type": "transitions","id": "uw_decline","attributes": {"name": "uw_decline"}}],
"meta": {"pagination": {"page": 1,"pages": 1,"count": 3}}}
Step 11: Approve your quote
Once you verify that you can approve your quote, use Execute StatusTrigger (quote/{quote_number}/status/triggers/{trigger_name}
) to change the quote status from In Review to Approved.
Sample request
curl --request POST \
--url /api/quote/Q-personalAutoCW-2020-159/status/triggers/uw_approve/ \
--header 'authorization: ' \
--header 'content-type: application/vnd.api+json'
Sample response
This request doesn't return a response when successful.
Step 12: Collect billing information
The saveBilling endpoint (quote/{quote_number}/billing
) allows you to persist the billing information collected by the agent. You need to pass the quote number and the required parameters included in the data JSON object below:
Sample request
curl --request POST \
--url /api/quote/Q-personalAutoCW-2020-159/billing/ \
--header 'authorization: \
--header 'content-type: application/vnd.api+json' \
--cookie XSRF-TOKEN=11d50576-ef36-4e31-a985-c19ab0c3895e \
--data '{
"data": {
"type": "billing",
"attributes": {
"initial": {
"bill_whom_id": "36951e65-238d-4a64-ab82-90d734584c7c",
"bill_how_id": "c032a916-4ebb-4498-b387-3928fd575591",
"billing_schedule_id": "b2b3ad64-07a5-462f-bdf4-dfe21b5160b0",
"payment_method_id": ""
},
"recurring": {
"bill_whom_id": "36951e65-238d-4a64-ab82-90d734584c7c",
"bill_how_id": "c032a916-4ebb-4498-b387-3928fd575591",
"billing_schedule_id": "b2b3ad64-07a5-462f-bdf4-dfe21b5160b0",
"payment_method_id": ""
}
}
}
}
Sample response
A successful response returns the billing detail object.
{
"data": {
"type": "billing",
"id": "ef950421-f3e6-4717-b40f-e55a1ebadbc1",
"attributes": {
"initial": {
"bill_whom_id": "300fb32f-06ab-4c72-be9a-58dc3193e2c1",
"bill_how_id": "2c8d0142-53fe-4e18-b826-608b06e7baf6",
"billing_schedule_id": "",
"payment_method_id": ""
},
"recurring": {
"bill_whom_id": "300fb32f-06ab-4c72-be9a-58dc3193e2c1",
"bill_how_id": "2c8d0142-53fe-4e18-b826-608b06e7baf6",
"billing_schedule_id": "98e9aa11-ed5e-4d4f-94aa-2e442eff0bec",
"payment_method_id": "7e33f2ee-3989-4f6e-8532-ebea9d9cd8ac"
}
}
}
Step 13: Get billing information
Once a quote has been reviewed, you can use getBilling (quote/{quote_number}/billing
) to get the billing details for your quote.
Sample request
curl --request GET \
--url https://{client urL}/api/quote/Q-personalAutoCW-2020-1/billing/ \
--header 'authorization: Bearer \
--header 'content-type: application/vnd.api+json'
Sample response
{
"data": {
"type": "billing",
"id": "ef950421-f3e6-4717-b40f-e55a1ebadbc1",
"attributes": {
"initial": {
"bill_whom_id": "300fb32f-06ab-4c72-be9a-58dc3193e2c1",
"bill_how_id": "2c8d0142-53fe-4e18-b826-608b06e7baf6",
"billing_schedule_id": "",
"payment_method_id": "7e33f2ee-3989-4f6e-8532-ebea9d9cd8ac"
},
"recurring": {
"bill_whom_id": "300fb32f-06ab-4c72-be9a-58dc3193e2c1",
"bill_how_id": "2c8d0142-53fe-4e18-b826-608b06e7baf6",
"billing_schedule_id": "98e9aa11-ed5e-4d4f-94aa-2e442eff0bec",
"payment_method_id": ""
}
}
}
}
]
Step 14: Bind a quote
Use bindQuote (quote/{quote_number}/bind
) to bind your quote in BriteCore. This step essentially turns a quote into an actual policy. The required parameter is the quote number. You will receive a policy number, and the effective date is set to the same date the quote is bound.
Sample request
curl --request POST \
--url /api/quote/Q-personalAutoCW-2020-159/bind/ \
--header 'authorization: '
Sample response
{
"id": "e12b9951-0751-4a6f-95b1-76536d017714",
"number": "10-2020-231",
"inception_date": "2020-07-16T00:00:00Z",
"external_id": "6d2c4dcd-04df-421e-aba3-f7cc92dfc725",
"revision_id": "f032869a-e8fa-42f6-ab00-2659e5cbe356",
"redirect_uri": "/policies/policy/6d2c4dcd-04df-421e-aba3-f7cc92dfc725"
}
Step 15: Upload an attachment to BriteQuote
For more information, refer to View, upload, and delete an attachment to an existing quote.
You have successfully created and bound a quote.