How to Determine Which Markets Have Optional Coverages (Roadside and Others)
What Are "Optional Coverages"?
Optional coverages are coverages that a customer can choose to decline (exclude from their policy). Not every state offers the same set of optional coverages. State regulations and Root's rating plans determine which coverages exist and whether they can be declined in a given market.
The most commonly asked about optional coverage is Roadside (symbol: "roadside"), but the same pattern applies to any coverage that has a "declined" attribute in the available coverages response.
A coverage is optional in a given market if:
- It appears in the
available_coveragesresponse for that market, AND - Its
attributesarray contains an entry with"kind": "declined"
If a coverage does not appear in available_coverages at all, it is not offered in that market. If it appears but has no "declined" attribute, then it is mandatory.
How to Check if a Market Has Optional Roadside Coverage
Use the available coverages endpoint. There are two variants:
Option 1: By State (no quote required)
GET /bind_api/v3/quoting/market/<state>/coverages/available
Option 2: By Quote ID (more accurate — reflects quote-specific profile state)
GET /bind_api/v3/quoting/quote/<quote_id>/coverages/available
The quote-based endpoint is preferred when a quote already exists. For the purpose of determining whether roadside exists at all in a state, the by-state endpoint is sufficient.
What to Look For
Inspect availableCoverages.vehicles. Look for an entry with "symbol": "roadside".
If present: check whether its attributes array includes "kind": "declined" — if yes, the customer can decline it.
If absent: that state does not have optional roadside coverage. Do not send roadside in quote requests for that market.
Example API Responses
State WITH Optional Roadside (e.g., TX)
{
"availableCoverages": {
"policy": [],
"vehicles": [
{
"symbol": "roadside",
"name": "Roadside",
"attributes": [
{
"kind": "declined",
"name": "Declined",
"selections": [
{ "declined": true, "description": "Declined" },
{ "declined": false, "description": "Not declined" }
]
},
{
"kind": "limits",
"selections": [{ "perOccurrence": 100 }]
}
]
}
]
}
}Roadside is present with a "declined" attribute, meaning it is optional in TX.
State WITHOUT Optional Roadside (e.g., MS)
{
"availableCoverages": {
"policy": [...],
"vehicles": [
{ "symbol": "bi", ... },
{ "symbol": "pd", ... }
]
}
}Since there is no "roadside" entry in vehicles , that is proof that roadside is not offered in MS.
How to Handle Optional Coverages in Quote Requests
Explicitly Declining Roadside
{
"coverages": {
"vehicles": [
{
"vin": "1HGBH41JXMN109186",
"coverages": [
{
"symbol": "roadside",
"attributes": [
{ "kind": "declined", "selection": { "declined": true } }
]
}
]
}
]
}
}Accepting the Default
If you do not include a roadside coverage entry at all, Root will apply the market default — typically accepted (included) in markets where roadside is available.
Coverage Placement: Policy vs. Vehicle Level
Roadside is a vehicle-level coverage meaning that it must be submitted under coverages.vehicles[].coverages, not under coverages.policy.
Follow the apply_to scope returned by the available coverages endpoint for each coverage symbol.
Other Optional Coverages
The same "declined" attribute pattern applies to other optional coverages:
UM/UIM (um, umuim, uim, umpd, uimpd) - declinability varies by state
CDW (cdw) - available and declinable in select markets
Medical Payments (med_pay), PIP (pip), Rental (rental) - availability varies
Common Mistakes
- Hard-coding a list of "optional roadside markets" — The set changes as Root expands. Always check the API dynamically.
- Sending roadside in markets where it is not available — The API may return a validation error.
- Assuming roadside is always vehicle-level — Rely on the
availableCoveragesresponse structure. - Confusing "roadside not in available coverages" with "roadside is free" — It simply means Root does not offer it as a standalone coverage in that state.
- Not updating available coverages after profile changes — Re-fetch after significant profile updates.
Code Sample
async function isRoadsideOptional(state) {
const response = await carrierPlatformApi.get(`/bind_api/v3/quoting/market/${state}/coverages/available`);
const vehicleCoverages = response.availableCoverages.vehicles;
const roadsideCoverage = vehicleCoverages.find(c => c.symbol === "roadside");
if (!roadsideCoverage) return false;
return roadsideCoverage.attributes.some(attr => attr.kind === "declined");
}FAQ
How do I know if a state has optional roadside?
Call GET /bind_api/v3/quoting/market/<state>/coverages/available and check for "symbol": "roadside" with "kind": "declined" attribute.
What if roadside is missing from the response?
That state does not have optional roadside; do not include it in quote requests.
How do I decline roadside?
Include roadside in vehicle coverages with "kind": "declined" and "selection": { "declined": true }.
Does this work for other optional coverages?
Yes, the same "declined" attribute pattern applies.
Should I hard-code a list of roadside states?
No. Since coverages are fluid and can change at any time, it is best to use the API dynamically.
Updated 2 days ago