Topics on this page

Configure LexisNexis MVR in BriteSuite

You can integrate BriteSuite policies with LexisNexis Motor Vehicle Records (MVR) to automate the method of requesting driving records from all 50 states and the District of Columbia, with additional service for several Canadian provinces and Puerto Rico.

LexisNexis MVR integration allows you to validate the motor vehicle history of potential customers during the quote flow. Automotive insurance providers, agents, and underwriters can use the records to determine eligibility.

LexisNexis MVR offers several benefits:

  • Saves time on the customer intake process by pulling in driver information directly on the application.
  • Makes risk assessment much easier and more accurate.
  • Increases data management efficiency.

Implement LexisNexis MVR

You have two options to implement LexisNexis MVR with BriteSuite:

  • Use BriteCore’s LexisNexis MVR plugin to provide driving records. If you choose to use our prewritten plugin, all you need to do is map your data (Steps 2 and 3).
  • You can write your own plugin using custom logic.

Notes:

Our team provides data mapping as an additional service.

Plugins are currently only available in the quote flow for auto policy.

To learn more about plugins, please refer to BriteCore’s plugins documentation.

This tutorial walks you through implementing LexisNexis MVR in BriteCore if you want to write your own plugin; it also helps you understand how LexisNexis MVR integrates with BriteSuite.

LexisNexis MVR functionality

This section provides an overview of how LexisNexis MVR works in BriteQuote.

Review screen

The MVR button is located on the Review screen of the quote flow. You should submit the following information with the request:

  • First name
  • Last name
  • DOB (date of birth)
  • DLN (driver license number)
  • State issuing the driver license

This information is collected on the Drivers screen and will be sent when the agent selects the Get Motor Vehicle Records button.

Note: This integration doesn’t run automatically. The agent must initiate the MVR request by selecting the button.

Drivers screen

If data is returned from LexisNexis, associated violations will be added to the respective driver’s screen.

Alert messages

LexisNexis may return the following alert messages in the results:

  • Security Freeze
  • Fraud Alert
  • Identify Theft
  • Legal Hold (associated with a Data Dispute Flag)

Error messages

BriteCore displays error messages directly from LexisNexis. BriteCore also displays If there are any minor mismatches in the data related to the following fields:

  • Driver License number
  • Date of Birth
  • First Name
  • Gender
  • Last Name
  • Middle Initial
  • Name Suffix

Sample error messages include:

  • Driver license data missing.
  • Subject data missing.
  • MVR not ordered for discovered driver subject @id because drivers license state is excluded by rule.
  • MVR not ordered for discovered driver subject @id because drivers license state is excluded by rule.
  • MVR not ordered because of exclusion by rule plan.
  • Invalid account number.
  • Invalid request.
  • Rule plan error.
  • Order state excluded by rule plan.
  • Incomplete data in order.

Set up LexisNexis MVR in BriteSuite

Step 1: Contact LexisNexis

Contact LexisNexis to complete the paperwork and set up an account. LexisNexis will provide the following information:

  • Client ID
  • PNC account number
  • Carrier account ID
  • Carrier account number
  • Rule plan ID

Step 2: Contact your BriteCore support team

Provide your LexisNexis information to the BriteCore support team. The BriteCore staff will set up the configuration in BriteDeploy and provide you with the URL to the service’s HTTP endpoint.

Step 3: Consider your configuration options

Consider your configuration options and fill out the LexisNexis MVR configuration questionnaire and the Lexis Nexis Violations template.

Step 4: Create the data mapping

Map the data from LexisNexis to your lines configuration. In this step, take your specific user-defined fields from lines and map them to the data you’re receiving from LexisNexis MVR (and back).

To learn more about how data mapping works in BriteCore, please refer to our data mapping documentation.

Sample data for a POST/mapping request:

View code

