BackNine API Documentation
Welcome to BackNine's API documentation! Here you'll learn how to embed Quote & Apply, get quotes via API, pre-fill Quote & Apply with customer data, and more.
Here's a 14 minute video that explains the various topics of our API.
Base URL
Production: https://app.back9ins.com
Development: https://demo.back9ins.com
Rate Limits
BackNine rate limits API requests by API key. If a request exceeds a rate limit, the API returns 429 Too Many Requests.
General API Limit
Authenticated API endpoints are limited to 100 requests per 30 seconds by default.
This limit applies broadly to API-key authenticated endpoints such as cases, agencies, products, appointments, electronic applications, and quote endpoints.
Quote Request Limit
Quote-generating endpoints also have a sustained quote request limit of 1,000 requests per hour by default. This limit applies across:
POST /api/v1/eapp-quotesGET /api/v1/quotesPOST /api/v1/quotes
Some integrations may have a custom quote request limit. Contact BackNine if your integration needs a higher limit.
For POST /api/v1/eapp-quotes, set compare to true when you only need to compare quote results and do not intend to create an eApp from the returned quotes. Compare quote responses are not stored by BackNine and cannot be used later as quote_id values.
Pagination
Paginated list APIs accept the following query parameters:
| Parameter | Description |
|---|---|
page integer |
1-based page number. Omit it or send 1 for the first page. Values below 1 are normalized to 1; meta.page, when included in the response, reports the normalized page. |
count integer |
Results per page. Defaults to 25 when omitted; the maximum is 50. Larger values are capped at 50. |
Use meta.total for the number of matching records across all pages.
For additional requirements when calling these APIs through the ChatGPT connector, see Connector Integration.
MCP Server
BackNine's MCP server gives AI clients and custom MCP integrations a structured way to use supported BackNine API capabilities. The MCP layer is client-agnostic: ChatGPT and other MCP-compatible clients use the same tools and authorization model.
Authentication and Authorization
MCP connections use OAuth authorization. Users sign in to BackNine and explicitly consent before an AI client can access BackNine on their behalf.
Access remains limited by the authenticated user's BackNine permissions. Connecting an MCP client does not grant access to cases, applications, appointments, or other records the user could not otherwise access.
HIPAA-protected data is scrubbed from MCP server responses before they are returned to AI clients.
MCP Tools and Controller
The MCP controller exposes supported BackNine API operations as MCP tools. Tool definitions describe the operation, HTTP method and path, accepted parameters, and request schema.
This is the canonical integration surface for custom MCP clients. Integrators should rely on the tool metadata exposed by the MCP server rather than implementing ChatGPT-specific behavior.
MCP endpoint
Production: https://app.back9ins.com/api/v1/mcp/tools
ChatGPT Plugin
Coming soon: The BackNine ChatGPT plugin is awaiting approval and is not yet publicly available.
BackNine's ChatGPT plugin is a client-specific way to connect ChatGPT to the BackNine MCP server.
When a user connects BackNine in ChatGPT, ChatGPT uses the same MCP tools and BackNine authorization rules described above. The user signs in to BackNine, reviews the requested access, and consents to the connection.
Once connected, users can ask ChatGPT to perform supported actions such as retrieving their pending cases, viewing case details, reviewing electronic applications, and checking carrier appointments.
The ChatGPT integration does not have a separate BackNine API. It is a client of the MCP server, so new MCP-compatible clients can use the same underlying integration without duplicating the API.
Claude Connector
Coming soon: The BackNine Claude connector is awaiting approval and is not yet publicly available.
BackNine's Claude connector will let users connect Claude to the same BackNine MCP server used by other supported AI clients.
When available, users will sign in to BackNine, review the requested access, and consent to the connection. Claude will use the same MCP tools and BackNine authorization rules described above, with access limited to the authenticated user's permissions.
Once connected, users will be able to ask Claude to perform supported actions such as retrieving their pending cases, viewing case details, reviewing electronic applications, and checking carrier appointments.
The Claude integration will not have a separate BackNine API. It will use the shared MCP server, allowing BackNine to maintain one client-agnostic integration surface.
Connector Integration
BackNine's Model Context Protocol (MCP) tools expose API endpoints to clients such as ChatGPT. When using the ChatGPT connector, count, if supplied, must be an integer from 1 to 50. The connector rejects larger, zero, negative, and non-integer values before sending the API request. See Pagination for server-side defaults and normalization.
For the cases_index tool, send multiple exact case statuses as a JSON array on filter[cases.status], and multiple product traits as a JSON array on product_traits within the tool's query object:
{
"query": {
"filter[cases.status]": ["Entered", "Submitted"],
"product_traits": ["trait1", "trait2"]
}
}
Replace the example traits with the traits to match. Every listed trait must match. For direct HTTP requests, use the repeated array parameters documented under Get Cases.
Quote & Apply Setup
Embed Quote & Apply
The most common method of adding Quote & Apply on your website is by copying and pasting your embed code into the HTML of your website. You can do this by logging into BOSS > Quote & Apply > select your Quote & Apply website > click the "Generate Embed Code" button to copy your unique Quote & Apply code and paste it into the HTML of your website. That's it! Save your changes and open your webpage.
We suggest you make the width at least 980 pixels and don't recommend setting a height for Quote & Apply as the page height is dynamic based on the step.
<!-- Before Quote & Apply -->
<!DOCTYPE html>
<html>
<head>
<title>My Website!!!</title>
</head>
<body>
<p>This is my website.</p>
</body>
</html>
<!-- After Quote & Apply -->
<!DOCTYPE html>
<html>
<head>
<title>My Website!!!</title>
</head>
<body>
<p>This is my website.</p>
<div id="container-id"></div>
<div>
<script
id="strife"
src="https://cdn.quoteandapply.io/widget.js"
data-strife-key="GpIZ3clg5x96WPR_"
data-strife-container-id="container-id"
></script>
</div>
</body>
</html>
Embed Quote & Apply via a Modal
The following example details how you can use open Quote & Apply by clicking an image and have it appear as a modal.
Place the code for your button where you want it to appear:
In this example, clicking the BackNine logo will open Quote & Apply in a modal. Bind the image to launch Quote & Apply by adding the CSS class "strife-button" to the img attribute. remove the data-strife-container-id attribute.
<!DOCTYPE html>
<html>
<head>
<title>My Website!!!</title>
</head>
<body>
<p>This is my website.</p>
<!-- Embed with an image -->
<img class="strife-button" src="link/to/your/image" />
<!-- Embed with a button -->
<button class="strife-button">Get Quotes</button>
<!-- Embed with an anchor tag -->
<a href="#" class="strife-button">Get Quote</a>
<script
id="strife"
src="https://cdn.quoteandapply.io/widget.js"
data-strife-key="GpIZ3clg5x96WPR_"
></script>
</body>
</html>
Embed Quote & Apply via NPN
Using a National Producer Number
If you don't want to create embed codes for each agent, you can paste the code below into the HTML of your website for Quote & Apply to appear. This is the same script as the Embed Code example but without the data-strife-key. You must pass in npn (the agent's national producer number) so we know who the agent is. If the agent's NPN doesn't exist in BackNine's database, a registration page will appear allowing the agent to sign up and then proceed with Quote & Apply.
referral_uid is optional but is typically used when dynamically passing in the agent's NPN. The referrer gets access to the eApp and/or new agent that is created.
<div>
<script
id="strife"
src="https://cdn.quoteandapply.io/widget.js?prefill&npn={Your NPN}&referral_uid={Your referral_uid}"
data-strife-container-id="container-id"
></script>
</div>
WordPress Setup
The following example details how you can setup Quote & Apply using Wordpress.
1. Log in to your WordPress site as admin. You should arrive at the Dashboard.

2. Go to your list of pages.

3. Find the page you wish to use Quote & Apply on. Click “Edit”.

4. You should arrive at on an editor that allows you to edit the content of the page.

5. Find and click on the “Text” mode at the top right of the editor. This will allow you to edit the content using HTML code

6. Paste your unique embed code into the editor where you wish Quote & Apply to appear. Then, go to the “Publish” section and hit “Update”. The screen should refresh with a success message

7. Click on “View page” to see your results

BackNine Webpages
BackNine hosts a webpage for every licensed agent that signs up for an account at BOSS. Here's an example BackNine Webpage: https://app.back9ins.com/apply/ReidTattersall. You can create as many BackNine Webpages as you like and also customize the name (e.g. https://app.back9ins.com/apply/AgencyName). To create a BackNine Webpage, log into BOSS > Quote & Apply > Create a Widget > your BackNine Webpage will be instantly available.
Custom Domain Webpages
For customers with a significant number of agents, Custom Domain Webpages allow your agents to use Quote & Apply with your domain (e.g. https://app.yourdomain.com/AgentName instead of https://app.back9ins.com/apply/AgentName) and don't require you to set up webpages for your agents. To set this up, please email [email protected] the subdomain and domain that you'd like to use. For example, you could choose the subdomain "app" and have a domain "yourdomain.com" so the URL for your agents would be app.yourdomain.com/AgentName. Once you notify [email protected], we'll respond with a value that you'll use to create a CNAME. To create a CNAME, log into your domain's DNS settings (e.g. GoDaddy), create a CNAME record with your subdomain (e.g. app) and point it to the value we provided you via email. Once you've saved your DNS changes you can create links at BOSS > Quote & Apply > Create a Widget with your domain. An example use case is a P&C agency (myagency.com) with 200 agents, rather than embedding Quote & Apply into 200 pages, simply add the agents into BOSS and each agent will be emailed their Quote & Apply website (app.myagency.com/AgentName). There is a one-time charge of $1,000 to setup Custom Domain Webpages (you can then issue as many web pages as you'd like).
Analytics
Google Analytics
To view your session data within your Google Analytics account, log into BOSS > Quote & Apply > select a specific Quote & Apply website and insert your Google Analytics ID. You should immediately see session data within your Google Analytics account.
If you'd like to utilize our pre-built conversion funnel reports (shown in the image below), navigate to the Google Analytics Solutions Gallery > search for "Quote & Apply Conversion Funnels" > click import next to the result authored by reidtattersall.
After 24 hours, you should see data within your Google Analytics reports (see screenshot) which is located in Google Analytics > Conversions > Goals > Funnel Visualization.

Google Tag Manager
To add your Google Tag Manager ID, log into BOSS > Quote & Apply > select a Quote & Apply website and insert your Google Tag Manager ID. Import this container into your GTM account.
We will not report to your Google Analytics account if you insert a Google Tag Manager ID. If you want to utilize Google Analytics and Google Tag Manager, please implement Google Analytics via Google Tag Manager.
Custom Scripts/Pixels
You can add custom scripts (e.g. tracking software like Hotjar, chat widgets like Zendesk, or pixels from social media companies like Meta) through Google Tag Manager. Add your Google Tag Manager ID on the settings of your Quote & Apply website within BOSS, then add your third party scripts within Google Tag Manager.
Prefill Quote & Apply
Customer data can be prefilled within Quote & Apply for a smoother user experience.
You can prefill Quote & Apply by appending query string params to the URL of a page where Quote & Apply is hosted (e.g. https://app.back9ins.com/apply/demo?prefill or to Quote & Apply's src (e.g. src="https://cdn.quoteandapply.io/widget.js?prefill"). The empty param prefill must be a top-level parameter. When Quote & Apply loads and is prefilled with data, an eApp will be created if the user reaches the quote step or if quote information is prefilled.
See Quote & Apply Parameters to learn what can be prefilled.
(Example) Basic
Prefill an application for Mary Sue who was born Jan 1st, 1970, with her phone number and email.
https://app.back9ins.com/apply/demo?prefill&first_name=Mary&last_name=Sue&gender=Female&birthdate=1970-01-01&phone=(800) 790-1951&[email protected]
(Example) Basic with National Producer Number
Set the agent by including the National Producer Number (NPN) of the agent. If the NPN isn't BackNine's BOSS, we'll show a signup page for the agent to create an account.
https://back9ins.com/apply?prefill&first_name=Mary&last_name=Sue&gender=Female&birthdate=1970-01-01&phone=(800) 790-1951&[email protected]&npn={Your NPN}
(Example) Limit Product Types
Limit the available products to only accidental death, select accidental death with selected_type, and have the user land on the quote step. For the user to land on the quote step, all previous steps must be valid so we set health to 1 and smoker to Never.
https://app.back9ins.com/apply/demo?prefill&first_name=Mary&last_name=Sue&gender=Female&birthdate=1970-01-01&phone=(800) 790-1951&[email protected]&health=1&smoker=Never&product_types=[accidental_death]&selected_type=accidentalDeath&step=quote
(Example) 15 Year Term Quote
Prefill a 15 year term quote for Mary Sue, limit available products to term, set monthly mode, application state, metadata, NPN, and referral, and land on the quote step.
https://back9ins.com/apply?prefill&first_name=Mary&last_name=Sue&gender=Female&birthdate=1970-01-01&phone=(800) 790-1951&[email protected]&health=3&selected_type=term&mode=12&application_state=CA&product_types=[term]&step=quote&metadata={"Agentid":"1234","Campaign":"Quote-Life"}&term_duration=15&npn={Agent's NPN}&referral_uid=tlMyUCR
(Example) Current Smoker
Prefill an application for Mary Sue who was born Jan 1st, 1970, and currently uses cigarettes daily with health of 3. Note that smoking statuses are JSON.
https://app.back9ins.com/apply/demo?prefill&first_name=Mary&last_name=Sue&gender=Female&birthdate=1970-01-01&phone=(800) 790-1951&[email protected]&smoker=Currently&smoking_statuses=[{"frequency": 365, "category": "Cigarettes"}]&health=3
(Example) Previous Smoker
Prefill an application for Mary Sue who was born Jan 1st, 1970, and a previous smoker who used cigarettes daily and quit smoking January 1, 2000 with health of 3. Note that smoking statuses are JSON.
https://app.back9ins.com/apply/demo?prefill&first_name=Mary&last_name=Sue&gender=Female&birthdate=1970-01-01&phone=(800) 790-1951&[email protected]&smoker=Previously&smoking_statuses=[{"frequency": 365, "category": "Cigarettes", "last_use_date": "2000-01-01"}]&health=3
(Example) Metadata
Prefill metadata with URL parameters. The prefill parameter metadata allows you to store arbitrary information that is displayed when viewing the eApp in BOSS, when you export a CSV of your data within BOSS, or when using Webhooks.
When using metadata, or any JSON, make sure to escape the special characters if used in a script src.
https://app.back9ins.com/apply/demo?prefill&metadata={"Agentid":"1234","Campaign":"Quote-Life"}
(Example) Beneficiaries/Owner
Specify who the beneficiaries are and who the owner is. By default, the insured is the owner.
https://app.back9ins.com/apply/demo?prefill&first_name=Grace&last_name=Shields&state=CA&gender=Female&health=5&smoker=Never&height=66&weight=135&birthdate=1987-01-01&[email protected]&phone=1231231234&street_address=310 N Westlake Blvd&city=Westlake Village&zip=91362&years_at_address=3&employer=BackNine&occupation=SE&occupation_years=5&employer_street_address=310 N Westlake Blvd&employer_state=CA&employer_zip=91362&employer_city=Westlake Vilage&income=50000&assets=25000&liabilities=12500&ssn=123-12-1231&birth_state_or_country=CA&us_citizen=yes&drivers_license=f1234567&drivers_license_state=CA&parties=[{"first_name":"Sadie","last_name":"Guardia","relationship":"Wife","gender":"Male","address_street":"310 N Westlake Blvd","address_city":"Westlake Village","address_zip":"91362","address_state":"CA", "address_country": "United States", "beneficiary_amount":"100","type":"Individual", "is_primary_beneficiary": "true", "birthdate": "1990-01-01"}]
(Example) Script Source
As previously stated, you can include parameters via Quote & Apply's scr instead of the previously examples which used URL parameters. Prefill the insured's first and last name by appending parameters to Quote & Apply's src instead of using URL parameters.
<div id="container-id"></div>
<div>
<script
id="strife"
src="https://cdn.quoteandapply.io/widget.js?prefill&first_name=John&last_name=Doe&test=true"
data-strife-container-id="container-id"
></script>
</div>
(Example) Sign up + Connections
If the registration page is shown and you don't include a data-strife-key or a referral_uid, we won't know who is adding the new agent. In this rare case, add yourself into the hierarchy for agents that create accounts by adding your ID into the connections array. Once the agent creates their account, you'll be able to view the agent within your BOSS account.
<div id="container-id"></div>
<div>
<script
id="strife"
src='https://cdn.quoteandapply.io/widget.js?prefill&npn={Your NPN}&connections=[{"parent_type": "Agent", "parent_id": 1, "hierarchy": 1}]'
data-strife-container-id="container-id"
></script>
</div>
HMAC Authentication
You can sign prefill payloads with an HMAC to authenticate the request and verify data integrity. When an hmac parameter is present, the request is validated against the advisor's HMAC secret.
Setup
- Obtain your 64 character HMAC secret generated at https://app.back9ins.com/settings -> Developer Settings.
- Obtain your 7 digit referral_uid at https://app.back9ins.com/profile -> Referral Link.
- Include both
hmacandreferral_uidas top-level parameters in your prefill request.
Computing the HMAC
The validator expects a Base64 encoding of the raw HMAC-SHA256 digest, not a hex digest.
- Build an object of all URL parameters you will send, excluding only
hmac. There are no other ignored keys. If a parameter is on the URL, it must be in the signed object (includingprefillandreferral_uid). Sign the exact string values on the URL:?prefill(no value) is typically"", whileprefill=trueis"true". - Keep values as they will appear on the URL. Query parameters are strings (e.g.
"5"not5,"true"nottrue). Nested objects and arrays are allowed; hashes are sorted recursively and array order is preserved. - Sort all object keys alphabetically (recursively for nested objects).
- Serialize the canonical object as compact JSON (
JSON.generatein Ruby). - Compute HMAC-SHA256 of that JSON with your secret, then Base64-encode the raw digest (
Base64.strict_encode64in Ruby). A hex digest will not validate.
# Ruby example
def canonicalize(obj)
case obj
when Hash
obj.sort_by { |k, _| k.to_s }.to_h.transform_values { |v| canonicalize(v) }
when Array
obj.map { |v| canonicalize(v) }
else
obj
end
end
# Include every URL parameter except hmac. Values must be strings to match how query params are parsed.
payload = {
"prefill" => "true",
"referral_uid" => "your-referral-uid",
"first_name" => "John",
"last_name" => "Doe",
"gender" => "Male",
"birthdate" => "1990-01-01",
"health" => "5",
"smoker" => "Never",
"death_benefit" => "1000000",
"selected_type" => "term"
}
canonical = canonicalize(payload)
digest = OpenSSL::HMAC.digest("SHA256", "your-hmac-secret", JSON.generate(canonical))
hmac = Base64.strict_encode64(digest)
# Append hmac to your prefill URL:
# https://app.back9ins.com/apply/demo?prefill=true&referral_uid=your-referral-uid&first_name=John&...&hmac=#{hmac}
// JavaScript example
function canonicalize(obj) {
if (obj === null || typeof obj !== "object") return obj;
if (Array.isArray(obj)) return obj.map(canonicalize);
return Object.keys(obj)
.sort()
.reduce((acc, key) => {
acc[key] = canonicalize(obj[key]);
return acc;
}, {});
}
async function hmacSHA256Base64(secret, message) {
const encoder = new TextEncoder();
const key = await crypto.subtle.importKey(
"raw",
encoder.encode(secret),
{ name: "HMAC", hash: "SHA-256" },
false,
["sign"]
);
const signature = await crypto.subtle.sign("HMAC", key, encoder.encode(message));
const bytes = new Uint8Array(signature);
let binary = "";
bytes.forEach((b) => {
binary += String.fromCharCode(b);
});
return btoa(binary);
}
const payload = {
prefill: "true",
referral_uid: "your-referral-uid",
first_name: "John",
last_name: "Doe",
gender: "Male",
birthdate: "1990-01-01",
health: "5",
smoker: "Never",
death_benefit: "1000000",
selected_type: "term"
};
const hmac = await hmacSHA256Base64(
"your-hmac-secret",
JSON.stringify(canonicalize(payload))
);
HMAC Errors
| Error | Description |
|---|---|
hmac = "hmac and referral_uid are both required when using HMAC validation" |
hmac was provided without referral_uid. |
referral_uid = "is invalid" |
The referral_uid does not match any agent or agency. |
hmac = "HMAC secret has not been configured" |
The advisor matched by referral_uid does not have an HMAC secret set up. |
hmac = "is invalid" |
The computed HMAC does not match the provided value. |
Quote & Apply Parameters
The following parameters may be used for Prefilling Quote & Apply or Creating an eApp.
Environment Params
| Parameter | Description |
|---|---|
client_id string |
The key of the Quote & Apply widget that you'd like to use. |
npn number |
The NPN of the agent you'd like to use. |
test boolean |
Indicate this is a test eApp. Test eApps are deleted nightly, do not schedule a real exam, and use a non-production Docusign. eApps with an insured first name of Test and last name of Delete will also be deleted nightly. |
metadata object |
Add the metadata param to store custom data. Metadata is accessible for your use within BOSS, through CSV export, and webhooks. Limited to 256 characters. |
product_types array |
Array of all or some of the following: accidentalDeath, aiul, fex, incomeRider, linkedBenefit, ltc, myga, non_med, piul, pvul, ropTerm, term, ul, wholeLife |
resume_url string |
Allows you to override where the eApp is resumed from. By default, eApps will be resumed from where they are initiated from. Especially useful if the eapp was initiated from a website that requires authentication and you want to share the eApp with customers. If you do not have a public Quote & Apply website, you can send resume_url=agent-default and the resume URL will be the agent's default Quote & Apply website. |
referral_uid string |
Identifies the referring source of the electronic_application or agent signing up. The referrer will be given access to the eApp and will be added as a connection when using Agent Sign Up. Locate your Referral Link which is on your Profile page in BOSS for your referral_uid. The referrer's marketing manager will be used when an agent signs up if a data-strife-key is not provided and a marketing_manager_id is not provided. |
referrer_type string |
[DEPRECATING for referral_uid] Identifies the referring source of the electronic_application or agent signing up. The referrer will be given access to the eApp and will be added as a connection when using Agent Sign Up. This is your user type within BOSS and it can be obtained by emailing [email protected]. The referrer's marketing manager will be used when an agent signs up if a data-strife-key is not provided and a marketing_manager_id is not provided. |
referrer_id number |
[DEPRECATING for referral_uid] Identifies the referring source of the electronic_application or agent signing up. The referrer will be given access to the eApp and will be added as a connection when using Agent Sign Up. This is your user ID within BOSS and it can be obtained by emailing [email protected]. The referrer's marketing manager will be used when an agent signs up if a data-strife-key is not provided and a marketing_manager_id is not provided. |
start_page string |
Specify the start page when Quote & Apply loads. Valid options: apply life_insurance_calculator track_demo refer |
hmac string |
A Base64-encoded HMAC-SHA256 digest used to authenticate prefill requests. Must be used with referral_uid. See HMAC Authentication for details on computing the signature. Only applicable when prefilling Quote & Apply (not required for Create eApp by API which uses API key authentication). |
Agent Access Params
Use these params to grant an agent access to the eApp at creation time. The agent is identified by email and will be looked up or created automatically. When creating an agent through the API, the request must be authenticated (via API key or HMAC with referral_uid) and the new agent will be connected to the authenticated advisor. When used via prefill, HMAC authentication with referral_uid is required.
| Parameter | Description |
|---|---|
agent_email string |
The email address of the agent to grant access to the eApp. If an agent with this email exists and is connected to the authenticated advisor, they are granted access. If no agent exists, a new agent account is created (requires agent_first_name and agent_last_name). |
agent_first_name string |
The first name of the agent. Required when agent_email does not match an existing agent. |
agent_last_name string |
The last name of the agent. Required when agent_email does not match an existing agent. |
saml_id string |
A SAML identifier for the agent's SSO login. When creating a new agent, if the authenticated advisor has an IdP (Identity Provider) configured, this value is used as the agent's SAML ID. Defaults to the agent_email if not provided. |
Insured Params
Use these prefill params to tell us all about your client.
| Parameter | Description |
|---|---|
first_name string |
The insured's first name. |
last_namestring |
The insured's last name. |
gender string |
The insured's gender. If specified, must be either Male or Female. |
health number |
The insured's health with possible values of -1, -2, -3, -4, -5, -6, 1, 2, 3, 4, 5. Negative values represent table ratings (e.g. -3 is Table C/Table 3). 1 and 2 = Standard, 3 = Standard Plus, 4 = Preferred, 5 = Super Preferred. |
smoker string |
The insured's smoking status. If specified must be Never, Previously, or Currently. |
smoking_statusesobject |
The list of user's smoking statuses. See Current Smoker or Previous Smoker for details |
height number |
The insured's height in inches from 50 - 83. |
weight number |
The insured's weight in lbs. |
birthdate date |
The insured's birthdate. Must be in YYYY-MM-DD format. |
email string |
The insured's email address |
phone string |
The insured's phone number. Must be in (###) ###-#### format. |
street_address string |
The insured's street address |
city string |
The insured's city |
state string |
The insured's state. Must be the two-letter abbreviation. If not specified, Quote & Apply will attempt to get the location by looking at the user's I.P. |
zip number |
The insured's zip. Must be 5 numbers long |
years_at_address number |
The number of years the insured has been at their address |
application_state string |
The state of the application (i.e. the state in which to display quotes for and the state where the owner will be signing). Must be the two-letter abbreviation. If not specified, Quote & Apply will attempt to get the location by looking at the user's I.P. The agent must be licensed in the application_state in order to prefill the value. |
income number |
The insured's income |
assets number |
The insured's assets |
liabilities number |
The insured's liabilities |
ssn string |
The insured's social security number with dashes. Formatted as ###-##-#### |
routing_number string |
The insured's bank routing number for EFT payment. Must be 9 digits. |
account_number string |
The insured's bank account number for EFT payment. Must be 5 to 17 digits. |
account_type string |
The insured's bank account type for EFT payment. If specified, must be Checking or Savings. |
birth_state_or_country string |
The insured's birth state or country. See birth_state_or_country values below |
us_citizen boolean |
The insured's citizenship status |
drivers_license string |
The insured's drivers license number. If they do not have a drivers license number, specify none |
drivers_license_state string |
The insured's drivers_license_state. Two character state abbreviation capitalized |
drivers_license_expiration date |
The insured's drivers license expiration date. Must be in YYYY-MM-DD format. |
no_drivers_license_reason string |
The reason the insured does not have a driver's license |
bankruptcy boolean |
If the insured has had a bankruptcy |
bankruptcy_type string |
The type of bankruptcy the insured had. Must be Chapter 7, Chapter 11, Chapter 12, Chapter 13, or Chapter 15 |
bankruptcy_discharge_date date |
When the bankrupcy was discharged. Must be formatted YYYY-MM-DD. |
send_client_intro_message boolean |
Indicate that an intro message is to be sent to the insured's phone number and email. Requires a vaild phone and email |
Insured Employer / Occupation
| Parameter | Description |
|---|---|
employer string |
The insured's employer. Must be specified or none |
occupation string |
The insured's occupation. If employer is none options are disabled, unemployed, retired, student, homemaker otherwise any string |
occupation_years number |
The length of time the insured has held their current occupation. |
employer_street_address string |
The insured's street employer's address |
employer_city string |
The insured's employer's city |
employer_state string |
The insured's employer's state. Must be the two character state abbreviation. |
employer_zipnumber |
The insured's employer's zip. Must be 5 characters long |
Parties (Beneficiaries/Owner)
| Parameter | Description |
|---|---|
parties array |
Individual
| Parameter | Description |
|---|---|
type required string |
must be set to Individual |
first_name string |
The individual's first name. |
last_name string |
The individual's last name. |
relationship string |
How the individual is related to the insured. Possible values are Brother, Business Partner, Daughter, Domestic Partner, Ex-Spouse, Father, Fiance, Friend, Granddaughter,Grandfather, Grandmother, Grandson, Husband, Mother, Other, Relative, Sister, Son, Spouse, Stepfather, Stepmother, or Wife. |
gender string |
The individual's gender. Must be Male or Female |
email string |
The individual's email. This is checked via a 3rd party email validator. |
phone_mobile string |
The individual's phone number. Must be formatted as (####) ###-#### |
birthdate string |
The individual's birthdate. Must be formatted as YYYY-MM-DD |
ssn string |
The individual's social security number with dashes. Must be formatted as ###-##-#### |
address_street string |
The individual's street address |
address_city string |
The individual's city |
address_zipnumber |
No |
address_state string |
The individual's state. Must be the 2 letter abbreviated state |
address_country string |
The individual's country. Must be the Full Country Name |
beneficiary_amount number |
The entity's percent of the benefit. Must be 1 <= => 100 |
is_owner boolean |
This individual is the owner of the policy |
is_primary_beneficiary boolean |
This individual is a Primary Beneficiary |
is_contingent_beneficiary boolean |
This individual is a Contingent Beneficiary |
Trust/Business
| Key | Description |
|---|---|
type required string |
Trust or Business |
name string |
The entity's name. |
tin string |
The entity's TIN. Must be formatted as ##-####### |
phone_work string |
The entity's phone number. Must contain 10 numbers and be formatted as (###) ###-#### |
email string |
The entity's email. This is checked via a 3rd party email validator. |
relationship string |
How the entity individual is related to the insured. Must be Employer or Other. If the entity is the owner, you may specify Creditor |
formation_date date |
A Trust's formation date. Must be formatted |
address_street string |
The entity's street address |
address_city string |
The entity's city |
address_zip number |
The entity's zip. Must be 5 digits long |
address_state string |
The entity's state. Must be the 2 letter abbreviated state |
address_country string |
The entity's state. Must be the full country name |
beneficiary_amount number |
The entity's percent of the benefit. 1 <= => 100 |
responsible_individual_email string |
The signer/trustee's email (if other than insured) |
responsible_individual_first_name string |
The signer/trustee's first name (if other than insured) |
responsible_individual_last_name string |
The signer/trustee's last name (if other than insured) |
responsible_party_relationship string |
If the insured's title if they're the signer |
responsible_party_sole_signer string |
If the insured is the only signer |
is_owner boolean |
This entity is the owner of the policy |
is_primary_beneficiary boolean |
This entity is a Primary Beneficiary |
is_contingent_beneficiary boolean |
This entity is a Contingent Beneficiary |
Quote Params
Use these prefill params to dial in the quote for you client.
| Parameter | Description |
|---|---|
age_value number |
Target age for cash value at age solves. Only available for universal life products. |
benefit_period number |
The policy's benefit period. Options are 2-8 and -1 which represents unlimited. |
carriers array |
Limit the carriers. Reference GET /carriers to get carrier IDs. Example carriers=[28] |
cash_value number |
Age to which coverage will last. Only available for Accumulation IUL, Protection IUL, Protection VUL, and UL. |
chronic_illness_and_ltc string |
With Chronic Illness/LTC Rider, With Chronic Illness Rider, With LTC Rider, Without Chronic Illness/LTC Rider Filters the quotes. |
death_benefit number |
The desired death benefit. Use any number 5000 through 10000000 |
discount string |
null, Association, Employer, Producer. Used for Long Term Care. |
elimination_period number |
The policy's elimination period |
guaranteed_issueboolean |
Only available for Final Expense. Only responds to true`. Use when only guaranteed issue final expense is desired. |
home_health_care_waiver boolean |
If the quote will include the home health care waiver |
income_end_age number |
Only available on Accumulation IUL, Protection IUL, Protection VUL, and Universal Life when income is on. Any number greater than income_start up to 120, |
income_solve string |
Only available on Accumulation IUL, Protection IUL, Protection VUL, and Universal Life when income is on. Must be either No or Max. |
income_start_age number |
Only available on Accumulation IUL, Protection IUL, Protection VUL, and Universal Life when income is on. Any number greater than the insured's age and less than income_end_age up to 120 |
inflation_percentage string |
null or 1% Compound - 5% Compound. Used for long term care. |
lapse_protection_to_age number |
Age to which the insureds policy is protected from lapsing. Only available for Accumulation IUL, Protection IUL, Protection VUL, and UL. 65 <= => 120 |
living_benefits boolean |
If you only want to receive term quotes with living benefits. Use chronic_illness_and_ltc for non-term chronic illness filtering. |
ltc_rider_percentage number |
Only available when ltc_rider is true. A number between 1-6. |
blended_term_rider_enabled boolean |
Enable the Blended Term Rider for eligible whole life products. Defaults to false. |
blended_term_rider_amount number |
Blended Term Rider amount in dollars. Required when enabled; must be a positive whole number no greater than the requested death benefit. |
mode number |
How many times per year the premium is due. Must be 1, 2, 4, or 12 |
monthly_benefit number |
The maximum amount that is available per month for long term care |
partner_discount string |
null, One, Both. Used for long term care. |
pay_duration string, number |
Duration of premium payments. Only available for Accumulation IUL, Protection IUL, Protection VUL, and UL. 1 <= pay_duration <= 99 or Lifetime. Defaults to Lifetime when not sent. |
pool_of_money number |
The amount that is available for long term care |
premium number |
Desired amount paid according to the mode |
products array |
Limit the products. Example products=[105, 270, 323, 472, 2721, 2742, 2499] |
return_of_premium_rider string |
null, Limited, Limited Surrender, Full, Full Surrender |
save_age boolean |
If save age is requested |
selected_type string |
The default product category shown after the birthdate step. Must be accidentalDeath, aiul, fex, incomeRider, linkedBenefit, ltc, myga, non_med, piul, pvul, ropTerm, term, ul, or wholeLife |
shared_care boolean |
If shared care rider is requested. Used for joint insureds for long term care. |
solve string |
See below for solves |
term_duration number |
Sets the term duration for Term and Return of Premium Term. Must be 10, 15, 20, 25, 30, 35, or 40 |
vitality_level string |
John Hancock's Vitality Program. Possible values are null, Bronze, Silver, and Platinum |
Blended Term Rider
For eligible whole life products, send blended_term_rider_enabled=true and blended_term_rider_amount with the quote parameters. The API parameter names are shown above. Only products configured to support the rider are returned when it is requested. The rider is currently illustrated for supported MassMutual whole life products. Use solve=Base Premium when requesting this rider; other solve modes are not supported by the current illustration engine.
Example quote parameters (combine with the required insured and authentication parameters for your endpoint):
{
"selected_type": "wholeLife",
"solve": "Base Premium",
"death_benefit": 500000,
"blended_term_rider_enabled": true,
"blended_term_rider_amount": 250000
}
When prefilling via a URL, URL-encode these same parameter names and values. Leave blended_term_rider_enabled false or omit it to quote without the rider. Invalid amounts cause validation errors.
Premium Solves
| selected_type | Solve |
|---|---|
accidentalDeath |
Base Premium |
aiul |
Maximum Non-MEC Premium, Target Premium, Premium Solve Cash Value at Age |
fex |
Base Premium |
incomeRider |
Premium Required |
linkedBenefit |
Base Premium |
ltc |
Base Premium |
non_med |
Base Premium |
piul |
Maximum Non-MEC Premium, Target Premium, Premium Solve Cash Value at Age, Lapse Protection Death Benefit |
pvul |
Maximum Non-MEC Premium, Target Premium, Premium Solve Cash Value at Age, Lapse Protection Death Benefit |
ul |
Maximum Non-MEC Premium, Target Premium, Premium Solve Cash Value at Age, Lapse Protection Death Benefit |
wholeLife |
Base Premium |
Benefit Solves
| selected_type | Solve |
|---|---|
aiul |
Min Non-MEC DB, Target, DB Solve Cash Value at Age |
incomeRider |
Payout Amount |
piul |
Min Non-MEC DB, Target, DB Solve Cash Value at Age, Lapse Protection Death Benefit |
pvul |
Min Non-MEC DB, Target, DB Solve Cash Value at Age, Lapse Protection Death Benefit |
ul |
Min Non-MEC DB, Target, DB Solve Cash Value at Age, Lapse Protection Death Benefit |
wholeLife |
Base Death Benefit |
No Solves
| selected_type | Solve |
|---|---|
aiul |
Specify Premium and Death Benefit |
piul |
Specify Premium and Death Benefit |
pvul |
Specify Premium and Death Benefit |
ul |
Specify Premium and Death Benefit |
LTC Benefit Solves
| selected_type | Solve |
|---|---|
linkedBenefit |
LTC Benefit |
Smoking Status Object Structure
Use this to populate the smoking statuses array with respect to the smoker prefill option chosen.
| Parameter | Description |
|---|---|
category required string |
The item the user uses or has used. Must be Cigarettes, eCigarettes, Cigars, Pipe, Chew, or Cannabis |
frequency required number |
How frequently the user uses or has used. Must be 2, 12, 52, or 365 |
last_use_date string, optional |
The last use date of this item. Must be formatted as YYYY-MM-DD. This is required if smoker is Previously |
User Experience Params
Use these prefill params to customize the user experience.
| Parameter | Description |
|---|---|
active_first_input boolean |
Causes the first input on Quote & Apply to be active when Quote & Apply loads. This can cause the page to scroll (i.e. jump) if Quote & Apply is below the fold. |
dark boolean |
Enables/disables dark mode |
greeting string |
Override the "greeting" text when asking for first name and last name |
new_npn_greeting string |
Override the "greeting" text if the NPN (National Producer Number) doesn't exist in BOSS. Example: An integration partners send their agent's NPN which may or may not exist in BOSS. If it doesn't exist, the greeting can be customized to "Welcome Integration Partner Users! Please enter your National Producer to create your account". The default greeting if an NPN doesn't exist is "Welcome to Quote & Apply. Enter your National Producer Number to Sign Up." |
step string |
hearts, compare, quote, contact The step to land on. step=quote and step=contact will create an electronic application when the page loads. You must include selected_type when using contact so the eApp is created for the correct product category. step=contact will create the eApp with the first product. You can specify products so the eApp is created with your desired product. |
Agent Sign Up Params (Pre-fill only)
Use these prefill params when agents are signing up with BackNine through Quote & Apply.
| Parameter | Description |
|---|---|
assignment_npn number |
For agents signing up via Quote & Apply, the NPN of the agent or agency which the new agent assigns commission to. This assignment_npn must exist within BOSS. |
commission_lock boolean |
For agents signing up via Quote & Apply, disables the new agent's ability to modify commission rates, commission splits, and where commissions are assigned to. Can be used with assignment_npn to set commission assignment and prevent users from changing them. |
connections array |
For agents signing up via Quote & Apply, creates a connection for each item in the array when agents sign up using Quote & Apply. parent_type and parent_id can be obtained by emailing [email protected]. Example connections=[{'parent_type': 'Agent', 'parent_id': 1, 'hierarchy': 1}] |
marketing_manager_id number |
For agents signing up via Quote & Apply, sets the agent's marketing manager when Agent Sign Up is used and a data-strife-key is not provided. marketing_manager_id can be obtained by emailing [email protected]. |
referral_uid string |
Identifies the referring source of the electronic_application or agent signing up. The referrer will be given access to the eApp and will be added as a connection when using Agent Sign Up. Locate your Referral Link which is on your Profile page in BOSS for your referral_uid. The referrer's marketing manager will be used when an agent signs up if a data-strife-key is not provided and a marketing_manager_id is not provided. |
referrer_type string |
[DEPRECATING for referral_uid] Identifies the referring source of the electronic_application or agent signing up. The referrer will be given access to the eApp and will be added as a connection when using Agent Sign Up. This is your user type within BOSS and it can be obtained by emailing [email protected]. The referrer's marketing manager will be used when an agent signs up if a data-strife-key is not provided and a marketing_manager_id is not provided. |
referrer_id number |
[DEPRECATING for referral_uid] Identifies the referring source of the electronic_application or agent signing up. The referrer will be given access to the eApp and will be added as a connection when using Agent Sign Up. This is your user ID within BOSS and it can be obtained by emailing [email protected]. The referrer's marketing manager will be used when an agent signs up if a data-strife-key is not provided and a marketing_manager_id is not provided. |
Get Quotes
Fetch a list of quotes. Each quote contains an ID which can be used when creating an eApp.
Endpoint
POST /api/v1/eapp-quotes
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
See Quote Params for quoting specific parameters, Insured Params for insured specific parameters, or jump to the Request Examples.
Set compare to true when you only need to compare quote results and do not intend to create an eApp from one of the returned quotes. Compare quote responses are not stored by BackNine and cannot be used later as quote_id values when creating an eApp.
Set max_quote_wait_seconds to a number greater than 0 and no greater than 26 to limit how long the request waits for carrier quote responses. The response includes quotes completed by that deadline and omits slower carriers. When omitted, the server's default quote timeout applies.
Request Examples
(Example) Quotes
Include the required client_id or npn to identify who the agent is. client_id specifies the Quote & Apply website whereas npn will use the the agent's default Quote & Apply website. client_id is the data-client-id (formerly known as the data-strife-key) within the embed code of a Quote & Apply website.
{
"client_id": "your-client-id",
"death_benefit": 1000000,
"insured": {
"first_name": "John",
"last_name": "Doe",
"health": 3,
"gender": "Male",
"smoker": "Never",
"birthdate": "1980-07-04"
},
"mode": 2,
"selected_type": "term",
"state": "CA",
"term_duration": 15
}
(Example) Quotes with a Maximum Carrier Wait
This example returns the quotes completed within three seconds. A carrier that takes longer than three seconds will not appear in the response.
{
"client_id": "your-client-id",
"death_benefit": 1000000,
"insured": {
"first_name": "John",
"last_name": "Doe",
"health": 3,
"gender": "Male",
"smoker": "Never",
"birthdate": "1980-07-04"
},
"max_quote_wait_seconds": 3,
"mode": 2,
"selected_type": "term",
"state": "CA",
"term_duration": 15
}
(Example) Compare Quotes
Compare quotes are for quote comparison only. Set compare to true when you do not plan to create an eApp from the returned quote. Compare quote responses are not stored by BackNine, so they cannot be used later as quote_id values.
{
"client_id": "your-client-id",
"compare": true,
"death_benefit": 1000000,
"insured": {
"first_name": "John",
"last_name": "Doe",
"health": 3,
"gender": "Male",
"smoker": "Never",
"birthdate": "1980-07-04"
},
"mode": 2,
"selected_type": "term",
"state": "CA",
"term_duration": 15
}
(Example) Quotes with an NPN
When using npn instead of a client_id, the agent's default Quote & Apply website is used.
{
"death_benefit": 2000000,
"insured": {
"birthdate": "1990-02-14",
"first_name": "Jane",
"gender": "Female",
"health": 4,
"height": 64,
"last_name": "Doe",
"smoker": "Currently",
"smoking_statuses": [
{
"category": "Cigarettes",
"frequency": 365
}
],
"weight": 140
},
"mode": 4,
"npn": 12345,
"selected_type": "ropTerm",
"state": "CA",
"term_duration": 30
}
(Example) Whole Life quotes
{
"client_id": "your-client-id",
"death_benefit": 500000,
"insured": {
"birthdate": "2000-01-20",
"first_name": "John",
"gender": "Male",
"health": 4,
"last_name": "Doe",
"smoker": "Never"
},
"mode": 1,
"pay_duration": 10,
"selected_type": "wholeLife",
"solve": "Base Premium",
"state": "CA"
}
(Example) IUL quotes
{
"client_id": "your-client-id",
"insured": {
"birthdate": "1990-01-01",
"first_name": "Jane",
"gender": "Female",
"health": 4,
"last_name": "Doe",
"smoker": "Never"
},
"mode": 1,
"pay_duration": 10,
"premium": 10000,
"selected_type": "aiul",
"solve": "Min Non-MEC DB",
"state": "CA"
}
(Example) LTC quotes
{
"client_id": "your-client-id",
"elimination_period": 90,
"home_health_care_waiver": false,
"insured": {
"birthdate": "1980-01-20",
"first_name": "John",
"gender": "Female",
"health": 4,
"last_name": "Doe",
"marital_status": "Married",
"smoker": "Never"
},
"joint_insured": {
"birthdate": "1980-01-20",
"first_name": "John",
"gender": "Female",
"health": 4,
"last_name": "Doe",
"marital_status": "Married",
"smoker": "Never"
},
"joint_waiver_of_premium": false,
"mode": 1,
"monthly_benefit": 6000,
"partner_discount": "both",
"pay_duration": -1,
"pool_of_money": 200000,
"selected_type": "ltc",
"shared_care": false,
"state": "CA"
}
Response Attributes
| Parameter | Description |
|---|---|
| quotes array<Quote> or null |
a list of available quotes matching request parameters |
| errors array<string> or null |
a list of reasons that must be addressed before getting quotes |
Quote Type
| Parameter | Description |
|---|---|
| benefit_period number |
The policy's benefit period. Typically the monthly benefit * benefit period will equal the pool of money |
| carrier Carrier |
Carrier details |
| chronic_illness_rider boolean |
If a chronic illness rider is enabled |
| death_benefit number |
The death benefit of the policy |
| discount string |
null, Association, Employer, Producer |
| distributions_cumulative number |
The cumulative amount of distributions |
| distributions_yearly_level number |
The amount of the first distribution |
| elimination_period number |
The policy's elimination period |
| exam ExamDetails |
All exam details |
| expires_at timestamp |
Quotes expire after 24 hours |
| guaranteed_account_values array |
The yearly guaranteed account values |
| guaranteed_issue boolean |
If this policy can be issued without exam |
| advisor_guide string |
A URL to the product's advisor guide |
| consumer_guide string |
A URL to the product's consumer guide |
| underwriting_guide string |
A URL to the product's underwriting guide |
| home_health_care_waiver boolean |
If the quote includes the home health care waiver |
| id string |
A unique identifier which may be used during eApp creation |
| illustration_available boolean |
Indicates if an illustration from the carrier is available to download using Download Illustration |
| instant_decision boolean |
If an instant decision is available |
| inflation_percentage string |
null or 1% Compound - 5% Compound |
| joint_id string |
a unique identifier which may be used during joint eApp creation |
| joint_waiver_of_premium boolean |
If the quote includes the joint waiver of premium rider |
| lapse_protection_to_age number |
Up to what age is lapse protection enabled |
| living_benefits LivingBenefits |
Living Benefits details |
| ltc_pool_of_money_values array |
The yearly pool of money value |
| ltc_rider boolean |
If a long term rider is enabled |
| ltc_rider_percentage number |
Options are null, 1, 2, 3, 4, 5, 6. To be used with chronic_illness_and_ltc. |
| mode number |
The frequency that the premium must be paid per year. Options are 1, 2, 4, 12. |
| monthly_benefit number |
The maximum amount that is available per month for long term care |
| monthly_benefit_values array |
The yearly monthly benefit values |
| non_guaranteed_account_values array |
The yearly non-guaranteed account values |
| non_guaranteed_distributions array |
The yearly non-guaranteed distributions |
| partner_discount string |
null, One, Both |
| pay_duration number |
The number of years that premiums are scheduled for |
| pool_of_money number |
The amount that is available for long term care |
| preferred boolean |
If this is a preferred product for BackNine |
| premium number |
The amount per mode to be paid for the policy |
| premium_values array |
The yearly premium values |
| product Product |
Product details |
| rating Rating |
All rating related parameters |
| return_of_premium_rider string |
null, Limited, Limited Surrender, Full, Full Surrender |
| save_age SaveAge |
Save Age details |
| selected_type string |
The type of insurance |
| shared_care boolean |
If the quote includes the shared care rider |
| state string |
The two letter state code for which this policy is generated |
| term_duration number |
The length of the level term |
| vitality_level string |
John Hancock's Vitality Program. Possible values are null, Bronze, Silver, and Platinum |
Carrier Type
| Parameter | Description |
|---|---|
| am_best_rating string |
Carrier rating according to AM Best. Possible values are A++, A+, A, A-, B++, B+, B, B-, C++, C+, C, C-, D, E, F, and S |
| approval_time number |
An estimated amount of time required for policy to be inforce |
| avatar_url string |
A link to the Carrier's avatar. Standard image formats and SVGs are supported |
| name string |
The Carrier's name |
| established_year string |
The year the carrier was established |
Exam Details Type
| Parameter | Description |
|---|---|
| details string |
Text explanation of exam details |
| required string |
If the exam is required. Possible values are exam_is_required, exam_not_required, and exam_possibly_required. |
Living Benefits Type
| Parameter | Description |
|---|---|
| details string |
Text explanation of living benefits |
| enabled boolean |
If the quote has living benefits |
Save Age Type
| Parameter | Description |
|---|---|
| details string |
Text explanation of save age |
| suggested boolean |
If save age is appropriate |
| enabled boolean |
If save age was used |
Product Type
| Parameter | Description |
|---|---|
| disclosure string |
Relevant disclosure information |
| conversion string |
The product's conversion details |
| e_delivery boolean |
If this product supports eDelivery |
| name string |
The product's name |
| require_payment boolean |
If this product requires payment during the application process |
| types array |
An array. See selected_type for possible values |
Rating Type
| Parameter | Description |
|---|---|
| error boolean |
If there was an error validating the current quote |
| max_weight number or null |
The maximum allowed weight for the current rating |
| min_weight number or null |
The minimum allowed weight for the current rating |
| rating string |
Assigned rating for the current quote |
Response Statuses
| Status | Description |
|---|---|
| 201 | Successful request |
| 401 | Unauthorized request. Your API key can be found at https://app.back9ins.com/settings?page=developer-settings |
| 429 | Rate limit exceeded |
| 422 | Quoting validation (Failed to fetch quotes) |
| 500 | Unexpected/Internal Error |
Response Example
{
"quotes": [
{
"active_years": 20,
"benefit_period": null,
"carrier": {
"am_best_rating": "A+",
"approval_time": 30,
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/production/carriers/BKGAPZTURM2JW8NQ.svg",
"established_year": 1981,
"name": "Banner",
"id": 28
},
"chronic_illness_rider": false,
"death_benefit": 1000000.0,
"discount": null,
"distributions_yearly_level": null,
"distributions_cumulative": null,
"elimination_period": null,
"exam": {
"details": "You may be able to skip the medical exam based on your answers to underwriting questions. You can also skip the exam if you've seen the doctor and completed blood work in the last 18 months.",
"required": "exam_possibly_required"
},
"expires_at": "2025-10-31T17:55:00.000-07:00",
"guaranteed_account_values": null,
"guaranteed_issue": null,
"home_health_care_waiver": null,
"id": "430a78d7-68a5-4af0-8bb3-7256727a4424",
"illustration_available": false,
"inflation_percentage": null,
"instant_decision": true,
"joint_id": null,
"joint_waiver_of_premium": null,
"lapse_protection_to_age": null,
"living_benefits": {
"details": null,
"enabled": false
},
"ltc_pool_of_money_values": null,
"ltc_rider": false,
"ltc_rider_percentage": null,
"mode": 1,
"monthly_benefit": null,
"monthly_benefit_values": null,
"non_guaranteed_account_values": null,
"non_guaranteed_distributions": null,
"partner_discount": null,
"pay_duration": 20,
"pool_of_money": null,
"preferred": true,
"premium": 589.69,
"premium_values": null,
"product": {
"conversion": "Conversions can be requested anytime within the duration of the guaranteed level premium period to a specified conversion product, up to attained age 70, whichever comes first. Policies issued at age 66 or over are convertible during the first five policy years.",
"disclosure": "Approval and actual premiums will be based upon the entire underwriting process, including but not limited to, information provided on the application, exam results and specific underwriting requirements and criteria. OPTerm 10 issue ages are 20-75 all classes. OPTerm 15 issue ages are 20-75 all classes. OPTerm 20 issue ages are 20-70 for non-tobacco classes and 20-65 for tobacco classes. OPTerm 25 issue ages are 20-60 for non-tobacco classes and 20-55 for tobacco classes. OPTerm 30 issue ages are 20-55 for non-tobacco classes and 20-50 for tobacco classes. Premium rates vary by coverage amount: $100,000-$249,999, $250,000-$499,999, $500,000-$999,999, $1,000,000 and above. Premiums quoted include $60 annual policy fee. Premiums are guaranteed to stay level for 10,15, 20, 25 or 30 years, respectively, and increase annually after initial guarantee period. OPTerm policies can be issued in preferred plus non-tobacco, preferred non-tobacco, standard plus non-tobacco, standard non-tobacco, preferred tobacco and standard tobacco classes. OPTerm 10, 15, 20, 25 and 30 substandard policies can be issued through Table 12, subject to underwriting discretion. Coverage can be renewed to age 95. Policies can be returned without obligation within 30 days of receipt in most states. Rates as of 05.05.16. Additional Insurance Riders, form AIR (1-11) and state variations, can provide temporary life insurance coverage for 10, 15 or 20 years after which coverage ceases. Term riders are not available in all states; issue ages vary from base plan. Waiver of Premium Benefit Rider, policy form # ICC09 WPTR and state variations, is available. A cost-free Accelerated Death Benefit Rider, policy form # ICC10 ADB and state variations, is included with all policies in states where approved. Children's Life Insurance Rider, form ICC14- CLIR and state variations, can provide life insurance coverage on eligible children. Coverage expires at the earlier of the insured child’s 25th birthday, the base policy insured’s 65th birthday or base policy termination. Forms and policy provisions may vary by state. Policy descriptions provided here are not a statement of contract. Please refer to the policy forms for full disclosure of all benefits and limitations. Two year contestability and suicide provisions apply.",
"e_delivery": true,
"name": "OPTerm 20",
"require_payment": false,
"types": [
"term"
],
"id": 105,
"advisor_guide": null,
"consumer_guide": "https://www.example.com/strife/v1/products/105/documents?document_type=consumer_guide",
"underwriting_guide": "https://www.example.com/strife/v1/products/105/documents?document_type=underwriting_guide"
},
"rating": {
"error": null,
"max_weight": null,
"min_weight": null,
"rate": "Standard Plus"
},
"return_of_premium_rider": null,
"save_age": {
"details": null,
"enabled": false,
"suggested": false
},
"selected_type": "term",
"shared_care": null,
"state": "CA",
"term_duration": 20,
"vitality_level": null
}
],
"hints": [],
"errors": null
}
Create eApp by API
Once you have used Get Quotes, you can proceed with Create an eApp via API. Create an eApp via API allows you to create an eApp without loading Quote & Apply in a browser using Prefilling Quote & Apply. The entire application cannot be completed via API so the agent or insured will need to continue the eApp within Quote & Apply to finish the eApp.
Endpoint
POST /api/v1/eapps
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
Request Examples
(Example) Create an eApp with a quote_id
Learn how to request quotes: Get Quotes
{
"step": "contact",
"insured": {
"quote_id": "your-quote-id"
}
}
(Example) Create an eApp with a quote_id with insured information
{
"step": "contact",
"metadata": {
"Agentid": "1234",
"Campaign": "Quote-Life"
},
"insured": {
"quote_id": "08a1c66f-6d29-4f7f-b960-69bbe03d07fa",
"email": "[email protected]",
"phone_mobile": "(805) 557-1503",
"street_address": "310 N Westlake Blvd",
"city": "Westlake Village",
"zip": 91362,
"state": "CA",
"country": "United States"
}
}
(Example) Create an eApp with Address, Parties, Employer, Occupation
{
"step": "contact",
"insured": {
"quote_id": "08a1c66f-6d29-4f7f-b960-69bbe03d07fa",
"email": "[email protected]",
"phone": 8057070600,
"street_address": "29130 Cliffside Dr",
"city": "Malibu",
"zip": 91362,
"years_at_address": 2,
"employer": "BackNine Insurance",
"occupation": "Engineer",
"occupation_years": 2,
"employer_street_address": "310 N. Westlake Blvd. Suite 240",
"employer_city": "Westlake Village",
"employer_state": "CA",
"employer_zip": 91362,
"income": 100000,
"assets": 500000,
"liabilities": 250000,
"ssn": "111-22-3333",
"drivers_license": "D5745676",
"drivers_license_state": "CA",
"birth_state_or_country": "CA",
"application_state": "CA",
"bankruptcy": false
},
"parties": [
{
"first_name": "Jane",
"last_name": "Doe",
"phone_mobile": "(805) 557-1503",
"relationship": "Wife",
"gender": "Female",
"address_street": "310 N Westlake Blvd",
"address_city": "Westlake Village",
"address_zip": 91362,
"address_state": "CA",
"address_country": "United States",
"beneficiary_amount": 34,
"type": "Individual",
"is_primary_beneficiary": true,
"birthdate": "1982-01-01"
},
{
"name": "Giant Trust",
"tin": "11-3456789",
"phone_work": "(805) 557-1503",
"email": "[email protected]",
"formation_date": "2000-01-01",
"address_street": "310 N Westlake Blvd",
"address_city": "Westlake Village",
"address_zip": 91362,
"address_state": "CA",
"address_country": "United States",
"beneficiary_amount": 34,
"type": "Trust",
"is_primary_beneficiary": true
},
{
"name": "Giant Business",
"tin": "98-7654321",
"phone_work": "(805) 557-1503",
"email": "[email protected]",
"address_street": "310 N Westlake Blvd",
"address_city": "Westlake Village",
"address_zip": 91362,
"address_state": "CA",
"address_country": "United States",
"beneficiary_amount": 34,
"type": "Trust",
"is_primary_beneficiary": "true",
"responsible_individual_email": "[email protected]",
"responsible_individual_first_name": "John",
"responsible_individual_last_name": "Doe",
"responsible_party_relationship": "Captain",
"responsible_party_sole_signer": true
}
]
}
(Example) Create an eApp with only insured information
{
"npn": 10790698,
"insured": {
"first_name": "John",
"last_name": "Doe",
"health": 3,
"gender": "male",
"smoker": "never",
"birthdate": "2000-01-01",
"email": "[email protected]"
}
}
(Example) Create an eApp with agent access (existing agent)
Grant an existing agent access to the eApp by providing their email. The agent must be connected to your account.
{
"client_id": "your-client-id",
"agent_email": "[email protected]",
"insured": {
"first_name": "John",
"last_name": "Doe",
"health": 3,
"gender": "male",
"smoker": "never",
"birthdate": "2000-01-01",
"email": "[email protected]"
},
"state": "CA"
}
(Example) Create an eApp with agent access (new agent)
Create a new agent and grant them access. The new agent will be connected to your account. If your account has an Identity Provider (IdP) configured, the new agent's user will be linked to it automatically.
{
"client_id": "your-client-id",
"agent_email": "[email protected]",
"agent_first_name": "Jane",
"agent_last_name": "Smith",
"insured": {
"first_name": "John",
"last_name": "Doe",
"health": 3,
"gender": "male",
"smoker": "never",
"birthdate": "2000-01-01",
"email": "[email protected]"
},
"state": "CA"
}
(Example) Create an eApp with agent access and custom SAML ID
When creating a new agent under an account with an IdP configured, you can specify a custom SAML ID for SSO.
{
"client_id": "your-client-id",
"agent_email": "[email protected]",
"agent_first_name": "Test",
"agent_last_name": "Banker",
"saml_id": "custom-saml-id",
"insured": {
"first_name": "John",
"last_name": "Doe",
"health": 3,
"gender": "male",
"smoker": "never",
"birthdate": "2000-01-01",
"email": "[email protected]"
},
"state": "CA"
}
Response Attributes
| Parameter | Description |
|---|---|
| id number or null |
The eApp's ID |
| uuid string or null |
The eApp's UUID |
| apply_link string or null |
The link where users may resume the eApp |
| warnings array<string> or null |
Post-eApp create warnings. Any messages failing to save after the eApp has been created such as Parties, addresses, etc. These will not prevent the eApp from being resume-able but provided invalid information is not saved. |
| errors array<string> or null |
Pre-eApp create errors. Messages included here must be addressed before creating the eApp. |
Response Example
{
"apply_link": "https://demo.back9ins.com/apply/TestAgent?eapp_id=35&eapp_uuid=c0104a11-6287-4545-89ea-73f1f71531f3",
"uuid": "c0104a11-6287-4545-89ea-73f1f71531f3",
"errors": null,
"warnings": null
}
Response Statuses
| Status | Description |
|---|---|
| 201 | Successful request |
| 401 | Unauthorized request. Your API key can be found at https://app.back9ins.com/settings?page=developer-settings |
| 422 | Pre-eApp create validation (Failed to create eApp) |
| 500 | Unexpected/Internal Error |
Response Errors
| Parameter | Message |
|---|---|
| client_id | "Please provide npn or client_id" |
| npn | "Please provide npn or client_id" |
| step | "Please specify a valid step: quote, contact" |
| first_name | "Must be at least one character and no more than 50 characters" |
| last_name | "Must be at least one character and no more than 50 characters" |
| gender | "Must be Male or Female" |
| health | "Must be in list -1, -2, -3, -4, -5, -6, 1, 2, 3, 4, 5" |
| smoker | "Must be in list Never, Previously, Currently" |
| smoking_statuses | "required" |
| smoking_statuses.0.category | "Must be in list Cannabis, Chew, Cigarettes, Cigars, eCigarettes, Pipe", |
| smoking_statuses.0.frequency | "Must be in list 365, 52, 12, 2" |
| smoking_statuses.0.last_use_date | "Must be before today" |
| birthdate | "Must be before today" "May not be older than 90" |
| state | "Please provide a state" |
| quote | "No Quotes Found" |
| agent_email | "not authorized for this agent" (agent exists but is not connected to your account) "authentication required to create agents" (agent does not exist and the request is not authenticated) |
| agent.first_name | Validation errors when creating a new agent (e.g. missing first name) |
| agent.last_name | Validation errors when creating a new agent (e.g. missing last name) |
| user.email | Validation errors when creating the agent's user account |
Response Warnings
| Parameter | Message |
|---|---|
| parties | "Unable to parse" |
| parties.n | any error involving saving parties at index n |
| insured.owner | any error switching the insured as the owner |
| insured.occupation | any error saving the insured's occupation |
| insured | any error saving insured information |
Grant Access to eApp
Grant specific advisors access to specific eApps. This is not a necessary action as BOSS provides access to the agent and their connections, but can be used if needed to apply your own logic.
Endpoint
POST /api/v1/eapps/:eapp_uuid/accesses/create
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
One of the following is required to identify the advisor: npn, agent_id, or agency_id
| Parameter | Description |
|---|---|
npn number |
The advisor's NPN |
agent_id number |
The agent's id within BOSS |
agency_id number |
The agency's id within BOSS |
email boolean, optional |
Controls if the advisor will receive eApp emails. Default will be applied if not specified. |
additional_case_access boolean, optional |
Controls if the advisor will be given access the case once the eApp is completed. Default will be applied if not specified. |
Request Examples
(Example) Create an eApp with a npn
{
"electronic_application_access":
{
"npn": 12345, "email": true, "additional_case_access": true
}
}
(Example) Create an eApp with a agent_id
{
"electronic_application_access":
{
"agent_id": 12345, "email": true, "additional_case_access": true
}
}
(Example) Create an eApp with a agency_id
{
"electronic_application_access":
{
"agency_id": 12345, "email": true, "additional_case_access": true
}
}
Response Statuses
| Status | Description |
|---|---|
| 201 | Successful request |
| 401 | Unauthorized request. Your API key can be found at https://app.back9ins.com/settings?page=developer-settings |
| 422 | Create validation failed |
| 500 | Unexpected/Internal Error |
Example Response Errors
"errors" => ["API key not provided"]
"errors" => "missing required top level electronic_application_access"
"errors" => "cannot find advisor"
"errors" => "Electronic application has already been taken"
Resume eApp
Resume an eApp without requiring the user to provide birthdate authentication. The response contains a resume_token key which is valid for 30 seconds which can be used to load the eApp by loading Quote & Apply and including resume_token within the src attribute as shown below.
Widget Example:
<div>
<script
id="strife"
src="https://cdn.quoteandapply.io/widget.js?prefill&eapp_id=XXX&eapp_uuid=XXX#resume=your-resume-token"
data-strife-container-id="container-id"
></script>
</div>
Direct URL Example:
https://app.back9ins.com/demo?prefill&eapp_id=XXX&eapp_uuid=XXX#resume=your-resume-token
Endpoint
PUT /api/v1/eapps/:eapp_uuid/resume
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Example
PUT /api/v1/eapps/#{eapp.uuid}/resume, headers: { "X-BACKNINE-AUTHENTICATION" => XXX }
Response Example
{
"resume_token": "ZkJzRmFpN0FFVGRNK1hEemFOdkx2aURBMnN3TFVuRE41dWRuU3hGRWVnNmpKWFNLUGtRN29lVEJlTW5TM1AybGoycVVpb01OWUZlV1ZwUnpUWUh5UUZEZzY0WmMvcXVRR1AxUHo5cENJdVRtaTBFYldISDh6bUVqeEtlWS0tcG01UGZxUSswYldhWktPTS0tSmQ3VUF4L09hanlXRFREendObWdQQT09"
}
Response Statuses
| Status | Description |
|---|---|
| 200 | Successful request |
| 401 | Unauthorized request. Your API key can be found at https://app.back9ins.com/settings?page=developer-settings |
| 422 | Cannot resume eApp. Possibly due to API key not having access to the eApp |
| 500 | Unexpected/Internal Error |
Example Response Errors
"errors" => ["API key not provided"]
"errors" => "cannot find eApp"
Get New Quotes for eApp
Get New Quotes for eApp allows you to get quotes for an existing eApp. This will not update the eApp's current quote unless you send a separate request to Update an eApp’s Quote.
Endpoint
POST /api/v1/eapps/:eapp_uuid/quotes
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
See Insured Params and Quote Params for all relevant data. When a quote is set as active, it will save relevant information to the eApp.
Request Examples
(Example) Get Quotes for an existing eApp
No body is needed
(Example) Get Quotes for an existing eApp with a different term_duration
{
"term_duration": 30
}
Response Attributes
| Parameter | Description |
|---|---|
| quotes array<Quote> or null |
a list of available quotes matching request parameters |
| errors array<string> or null |
a list of reasons that must be addressed before getting quotes |
Response Statuses
| Status | Description |
|---|---|
| 201 | Successful request |
| 401 | Unauthorized request. Your API key can be found at https://app.back9ins.com/settings?page=developer-settings |
| 422 | Quoting validation (Failed to fetch quotes) |
| 500 | Unexpected/Internal Error |
Response Example
See the example response from Get Quotes
Update an eApp's Quote
Endpoint
PUT /api/v1/eapps/:eapp_uuid/active-quote
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
| quote_id string |
The quote id that you would like to make active |
Request Example
(Example) Update with a quote_id
{
"insured": {
"quote_id": "some-quote-uuid"
}
}
Response
| Parameter | Description |
|---|---|
| errors array<string> or null |
a list of reasons that must be addressed before getting quotes |
Response Statuses
| Status | Description |
|---|---|
| 200 | Successful request |
| 401 | Unauthorized request. Your API key can be found at https://app.back9ins.com/settings?page=developer-settings |
| 422 | Assignment Validation, please ensure a valid quote ID is sent |
| 500 | Unexpected/Internal Error |
Response Example
{
"errors": null
}
Update an eApp's Insured Data
Sometimes in a flow, users want to update an insured's phone number or email after the fact.
Endpoint
PATCH /api/v1/eapps/:eapp_uuid/insured
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
See Insured Params for all updatable information. When updating the insured with non-essential information it is advised to fetch new quotes. Previous quotes will be invalid for the insured. The following values are seen as essential: state, first_name, last_name, gender, health, smoker, smoking_statuses, height, weight, and birthdate.
Request Examples
(Example) Updating Email
{
"email": "[email protected]"
}
(Example) Updating Phone Number
{
"phone": "(123) 456-7890"
}
Response Attributes
| Parameter | Description |
|---|---|
| errors Object or null |
a object of unsaved insured params or error with a string array of messages or null |
| insured Partial<Insured Params> |
the requested updated values |
Response Statuses
| Status | Description |
|---|---|
| 200 | Successful request |
| 401 | Unauthorized request. Your API key can be found at https://app.back9ins.com/settings?page=developer-settings |
| 422 | Quoting validation (Failed to fetch quotes) |
| 500 | Unexpected/Internal Error |
Response Example
Advance an eApp's Step
Depending on the integration level, you may want to advance the eApp's step after the eApp has been created. For example, if you set the step to "quote" when creating the eApp, subsequently collect and submit the insured's email address and phone number, and now want to set the step to "address".
Considerations
Due to dynamic eApp step flows, this endpoint comes with considerations which are as follows: requesting a specific step is not supported; the eApp's current step must be valid before proceeding (see below for step requirements); lastly, attempting to advance the eApp's step when its current step is not listed below may result in a 422.
Endpoint
PUT /api/v1/eapps/:eapp_uuid/step/next
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
There are no parameters for this endpoint.
Step Requirements
| Current Step Name | Advance Requirements |
|---|---|
| quote | insured.quote_id |
| contact | insured.first_name insured.last_name insured.email insured.phone insured.send_client_intro_message |
Example: the eApp's current step is contact, in order to call /api/v1/eapps/:eapp_uuid/step/next, insured.first_name, insured.last_name, insured.email, insured.phone, and insured.send_client_intro_message must be provided. After sending the request, address is now the current step of the eApp and the value for step in the response will show address.
Response Attributes
| Parameter | Description |
|---|---|
| step string |
On successful request, the returned step value is the current step the eApp is on |
| errors array<string> or null |
a list of reasons that must be addressed before advancing the step |
Response Statuses
| Status | Description |
|---|---|
| 201 | Successful request |
| 401 | Unauthorized request. Your API key can be found at https://app.back9ins.com/settings?page=developer-settings |
| 422 | Quoting validation (Failed to fetch quotes) |
| 500 | Unexpected/Internal Error |
Text Messaging
Summary
BackNine's text messaging endpoint allows you to send POST requests which result in a personalized text message to your prospect that contains a customized rate, your name, your Quote & Apply website, and a link to apply. The text message looks like this:
Hi John, this is your insurance agent Reid Tattersall. Did you know you could protect your loved ones with life insurance for as low as $30 per month for $1,000,000? Here's a no obligation quote: https://app.back9ins.com/t/35a77cf5
The first text to a phone number also includes:
Reply STOP to unsubscribe
Clicking the link will launch Quote & Apply with the client's information pre-filled.
This service cannot be used for mass and or blast text messages. The API has a limiter to only accept a certain number of requests per time period.
Endpoint
POST /api/v1/text
Authentication
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Sample Request
{
"sender_npn": "1234567",
"first_name": "John",
"last_name": "Doe",
"phone_number": "8056600999",
"death_benefit": 1000000,
"gender": "Male",
"birthdate": "1990-05-11",
"state": "CA",
"health": 5,
"smoker": "Never",
"mode": 12,
"product_category": "10 Year Term"
}
Send an HTTPS POST request to the above route along with the request body in order to retrieve send a text message:
| Parameter | Description |
|---|---|
| sender_npn required number |
The national producer number of the agent the text will be from. The agent must exist in BOSS and either the NPN and API must belong to the same agent or you must have a connection to the agent. |
| first_name required string |
The prospect's first name. |
| last_name required string |
The prospect's last name. |
| phone_number required string |
The propsect's 10 digit phone number. (###) ###-#### |
| death_benefit required number |
Suggested amount is 1000000 and ranges from 50000 to 10000000. |
| gender required string |
Either Male or Female. |
| birthdate required date |
The prospect's birthdate in YYYY-MM-DD format. |
| state required string |
Two digit state abbreviation. |
| health required number |
1 - 5 (5 being the best). |
| smoker required string |
The prospect's smoking status. Can be either Never, Previously, or Currently. More information is below. |
| usages required array |
A list of smoker information. Leave empty or omit if smoker is Never. |
| mode required number |
How many times per year the insured will be paying. Must be 1, 2, 4, or 12. |
| product_category required string |
Accidental Death, 10 Year Term, 15 Year Return of Premium Term, 15 Year Term, 20 Year Return of Premium Term, 20 Year Term, 25 Year Return of Premium Term, 25 Year Term, 30 Year Return of Premium Term, 30 Year Term, To Age 95, To Age 100, To Age 120. |
Usages
See Above for Smoking Status Object Structure
| Parameter | Description |
|---|---|
category required string |
The item the user uses or has used. Must be Cigarettes, eCigarettes, Cigars, Pipe, Chew, or Cannabis |
frequency required string |
How frequently the user uses or has used. Must be 2, 12, 52, or 365 |
last_use_date string, optional |
The last use date of this item. Must be formatted as YYYY-MM-DD. This is required if smoker is Previously |
Response Format
If the request is successful, you will receive a 204 response.
Error Handling
If the request is not successful due to not having all required fields, you will receive an error message.
Webhooks
Authentication Key
Each webhook request contains the header X-BACKNINE-AUTHENTICATION with a consistent unique secret value you can use to secure your endpoint. This secret value is not your API key and will be unique per webhook (i.e. the value for Case webhooks will be different than Quote & Apply Application webhooks). Copy the Authentication Key from Developer Settings in BOSS. You can also confirm it on an inbound webhook request.
Cases and Quote & Apply Applications
Subscribing to our Case or Quote & Apply Application webhooks allows you to integrate Case and Quote & Apply application data with your systems. Once subscribed we'll send a webhook everytime one of your cases or Quote & Apply applications is created or updated.
Example Use Cases
Acme Insurance Agency wants to track their Quote & Apply applications so their call center can call prospects when the prospect provides their contact information. Using the webhook, Acme receives the Quote & Apply application data and stores it in their database. Once they receive the data with an insured's phone and email, a call center agent is notified and calls the prospect.
A CRM uses BackNine's webhooks to display up to date Case and Quote & Apply data within their CRM for their users.
John Doe Insurance Services wants their Quote & Apply prospects to be added to their email marketing campaigns. They connect this hook to their email marketing program so the prospect receives emails from John Doe Insurance Services.
Subscribe via Back9
On Developer Settings in BOSS, find the Case or Quote & Apply (eApp) webhook. Paste in your desired endpoint for us to post data to. This option is completely free for unlimited amount of data transfers but takes some development work on your end to complete the integration.
Subscribe via Zapier
Click this link to view our suite of Zaps. Zapier is free up to a certain amount of tasks performed, but after that threshold is passed each zap accrues charges on your account.
Example Data Structure
An example request to demonstrate the data structure is below. You can also send a GET request to one of the following URL's with X-BACKNINE-AUTHENTICATION as a header with a value of your API key to receive a response on an example Case or Quote & Apply Application.
Example case data struture: https://app.back9ins.com/api/v1/webhook_zapier_test_case
Example Quote & Apply Application (aka ElectronicApplication or eApp) data structure:https://app.back9ins.com/api/v1/webhook_zapier_test_electronic_application
Example Quote & Apply application response with nested Case is shown in the example.
[
{
"id":116662,
"uuid":"ae9f4263-95e6-4fab-ab65-7a641bef0e81",
"approved_domain": {
"id": 1,
"disable_client_emails": false
},
"step":14,
"named_step": "Docusign - Final Step",
"face_amount":1000000.0,
"premium":44.94,
"target_premium":null,
"mode":12,
"pay_duration":null,
"state":"CA",
"url":"https://quoteandapply.io/",
"apply_link": "https://quoteandapply.io/?strife_id=116662&strife_uuid=a36d5544-5013-43cf-b3e9-58f59dc92fd3",
"metadata": null,
"first_name":"John",
"last_name":"Doe",
"birthdate":"1987-01-02",
"gender":"Male",
"zip":null,
"intro_last_sent_at": null,
"send_client_intro_message": true,
"cash_value":1.0,
"age_value":120,
"ltc_rider_percentage":4,
"other_pending_insurance_amount_to_be_accepted":null,
"exam_date":"2020-12-14T07:45:00.000-08:00",
"order_number":"TestModeConfirmation",
"smoker":"Currently",
"health":4,
"height":69,
"weight":160,
"validated_rating":"Preferred NT",
"referrer_id":null,
"referrer_type":null,
"product_category":"20 Year Term",
"solve":"term",
"crediting_rate":"Default Rate",
"ltc_rider":false,
"income_solve":"No",
"income_start_age":65,
"income_end_age":90,
"lapse_protection_to_age":100,
"part2":null,
"test":false,
"tia":true,
"eft":true,
"exam_skip_reason":null,
"status":"Completed",
"call_center":true,
"agent_phone":"(805) 413-7562",
"agent":{
"id":1179,
"name":"Reid Tattersall",
"avatar":"production/agents/YBOQLRNVVGSIUTAT",
"email":"[email protected]",
"type":"Agent",
"phone_work":"(805) 413-7562",
"npn":10790698
},
"product":{
"id":105,
"name":"OPTerm 20",
"carrier":{
"id":28,
"name":"Banner",
"avatar":"https://d1usw6tyldpxhi.cloudfront.net/591900ff-cece-5ce0-0d1c-4f76313d2f3d.png",
"scaled_avatar":"https://d1usw6tyldpxhi.cloudfront.net/MZJJPPDV.jpg"
}
},
"carrier":{
"id":28,
"name":"Banner",
"avatar":"https://d1usw6tyldpxhi.cloudfront.net/591900ff-cece-5ce0-0d1c-4f76313d2f3d.png",
"scaled_avatar":"https://d1usw6tyldpxhi.cloudfront.net/MZJJPPDV.jpg"
},
"case":{
"id": 100000,
"policy_number": "XYZ789",
"elimination_period": null,
"inflation": null,
"benefit_period": null,
"benefit_amount": null,
"benefit_mode": null,
"premium": {
"premium": 1000.0,
"total": 12000.0
},
"tax_type": null,
"surrender_charge_expiration": 0,
"tracking_number": null,
"contract_parties": [
{
"id": 100001,
"type": "individual",
"name": "Jane Smith",
"avatar_url": null,
"birthdate": "1990-01-01",
"roles": [
{
"id": 1000,
"role": "Insured",
"rating_applied": null,
"approval_rating": null,
"underwriting_rationale": {},
"occupation_class": null,
"beneficiary_qualifier": null,
"beneficiary_amount": null,
"relationship": null
},
{
"id": 1001,
"role": "Owner",
"rating_applied": null,
"approval_rating": null,
"underwriting_rationale": {},
"occupation_class": null,
"beneficiary_qualifier": null,
"beneficiary_amount": null,
"relationship": null
}
],
"email": null,
"primary_phone": null,
"address": {
"id": 200001,
"street_address": null,
"zip": null,
"city": null,
"state": null,
"country": null,
"address_type": "home",
"primary": false,
"start_date": null,
"end_date": null
},
"gender": null
}
],
"status": "Entered",
"face_amount": 1000000.0,
"mode": 12,
"outstanding": 3,
"commission": 55.0,
"case_manager": {
"id": 100002,
"name": "Sarah Wilson",
"avatar_url": null,
"email": "[email protected]",
"type": "Agent",
"phone_work": "(555) 555-0001",
"npn": null,
"schedule": {
"annuity": "Street",
"disability": "Street",
"life": "Street",
"linked_benefit": "Street",
"ltc": "Street",
"variable_life": "Street"
}
},
"days_pending": 203,
"chronic_illness_rider": null,
"ltc_rider": false,
"state": "VA",
"exchange_amount": 0.0,
"lump_sum": 0.0,
"tracking_number_type": "USPS",
"tracking_number_link": "https://tools.usps.com/go/TrackConfirmAction?tLabels=",
"target_premium": 0.0,
"pua_premium": 0.0,
"timeline": [
{
"date": "2024-01-31",
"key": "app_sign_date",
"description": "Application Signed"
},
{
"date": "2024-01-31",
"key": "submitted_date",
"description": "Submitted to Carrier"
},
{
"date": "2024-01-31",
"key": "approved_date",
"description": "Approved"
},
{
"date": "2024-01-31",
"key": "issue_date",
"description": "Issued"
},
{
"date": "2024-01-31",
"key": "policy_date",
"description": "Policy Date"
},
{
"date": "2024-08-21",
"key": "created_at",
"description": "Received by BackNine"
},
{
"date": null,
"key": "sent_to_agent",
"description": "Policy Sent to Agent"
},
{
"date": null,
"key": "delivery_requirements_due_date",
"description": "Delivery Requirements Due Date"
},
{
"date": null,
"key": "inforce_date",
"description": "Inforce"
},
{
"date": null,
"key": "conversion_expiry",
"description": "Conversion Expiration"
},
{
"date": null,
"key": "closed_date",
"description": "Closed"
},
{
"date": null,
"key": "gathering_medical_information_date",
"description": "Gathering Medical Information"
},
{
"date": null,
"key": "all_offers_received",
"description": "All Offers Received"
}
],
"carrier_e_delivery": false,
"cash_received": null,
"applied_mode": 12,
"applied_premium": {
"premium": 1000.0,
"total": 12000.0
},
"case_concierge": {
"id": 100003,
"name": "Michael Brown",
"avatar_url": null,
"email": "[email protected]",
"type": "Agent",
"phone_work": "(555) 555-0002",
"npn": null,
"schedule": {
"annuity": "Street",
"disability": "Street",
"life": "Street",
"linked_benefit": "Street",
"ltc": "Street",
"variable_life": "Street"
}
},
"tia": null,
"informals": null,
"assign_options": [
{
"id": 100004,
"name": "Example Insurance Co",
"type": "Carrier"
},
{
"id": 100005,
"name": "Jane Smith",
"type": "ContractParty"
},
{
"id": 100006,
"name": "Robert Johnson",
"type": "Agent"
},
{
"id": 100007,
"name": "Michael Brown",
"type": "Agent"
},
{
"id": 100008,
"name": "Case Manager Team",
"type": "Agency"
},
{
"id": 100009,
"name": "Example Life New Application",
"type": "Personnel"
},
{
"id": 100010,
"name": "Example Insurance Services, Inc.",
"type": "Agency"
}
],
"requirements": [
{
"id": 200,
"type": "PhysicianStatement",
"status": "Outstanding",
"description": "\nDoctor: Dr. Jane Wilson\nOrder Number: 987654321\n\nIf you need to speak with someone, please call your case concierge Michael Brown at (555) 555-0002.",
"email": 0,
"order": {
"id": 201
},
"completed": false,
"dates": {
"completed_at": null,
"updated_at": "2024-08-21T09:34:00.000-07:00",
"created_at": "2024-08-21T09:34:00.000-07:00",
"follow_up_date": "2024-08-26T09:34:00.000-07:00"
},
"last_note": null
},
{
"id": 202,
"type": "Task",
"status": "Outstanding",
"description": "Do the needful",
"email": null,
"completed": false,
"hidden": false,
"dates": {
"completed_at": null,
"updated_at": "2024-08-21T09:34:00.000-07:00",
"created_at": "2024-08-21T09:34:00.000-07:00",
"follow_up_date": "2024-08-26T09:34:00.000-07:00"
},
"last_note": null
},
{
"id": 203,
"type": "Task",
"status": "Outstanding",
"description": "Confirm exam status.",
"email": null,
"completed": false,
"hidden": false,
"dates": {
"completed_at": null,
"updated_at": "2024-08-21T09:34:00.000-07:00",
"created_at": "2024-08-21T09:34:00.000-07:00",
"follow_up_date": "2024-08-22T09:34:00.000-07:00"
},
"last_note": null
}
],
"save_age": false,
"electronic_application": null,
"same_manager_for_party": true,
"message_client": true,
"updated_at": "2024-08-21T09:34:00.000-07:00",
"convertible": false,
"conversion": false,
"show_snapshot": true,
"product": {
"id": 300,
"name": "Example Product",
"line": "life",
"ltc_rider": true,
"chronic_illness_rider": false,
"type": "whole_life",
"require_target_premium": false,
"require_conversion_expiration_date": false
},
"address": {
"id": 400,
"name": ""
},
"appointment_cases": [
{
"id": 500,
"split_percent": 1.0,
"renewal_split": 1.0,
"estimated_agent_first_year_and_excess_commission": 6600.0,
"commissionable": true,
"advisor": {
"id": 600,
"name": "Robert Johnson",
"avatar_url": null,
"type": "Agent",
"email": "[email protected]",
"phone_work": "(555) 555-0003",
"title": "Vice President",
"npn": 10000001
},
"appointment": {
"id": 700,
"name": "A1B2C3D4",
"carrier_agreement_type": "Individual",
"assignment": {
"id": 700,
"name": "A1B2C3D4"
}
},
"marketing_manager": {
"id": 800,
"name": "Unassigned",
"scheduling_links": null,
"email": "[email protected]",
"primary_marketing_manager_name": "Example Insurance Services, Inc.",
"phone_work": "(555) 555-0004",
"cobrowse_license": null
}
}
],
"room": [
{
"id": 900,
"name": "Example Insurance Services, Inc.",
"type": "Agency",
"link": "agencies",
"avatar_url": null,
"case_access_id": 1000,
"case_manager": false,
"case_concierge": false,
"email": false,
"agent": false,
"phone": "(555) 555-0005",
"advisor_email": "[email protected]",
"advisor_access": true,
"carrier_email": false,
"carrier_access": false,
"can_be_case_manager": true,
"disabled": true,
"personnel_department": null
},
{
"id": 901,
"name": "Michael Brown",
"type": "Agent",
"link": "agents",
"avatar_url": null,
"case_access_id": 1001,
"case_manager": true,
"case_concierge": true,
"email": true,
"agent": false,
"phone": "(555) 555-0002",
"advisor_email": "[email protected]",
"advisor_access": true,
"carrier_email": true,
"carrier_access": true,
"can_be_case_manager": true,
"disabled": true,
"personnel_department": null
},
{
"id": 902,
"name": "Case Manager Team",
"type": "Agency",
"link": "agencies",
"avatar_url": null,
"case_access_id": 1002,
"case_manager": false,
"case_concierge": false,
"email": true,
"agent": false,
"phone": null,
"advisor_email": "[email protected]",
"advisor_access": true,
"carrier_email": true,
"carrier_access": true,
"can_be_case_manager": false,
"disabled": true,
"personnel_department": null
},
{
"id": 903,
"name": "Example Life New Application",
"type": "Personnel",
"link": "personnels",
"avatar_url": "https://example.com/avatar.png",
"case_access_id": 1003,
"case_manager": false,
"case_concierge": false,
"email": false,
"agent": false,
"phone": null,
"advisor_email": "[email protected]",
"advisor_access": false,
"carrier_email": true,
"carrier_access": true,
"can_be_case_manager": false,
"disabled": true,
"personnel_department": null
},
{
"id": 904,
"name": "Robert Johnson",
"type": "Agent",
"link": "agents",
"avatar_url": null,
"case_access_id": 1004,
"case_manager": false,
"case_concierge": false,
"email": true,
"agent": true,
"phone": "(555) 555-0003",
"advisor_email": "[email protected]",
"advisor_access": true,
"carrier_email": false,
"carrier_access": false,
"can_be_case_manager": false,
"disabled": false,
"personnel_department": null
}
],
"documents": [],
"notes": [],
"addresses": [
{
"text": "Robert Johnson's Home: 456, City, CA 54321",
"value": 2000
},
{
"text": "Example Insurance Services, Inc.'s Business: 789 Business Ave, Suite 100, Business City, CA 98765",
"value": 2001
}
],
"quotes": [],
"quick_quotes": [],
"conversion_eapps": [],
"carrier": {
"id": 1100,
"name": "Example Insurance Co",
"avatar_url": "https://example.com/carrier-logo.png",
"instant_aps": true
},
"ga_code": null
},
"individuals":[
{
"id":88669,
"first_name":"John",
"middle_name":null,
"last_name":"Doe",
"gender":"Male",
"birthdate":"1987-01-02",
"name":"John Doe",
"phone_mobile":"(805) 660-0916",
"email":"[email protected]",
"intro_last_sent_at": null,
"send_client_intro_message": true,
"ssn":"121-65-5465",
"income":150000.0,
"assets":1500000.0,
"liabilities":500000.0,
"bankruptcy":false,
"bankruptcy_type":null,
"bankruptcy_discharge_date":null,
"us_citizen":true,
"birth_location":"CA",
"visa_type":null,
"us_entry_date":null,
"country_of_citizenship":"United States",
"tobacco":null,
"humanized":false,
"drivers_license":{
"id":45924,
"state":"CA",
"number":"D3456789",
"no_drivers_license_reason":null
},
"occupation":{
"id":40727,
"occupation":"Developer",
"start_date":"2008-12-09",
"employee_id":88669,
"employee_type":"Individual",
"employer":{
"id":28139,
"name":"BackNine",
"irrevocable":null,
"business_address":{
"id":515333,
"street_address":"310 N Westlake Blvd",
"zip":"91362",
"city":"Thousand Oaks",
"state":"CA",
"country":"United States",
"address_type":"business",
"raw_address":"310 N Westlake Blvd, Thousand Oaks, CA 91362",
"start_date":null
}
}
},
"addresses":[
{
"id":515332,
"street_address":"123 Paradise Cove Rd",
"zip":"90265",
"city":"Malibu",
"state":"CA",
"country":null,
"address_type":"home",
"raw_address":"123 Paradise Cove Rd, Malibu, CA 90265",
"start_date":"2017-12-09"
},
{
"id":515337,
"street_address":"3101 Townsgate Rd",
"zip":"91361",
"city":"Thousand Oaks",
"state":"CA",
"country":null,
"address_type":"exam",
"raw_address":"3101 Townsgate Rd, Thousand Oaks, CA 91361",
"start_date":null
}
],
"application_roles":[
{
"id":114131,
"role":"Insured",
"beneficiary_amount":null,
"beneficiary_qualifier":null,
"relationship":null,
"electronic_application_id":116662
},
{
"id":114132,
"role":"Owner",
"beneficiary_amount":null,
"beneficiary_qualifier":null,
"relationship":null,
"electronic_application_id":116662
}
],
"efts":[
{
"id":42603,
"account_type":"Checking",
"routing_number":"122105278",
"account_number":"0000000016"
}
],
"medical_sources":[
{
"id":308,
"name":"Starfleet Medical",
"health_system":null,
"physician":null,
"status":"Connected",
"created_at":"2020-12-09T01:14:30.000-08:00"
}
],
"signers":[
{
"id":106795,
"role":"insured1/owner1",
"electronic_application_id":116662
}
]
},
{
"id":88670,
"first_name":"Jane",
"middle_name":null,
"last_name":"Doe",
"gender":"Female",
"birthdate":"1990-01-02",
"name":"Jane Doe",
"phone_mobile":"(805) 660-0917",
"email":"[email protected]",
"intro_last_sent_at": null,
"send_client_intro_message": null,
"ssn":"645-54-6546",
"income":0.0,
"assets":0.0,
"liabilities":0.0,
"bankruptcy":null,
"bankruptcy_type":null,
"bankruptcy_discharge_date":null,
"us_citizen":null,
"birth_location":null,
"visa_type":null,
"us_entry_date":null,
"country_of_citizenship":null,
"tobacco":null,
"humanized":false,
"drivers_license":null,
"occupation":null,
"addresses":[
{
"id":515334,
"street_address":"123 Paradise Cove Rd",
"zip":"90265",
"city":"Malibu",
"state":"CA",
"country":"United States",
"address_type":"home",
"raw_address":"123 Paradise Cove Rd, Malibu, CA 90265",
"start_date":null
}
],
"application_roles":[
{
"id":114133,
"role":"Primary Beneficiary",
"beneficiary_amount":1.0,
"beneficiary_qualifier":"Percent",
"relationship":"Wife",
"electronic_application_id":116662
}
],
"efts":[
],
"medical_sources":[
],
"signers":[
]
}
],
"entities":[
{
"id":28140,
"name":"BackNine",
"tin":"65-4564445",
"email":"[email protected]",
"phone_work":"(805) 660-0918",
"formation_date":null,
"irrevocable":null,
"type":"Entity",
"address":{
"id":515335,
"street_address":"310 N Westlake Blvd",
"zip":"91362",
"city":"Thousand Oaks",
"state":"CA",
"country":"United States",
"address_type":"business",
"raw_address":"310 N Westlake Blvd, Thousand Oaks, CA 91362",
"start_date":null
},
"application_roles":[
{
"id":114134,
"role":"Contingent Beneficiary",
"beneficiary_amount":0.5,
"beneficiary_qualifier":"Percent",
"relationship":"Employer",
"electronic_application_id":116662
}
],
"responsible_parties":[
]
},
{
"id":28141,
"name":"Family Trust",
"tin":"54-5681548",
"email":"[email protected]",
"phone_work":"(805) 660-1920",
"formation_date":"1999-01-02",
"irrevocable":false,
"type":"Entity",
"address":{
"id":515336,
"street_address":"495 N Ventu Park Rd",
"zip":"91320",
"city":"Thousand Oaks",
"state":"CA",
"country":"United States",
"address_type":"business",
"raw_address":"495 N Ventu Park Rd, Thousand Oaks, CA 91320",
"start_date":null
},
"application_roles":[
{
"id":114135,
"role":"Contingent Beneficiary",
"beneficiary_amount":0.5,
"beneficiary_qualifier":"Percent",
"relationship":"Trust",
"electronic_application_id":116662
}
],
"responsible_parties":[
]
}
],
"electronic_application_cases":[
{
"id":6220,
"status":"Active",
"policy_number":"MA456789",
"face_amount":500000.0,
"policy_date":"2010-01-02",
"business_insurance":false,
"replacement_reason":null,
"carrier":{
"id":48,
"name":"MassMutual",
"avatar":"https://d1usw6tyldpxhi.cloudfront.net/93bc8c34-adc7-4fa6-799e-4f7dd8844e2b.png",
"scaled_avatar":"https://d1usw6tyldpxhi.cloudfront.net/"
}
}
],
"smoking_statuses":[
{
"id":33747,
"category":"Cigars",
"frequency":2,
"last_use_date":null,
"status":"Currently"
}
]
}
]
Example Case response with a nested Quote & Apply application (electronic_application) is shown in the example.
[
{
"id": 100000,
"policy_number": "XYZ789",
"elimination_period": null,
"inflation": null,
"benefit_period": null,
"benefit_amount": null,
"benefit_mode": null,
"premium": {
"premium": 1000.0,
"total": 12000.0
},
"tax_type": null,
"surrender_charge_expiration": 0,
"tracking_number": null,
"contract_parties": [
{
"id": 100001,
"type": "individual",
"name": "Jane Smith",
"avatar_url": null,
"birthdate": "1990-01-01",
"roles": [
{
"id": 1000,
"role": "Insured",
"rating_applied": null,
"approval_rating": null,
"underwriting_rationale": {},
"occupation_class": null,
"beneficiary_qualifier": null,
"beneficiary_amount": null,
"relationship": null
},
{
"id": 1001,
"role": "Owner",
"rating_applied": null,
"approval_rating": null,
"underwriting_rationale": {},
"occupation_class": null,
"beneficiary_qualifier": null,
"beneficiary_amount": null,
"relationship": null
}
],
"email": null,
"primary_phone": null,
"address": {
"id": 200001,
"street_address": null,
"zip": null,
"city": null,
"state": null,
"country": null,
"address_type": "home",
"primary": false,
"start_date": null,
"end_date": null
},
"gender": null
}
],
"status": "Entered",
"face_amount": 1000000.0,
"mode": 12,
"outstanding": 3,
"commission": 55.0,
"case_manager": {
"id": 100002,
"name": "Sarah Wilson",
"avatar_url": null,
"email": "[email protected]",
"type": "Agent",
"phone_work": "(555) 555-0001",
"npn": null,
"schedule": {
"annuity": "Street",
"disability": "Street",
"life": "Street",
"linked_benefit": "Street",
"ltc": "Street",
"variable_life": "Street"
}
},
"days_pending": 203,
"chronic_illness_rider": null,
"ltc_rider": false,
"state": "VA",
"exchange_amount": 0.0,
"lump_sum": 0.0,
"tracking_number_type": "USPS",
"tracking_number_link": "https://tools.usps.com/go/TrackConfirmAction?tLabels=",
"target_premium": 0.0,
"pua_premium": 0.0,
"timeline": [
{
"date": "2024-01-31",
"key": "app_sign_date",
"description": "Application Signed"
},
{
"date": "2024-01-31",
"key": "submitted_date",
"description": "Submitted to Carrier"
},
{
"date": "2024-01-31",
"key": "approved_date",
"description": "Approved"
},
{
"date": "2024-01-31",
"key": "issue_date",
"description": "Issued"
},
{
"date": "2024-01-31",
"key": "policy_date",
"description": "Policy Date"
},
{
"date": "2024-08-21",
"key": "created_at",
"description": "Received by BackNine"
},
{
"date": null,
"key": "sent_to_agent",
"description": "Policy Sent to Agent"
},
{
"date": null,
"key": "delivery_requirements_due_date",
"description": "Delivery Requirements Due Date"
},
{
"date": null,
"key": "inforce_date",
"description": "Inforce"
},
{
"date": null,
"key": "conversion_expiry",
"description": "Conversion Expiration"
},
{
"date": null,
"key": "closed_date",
"description": "Closed"
},
{
"date": null,
"key": "gathering_medical_information_date",
"description": "Gathering Medical Information"
},
{
"date": null,
"key": "all_offers_received",
"description": "All Offers Received"
}
],
"carrier_e_delivery": false,
"cash_received": null,
"applied_mode": 12,
"applied_premium": {
"premium": 1000.0,
"total": 12000.0
},
"case_concierge": {
"id": 100003,
"name": "Michael Brown",
"avatar_url": null,
"email": "[email protected]",
"type": "Agent",
"phone_work": "(555) 555-0002",
"npn": null,
"schedule": {
"annuity": "Street",
"disability": "Street",
"life": "Street",
"linked_benefit": "Street",
"ltc": "Street",
"variable_life": "Street"
}
},
"tia": null,
"informals": null,
"assign_options": [
{
"id": 100004,
"name": "Example Insurance Co",
"type": "Carrier"
},
{
"id": 100005,
"name": "Jane Smith",
"type": "ContractParty"
},
{
"id": 100006,
"name": "Robert Johnson",
"type": "Agent"
},
{
"id": 100007,
"name": "Michael Brown",
"type": "Agent"
},
{
"id": 100008,
"name": "Case Manager Team",
"type": "Agency"
},
{
"id": 100009,
"name": "Example Life New Application",
"type": "Personnel"
},
{
"id": 100010,
"name": "Example Insurance Services, Inc.",
"type": "Agency"
}
],
"requirements": [
{
"id": 200,
"type": "PhysicianStatement",
"status": "Outstanding",
"description": "\nDoctor: Dr. Jane Wilson\nOrder Number: 987654321\n\nIf you need to speak with someone, please call your case concierge Michael Brown at (555) 555-0002.",
"email": 0,
"order": {
"id": 201
},
"completed": false,
"dates": {
"completed_at": null,
"updated_at": "2024-08-21T09:34:00.000-07:00",
"created_at": "2024-08-21T09:34:00.000-07:00",
"follow_up_date": "2024-08-26T09:34:00.000-07:00"
},
"last_note": null
},
{
"id": 202,
"type": "Task",
"status": "Outstanding",
"description": "Do the needful",
"email": null,
"completed": false,
"hidden": false,
"dates": {
"completed_at": null,
"updated_at": "2024-08-21T09:34:00.000-07:00",
"created_at": "2024-08-21T09:34:00.000-07:00",
"follow_up_date": "2024-08-26T09:34:00.000-07:00"
},
"last_note": null
},
{
"id": 203,
"type": "Task",
"status": "Outstanding",
"description": "Confirm exam status.",
"email": null,
"completed": false,
"hidden": false,
"dates": {
"completed_at": null,
"updated_at": "2024-08-21T09:34:00.000-07:00",
"created_at": "2024-08-21T09:34:00.000-07:00",
"follow_up_date": "2024-08-22T09:34:00.000-07:00"
},
"last_note": null
}
],
"save_age": false,
"electronic_application": null,
"same_manager_for_party": true,
"message_client": true,
"updated_at": "2024-08-21T09:34:00.000-07:00",
"convertible": false,
"conversion": false,
"show_snapshot": true,
"product": {
"id": 300,
"name": "Example Product",
"line": "life",
"ltc_rider": true,
"chronic_illness_rider": false,
"type": "whole_life",
"require_target_premium": false,
"require_conversion_expiration_date": false
},
"address": {
"id": 400,
"name": ""
},
"appointment_cases": [
{
"id": 500,
"split_percent": 1.0,
"renewal_split": 1.0,
"estimated_agent_first_year_and_excess_commission": 6600.0,
"commissionable": true,
"advisor": {
"id": 600,
"name": "Robert Johnson",
"avatar_url": null,
"type": "Agent",
"email": "[email protected]",
"phone_work": "(555) 555-0003",
"title": "Vice President",
"npn": 10000001
},
"appointment": {
"id": 700,
"name": "A1B2C3D4",
"carrier_agreement_type": "Individual",
"assignment": {
"id": 700,
"name": "A1B2C3D4"
}
},
"marketing_manager": {
"id": 800,
"name": "Unassigned",
"scheduling_links": null,
"email": "[email protected]",
"primary_marketing_manager_name": "Example Insurance Services, Inc.",
"phone_work": "(555) 555-0004",
"cobrowse_license": null
}
}
],
"room": [
{
"id": 900,
"name": "Example Insurance Services, Inc.",
"type": "Agency",
"link": "agencies",
"avatar_url": null,
"case_access_id": 1000,
"case_manager": false,
"case_concierge": false,
"email": false,
"agent": false,
"phone": "(555) 555-0005",
"advisor_email": "[email protected]",
"advisor_access": true,
"carrier_email": false,
"carrier_access": false,
"can_be_case_manager": true,
"disabled": true,
"personnel_department": null
},
{
"id": 901,
"name": "Michael Brown",
"type": "Agent",
"link": "agents",
"avatar_url": null,
"case_access_id": 1001,
"case_manager": true,
"case_concierge": true,
"email": true,
"agent": false,
"phone": "(555) 555-0002",
"advisor_email": "[email protected]",
"advisor_access": true,
"carrier_email": true,
"carrier_access": true,
"can_be_case_manager": true,
"disabled": true,
"personnel_department": null
},
{
"id": 902,
"name": "Case Manager Team",
"type": "Agency",
"link": "agencies",
"avatar_url": null,
"case_access_id": 1002,
"case_manager": false,
"case_concierge": false,
"email": true,
"agent": false,
"phone": null,
"advisor_email": "[email protected]",
"advisor_access": true,
"carrier_email": true,
"carrier_access": true,
"can_be_case_manager": false,
"disabled": true,
"personnel_department": null
},
{
"id": 903,
"name": "Example Life New Application",
"type": "Personnel",
"link": "personnels",
"avatar_url": "https://example.com/avatar.png",
"case_access_id": 1003,
"case_manager": false,
"case_concierge": false,
"email": false,
"agent": false,
"phone": null,
"advisor_email": "[email protected]",
"advisor_access": false,
"carrier_email": true,
"carrier_access": true,
"can_be_case_manager": false,
"disabled": true,
"personnel_department": null
},
{
"id": 904,
"name": "Robert Johnson",
"type": "Agent",
"link": "agents",
"avatar_url": null,
"case_access_id": 1004,
"case_manager": false,
"case_concierge": false,
"email": true,
"agent": true,
"phone": "(555) 555-0003",
"advisor_email": "[email protected]",
"advisor_access": true,
"carrier_email": false,
"carrier_access": false,
"can_be_case_manager": false,
"disabled": false,
"personnel_department": null
}
],
"documents": [],
"notes": [],
"addresses": [
{
"text": "Robert Johnson's Home: 456, City, CA 54321",
"value": 2000
},
{
"text": "Example Insurance Services, Inc.'s Business: 789 Business Ave, Suite 100, Business City, CA 98765",
"value": 2001
}
],
"quotes": [],
"quick_quotes": [],
"conversion_eapps": [],
"carrier": {
"id": 1100,
"name": "Example Insurance Co",
"avatar_url": "https://example.com/carrier-logo.png",
"instant_aps": true
},
"ga_code": null
}
]
Quote & Apply Options Lists
Below is a table of options lists for an electronic_application so you know what values to expect.
| Parameter | Options |
|---|---|
smoker string |
Never, Previously, Currently |
status string |
Quote, Lead, Sent, Completed |
named_step string |
Quote - 10% Complete, Name and Contact Information - 20% Complete, Address - 25% Complete, Employer Information - 30% Complete, Ownership - 35% Complete, Primary Beneficiary - 45% Complete, Contingent Beneficiary - 50% Complete, Financial and SSN - 60% Complete, Existing Insurance - 65% Complete, Physician Information - 70% Complete, Underwriting Questions - 80% Complete, Payment Information - 90% Complete, Schedule Exam - 95% Complete, Signing Preference - Final Step, Docusign - Final Step, Click 'Continue Carrier eApp' to finish on #{carrier.name}'s Website |
validated_rating string |
Super Preferred, Preferred NT, Preferred Tobacco, Standard Plus, Standard NT, Standard Tobacco, Level, Level Tobacco, Graded |
Cases Options Lists
| Parameter | Options |
|---|---|
status string |
Entered, Submitted, Approved, Issued, Awaiting Reissued Policy, Awaiting Reconsideration, Awaiting Delivery Requirements, Received Delivery Requirements, Awaiting Reconsideration, Active - Pending Requirements, Active, Withdrawn, Postponed, Not Taken, Declined, Lapsed, Grace Period |
Set up
Please visit Developer Settings in BOSS to subscribe to our hooks. The subscription takes an endpoint URL that will be POSTed to and will contain the following headers.
| Key | Description |
|---|---|
Content-type string |
application/json |
X-BACKNINE-AUTHENTICATION string |
That webhook's Authentication Key (not your API key) |
Download Illustration
Download the insurance carrier's illustration using the quote's ID. The key illustration_available is returned on each quote to indicate if an illustration from the carrier is available.
Endpoint
GET /api/v1/quotes/:id/illustration
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
id string |
The quote's id which is in the format of UUID as shown at Response Example |
Request Example
get "/api/v1/quotes/:id/illustration", headers: { "X-BACKNINE-AUTHENTICATION" => your-api-key }
Response
A successful response streams the illustration PDF (Content-Type: application/pdf). The response also includes an X-BackNine-Document-Uid header naming the stored illustration document. The uid identifies the document only; downloading it still requires an authenticated session or a signed download link.
Response Statuses
| Status | Description |
|---|---|
| 200 | Successful request |
| 401 | Unauthorized request |
| 404 | Not found |
| 422 | Unprocessable |
| 500 | Unexpected/Internal Error |
Example Response Errors
"errors" => ["Cannot find quote"]
"errors" => ["An illustration cannot be generated for this product"]
"errors" => ["An illustration could not be generated"]
"errors" => ["API key not provided"]
"errors" => ["Invalid API key"]
Download Documents
Endpoint
GET /api/v1/d/:uid
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
uid string |
The document's uid |
Request Example
get "/api/v1/d/:uid", headers: { "X-BACKNINE-AUTHENTICATION" => your-api-key }
Response Statuses
| Status | Description |
|---|---|
| 200 | Successful request |
| 401 | Unauthorized request |
| 404 | Not found |
| 500 | Unexpected/Internal Error |
Example Response Errors
"errors" => ["API key not provided"]
"errors" => ["Invalid API key"]
"errors" => ["Unauthorized"]
Get Agencies
Endpoint
GET /api/v1/agencies
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
page integer |
Page number. See Pagination for defaults and normalization. |
count integer |
Results per page. See Pagination for the default and maximum. |
Filter Parameters
| Parameter | Description |
|---|---|
shared_with_type string |
Filter to agencies shared with a specific record. Must be used with shared_with_id. Values: Agent, Agency |
shared_with_id number |
ID of the Agent or Agency to filter by (use with shared_with_type) |
name string |
Partial match on agency name (case-insensitive) |
email string |
Partial match on agency email (case-insensitive) |
npn string |
Partial match on NPN (National Producer Number) |
ytd_inforce[min] number |
Minimum YTD inforce production (from production_report) |
ytd_inforce[max] number |
Maximum YTD inforce production (from production_report) |
phone_work string |
Match on work phone (digits matched in order) |
any_phone string |
Match on any phone number (work, mobile, etc.) |
state string |
Filter by primary address state (two-letter abbreviation) |
date[last_submit][start] date |
Last submit date range start (YYYY-MM-DD) |
date[last_submit][finish] date |
Last submit date range end (YYYY-MM-DD) |
date[created_at][start] date |
Created-at date range start (YYYY-MM-DD) |
date[created_at][finish] date |
Created-at date range end (YYYY-MM-DD) |
Sorting Parameters
Pass sort field and direction as sorting[field]=asc or sorting[field]=desc. Supported fields:
| Field | Description |
|---|---|
ytd_inforce |
YTD inforce production |
pending |
Pending production |
created_at |
Created at timestamp |
last_submit |
Last submit date |
Example: ?sorting[created_at]=desc
Response
The response includes a meta object with total, count, page, and stats.
Response Example
{
"agencies": [
{
"connection_type": "Agency",
"loginable": {
"id": 42,
"name": "Example Insurance Agency",
"email": "[email protected]",
"phone": "(555) 987-6543",
"created_at": "2024-02-01T09:00:00.000-08:00",
"stats": {
"ytd": 10,
"pending": 3,
"last_submit": "2024-07-15"
},
"marketing_manager": {
"id": 1,
"name": "Example Marketing Manager"
},
"state": "VA"
}
}
],
"meta": {
"total": 1,
"count": 25,
"page": 1,
"stats": {
"new_advisors": 0,
"attrition": 0,
"growth": 0.0
}
}
}
Get Agents
Endpoint
GET /api/v1/agents
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
page integer |
Page number. See Pagination for defaults and normalization. |
count integer |
Results per page. See Pagination for the default and maximum. |
Filter Parameters
| Parameter | Description |
|---|---|
shared_with_type string |
Filter to agents shared with a specific record. Must be used with shared_with_id. Values: Agent, Agency |
shared_with_id number |
ID of the Agent or Agency to filter by (use with shared_with_type) |
name string |
Partial match on agent name (case-insensitive) |
email string |
Partial match on agent email (case-insensitive) |
npn string |
Partial match on NPN (National Producer Number) |
has_crd_number boolean |
Filter by presence of CRD number: true or false (agents only) |
backnine_pay boolean |
Filter by BackNine Pay status: true or false |
ytd_inforce[min] number |
Minimum YTD inforce production (from production_report) |
ytd_inforce[max] number |
Maximum YTD inforce production (from production_report) |
phone_work string |
Match on work phone (digits matched in order) |
any_phone string |
Match on any phone number (work, mobile, etc.) |
state string |
Filter by primary address state (two-letter abbreviation) |
date[last_submit][start] date |
Last submit date range start (YYYY-MM-DD) |
date[last_submit][finish] date |
Last submit date range end (YYYY-MM-DD) |
date[created_at][start] date |
Created-at date range start (YYYY-MM-DD) |
date[created_at][finish] date |
Created-at date range end (YYYY-MM-DD) |
Sorting Parameters
Pass sort field and direction as sorting[field]=asc or sorting[field]=desc. Supported fields:
| Field | Description |
|---|---|
ytd_inforce |
YTD inforce production |
pending |
Pending production |
created_at |
Created at timestamp |
last_submit |
Last submit date |
Example: ?sorting[created_at]=desc&sorting[last_submit]=asc
Response
The response includes a meta object with total, count, page, and stats.
Response Example
{
"agents": [
{
"connection_type": "Agent",
"loginable": {
"id": 1179,
"name": "Jane Smith",
"email": "[email protected]",
"phone": "(555) 123-4567",
"created_at": "2024-01-15T10:00:00.000-08:00",
"stats": {
"ytd": 5,
"pending": 2,
"last_submit": "2024-08-01"
},
"marketing_manager": {
"id": 1,
"name": "Example Marketing Manager"
},
"state": "CA"
}
}
],
"meta": {
"total": 1,
"count": 25,
"page": 1,
"stats": {
"new_advisors": 0,
"attrition": 0,
"growth": 0.0
}
}
}
Get Appointment
Endpoint
GET /api/v1/appointments/:id
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
id number |
The appointment's id |
Response Example
{
"appointment": {
"agents": [],
"annualized": false,
"app_sign_date": "2024-05-15",
"assignment": null,
"carrier": {
"avatar_url": null,
"id": 28,
"name": "Example Carrier",
"phone": {
"annuity": {},
"disability": {},
"life": {},
"ltc": {}
},
"products": []
},
"carrier_agreement_type": "Individual",
"code": false,
"commissionable": true,
"comp_builders": {
"id": 1,
"name": "Street",
"options": [
{
"id": 1,
"text": "Street"
}
]
},
"created_at": "2024-05-15T14:30:00.000-07:00",
"days_pending": null,
"description": null,
"documents": [],
"effective_date": "2024-06-01",
"fee_based_products": false,
"id": 500,
"insured_name": "Isaac Newton",
"lines_of_authority": [
"Life"
],
"ltc_rider": false,
"name": "W2Q56789",
"notes": [],
"ownable": {
"id": 1179,
"name": "Jane Smith"
},
"product_id": 108,
"room": [
{
"advisor_access": true,
"id": 1001,
"name": "Jane Smith",
"owner": true
}
],
"states": [
"VA"
],
"status": "Entered",
"submitted": true,
"terminated_date": null,
"timeline": [
{
"date": "2024-05-15",
"description": "Created",
"key": "created_at"
},
{
"date": "2024-05-15",
"description": "First App Signature Date",
"key": "app_sign_date"
},
{
"date": "2024-06-01",
"description": "Effective",
"key": "effective_date"
}
],
"updated_at": "2024-05-15T14:30:00.000-07:00"
}
}
Get Appointments
Endpoint
GET /api/v1/appointments
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
page integer |
Page number. See Pagination for defaults and normalization. |
count integer |
Results per page. See Pagination for the default and maximum. |
Filter Parameters
| Parameter | Description |
|---|---|
advisor_id number |
Filter by advisor (owner) ID |
advisor_type string |
Advisor type; use with advisor_id. Values: Agent, Agency |
shared_with_type string |
Filter to appointments shared with a specific record. Must be used with shared_with_id. Values: Agent, Agency |
shared_with_id number |
ID of the Agent or Agency to filter by (use with shared_with_type) |
carrier_id number |
Filter by carrier ID (matches carrier name) |
filter[appointments.name] string |
Partial match on appointment name |
filter[lines_of_authority] string |
Partial match on lines of authority |
comp_builder_name string |
Partial match on comp builder name |
specific_status string |
Exact match on appointment status. Valid values: Entered, Pending, Just In Time, Active, Active - Pending Requirements, Terminated, Closed |
general_status string |
Filter by status group. Valid values: entered (Entered), pending (Pending, Active - Pending Requirements), active (Active, Just In Time), inactive (Closed, Terminated) |
date[appointments.created_at][start] date |
Created-at date range start (YYYY-MM-DD) |
date[appointments.created_at][finish] date |
Created-at date range end (YYYY-MM-DD) |
date[follow_up_date][start] date |
Follow-up date range start (YYYY-MM-DD) |
date[follow_up_date][finish] date |
Follow-up date range end (YYYY-MM-DD) |
Sorting Parameters
Pass sort field and direction as sorting[field]=asc or sorting[field]=desc. Supported fields:
| Field | Description |
|---|---|
appointments.name |
Appointment name |
carrier |
Carrier name |
lines_of_authority |
Lines of authority |
appointments.created_at |
Created at timestamp |
follow_up_date |
Follow-up date |
Example: ?sorting[appointments.created_at]=desc
Response
The response includes a meta object with total and page.
Response Example
{
"appointments": [
{
"carrier": {
"id": 28,
"name": "Example Carrier"
},
"carrier_agreement_type": "Individual",
"code": false,
"created_at": "2024-05-15T14:30:00.000-07:00",
"effective_date": "2024-06-01",
"follow_up_date": "2024-06-15",
"id": 500,
"last_note": null,
"lines_of_authority": [
"Life"
],
"name": "W2Q56789",
"ownable": {
"id": 1179,
"name": "Jane Smith"
},
"status": "Entered",
"terminated_date": null
}
],
"meta": {
"page": 1,
"total": 1
}
}
Get Approved Domain
Endpoint
GET /api/v1/approved_domains/:id
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
id number |
The approved domain's id |
Response
Returns a single approved domain. Returns 422 if the Quote & Apply website has been archived.
Response Example
{
"approved_domain": {
"appointment_assign_to": {
"id": 42,
"name": "Example Agency",
"type": "Agency"
},
"approved_domain_carriers": [],
"approved_domain_integrations": [],
"approved_domain_questions": [],
"archived_at": null,
"assign_to": {
"avatar_url": null,
"id": 1179,
"name": "Jane Smith",
"type": "Agent"
},
"assignable_type": "Agent",
"avatar_url": null,
"bill_to": {
"id": 42,
"name": "Example Agency",
"type": "Agency"
},
"carriers": [
{
"enabled": true,
"id": 28,
"name": "Example Carrier"
}
],
"default_mode": 12,
"disable_client_emails": false,
"domain": "https://apply.example.com",
"domain_key": "abc123",
"greeting": null,
"id": 10,
"ownable": {
"commission_lock": false,
"id": 1179,
"insurance_licenses": [],
"name": "Jane Smith",
"type": "Agent"
},
"pricing_plan_id": 1,
"product_types": [
"term",
"wholeLife"
],
"products": [],
"scheme": "https",
"start_page": "apply",
"url": "https://apply.example.com"
}
}
Get Approved Domains
Endpoint
GET /api/v1/approved_domains
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
page integer |
Page number. See Pagination for defaults and normalization. |
count integer |
Results per page. See Pagination for the default and maximum. |
Filter Parameters
| Parameter | Description |
|---|---|
archived boolean |
Include archived domains: true returns only archived; false or omit returns only active |
domain string |
Partial match on domain URL |
pricing_plan_id number |
Filter by pricing plan ID |
agent_id number |
Filter by agent ID (via electronic application setting) |
appointment_assignment_ownable_id number |
Filter by where commissions are assigned to (use with appointment_assignment_ownable_type) |
appointment_assignment_ownable_type string |
Type of the commission assignment target; use with appointment_assignment_ownable_id. Values: Agent, Agency |
start_page string |
Filter by start page |
Response
By default only active (non-archived) domains are returned.
Response Example
{
"approved_domains": [
{
"advisor": {
"id": 1179,
"name": "Jane Smith"
},
"appointment_assignment_ownable": {
"id": 42,
"name": "Example Agency",
"type": "agencies"
},
"archived": false,
"avatar_url": null,
"custom_domain_id": null,
"domain": "https://apply.example.com",
"domain_key": "abc123",
"id": 10,
"marketing_as": {
"id": 1,
"name": "Example Marketing",
"type": "agencies"
},
"scheme": "https",
"start_page": "apply"
}
],
"meta": {
"count": 25,
"page": 1,
"params": {},
"total": 1
}
}
Get Carriers
Endpoint
GET /api/v1/carriers
Headers
Content-Type: application/json
This endpoint does not require authentication. No API key is needed.
Request Parameters
| Parameter | Description |
|---|---|
eapp present |
When provided (e.g. ?eapp=true), returns only carriers that have Quote & Apply enabled products. Omit to return all carriers with active lines. |
Response
The response returns carriers grouped by product line. Each line key (annuity, disability, life, ltc) contains an array of carriers. A carrier may appear under multiple lines. Each carrier includes id, name, and avatar_url.
Response Example
{
"carriers": {
"annuity": [
{
"avatar_url": "https://example.com/logo.png",
"id": 1,
"name": "Example Annuity Carrier"
}
],
"disability": [],
"life": [
{
"avatar_url": null,
"id": 28,
"name": "Example Life Carrier"
},
{
"avatar_url": "https://example.com/logo2.png",
"id": 42,
"name": "Another Life Carrier"
}
],
"ltc": []
}
}
Get Case
Endpoint
GET /api/v1/cases/:id
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
id number |
The case's id |
Request Examples
{
"case": {
"address": {
"id": 400,
"name": ""
},
"addresses": [
{
"text": "Robert Johnson's Home: 456, City, CA 54321",
"value": 2000
},
{
"text": "Example Insurance Services, Inc.'s Business: 789 Business Ave, Suite 100, Business City, CA 98765",
"value": 2001
}
],
"applied_mode": 12,
"applied_premium": {
"premium": 1000.0,
"total": 12000.0
},
"appointment_cases": [
{
"advisor": {
"avatar_url": null,
"email": "[email protected]",
"id": 600,
"name": "Robert Johnson",
"npn": 10000001,
"phone_work": "(555) 555-0003",
"title": "Vice President",
"type": "Agent"
},
"appointment": {
"assignment": {
"id": 700,
"name": "A1B2C3D4"
},
"carrier_agreement_type": "Individual",
"id": 700,
"name": "A1B2C3D4"
},
"commissionable": true,
"estimated_agent_first_year_and_excess_commission": 6600.0,
"id": 500,
"marketing_manager": {
"cobrowse_license": null,
"email": "[email protected]",
"id": 800,
"name": "Unassigned",
"phone_work": "(555) 555-0004",
"primary_marketing_manager_name": "Example Insurance Services, Inc.",
"scheduling_links": null
},
"renewal_split": 1.0,
"split_percent": 1.0
}
],
"assign_options": [
{
"id": 100004,
"name": "Example Insurance Co",
"type": "Carrier"
},
{
"id": 100005,
"name": "Jane Smith",
"type": "ContractParty"
},
{
"id": 100006,
"name": "Robert Johnson",
"type": "Agent"
},
{
"id": 100007,
"name": "Michael Brown",
"type": "Agent"
},
{
"id": 100008,
"name": "Case Manager Team",
"type": "Agency"
},
{
"id": 100009,
"name": "Example Life New Application",
"type": "Personnel"
},
{
"id": 100010,
"name": "Example Insurance Services, Inc.",
"type": "Agency"
}
],
"benefit_amount": null,
"benefit_mode": null,
"benefit_period": null,
"carrier": {
"avatar_url": "https://example.com/carrier-logo.png",
"id": 1100,
"instant_aps": true,
"name": "Example Insurance Co"
},
"carrier_e_delivery": false,
"case_concierge": {
"avatar_url": null,
"email": "[email protected]",
"id": 100003,
"name": "Michael Brown",
"npn": null,
"phone_work": "(555) 555-0002",
"schedule": {
"annuity": "Street",
"disability": "Street",
"life": "Street",
"linked_benefit": "Street",
"ltc": "Street",
"variable_life": "Street"
},
"type": "Agent"
},
"case_manager": {
"avatar_url": null,
"email": "[email protected]",
"id": 100002,
"name": "Sarah Wilson",
"npn": null,
"phone_work": "(555) 555-0001",
"schedule": {
"annuity": "Street",
"disability": "Street",
"life": "Street",
"linked_benefit": "Street",
"ltc": "Street",
"variable_life": "Street"
},
"type": "Agent"
},
"cash_received": null,
"chronic_illness_rider": null,
"commission": 55.0,
"contract_parties": [
{
"address": {
"address_type": "home",
"city": null,
"country": null,
"end_date": null,
"id": 200001,
"primary": false,
"start_date": null,
"state": null,
"street_address": null,
"zip": null
},
"avatar_url": null,
"birthdate": "1990-01-01",
"email": null,
"gender": null,
"id": 100001,
"name": "Jane Smith",
"primary_phone": null,
"roles": [
{
"approval_rating": null,
"beneficiary_amount": null,
"beneficiary_qualifier": null,
"id": 1000,
"occupation_class": null,
"rating_applied": null,
"relationship": null,
"role": "Insured",
"underwriting_rationale": {}
},
{
"approval_rating": null,
"beneficiary_amount": null,
"beneficiary_qualifier": null,
"id": 1001,
"occupation_class": null,
"rating_applied": null,
"relationship": null,
"role": "Owner",
"underwriting_rationale": {}
}
],
"type": "individual"
}
],
"conversion": false,
"conversion_eapps": [],
"convertible": false,
"days_pending": 203,
"documents": [],
"electronic_application": null,
"elimination_period": null,
"exchange_amount": 0.0,
"face_amount": 1000000.0,
"ga_code": null,
"id": 100000,
"inflation": null,
"informals": null,
"ltc_rider": false,
"lump_sum": 0.0,
"message_client": true,
"mode": 12,
"notes": [],
"outstanding": 3,
"policy_number": "XYZ789",
"premium": {
"premium": 1000.0,
"total": 12000.0
},
"product": {
"chronic_illness_rider": false,
"id": 300,
"line": "life",
"ltc_rider": true,
"name": "Example Product",
"require_conversion_expiration_date": false,
"require_target_premium": false,
"type": "whole_life"
},
"pua_premium": 0.0,
"quick_quotes": [],
"quotes": [],
"requirements": [
{
"completed": false,
"dates": {
"completed_at": null,
"created_at": "2024-08-21T09:34:00.000-07:00",
"follow_up_date": "2024-08-26T09:34:00.000-07:00",
"updated_at": "2024-08-21T09:34:00.000-07:00"
},
"description": "\nDoctor: Dr. Jane Wilson\nOrder Number: 987654321\n\nIf you need to speak with someone, please call your case concierge Michael Brown at (555) 555-0002.",
"email": 0,
"id": 200,
"last_note": null,
"order": {
"id": 201
},
"status": "Outstanding",
"type": "PhysicianStatement"
},
{
"completed": false,
"dates": {
"completed_at": null,
"created_at": "2024-08-21T09:34:00.000-07:00",
"follow_up_date": "2024-08-26T09:34:00.000-07:00",
"updated_at": "2024-08-21T09:34:00.000-07:00"
},
"description": "Do the needful",
"email": null,
"hidden": false,
"id": 202,
"last_note": null,
"status": "Outstanding",
"type": "Task"
},
{
"completed": false,
"dates": {
"completed_at": null,
"created_at": "2024-08-21T09:34:00.000-07:00",
"follow_up_date": "2024-08-22T09:34:00.000-07:00",
"updated_at": "2024-08-21T09:34:00.000-07:00"
},
"description": "Confirm exam status.",
"email": null,
"hidden": false,
"id": 203,
"last_note": null,
"status": "Outstanding",
"type": "Task"
}
],
"room": [
{
"advisor_access": true,
"advisor_email": "[email protected]",
"agent": false,
"avatar_url": null,
"can_be_case_manager": true,
"carrier_access": false,
"carrier_email": false,
"case_access_id": 1000,
"case_concierge": false,
"case_manager": false,
"disabled": true,
"email": false,
"id": 900,
"link": "agencies",
"name": "Example Insurance Services, Inc.",
"personnel_department": null,
"phone": "(555) 555-0005",
"type": "Agency"
},
{
"advisor_access": true,
"advisor_email": "[email protected]",
"agent": false,
"avatar_url": null,
"can_be_case_manager": true,
"carrier_access": true,
"carrier_email": true,
"case_access_id": 1001,
"case_concierge": true,
"case_manager": true,
"disabled": true,
"email": true,
"id": 901,
"link": "agents",
"name": "Michael Brown",
"personnel_department": null,
"phone": "(555) 555-0002",
"type": "Agent"
},
{
"advisor_access": true,
"advisor_email": "[email protected]",
"agent": false,
"avatar_url": null,
"can_be_case_manager": false,
"carrier_access": true,
"carrier_email": true,
"case_access_id": 1002,
"case_concierge": false,
"case_manager": false,
"disabled": true,
"email": true,
"id": 902,
"link": "agencies",
"name": "Case Manager Team",
"personnel_department": null,
"phone": null,
"type": "Agency"
},
{
"advisor_access": false,
"advisor_email": "[email protected]",
"agent": false,
"avatar_url": "https://example.com/avatar.png",
"can_be_case_manager": false,
"carrier_access": true,
"carrier_email": true,
"case_access_id": 1003,
"case_concierge": false,
"case_manager": false,
"disabled": true,
"email": false,
"id": 903,
"link": "personnels",
"name": "Example Life New Application",
"personnel_department": null,
"phone": null,
"type": "Personnel"
},
{
"advisor_access": true,
"advisor_email": "[email protected]",
"agent": true,
"avatar_url": null,
"can_be_case_manager": false,
"carrier_access": false,
"carrier_email": false,
"case_access_id": 1004,
"case_concierge": false,
"case_manager": false,
"disabled": false,
"email": true,
"id": 904,
"link": "agents",
"name": "Robert Johnson",
"personnel_department": null,
"phone": "(555) 555-0003",
"type": "Agent"
}
],
"same_manager_for_party": true,
"save_age": false,
"show_snapshot": true,
"state": "VA",
"status": "Entered",
"surrender_charge_expiration": 0,
"target_premium": 0.0,
"tax_type": null,
"tia": null,
"timeline": [
{
"date": "2024-01-31",
"description": "Application Signed",
"key": "app_sign_date"
},
{
"date": "2024-01-31",
"description": "Submitted to Carrier",
"key": "submitted_date"
},
{
"date": "2024-01-31",
"description": "Approved",
"key": "approved_date"
},
{
"date": "2024-01-31",
"description": "Issued",
"key": "issue_date"
},
{
"date": "2024-01-31",
"description": "Policy Date",
"key": "policy_date"
},
{
"date": "2024-08-21",
"description": "Received by BackNine",
"key": "created_at"
},
{
"date": null,
"description": "Policy Sent to Agent",
"key": "sent_to_agent"
},
{
"date": null,
"description": "Delivery Requirements Due Date",
"key": "delivery_requirements_due_date"
},
{
"date": null,
"description": "Inforce",
"key": "inforce_date"
},
{
"date": null,
"description": "Conversion Expiration",
"key": "conversion_expiry"
},
{
"date": null,
"description": "Closed",
"key": "closed_date"
},
{
"date": null,
"description": "Gathering Medical Information",
"key": "gathering_medical_information_date"
},
{
"date": null,
"description": "All Offers Received",
"key": "all_offers_received"
}
],
"tracking_number": null,
"tracking_number_link": "https://tools.usps.com/go/TrackConfirmAction?tLabels=",
"tracking_number_type": "USPS",
"updated_at": "2024-08-21T09:34:00.000-07:00"
}
}
Get Cases
Endpoint
GET /api/v1/cases
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
page integer |
Page number. See Pagination for defaults and normalization. |
count integer |
Results per page. See Pagination for the default and maximum. |
Use meta.total for the number of matching cases; it includes all pages.
Optional Statistics
Send stats=true to include meta.stats totals for the full filtered set, before pagination. Omitting stats or sending false leaves meta.stats out of the response.
The keys use the supplied status group as a prefix: {status}_cases (case count), {status}_death_benefit (total face amount), {status}_premium (total first-year premium, including exchange, lump-sum, and paid-up additions amounts), and {status}_production (total production credit). For example, status=pending yields pending_cases, pending_death_benefit, pending_premium, and pending_production. With no status group, the keys are _cases, _death_benefit, _premium, and _production, including when an exact status filter is supplied. Sum fields may be null when no cases match.
Example: GET /api/v1/cases?filter[cases.status]=Submitted&stats=true
{
"cases": [],
"meta": {
"page": 1,
"total": 0,
"stats": {
"_cases": 0,
"_death_benefit": null,
"_premium": null,
"_production": 0
}
}
}
Filter Parameters
| Parameter | Description |
|---|---|
case_manager_id number |
Filter by case manager (agent) ID |
case_concierge_id number |
Filter by case concierge (agent) ID |
white_glove boolean |
Filter by white-glove status: true or false |
advisor_id number |
Filter by the agent on the case (use with advisor_type) |
advisor_type string |
Type of the agent on the case; use with advisor_id. Values: Agent, Agency |
shared_with_type string |
Filter to cases shared with a specific record. Must be used with shared_with_id. Values: Agent, Agency |
shared_with_id number |
ID of the Agent or Agency to filter by (use with shared_with_type) |
state string |
Filter by case state (two-letter abbreviation) |
carrier_id number |
Filter by carrier ID |
status string |
Filter by case status group. Valid values: pending (Entered, Submitted, Approved, Issued, Gathering Medical Information, Awaiting Delivery Requirements, etc.), active (Active, Annuitized, Paid Up, Grace Period, etc.), inactive (Not Taken, Withdrawn, Declined, Lapsed, Closed - Not Submitted to Carrier, etc.), submitted_inactive, informal, show, show_approved |
filter[cases.policy_number] string |
Partial match on policy number |
filter[cases.status] string or array[string] |
Exact match on one or more case statuses. For multiple values, repeat filter[cases.status][]. Valid values include: Entered, Submitted, Approved, Issued, Active, Active - Pending Requirements, Gathering Medical Information, Awaiting Delivery Requirements, Awaiting Carrier Offers, All Offers In, Informal Entered, Received Delivery Requirements, Awaiting Reissued Policy, Awaiting Reconsideration, Closed - Submitted by Another GA - Pending Requirements, Annuitized, Letter of Authorization Sent, One Deceased, Active Annuity Payout, Paid Up, Grace Period, Not Taken, Withdrawn, Postponed, Declined, Informal Closed, Informal Formalized, Surrendered, Matured, Deceased/Death Claim, Free Look, Deferred Death, Lapsed, Surrender to the client, Surrender/Exchanged to a third party, Surrender/Converted, Termination, Rescinded, Closed - Not Submitted to Carrier, Closed - Submitted by Another GA |
filter[contract_parties.name] string |
Partial match on the Insured or Annuitant's name |
any_contract_party_name string |
Partial match on any contract party name on the case (insured, owner, beneficiary, etc.) |
product_type string |
Filter by product type |
product_traits array |
Filter by product traits; each trait is JSON-contained in products.traits |
filter[products.name] string |
Partial match on product name |
filter[products.line] string |
Exact match on product line. Valid values: annuity, disability, informal, life, linked_benefit, ltc, variable_life |
death_benefit[min] number |
Minimum face amount (death benefit) |
death_benefit[max] number |
Maximum face amount (death benefit) |
premium[min] number |
Minimum production credit sum |
premium[max] number |
Maximum production credit sum |
date[field][start] date |
Date range start for a case date field (YYYY-MM-DD). Use with date[field][finish]. Common fields: created_at, updated_at, inforce_date, closed_date. Example: date[created_at][start]=2024-01-01&date[created_at][finish]=2024-12-31 |
date[field][finish] date |
Date range end for a case date field (YYYY-MM-DD). Use with date[field][start] |
For multiple exact statuses, repeat the array key: filter[cases.status][]=Entered&filter[cases.status][]=Submitted. Multiple product traits use product_traits[]=trait1&product_traits[]=trait2; every listed trait must match.
Sorting Parameters
Pass sort field and direction as sorting[field]=asc or sorting[field]=desc. Supported fields:
| Field | Description |
|---|---|
cases.first_year |
First-year production (premium × mode + exchange_amount + lump_sum) |
cases.created_at |
Created at timestamp |
cases.updated_at |
Updated at timestamp |
cases.inforce_date |
Inforce date |
cases.closed_date |
Closed date |
contract_parties.name |
Insured/annuitant name |
products.name |
Product name |
products.line |
Product line |
Example: ?sorting[cases.created_at]=desc
Response Example
{
"cases": [
{
"advisor": {
"id": 1179,
"name": "Reid Tattersall",
"type": "Agent"
},
"carrier_name": "MassMutual",
"case_manager_name": "Carol Coleman",
"closed_date": null,
"conversion_expiry": null,
"created_at": "2024-08-21T09:34:00.000-07:00",
"first_year": 12000.0,
"id": 123716,
"inforce_date": null,
"insured": {
"id": 123457138,
"name": "John Doe"
},
"line": {
"text": "Life",
"value": "life"
},
"mode": 12,
"policy_number": "ABC123",
"premium": 1000.0,
"product_name": "Legacy 65",
"status": "Entered",
"updated_at": "2024-08-21T09:34:00.000-07:00"
}
],
"meta": {
"page": 1,
"total": 1
}
}
Get Electronic Application
Endpoint
GET /api/v1/electronic_applications/:id
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
id number |
The electronic application's id |
Response Example
{
"electronic_application": {
"agent": {
"avatar_url": null,
"id": 1179,
"name": "Jane Smith"
},
"application_roles": [],
"apply_link": "https://apply.example.com/e/abc123",
"approved_domain": {
"appointment_assignment_ownable": {
"id": 42,
"name": "Example Agency",
"type": "Agency"
},
"archived_at": null,
"disable_client_emails": false,
"domain": "https://apply.example.com",
"id": 10
},
"approved_domain_answers": [
{
"answer": "Social Media",
"approved_domain_question": {
"id": 201,
"input_type": "select",
"question": "How did you hear about us?",
"required": false,
"select_options": [
"Social Media",
"Friend/Family",
"Search Engine",
"Other"
]
},
"id": 101
},
{
"answer": "Full-time",
"approved_domain_question": {
"id": 202,
"input_type": "text",
"question": "What is your employment status?",
"required": true,
"select_options": null
},
"id": 102
}
],
"commission_splits": [],
"conversion": false,
"created_at": "2024-06-10T11:00:00.000-07:00",
"days_pending": null,
"electronic_application_accesses": [],
"electronic_application_cases": [],
"envelope_expiration_at": null,
"follow_up_at": "2024-06-17",
"follow_up_at_is_appointment": false,
"id": 1001,
"insured": {
"exam": null,
"id": 5001,
"intro_last_sent_at": null,
"name": "John Doe",
"send_client_intro_message": true
},
"is_completed": false,
"latest_quotes": {
"insured": {
"birthdate": "1970-01-01",
"first_name": "John",
"gender": "Male",
"id": 2001,
"last_name": "Doe",
"mode": 12,
"product": {
"id": 105,
"name": "20 Year Term"
},
"state": "CA"
},
"joint_insured": null
},
"lead_status": "Active",
"metadata": {
"campaign_id": "summer_2024"
},
"named_step": "Contact",
"notes": [],
"parties": [
{
"date": null,
"email": "[email protected]",
"id": 5001,
"name": "John Doe",
"primary_phone": "(555) 444-3333",
"primary_raw_address": null,
"roles": [
{
"beneficiary_amount": null,
"beneficiary_qualifier": null,
"id": 3001,
"relationship": null,
"role": "Insured"
},
{
"beneficiary_amount": null,
"beneficiary_qualifier": null,
"id": 3002,
"relationship": null,
"role": "Owner"
}
],
"type": "Individual"
},
{
"date": null,
"email": "[email protected]",
"id": 5002,
"name": "Jane Doe",
"primary_phone": null,
"primary_raw_address": null,
"roles": [
{
"beneficiary_amount": 100,
"beneficiary_qualifier": null,
"id": 3003,
"relationship": "Spouse",
"role": "Primary Beneficiary"
}
],
"type": "Individual"
}
],
"policy_number": "Pending",
"product": {
"carrier": {
"id": 28,
"name": "Example Carrier"
},
"id": 105,
"name": "20 Year Term"
},
"resume_carrier_eapp": false,
"signers": [],
"status": "Lead",
"step": 1,
"test": false
}
}
lead_status (in the electronic application object) indicates whether the lead has been contacted. Possible values: null (new/uncontacted), Active, Inactive.
Relationship (in parties[].roles[]) describes how the party is related to the insured. Possible values:
- Individuals: Brother, Brother-in-law, Business Partner, Daughter, Domestic Partner, Ex-Husband, Ex-Wife, Father, Father-in-law, Fiance, Friend, Granddaughter, Grandfather, Grandmother, Grandson, Husband, Mother, Mother-in-law, Relative, Sister, Sister-in-law, Son, Stepfather, Stepmother, Trust, Wife
- Entities: Creditor, Employer, Other, Trustee, Trust
Get Electronic Applications
Endpoint
GET /api/v1/electronic_applications
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
page integer |
Page number. See Pagination for defaults and normalization. |
count integer |
Results per page. See Pagination for the default and maximum. |
Filter Parameters
| Parameter | Description |
|---|---|
shared_with_type string |
Filter to eApps shared with a specific record. Must be used with shared_with_id. Values: Agent, Agency |
shared_with_id number |
ID of the Agent or Agency to filter by (use with shared_with_type) |
conversion boolean |
Filter by conversion status: true or false |
carrier_id number |
Filter by carrier ID |
product_id number |
Filter by product ID |
categories array |
Filter by product categories (array or single value) |
agent_id number |
Filter by agent ID (via agent association) |
pricing_plan_id number |
Filter by pricing plan ID |
refer boolean |
Filter by refer: true or false |
is_appointment boolean |
Filter by follow-up is appointment: true or false |
best_time_to_call string |
Filter by best time to call |
lead_status string |
Filter by lead status. Valid values: New (nil/new leads), Active, Inactive |
death_benefit[min] number |
Minimum death benefit (face amount) |
death_benefit[max] number |
Maximum death benefit (face amount) |
premium[min] number |
Minimum premium (premium × mode) |
premium[max] number |
Maximum premium (premium × mode) |
contacted boolean |
Filter by whether agent has contacted: true or false |
custom_answers string |
Partial match on approved domain custom answers. These answers are returned in the show route under the approved_domain_answers key. |
is_completed boolean |
Filter by completion status |
follow_up_at_is_appointment boolean |
Filter by follow-up is appointment |
has_email boolean |
Filter by insured having email: true or false |
email string |
Exact match on insured/joint insured email (case-insensitive) |
phone_mobile string |
Exact match on insured mobile phone (10 digits, normalized) |
filter[electronic_applications.name] string |
Full-text search on insured name (MATCH AGAINST, space-separated terms) |
filter[electronic_applications.status] string |
Exact match on eApp status. Valid values: Quote, Lead, Sent, Delivered, Completed |
filter[approved_domains.domain] string |
Partial match on approved domain URL (https:// stripped) |
date[electronic_applications.created_at][start] date |
Created-at date range start (YYYY-MM-DD) |
date[electronic_applications.created_at][finish] date |
Created-at date range end (YYYY-MM-DD) |
date[follow_up_at][start] date |
Follow-up date range start (YYYY-MM-DD) |
date[follow_up_at][finish] date |
Follow-up date range end (YYYY-MM-DD) |
date[completed_at][start] date |
Completed-at date range start (YYYY-MM-DD) |
date[completed_at][finish] date |
Completed-at date range end (YYYY-MM-DD) |
metadata object/JSON |
Metadata query. Object with logic (or or and) and conditions array. Each condition: path (JSON path), operator, value. Operators: equals, not_equals, contains, exists, not_exists, greater_than, less_than, greater_than_or_equal, less_than_or_equal, in. Omit value for exists and not_exists. For in, value must be an array. |
Metadata query example
Pass metadata as a JSON object (e.g. in the query string). Single condition (equals):
{
"conditions": [
{ "path": "campaign_id", "operator": "equals", "value": "summer_2024" }
]
}
Multiple conditions with AND (default when logic is omitted):
{
"logic": "and",
"conditions": [
{ "path": "campaign_id", "operator": "equals", "value": "summer_2024" },
{ "path": "status", "operator": "equals", "value": "active" }
]
}
Multiple conditions with OR:
{
"logic": "or",
"conditions": [
{ "path": "campaign_id", "operator": "equals", "value": "summer_2024" },
{ "path": "campaign_id", "operator": "equals", "value": "winter_2024" }
]
}
Other operators: contains (partial string match), exists / not_exists (no value), greater_than, less_than, greater_than_or_equal, less_than_or_equal (numeric), in (value is an array, e.g. ["active", "pending"]). Nested paths use dot notation, e.g. user.preferences.theme.
Sorting Parameters
Pass sort field and direction as sorting[field]=asc or sorting[field]=desc. Supported fields:
| Field | Description |
|---|---|
electronic_applications.created_at |
Created at timestamp |
electronic_applications.updated_at |
Updated at timestamp |
follow_up_at |
Follow-up date |
completed_at |
Completed at timestamp |
Example: ?sorting[electronic_applications.created_at]=desc
Response
The response includes a meta object with total and page.
Response Example
{
"electronic_applications": [
{
"agent": {
"avatar_url": null,
"id": 1179,
"name": "Jane Smith"
},
"approved_domain": {
"domain": "https://apply.example.com",
"id": 10
},
"benefit_amount": 1000000,
"best_time_to_call": null,
"completed_at": null,
"created_at": "2024-06-10T11:00:00.000-07:00",
"edited_status": "Lead",
"follow_up_at": "2024-06-17",
"follow_up_at_is_appointment": false,
"id": 1001,
"initial_death_benefit": 1000000,
"insured": {
"id": 5001,
"name": "John Doe",
"phone_mobile": "(555) 444-3333"
},
"lead_status": "New",
"marketing_manager_name": "Example Marketing Manager",
"mode": 12,
"pay_duration": "20",
"premium": 100.0,
"product": {
"carrier": {
"id": 28,
"name": "Example Carrier"
},
"id": 105,
"name": "20 Year Term"
},
"refer": false,
"step_display_name": "Contact",
"updated_at": "2024-06-10T11:00:00.000-07:00"
}
],
"meta": {
"page": 1,
"total": 1
}
}
Get Payments
Endpoint
GET /api/v1/payments
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
page integer |
Page number. See Pagination for defaults and normalization. |
count integer |
Results per page. See Pagination for the default and maximum. |
Filter Parameters
| Parameter | Description |
|---|---|
payor_id number |
Filter by payor ID |
agent_id number |
Filter by agent ID (agent on the case) |
case_id number |
Filter by case ID |
carrier_id number |
Filter by carrier ID |
contract_party_id number |
Filter by contract party (insured) ID |
payment_type string |
Filter by commission payment type. Valid values: Retained, Flat, Net Retained, Affiliate, Flat - Estimated, Fee, First Case Bonus, BackNine Policy Fee, Chargeback |
assigned_payable_id number |
Filter by assigned payable ID — where commissions were actually paid (use with assigned_payable_type) |
assigned_payable_type string |
Assigned payable type — where commissions were actually paid (use with assigned_payable_id). Valid values: Agent, Agency |
payable_id number |
Filter by payable ID — who the payment originated from (use with payable_type) |
payable_type string |
Payable type — who the payment originated from (use with payable_id). Valid values: Agent, Agency |
white_glove_eapp boolean |
Filter to white-glove eApp payments: true |
filter[pay_periods.id] number |
Filter by pay period ID |
filter[payments.commission_type] string |
Partial match on commission type. Valid values: Annuity Bonus, Annuity First Year, Annuity Renewal, Disability Bonus, Disability Excess, Disability First Year, Disability Renewal, Life Bonus, Life Excess, Life First Year, Life PUA, Life Renewal, Life Term Rider, Linked Benefit Bonus, Linked Benefit Excess, Linked Benefit First Year, Linked Benefit PUA, Linked Benefit Renewal, Linked Benefit Term Rider, LTC Bonus, LTC First Year, LTC Renewal, Variable Life Bonus, Variable Life Excess, Variable Life First Year, Variable Life Renewal, Minimum Fee |
date[payments.created_at][start] date |
Payment created-at date range start (YYYY-MM-DD) |
date[payments.created_at][finish] date |
Payment created-at date range end (YYYY-MM-DD) |
date[payments.statement_date][start] date |
Statement date range start (YYYY-MM-DD) |
date[payments.statement_date][finish] date |
Statement date range end (YYYY-MM-DD) |
date[inforce_date][start] date |
Case inforce date range start (YYYY-MM-DD) |
date[inforce_date][finish] date |
Case inforce date range end (YYYY-MM-DD) |
Sorting Parameters
Pass sort field and direction as sorting[field]=asc or sorting[field]=desc. Supported fields:
| Field | Description |
|---|---|
payments.created_at |
Created at timestamp |
payments.statement_date |
Statement date |
payments.premium |
Premium |
payments.percent |
Percent |
payments.dollar |
Dollar amount |
Example: ?sorting[payments.created_at]=desc
Response
The response includes a meta object with total and page.
Response Example
{
"meta": {
"page": 1,
"total": 1
},
"payments": [
{
"commission": {
"assigned_payable": {
"id": 1179,
"name": "Jane Smith"
},
"payment_type": "Flat",
"payor": {
"id": 1,
"name": "Example Payor"
}
},
"commission_type": "Life First Year",
"created_date": "2024-08-01",
"dollar": 400.0,
"id": 2001,
"pay_period": {
"id": 100,
"paid_date": "2024-08-15"
},
"percent": 40.0,
"premium": 1000.0,
"statement": {
"id": 50,
"statement_date": "2024-08-01"
}
}
]
}
Get Pay Period
Endpoint
GET /api/v1/pay_periods/:id
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
id number |
The pay period's id |
Response
Returns a single pay period including payments with commission details (e.g. commission type, percent, dollar, case, advisor, carrier).
Response Example
{
"pay_period": {
"billable": {
"avatar_url": null,
"email": "[email protected]",
"id": 18,
"name": "Example Agency",
"phone_work": "(555) 123-4567",
"primary_address": {
"address_type": "business",
"city": "Westlake Village",
"country": null,
"id": 217242,
"state": "CA",
"street_address": "310 N. Westlake Blvd.",
"zip": "91362"
},
"type": "Agency"
},
"eft": {
"id": 50,
"paying_to": "ACH"
},
"id": 52,
"ownable": {
"avatar_url": null,
"email": "[email protected]",
"id": 1179,
"name": "Jane Smith",
"phone_work": "(555) 555-5555",
"primary_address": {
"address_type": "business",
"city": "Westlake Village",
"country": null,
"id": 217280,
"state": "CA",
"street_address": "123 Main St",
"zip": "91362"
},
"type": "Agent"
},
"paid_amount": 2500.0,
"paid_date_value": "2024-08-15",
"payments": [
{
"advisor": {
"id": 1179,
"link": "agents",
"name": "Jane Smith"
},
"carrier": {
"avatar_url": null,
"id": 28,
"name": "Example Carrier"
},
"case": {
"id": 2001,
"line": "life",
"policy_number": "POL-12345"
},
"commission_type": "Life First Year",
"description": null,
"dollar": 960.0,
"id": 1001,
"insured": {
"id": 5001,
"link": "individual",
"name": "John Doe"
},
"percent": 80.0,
"premium": 150.0,
"split_percent": 100.0,
"statement_date": "2024-08-15"
}
],
"status": "Paid"
}
}
Get Pay Periods
Endpoint
GET /api/v1/pay_periods
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
page integer |
Page number. See Pagination for defaults and normalization. |
count integer |
Results per page. See Pagination for the default and maximum. |
Filter Parameters
| Parameter | Description |
|---|---|
type string |
Filter by paid status: paid or unpaid |
date[pay_periods.paid_date][start] date |
Paid date range start (YYYY-MM-DD) |
date[pay_periods.paid_date][finish] date |
Paid date range end (YYYY-MM-DD) |
payable_id number |
Filter by payable ID for owner pay periods (use with payable_type). The payable can be an Agent or Agency. |
payable_type string |
Type of the payable; use with payable_id. Values: Agent, Agency |
filter[pay_periods.id] number |
Filter by pay period ID |
filter[transaction_id] string |
Filter by third party transaction ID |
filter[pay_periods.status] string |
Filter by payment status |
filter[paid_amount_at] number |
Filter by paid amount at |
Sorting Parameters
Pass sort field and direction as sorting[field]=asc or sorting[field]=desc. Supported fields:
| Field | Description |
|---|---|
pay_periods.id |
Pay period ID |
paid_amount_at |
Paid amount at |
pay_periods.paid_date |
Paid date |
Example: ?sorting[pay_periods.paid_date]=desc
Response
The response includes a meta object with total, page, count, and stats (including paid_amount_at_sum).
Response Example
{
"meta": {
"count": 25,
"page": 1,
"stats": {
"paid_amount_at_sum": 0.0
},
"total": 1
},
"pay_periods": [
{
"editable": true,
"errors": null,
"id": 100,
"lock": false,
"memo": null,
"paid_amount": 2500.0,
"paid_amount_at": null,
"paid_by": {
"id": 42,
"link": "agencies",
"name": "Example Agency"
},
"paid_date": "2024-08-15",
"paid_to": {
"id": 1179,
"link": "agents",
"name": "Jane Smith"
},
"payable": true,
"paying_to": "ACH",
"payment_method": "Pay by manual ACH",
"status": null,
"status_note": null,
"transaction_id": null
}
]
}
Get Product
Endpoint
GET /api/v1/products/:id
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
id number |
The product's id |
Response
Returns a single product including carrier, payouts, payor options, and related data (e.g. guides, build/smoker charts, versions, citizenship profiles).
Response Example
{
"product": {
"active_years": 125,
"advisor_guide": null,
"advisor_use_only": false,
"age_nearest": true,
"backnine_policy_fee": 125.0,
"carrier": {
"avatar_url": "https://example.com/carrier.png",
"id": 48,
"instant_aps": true,
"name": "MassMutual"
},
"carrier_e_delivery": false,
"category": "whole_life.none.125_year",
"chargeback": null,
"child_rider": false,
"chronic_illness_rider": false,
"commission_option": null,
"configured_for_quoting": false,
"consumer_guide": null,
"conversion": false,
"conversion_target_eligible": false,
"conversion_text": null,
"critical_illness_rider": false,
"engine": null,
"first_year_commission": 55.0,
"form_set": null,
"free_withdrawals": null,
"guides": [],
"id": 108,
"instant_aps": null,
"limit_to_preferred_age": null,
"limit_to_standard_age": null,
"line": "life",
"line_percentage": 1.0,
"ltc_rider": true,
"max_age": null,
"max_death_benefit": null,
"max_payout": 0.0,
"max_premium": null,
"min_age": null,
"min_death_benefit": null,
"min_premium": null,
"multiple_policies": false,
"name": "Legacy 65",
"name_with_age": "Legacy 65",
"no_cost_chronic_illness_rider": false,
"no_cost_critical_illness_rider": false,
"no_payouts": false,
"pay_duration": null,
"payor_options": [
{
"id": 84,
"name": "BackNine Insurance and Financial Services, Inc.",
"payable_type": "Agency"
},
{
"id": 48,
"name": "MassMutual",
"payable_type": "Carrier"
}
],
"payouts": [
{
"commission_type": "First Year",
"comp_builder": {
"id": 48,
"name": "MassMutual - Street"
},
"end_year": 125.0,
"id": 563,
"payment_type": "Flat",
"payor": {
"id": 48,
"name": "MassMutual",
"payable_type": "Carrier"
},
"percent": 55.0,
"start_year": 1.0
},
{
"commission_type": "Renewal",
"comp_builder": {
"id": 48,
"name": "MassMutual - Street"
},
"end_year": 125.0,
"id": 564,
"payment_type": "Flat",
"payor": {
"id": 48,
"name": "MassMutual",
"payable_type": "Carrier"
},
"percent": 5.0,
"start_year": 1.0
}
],
"primary_product": true,
"product_build_charts": [],
"product_citizenship_profiles": [
{
"citizenship_profile": {
"acceptable_visa_types": {
"B1": true,
"B2": true,
"Green Card": true,
"No Visa": false
},
"id": 2,
"name": "All VISAS"
},
"id": 108
}
],
"product_smoker_charts": [],
"require_conversion_expiration_date": false,
"return_of_premium_rider": false,
"rolling_target": null,
"schedules": {},
"section_1035_exchange": false,
"show_conversion": false,
"solves": null,
"street_excess": 0.0,
"street_first": 0.55,
"street_pua": 0.0,
"street_renewal": 0.05,
"strife_enabled": false,
"surrender_period": 0,
"target_premium_multiple": 1,
"temporary_insurance_profiles": [],
"term_rider": false,
"total_excess": null,
"total_first": null,
"total_pua": null,
"total_renewal": null,
"training": null,
"traits": [
"none"
],
"type": "whole_life",
"underwriting_guide": null,
"versions": [],
"vitality_rider": false
}
}
Get Products
Endpoint
GET /api/v1/products
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Request Parameters
| Parameter | Description |
|---|---|
page integer |
Page number. See Pagination for defaults and normalization. |
count integer |
Results per page. See Pagination for the default and maximum. |
Filter Parameters
| Parameter | Description |
|---|---|
line string |
Filter by product line |
qa_enabled boolean |
Filter by Quote & Apply enabled: true or false |
filter[products.name] string |
Partial match on product name |
filter[carriers.name] string |
Partial match on carrier name |
Sorting Parameters
Pass sort field and direction as sorting[field]=asc or sorting[field]=desc. Supported fields:
| Field | Description |
|---|---|
carriers.name |
Carrier name |
products.name |
Product name |
Example: ?sorting[products.name]=asc
Response
The response includes a meta object with total.
Response Example
{
"meta": {
"total": 1
},
"products": [
{
"carrier": {
"id": 28,
"name": "Example Carrier"
},
"excess": 0.0,
"first_year": 55.0,
"id": 105,
"line": "life",
"name": "20 Year Term (Age 35)",
"qa_enabled": true,
"renewal": 5.0
}
]
}
Get Users
Fetch a list of your users
Endpoint
GET /api/v1/users
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings.
Request Parameters
Optional parameters can be passed to filter the results
| Parameter | Type | Description |
|---|---|---|
auth_method |
string | Possible values are OAuth and SAML. OAuth matches users with an OAuth identity that can be used to sign in. |
count |
integer | Results per page. See Pagination for the default and maximum. |
email |
string | The user's email address |
is_locked |
boolean | If the user's account is locked |
otp_enrolled |
boolean | If the user has enrolled in one time passcode |
otp_required_for_login |
boolean | If one time passcode is required to log in |
page |
integer | Page number. See Pagination for defaults and normalization. |
Request Example
get "/api/v1/users",
headers: { "X-BACKNINE-AUTHENTICATION" => "XXXXXX" },
params: { email: "[email protected]", count: 10, page: 1 }
Response
{
"meta": {
"count": 1,
"page": 1,
"total": 1
},
"users": [
{
"active_login": {
"id": 1000,
"name": "John Doe",
"type": "Agent"
},
"email": "[email protected]",
"id": 4,
"last_sign_in_at": null,
"otp_enrolled": false,
"otp_required_for_login": true,
"sso": null
}
]
}
Health Check
BackNine's health check endpoint can be use to test the API's availability
Endpoint
POST /api/v1/check-auth
Headers
X-BACKNINE-AUTHENTICATION: your-api-key
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Response
The endpoint will return a 204 reponse code if your API key is valid.
Accidental Death API (Legacy)
Endpoint
The endpoint for this action is as follows:
POST /api/v1/apply/accidental_death
Authentication
X-BACKNINE-AUTHENTICATION: your-api-key
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Parameters
{
"eft": {
"account_type": "Checking",
"routing_number": "000000000",
"account_number": "0"
},
"electronic_application": {
"approved_domain_id": 1,
"face_amount": 500000,
"gender": "Male",
"birthdate": "1990-05-11",
"state": "CA",
"mode": 12,
"product_category": "Accidental Death",
"application_roles_attributes": [
{
"role": "Insured",
"ownable_attributes": {
"ownable_type": "Individual",
"first_name": "John",
"last_name": "Doe",
"gender": "Male",
"birthdate": "1990-05-11",
"email": "[email protected]",
"phone_mobile": "(123) 456-7890",
"ssn": "123-45-6789",
"birth_location": "FL",
"addresses_attributes": [
{
"address_type": "home",
"street_address": "1234 My Street",
"city": "Westlake Village",
"state": "CA",
"zip": "91362",
"country": "United States"
}
]
}
},
{
"role": "Primary Beneficiary",
"relationship": "Other",
"beneficiary_qualifier": "Percent",
"beneficiary_amount": 1,
"ownable_attributes": {
"ownable_type": "Entity",
"name": "Test Business",
"tin": "12-3456789",
"phone_work": "(123) 456-7890"
}
},
{
"role": "Contingent Beneficiary",
"relationship": "Grandfather",
"beneficiary_qualifier": "Percent",
"beneficiary_amount": 1,
"ownable_attributes": {
"ownable_type": "Individual",
"first_name": "Test",
"last_name": "Beneficiary",
"birthdate": "1950-05-11"
}
}
],
"electronic_application_cases_attributes": [
{
"product_id": 2645,
"status": "Active"
}
],
"editors_attributes": [{
"name": "Test Editor",
"email": "[email protected]"
}]
}
}
Send an HTTPS POST request to the above route along with the request body to generate an eApp session for your client.
Top-level parameters
These are the top-level JSON parameters you will be sending to our endpoint.
| Parameter | Description |
|---|---|
electronic_application required object |
See parameters below. |
eft required object |
See parameters below. |
Electronic Application parameters
These describe the electronic_application parameter listed above.
| Parameter | Description |
|---|---|
approved_domain_id required number |
The ID of the approved domain. Check BOSS to get the ID of the domain you wish to associate the eApp with. |
face_amount required number |
The face amount applied for. |
gender required string |
The gender of the applicant. Must be "Male" or "Female". |
birthdate required date |
The birthdate in YYYY-MM-DD format. |
state required string |
The 2 digit state abbreviation. |
mode required number |
A number representing the premium mode. Can be 12 (monthly), 4 (quarterly), 2 (semi-annually), or 1 (annually). |
test required boolean |
Indicates whether this is a test eApp or a real eApp. Defaults to the value on the approved domain. Check BOSS to see the value for the domain you pass in. |
application_roles_attributes required
array Creates roles such as "insured" on the policy.
Application Roles parameters
These describe the application_roles_attributes parameter listed above. You can use this parameter to pre-fill the insured's info on the eApp. You also use this parameter to determine who will be the beneficiaries. You must have at least one primary beneficiary. The sum of all primary beneficiaries must add up to 1 (or 100%). The sum of all contingent beneficiaries must also add up to 1 (or 100%).
| Parameter | Description |
|---|---|
role required string |
The role of the ownable on the policy. Valid options are: "Insured", "Primary Beneficiary", "Contingent Beneficiary". |
relationship required string |
The relationship to the Insured. Can be "Mother", "Father", "Grandfather", "Brother", "Sister", etc. This field must be null for the insured. |
beneficiary_qualifier required string |
Must be "Percent". Only used for beneficiaries. Required and reserved for beneficiaries only |
beneficiary_amount required number |
A floating-point number representing the percentage the beneficiary will receive if the insured passes. 1 means 100%, 0.5 means 50%, etc. Only used for beneficiaries. |
ownable_attributes required object |
Attributes describing the ownable. |
Ownable parameters
These describe the ownable_attributes parameter listed above for Application Roles. This is a polymorphic association, but we currently only support parameters describing an individual. You can use this parameter to pre-fill the insured's info on the eApp.
| Parameter | Description |
|---|---|
ownable_type required string |
The type of the ownable. Must be "Individual". |
first_name required string |
|
last_name required string |
|
phone_mobile required string |
The individual's phone number. It must be in the format (###) ###-####. This is the phone number that shows up on the personal information section (step 2) of the app. |
email required string |
Must be in a valid email format. |
ssn required string |
Must be in the format ###-##-####. |
birthdate required date |
Must be in the format YYYY-MM-DD. |
gender required string |
Must be either Male or Female. |
Address parameters
This section describes one entry in the addresses_attributes array.
| Parameter | Description |
|---|---|
address_type required string |
Currently can only be "home". |
street_address required string |
The ownable's street address, both name and number. For example, "1234 My Street". |
city required string |
|
state required string |
The state's two letter abbreviation, such as "CA" for California. |
zip required number |
The 5 digit postal code. Must be in the format "XXXXX". |
country required string |
Currently we only support "United States". |
Electronic Application Case parameters
This section describes one entry in the electronic_application_cases_attributes array.
Use this section to list the applicants pending and inforce insurance. Only one electronic_application_case per status is necessary.
| Parameter | Description |
|---|---|
product_id required number |
Currently can only be 2645. |
status required string |
Can be "Active", "Pending", or "Active - Being Replaced". |
EFT parameters
These describe the top-level eft parameter listed above. The EFT must be the
insured's EFT.
| Parameter | Description |
|---|---|
account_type required string |
"Checking" or "Savings". |
routing_number required string |
A valid routing number (no spaces). |
account_number required string |
A valid account number (no spaces). |
Get Quotes (Legacy)
Endpoint
POST /api/v1/quotes
Content-Type: application/json
Authentication
X-BACKNINE-AUTHENTICATION: your-api-key
Content-Type: application/json
Your API key can be found at https://app.back9ins.com/settings?page=developer-settings
Parameters
| Parameter | Description |
|---|---|
face_amounts required boolean |
A list of the face amounts being quoted |
state required string |
two digit state abbreviation |
mode required number |
How many times per year the insured will be paying. Possible values are 1, 2, 4, or 12. |
gender required string |
The insured's gender. Possible values are Male, Female. |
product_categories required array |
term.10_year, term.15_year, term.20_year, term.25_year, term.30_year, term.35_year, term.40_year, term.non_med.10_year, term.non_med.15_year, term.non_med.20_year, term.non_med.25_year, term.non_med.30_year, term.return_of_premium.15_year, term.return_of_premium.20_year, term.return_of_premium.25_year, term.return_of_premium.30_year |
health required number |
1 - 5 (5 being the best) required unless product_category = 10 Year Non Medical Term, 15 Year Non Medical Term, 20 Year Non Medical Term, 25 Year Non Medical Term, 30 Year Non Medical Term |
smoker required boolean |
The smoker status. The prospect's smoking status. Can be either Never, Previously, or Currently. More information is below. Required unless Accidental Death |
usages array |
A list of smoker information for the different types of smokable items. Leave empty or omit if smoker status is Never. |
npn number |
Including npn is required to receive link_to_sms and link_to_share in the response. The npn is the national producer number of the agent the link_to_sms and link_to_share will be from. The agent must exist in BOSS. |
first_name string |
Including first_name is required to receive link_to_sms in the response. |
last_name string |
Including last_name is required to receive link_to_sms in the response. |
phone_number string |
Including phone_number is required to receive link_to_sms in the response. |
height number |
The insured's height represented in inches. |
weight number |
The insured's weight. |
Usages
See Above for Smoking Status Object Structure
| Parameter | Description |
|---|---|
status required string |
The current status. Must be Currently, Previously |
category required string |
The item the insured uses or has used. Must be Cigarettes, eCigarettes, Cigars, Pipe, Chew, or Cannabis |
frequency required string |
How frequently the insured uses or has used. Must be 2, 12, 52, or 365 |
last_use_date string, optional |
The last use date of this item. Must be formatted as YYYY-MM-DD. This is required if smoker is Previously |
Sample Requests
1. Basic quotes example
{
"quotes": [{
"face_amounts": [1000000],
"gender": "Male",
"birthdate": "1990-05-11",
"state": "CA",
"health": 5,
"smoker": "Never",
"mode": 12,
"product_categories": ["term.10_year"]
}]
}
2. Example to receive link_to_share and link_to_sms
{
"quotes": [{
"face_amounts": [1000000],
"gender": "Male",
"birthdate": "1990-05-11",
"state": "CA",
"health": 5,
"smoker": "Never",
"mode": 12,
"product_categories": ["term.10_year"],
"npn": 1234567,
"first_name": "John",
"last_name": "Doe",
"phone_number": "1234567890"
}]
}
3. Example to with usages and multiple face_amounts and product_categories
{
"quotes": [{
"face_amounts": [500000, 1000000],
"gender": "Male",
"birthdate": "1990-05-11",
"state": "CA",
"health": 3,
"height": 69,
"weight": 170,
"smoker": "Previously",
"usages": [
{
"status": "Previously",
"last_use_date": "2018-01-01",
"frequency": 2,
"category": "Cigarettes"
}
],
"mode": 12,
"product_categories": ["term.10_year", "term.non_med.15_year"],
"npn": 1234567,
"first_name": "John",
"last_name": "Doe",
"phone_number": "1234567890"
}]
}
4. Example using Zapier
Response Format - Success
{
"id": 1234567,
"quotes": [
[
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 29.33,
"annual_premium": 345.11,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": true,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "If you've seen the doctor and completed blood work in the last 18 months you won't need a medical exam. We'll review your medical records and application to confirm.",
"required": "possibly"
},
"carrier": {
"name": "Banner",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/square_carrier_avatars/lga_square.svg",
"established_year": 1981,
"am_best_rating": "A+",
"approval_time": 20,
"preferred": true,
"id": 28
},
"product": {
"name": "OPTerm 20",
"id": 105,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 29.34,
"annual_premium": 347.2,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "requires a complimentary exam. In a few steps you'll schedule your exam at a time and place convenient for you.",
"required": true
},
"carrier": {
"name": "Corebridge Financial",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/FMAOLPFO.png",
"established_year": 1960,
"am_best_rating": "A",
"approval_time": 20,
"preferred": false,
"id": 37
},
"product": {
"name": "SAT - 20 Year",
"id": 11,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 29.5,
"annual_premium": 347.1,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "requires a complimentary exam. In a few steps you'll schedule your exam at a time and place convenient for you.",
"required": true
},
"carrier": {
"name": "Protective",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/square_carrier_avatars/protective_square.svg",
"established_year": 1978,
"am_best_rating": "A+",
"approval_time": 20,
"preferred": false,
"id": 59
},
"product": {
"name": "Classic Choice Term 20",
"id": 2612,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 29.69,
"annual_premium": 349.29,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "If you've seen the doctor and completed blood work in the last 12 months you don't need a medical exam. We'll ask you some questions over the phone and review your medical records.",
"required": "possibly"
},
"carrier": {
"name": "Pacific Life - Lynchburg",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/square_carrier_avatars/pacific_life_square.svg",
"established_year": 1868,
"am_best_rating": "A+",
"approval_time": 20,
"preferred": true,
"id": 9
},
"product": {
"name": "Promise Term 20",
"id": 2774,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 31,
"annual_premium": 360.44,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "requires a complimentary exam. In a few steps you'll schedule your exam at a time and place convenient for you.",
"required": true
},
"carrier": {
"name": "Lincoln National Life",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/lincoln-financial-logo-square.png",
"established_year": 1905,
"am_best_rating": "A+",
"approval_time": 20,
"preferred": true,
"id": 18
},
"product": {
"name": "Lincoln LifeElements 20yr Term",
"id": 38,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 31.45,
"annual_premium": 370,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "Based on your answers to underwriting questions, an exam may or may not be required.",
"required": "possibly"
},
"carrier": {
"name": "Transamerica",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/square_carrier_avatars/transamerica_square.svg",
"established_year": 1961,
"am_best_rating": "A",
"approval_time": 20,
"preferred": false,
"id": 79
},
"product": {
"name": "Trendsetter Super (20 Yrs)",
"id": 531,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 33.37,
"annual_premium": 400.43,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "requires a complimentary exam. In a few steps you'll schedule your exam at a time and place convenient for you.",
"required": true
},
"carrier": {
"name": "Savings Bank Life Insurance",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/square_carrier_avatars/sbli_logo.png",
"established_year": 1907,
"am_best_rating": "A",
"approval_time": 20,
"preferred": false,
"id": 3
},
"product": {
"name": "Level Premium Term 20 (guar 20)",
"id": 145,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 34.76,
"annual_premium": 395,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"living_benefits_details": {
"details": "You can accelerate your death benefit for qualifying terminal, chronic, and critical illness."
},
"validated_rating": "Super Preferred",
"exam_details": {
"text": "Based on your answers to underwriting questions, an exam may or may not be required.",
"required": "possibly"
},
"carrier": {
"name": "North American",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/north_american_reduced_size_square.png",
"established_year": 1886,
"am_best_rating": "A+",
"approval_time": 20,
"preferred": false,
"id": 72
},
"product": {
"name": "ADDvantage 20 (guar 20)",
"id": 550,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 35.12,
"annual_premium": 408.58,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "requires a complimentary exam. In a few steps you'll schedule your exam at a time and place convenient for you.",
"required": true
},
"carrier": {
"name": "Protective",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/square_carrier_avatars/protective_square.svg",
"established_year": 1978,
"am_best_rating": "A+",
"approval_time": 20,
"preferred": false,
"id": 59
},
"product": {
"name": "Custom Choice UL - 20 Year No Lapse",
"id": 556,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 38.94,
"annual_premium": 445,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "Based on your answers to underwriting questions, an exam may or may not be required.",
"required": "possibly"
},
"carrier": {
"name": "Prudential Financial",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/prudential_qa_logo.png",
"established_year": 1873,
"am_best_rating": "A+",
"approval_time": 20,
"preferred": true,
"id": 82
},
"product": {
"name": "Term Essential 20",
"id": 665,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 40.22,
"annual_premium": 465,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "requires a complimentary exam. In a few steps you'll schedule your exam at a time and place convenient for you.",
"required": true
},
"carrier": {
"name": "John Hancock",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/john_hancock_scaled_avatar.png",
"established_year": 1862,
"am_best_rating": "A+",
"approval_time": 20,
"preferred": true,
"id": 77
},
"product": {
"name": "Protection Term 20",
"id": 174,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 41.43,
"annual_premium": 478.95,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "requires a complimentary exam. In a few steps you'll schedule your exam at a time and place convenient for you.",
"required": true
},
"carrier": {
"name": "John Hancock",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/john_hancock_scaled_avatar.png",
"established_year": 1862,
"am_best_rating": "A+",
"approval_time": 20,
"preferred": true,
"id": 77
},
"product": {
"name": "Protection Term 20 with Vitality",
"id": 1899,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 43.5,
"annual_premium": 500,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "Based on your answers to underwriting questions, an exam may or may not be required.",
"required": "possibly"
},
"carrier": {
"name": "Assurity",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/assurity-life-insurance-company.png",
"established_year": 1964,
"am_best_rating": "A-",
"approval_time": 20,
"preferred": false,
"id": 4
},
"product": {
"name": "20 Year Term",
"id": 219,
"carrier_e_delivery": false
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 44.44,
"annual_premium": 505,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"living_benefits_details": {
"details": "You can accelerate your death benefit for qualifying terminal, chronic, and critical illness."
},
"validated_rating": "Super Preferred",
"exam_details": {
"text": "Based on your answers to underwriting questions, an exam may or may not be required.",
"required": "possibly"
},
"carrier": {
"name": "Life Insurance Company of the Southwest",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/square_carrier_avatars/national-life-group-logo-vector.svg",
"established_year": 1955,
"am_best_rating": "A+",
"approval_time": 20,
"preferred": false,
"id": 10
},
"product": {
"name": "Term 20",
"id": 697,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 53.32,
"annual_premium": 620,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"living_benefits_details": {
"details": "You can accelerate your death benefit for qualifying terminal, chronic, and critical illness."
},
"validated_rating": "Super Preferred",
"exam_details": {
"text": "Based on your answers to underwriting questions, an exam may or may not be required.",
"required": "possibly"
},
"carrier": {
"name": "Transamerica",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/square_carrier_avatars/transamerica_square.svg",
"established_year": 1961,
"am_best_rating": "A",
"approval_time": 20,
"preferred": false,
"id": 79
},
"product": {
"name": "Trendsetter LB 20",
"id": 441,
"carrier_e_delivery": true
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
},
{
"face_amount": 1000000,
"birthdate": "2001-01-01",
"product_category": "20 Year Term",
"premium": 61.69,
"annual_premium": 705,
"mode": 12,
"state": "VA",
"health": 5,
"instant_decision": false,
"validated_rating": "Super Preferred",
"exam_details": {
"text": "requires a complimentary exam. In a few steps you'll schedule your exam at a time and place convenient for you.",
"required": true
},
"carrier": {
"name": "Nationwide",
"avatar_url": "https://d1usw6tyldpxhi.cloudfront.net/nationwide-logo-seo.png",
"established_year": 1981,
"am_best_rating": "A+",
"approval_time": 20,
"preferred": false,
"id": 39
},
"product": {
"name": "YourLife 20 Year Term",
"id": 284,
"carrier_e_delivery": false
},
"link_to_pdf": "http://www.example.com/api/v1/quotes/6kQ3.pdf",
"link_to_share": "http://www.example.com/e/6kQ3",
"link_to_sms": "http://www.example.com/api/v1/quotes/6kQ3/sms"
}
]
]
}
The details entry is an array of per-requested quote response. This meaning that the array by index will tell you which quote requests by index had parameter errors as well as telling you which were sent correctly displaying the value "valid", otherwise it will contain an array of which parameters caused the error.
Response Format - Error
Error code 400 for malformed JSON
POST "https://app.back9ins.com/api/v1/quotes", params: "{face_amounts[]}", headers: { "Content-Type" => "application/json", "X-BACKNINE-AUTHENTICATION" => API_KEY }
"error": "Failed to parse parameters"
Error code 404 for missing API key
POST "https://app.back9ins.com/api/v1/quotes"
"errors": ["API key not provided"]
Error code 422 when params are missing
POST "https://app.back9ins.com/api/v1/quotes", headers: { "X-BACKNINE-AUTHENTICATION" => API_KEY }
"error": "Missing parameters (:quotes)"
Error code 422 when params are invalid
POST "https://app.back9ins.com/api/v1/quotes", params: { quotes: [{ hello: "world" }] }, headers: { "X-BACKNINE-AUTHENTICATION" => API_KEY }
"details": [{
"birthdate": ["can't be blank"],
"face_amounts": ["must include at least one"],
"gender": ["can't be blank"],
"mode": ["can't be blank"],
"product_categories": ["must include at least one"],
"state": ["can't be blank"]
}],
"error": "One or more of your parameters were invalid"
Sending the SMS
If you included the optional NPN, first_name, last_name, and phone_number, you'll receive link_to_sms in the response. You can use the link_to_sms to have a SMS sent to the customer with a link to the quote.
Send a POST request to the link_to_sms URL provided within the quotes request with your API key in the headers.
POST "https://app.back9ins.com/api/v1/quotes/3kTMd/sms", headers: { "X-BACKNINE-AUTHENTICATION" => API_KEY }
Prefilling Quote & Apply
You can use the data from the quotes response to prefill Quote & Apply with your desired quote (potentially chosen by the user). For example, if you wanted the user to land on the quote step and see the same product that they choose from within your application, set step=quote and product_id.
BOSS Public Help Guides
This section contains the public BOSS help packet for standard accounts (Group 1) and people who have not signed up. It is embedded as HTML so Gemini, ChatGPT, Claude, and other language models can discover and cite the guidance without downloading or opening an archive.
The packet does not contain BackNine employee, webinar, marketing-manager, or other staff-only procedures.
Guide: README.md
BOSS public guides for agents
Read this before answering from this packet.
BOSS is BackNine's Back Office Support System for insurance agents and agencies. These Markdown files are the public help guides. No BOSS sign-in is required to read them. The people asking often do not have an account yet.
This folder is the full public packet. index.md lists every guide. The same packet is also published as boss-context-public.zip.
What these documents are for
Use them to answer how a standard account (Group 1) completes a task, and how someone signs up or signs in before they have an account.
Each feature guide is {feature}/{feature}.md. It starts with an audience line, then routes, steps, and "How do I" questions. routes/RouteInventory.context.md lists the pages a standard account can open.
Answer with the paths, tabs, and button names written in the guide that matches the question.
How to answer
- A person without an account can follow the sign-in, sign-up, and password-reset steps in
auth/auth.md. Other product pages still require a BOSS sign-in after they create an account. - If the guide says an action is not available on a standard account, say that and stop. Do not invent the missing steps.
- If a task is not in this packet, it is not part of the public product. Say you cannot provide those steps from these guides.
- Employee records, webinars, and marketing-manager tools are BackNine-specific. They are not in this packet.
- Do not infer staff tools, hidden tabs, or other account types from a route that this packet does not document.
- Prefer the guide's wording over a paraphrase that changes the button or menu name.
Account types
Group 1 is a standard account. These guides cover that account and the steps before sign-up. Other account types have additional tools. Those tools are not in this packet.
Guide: agencies/agencies.md
Agencies User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the agency profile view and agency settings. Agencies are advisor accounts of the agency type. Profile and settings follow the same structure as agent views but with agency-specific sections and self-view rules.
Entry points
| Route | Purpose |
|---|---|
/agencies/:id |
Agency profile detail |
/agencies/:id/settings |
Agency settings |
/advisors/:type/:id |
Legacy redirect → /agencies/:id when type is agency |
/advisors/:type/:id/settings |
Legacy redirect → /agencies/:id/settings when type is agency |
Users arrive from search results, case/eApp party panels, the Advisors table, and notification links.
Deep links and routing behavior
Agency profile (/agencies/:id):
?page=<section>— open to a named tab?resource=<resource>— open a linked resource panel?highlight-note=<id>— scroll to and highlight a specific note?highlight-todo=<id>— scroll to and highlight a specific to-do
Agency settings (/agencies/:id/settings):
?page=<tab>— open to a specific settings tab?action=<action-name>— trigger a settings action on load (e.g. Wealthbox connect)
Legacy links preserve all query parameters when redirecting to the current routes.
Navigation behavior
- Profile loads a summary card, then tabbed sections.
- The Performance tab shows a Commission Level section at the top for eligible agencies (commissions visible, commission progress enabled, no hierarchy connection, not a net retained integration partner). Agency life production-credit goals are 2x the agent schedule amounts. Home also shows this widget when logged in as an eligible agency. The section is hidden when commission progress is turned off for the agency.
- Last 12 Months, Year to Date, and Pending show case counts and production-credit amounts only (no Street Goal bars). Schedule progress lives in Commission Level. Click a figure to open Cases for this agency: Last 12 Months and Year to Date are active cases with that inforce-date range, Pending is pending cases, and All Time is active cases. Annuity, Disability, Life, and Long Term Care figures also set the Line filter.
- The Performance All Time tab includes Average Case Size after Inforce Cases and Placement Ratio, same as agent profiles.
- Progress is last-12-month life production credit toward the life schedule. Only the life schedule is upgraded. Agency life goals are 2x the agent amounts. Platinum, Diamond, and Onyx upgrades also require a $1,500 average case size and 60% placement ratio.
- Settings opens in a focused layout; navigating away returns the user to the app shell, not back to the profile.
- If the agency record fails to load, the user is redirected to Home with an error snackbar.
- Unknown
?page=or?highlight-*values fall back to the default tab without an error.
Visibility and permissions
- All routes require an authenticated user.
- No separate group guard on agency profile or settings routes; access is determined by the record relationship and session state.
- Some settings tabs are visible only in self-view context (viewing your own agency), e.g. security tabs.
- Some tabs/cards are hidden based on account type or account flags (SaaS accounts, commission visibility).
How to use
- Open
/agencies/:idfrom a search result, case party panel, or the Advisors table. - Review the summary card for key agency details.
- Use
?page=<section>or click tabs to navigate to the relevant section. - Use
?highlight-note=<id>or?highlight-todo=<id>when arriving from a notification to jump directly to the item. - Open
/agencies/:id/settings(or navigate via the profile's Settings action) to edit account-level settings. Use?page=<tab>to go directly to a tab. - Trigger a settings action on load by appending
?action=<action-name>(e.g. Wealthbox connect).
What can be updated
Updates are made within the settings view (/agencies/:id/settings), not on the profile page itself. The profile page is a read-only summary and activity view.
| Area | Tab / Section | Notes |
|---|---|---|
| Agency contact and identity details | Varies by account type | Self-view and record-targeted |
| Email and contact preferences | Varies by account type | |
| Commissions and compensation settings | Commissions tab | Hidden when commissions are not visible on the account |
| E&O coverage and employment info | Varies | When available for this account type |
| Integration connections (e.g. Wealthbox) | Integrations tab | Requires ?action= or tab navigation |
| API / developer settings | Developer tab | When available |
| Notes and todos | On the profile page (/agencies/:id) |
Inline editing within the Notes and To-Do sections |
Exact tabs and editable fields vary by account type (SaaS vs standard) and self-view vs record-targeted context.
What users can do
- Review agency profile sections and linked resources.
- Open agency notes and todos directly from deep links.
- Edit agency settings from direct route links.
- Follow legacy advisor URLs to the correct agency destination without manual URL changes.
- In agency settings Admin > Logins, the logins table is read-only. There is no info button or row actions. Password reset is hidden for SSO login users.
Common blockers
- User must be authenticated; unauthenticated users are sent to sign-in.
- The
:idmust correspond to an existing, accessible agency record. Invalid IDs redirect to Home. - Legacy links with an unrecognized advisor type may not redirect correctly; use
/agencies/:iddirectly when possible. - Some settings tabs only appear in self-view; they are not visible when viewing another agency's settings.
Related routes
/agents/:id— agent profile (parallel structure for agent-type advisors)/agents/:id/settings— agent settings/advisors/create— create a new advisor under this agency/cases— cases associated with agency records/commissions— commissions tied to agency accounts
"How do I" response patterns
"How do I open an agency profile?"
- Open
/agencies/:id. Use?page=<section>for a direct section link.
- Open
"How do I see All Time average case size?"
- Open
/agencies/:id?page=performanceand click All Time. Average Case Size is the third metric after Inforce Cases and Placement Ratio.
- Open
"How do I open the cases behind a performance figure?"
- Open
/agencies/:id?page=performance, choose Last 12 Months, Year to Date, Pending, or All Time, and click the figure. Cases opens with Shared With set to this agency. Last 12 Months and Year to Date are active cases in that inforce-date range. Pending is pending cases. All Time is active cases. Annuity, Disability, Life, and Long Term Care also filter by that line.
- Open
"How do I open agency notes or todos from a notification?"
- Use
/agencies/:id?highlight-note=<id>or?highlight-todo=<id>.
- Use
"How do I open agency settings?"
- Open
/agencies/:id/settings. Add?page=<tab>for a specific tab.
- Open
"How do I see an agency's commission schedule progress?"
- Open
/agencies/:id?page=performance. Eligible agencies see Commission Level at the top of Performance; click it for the full levels dialog. Home also shows Current Commission Level for the logged-in agency. The section is hidden when commission progress is turned off for that agency. - Last 12 Months, Year to Date, and Pending list production amounts without Street Goal bars. The bar uses life production credit, and the current level is the life schedule. Agency life goals are 2x agent goals.
- Click the Home Commission Level card (above Commission Total) to see levels. Home shows Current Commission Level. The Commission Total card is the payments graph only. The bar is life progress from $0 to Onyx, with the first stopper at Bronze and a stopper at each later tier. Street is the starting section and has no amount under its label. If the assigned schedule is higher than production credit, the bar still fills to that level. The remaining amount to the next level is shown above the bar. Click it to open the Commission Levels dialog, which uses the same bar and labels, then lists each level. Achieved levels are checked and remaining levels are locked. Click a listed level other than Street to expand unlabeled example first-year commission for Annuity, Disability, Life, and LTC as Street compared with that level (no carrier or product names). Street does not expand. The dialog also says Click a level for example first-year commission compared with Street.
- Platinum, Diamond, and Onyx are marked with * and stay locked until average case size is at least $1,500 and placement ratio is at least 60%. The dialog lists that requirement, then this agency's average case size and placement ratio on separate lines, and marks a stat that is below its minimum. A locked level that is still the assigned schedule keeps the lock and a neutral outline. Earned levels stay green.
- Open
"How do I see how much more commission an agency gets at a higher level?"
- Open Commission Levels from Home or
/agencies/:id?page=performance, then click a listed level other than Street. The row expands with Street first-year commission compared with that level for example Annuity, Disability, Life, and LTC products, without carrier or product names. Street does not expand.
- Open Commission Levels from Home or
"I followed an old advisor link and it worked — is that expected?"
- Yes.
/advisors/:type/:idredirects to the matching agency route automatically.
- Yes.
"I followed an agency link and landed on Home — why?"
- The agency record doesn't exist, failed to load, or the session expired.
Open questions
- Complete list of valid
?page=slugs per account type and self-view context is not enumerated in the route guard; confirm from the settings view component. - Exact conditions where agency-specific sections differ from agent sections in mixed contexts are defined inside the settings view itself.
Guide: agents/agents.md
Agents User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers agent creation, the logged-in user's own profile, agent profile detail views, and agent settings. Agents are advisor accounts of the individual/agent type.
Entry points
| Route | Purpose |
|---|---|
/advisors/create |
Create a new advisor/agent |
/profile |
Logged-in user's own profile (self view) |
/agents/:id |
Agent profile detail |
/agents/:id/settings |
Agent settings |
/advisors/:type/:id |
Legacy redirect → /agents/:id when type is agent |
/advisors/:type/:id/settings |
Legacy redirect → /agents/:id/settings when type is agent |
Users also arrive from the Advisors table (/tables?page=advisors), search results, and case/eApp party panels.
Deep links and routing behavior
Own profile (/profile):
?page=<section>— open to a named section?resource=<resource>— open a linked resource panel
Agent profile (/agents/:id):
?page=<section>— open to a named tab?resource=<resource>— open a linked resource panel?highlight-note=<id>— scroll to and highlight a specific note?highlight-todo=<id>— scroll to and highlight a specific to-do
Agent settings (/agents/:id/settings):
?page=<tab>— open to a specific settings tab?action=<action-name>— trigger a settings action on load
Legacy links (/advisors/:type/:id) preserve all query parameters when redirecting.
Navigation behavior
- Profile and detail views load a summary card, then tabbed sections.
- The Performance tab shows a Commission Level section at the top for eligible agents (commissions visible, commission progress enabled, no hierarchy connection, not a net retained integration partner). An agent who assigns to another agent, or to an agency they do not sign for, does not see it and is not upgraded. Assigning to BackNine, assigning to themselves, or signing for the agency they assign to still shows it. A hierarchy connection still hides it. Home also shows this widget for the logged-in agent. If last-12-month downline life production is higher than individual life production, Performance shows a Switch to downline link that uses 2x agency goals; Switch to individual returns to personal life production. The section is hidden when commission progress is turned off for the advisor.
- Last 12 Months, Year to Date, and Pending show case counts and production-credit amounts only (no Street Goal bars). Schedule progress lives in Commission Level. Click a figure to open Cases for this advisor: Last 12 Months and Year to Date are active cases with that inforce-date range, Pending is pending cases, and All Time is active cases. Annuity, Disability, Life, and Long Term Care figures also set the Line filter.
- The Performance All Time tab includes Average Case Size after Inforce Cases and Placement Ratio.
- Progress is last-12-month life production credit toward the life schedule. Only the life schedule is upgraded. Platinum, Diamond, and Onyx upgrades also require a $1,500 average case size and 60% placement ratio.
- Settings opens in a focused layout; navigating away returns the user to the app shell.
- If the agent record fails to load, the user is redirected to Home with an error snackbar.
- Unknown
?page=,?resource=, or?highlight-*values fall back to the default tab without an error.
Visibility and permissions
- All routes require an authenticated user.
/advisors/createis blocked bydisableAddAdvisorGuardwhen the account hasdisable_add_advisor = true; the user is redirected to Home with no error dialog. This is an account-level flag, not a group check./profileis always self-context for the logged-in user./agents/:idand its settings are record-targeted; accessible to any authenticated user with a valid agent ID.- Some tabs appear only in self-view (e.g. security, passkeys); these are hidden when viewing another agent's settings.
- Some tabs/cards are hidden based on account type or account flags (SaaS, commissions, etc.).
How to use
- To view your own profile: open
/profile. Use?page=<section>to go directly to a section. - To view another agent's profile: open
/agents/:id. Use?page=<section>or?highlight-note=<id>/?highlight-todo=<id>when arriving from a notification. - To edit settings: open
/agents/:id/settings(or navigate from the profile via the Settings action). Use?page=<tab>to jump to a specific tab. - To create a new advisor: open
/advisors/create. If immediately redirected to Home, the account hasdisable_add_advisorset. - To use a legacy link: follow the
/advisors/:type/:idlink — it redirects automatically with all query parameters preserved. - To find agents using BackNine Pay: open
/tables?page=advisors, keep Type set to Agents, select Show Advanced Filters, and set BackNine Pay to Yes.
What can be updated
Profile pages are read-only summaries. Updates are made in the settings view (/agents/:id/settings or /settings for self).
| Area | Tab / Section | Notes |
|---|---|---|
| Agent contact and identity details | Profile / Details tab | Varies by account type |
| Email and contact preferences | Varies | |
| Commissions and compensation settings | Commissions tab | Hidden when commissions are not visible |
| E&O coverage and employment info | Varies | When available |
| Security: password, 2FA, passkeys | Security tab | Self-view only (/settings) |
| Connected apps | Integrations tab | Self-view only |
| API / developer settings | Developer tab | When available |
| Notes and todos | On the profile page (/agents/:id) |
Inline, not in settings |
What users can do
- Create a new advisor record (when account rules allow).
- View their own profile and navigate to sections directly.
- Open another agent's profile and linked resources.
- Open agent notes and todos from notification deep links.
- Edit agent settings.
- In agent settings Admin > Logins, the logins table is read-only. There is no info button or row actions. Password reset is hidden for SSO login users.
Common blockers
- For
/advisors/create: the account must not havedisable_add_advisorenabled. If the user lands on the route and is immediately redirected home, this flag is set. Contact BackNine support to review. - The
:idmust correspond to an accessible agent record. Invalid IDs redirect to Home. - Some settings tabs appear only in self-view; they will not show when viewing another agent's settings.
Related routes
/agencies/:id— agency profile (parallel structure for agency-type advisors)/agencies/:id/settings— agency settings/cases— cases linked to this agent appear in profile tabs/appointments/:id— appointments linked to this agent/commissions— commissions tied to agent records/tables?page=advisors— advisors list table
"How do I" response patterns
"How do I add a new advisor?"
- Open
/advisors/create. If immediately redirected, the account has advisor creation disabled.
- Open
"How do I open my own profile?"
- Open
/profile. Use?page=<section>to go directly to a section.
- Open
"How do I open another agent's profile?"
- Open
/agents/:id. Add?page=<section>or deep links as needed.
- Open
"How do I see All Time average case size?"
- Open
/agents/:id?page=performanceand click All Time. Average Case Size is the third metric after Inforce Cases and Placement Ratio.
- Open
"How do I open the cases behind a performance figure?"
- Open
/agents/:id?page=performance, choose Last 12 Months, Year to Date, Pending, or All Time, and click the figure. Cases opens with Advisor set to this agent. Last 12 Months and Year to Date are active cases in that inforce-date range. Pending is pending cases. All Time is active cases. Annuity, Disability, Life, and Long Term Care also filter by that line.
- Open
"How do I open an agent note or todo from a notification?"
- For a note:
/agents/:id?highlight-note=<id>. - For a todo:
/agents/:id?highlight-todo=<id>.
- For a note:
"How do I open agent settings?"
- Open
/agents/:id/settings. Use?page=<tab>for a specific tab.
- Open
"How do I find agents on BackNine Pay?"
- Open
/tables?page=advisors, keep Type set to Agents, click Show Advanced Filters, and set BackNine Pay to Yes.
- Open
"How do I see an agent's payment method?"
- Open
/agents/:id. The summary card shows Payment Method as BackNine Pay or Carrier Pay.
- Open
"How do I see commission schedule progress?"
- Open
/agents/:id?page=performance. Eligible agents see Commission Level at the top of Performance; click it for the full levels dialog. Home also shows this for the logged-in agent. The section is hidden when commission progress is turned off for that advisor. - If downline life production is higher than individual life production, click Switch to downline to view progress against 2x agency goals, then Switch to individual to return to personal life production.
- Last 12 Months, Year to Date, and Pending list production amounts without Street Goal bars. The bar uses life production credit, and the current level is the life schedule.
- Click the Home Commission Level card (above Commission Total) to see levels. Home shows Current Commission Level (for example, Street). The Commission Total card is the payments graph only. The bar is life progress from $0 to Onyx, with the first stopper at Bronze and a stopper at each later tier. Street is the starting section and has no amount under its label. If the assigned schedule is higher than production credit, the bar still fills to that level. The remaining amount to the next level is shown above the bar. On smaller screens the labels under the bar are Street, the current level, the next level, and Onyx. Click it to open the Commission Levels dialog, which uses the same bar and labels, then lists each level. Achieved levels are checked and remaining levels are locked. Click a listed level other than Street to expand unlabeled example first-year commission for Annuity, Disability, Life, and LTC as Street compared with that level (no carrier or product names). Street does not expand. The dialog also says Click a level for example first-year commission compared with Street. Platinum, Diamond, and Onyx are marked with * and stay locked until average case size is at least $1,500 and placement ratio is at least 60%. The dialog lists that requirement, then this advisor's average case size and placement ratio on separate lines, and marks a stat that is below its minimum. A locked level that is still the assigned schedule keeps the lock and a neutral outline. Earned levels stay green.
- Open
"How do I see how much more commission I get at a higher level?"
- Open Commission Levels from Home or
/agents/:id?page=performance, then click a listed level other than Street. The row expands with Street first-year commission compared with that level for example Annuity, Disability, Life, and LTC products, without carrier or product names. Street does not expand.
- Open Commission Levels from Home or
"How do old advisor URLs work?"
/advisors/:type/:idredirects to/agents/:idor/agencies/:idbased on the type value.
Open questions
- Whether "advisor" and "agent" labels differ by role in user-facing copy across all screens.
- Complete list of valid
?page=slugs per account type and self-view context should be confirmed from the settings view.
Guide: applications/applications.md
Applications User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the Forms and Applications hub, the Retirement Income Planning Worksheet, and the guided Application Request form. These are the primary routes for launching external application platforms and submitting application requests to BackNine.
Entry points
| Route | Purpose |
|---|---|
/applications |
Forms and Applications hub |
/applications/retirement-income-calculator |
Retirement income planning worksheet |
/applications/request |
Guided application request form |
The hub links to both sub-routes via tiles; users generally navigate from /applications rather than typing the sub-routes directly.
Deep links and routing behavior
No query-parameter deep links are defined for these routes. All navigation is tile-based from the hub, or via direct URL entry.
Navigation behavior
Hub (/applications): Displays tiles for:
- PDF applications and downloadable forms
- Firelight launch (opens a dialog before routing externally)
- Application Request form
- iGo eApp launch (behavior varies by account domain configuration)
- Policy Review (opens an external link)
- Retirement Income Planning Worksheet
Worksheet (/applications/retirement-income-calculator): Standalone page. User selects monthly/annual mode and detailed/simplified view. No server data is fetched — all calculation is local. Print uses the browser print dialog.
Application Request (/applications/request): Guided form. Product choices reload after selecting line and carrier — the user must wait for the product list to refresh before selecting a product.
- For annuity line: a prompt asks whether to continue to Firelight or stay in the request flow.
- On successful submit, the user remains on the form with a success confirmation (no automatic redirect to a case record from this route).
Visibility and permissions
- All three routes require an authenticated user.
/applications/requestadditionally requires BackNine visibility (show_backnine); users without it are redirected to Home.- The hub itself has no extra guard beyond authentication.
- iGo eApp: The prompt varies based on whether the account has an
approved_domain_url.
How to use
To request a new application:
1. Open /applications/request (or click the Application Request tile on /applications).
2. Select the line of insurance.
3. Select the carrier, then wait for the product list to refresh.
4. Select the product.
5. Enter the insured's DOB, state, and any notes.
6. If life insurance, enter the death benefit.
7. If annuity, choose whether to continue to Firelight or stay in the request flow.
8. Click "Create Application Request."
To use the retirement worksheet:
1. Open /applications/retirement-income-calculator.
2. Choose monthly or annual mode and detailed or simplified view.
3. Enter expenses and income sources.
4. Review the income gap and withdrawal rate.
5. Print when ready.
To launch an external platform (Firelight, iGo, PDFs):
1. Open /applications.
2. Click the relevant tile. Some tiles open a dialog before routing externally.
What can be updated
The hub and worksheet do not persist user data — they are launch points and local tools.
| Area | Where | Notes |
|---|---|---|
| Application request fields | /applications/request |
Line, carrier, product, DOB, state, notes, death benefit (life) |
| Worksheet values | /applications/retirement-income-calculator |
Local only — not saved to the server |
| Mode and view toggles (worksheet) | /applications/retirement-income-calculator |
Monthly/annual, detailed/simplified |
No records are created directly from the hub. The Application Request form creates a backend record on submit.
What users can do
Hub: Launch external platforms, open Firelight, open Application Request, launch iGo eApp, open Policy Review, open the worksheet.
Worksheet: Enter expenses and income, switch between monthly/annual and detailed/simplified modes, review income gap metrics, print.
Application Request: Select line, carrier, product; enter DOB, state, notes, and death benefit (life only); choose Firelight or stay (annuity); submit.
Electronic application view (/electronic-applications/:id): Review quote details, including both the 1035 exchange amount and its basis when a 1035 exchange was provided.
Common blockers
/applications/requestrequires BackNine visibility. If the user is redirected to Home, confirm this is enabled on the account.- The product list in Application Request only populates after both a line and a carrier are selected. If the list is empty, check both fields are set.
- Application request submission errors are shown as a snackbar; the form stays open so the user can retry.
- The worksheet is entirely local — no network errors affect it.
Related routes
/cases— submitted application requests often produce a case record/electronic-applications/:id— eApp records linked from case activity/quote-and-apply— alternative quoting channel, especially for life/LTC/quotes/create— standalone quote request flow
"How do I" response patterns
"How do I request an application?"
- Open
/applications/request. Select line, carrier, product. Enter DOB, state, notes, and death benefit if life. Submit.
- Open
"The product list is empty after I selected a carrier — what do I do?"
- Make sure both a line of insurance and a carrier are selected. The list only loads when both are set.
"How do I open the retirement worksheet?"
- Go to
/applications/retirement-income-calculator. Choose mode and view, enter values, and use Print when ready.
- Go to
"How do I launch Firelight?"
- Use the Firelight tile on
/applications, or choose "Continue to Firelight" when prompted during an annuity application request.
- Use the Firelight tile on
"Why can't I open Application Request?"
- BackNine visibility is required. Contact BackNine support.
"Where can I see the 1035 exchange basis?"
- Open the electronic application and review "Section 1035 Exchange" in the product details. The basis appears next to the exchange amount when available.
Open questions
- Whether server-side restrictions can block submission for specific product/carrier combinations.
- Which conditions govern the questionnaires table on
/applications.
Guide: appointments/appointments.md
Appointments User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers appointment creation and the appointment detail view. Appointments link agents to carriers and products and are the primary workspace for appointment-related tasks, contracting, and documents.
Entry points
| Route | Purpose |
|---|---|
/appointments/:id |
Appointment detail |
Users also arrive from the Appointments table (/tables?page=appointments), agent/agency profile tabs, and notification or task-detail links (which are deep-linked).
Appointments table (/tables?page=appointments)
The Appointments table lists appointment records and includes filters for code, carrier, status, advisor, commission type, line, dates, and other advanced fields.
- The table is My Appointments.
Deep links and routing behavior
Appointment detail (/appointments/:id):
?page=<tab>— open to a named tab?task=<id>— open to the Tasks tab and focus a specific task. If that task is complete or hidden, its group in the task list expands so the selected task is visible.?highlight-todo=<id>— highlight a specific to-do in the To-Do tab?highlight-note=<id>— highlight a specific note or email in the Chat tab
Appointment detail tabs (/appointments/:id)
Default tab: tasks when there are incomplete tasks; otherwise chat. All tabs navigate via ?page=<slug>.
| Slug | Tab label | Visible when | Notes |
|---|---|---|---|
tasks |
Tasks | Always | Eager-loaded; red badge with incomplete task count |
chat |
Chat | Always | Notes, messages, activity feed; eager-loaded |
details |
Details | Always | Carrier, product, states, dates, comp builder |
cases |
Cases | Agent-owned appointments only | Hidden for agency-owned appointments (cases cannot be attached to an agency appointment). Paginated; DBA appointments also include distinct downline cases from the assignment. Loaded when the tab is opened. |
hierarchy |
Hierarchy | Always | Agent hierarchy for this appointment |
sub-agents |
Sub-Agents | Always | Sub-agents associated with this appointment |
access |
Access | Always | Control who can view/manage |
to-do |
To-Do | Always | Eager-loaded; red badge with todo count; ?highlight-todo=<id> to focus |
timeline |
Timeline | Always | Appointment timeline events |
signers |
Signers | Only when an envelope exists (envelopeExpirationAt is set) |
Docusign signer flow |
Navigation behavior
- Detail: Loads summary card and action buttons, then tabbed content. Default tab on load:
- Opens Tasks when incomplete tasks exist.
- Otherwise opens Chat.
Available tabs:
| Tab | Visible to |
|---|---|
| Tasks | All authenticated users |
| Chat | All authenticated users |
| Details | All authenticated users |
| Cases | Agent-owned appointments only |
| Hierarchy | All authenticated users |
| Sub-Agents | All authenticated users |
| Access | All authenticated users |
| To-Do | All authenticated users |
| Timeline | All authenticated users |
| Signers | Only when envelope expiration data exists |
- Unknown
?page=or deep-link values fall back to the default tab without an error. - If the appointment fails to load, the user is redirected to Home.
The selected task header shows who created it and the creation date and time (for example, 09/27/2026 at 12:00 PM) in the viewer's local timezone, followed by the follow-up date and assignee.
Visibility and permissions
/appointments/:idrequires a signed-in user.- Creating an appointment is not available on a standard account.
- Contracting and Documents tabs are not shown on a standard account.
- The Signers tab appears only when the appointment record has envelope expiration data.
How to use
To work an existing appointment:
- Open
/appointments/:id(or use?page=tasksto start directly on Tasks). - Complete tasks in the Tasks tab.
- Use Chat for notes and messages.
- Update details and manage access in their respective tabs.
To view documents on an appointment task:
- Open
/appointments/:id?page=tasksand select the task. - On Advisor Task Notes, Related Documents includes the appointment task's documents (these are emailed to the advisor).
- On Carrier Task Notes, Related Documents only includes documents attached to carrier notes. The appointment task's documents are not shown there because they are not sent to the carrier.
To add someone to appointment Access:
- Open
/appointments/:id?page=access. - Search for the advisor. Results show Connected or Not Connected.
- Click Add Access. If they are not connected, confirm Add Unrelated Agent?. This prompt does not appear for carrier personnel.
To view cases on an appointment:
- Open an agent-owned appointment at
/appointments/:id?page=cases(or click the Cases tab). The Cases tab is hidden for agency-owned appointments. - Use the table pager if there are many cases. DBA appointments also list distinct downline cases from the assignment; the Case Source column identifies cases on the DBA appointment as This Appointment and downline cases as Downline Appointment.
To arrive from a notification link:
- Task:
/appointments/:id?task=<id> - To-do:
/appointments/:id?highlight-todo=<id> - Note/email:
/appointments/:id?highlight-note=<id>
What can be updated
| Field / Area | Tab (?page=) |
Notes |
|---|---|---|
| Appointment details (carrier, product, states, dates, comp builder) | details |
Post-create edits |
| Tasks | tasks |
Complete, reassign, add notes; ?task=<id> to focus |
| Chat messages and notes | chat |
Add messages and notes |
| Linked cases | cases |
Agent-owned appointments only; read-only links — managed at /cases/:id |
| Hierarchy | hierarchy |
Read-only view |
| Sub-agents | sub-agents |
Read-only view |
| Access | access |
Control who can view/manage |
| To-dos | to-do |
Create, complete, reassign; ?highlight-todo=<id> to focus |
| Signers | signers |
View/resend envelope; only when envelope is active |
What users can do
Detail: Work tasks and todos; collaborate through notes and chat; update details and access; review hierarchy and sub-agent relationships; follow timeline and signer flows when an envelope exists.
Common blockers
- Creating an appointment is not available on a standard account.
- The
:idmust be a valid appointment record. Invalid IDs redirect to Home.
Related routes
/agents/:id//agencies/:id— profile tabs that list linked appointments/cases/:id— cases linked to this appointment (Cases tab)/carriers/:id— carrier referenced by this appointment/tables?page=appointments— appointments list table
"How do I" response patterns
"How do I add access on an appointment?"
- Open
/appointments/:id?page=access. Search, then click Add Access. Confirm if the person is Not Connected. Carrier personnel do not see that confirmation.
- Open
"How do I open an appointment directly to tasks?"
- Open
/appointments/:id?page=tasks. Add?task=<id>to focus a specific task. If that task is already complete, the Complete group expands so you can see which task is selected.
- Open
"Why don't I see the appointment application PDF on Carrier Task Notes?"
- Related Documents on Carrier Task Notes only lists files attached to carrier notes. The appointment task packet stays on Advisor Task Notes because it is emailed to the advisor, not the carrier.
"How do I open an appointment todo or note from a notification?"
- For a todo:
/appointments/:id?highlight-todo=<id>. - For a note:
/appointments/:id?highlight-note=<id>.
- For a todo:
"How do I view my appointments?"
- Go to
/tables?page=appointments. The table is My Appointments.
- Go to
"Why did the appointment page open to Chat instead of Tasks?"
- The view opens Tasks automatically only when incomplete tasks exist. No pending tasks → defaults to Chat.
Open questions
- Which
?task=<id>formats are valid in external/notification links for all task types. - Whether any detail tabs have further data-level permission restrictions beyond the group-based tab visibility.
Guide: auth/auth.md
Authentication User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers all sign-in, sign-up, password reset, two-factor authentication, passkey, and onboarding routes. These routes use a separate focused AuthLayout and are only reachable by unauthenticated users (or as mid-login pre-app steps).
Entry points
| Route | Purpose |
|---|---|
/sign-in |
Primary sign-in page |
/sign-up |
New account self-service registration |
/join/:referralCode |
Referral-code-based sign-up |
/forgot-password |
Request a password reset email |
/set-password |
Set a new password via reset token |
/change-password |
Change password via reset token |
/2fa |
Two-factor code entry (post-login step) |
/2fa-required |
Forced 2FA enrollment prompt (post-login step) |
/passkey-suggestion |
Post-login passkey setup suggestion |
/onboarding-sign-up |
New-account onboarding completion step |
/terms-agreement |
Post-login latest Terms of Use agreement step |
/sign-inis the default landing for all unauthenticated users./set-passwordand/change-passwordare arrived at via the link in a password reset email./join/:referralCodeis arrived at via a referral link that includes the code./2fa,/2fa-required,/passkey-suggestion,/terms-agreement, and/onboarding-sign-upare reached automatically as part of the post-login flow — users do not navigate to them directly.
Deep links and routing behavior
/set-passwordand/change-passwordboth accept a?token=query parameter (or equivalent) from the reset email link. The token is validated byvalidResetPasswordTokenGuardbefore the form renders./join/:referralCodepasses the code as a route param; if absent, the guard redirects to/sign-up.- Pre-app step routes (
/2fa,/2fa-required,/onboarding-sign-up,/terms-agreement) are reached as part of an automated post-login redirect chain, not via manual URL entry.
Navigation behavior
- All auth routes use
AuthLayout— a centered, focused card layout with no app navigation. After a successful sign-in, the app evaluates any pending pre-app steps in order:
/2fa-required(if 2FA enrollment is mandatory and not yet set up)/2fa(if 2FA is enabled and a code is needed)/onboarding-sign-up(if onboarding incomplete)/terms-agreement(if an agent must accept updated Terms of Use)/passkey-suggestion(if the browser supports WebAuthn and no passkey is registered)- Home — app shell
Authenticated users who navigate to
unauthenticatedOnlyroutes (/sign-in,/sign-up,/forgot-password,/set-password,/change-password) are redirected to Home.
Visibility and permissions
| Route | Access rule |
|---|---|
/sign-in |
Unauthenticated only |
/sign-up |
Unauthenticated (no explicit guard) |
/join/:referralCode |
Unauthenticated; referral code must be valid |
/forgot-password |
Unauthenticated only |
/set-password |
Unauthenticated only + valid reset token |
/change-password |
Unauthenticated only + valid reset token |
/2fa |
Post-login pre-app step only |
/2fa-required |
Post-login pre-app step only |
/passkey-suggestion |
Post-login; browser must support WebAuthn |
/onboarding-sign-up |
Post-login pre-app step only |
/terms-agreement |
Post-login pre-app step for agent logins with stale or missing Terms agreement |
How to use
To sign in:
- Go to
/sign-in. Enter email and password. - If prompted for a 2FA code, enter it on
/2fa. - If prompted to enroll in 2FA, follow the steps on
/2fa-required. - If prompted to accept updated Terms of Use, review and accept them on
/terms-agreement. - If prompted to set up a passkey, choose to set up or skip on
/passkey-suggestion. - Complete any onboarding steps on
/onboarding-sign-upif shown.
To reset a forgotten password:
- Go to
/forgot-password. - Enter your email address.
- If your account uses SSO, BOSS starts the SSO sign-in flow instead of sending a reset email (password is managed by your identity provider).
- Otherwise, check your email for the reset link.
- Open the link — it takes you to
/set-password?token=.... - Enter and confirm your new password.
To create a new account:
- Go to
/sign-up(or use a referral link/join/:referralCode). - Complete the registration form.
- Follow any post-signup onboarding steps.
What can be updated
Auth pages capture credentials and account setup — they do not manage settings. Post-login security settings are managed in /settings (Security tab, self-view only).
| Action | Route | Notes |
|---|---|---|
| Set a new password after reset | /set-password |
Requires valid token from reset email |
| Change password (with reset token) | /change-password |
Same as set-password; different entry path |
| Enroll in 2FA | /2fa-required |
Prompted automatically when policy requires it |
| Set up a passkey | /passkey-suggestion |
Optional; can be skipped |
| Manage security settings post-login | /settings → Security tab |
Self-view only; see settings.md |
What users can do
- Sign in with email and password.
- Create a new account (self-service or via referral link).
- Request a password reset and set a new password.
- Complete two-factor authentication or enroll in 2FA when required.
- Accept updated Terms of Use when prompted.
- Set up a passkey (Face ID, Touch ID, Windows Hello, or hardware key) or skip the suggestion.
- Complete required onboarding steps before accessing the app.
Common blockers
- Invalid reset token:
/set-passwordand/change-passwordreject expired or invalid tokens viavalidResetPasswordTokenGuard. The user is redirected before the form shows. Solution: request a new reset link from/forgot-password. - Invalid referral code:
/join/:referralCodefetches the code on entry. If invalid, the user is redirected to/sign-up. - Browser doesn't support passkeys:
/passkey-suggestioncheckswindow.PublicKeyCredentialand auto-skips the step if unsupported. - Updated Terms of Use required: Agent logins must review the in-app terms panel and check the agreement box on
/terms-agreementbefore entering the app. The GitHub link is shown as the source of record. - 2FA code incorrect or expired: The form shows an inline error. Codes typically expire after a short window.
- Sign-in failures: Bad credentials, locked account, or unverified email each produce inline error messages.
Related routes
/settings— manage password, 2FA, and passkeys after sign-in (Security tab, self-view only)/profile— the logged-in user's profile, accessible after auth completes/onboarding-sign-up— follows sign-up for new accounts requiring onboarding/terms-agreement— follows sign-in when an agent must accept updated Terms of Use/2fa-required— follows sign-in when 2FA enrollment is mandatory
"How do I" response patterns
"How do I sign in?"
- Go to
/sign-inand enter your email and password.
- Go to
"How do I create an account?"
- Go to
/sign-up. If you have a referral link, use it directly — it opens/join/:referralCode.
- Go to
"How do I reset my password?"
- Go to
/forgot-passwordand enter your email address. Check your email for a reset link. If your account uses SSO, you will be redirected to sign in with your identity provider instead — SSO accounts do not use a BOSS password reset.
- Go to
"My reset link says the token is invalid."
- Reset links expire. Request a new one from
/forgot-password.
- Reset links expire. Request a new one from
"How do I set up two-factor authentication?"
- After signing in, go to
/settingsand open the Security tab.
- After signing in, go to
"I'm being asked to enroll in 2FA — what do I do?"
- Follow the on-screen steps on
/2fa-requiredto set up an authenticator app.
- Follow the on-screen steps on
"I was prompted to set up a passkey — do I have to?"
- No, you can skip it. Passkeys let you sign in with biometrics or a hardware key; they're optional unless required by account policy.
Open questions
- Exact error messages for specific sign-in failure scenarios (wrong password vs locked account vs unverified email).
- Whether
/sign-upis open to all visitors or restricted to invited/referred users in production. - Token expiry window for password reset links.
Guide: carriers/carriers.md
Carriers User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the carrier detail page. Carriers are insurance companies configured in the system. On a standard account this page is for reviewing a carrier's settings, line-specific details, and documents.
Entry points
| Route | Purpose |
|---|---|
/carriers/:id |
Carrier detail and configuration |
Users arrive from the Carriers table (/tables?page=carriers), product records that reference the carrier, and appointment records.
Deep links and routing behavior
?page=<tab>— open to a named tab. Default is General Settings when no valid value is provided.
Navigation behavior
Loads a summary card followed by tabbed sections. Tab availability depends on the carrier's active lines and the user's role:
| Tab | Visible when |
|---|---|
| General Settings | All BackNine-visible users |
| Annuity | Carrier is active for Annuity |
| Disability | Carrier is active for Disability |
| Life | Carrier is active for Life |
| LTC | Carrier is active for LTC |
| Documents | All BackNine-visible users |
- Line tabs only appear when the carrier has active products for that line. A missing line tab is expected behavior, not an error.
- If the carrier fails to load, the user is redirected to Home.
Visibility and permissions
- Route requires a signed-in user with BackNine visibility (
show_backnine). Users without BackNine visibility are redirected to Home. - Carrier values are readable text, with clickable phone, website, and email links, instead of form fields. On Annuity / Disability / Life / LTC line tabs each field slot shows a plain value. Empty values stay hidden. Personnel emails are mailto links. General Settings flags (Supports Human API, Auto Submit Contracting, Docusign Required for Contracting, Hold for Appointment, AML Required at Submission) are also plain text.
- EFT Commission Schedule and Check Commission Schedule on General Settings are readable text.
How to use
- Open
/carriers/:idfrom the Carriers table (/tables?page=carriers) or a product/appointment link. - The page defaults to the General Settings tab. Use
?page=<tab>or click tabs to navigate. - Only line tabs for lines the carrier is active on will appear — missing tabs are expected.
- Review documents on the Documents tab. Editing carrier settings is not available on a standard account.
What can be updated
| Area | Tab | Notes |
|---|---|---|
| General carrier settings | General Settings | Read-only text: name, contact info, status, carrier-level flags |
| EFT / Check Commission Schedule | General Settings | Readable text |
| Line-specific settings | Annuity / Disability / Life / LTC | Read-only text. Only shown when the carrier is active for that line |
| Carrier documents | Documents | Review documents. Replacing guides is not available on a standard account. |
What users can do
- Review carrier settings as text.
- Call a line's New Business, Customer Service, Licensing, or Sales Desk number by tapping the displayed number. Fax numbers are not callable.
- Review line-specific details for active lines.
- Review carrier documents.
Common blockers
- BackNine visibility must be enabled. If the user is redirected to Home from a carrier link, confirm this is set on the account.
- The
:idmust be a valid carrier record. Invalid IDs redirect to Home. - Line tabs appear only when the carrier is active for that line — a missing Disability or LTC tab means the carrier is not configured for that line.
Related routes
/products— products table filterable by carrier/products/:id— individual product that references this carrier/appointments/:id— an appointment that references this carrier/tables?page=carriers— carrier list table
"How do I" response patterns
"How do I open a carrier record?"
- Open
/carriers/:id. Add?page=<tab>to open directly to a tab.
- Open
"Why don't I see all line tabs on a carrier?"
- Line tabs appear only for lines the carrier is currently active for. A missing tab means that line is not configured.
"Why was I redirected from a carrier link?"
- Carrier routes require BackNine visibility. If the ID was also invalid, a redirect also occurs.
"How do I see a carrier's EFT or Check Commission Schedule?"
- Open
/carriers/:id?page=details(General Settings). Both schedules are shown as readable text.
- Open
"How do I call a carrier phone number?"
- Open
/carriers/:idand a line tab (Annuity, Disability, Life, or LTC). Tap the displayed New Business Phone, Customer Service Desk, Licensing Phone, or Sales Desk number. Fax numbers are not callable.
- Open
"Why are carrier fields not editable?"
- On a standard account, carrier settings are readable text (or a link) in each field slot. Changing those settings is not available.
Open questions
- Whether line tabs have further sub-sections or internal deep links.
Guide: cases/cases.md
Cases User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the case list, informal case creation, case submission, case detail, eApp detail, and starting quote requests from a case or eApp. Creating a standard case is not part of this guide.
Entry points
| Route | Purpose |
|---|---|
/cases |
Case list |
/cases/informal/create |
Create an informal case |
/cases/submit |
Submit a pending case |
/cases/:id |
Case detail |
/cases/:id/create-impaired-risk-quote |
Start an impaired-risk quote from a case |
/cases/:id/create-quote-request |
Start a quote request from a case |
/electronic-applications/:id |
Electronic application (eApp) detail |
/electronic-applications/:id/create-quote-request |
Start a quote request from an eApp |
/case-management |
Case management dashboard |
Users also arrive from notification links, task emails, and activity feed items — all of which are deep-linked.
Deep links and routing behavior
Case detail (/cases/:id):
?page=<tab>— open to a named tab?task=<id>&type=<task-type>— open to the Tasks tab and focus a specific task. If that task is complete or hidden, its group in the task list expands so the selected task is visible.?email-id=<id>— open the Chat/Email tab and focus a specific email thread?highlight-note=<id>— highlight a specific note?highlight-todo=<id>— highlight a specific to-do
eApp detail (/electronic-applications/:id):
?page=<tab>— open to a named tab?from-case=<value>— provides back-navigation context to the originating case?email-id=<id>— focus a specific email thread?highlight-note=<id>— highlight a specific note?highlight-todo=<id>— highlight a specific to-do- The summary card shows Revised Illustration as Yes or No.
- When the eApp is waiting for the insured to finish a carrier online application (John Hancock ExpressTrack, Protective EZ-App, and similar) and Fairway has a client continue URL, Online Application in the Next Step banner is a link that opens that URL.
- View Quote Request groups the eApp's quote requests and, when the eApp was created from a quote request, a Created from Quote Request menu item linking to that quote. Request Quote is the same control when there is nothing to view yet.
- Clear ApplicInt Field Errors appears only when the eApp has that action available. Confirm, then the eApp drops off the daily engineering reminder after required Pacific Life fields have been filled in ApplicInt.
Create quote request from case/eApp: Pre-seeded with data from the source record. No additional deep-link parameters.
Navigation behavior
- Case list shows a filterable, searchable table. Click a row to open
/cases/:id. - Case detail and eApp detail load a summary card and action buttons, then tabbed content. If the record fails to load, the user is redirected to Home.
/cases/:id/create-quote-requestand/electronic-applications/:id/create-quote-requestopen a guided form pre-filled with source record data.- Unknown
?page=,?email-id=, or?highlight-*values fall back to the default tab without an error.
Case detail tabs (/cases/:id)
Default tab: tasks. All tabs navigate via ?page=<slug>.
| Slug | Tab label | Visible when | Notes |
|---|---|---|---|
tasks |
Tasks | Always | Red badge showing incomplete task count |
informals |
Informals | LINE.INFORMAL case only |
Informal offer review |
details |
Details | Always | Case identity, policy, carrier, product fields |
chat |
Chat | Always | Notes, messages, activity feed; eager-loaded |
parties |
Parties | Always | Insured and related parties |
commissions |
Commissions | BackNine visible + not informal | Hidden when hide_commission is true and show_backnine is false |
documents |
Documents | Always | Case documents |
access |
Access | Always | Control who can view/manage this case |
timeline |
N Days Pending | Always | Timeline graph showing case age in days |
emails |
Emails | Always | Inbound email threads; ?email-id=<id> to focus one |
to-do |
To-Do | Always | To-do items; red badge showing count; eager-loaded |
Visibility and permissions
- All routes require an authenticated user.
- Creating a standard case is not available on a standard account.
/cases/informal/create,/cases/submit,/cases/:id, and eApp routes are available to signed-in users./case-managementreflects the logged-in user's management scope (server-side scoping, not a route guard).
How to use
To work an existing case:
- Open
/cases/:idfrom the case list or a notification link. - Use
?page=tasksor?task=<id>&type=<type>to go directly to a task. - Use
?email-id=<id>to open a specific email thread. - Use
?highlight-note=<id>or?highlight-todo=<id>when arriving from notifications. - Work tasks in the Tasks tab; add notes in Chat; manage todos in To-Do.
The selected task header shows who created it and the creation date and time (for example, 09/27/2026 at 12:00 PM) in the viewer's local timezone, followed by the follow-up date and assignee.
To view documents on a case task:
- Open
/cases/:id?page=tasksand select the task. - On Advisor Task Notes, Related Documents includes the task's documents (these are emailed to the advisor).
- On Carrier Task Notes, Related Documents only includes documents attached to carrier notes. The task's documents are not shown there because they are not sent to the carrier.
To start a quote from a case:
- Quote request: navigate to
/cases/:id/create-quote-requestor use the action on the detail page. - Impaired-risk quote: navigate to
/cases/:id/create-impaired-risk-quoteor use the action.
What can be updated
| Area | Tab (?page=) |
Notes |
|---|---|---|
| Case details (insured, policy, carrier, product) | details |
Read-only on a standard account. |
| Applied Mode / Premium / Rating | details → Applied |
Disabled when the case has a linked electronic application |
| Exchange Amount / Lump Sum | details → Approved |
Hidden for term products (and for non-life/non-annuity lines) |
| Case status | Action buttons in summary card | Varies by current status |
| Tasks | tasks |
Complete, add notes, reassign; ?task=<id>&type=<type> to focus one |
| Informal offers | informals |
Informal cases only |
| Chat messages and notes | chat |
Add messages; activity feed |
| Email threads | emails |
View threads; ?email-id=<id> to open one |
| Parties | parties |
View/manage insured and related parties |
| Commissions | commissions |
When BackNine visible and not informal |
| Documents | documents |
Upload, manage case documents |
| Access | access |
Control who can view/manage |
| To-dos | to-do |
Create, complete, reassign; ?highlight-todo=<id> to focus |
| eApp fields | /electronic-applications/:id |
Managed separately |
What users can do
Case list: Filter, search, and open case records.
Create informal case: Enter basic informal inquiry information and submit. Creating a standard case is not available on a standard account.
Case submission (/cases/submit): Work through the guided submission steps for a pending case.
Case/eApp detail: Work tasks; collaborate through notes, chat, and email; launch quote request or impaired-risk quote creation; review eApp activity.
To add someone to case Access:
- Open
/cases/:id?page=access. - Search for the advisor. Results show Connected or Not Connected.
- Click Add Access. If they are not connected, confirm Add Unrelated Agent?. This prompt does not appear for carrier personnel.
To add someone to electronic application Access:
- Open
/electronic-applications/:id?page=access. - Search for the advisor. Results show Connected or Not Connected.
- Click Add Access. If they are not connected, confirm Add Unrelated Agent?. This prompt does not appear for carrier personnel.
Case management dashboard: Review pending cases and task queues within the management scope.
Common blockers
/cases/submitrequires an existing case in a submittable state. Arriving without one in progress may result in an empty flow.- The
:idmust be a valid case or eApp record. Invalid IDs redirect to Home. - If
?email-id=,?task=, or?highlight-*targets a record that no longer exists, the page loads normally without the highlight.
Related routes
/quotes/create— standalone quote request (see also: create from case)/impaired-risk-quotes/create— standalone impaired-risk quote/agents/:id— agent linked to the case/clients/:id— client linked to the case (where applicable)/commissions— commissions generated by closed cases
"How do I" response patterns
"How do I add access on a case?"
- Open
/cases/:id?page=access. Search, then click Add Access. Confirm if the person is Not Connected. Carrier personnel do not see that confirmation.
- Open
"How do I add access on an electronic application?"
- Open
/electronic-applications/:id?page=access. Search, then click Add Access. Confirm if the person is Not Connected. Carrier personnel do not see that confirmation.
- Open
"How do I create an informal case?"
- Open
/cases/informal/create.
- Open
"How do I open a case directly to a task?"
- Use
/cases/:id?task=<id>&type=<task-type>. If that task is already complete, the Complete group expands so you can see which task is selected.
- Use
"Why don't I see the task PDF on Carrier Task Notes?"
- Related Documents on Carrier Task Notes only lists files attached to carrier notes. The task's documents stay on Advisor Task Notes because they are emailed to the advisor, not the carrier.
"How do I open a specific email thread on a case?"
- Use
/cases/:id?email-id=<id>.
- Use
"How do I open a case note or todo from a notification?"
- Note:
/cases/:id?highlight-note=<id>. - To-do:
/cases/:id?highlight-todo=<id>.
- Note:
"How do I clear ApplicInt field errors on an eApp?"
- Open
/electronic-applications/:id. If Clear ApplicInt Field Errors is shown, click it and confirm. Use this after required Pacific Life fields have been filled in ApplicInt so the eApp drops off the daily engineering reminder.
- Open
"How do I unlock a locked eApp?"
- Open
/electronic-applications/:id. The red This eApp is Locked. Too many unsuccessful attempts to access this electronic application. notification shows an outlined Unlock eApp action on the right, or below the message on a small screen. Click it and confirm Unlock eApp? to reset access attempts. Cancel leaves the eApp locked.
- Open
"How do I get back to the quote request an eApp was created from?"
- Open
/electronic-applications/:id, open the menu next to View Quote Request, and choose Created from Quote Request. That item only appears when the eApp was created from a quote request.
- Open
"How do I see if an eApp is a revised illustration?"
- Open
/electronic-applications/:idand check Revised Illustration on the summary card.
- Open
"How do I open the carrier online application the insured still needs to complete?"
- Open
/electronic-applications/:id. If the Next Step banner says the insured is waiting to complete the carrier's online application and Online Application is a link, click it. The link only appears when Fairway has the insured or owner continue URL (for example John Hancock ExpressTrack or Protective EZ-App).
- Open
"How do I see the Blended Term Rider on an eApp quote?"
- Open
/electronic-applications/:id?page=quote-historyand expand a quote. Blended Term Rider shows Yes or No. When it is Yes, Blended Term Amount appears.
- Open
"How do I see the crediting rate on an eApp quote?"
- Open
/electronic-applications/:id?page=quote-history, expand a quote, and check Crediting Rate Requested (what was asked for) then Crediting Rate (illustrated). Indexed and variable quotes show both even when a custom rate was not entered.
- Open
"How do I run an illustration from quote history?"
- Open
/electronic-applications/:id?page=quote-history. If the quote can be illustrated and no PDF is stored, the Illustration column shows a Run illustration button. Click it to generate and automatically download the PDF when it is ready. The same column then shows a download for later use. Quotes that already have a PDF show the download instead. If generation fails, an error appears and the Run illustration button becomes available to try again.
- Open
"How do I start a quote request from an existing case?"
- Use the "Create Quote Request" action on the case detail page, or go to
/cases/:id/create-quote-request.
- Use the "Create Quote Request" action on the case detail page, or go to
"How do I start an impaired-risk quote from a case?"
- Use the action on the case detail page, or go to
/cases/:id/create-impaired-risk-quote.
- Use the action on the case detail page, or go to
"Where do I see Paid Up Additions Premium on a whole life case?"
- Open
/cases/:idand the Details tab. Paid Up Additions Premium appears for whole life products. Applied Premium and Approved Premium totals on the case card include it. First-year commissions still use annualized premium (not PUA) when the case has no target premium. Editing case fields is not available on a standard account.
- Open
Open questions
- Exact tab structure for the eApp detail view (
/electronic-applications/:id) — confirm fromElectronicApplicationView.vue. - Full conditions for the Commissions tab visibility:
canSeeCommissions = (!hide_commission || !show_backnine)— confirm intended behavior with BackNine team.
Guide: clients/clients.md
Clients User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers client record creation and the client detail view. Clients are "contract parties" — individuals or entities that appear in cases and related workflows. This is distinct from the lighter-weight party viewer routes (/individuals/:id, /entities/:id).
Entry points
| Route | Purpose |
|---|---|
/clients/create |
Create a new client (individual or entity) |
/clients/:id |
Client detail |
Users also arrive from the Clients table (/tables?page=clients), case and eApp party panels, and notification links.
Deep links and routing behavior
Client detail (/clients/:id):
?page=<tab>— open to a named tab?highlight-todo=<id>— highlight a specific to-do?highlight-note=<id>— highlight a specific note or email
No deep links are defined for the create route.
Navigation behavior
- Create: User first selects client type (Individual or Entity). The form body transitions to type-specific fields after selection. The submit button appears only after a valid type is selected. On success, redirects to
/clients/:id. - Detail: Loads client summary card and action buttons, then tabbed content.
Available tabs:
| Tab | Visible to |
|---|---|
| Notes | All BackNine-visible users |
| To-Do | All BackNine-visible users |
| Cases | All BackNine-visible users |
| Details | All BackNine-visible users |
| Access | All BackNine-visible users |
- The Details tab shows individual-specific fields for Individual clients and entity-specific fields for Entity clients.
- Unknown
?page=or?highlight-*values fall back to the default tab without an error. - If the record fails to load, the user is redirected to Home.
Visibility and permissions
- Both routes require an authenticated user with BackNine visibility (
show_backnine). Users without BackNine visibility are redirected to Home. - No group gating on the routes themselves; all BackNine-visible users can create and view clients.
How to use
To create a client:
- Open
/clients/create. - Select the client type: Individual (person) or Entity (business/trust). The form fields change based on this choice.
- Fill in the required fields.
- Click "Create Client." You are redirected to
/clients/:id.
To work an existing client record:
- Open
/clients/:idfrom the Clients table or a case party panel. - Use
?page=<tab>to go directly to a tab. - Use
?highlight-note=<id>or?highlight-todo=<id>when arriving from a notification. - Review cases in the Cases tab; manage todos in To-Do; view or edit details in the Details tab.
What can be updated
| Area | Tab | Notes |
|---|---|---|
| Individual identity fields (name, DOB, SSN, etc.) | Details | Shown for Individual type clients only |
| Entity fields (name, EIN, entity type, etc.) | Details | Shown for Entity type clients only |
| Notes | Notes tab | Add, view notes |
| To-dos | To-Do tab | Create, complete, reassign; use ?highlight-todo=<id> from links |
| Access settings | Access tab | Control who can view/manage this client |
Cases shown in the Cases tab are read-only links — case records are managed at /cases/:id.
What users can do
Create: Choose Individual or Entity; enter type-specific contact and identity fields; create the record.
Detail: Review and update notes; create and manage todos; review linked cases; update details (type-specific); manage access settings.
To add someone to client Access:
- Open
/clients/:id?page=access. - Search for the advisor. Results show Connected or Not Connected.
- Click Add Access. If they are not connected, confirm Add Unrelated Agent?. This prompt does not appear for carrier personnel.
Common blockers
- BackNine visibility is required for both routes. If the user is redirected, confirm this is enabled on the account.
- On create, the type (Individual or Entity) must be selected before fields render; the submit button is hidden until a type is chosen.
- The
:idmust be a valid client record. Invalid IDs redirect to Home.
Related routes
/cases/:id— cases linked to this client appear in the Cases tab/individuals/:id//entities/:id— lighter-weight party viewer (different context; see parties.md)/tables?page=clients— clients list table
"How do I" response patterns
"How do I add access on a client?"
- Open
/clients/:id?page=access. Search, then click Add Access. Confirm if the person is Not Connected. Carrier personnel do not see that confirmation.
- Open
"How do I create a client?"
- Open
/clients/create. Choose Individual or Entity, complete the form, click "Create Client."
- Open
"How do I decide between Individual and Entity?"
- Use Individual for a person. Use Entity for a business or trust.
"Why can't I access Client pages?"
- BackNine visibility is required. Contact BackNine support.
"How do I open a client directly to To-Do?"
- Open
/clients/:id?page=to-do. Add?highlight-todo=<id>to focus a specific item.
- Open
"How do I open a client note from a notification?"
- Open
/clients/:id?highlight-note=<id>.
- Open
"Why does the Details tab look different across client records?"
- It shows individual-specific fields (name, DOB, etc.) for Individual clients and entity-specific fields for Entity clients.
Open questions
- Field-level differences and required validations between Individual and Entity create forms.
- Exact
?page=slugs aligned to current tab labels.
Guide: commissions/commissions.md
Commissions User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the commissions dashboard and pay period detail for a standard account.
Entry points
| Route | Purpose |
|---|---|
/commissions |
Commissions dashboard |
/commissions/pay-periods/:id |
Pay period detail |
Users arrive from the app navigation menu (commissions section), pay period list rows, and statement list rows.
Deep links and routing behavior
/commissions—?page=<section>opens to a named section/tab./commissions/pay-periods/:idloads a single view with no deep-link query parameters.
Navigation behavior
- Pay period detail uses breadcrumb-style navigation back to the commissions list.
- If a pay period record fails to load, the user is redirected to Home.
Visibility and permissions
| Route | Required |
|---|---|
/commissions |
Signed in + commissions visible (hide_commission = false) + BackNine visible (show_backnine) |
/commissions/pay-periods/:id |
Commissions visible + BackNine visible |
Users who fail any guard are redirected to Home.
How to use
To review commissions:
1. Open /commissions. Use ?page=<section> to go directly to a section.
2. Navigate to /commissions/pay-periods/:id for a specific pay period.
What can be updated
| Area | Route | Notes |
|---|---|---|
| Pay period review | /commissions/pay-periods/:id |
Commissions + BackNine visible |
The /commissions dashboard is a read-only summary.
What users can do
- Navigate commission sections and review summaries (
/commissions). - Review individual pay period details.
Common blockers
/commissionsrequires bothhide_commission = falseandshow_backnine = true. Either being disabled will block access.- The pay period
:idmust be a valid record. Invalid IDs redirect to Home.
Related routes
/products/:id— commission rates are configured per product/cases/:id— closed cases generate commission activity/agents/:id— agent-level commission settings in profile/agencies/:id— agency-level commission settings
"How do I" response patterns
"How do I open commissions?"
- Go to
/commissions. Use?page=<section>to go to a section directly. - If redirected, check that both commissions visibility and BackNine visibility are enabled on the account.
- Go to
"Why can't I see commissions at all?"
- The commissions route requires
hide_commission = falseandshow_backnine = true. Contact BackNine support.
- The commissions route requires
Open questions
- Exact
?page=values for/commissionsin current production tab labels.
Guide: contact/contact.md
Contacts User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the BackNine internal contact directory. This is a read-only searchable list of BackNine team members with contact details.
Entry points
| Route | Purpose |
|---|---|
/contact |
BackNine contact directory |
Typically reached from the app navigation menu.
Deep links and routing behavior
No query-parameter deep links are defined. The page loads the full contact list on arrival.
Navigation behavior
- Displays a searchable table listing BackNine team members.
- Search filters rows in real time — no page reload.
- Columns: Name, Role, Email, Phone.
- Email values render as
mailto:links (opens the user's default mail client). - Phone values render as
tel:links (opens a phone dialer on supported devices). - No pagination; all contacts appear in a single list.
Visibility and permissions
- Route requires an authenticated user.
- No group or permission guard — all authenticated users see the same list.
How to use
- Open
/contactfrom the navigation menu. - Use the search field to filter contacts by name, role, email, or phone.
- Click an email address to open your mail client with the address pre-filled.
- Click a phone number to open your dialer (mobile) or your system's tel: handler (desktop).
What can be updated
This page is read-only. No contact data can be created, edited, or deleted from /contact. Contact list management is handled outside the app.
What users can do
- Find a BackNine team contact by name, role, email, or phone.
- Initiate email outreach by clicking an email link.
- Initiate a phone call by clicking a phone link.
Common blockers
- If the page shows no data, the contact list failed to load. Check for an error snackbar and refresh.
- Email and phone links depend on the user's device/OS having a default mail client or phone dialer configured.
Related routes
/help-center— BackNine help articles and support series/support-tickets/:id— open support ticket detail
"How do I" response patterns
"How do I find a BackNine contact?"
- Open
/contactand use the search field to filter by name, role, or contact detail.
- Open
"How do I email someone from the contacts page?"
- Click the email address. Your default mail client opens with the address pre-filled.
"How do I call someone from the contacts page?"
- Click the phone number. On mobile this opens the dialer; on desktop it depends on your system's tel: handler.
Open questions
- Whether the contact list is manually maintained or synced from an external directory (affects how current the data is).
Guide: custom-chat-templates/custom-chat-templates.md
Email Templates User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the creation, editing, copying, and deletion of Email Templates (internally named "custom chat templates"). Templates are HTML emails sent to insureds during eApp workflows, and can be set up as one-time sends or automated drip emails.
Entry points
| Route | Purpose |
|---|---|
/custom-chat-templates/create |
Create a new email template |
/custom-chat-templates/:id |
Edit an existing email template |
/custom-chat-templates/create?copy_from=<id> |
Copy an existing template as a starting point |
From the Email Templates table (/tables?page=custom-chat-templates):
- "+" button → /custom-chat-templates/create
- Template name link → /custom-chat-templates/:id
- Copy icon in a row → /custom-chat-templates/create?copy_from=<row-id>
- "Copy Template" button inside the editor → /custom-chat-templates/create?copy_from=<current-id>
Deep links and routing behavior
?copy_from=<id>on the create route pre-fills the editor with the source template's fields, clears the ID, prefixes the name with "Copy of", setspublished = false, and resetsavailableTo.- No other query-parameter deep links are defined for these routes.
- After creating a new template, the route stays at
/custom-chat-templates/create(the ID is assigned silently and the view switches to edit mode in place). - After deleting a template, the user is redirected to
/tables?page=custom-chat-templates.
Navigation behavior
Both create and edit use the same CustomChatTemplateCreator component, in a split-panel layout:
- Left — Template Details: all editable fields (name, subject, HTML, editable text, availability, drip settings, merge tags reference).
- Right — Preview: live iframe rendering of the HTML with sample merge tag values substituted.
Top action buttons: - Expand Editor / Expand Preview to full width - Toggle transparency indicator on the preview background - Show/hide sample merge tag values in the preview - Enter/exit fullscreen - Copy Template (only when editing an existing template)
Drip email mode activates when both Required Status and Send Delay (Days) are set: - Editable Email Text field is hidden (drip emails are automated). - Subject becomes required. - The template is sent automatically N days after the eApp reaches the required status.
Available merge tags (click any to copy to clipboard):
| Token | Inserts |
|---|---|
[FirstName] / [LastName] |
Insured's name |
[Link] |
eApp URL |
[Line] / [LineTitle] |
Product line |
[MarketAsName] / [MarketAsEmail] / [MarketAsPhoneWork] |
Quote & Apply site market-as info |
[MarketAsLicenseState] / [MarketAsLicenseNumber] |
Market-as license |
[ProductDescriptor] |
Product line description |
[UnsubscribeUrl] |
Unsubscribe link |
[AssignableName] |
Site assignable name |
[MainText] |
User-customizable body text |
[AvatarUrl] |
Site avatar URL |
[AgentName] / [AgentEmail] / [AgentPhoneWork] |
Agent contact details |
[AgentLicenseState] / [AgentLicenseNumber] |
Agent license |
[AgentSchedulingLink] |
Agent scheduling link |
Visibility and permissions
- Both routes require an authenticated user.
- Available To (selecting an advisor) is required.
- Whether a template's fields are editable (
editableflag) or deletable (deletableflag) is determined by the API response — not all users can edit all templates.
How to use
To create a new template:
1. Go to /custom-chat-templates/create or click "+" in the Email Templates table.
2. Fill in the template name, subject (required for drip), HTML, and Editable Email Text.
3. Set Available To to an advisor.
4. Optionally set Published to make it available for use.
5. Click "Save Template."
To edit an existing template:
1. In /tables?page=custom-chat-templates, click the template name.
2. Make changes. Use the live Preview panel on the right to check rendering.
3. Click "Save Template."
To copy a template: 1. Click the copy icon in the table row (or "Copy Template" in the editor). 2. The editor opens with a pre-filled copy. Rename it and adjust fields as needed. 3. Click "Save Template" to create the new template.
To set up a drip email: 1. Open the template editor. 2. Set Required Status to the status that should trigger the send (e.g. "Sent"). 3. Set Send Delay (Days) (0–365). 4. Fill in the Subject (now required) and HTML. 5. Save. The template sends automatically when an eApp reaches that status.
To send a preview email to yourself: 1. Open the template editor. 2. Click "Send a Preview to yourself" in the Preview panel subtitle. 3. Confirm the dialog. The template is saved first, then the preview is sent.
What can be updated
| Field | Notes |
|---|---|
| Email Template Name | Required; alphanumeric and common punctuation only |
| Published | Checkbox; unpublished templates are not usable |
| Subject | Required for drip emails; optional otherwise |
| Available To | Required. Choose the advisor who can use the template. |
| Required Status | Optional; set together with Send Delay to create a drip email |
| Send Delay (Days) | Optional; 0–365 integer |
| HTML | Full email HTML body; must pass sanitization before save |
Editable Email Text ([MainText]) |
Default body text; hidden when template is a drip email |
Fields are only editable when the template's editable flag is true (set by the API). Read-only templates show all fields but disable editing.
What users can do
- Create a template from scratch or from a copy.
- Edit name, subject, HTML, editable text, published status, availability, and drip settings.
- Preview the rendered HTML live with sample merge tag substitution.
- Send a preview email to themselves (saves the template first).
- Delete a template (when
deletable = true).
Common blockers
- HTML must pass client-side sanitization before saving. A red alert appears when it fails — click "Sanitize HTML" to auto-clean. Saving is blocked until resolved.
- If a template's
editableflag isfalse(set by the API), all fields are read-only. The user may not be the owner, or the template may be system-managed. - The
deletableflag controls whether the Delete button appears. It is set by the API, not the user's group. - Save errors appear as snackbars; the form stays open for retry.
- Load errors on the edit route show a snackbar; the editor opens with blank/empty fields.
Related routes
/tables?page=custom-chat-templates— Email Templates list table/electronic-applications/:id— templates are sent via eApp chat/email flows
"How do I" response patterns
"How do I create a new email template?"
- Go to
/custom-chat-templates/createor click "+" in the Email Templates table.
- Go to
"How do I edit a template?"
- In the Email Templates table, click the template name.
"How do I copy a template?"
- Click the copy icon in the table row, or click "Copy Template" in the editor header.
"How do I set up a drip email?"
- Set a Required Status (e.g. "Sent") and a Send Delay (Days) value. The template sends automatically that many days after the eApp reaches that status.
"How do I preview my template?"
- The right panel updates live as you type HTML. Click "Send a Preview to yourself" for a real email preview.
"The HTML field shows a red error — what do I do?"
- Click "Sanitize HTML" in the error alert. This auto-cleans the markup to compliant HTML.
"Why can't I edit this template?"
- The template's
editableflag isfalse. You may not be the owner, or it is system-managed.
- The template's
Open questions
- The
modelTypefield is currently commented out in the UI. OnlyElectronicApplicationis active. Additional model types may be added. - Whether you can delete a template you created is controlled by the
deletableflag on that template.
Guide: index.md
BOSS guides (Group 1)
These guides are public. No BOSS account is required to read them. They describe what a standard user can do, including answers for agents who have not signed up yet.
Agents answering from this packet should read README.md first.
| Guide | Path |
|---|---|
| Sign in and sign up | auth/auth.md |
| Agents | agents/agents.md |
| Agencies | agencies/agencies.md |
| Applications | applications/applications.md |
| Appointments | appointments/appointments.md |
| Carriers | carriers/carriers.md |
| Cases and eApps | cases/cases.md |
| Clients | clients/clients.md |
| Commissions | commissions/commissions.md |
| Contacts | contact/contact.md |
| Email templates | custom-chat-templates/custom-chat-templates.md |
| Help Center and support | integrations/integrations.md |
| Parties | parties/parties.md |
| Carrier personnel | personnel/personnel.md |
| Products | products/products.md |
| Quote & Apply | quote-and-apply/quote-and-apply.md |
| Quotes | quotes/quotes.md |
| Reports | reports/reports.md |
| Routes | routes/RouteInventory.context.md |
| Settings | settings/settings.md |
| Tables | tables/tables.md |
Guide: integrations/integrations.md
Integrations and External Flows User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers routes that bridge to external systems, handle token-based redirects, manage advisor verification, display the Help Center, and surface support tickets. These are mostly transit or landing routes — they do not have their own full UI workspaces.
Entry points
| Route | Purpose |
|---|---|
/connect/:type |
SSO handoff to carrier systems |
/conversions/:token |
Token-based conversion redirect (open to auth and unauth) |
/advisor-verification/:uuid |
External advisor attestation handoff |
/marketing |
Marketing tools (approved-domain accounts only) |
/help-center |
BackNine help article index |
/help-center/series/:id |
Help article series page |
/help-center/articles/:id |
Individual help article |
/support-tickets/:id |
Support ticket detail |
- External connect: linked from carrier-related workflows
- Conversions: arrived via email or external referral links
- Advisor verification: arrived via email or external partner link
- Help Center: from the app navigation menu or help buttons
- Support ticket: from notification links
Deep links and routing behavior
/connect/:type—:typemaps to a carrier SSO configuration. No query parameters./conversions/:token— token is the route parameter. On failure, an?error=query may appear in the URL./advisor-verification/:uuid— UUID is the route parameter from the verification email./support-tickets/:id— no query parameters.
Navigation behavior
- External connect: Validates
:type, initiates SSO handoff. Redirects to Home if the type is unrecognized or access is blocked. - Conversions: Server-side lookup on the token. On success, redirects to the returned URL. On failure, shows an error state.
- Advisor verification: Attempts external attestation. On failure, redirects to sign-in.
- Help Center: Index shows a browsable catalog. Series route validates ID — invalid IDs redirect to Home. Article routes load content directly.
- Marketing: Shows marketing tooling for approved-domain accounts. No sub-navigation defined in routing.
- Support ticket: Loads the ticket detail for the given ID.
Visibility and permissions
| Route | Access |
|---|---|
/connect/:type |
Authenticated |
/conversions/:token |
Authenticated and unauthenticated (open) |
/advisor-verification/:uuid |
Authenticated (fallback to sign-in on failure) |
/marketing |
Authenticated + approved_domain_url on account |
/help-center |
Authenticated |
/help-center/series/:id |
Authenticated |
/help-center/articles/:id |
Authenticated |
/support-tickets/:id |
Authenticated |
How to use
External Connect:
- Open
/connect/:typefrom a carrier-related workflow or direct link. - The app initiates the SSO handoff automatically. No further interaction is needed.
- If redirected to Home, the
:typeis unrecognized or access is blocked.
Conversion link:
- Open
/conversions/:tokenfrom an email or referral link. - On success, you are redirected to the intended destination.
- On failure, check
?error=in the URL for context.
Help Center:
- Open
/help-centerfrom the navigation menu or a help button. - Browse the article catalog or navigate to
/help-center/series/:idor/help-center/articles/:id.
Support ticket (How do I view the original email and reply?):
- Open
/support-tickets/:idfrom a notification link. - For a ticket created from an inbound email, click View full email (left of Mark as Completed) to inspect the original email. The original is available while the inbound email is retained.
- Type a reply in Chat and click Comment. That emails the person on Ticket Opened By.
- Ticket Opened By is the person who opened the ticket.
Support tickets list (How do I see which support tickets are complete?):
- Open
/help-centerand scroll to the Support Tickets table. - The Status column shows Complete or Incomplete for each ticket. The list defaults to incomplete tickets only; open the advanced filters and uncheck Is Incomplete to include completed tickets.
- Click a ticket's Description to open it. The list is your tickets.
What can be updated
| Area | Route | Notes |
|---|
Help Center articles are read-only in this guide. The other routes here are transit-only or read-only.
What users can do
- Start carrier SSO handoff flows via bridge links.
- Complete conversion token journeys to eApp or related destinations.
- Follow advisor verification links into attestation flows.
- Browse and read Help Center articles and series.
- Access marketing tooling (approved-domain accounts).
- View support ticket details.
Common blockers
/marketingrequiresapproved_domain_urlto be configured on the account. Without it, the user is redirected to Home./connect/:typerequires the:typeto match a known SSO configuration; unrecognized types redirect to Home./conversions/:tokenrequires a valid, non-expired token. Expired tokens produce an error state./advisor-verification/:uuidrequires a valid UUID from an active verification flow; failures redirect to sign-in.Related routes
/settings?action=<action>— some carrier integrations are triggered via settings actions/quote-and-apply— approved-domain marketing features connect closely to Q&A sites/contact— BackNine team directory for direct outreach
"How do I" response patterns
"How do I use an external connect link?"
- Open
/connect/:type. If redirected to Home, the bridge type is not configured or access is blocked.
- Open
"How do I use a conversion token link?"
- Open
/conversions/:tokenfrom the email or referral link. If it fails, check?error=in the URL.
- Open
"How do advisor verification links work?"
- Open
/advisor-verification/:uuidfrom the verification email. On failure, you are sent to sign-in.
- Open
"Why can't I access Marketing?"
/marketingrequires an approved domain on the account. Contact BackNine support.
"How do I open a Help Center series or article?"
- Series:
/help-center/series/:id. Article:/help-center/articles/:id.
- Series:
Open questions
- Which carrier
:typevalues are active in production SSO mappings. - User-facing wording for conversion route error states (
?error=values).
Guide: parties/parties.md
Parties User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the lightweight individual and entity party viewer. These routes are distinct from the richer Client record (/clients/:id). Parties surface primarily through case, eApp, and quote workflows where a person or entity is referenced but not necessarily managed as a full client.
Entry points
| Route | Purpose |
|---|---|
/individuals/:id |
Individual party detail |
/entities/:id |
Entity party detail |
Users arrive from case/eApp/quote party panels and from notification links with ?highlight-note=.
Deep links and routing behavior
?highlight-note=<id>— scroll to and highlight a specific note or email in the Chat tab.
No other query-parameter deep links are defined.
Navigation behavior
- Both routes use the same shared Party Viewer component. The route type (
individualsvsentities) determines which record is fetched. - Page shows a summary card and actions, then tabbed content.
- Currently active tab: Chat. Other tabs may exist but are not currently visible.
- If the record fails to load, the user is redirected to Home.
Visibility and permissions
- Both routes require an authenticated user.
- No group or permission guard at the route level.
How to use
- Open
/individuals/:idor/entities/:idfrom a case, eApp, or quote party panel, or from a notification link. - Review the identity and contact summary in the card.
- Use the Chat tab to add notes or messages, or to review conversation history.
- Append
?highlight-note=<id>to jump directly to a specific note or email when arriving from a notification.
What can be updated
| Area | Where | Notes |
|---|---|---|
| Chat messages and notes | Chat tab | Add new messages and notes |
No identity, contact, or structured detail fields are editable from the party viewer. For a party with editable details, open the linked /clients/:id record instead.
What users can do
- Review party identity and contact summary from the card.
- Collaborate through party chat and notes.
- Open a specific note or email from a direct deep link.
Common blockers
- The
:idmust be a valid, accessible party record of the matching type. Invalid IDs redirect to Home. - If
?highlight-note=targets a note that no longer exists, the page loads normally without highlighting.
Related routes
/clients/:id— the richer contract-party view with todos, cases, access, and structured details/cases/:id— cases where this party is the insured or a related party
"How do I" response patterns
"How do I open an individual party?"
- Open
/individuals/:id.
- Open
"How do I open an entity party?"
- Open
/entities/:id.
- Open
"How do I open a specific note from a notification?"
- Use
/individuals/:id?highlight-note=<id>or/entities/:id?highlight-note=<id>.
- Use
"What is the difference between a party and a client?"
- A client (
/clients/:id) has a full profile: notes, todos, cases, access, and structured detail fields. - A party (
/individuals/:id,/entities/:id) is a lighter view focused on identity summary and chat.
- A client (
"Why did a party link redirect to Home?"
- The record doesn't exist or failed to load.
Open questions
- Whether additional tabs beyond Chat are planned or conditionally hidden.
- The exact logic for when a person surfaces as
/individuals/:idvs/clients/:id(likely depends on how the record was created).
Guide: personnel/personnel.md
Personnel User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers viewing a carrier personnel record. Carrier personnel are contacts associated with a specific carrier (for example, sales reps and underwriters).
Entry points
| Route | Purpose |
|---|---|
/personnel/:id |
Personnel detail |
Users arrive from the Carrier Personnel table (/tables?page=carrier-personnel) and carrier detail pages.
Deep links and routing behavior
Personnel detail (/personnel/:id):
- ?page=<tab> — open to a named tab
- ?highlight-note=<id> — highlight a specific note or email in the Chat tab
Navigation behavior
- Detail: Loads personnel summary card, then two tabs:
| Tab | Visible to |
|---|---|
| Details | Read-only |
| Chat | All signed-in users |
- If the record fails to load, the user is redirected to Home.
Visibility and permissions
/personnel/:idrequires a signed-in user.- The Details tab is read-only.
How to use
To view a personnel record:
1. Open /personnel/:id from the Carrier Personnel table or a carrier detail page.
2. Use ?page=<tab> to navigate directly (for example, ?page=chat).
3. Use ?highlight-note=<id> when arriving from a notification.
4. Details are read-only. Use Chat to add notes.
What can be updated
| Area | Tab | Notes |
|---|---|---|
| Name, title, department, phone, email | Details | Read-only |
| Home address | Details | Read-only |
| Business address | Details | Read-only |
| Chat messages and notes | Chat | Add notes and messages |
What users can do
Detail: Review personnel details; call Work Phone or Mobile Phone from the Details tab with the phone icon; collaborate via chat and notes.
The summary card Work Phone and Mobile Phone text is also a tap-to-call link.
Common blockers
- The
:idmust be a valid personnel record. Invalid IDs redirect to Home. - Creating or editing a personnel record is not available on a standard account.
Related routes
/carriers/:id— the carrier this personnel is associated with/tables?page=carrier-personnel— carrier personnel list table
"How do I" response patterns
"How do I open a personnel record to chat?"
- Open
/personnel/:id?page=chat.
- Open
"How do I open a personnel note from a notification?"
- Open
/personnel/:id?highlight-note=<id>.
- Open
"Why can I see Details but not edit them?"
- Details are read-only on a standard account.
"How do I call a carrier personnel phone number?"
- Open
/personnel/:id(Details tab). Next to Work Phone or Mobile Phone, tap the phone icon to start a call. Hovering the icon shows a Call … tooltip. The icon only appears when that field has a number. Work Phone Extension is not callable on its own. The summary card phone text is also a tap-to-call link.
- Open
Open questions
- None for the read-only detail view.
Guide: products/products.md
Products User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the products list and product detail. Products are carrier-linked insurance products used in cases, quotes, appointments, and Quote & Apply configurations. Access requires BackNine visibility and commissions visibility.
Entry points
| Route | Purpose |
|---|---|
/products |
Products list |
/products/:id |
Product detail |
Users arrive from the products table, carrier detail pages, and commissions records.
Deep links and routing behavior
Product detail (/products/:id):
- ?page=<tab> — open to a named tab
No deep links are defined for the products table.
Navigation behavior
- Table (
/products): Server-backed table with filters, sorting, pagination, and data export. Product names link to/products/:id. Quote & Apply-enabled products are visually marked. Filters are line, type, and carrier, plus search. - Detail (
/products/:id): Loads the product summary card, then tabs. For a standard account, the summary shows the viewer's first-year rate, available First Year Rates, Free Withdrawals, Age Type, available guides, accelerated-underwriting rules, and training instructions when those values exist.
| Tab | Visible to |
|---|---|
| Commissions | Shown when payouts exist |
If the record fails to load, the user is redirected to Home.
Visibility and permissions
/products: Signed in, BackNine visible (show_backnine), and commissions visible (hide_commission = false)./products/:id: Signed in. The Commissions tab is shown when payouts exist. Creating a product and editing product setup are not available on a standard account.
How to use
To browse products:
1. Open /products.
2. Use filters (line, type, carrier) and search to narrow results.
3. Click a product name to open /products/:id.
4. Open the Commissions tab when it is shown.
What can be updated
| Area | Tab | Who |
|---|---|---|
| Commission settings | Commissions | Review when payouts exist. Adding the first payout is not available on a standard account. |
What users can do
Table: Search, filter, export product data; open product records.
Detail: Review the summary card and commission settings when payouts exist.
Common blockers
/productsrequires BackNine visibility and commissions visibility — both must be enabled.- The
:idmust be a valid product record. Invalid IDs redirect to Home. - Creating a product, editing product details, and managing Quote & Apply setup are not available on a standard account.
Related routes
/carriers/:id— the carrier this product belongs to/commissions— commission data linked to products/quote-and-apply— Q&A site configurations reference products/tables?page=carriers— carriers list for cross-referencing
"How do I" response patterns
"How do I find a product?"
- Open
/products. Use filters and search, then click a product name.
- Open
"Why can't I access the products list?"
- Both BackNine visibility and commissions visibility must be enabled on the account.
Open questions
- Product table uses commissions-oriented APIs; confirm long-term API ownership.
Guide: quote-and-apply/quote-and-apply.md
Quote & Apply User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the Quote & Apply workspace (list, pipeline, and website directory views) and the individual website/approved-domain settings detail page. Q&A is the hosted quoting and eApp platform. Website settings control how a specific Q&A site behaves for an account's clients.
Entry points
| Route | Purpose |
|---|---|
/quote-and-apply |
Q&A workspace |
| `/quote-and-apply?view=<list\ | pipeline\ |
/quote-and-apply/:id |
Q&A website/domain settings detail |
/quote-and-apply/:id?page=<tab> |
Website settings opened to a specific tab |
/quote-and-apply/:id?page=<tab>&scroll-to=<id> |
Website settings scrolled to a specific section |
Users arrive from the app navigation menu, eApp detail records linking to the originating Q&A site, and direct links from settings workflows.
Deep links and routing behavior
Workspace (/quote-and-apply):
?view=list— list view?view=pipeline— Kanban pipeline view?view=websites— directory of Q&A website records
Website detail (/quote-and-apply/:id):
?page=<tab>— open to a named settings tab?scroll-to=<element-id>— scroll to and highlight a specific element within the page after load
Navigation behavior
Workspace: Three views via ?view=. Fullscreen toggle available on larger screens (hero content auto-hides). Default view when ?view= is absent is not explicitly documented — likely falls back to list.
List and Pipeline show only your own eApps. There is no filter to switch between all eApps and your eApps. That filter is separate from the workspace ?view= parameter above.
Website detail: Loads domain/site settings with tabs. Tab availability depends on the site's configuration:
| Tab | Visible when |
|---|---|
| Details | Always |
| Refer Settings | Site type supports refer settings |
| Theme & Colors | Site changes are not locked |
| Integrations | Site changes are not locked |
| Carriers | Site changes are not locked |
| Products | Site changes are not locked |
| Access | Always |
| Commissions | Site is not sign-up or select-agent type |
| Marketing | When applicable |
| Analytics | When applicable |
When site changes are locked, only Details and Access remain visible. If the domain record fails to load, the user is redirected to Home.
Visibility and permissions
- Both routes require an authenticated user.
- No group guard or BackNine visibility guard is defined at the route level.
- Tab visibility within website detail is controlled by site configuration (type, locked state), not by user group.
How to use
To use the workspace:
- Open
/quote-and-apply. - Use
?view=list,?view=pipeline, or?view=websitesto switch views (or click the view tabs). - In Websites view, click a site to open its settings at
/quote-and-apply/:id.
To filter eApps by where Quote & Apply was opened:
- Open
/quote-and-applyin List view. - Click Show Advanced Filters.
- In Website Type, select Embedded Website for eApps started on another website or BackNine Website for eApps started on
app.back9ins.com. - Clear Website Type to include both sources.
To search eApps by policy number:
- Open
/quote-and-applyin List or Pipeline view. - Click Show Advanced Filters.
- Type at least two characters in Policy Number.
- The list includes eApps whose stored policy number contains that text. A blank policy number, shown as Pending, is not matched.
To manage a Q&A website's settings:
- Open
/quote-and-apply/:id(from the Websites view or a direct link). - Use
?page=<tab>to go directly to a tab. - If the site is locked, only Details and Access are available.
- Add
?scroll-to=<element-id>to land on a specific section within the tab.
What can be updated
Changes are made in the Website detail (/quote-and-apply/:id). Tabs may be hidden if the site is locked.
| Area | Tab | Visibility requirement |
|---|---|---|
| Site identity (name, domain, type) | Details | Always visible |
| Refer settings | Refer Settings | Site type supports refer |
| Theme and colors | Theme & Colors | Site not locked |
| Connected integrations | Integrations | Site not locked |
| Carriers available on this site | Carriers | Site not locked |
| Products available on this site | Products | Site not locked |
| Access control (who can use this site) | Access | Always visible |
| Commission settings | Commissions | Site not sign-up or select-agent type |
| Marketing configuration | Marketing | When applicable |
Analytics is read-only. Application, lead, and view counts load when the Analytics tab is opened and are shown for the Past 7 Days, Past 30 Days, Past 90 Days, and All Time. The Workspace views (list, pipeline) are read-only.
What users can do
Workspace: Switch between list, pipeline, and website directory views. Review eApp activity. Open website settings from the Websites view.
To delete a Quote & Apply website:
- Open
/quote-and-apply?view=websites. Websites are shown as condensed cards. - Click the trash icon on the site. The action is labeled Delete.
- Confirm. The confirmation says the action cannot be undone.
Website detail: Update integrations, products, carriers, access, commissions, and marketing settings (when not locked); customize theme and colors; configure refer settings; review analytics.
To enable or disable carriers on a website:
- Open
/quote-and-apply/:id?page=carriers. - Flip a carrier's switch, or click Enable All Carriers and confirm.
- For bulk include and exclude, click Quick Enable / Disable. Click or drag a carrier between Included and Excluded. Click Save to apply the selection; at least one carrier must be included. Close, or a click on the faded background, leaves immediately when nothing changed. If there are unsaved changes, a confirmation appears over the dialog. Choose Don't save, Cancel, or Save.
To add someone to website Access:
- Open
/quote-and-apply/:id?page=access. - Search for the advisor. Results show Connected or Not Connected.
- Click Add Access. If they are not connected, confirm Add Unrelated Agent?. This prompt does not appear for carrier personnel.
Common blockers
- The
:idmust correspond to an accessible Q&A website/domain record. Invalid IDs redirect to Home. - When site changes are locked, most configuration tabs are hidden. Only Details and Access are available until the lock is lifted.
- Unknown
?page=values fall back to the first visible tab without an error. ?scroll-to=targeting a non-existent element loads the page normally at the top.
Related routes
/cases/:id— cases created from Q&A eApps link back to the Q&A source/electronic-applications/:id— eApp records originating from Q&A flows/products/:id— product Q&A availability configured in website settings/settings— account-level settings that affect Q&A behavior
"How do I" response patterns
"How do I add access on a Quote & Apply website?"
- Open
/quote-and-apply/:id?page=access. Search, then click Add Access. Confirm if the person is Not Connected. Carrier personnel do not see that confirmation.
- Open
"How do I switch between Quote & Apply views?"
- Use
?view=list,?view=pipeline, or?view=websitesin the URL, or click the tabs in the workspace.
- Use
"How do I open Q&A directly to the Pipeline?"
- Use
/quote-and-apply?view=pipeline.
- Use
"How do I show only my eApps in the Pipeline?"
- Open Pipeline view. The list is already limited to your own eApps.
"How do I find eApps created from an embedded Quote & Apply website?"
- Open List view, show the advanced filters, and set Website Type to Embedded Website. Select BackNine Website for eApps started on
app.back9ins.com, or clear the filter to show both.
- Open List view, show the advanced filters, and set Website Type to Embedded Website. Select BackNine Website for eApps started on
"How do I search Quote & Apply eApps by policy number?"
- Open List or Pipeline view, click Show Advanced Filters, and type at least two characters in Policy Number. Matches are eApps whose stored policy number contains that text. Pending eApps with no stored policy number are left out.
"How do I delete a Quote & Apply website?"
- Open
/quote-and-apply?view=websitesand click the trash icon. Confirm Delete. This cannot be undone.
- Open
"How do I enable or disable carriers on a Quote & Apply website?"
- Open
/quote-and-apply/:id?page=carriers. Use the switches, Enable All Carriers, or Quick Enable / Disable for the two-column picker.
- Open
"How do I open a Q&A website settings tab?"
- Open
/quote-and-apply/:id?page=<tab>.
- Open
"How do I call the Quote & Apply website phone number?"
- Open
/quote-and-apply/:id. When Override Phone is on, tap the phone icon next to Phone Number. Hovering the icon shows a Call … tooltip. The icon only appears when that field has a number.
- Open
"How do I view a Q&A website's application, lead, and view counts?"
- Open
/quote-and-apply/:idand click Analytics, or go to/quote-and-apply/:id?page=analytics. Counts are for the Past 7 Days, Past 30 Days, Past 90 Days, and All Time.
- Open
"How do I link to a specific section inside website settings?"
- Use
/quote-and-apply/:id?page=<tab>&scroll-to=<element-id>.
- Use
"Why are some website setting tabs missing?"
- Tab visibility depends on site type and lock state. Locked sites show only Details and Access.
"Why was I redirected from a website settings link?"
- The record doesn't exist or failed to load.
Open questions
- The default view when
?view=is absent is not documented; confirm whether list is the fallback. - Exact user-facing labels for all
?page=values when tab availability changes by domain state. - Whether per-tab server-side permission checks exist beyond the UI visibility logic.
Guide: quotes/quotes.md
Quotes User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the quoting workspace, quote request creation and detail, and impaired-risk quote creation and detail. All five routes require BackNine visibility. Quote requests are multi-carrier quote solicitations; impaired-risk quotes focus on medical underwriting with per-carrier offer responses.
Entry points
| Route | Purpose |
|---|---|
/quotes |
Quoting workspace |
/quotes?page=<tab> |
Workspace opened to a specific quotes table |
/quotes/create |
Create a quote request |
/quotes/:id |
Quote request detail |
/impaired-risk-quotes/create |
Create an impaired-risk quote |
/impaired-risk-quotes/:id |
Impaired-risk quote detail |
Users also arrive from case/eApp detail pages via create actions and from notification deep links.
Deep links and routing behavior
Quoting workspace (/quotes):
?page=quote-requests— open to the Quote Requests table?page=impaired-risk-quotes— open to the Impaired Risk Quotes table- The Quote & Apply eApps tab is a link-out to
/quote-and-applyand does not use?page=.
Quote request detail (/quotes/:id):
?page=<tab>— open to a named tab?highlight-todo=<id>— highlight a specific to-do
Impaired-risk quote detail (/impaired-risk-quotes/:id):
?page=<tab>— open to a named tab?offer=<offer-key>— open the Offers tab and focus a specific offer?highlight-todo=<id>— highlight a specific to-do?highlight-note=<id>— highlight a specific note or email (triggers the full email/note viewer)
No deep links are defined for the create routes.
Navigation behavior
Workspace: Two areas — "Create a new Quote" resource cards and "View an Existing Quote" tabs. Resource cards may open dialogs, external links, or create routes. Tab state syncs with ?page= for table tabs.
Create quote request: Multi-section guided form (General Info, Insured Info, Joint Insured [conditional], Illustration [line-specific], Additional Info). On success, redirects to /quotes/:id. If line is life or LTC and the selected agent has a default approved Q&A domain, a prompt offers to continue in Quote & Apply instead.
Quote request detail (/quotes/:id): Summary card + tabs via ?page=<slug>. All tabs are always visible. Life, LTC, and annuity quotes include a Create eApp action. Quotes created from a case retain their View Case action after creating an eApp, and the created eApps are available from View eApp — including on lines that cannot create an eApp, such as disability, where View eApp appears without the create option. Users who can view a quote can delete it after confirming; successful deletion returns them to the Quotes workspace.
| Slug | Tab | Notes |
|---|---|---|
notes |
Notes | Chat and activity feed; eager-loaded; default tab |
parties |
Parties | Related parties |
details |
Details | Quote identity, line, insured, carrier targets |
to-do |
To-Do | Eager-loaded; red badge with count; ?highlight-todo=<id> |
access |
Access | Control who can view/manage |
Create impaired-risk quote: Structured form (Agent and Insured, Impairments, Underwriting Info, Coverage Type, Carriers). Carrier list populates automatically once face amount, coverage type, state, and birthdate are all set. Can be pre-filled when opened from a case, eApp, or existing quote via component props. On success, redirects to /impaired-risk-quotes/:id.
Impaired-risk quote detail (/impaired-risk-quotes/:id): Quote card + tabs via ?page=<slug>. All tabs are always visible. ?offer=<key> focuses a specific carrier offer within the Offers tab.
| Slug | Tab | Notes |
|---|---|---|
offers |
Offers | Per-carrier underwriting responses; ?offer=<key> to focus one; default tab |
impairments |
Impairments | Medical impairment records |
details |
Details | Coverage type, face amount, underwriting info |
to-do |
To-Do | Eager-loaded; red badge with count; ?highlight-todo=<id> |
access |
Access | Control who can view/manage |
If any record fails to load, the user is redirected to Home.
Visibility and permissions
- All five routes require an authenticated user with BackNine visibility (
show_backnine). Users without it are redirected to Home. - Quote requests are created with status Entered. There is no status field on the create form.
- Anyone who can view a quote can delete it.
How to use
To create a quote request:
- Open
/quotes/create(or use the "Create Quote Request" card on/quotes). - Fill in General Info: line, state, and requesting agent.
- Fill in Insured Info. If life or LTC joint coverage, complete Joint Insured.
- Fill in Illustration fields (line-specific).
- Complete Additional Info.
- If life/LTC and the selected agent has a default Q&A domain, choose to continue in Quote & Apply or stay.
- Submit. Redirected to
/quotes/:id.
To create an impaired-risk quote:
- Open
/impaired-risk-quotes/create(or use the action on a case or eApp). - Fill in Agent and Insured section, including state and birthdate.
- Add Impairments.
- Fill in Underwriting Info and Coverage Type (including face amount).
- Wait for the carrier list to auto-populate. Select target carriers.
- Submit. Redirected to
/impaired-risk-quotes/:id.
To work an existing quote or impaired-risk quote:
- Open
/quotes/:idor/impaired-risk-quotes/:idfrom the workspace or a notification. - Use
?page=<tab>to go directly to a tab. - Use
?offer=<offer-key>on an impaired-risk quote to highlight a specific offer. - Use
?highlight-todo=<id>or?highlight-note=<id>from notification links.
To create an eApp from a quote:
1. Open a life, LTC, or annuity quote at /quotes/:id.
2. Click Create eApp and confirm.
3. The new eApp opens automatically. Return to the quote to use View Case for its originating case or View eApp for any eApps created from it.
What can be updated
Quote request (/quotes/:id):
| Area | Tab | Notes |
|---|---|---|
| Notes and messages | Notes | Add new notes; ?highlight-note= to jump to specific items |
| Parties | Parties | Manage related parties |
| Quote details (line, insured, carriers, amounts) | Details | Post-create edits |
| To-dos | To-Do | Create, complete, reassign |
| Access | Access | Control who can view/manage this quote |
Impaired-risk quote (/impaired-risk-quotes/:id):
| Area | Tab | Notes |
|---|---|---|
| Carrier offers | Offers | Review and respond to offers; ?offer=<key> to focus one |
| Impairment records | Impairments | Add/update impairment details |
| Quote details | Details | Update coverage and underwriting fields |
| To-dos | To-Do | Create, complete, reassign |
| Access | Access | Control who can view/manage this quote |
What users can do
Workspace: Launch quoting tools and external resources; browse quote and impaired-risk quote tables.
Create quote request: Build and submit a line-specific quote request with insured, product, and illustration inputs.
Quote request detail: Manage notes, parties, details, todos, and access. Users who can view the quote can delete it from the page actions after confirming.
To add someone to quote Access:
- Open
/quotes/:id?page=access. - Search for the advisor. Results show Connected or Not Connected.
- Click Add Access. If they are not connected, confirm Add Unrelated Agent?. This prompt does not appear for carrier personnel.
Create impaired-risk quote: Build a quote with medical impairment and coverage details; select carrier targets.
Impaired-risk quote detail: Review underwriter offers; manage todos and access; update details. On an offer's chat, the download icon saves that carrier's messages as a PDF.
To add someone to impaired-risk quote Access:
- Open
/impaired-risk-quotes/:id?page=access. - Search for the advisor. Results show Connected or Not Connected.
- Click Add Access. If they are not connected, confirm Add Unrelated Agent?. This prompt does not appear for carrier personnel.
Common blockers
- BackNine visibility is required for all five routes. If the user is redirected to Home, confirm this is enabled.
- For the impaired-risk quote carrier list: face amount, coverage type, state, and birthdate must all be set before carriers load.
- The
:idmust be valid for the record type. Invalid IDs redirect to Home. - Unknown
?page=,?offer=, or?highlight-*values fall back to the default tab without an error.
Related routes
/cases/:id/create-quote-request— create quote request from a case/cases/:id/create-impaired-risk-quote— create impaired-risk quote from a case/electronic-applications/:id/create-quote-request— create quote request from an eApp/quote-and-apply— Q&A eApps pipeline referenced from the workspace
"How do I" response patterns
"How do I add access on a quote request?"
- Open
/quotes/:id?page=access. Search, then click Add Access. Confirm if the person is Not Connected. Carrier personnel do not see that confirmation.
- Open
"How do I add access on an impaired-risk quote?"
- Open
/impaired-risk-quotes/:id?page=access. Search, then click Add Access. Confirm if the person is Not Connected. Carrier personnel do not see that confirmation.
- Open
"How do I create a quote request?"
- Open
/quotes/create. Complete all sections and click "Create Quote Request."
- Open
"How do I find an existing quote?"
- Open
/quotes. Use the Quote Requests tab, filter/search, and click the insured name.
- Open
"How do I open a quote to To-Do?"
- Open
/quotes/:id?page=to-do. Add?highlight-todo=<id>for a specific item.
- Open
"How do I create an impaired-risk quote?"
- Open
/impaired-risk-quotes/create. Fill in insured, impairments, and underwriting fields. Wait for the carrier list to load. Select carriers and submit.
- Open
"Why isn't the carrier list showing on my impaired-risk quote?"
- All four fields must be filled: face amount, coverage type, state, and birthdate.
"How do I open a specific offer from a link?"
- Use
/impaired-risk-quotes/:id?offer=<offer-key>.
- Use
"How do I export an impaired-risk offer conversation?"
- Open
/impaired-risk-quotes/:id?page=offers, select the carrier, and click the download icon in the chat header. The file is that carrier's messages.
- Open
"Why can't I access quote routes?"
- BackNine visibility is required. Contact BackNine support.
Open questions
- Whether additional server-side rules restrict quote table results beyond route guards and in-table filters.
Guide: reports/reports.md
Reports User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the personal production report, the Accelerated Underwriting report, and the scorecard. Staff report pages are not part of a standard account.
Entry points
| Route | Purpose |
|---|---|
/reports/personal |
Personal production and activity report |
/reports/accelerated-underwriting |
Accelerated Underwriting carrier rules |
/reports/scorecard |
Multi-period scorecard table |
All reports are reached from the app navigation menu. No deep links are defined — each route loads a single full-page report.
Deep links and routing behavior
No query-parameter deep links are defined for any report route.
Navigation behavior
Personal (/reports/personal): Dashboard of independently loading report cards/graphs. Cards include: applications, case duration, completed eApps, impairment, instant decisions, placement ratio, premium, Q&A, and personal todos. Commissions card hidden when hide_commission = true. First-case-bonus card shown only when enabled on the account. The Applications and Quote & Apply Applications charts have By Month and Trailing 30 Days tabs. Trailing 30 Days plots each week as the prior 30 days.
Accelerated Underwriting (/reports/accelerated-underwriting): A searchable table of carrier program rules. Columns are Carrier, Categories, and Program Rules. The table starts sorted by carrier name. Use Search to filter the rows. Refresh reloads the list. A load failure shows an error snackbar and leaves the table empty.
Scorecard (/reports/scorecard): Tabbed report with time period tabs (Today, Last 7 Days, Last 30 Days, Current Year, Prior Year, Pending Production). Controls:
- Increase/decrease font size
- Enable/disable automatic data refresh (shows "Last Refreshed" timestamp)
- Enable/disable automatic table cycling through periods
- Enter/exit fullscreen
Visibility and permissions
| Route | Required |
|---|---|
/reports/personal |
Signed in (some cards are hidden by account flags) |
/reports/accelerated-underwriting |
Signed in |
/reports/scorecard |
Signed in, and the account has scorecard permission |
How to use
Personal report:
1. Open /reports/personal.
2. Review individual metric cards as they load (each loads independently — failures show per-card errors, not a full-page redirect).
Accelerated Underwriting:
1. Open Reports in the navigation menu and choose Accelerated UW, or open /reports/accelerated-underwriting.
2. Use Search to filter Carrier, Categories, or Program Rules.
3. Click Refresh to reload the list.
Scorecard (monitor/display setup):
1. Open /reports/scorecard.
2. Enable automatic refresh (shows last-refreshed timestamp).
3. Enable automatic table cycling to rotate through time periods.
4. Click the fullscreen button to enter fullscreen mode.
5. Use the font size controls if the display requires adjustment.
What can be updated
All reports are read-only. No data can be created, modified, or deleted from any report route.
The scorecard offers display controls (font size, refresh toggle, cycling toggle, fullscreen) that affect how the page renders — these are local UI preferences, not persisted settings.
What users can do
Personal: Review personal production metrics, todos, commissions (when visible), and bonus cards (when applicable).
Accelerated Underwriting: Search and refresh the carrier program-rules table.
Scorecard: Compare production metrics across time periods; sort columns; configure refresh and cycling for monitor/display use.
Common blockers
- Scorecard requires scorecard permission. Without it, the page redirects to Home.
- Personal report card-level failures show per-card errors (not a full-page redirect).
Related routes
/commissions— commissions metrics related to personal report cards
"How do I" response patterns
"How do I open my personal report?"
- Go to
/reports/personal.
- Go to
"How do I open the Accelerated Underwriting report?"
- Open Reports and choose Accelerated UW, or go to
/reports/accelerated-underwriting. Search filters the table. Refresh reloads it.
- Open Reports and choose Accelerated UW, or go to
"How do I see trailing 30 day counts on the Applications or Quote & Apply Applications chart?"
- Open
/reports/personal. - On the Applications chart or the Quote & Apply Applications chart, select the Trailing 30 Days tab.
- Select By Month to return to monthly counts.
- Open
"Why don't I see a commissions chart in my personal report?"
- The commissions card is hidden when commissions visibility is disabled on the account.
"How do I access the scorecard?"
- Open
/reports/scorecard. If redirected, scorecard permission is not on the account.
- Open
"How do I set up the scorecard on a monitor?"
- Open
/reports/scorecard. Enable automatic refresh and table cycling. Enter fullscreen.
- Open
Open questions
- Exact refresh and cycle timing values for the scorecard (set in the view component; may change).
- Whether the scorecard API enforces additional data scoping beyond the route guard.
Guide: routes/RouteInventory.context.md
Route Inventory Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Routes a standard user can open. Some still require sign-in inside BOSS. A few also require an account flag: BackNine visibility, commissions visibility, an approved Quote & Apply domain, or scorecard permission. Staff-only routes, BackNine employee routes, and marketing-manager tools are omitted.
Applications and reports
/applications (FormsAndApplicationsView)
- Purpose: Forms & Applications landing page.
- Entry points: Main app navigation.
- Deep links/query params: None route-specific.
- Visibility: Authenticated.
- User actions: Start forms/app flows and calculators.
- How do I...: "How do I find forms and application tools?"
- Adjacent routes:
/applications/retirement-income-calculator,/applications/request.
/applications/retirement-income-calculator (RetirementIncomeCalculator)
- Purpose: Retirement Income Calculator tool.
- Entry points: Forms & Applications page.
- Deep links/query params: None route-specific.
- Visibility: Authenticated.
- User actions: Run retirement income projection workflow.
- How do I...: "How do I open the retirement income calculator?"
- Adjacent routes:
/applications.
/applications/request (ApplicationRequest)
- Purpose: Create application request.
- Entry points: Forms & Applications page.
- Deep links/query params: None route-specific.
- Visibility: Authenticated + BackNine visible.
- User actions: Request a new application flow.
- How do I...: "How do I request an application?"
- Adjacent routes:
/applications.
/reports/personal (PersonalReportView)
- Purpose: Personal reporting dashboard.
- Entry points: Reports navigation.
- Deep links/query params: None route-specific.
- Visibility: Authenticated.
- User actions: Review personal performance/production data.
- How do I...: "How do I view my personal report?"
- Adjacent routes:
/reports/scorecard,/reports/accelerated-underwriting.
/reports/scorecard (ScorecardReport)
- Purpose: Scorecard report.
- Entry points: Reports navigation.
- Deep links/query params: None route-specific.
- Visibility: Authenticated + Scorecard access.
- User actions: View scorecard metrics.
- How do I...: "How do I access scorecard reporting?"
- Adjacent routes:
/reports/personal,/reports/accelerated-underwriting.
/reports/accelerated-underwriting (AcceleratedUnderwritingReport)
- Purpose: Accelerated Underwriting carrier program rules.
- Entry points: Reports navigation, Accelerated UW.
- Deep links/query params: None route-specific.
- Visibility: Authenticated.
- User actions: Search and refresh the Carrier, Categories, and Program Rules table.
- How do I...: "How do I open the Accelerated Underwriting report?"
- Adjacent routes:
/reports/personal,/reports/scorecard.
Quotes and quote-and-apply
/quotes (QuotingView)
- Purpose: Quotes workspace/list.
- Entry points: Primary navigation.
- Deep links/query params: None route-specific.
- Visibility: Authenticated + BackNine visible.
- User actions: Browse and open quote requests.
- How do I...: "How do I find my quote requests?"
- Adjacent routes:
/quotes/create,/quotes/:id.
/quotes/create (CreateQuoteRequest)
- Purpose: Create quote request.
- Entry points: Quotes workspace.
- Deep links/query params: Route params passed to props if provided.
- Visibility: Authenticated + BackNine visible.
- User actions: Submit new quote request.
- How do I...: "How do I create a quote request?"
- Adjacent routes:
/quotes,/cases/:id/create-quote-request.
/quotes/:id (QuoteView)
- Purpose: Quote detail page.
- Entry points: Quotes list and deep links.
- Deep links/query params:
page,highlight-todo. - Visibility: Authenticated + BackNine visible.
- User actions: Review quote details/tasks by section.
- How do I...: "How do I jump to a specific quote todo?"
- Adjacent routes:
/quotes.
/impaired-risk-quotes/create (ImpairedRiskQuoteCreate)
- Purpose: Create impaired risk quote.
- Entry points: Quotes context or underwriting paths.
- Deep links/query params: None route-specific.
- Visibility: Authenticated + BackNine visible.
- User actions: Start impaired-risk quote flow.
- How do I...: "How do I create an impaired risk quote?"
- Adjacent routes:
/impaired-risk-quotes/:id,/cases/:id/create-impaired-risk-quote.
/impaired-risk-quotes/:id (ImpairedRiskQuoteView)
- Purpose: Impaired risk quote detail.
- Entry points: Quote links and deep links.
- Deep links/query params:
page,offer,highlight-todo,highlight-note. - Visibility: Authenticated + BackNine visible.
- User actions: Review impaired quote sections, offers, and activity. Download the selected offer's chat as a PDF from the chat header.
- How do I...: "How do I deep link into an impaired quote note/todo?"
- Adjacent routes:
/impaired-risk-quotes/create,/quotes.
/quote-and-apply (QuoteAndApply)
- Purpose: Quote & Apply landing/list page.
- Entry points: Primary navigation.
- Deep links/query params:
view. - Visibility: Authenticated.
- User actions: Switch between Quote & Apply views.
- How do I...: "How do I switch Quote & Apply view modes?"
- Adjacent routes:
/quote-and-apply/:id,/electronic-applications/:id.
/quote-and-apply/:id (ApprovedDomainView)
- Purpose: Quote & Apply detail record.
- Entry points: Quote & Apply list.
- Deep links/query params:
page,scroll-to. - Visibility: Authenticated.
- User actions: Open detail tabs/sections and scroll anchors.
- How do I...: "How do I deep link to a section in Quote & Apply?"
- Adjacent routes:
/quote-and-apply.
Forms, appointments, advisors, profile
/appointments/:id (AppointmentView)
- Purpose: Appointment detail page.
- Entry points: Appointments table/list links.
- Deep links/query params:
page,task,highlight-todo,highlight-note. - Visibility: Authenticated.
- User actions: Manage appointment sections, tasks, notes.
- How do I...: "How do I open a specific task on an appointment?"
- Adjacent routes:
/tables?page=appointments.
/advisors/create (AdvisorCreate)
- Purpose: Create advisor flow.
- Entry points: Advisors table action links.
- Deep links/query params: None route-specific.
- Visibility: Authenticated + account must allow add advisor (
disable_add_advisorfalse). - User actions: Create advisor record.
- How do I...: "How do I add a new advisor?"
- Adjacent routes:
/tables?page=advisors,/agents/:id,/agencies/:id.
/profile (AdvisorProfileView, LoggedInUserProfile)
- Purpose: Logged-in user's own profile view.
- Entry points: User menu/profile links.
- Deep links/query params:
page,resource. - Visibility: Authenticated self-view.
- User actions: Open personal profile sections and resources.
- How do I...: "How do I open my profile page section directly?"
- Adjacent routes:
/settings,/agents/:id,/agencies/:id.
/agents/:id (AdvisorProfileView, AgentView)
- Purpose: Agent profile detail.
- Entry points: Advisor table and linked records.
- Deep links/query params:
page,resource,highlight-todo,highlight-note. - Visibility: Authenticated.
- User actions: Review agent profile tabs, notes, todos, and life production-credit commission progress on Performance.
- How do I...: "How do I open an agent profile note or todo from a link?" / "How do I see commission schedule progress?"
- Adjacent routes:
/agencies/:id,/agents/:id/settings,/advisors/:type/:id.
/agencies/:id (AdvisorProfileView, AgencyView)
- Purpose: Agency profile detail.
- Entry points: Advisor table and linked records.
- Deep links/query params:
page,resource,highlight-todo,highlight-note. - Visibility: Authenticated.
- User actions: Review agency profile tabs, notes, todos, and life production-credit commission progress on Performance (2x agent life goals).
- How do I...: "How do I open an agency profile section from a link?" / "How do I see an agency's commission schedule progress?"
- Adjacent routes:
/agents/:id,/agencies/:id/settings,/advisors/:type/:id.
/advisors/:type/:id (AdvisorView, redirect)
- Purpose: Legacy advisor route redirect.
- Entry points: Old/deprecated links.
- Deep links/query params: Preserves query parameters to destination.
- Visibility: Authenticated.
- User actions: Automatic redirect to
/agents/:idor/agencies/:id. - How do I...: "How do old advisor links resolve now?"
- Adjacent routes:
/agents/:id,/agencies/:id.
/carriers/:id (CarrierView)
- Purpose: Carrier detail page.
- Entry points:
Tablescarriers page. - Deep links/query params:
page. - Visibility: Authenticated + BackNine visible.
- User actions: Review carrier sections.
- How do I...: "How do I open a carrier page at a specific tab?"
- Adjacent routes:
/tables?page=carriers,/personnel/:id.
/personnel/:id (PersonnelView)
- Purpose: Carrier personnel detail.
- Entry points: Personnel table/list links.
- Deep links/query params:
page,highlight-note. - Visibility: Authenticated.
- User actions: Open personnel details and notes.
- How do I...: "How do I deep link to a personnel note?"
- Adjacent routes:
/tables?page=carrier-personnel.
Cases, eApps, clients, and parties
/cases (CasesTable)
- Purpose: Case listing/search page.
- Entry points: Main case navigation.
- Deep links/query params: None route-specific.
- Visibility: Authenticated.
- User actions: Browse and open cases.
- How do I...: "How do I find a case?"
- Adjacent routes:
/cases/informal/create,/cases/:id.
/cases/informal/create (CaseCreateInformal)
- Purpose: Create informal case.
- Entry points: Cases page action links.
- Deep links/query params: None route-specific.
- Visibility: Authenticated.
- User actions: Create informal case request.
- How do I...: "How do I create an informal case?"
- Adjacent routes:
/cases,/cases/:id.
/cases/submit (CaseSubmission)
- Purpose: Case submission workflow.
- Entry points: Cases page and create flows.
- Deep links/query params: None route-specific.
- Visibility: Authenticated.
- User actions: Submit a case package.
- How do I...: "How do I submit a case?"
- Adjacent routes:
/cases,/cases/:id.
/cases/:id (CaseView)
- Purpose: Case detail workspace.
- Entry points: Cases table, notifications, and deep links.
- Deep links/query params:
page,task,type,email-id,highlight-todo,highlight-note. - Visibility: Authenticated.
- User actions: Review case tabs, tasks, email context, notes, todos.
- How do I...: "How do I open a case directly to a task, email, or note?"
- Adjacent routes:
/cases/:id/create-impaired-risk-quote,/cases/:id/create-quote-request,/electronic-applications/:id.
/cases/:id/create-impaired-risk-quote (ImparedRiskQuoteCreateFromCase)
- Purpose: Create impaired-risk quote from case context.
- Entry points: Case detail actions.
- Deep links/query params: Uses case
:id. - Visibility: Authenticated.
- User actions: Launch impaired-risk quote with case pre-context.
- How do I...: "How do I create an impaired risk quote from a case?"
- Adjacent routes:
/cases/:id,/impaired-risk-quotes/create.
/cases/:id/create-quote-request (QuoteRequestCreateFromCase)
- Purpose: Synthesize quote request from case context.
- Entry points: Case detail actions.
- Deep links/query params: Uses case
:id. - Visibility: Authenticated.
- User actions: Generate a quote request from case data.
- How do I...: "How do I create a quote request from a case?"
- Adjacent routes:
/cases/:id,/quotes/create.
/electronic-applications/:id (ElectronicApplicationView)
- Purpose: Electronic application detail.
- Entry points: Quote & Apply list, linked case flows.
- Deep links/query params:
page,from-case,highlight-todo,highlight-note,email-id. - Visibility: Authenticated.
- User actions: Review eApp tabs, email context, notes, todos.
- How do I...: "How do I open an eApp directly to a note, todo, or email?"
- Adjacent routes:
/quote-and-apply,/electronic-applications/:id/create-quote-request.
/electronic-applications/:id/create-quote-request (QuoteRequestCreateFromElectronicApplication)
- Purpose: Synthesize quote request from eApp context.
- Entry points: Electronic application actions.
- Deep links/query params: Uses eApp
:id. - Visibility: Authenticated.
- User actions: Generate quote request using eApp data.
- How do I...: "How do I create a quote request from an eApp?"
- Adjacent routes:
/electronic-applications/:id,/quotes/create.
/clients/create (ContractPartyCreate)
- Purpose: Create client (contract party).
- Entry points:
Tablesclients page action links. - Deep links/query params: None route-specific.
- Visibility: Authenticated + BackNine visible.
- User actions: Create client record.
- How do I...: "How do I add a client?"
- Adjacent routes:
/clients/:id,/tables?page=clients.
/clients/:id (ContractPartyView)
- Purpose: Client detail page.
- Entry points: Clients table/list links.
- Deep links/query params:
page,highlight-todo,highlight-note. - Visibility: Authenticated.
- User actions: Review client tabs, notes, todos.
- How do I...: "How do I open a client directly to notes or todos?"
- Adjacent routes:
/clients/create,/tables?page=clients.
/case-management (CaseManagement)
- Purpose: Case Management dashboard.
- Entry points: Main navigation and reporting workflows.
- Deep links/query params: None route-specific.
- Visibility: Authenticated.
- User actions: Work case-management queue/dashboard.
- How do I...: "How do I access the case management dashboard?"
- Adjacent routes:
/cases.
/individuals/:id (PartyView, type Individual)
- Purpose: Individual party record view.
- Entry points: Linked references from cases/clients.
- Deep links/query params:
highlight-note. - Visibility: Authenticated.
- User actions: Review individual record details and note context.
- How do I...: "How do I open an individual party note link?"
- Adjacent routes:
/entities/:id.
/entities/:id (PartyView, type Entity)
- Purpose: Entity party record view.
- Entry points: Linked references from cases/clients.
- Deep links/query params:
highlight-note. - Visibility: Authenticated.
- User actions: Review entity record details and note context.
- How do I...: "How do I open an entity party record?"
- Adjacent routes:
/individuals/:id.
Commissions, accounting, and contact
/commissions (CommissionsView)
- Purpose: Commissions dashboard and sections.
- Entry points: Main navigation.
- Deep links/query params:
page. - Visibility: Authenticated + Commissions visible + BackNine visible.
- User actions: Work commission pages by selected section.
- How do I...: "How do I navigate to a specific commissions section?"
- Adjacent routes:
/commissions/pay-periods/:id.
/commissions/pay-periods/:id (PayPeriodView)
- Purpose: Pay period detail.
- Entry points: Commissions pay-period list.
- Deep links/query params: None route-specific.
- Visibility: Authenticated + Commissions visible + BackNine visible.
- User actions: Review pay-period details.
- How do I...: "How do I open a pay period?"
- Adjacent routes:
/commissions?page=pay-periods.
/contact (BackNineContactsTable)
- Purpose: Contact table view.
- Entry points: Main navigation.
- Deep links/query params: None route-specific.
- Visibility: Authenticated.
- User actions: Browse contact records.
- How do I...: "How do I open the contacts table?"
- Adjacent routes:
/tables.
Products, marketing, and tables
/products (ProductsTable)
- Purpose: Products table/list.
- Entry points: Main navigation.
- Deep links/query params: None route-specific.
- Visibility: Authenticated + Commissions visible + BackNine visible.
- User actions: Browse products.
- How do I...: "How do I find products?"
- Adjacent routes:
/products/:id.
/products/:id (ProductView)
- Purpose: Product detail page.
- Entry points: Products list links.
- Deep links/query params:
page. - Visibility: Authenticated.
- User actions: Review product sections.
- How do I...: "How do I open a product page/tab directly?"
- Adjacent routes:
/products.
/marketing (MarketingView)
- Purpose: Marketing emails/tools page.
- Entry points: Main navigation.
- Deep links/query params: None route-specific.
- Visibility: Authenticated + Approved domain.
- User actions: Access marketing email features.
- How do I...: "How do I access marketing tools?"
- Adjacent routes:
/custom-chat-templates/create,/custom-chat-templates/:id.
/tables (TableView)
- Purpose: Multi-entity table hub.
- Entry points: Main navigation and breadcrumb links.
- Deep links/query params:
page(section selector). - Visibility: Authenticated.
- User actions: Switch between the table sections on a standard account.
- How do I...: "How do I open the right table section (appointments, clients, carriers, etc.)?"
- Adjacent routes: Most create/detail routes listed above.
Help center, support, and templates
/support-tickets/:id (SupportTicketView)
- Purpose: Support ticket detail.
- Entry points: Help center support links, notification links.
- Deep links/query params: None route-specific.
- Visibility: Authenticated.
- User actions: Review ticket contents, reply in Chat (emails Ticket Opened By), and open the person listed on Ticket Opened By.
- How do I...: "How do I reply to a support ticket?"
- Adjacent routes:
/help-center.
/help-center (HelpCenter)
- Purpose: Help Center landing page.
- Entry points: Main/help navigation.
- Deep links/query params: None route-specific.
- Visibility: Authenticated.
- User actions: Browse help categories and content.
- How do I...: "How do I find help documentation?"
- Adjacent routes:
/help-center/series/:id,/help-center/articles/:id.
/help-center/series/:id (HelpCenterSeries)
- Purpose: Help Center series view.
- Entry points: Help Center links.
- Deep links/query params:
:idmust be inAVAILABLE_SERIES. - Visibility: Authenticated + valid series id.
- User actions: Browse a specific series.
- How do I...: "How do I open a specific help series?"
- Adjacent routes:
/help-center,/help-center/articles/:id.
/help-center/articles/:id (Reader)
- Purpose: Help article reader.
- Entry points: Help Center/series links.
- Deep links/query params: Article
:id. - Visibility: Authenticated.
- User actions: Read article content.
- How do I...: "How do I open a help article by link?"
- Adjacent routes:
/help-center.
/custom-chat-templates/create (CustomChatTemplateCreator)
- Purpose: Create custom chat/email template.
- Entry points:
Tablescustom-chat-templates page actions. - Deep links/query params: None route-specific.
- Visibility: Authenticated.
- User actions: Create new template.
- How do I...: "How do I create an email template?"
- Adjacent routes:
/custom-chat-templates/:id,/tables?page=custom-chat-templates.
/custom-chat-templates/:id (CustomChatTemplateCreator)
- Purpose: Edit custom chat/email template.
- Entry points: Template list links.
- Deep links/query params: Template
:id. - Visibility: Authenticated.
- User actions: Edit existing template.
- How do I...: "How do I edit a custom chat template?"
- Adjacent routes:
/custom-chat-templates/create,/tables?page=custom-chat-templates.
Settings routes and legacy redirect
/settings (SettingsView)
- Purpose: Logged-in user's settings.
- Entry points: User menu/settings links.
- Deep links/query params:
page,action. - Visibility: Authenticated self settings.
- User actions: Manage own settings sections and connected actions.
- How do I...: "How do I open my settings to a specific page/action?"
- Adjacent routes:
/profile.
/agencies/:id/settings (SettingsView, AgencyEdit)
- Purpose: Agency settings editor.
- Entry points: Agency profile actions.
- Deep links/query params:
page,action. - Visibility: Authenticated.
- User actions: Manage agency settings pages.
- How do I...: "How do I edit an agency's settings page directly?"
- Adjacent routes:
/agencies/:id,/settings.
/agents/:id/settings (SettingsView, AgentEdit)
- Purpose: Agent settings editor.
- Entry points: Agent profile actions.
- Deep links/query params:
page,action. - Visibility: Authenticated.
- User actions: Manage agent settings pages.
- How do I...: "How do I edit an agent's settings page directly?"
- Adjacent routes:
/agents/:id,/settings.
/advisors/:type/:id/settings (AdvisorEdit, redirect)
- Purpose: Legacy settings redirect for advisors.
- Entry points: Deprecated links.
- Deep links/query params: Maps type to agent/agency settings; carries page/action intent.
- Visibility: Authenticated.
- User actions: Automatic redirect to current settings route.
- How do I...: "How do old advisor settings links map to current URLs?"
- Adjacent routes:
/agents/:id/settings,/agencies/:id/settings.
Known route redirects and fallback
/advisors/:type/:idredirects to/agents/:idor/agencies/:id./advisors/:type/:id/settingsredirects to/agents/:id/settingsor/agencies/:id/settings.- Unmatched routes (
/:pathMatch(.*)*) redirect to/.
Guide: settings/settings.md
Settings User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the settings views for the current user's own account, a specific agent's settings, and a specific agency's settings. Settings is a focused layout (separate from the main app shell) with a left sidebar for tab navigation. Each tab has a pass/fail indicator (✓/✗) driven by field validation.
Entry points
| Route | Purpose |
|---|---|
/settings |
Current user's own settings (self-view) |
/agents/:id/settings |
Settings for a specific agent record |
/agencies/:id/settings |
Settings for a specific agency record |
/advisors/:type/:id/settings |
Legacy redirect → matching agent or agency settings |
Users arrive from the user avatar menu, agent/agency profile pages ("Settings" action), and direct ?action= or ?page= deep links.
Deep links and routing behavior
?page=<slug>— open directly to a named tab. Legacy slug aliases (basics→account-details,profile→account-details,commission→commissions,business→commissions,legal→background-questions) are resolved automatically. Unknown slugs fall back to the default tab.?action=<action>— trigger a settings action on load. Currently known value:connect_with_wealthbox. Only fires when self-view and the integration is not yet connected.
Navigation behavior
- Settings uses a dedicated layout with a collapsible left sidebar (tab navigation). On mobile (md and below), the sidebar collapses to a hamburger menu; prev/next buttons appear at the bottom of the screen.
- The sidebar shows "Agent Settings" and "Agency Settings" subheaders when both an agent and an associated agency are loaded. When an agent belongs to multiple agencies, a dropdown above the Agency Settings section lets the user switch between agencies.
- Each tab shows a green ✓ (valid) or red ✗ (incomplete/invalid) indicator in the sidebar.
- On load, the tab selection priority is: (1)
?page=query match, (2) first tab with a red ✗ indicator, (3) first tab markeddefaultPage. - Navigating away ("Back to BOSS") returns to the profile page for the record, not the previous app page.
- If the settings record fails to load, the user is redirected to Home.
Visibility and permissions
- All routes require an authenticated user.
/settingsis always self-context; it always shows the current loginable's own settings./agents/:id/settingsand/agencies/:id/settingsare record-targeted; they require read access to that record.
Tab-level visibility rules:
| Slug | Visible when |
|---|---|
security |
Self-view only (/settings, agent type only) |
agency-security |
Self-view only for agency-type loginables (/settings when type = Agency) |
commissions |
Always — unless hide_commission = true and isViewingSelf |
eo, employment, background-questions, signature |
Non-SaaS accounts only |
agency-eo |
When type = Agency + self-view, or when agent's assignment is a different agency |
| All other tabs | Available to all authenticated users with access to the record |
Agent Settings tabs
All agent tabs navigate via ?page=<slug>.
account-details — Account Details (default tab)
Legacy slugs:
basics,profile
Profile section:
- Avatar upload ("Upload New Avatar" button → dialog)
- Display First Name
- Display Last Name (read-only; the hint says to contact support)
Legal Information section:
- Legal First Name (read-only; the hint says to contact support)
- Legal Last Name (read-only; same hint)
- SSN (one-time entry — read-only once saved)
- NPN (opens NPN dialog if blank; otherwise read-only)
- Birthdate
- Gender
- Driver's License State + Number (or toggle to "I don't have a drivers license" with reason field)
- Securities License Status (not licensed / licensed)
- CRD Number (shown when securities licensed, via dialog)
Contact Info section:
- Office Phone + Extension (tap the phone icon on Office Phone to start a call; hover shows a Call … tooltip)
- Mobile Phone (same call icon)
- Shipping Address (select from existing addresses)
Home Address History section:
- List of past residence addresses (5-year coverage required)
- Warning alert shown when coverage is incomplete
- "Add Address" button → dialog (prompts to set end date on previous address)
- Each entry: edit and delete actions
- Home address history accepts international addresses. The dialog includes Country; non-US entries use region/province and postal code instead of a US state and 5-digit ZIP. Autofill is not limited to the US.
Business Address section:
- Single business address, edit via dialog
- US-only. Do not use this dialog for international addresses.
Quote & Apply section (from AgentQuoteAndApply)
Whiteglove Settings section (when agent.isWhiteGloveAgent):
- Max Pending Cases for Whiteglove Leads
User Tutorials (self-view only)
Agent Identifiers section
admin — Admin
- Access — table of advisors this agent is providing/receiving access to. "Provide Access" → dialog. Edit and delete per row.
- Logins — read-only list of logins. There is no info button or row action. Password reset is hidden for SSO logins.
- Documents — agent documents (signature authorizations, contracting files).
email — Email
- Email Address — primary and additional email addresses.
- Email delivery blocked — shown when a bounce/reject was reported for the advisor email. Click Allow emails again to clear the block (also removes the address from the email provider’s reject list) so outbound BOSS emails resume.
- Email Notifications — per-event notification preferences.
- Compliance — choose an Access Report frequency of Off, Monthly, Quarterly, Semi-Annually, or Annually, and a Lapsed Policy Report frequency of Off, Daily, Weekly, Twice per Month, Monthly, Quarterly, Semi-Annually, or Annually. Access reports review account access; lapsed-policy reports list policies when BOSS first learns or is updated about the lapse, even if the effective lapse date is older. Twice per Month sends on the 1st and 15th.
- Monthly Performance Report — controls whether the agent receives the monthly performance report email. To change it, open Email and toggle "Monthly Performance Report" under Email Notifications; changes save automatically.
- Email Outbound — outbound email settings (agent module only).
- Trusted Senders — allowlist for inbound email senders.
trainings — Training (Optional)
Training and certification records.
commissions — Commission
Legacy slugs:
commission,business
- Commission Assignment — which agency or upline this agent routes commissions through. Always shown.
- Payment Method — EFT/payment details. Shown when no assignment is set and not readonly. Non-current bank accounts show a trash icon in the Bank account dropdown; confirming removes them from the list (archives; does not hard-delete).
- Commission Rates — per-line rates table. Shown when not viewing self.
- Commission Hierarchy — shown when you are not viewing your own settings.
- Agent Commission Splits — split rules.
"Learn about Commission Features" link opens a Help Center article in a dialog.
eo — E&O (non-SaaS only)
E&O coverage information and documents.
employment — Employment (non-SaaS only)
Employment history records. Employer addresses accept international countries, regions, and postal codes. Other address fields in settings (business address, agency address) stay US-only.
background-questions — Background Questions (non-SaaS only)
Legacy slug:
legal
Contracting background questions (legal history, disclosures). Each question may have explanation and document sub-sections.
signature — Signature (non-SaaS only)
Agent signature capture and management.
security — Security & Applications (self-view only)
Security (BOSS Access) section:
- Authenticator App (2FA / MFA enrollment and management)
- Passkeys (add, manage, remove passkeys — Face ID, Touch ID, Windows Hello, hardware key)
- Change Password button → dialog (hidden when
sso_authenticatable = true)
Applications section:
- Redtail CRM — connect / disconnect
- Wealthbox CRM — connect / disconnect (also triggerable via
?action=connect_with_wealthbox)
developer-settings — Developer Settings
- API Key — view and regenerate API key. Shown when a primary login exists; otherwise an info alert says "No Primary Login exists."
- Referral UID — shows the account's public referral identifier and what it is used for (invite links, Quote & Apply prefills, optional HMAC-signed prefills).
- Prefill HMAC Secret — optional secret for Quote & Apply prefill signing. Generate, view, cycle, or delete. When a partner sends
hmac, they must also sendreferral_uidand sign with this secret; prefills withouthmacare unchanged. - Demo/Sandbox — open a separate demo environment (safe for exploring features and workflows without affecting live data). Agents only; available on production and localhost only (hidden on staging/demo). Requires a primary login. Click Access Demo.
- Webhooks — create, edit, delete webhook endpoints.
Agency Settings tabs
Agency tabs also navigate via ?page=<slug>. They appear below the agent tabs in the sidebar when both records are loaded.
To update an agency's access report frequency, open Agency Email and use the Compliance section. Monthly Performance Report remains under Email Notifications; changes save automatically.
agency-basics — Agency Account Details (default tab)
Agency profile, contact, and identity details.
agency-admin — Agency Admin
Same sections as agent Admin: Access, Logins, and Documents. Logins is read-only.
agency-commissions — Agency Commissions
Agency-level commission configuration, including commission assignment and payment method.
agency-eo — Agency E&O
E&O coverage for the agency. Shown when:
- Viewing agency settings directly (
type = Agency), self-view or record-targeted, or - Viewing from an agent whose assignment is a different agency than the one loaded.
agency-email — Agency Email
Same sections as agent Email tab.
agency-security — Security & Applications (self-view only, agency loginable)
Same sections as agent Security tab. Only shown when the loginable's type is Agency and viewing self.
agency-developer-settings — Agency Developer Settings
Same as agent Developer Settings (API Key, Referral UID, Prefill HMAC Secret, Webhooks), except Demo/Sandbox is not shown (agents only).
How to use
- Open settings:
- Own settings:
/settingsor user avatar → Settings. - Another agent's settings: open
/agents/:id/settingsfrom the agent's profile. - An agency's settings: open
/agencies/:id/settingsfrom the agency's profile.
- Own settings:
- Use
?page=<slug>to land directly on a tab (e.g.?page=commissions). - Use
?action=connect_with_wealthboxto trigger the Wealthbox connection dialog on load. - Fields auto-save as you type (active-save pattern) — there is no explicit "Save" button on most tabs.
- Sidebar indicators (✓/✗) show which tabs still have incomplete or invalid fields.
- On mobile (md and below): use the hamburger menu (bottom-left) to open the tab list; use prev/next buttons (bottom-right) to step through tabs sequentially.
- "Back to BOSS" returns to the associated profile page.
What can be updated
Fields auto-save. There is no explicit submit button on most tabs — changes persist as you type or select.
Account Details (account-details):
| Field | Who can edit | Notes |
|---|---|---|
| Avatar | All with access | Via "Upload New Avatar" dialog |
| Display First Name | All with access | |
| Display Last Name | Read-only; contact support | Hint shown |
| Legal First Name | Read-only; contact support | |
| Legal Last Name | Read-only; contact support | |
| SSN | All — one-time entry | Read-only once saved |
| NPN | All — via dialog | Read-only once set |
| Birthdate | All with access (not readonly) | |
| Gender | All with access (not readonly) | |
| Driver's License | All with access (not readonly) | State + number, or "no license" reason |
| Securities License Status + CRD | All with access (not readonly) | CRD via dialog |
| Office Phone + Extension | All with access | Tap the phone icon on Office Phone to call. Extension is not callable on its own. |
| Mobile Phone | All with access | Tap the phone icon to call. Hover shows a Call … tooltip. |
| Shipping Address | All with access | Select from existing address list |
| Home Address History | All with access | Add (dialog), edit (dialog), delete (confirm dialog). International addresses allowed. |
| Business Address | All with access | Edit via dialog. US-only. |
| Whiteglove: Max Pending Cases | All with access (when applicable) |
Admin (admin):
| Area | Who | Notes |
|---|---|---|
| Access (connections) | All with access | Add, edit, delete advisor connections; each connection with Performance Report enabled receives an individual copy with a connection-specific unsubscribe link |
| Logins | Read-only | No info button or row actions. Password reset is hidden for SSO logins. |
| Documents | All with access | Advisor files only. |
Email (email / agency-email):
| Area | Who | Notes |
|---|---|---|
| Email Address | All | |
| Email Notifications | All | Per-event toggles |
| Email Outbound | Agent module only | |
| Trusted Senders | All | Allowlist |
Commissions (commissions):
| Area | Visible when | Notes |
|---|---|---|
| Commission Assignment | Always | |
| Payment Method | No assignment + not readonly | |
| Commission Rates | Not viewing self | |
| Commission Hierarchy | Not viewing self | |
| Agent Commission Splits | Always |
Security (security, self-view only):
| Area | Notes |
|---|---|
| Authenticator App (2FA) | Enroll or manage MFA |
| Passkeys | Add, view, remove passkeys |
| Change Password | Hidden when SSO (sso_authenticatable = true) |
| Redtail integration | Connect / disconnect |
| Wealthbox integration | Connect / disconnect |
Developer Settings (developer-settings):
| Area | Notes |
|---|---|
| API Key | View + regenerate (requires primary login) |
| Referral UID | Public referral identifier + usage notes (invite links, prefills, HMAC) |
| Prefill HMAC Secret | Optional prefill signing secret (generate / view / cycle / delete) |
| Demo/Sandbox | Access Demo button — agents only; production + localhost only; requires primary login |
| Webhooks | Create, edit, delete webhook endpoints |
What users can do
- Complete or update all required contracting fields (tracked by tab indicators).
- Manage address history, contact info, and legal/identity details.
- Configure security: 2FA, passkeys, password, and CRM integrations (self-view only).
- Set commission assignment, payment method, and splits.
- Manage documents and provide access to other advisors.
- Configure email preferences, notifications, and trusted senders.
- Manage API keys, referral UIDs, prefill HMAC secrets, and webhooks.
- Open the Demo/Sandbox environment from agent Developer Settings on production or localhost (requires primary login; not available under Agency Developer Settings or on staging/demo).
Common blockers
- Tabs that do not apply (SaaS, or self-view only) are absent. No error is shown.
- Legal name and display last name changes require emailing
[email protected]. - SSN is one-time entry — after it is saved it is read-only.
- NPN and CRD Number require entering values through their respective dialogs (clicking the read-only field opens the dialog when blank).
- Commission Rates and Commission Hierarchy are not visible when viewing self (they are managed by the upline, not by the agent themselves).
- Password change is hidden when the account uses SSO (
sso_authenticatable = true). - Developer Settings shows an info alert (not an error) when no primary login exists — API keys cannot be generated without one.
- Demo/Sandbox is hidden outside production and localhost (e.g. staging and demo environments).
- Unknown
?page=slugs (including stale bookmarks) fall back to the default tab without error. ?action=values that don't match a known action silently do nothing.
Related routes
/agents/:id— agent profile (navigate to settings from the profile view)/agencies/:id— agency profile (navigate to settings from the profile view)/profile— shorthand for the logged-in user's own agent profile/2fa-required— forced 2FA enrollment, reached from auth flow before settings access/passkey-suggestion— post-login passkey setup suggestion
"How do I" response patterns
"How do I open my own settings?"
- Go to
/settings. Add?page=<slug>to open a specific tab.
- Go to
"How do I change my password?"
- Open
/settings?page=security. Click "Change Password." (Not available when SSO is enabled.)
- Open
"How do I set up or manage 2FA?"
- Open
/settings?page=security. Use the Authenticator App section to enroll or manage.
- Open
"How do I add a passkey?"
- Open
/settings?page=security. Use the Passkeys section.
- Open
"How do I connect Wealthbox?"
- Open
/settings?action=connect_with_wealthbox, or go to/settings?page=securityand use the Wealthbox card under Applications.
- Open
"How do I update my commission assignment or payment method?"
- Open
/settings?page=commissions(or/agents/:id/settings?page=commissions).
- Open
"How do I reorder override commissions for an agent?"
- Open
/agents/:id/settings?page=commissionsand drag advisors in Who should receive override commissions? into payment order. - To remove an advisor from override commissions, click the remove icon beside that advisor.
- Advisors you do not have permission to access are fixed in place: they cannot be removed, dragged, or crossed while reordering.
- Open
"How do I remove an old bank account from commission payment methods?"
- Open
/settings?page=commissions(agent) or/agents/:id/settings?page=agency-commissions(agency). Open the Bank account dropdown. For any account that is not current, click the trash icon and confirm. The current account cannot be removed until another account is selected.
- Open
"How do I provide access to another advisor?"
- Open settings →
admintab → Access section → "Provide Access."
- Open settings →
"How do I call an agent's office or mobile phone from settings?"
- Open
/settings?page=account-details(or/agents/:id/settings?page=account-details). In Contact Info, tap the phone icon next to Office Phone or Mobile Phone. Hovering the icon shows a Call … tooltip. The icon only appears when that field has a number.
- Open
"How do I enter an international home or employment address?"
- Home history: open
/agents/:id/settings?page=account-details(or/settings?page=account-details). In Home Address History, click Add Address or an existing row. Choose Country, then enter the region/province and postal code. Autofill can return non-US places. Business address on the same page stays US-only. - Employment: open
/agents/:id/settings?page=employment(hidden for SaaS). Click Add Employment History and enter the employer address, including Country when it is outside the US.
- Home history: open
"How do I edit my legal name?"
- The legal name fields are read-only. Contact
[email protected].
- The legal name fields are read-only. Contact
"How do I change my NPN?"
- Open
/settings?page=account-details. Click the NPN field — it opens a dialog when blank.
- Open
"How do I manage API keys, referral UIDs, prefill HMAC secrets, or webhooks?"
- Open
/settings?page=developer-settings.
- Open
"How do I access the demo/sandbox?"
- On production or localhost: open Settings → Developer Settings (
/settings?page=developer-settings), then click Access Demo. Agents only; requires a primary login. Not available on Agency Developer Settings. - Not shown on staging or demo environments.
- On production or localhost: open Settings → Developer Settings (
"How do I clear an email bounce block?"
- Open
/settings?page=email(or/settings?page=agency-emailfor an agency). If delivery was blocked, an Email delivery blocked card appears — click Allow emails again.
- Open
"Why don't I see the Security tab on another agent's settings?"
- The Security & Applications tab is self-view only. Open your own
/settingsto manage security.
- The Security & Applications tab is self-view only. Open your own
"Why is a tab missing?"
- E&O, Employment, Background Questions, and Signature are hidden for SaaS accounts.
- Commissions is hidden when
hide_commission = trueand viewing self. - Security is self-view only.
- Check the table under "Visibility and permissions" above.
Open questions
- Complete list of valid
?action=values beyondconnect_with_wealthbox. - Exact fields within
AgencyBasicInfo,AgencyCommissions,TrainingsView,EoPage,EmploymentHistory,ContractingQuestions,AgentSignature, andAgentQuoteAndApply— confirm from the live components. - Whether any field in Account Details has edit restrictions beyond the ones documented above.
Guide: tables/tables.md
Tables User Flow Context
Audience: Group 1. This guide is public and does not require a BOSS account to read.
Purpose
Covers the multi-entity table hub at /tables. This is a single page with alphabetically sorted tabs, each loading a separate table component for a different record type. It is the primary browse/search entry point for advisors, appointments, carriers, clients, email templates, and more.
Entry points
| Route | Purpose |
|---|---|
/tables |
Tables hub (opens to first available tab) |
/tables?page=<section> |
Tables hub opened to a specific section |
Reached from the app navigation menu.
Deep links and routing behavior
?page=<section>— open directly to a named tab. If that tab is not on the account, the page opens the first available tab.
Available ?page= values:
| Value | Tab label | Visibility |
|---|---|---|
advisors |
Advisors | Signed-in users |
appointments |
Appointments | Signed-in users |
carriers |
Carriers | Signed-in users |
carrier-personnel |
Carrier Personnel | Signed-in users |
clients |
Clients | Signed-in users |
custom-chat-templates |
Email Templates | Signed-in users |
tasks |
Tasks | Signed-in users with BackNine visibility |
todos |
To-Dos | Signed-in users |
underwriting |
Underwriting | Signed-in users. Browse and filter only. |
Navigation behavior
- Tabs are sorted alphabetically.
- Tab switching updates
?page=in the URL — navigating back restores the previous tab. - Each tab's data loads on first activation; switching between loaded tabs does not re-fetch.
- Each section uses its own table component with section-specific filters, sorting, and pagination.
- Arrow indicators appear when the tab list overflows the visible area, allowing scroll navigation.
Visibility and permissions
- Route requires an authenticated user.
- Tasks requires BackNine visibility (
show_backnine). - The tabs listed above are the ones on a standard account.
How to use
- Open
/tablesfrom the navigation menu. The first available tab loads by default. - Use
?page=<section>to open directly to a specific tab (e.g./tables?page=carriers). - Within a tab, use the filters, search, and sort controls to find records.
- Click a row to navigate to the record's detail page.
- Click the "+" or "Create" button (where available in a section) to navigate to the create route for that type.
- For the Email Templates tab: inline copy and delete actions are available on each row.
What can be updated
The Tables hub is a browse interface — records are not edited inline in the table (except for Email Templates copy/delete actions).
| Section | Create supported | Inline actions |
|---|---|---|
| Advisors | Yes (to /advisors/create) |
No |
| Appointments | No | No |
| Carriers | No | No |
| Carrier Personnel | No | No |
| Clients | Yes (to /clients/create) |
No |
| Email Templates | Yes (to /custom-chat-templates/create) |
Copy, Delete |
| Tasks | No | No |
| To-Dos | No | No |
| Underwriting | No | No |
All other editing is done on the individual record's detail page.
What users can do
- Browse, filter, search, and sort records for each entity type from a single hub.
- Create new records from within each section (where creation is supported).
- Navigate to detail pages by clicking record rows.
- Perform inline table actions (for example, copy or delete an email template from the Email Templates tab).
- On Underwriting, filter the Height & Weight table. Creating or editing build charts and temporary insurance profiles is not available on a standard account.
Common blockers
- A
?page=value for a tab that is not on a standard account falls back to the first available tab. No error is shown. - Individual table sections may have their own create/edit permission requirements; the Tables hub itself only requires authentication.
- If a section fails to load data, a snackbar error appears and the table stays empty. A refresh button (where available in the section) retries the load.
Related routes
- Detail and create routes for each section (for example
/agents/:id,/carriers/:id,/custom-chat-templates/create) - All entity create routes listed in each tab are navigated to from that tab's "+" or create button
"How do I" response patterns
"How do I open the advisors table?"
- Go to
/tables?page=advisors. The 12mo Inforce column is trailing 12 months of inforce production credit. Filter it as 12 Month Inforce. Pending is still a separate column.
- Go to
"How do I open the email templates table?"
- Go to
/tables?page=custom-chat-templates.
- Go to
"How do I filter height and weight builds?"
- Go to
/tables?page=underwritingand find the Height & Weight table. Select Height (shown as feet and inches) to show traditional builds at that height plus all BMI-chart builds. Enter Weight (lbs) to show traditional builds whose weight range includes that weight plus all BMI-chart builds. Enter both to keep those traditional matches and also limit BMI-chart builds to ones the height and weight qualify for. Enter Age to show builds whose chart includes that age between min and max. Traditional height is shown in the table as feet and inches.
- Go to
"Why don't I see some tabs?"
- A standard account only has the tabs listed above. Tasks also requires BackNine visibility. A link to another tab opens the first available tab instead.
Open questions
- Whether any additional tabs are conditionally added at runtime via feature flags not visible in the component source.