Topics on this page

Create and bind a (unified) quote

BriteQuote allows insurers to configure 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 uses its 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.

For more details, see How quotes are set up in BriteCore.

In this tutorial, we will guide you through creating your own 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:

  1. Create a unified quote 
  2. Submit a quote for review (optional) 
  3. Approve your quote (optional)
  4. Add a payment method 
  5. Add billing information
  6. Bind a quote 

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.

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: Create a unified quote 

API customers need a way to easily and quickly quote new business. Making multiple API calls is slow and more challenging to implement.

The createQuote endpoint (/quote/) creates a quote and accepts an optional unified_risk_state object when creating New Business quotes.

If the unified_risk_state object is sent in the payload, all risks inside Unified Risk State are created for the New Business quote. The response data also includes a final unified_risk_state object.

If you want to see the whole rating worksheet resolved_refs just include a header X-Rating-Debug=true.

Note: For testing, you can use GET to retrieve the quote information from the same endpoint. Pass the quote_id you receive from this call. 

Sample request

View code
curl --location --request POST '<client url>.britecore.com/api/quote/' \
--header 'X-Rating-Debug: true' \
--header 'Content-Type: application/json' \
--data-raw '{
    "transaction_type": "new_business",
    "effective_date": "2021-03-15",
    "expiration_date": "2022-03-15",
    "product_name": "generalAutoCW",
    "rating_date": "2021-09-28",
    "term": {
        "granularity": "years",
        "units": 1
    },
    "unified_risk_state": {
        "schema_version": "2.0",
        "id": "04c1f40f-663f-4f3a-a20c-5b06a5356101",
        "name": "Policy 1",
        "number": 1,
        "premium": {
            "term": {
                "value": 0.0
            },
            "pro_rata": {
                "value": 0.0
            }
        },
        "type": {
            "id": "b47c3c06-9c3a-4780-965a-c68a64096eb7",
            "name": "policy",
            "label": "Policy"
        },
        "items": {},
        "fields": {
            "uninsuredMotoristBodilyInjury": "uninsuredMotoristBodilyInjury_50000100000",
            "uninsuredMotoristPropertyDamage": "uninsuredMotoristPropertyDamage_25000"
        },
        "children": [
            {
                "schema_version": "2.0",
                "id": "14a75d16-851b-490d-abdb-4fa7fe849039",
                "name": "Alberta Rutherford",
                "number": 1,
                "premium": {
                    "term": {
                        "value": 0.0
                    },
                    "pro_rata": {
                        "value": 0.0
                    }
                },
                "type": {
                    "id": "f92498c9-67df-496d-a77e-cf90d73c3828",
                    "name": "drivers",
                    "label": "Driver"
                },
                "items": {},
                "fields": {
                    "driverName": "Alberta Rutherford",
                    "dob": "2010-01-16",
                    "gender": "gender_male",
                    "maritalStatus": "maritalStatus_single",
                    "driverLicenseNumber": "867093074",
                    "goodStudent": false,
                    "driverTraining": false,
                    "includeSeniorDiscount": false
                },
                "children": [],
                "inception_date": "2020-11-20"
            },
            {
                "schema_version": "2.0",
                "id": "691b7b26-1316-4ccd-9eac-6bc5e069aa1e",
                "name": "Magdalena Anderson",
                "number": 2,
                "premium": {
                    "term": {
                        "value": 0.0
                    },
                    "pro_rata": {
                        "value": 0.0
                    }
                },
                "type": {
                    "id": "f92498c9-67df-496d-a77e-cf90d73c3828",
                    "name": "drivers",
                    "label": "Driver"
                },
                "items": {},
                "fields": {
                    "driverName": "Magdalena Anderson",
                    "dob": "1980-10-22",
                    "gender": "gender_male",
                    "maritalStatus": "maritalStatus_single",
                    "driverLicenseNumber": "439877930",
                    "goodStudent": false,
                    "driverTraining": false,
                    "includeSeniorDiscount": false
                },
                "children": [],
                "inception_date": "2020-11-20"
            },
            {
                "schema_version": "2.0",
                "id": "11ac11f9-4908-4b5a-80d9-abb0759f6c9e",
                "name": "2000 Ford F1",
                "number": 1,
                "premium": {
                    "term": {
                        "value": 686.145
                    },
                    "pro_rata": {
                        "value": 686.145
                    }
                },
                "type": {
                    "id": "63102a26-a52e-4f10-862e-fdad59665155",
                    "name": "vehicles",
                    "label": "Vehicle"
                },
                "items": {
                    "bodilyInjury": {
                        "premium": {
                            "term": {
                                "value": null
                            },
                            "pro_rata": {
                                "value": null
                            }
                        },
                        "meta": {
                            "resolved_refs": [],
                            "unresolved_refs": []
                        },
                        "limits": {
                            "bodilyInjuryPerRiskLimit": 50000.0
                        }
                    },
                    "propertyDamage": {
                        "premium": {
                            "term": {
                                "value": 135.945
                            },
                            "pro_rata": {
                                "value": 135.945
                            }
                        },
                        "meta": {
                            "resolved_refs": [],
                            "unresolved_refs": []
                        },
                        "limits": {
                            "propertyDamagePerRiskLimit": 50000.0
                        }
                    },
                    "uninsuredMotorist": {
                        "premium": {
                            "term": {
                                "value": null
                            },
                            "pro_rata": {
                                "value": null
                            }
                        },
                        "meta": {
                            "resolved_refs": [],
                            "unresolved_refs": []
                        }
                    },
                    "medicalExpense": {
                        "premium": {
                            "term": {
                                "value": 0
                            },
                            "pro_rata": {
                                "value": 0
                            }
                        },
                        "meta": {
                            "resolved_refs": [],
                            "unresolved_refs": []
                        },
                        "limits": {
                            "medicalExpensePerRiskLimit": 2000.0
                        }
                    },
                    "comprehensive": {
                        "premium": {
                            "term": {
                                "value": 0
                            },
                            "pro_rata": {
                                "value": 0
                            }
                        },
                        "meta": {
                            "resolved_refs": [],
                            "unresolved_refs": []
                        }
                    },
                    "collision": {
                        "premium": {
                            "term": {
                                "value": 0
                            },
                            "pro_rata": {
                                "value": 0
                            }
                        },
                        "meta": {
                            "resolved_refs": [],
                            "unresolved_refs": []
                        }
                    }
                },
                "fields": {
                    "territory": "territory_2",
                    "ratingTier": "ratingTier_standard",
                    "bodilyInjuryLimit": "bodilyInjuryLimit_50000100000",
                    "chosenDriver": "14a75d16-851b-490d-abdb-4fa7fe849039",
                    "includeAntiLockBrakes": true,
                    "propertyDamageLimit": "propertyDamageLimit_50000",
                    "medicalExpenseLimit": "medicalExpenseLimit_2000",
                    "passiveRestraintSystem": "passiveRestraintSystem_fullyEquipped",
                    "vin": "IFSH7IB5W7JWS0CIP",
                    "make": "Ford",
                    "model": "F1",
                    "modelYear": 2000,
                    "mileage": 20000,
                    "use": "use_pleasure",
                    "performance": "performance_standard"
                },
                "children": [],
                "inception_date": "2020-11-20"
            },
            {
                "schema_version": "2.0",
                "id": "8247b36e-3146-4a2e-bd03-ca8779e1b8be",
                "name": "2017 Bednar Theodore Murphy",
                "number": 2,
                "premium": {
                    "term": {
                        "value": 0
                    },
                    "pro_rata": {
                        "value": 0
                    }
                },
                "type": {
                    "id": "63102a26-a52e-4f10-862e-fdad59665155",
                    "name": "vehicles",
                    "label": "Vehicle"
                },
                "items": {
                    "bodilyInjury": {
                        "premium": {
                            "term": {
                                "value": null
                            },
                            "pro_rata": {
                                "value": null
                            }
                        },
                        "meta": {
                            "resolved_refs": [],
                            "unresolved_refs": []
                        },
                        "limits": {
                            "bodilyInjuryPerRiskLimit": 50000.0
                        }
                    },
                    "propertyDamage": {
                        "premium": {
                            "term": {
                                "value": 0
                            },
                            "pro_rata": {
                                "value": 0
                            }
                        },
                        "meta": {
                            "resolved_refs": [],
                            "unresolved_refs": []
                        },
                        "limits": {
                            "propertyDamagePerRiskLimit": 25000.0
                        }
                    },
                    "uninsuredMotorist": {
                        "premium": {
                            "term": {
                                "value": 0
                            },
                            "pro_rata": {
                                "value": 0
                            }
                        },
                        "meta": {
                            "resolved_refs": [],
                            "unresolved_refs": []
                        }
                    },
                    "medicalExpense": {
                        "premium": {
                            "term": {
                                "value": 0
                            },
                            "pro_rata": {
                                "value": 0
                            }
                        },
                        "meta": {
                            "resolved_refs": [],
                            "unresolved_refs": []
                        },
                        "limits": {
                            "medicalExpensePerRiskLimit": 2000.0
                        }
                    }
                },
                "fields": {
                    "territory": "territory_3",
                    "ratingTier": "ratingTier_preferred",
                    "bodilyInjuryLimit": "bodilyInjuryLimit_50000100000",
                    "chosenDriver": "14a75d16-851b-490d-abdb-4fa7fe849039",
                    "includeAntiLockBrakes": true,
                    "propertyDamageLimit": "propertyDamageLimit_25000",
                    "medicalExpenseLimit": "medicalExpenseLimit_2000",
                    "passiveRestraintSystem": "passiveRestraintSystem_driverSideOnly",
                    "vin": "HVEYA6ZUJW4C086BA",
                    "make": "Bednar",
                    "model": "Theodore Murphy",
                    "modelYear": 2017,
                    "mileage": 636000,
                    "use": "use_pleasure",
                    "performance": "performance_sports",
                    "hadAnyAccidentsInTheLast24Hours": false
                },
                "children": [],
                "inception_date": "2020-11-20"
            }
        ],
        "inception_date": "2021-11-20"
    }
}'