{
  "data":{
    "type":"mapping",
    "attributes":{
      "from":"quote",
      "to":"lexisnexis-mvr",
      "version":"1",
      "mapping":{
        "template":"""\[{%- set policy_field_answers = source.rootRiskQuote.risk_state.field_answers %}{%- set driver_risk_type = source.riskTypes|selectattr("name", "equalto", "drivers")|first %}{%- set risk_quotes = source.rootRiskQuote.risk_quotes %}{%- set driver_risk_quotes = [] %}{%- for risk_quote in risk_quotes if risk_quote.risk_state.type.id == driver_risk_type.id %}{{ driver_risk_quotes.append(risk_quote) or ""}}{% endfor %}{%- for driver_risk_quote in driver_risk_quotes %}{{%- set field_answers = driver_risk_quote.risk_state.field_answers %}"address": {"house": "","street" : "{
          {
            policy_field_answers.streetAddressNI
          }
        }","city" : "{
          {
            policy_field_answers.cityNI
          }
        }","state" : "{
          {
            policy_field_answers.stateOfNI[
              12:
            ]          }
        }","postal_code" : {{ policy_field_answers.zipCodeNI|int }}},"drivers_license": {{% if field_answers.licenseNumber is defined and field_answers.licenseNumber not in (None, "") %}"number": "{
          {
            field_answers.licenseNumber
          }
        }",{% endif %}{% if field_answers.licenseState in (None, "") %}"state": "ZZ",{% else %}"state": "{
          {
            field_answers.licenseState.split('_')[
              1
            ][
              :2
            ].upper() if'_'in field_answers.licenseState else field_answers.licenseState
          }
        }",{% endif %}"type": "personal"},"subject": {"first_name": "{
          {
            field_answers.firstName
          }
        }","middle_name": "{
          {
            field_answers.middleInitial
          }
        }","last_name": "{
          {
            field_answers.lastName
          }
        }","date_of_birth": "{
          {
            field_answers.dateOfBirth
          }
        }",}}{% if loop.nextitem is defined %},{% endif %}{% endfor %}]"""
      },    },  }
},
{
  "data":{
    "type":"mapping",
    "attributes":{
      "from":"lexisnexis-mvr",
      "to":"quote",
      "version":"1",
      "mapping":{
        "template":"""\[{%- set violation_mapping = {"11110": "violationType_licenseNoVirginialicenseplate","11220": "violationType_licenseNoVirginialicenseplate","11230": "violationType_licenseNoVirginialicenseplate","11310": "violationType_licenseNoVirginialicenseplate","11320": "violationType_drivingwhileyourlicenseissuspendedorrevoked","11410": "violationType_licenseNoVirginialicenseplate","11510": "violationType_operatingunsafevehicle","11520": "violationType_operatingunsafevehicle","11530": "violationType_operatingunsafevehicle","11710": "violationType_licenseNoVirginialicenseplate","11720": "violationType_licenseNoVirginialicenseplate","11730": "violationType_licenseNoVirginialicenseplate","12030": "violationType_drivingafterbeingdeclaredahabitualoffender","12110": "violationType_licenseNodriverslicensevehiclemotorcycle","12120": "violationType_licenseFailuretohavelicenserevalidated","12350": "violationType_licenseDrivinginviolationofrestrictedlicenserestrictionsrelatedtophysical","12370": "violationType_licensefailuretoobtainadriverslicense","12380": "violationType_licensefailuretoobtainadriverslicense","12410": "violationType_drivingwhileyourlicenseissuspendedorrevoked","12440": "violationType_drivingwhileyourlicenseissuspendedorrevoked","12450": "violationType_drivingafterbeingdeclaredahabitualoffender","12460": "violationType_drivingafterbeingdeclaredahabitualoffender","12500": "violationType_licensePermittingunlicensedpersontodrive","12510": "violationType_licensePermittingunlicensedpersontodrive","12520": "violationType_licensePermittingunlicensedpersontodrive","12610": "violationType_drivingafterbeingdeclaredahabitualoffender","12630": "violationType_drivingafterbeingdeclaredahabitualoffender","13110": "violationType_licensefailuretoobtainadriverslicense","13200": "violationType_licenseDrivinginviolationofrestrictedlicenserestrictionsrelatedtophysical","13210": "violationType_licenseDrivinginviolationofrestrictedlicenserestrictionsrelatedtophysical","13220": "violationType_licenseLearnerspermitviolation","13230": "violationType_licenseDrivinginviolationofrestrictedlicenserestrictionsrelatedtophysical","13310": "violationType_licenseDrivinginviolationofrestrictedlicenserestrictionsrelatedtophysical","13320": "violationType_licenseDrivinginviolationofrestrictedlicenserestrictionsrelatedtophysical","13410": "violationType_refusingbloodbreathtest","13420": "violationType_drivingwhileintoxicated","22600": "violationType_failuretostopandreportwheninvolvedinanaccident","22610": "violationType_failuretostopandreportwheninvolvedinanaccident","311AA": "violationType_speeding19mphabovethepostedspeedlimit","311AB": "violationType_speeding19mphabovethepostedspeedlimit","311AC": "violationType_speeding19mphabovethepostedspeedlimit","311AD": "violationType_speeding1014mphabovethepostedspeedlimit","311AE": "violationType_speeding1019mphabovethepostedspeedlimit","311AF": "violationType_speeding1519mphabovethepostedspeedlimit","32120": "violationType_failuretoyieldwhenturningleft","32150": "violationType_emergencyvehicleviolation","33510": "violationType_drivingthroughsafetyzone3years","35340": "violationType_drivingthewrongwayononewayhighwayorstreet3years","35350": "violationType_drivingthewrongwayononewayhighwayorstreet3years","35400": "violationType_drivingthewrongwayononewayhighwayorstreet3years","35410": "violationType_drivingthewrongwayononewayhighwayorstreet3years","35420": "violationType_drivingtotheleftofrotarytrafficisland3years","35430": "violationType_drivingtotheleftofrotarytrafficisland3years","38100": "violationType_changingcourseaftersignaling","39100": "violationType_failuretostopforpedestrian","39110": "violationType_failuretostopforpedestrian","39120": "violationType_failuretostopforpedestrian","39130": "violationType_failuretostopforpedestrian","39160": "violationType_failuretostopforpedestrian","51110": "violationType_recklessdrivinggeneral","51120": "violationType_recklessdrivinggeneral","52100": "violationType_drivingundertheinfluenceofalcoholordrugs","52120": "violationType_drivingafterillegallyconsumingalcoholpersonsunderage21","52130": "violationType_drivingwhileintoxicated","53210": "violationType_drinkingwhiledriving3years","55210": "violationType_involuntarymanslaughter","58110": "violationType_attemptingtoeludepolice","58210": "violationType_vehicularassaultorwillfulstoppingimpedingordamagingvehicle","81100": "violationType_railroadCrossingsFailuretoobeyrailroadcrossingsignal","81110": "violationType_railroadcrossingstopping","81120": "violationType_railroadCrossingsFailuretostopatrailroadgradecrossing","81140": "violationType_railroadCrossingsFailuretostopatrailroadgradecrossing","81150": "violationType_railroadCrossingsFailuretoobeyrailroadcrossingsignal","81160": "violationType_railroadCrossingsFailuretoobeyrailroadcrossingsignal","82210": "violationType_coastingwithgearsinneutral","83210": "violationType_drivingoverfirehose3years","84140": "violationType_recklessdrivinggeneral","84150": "violationType_aggressivedriving"} %}{%- set bodily_injury_codes = ["22030", "22040"] %}{%- set not_found_code = "09110" %}{%- for violation in source.violations %}{%- set code = violation.standard_violations[0].code[:5] %}{% if violation_mapping[code] is defined %}{"violationInformation": "{
          {
            violation.standard_violations[
              0
            ].description
          }
        }","violationDate": {% if violation.suspension_date != None %}"{
          {
            violation.suspension_date
          }
        }"{% else %}None{% endif %},"violationType": "{
          {
            violation_mapping[
              code
            ]          }
        }","violationBodilyInjury": {{ true if code in bodily_injury_codes else false }}}{% elif violation_mapping[code] is not defined and code != not_found_code %}
{"violationInformation": "{
          {
            violation.standard_violations[
              0
            ].description
          }
        }","violationDate": {% if violation.suspension_date != None %}"{
          {
            violation.suspension_date
          }
        }"{% else %}None{% endif %},"violationType": "violationType_othermovingornonmovingviolationdescribeincomments",
"violationBodilyInjury": {{ true if code in bodily_injury_codes else false }}}
{% if loop.nextitem is defined %},
{% endif %}
{% endif %}
{% endfor %}]"""
      },    },  },},