Sample response

View code
{
  "id": "a7fe0e74-89c0-4acb-b9e5-1e841ca2eb5b",
  "quote_number": "Q-generalAutoCW-2021-204",
  "transaction_type": "new_business",
  "source_quote_number": null,
  "status": "In Progress",
  "policy_state": {
    "policy": {
      "inception_date": "2021-03-15",
      "external_id": "",
      "number": "",
      "term_effective_date": "2021-03-15"
    },
    "term": {
      "effective_date": "2021-03-15",
      "expiration_date": "2022-03-15"
    },
    "revision": {
      "revision_date": "2021-03-15",
      "description": "New Policy"
    }
  },
  "root_risk_quote_id": "2a42a873-ece6-4a75-a562-b4583b355ad7",
  "product_name": "generalAutoCW",
  "product_version": "f3cc8ee9-1398-4f70-af49-2b82eeb5927c",
  "product_label": "General Auto",
  "agency": null,
  "agents": [],
  "is_bound": false,
  "redirect_uri": "/quote/Q-generalAutoCW-2021-204/",
  "owner": null,
  "named_insureds": [
    {
      "id": "2be2f109-1347-4155-8fd1-913c9852bec6",
      "name": ""
    }
  ],
  "term": {
    "granularity": "years",
    "units": 1
  },
  "submitted_for_review_date": null,
  "date_added": "2021-09-21T00:33:30.375878Z",
  "last_rated_at": null,
  "premium": {
    "term": null,
    "pro_rata": null
  },
  "conversion_policy_number": "",
  "meta": {
    "locked": true
  }
}