Step 5: Write the plugin

If you’re using BriteCore’s LexisNexis MVR plugin, skip this step.

To write your own plugin, interface with LexisNexis MVR at:

View code

POST <integrations url>/lexisnexis/motor-vehicle-records/

Note: This endpoint includes an optional parameter of report_duration to the request payload. This allows you to request a specific report duration on renewal requests.

Sample request data:

View code
[
{
"report_duration": <1, 6, 12, 36, 60>
"subject": {...},
"drivers_license": {...},
"address": {...}
}
]

Add the following script to the header of your HTML file:

View code

<script src="https://unpkg.com/@britecore/ui-plugins-client"> </script>

You can now use the BriteCorePlugin helper so your plugin can communicate with BriteCore:

View code

plugin.initialize({
"button-row": {
buttons: [
{
text: "Get Motor Vehicle Records",
callback: fetchMVR,
visible: visible,
enabled: enabled,
},
],
},
});

Sample response from LexisNexis MVR

View code

{
"b64_pdf_reports": [],
"reports": [
{
"alerts": [],
"is_possible_mismatch": false,
"licenses": [
{
"class": null,
"expiration_date": "2021-05-22",
"issue_date": "2018-07-07",
"state": "VA",
"status": "LICENSED"
}
],
"possible_mismatch_fields": [],
"subject_identification": {
"address": "ROBERT, WILLIAM F, 1611 MARTIN AVE, CHESAPEAKE VA 233243221",
"also_known_as": null,
"date_of_birth": "1963-12-02",
"eye_color": null,
"gender": "",
"hair_color": null,
"height": null,
"lex_id": "888809049575",
"license_number": "A62-44-8144",
"ssn": "666-40-3362",
"subject_id": "S1",
"weight": null
},
"total_violation_points": 4,
"violations": [
{
"consumer_narrative": null,
"conviction_date": "2019-09-27",
"description": "FAIL STOP/YIELD ENTERING HWY",
"points": 4,
"standard_violations": [
{
"additional_underwriting": null,
"classification": "Speeding and Other Traffic-related Violations",
"code": "32100 E",
"commercial_hazardous": null,
"customer_specific_code": null,
"description": "FAIL TO YLD, GENERALLY",
"points_assignment": null,
"speeding": {
"limit": null,
"over_limit": null
},
"violation_severity_code": null
}
],
"state_violation_code": null,
"suspension_date": "2019-07-18",
"type": {
"code": "CONV",
"description": "Conviction"
}
},
{
"consumer_narrative": null,
"conviction_date": "2019-03-04",
"description": "OFF RELATING TO REG/LICENSING/TITLING",
"points": 0,
"standard_violations": [
{
"additional_underwriting": null,
"classification": "Registration, Titling and Licensing",
"code": "11100 A",
"commercial_hazardous": null,
"customer_specific_code": null,
"description": "REG VIOL, GENERALLY",
"points_assignment": null,
"speeding": {
"limit": null,
"over_limit": null
},
"violation_severity_code": null
}
],
"state_violation_code": null,
"suspension_date": "2019-02-15",
"type": {
"code": "CONV",
"description": "Conviction"
}
},
{
"consumer_narrative": null,
"conviction_date": "2019-02-18",
"description": "OFF RELATING TO REG/LICENSING/TITLING",
"points": 0,
"standard_violations": [
{
"additional_underwriting": null,
"classification": "Registration, Titling and Licensing",
"code": "11100 A",
"commercial_hazardous": null,
"customer_specific_code": null,
"description": "REG VIOL, GENERALLY",
"points_assignment": null,
"speeding": {
"limit": null,
"over_limit": null
},
"violation_severity_code": null
}
],
"state_violation_code": null,
"suspension_date": "2019-01-06",
"type": {
"code": "CONV",
"description": "Conviction"
}
}
] }
],
"timestamp": "2021-04-19T17:01:15.294-04:00"
}

Step 6: Host your plugin in a public location

If you’re using BriteCore’s LexisNexis MVR plugin, BriteCore hosts the plugin for you.

Otherwise, each plugin is a HTML document rendered in a hidden iframe. BriteCore’s UI queries the plugins available and renders any plugin on the specified pages.

Since BriteCore’s UI runs in a browser, the request for the plugin must occur without credentials to a publicly available location, or BriteCore must host the plugin placing the HTML file behind our authentication.

Step 7: Register the plugin in BriteIntegrations

If you’re using BriteCore’s LexisNexis MVR plugin, BriteCore registers the plugin for you.

Otherwise, send an API call to BriteIntegrations using the /plugins/ endpoint to POST.

Sample request payload

View code

 {
"type": "plugin",
"attributes": {
"name": "LexisNexis Motor Vehicle Records",
"base_url": "integrations.integrations-sandbox.britecore.com",
"plugin_slots": [
{
"location": {
"type": "bottom-row"
},
"plugin_file_path": "/lexisnexis/motor-vehicle-records/plugin",
"slot_name": "britequote:risk-edit:button-row"
}
],
"configuration": {}
}
}