Step 3: Submit quote for review (optional)

Use the submitQuote endpoint(quote/{quote_number}/submit)to submit the quote. quote_number is the required parameter.

Sample request

View code
curl --request POST \
--url /api/quote/Q-personalAutoCW-2020-159/submit/ \
--header 'authorization: '

Sample response

The request should return a 204 message for success.

Step 4: Approve your quote (optional)

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

View code
curl --location -g --request POST '<client_url>.britecore.com/api/quote/{{quote_number}}/status/triggers/uw_approve/'
--header 'authorization: '

Sample response

The request should return a 204 message for success.

Step 5: Add a payment method

The add_payment_method (v2/payments/add_payment_method)endpoint allows you to add a new payment method. Send the following details in the request payload.

Sample request

View code
curl --location --request POST '<client_url>/api/v2/payments/add_payment_method' \
--header 'Content-Type: application/json' \
--data-raw '{
    "api_key": "{{key}}",
    "contact_id": "8f9097bf-1353-4520-b849-64575c82da12",
    "card_number": "5123012301230120",
    "card_type": "MasterCard",
    "card_name_on": "Cardholder",
    "card_expires_mm": "12",
    "card_expires_yy": "2023",
    "card_cvv2": "123",
    "type": "CC"
}'

Sample response

View code
{
  "message": "The payment method was successfully created.",
  "paymentMethod": {
    "vendorId": "904e3a9a-097a-11e5-b750-0242ac110009",
    "accountDescription": "Added by Insured Portal user",
    "accountHash": "$2b$10$BBCvV.6yFjHv.Yf/VaSTq.EW8nK4jqelIe4BHF31lVX2jYbhkwIHq",
    "companyOnAccount": "",
    "contactId": "8f9097bf-1353-4520-b849-64575c82da12",
    "addressLine2": null,
    "primaryAccount": false,
    "addressLine1": "123 Main Street",
    "customerProfileId": "8f9097bf-1353-4520-b849-64575c82da12",
    "id": "f274f2a5-a280-4b52-8220-62503a5abf1e",
    "addressCountry": "USA",
    "maskedRouting": null,
    "updatedOn": "2020-07-24 13:55:15.481955",
    "accountName": "MasterCard",
    "maskedNumber": "...0120",
    "nameOnAccount": "Cardholder",
    "dateUpdated": "2020-07-24 13:55:18",
    "method": "CC",
    "searchKey": "787",
    "vendor": null,
    "sameAddress": false,
    "accountType": "Credit Card",
    "active": true,
    "addressCity": "ROXBURY CROSSING",
    "expireDate": "2023-12-31 00:00:00",
    "addressState": "MA",
    "vendorLog": {
      "requests": [
        {
          "account_type": "card",
          "prepaid": "no",
          "cvv2": "***",
          "user_identifier": "Joe Insured",
          "key": "H6ZJBESFRi0tXcO4gPgYq0N7",
          "address": "123 Main Street",
          "path": "/payments/account",
          "process_date": "07252020",
          "city": "ROXBURY CROSSING",
          "name": "Cardholder",
          "zip": "02120",
          "customer_identifier": "8f9097bf-1353-4520-b849-64575c82da12",
          "state": "MA",
          "account_number": "f**4f2a5-a280-4b52-8220-62503a5abf1e",
          "expiration_date": "1223",
          "action": "post",
          "card_number": "************0120"
        }
      ],
      "responses": [
        {
          "data": {
            "account_status": "active",
            "gateway_message": "APPROVED",
            "account_token": "KcRhDaqYv276mI8ngfsUgCPx"
          }
        }
      ]
    },
    "vendorPaymentMethodId": "KcRhDaqYv276mI8ngfsUgCPx",
    "addressZip": "02120"
  },
  "success": true

}'

Step 6: Add 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

View code
curl --request POST \
--<client_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.

View code
{
"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 7: 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

View code
curl --request POST \
--url /api/quote/Q-personalAutoCW-2020-159/bind/ \
--header 'authorization:

Sample response

View code
{
"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 8: 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.