NAV

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.

Watch a video walkthrough of BackNine's API documentation

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:

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

  1. Obtain your 64 character HMAC secret generated at https://app.back9ins.com/settings -> Developer Settings.
  2. Obtain your 7 digit referral_uid at https://app.back9ins.com/profile -> Referral Link.
  3. Include both hmac and referral_uid as 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.

  1. 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 (including prefill and referral_uid). Sign the exact string values on the URL: ?prefill (no value) is typically "", while prefill=true is "true".
  2. Keep values as they will appear on the URL. Query parameters are strings (e.g. "5" not 5, "true" not true). Nested objects and arrays are allowed; hashes are sorted recursively and array order is preserved.
  3. Sort all object keys alphabetically (recursively for nested objects).
  4. Serialize the canonical object as compact JSON (JSON.generate in Ruby).
  5. Compute HMAC-SHA256 of that JSON with your secret, then Base64-encode the raw digest (Base64.strict_encode64 in 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_name
string
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_statuses
object
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_zip
number
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_zip
number
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_issue
boolean
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

See Quote & Apply 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

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:

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"]
  }]
}
{
  "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

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.

Agency profile (/agencies/:id):

Agency settings (/agencies/:id/settings):

Legacy links preserve all query parameters when redirecting to the current routes.

Navigation behavior

Visibility and permissions

How to use

  1. Open /agencies/:id from a search result, case party panel, or the Advisors table.
  2. Review the summary card for key agency details.
  3. Use ?page=<section> or click tabs to navigate to the relevant section.
  4. Use ?highlight-note=<id> or ?highlight-todo=<id> when arriving from a notification to jump directly to the item.
  5. 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.
  6. 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

Common blockers

"How do I" response patterns

Open questions

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.

Own profile (/profile):

Agent profile (/agents/:id):

Agent settings (/agents/:id/settings):

Legacy links (/advisors/:type/:id) preserve all query parameters when redirecting.

Navigation behavior

Visibility and permissions

How to use

  1. To view your own profile: open /profile. Use ?page=<section> to go directly to a section.
  2. To view another agent's profile: open /agents/:id. Use ?page=<section> or ?highlight-note=<id> / ?highlight-todo=<id> when arriving from a notification.
  3. 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.
  4. To create a new advisor: open /advisors/create. If immediately redirected to Home, the account has disable_add_advisor set.
  5. To use a legacy link: follow the /advisors/:type/:id link — it redirects automatically with all query parameters preserved.
  6. 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

Common blockers

"How do I" response patterns

Open questions

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.

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

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

"How do I" response patterns

Open questions

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.

Appointment detail (/appointments/:id):

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

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

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

How to use

To work an existing appointment:

  1. Open /appointments/:id (or use ?page=tasks to start directly on Tasks).
  2. Complete tasks in the Tasks tab.
  3. Use Chat for notes and messages.
  4. Update details and manage access in their respective tabs.

To view documents on an appointment task:

  1. Open /appointments/:id?page=tasks and select the task.
  2. On Advisor Task Notes, Related Documents includes the appointment task's documents (these are emailed to the advisor).
  3. 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:

  1. Open /appointments/:id?page=access.
  2. Search for the advisor. Results show Connected or Not Connected.
  3. 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:

  1. Open an agent-owned appointment at /appointments/:id?page=cases (or click the Cases tab). The Cases tab is hidden for agency-owned appointments.
  2. 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:

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

"How do I" response patterns

Open questions

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

Navigation behavior

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:

  1. Go to /sign-in. Enter email and password.
  2. If prompted for a 2FA code, enter it on /2fa.
  3. If prompted to enroll in 2FA, follow the steps on /2fa-required.
  4. If prompted to accept updated Terms of Use, review and accept them on /terms-agreement.
  5. If prompted to set up a passkey, choose to set up or skip on /passkey-suggestion.
  6. Complete any onboarding steps on /onboarding-sign-up if shown.

To reset a forgotten password:

  1. Go to /forgot-password.
  2. Enter your email address.
  3. 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).
  4. Otherwise, check your email for the reset link.
  5. Open the link — it takes you to /set-password?token=....
  6. Enter and confirm your new password.

To create a new account:

  1. Go to /sign-up (or use a referral link /join/:referralCode).
  2. Complete the registration form.
  3. 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

Common blockers

"How do I" response patterns

Open questions

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.

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

Visibility and permissions

How to use

  1. Open /carriers/:id from the Carriers table (/tables?page=carriers) or a product/appointment link.
  2. The page defaults to the General Settings tab. Use ?page=<tab> or click tabs to navigate.
  3. Only line tabs for lines the carrier is active on will appear — missing tabs are expected.
  4. 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

Common blockers

"How do I" response patterns

Open questions

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.

Case detail (/cases/:id):

eApp detail (/electronic-applications/:id):

Create quote request from case/eApp: Pre-seeded with data from the source record. No additional deep-link parameters.

Navigation behavior

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

How to use

To work an existing case:

  1. Open /cases/:id from the case list or a notification link.
  2. Use ?page=tasks or ?task=<id>&type=<type> to go directly to a task.
  3. Use ?email-id=<id> to open a specific email thread.
  4. Use ?highlight-note=<id> or ?highlight-todo=<id> when arriving from notifications.
  5. 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:

  1. Open /cases/:id?page=tasks and select the task.
  2. On Advisor Task Notes, Related Documents includes the task's documents (these are emailed to the advisor).
  3. 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:

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:

  1. Open /cases/:id?page=access.
  2. Search for the advisor. Results show Connected or Not Connected.
  3. 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:

  1. Open /electronic-applications/:id?page=access.
  2. Search for the advisor. Results show Connected or Not Connected.
  3. 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

"How do I" response patterns

Open questions

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.

Client detail (/clients/:id):

No deep links are defined for the create route.

Navigation behavior

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

Visibility and permissions

How to use

To create a client:

  1. Open /clients/create.
  2. Select the client type: Individual (person) or Entity (business/trust). The form fields change based on this choice.
  3. Fill in the required fields.
  4. Click "Create Client." You are redirected to /clients/:id.

To work an existing client record:

  1. Open /clients/:id from the Clients table or a case party panel.
  2. Use ?page=<tab> to go directly to a tab.
  3. Use ?highlight-note=<id> or ?highlight-todo=<id> when arriving from a notification.
  4. 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:

  1. Open /clients/:id?page=access.
  2. Search for the advisor. Results show Connected or Not Connected.
  3. Click Add Access. If they are not connected, confirm Add Unrelated Agent?. This prompt does not appear for carrier personnel.

Common blockers

"How do I" response patterns

Open questions

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.

Navigation behavior

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

Common blockers

"How do I" response patterns

Open questions

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.

No query-parameter deep links are defined. The page loads the full contact list on arrival.

Navigation behavior

Visibility and permissions

How to use

  1. Open /contact from the navigation menu.
  2. Use the search field to filter contacts by name, role, email, or phone.
  3. Click an email address to open your mail client with the address pre-filled.
  4. 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

Common blockers

"How do I" response patterns

Open questions

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>

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

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

Common blockers

"How do I" response patterns

Open questions

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

Navigation behavior

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:

  1. Open /connect/:type from a carrier-related workflow or direct link.
  2. The app initiates the SSO handoff automatically. No further interaction is needed.
  3. If redirected to Home, the :type is unrecognized or access is blocked.

Conversion link:

  1. Open /conversions/:token from an email or referral link.
  2. On success, you are redirected to the intended destination.
  3. On failure, check ?error= in the URL for context.

Help Center:

  1. Open /help-center from the navigation menu or a help button.
  2. Browse the article catalog or navigate to /help-center/series/:id or /help-center/articles/:id.

Support ticket (How do I view the original email and reply?):

  1. Open /support-tickets/:id from a notification link.
  2. 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.
  3. Type a reply in Chat and click Comment. That emails the person on Ticket Opened By.
  4. Ticket Opened By is the person who opened the ticket.

Support tickets list (How do I see which support tickets are complete?):

  1. Open /help-center and scroll to the Support Tickets table.
  2. 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.
  3. 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

Common blockers

"How do I" response patterns

Open questions

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=.

No other query-parameter deep links are defined.

Navigation behavior

Visibility and permissions

How to use

  1. Open /individuals/:id or /entities/:id from a case, eApp, or quote party panel, or from a notification link.
  2. Review the identity and contact summary in the card.
  3. Use the Chat tab to add notes or messages, or to review conversation history.
  4. 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

Common blockers

"How do I" response patterns

Open questions

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.

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

Tab Visible to
Details Read-only
Chat All signed-in users

Visibility and permissions

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

"How do I" response patterns

Open questions

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.

Product detail (/products/:id): - ?page=<tab> — open to a named tab

No deep links are defined for the products table.

Navigation behavior

Tab Visible to
Commissions Shown when payouts exist

If the record fails to load, the user is redirected to Home.

Visibility and permissions

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

"How do I" response patterns

Open questions

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.

Workspace (/quote-and-apply):

Website detail (/quote-and-apply/:id):

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

How to use

To use the workspace:

  1. Open /quote-and-apply.
  2. Use ?view=list, ?view=pipeline, or ?view=websites to switch views (or click the view tabs).
  3. In Websites view, click a site to open its settings at /quote-and-apply/:id.

To filter eApps by where Quote & Apply was opened:

  1. Open /quote-and-apply in List view.
  2. Click Show Advanced Filters.
  3. In Website Type, select Embedded Website for eApps started on another website or BackNine Website for eApps started on app.back9ins.com.
  4. Clear Website Type to include both sources.

To search eApps by policy number:

  1. Open /quote-and-apply in List or Pipeline view.
  2. Click Show Advanced Filters.
  3. Type at least two characters in Policy Number.
  4. 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:

  1. Open /quote-and-apply/:id (from the Websites view or a direct link).
  2. Use ?page=<tab> to go directly to a tab.
  3. If the site is locked, only Details and Access are available.
  4. 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:

  1. Open /quote-and-apply?view=websites. Websites are shown as condensed cards.
  2. Click the trash icon on the site. The action is labeled Delete.
  3. 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:

  1. Open /quote-and-apply/:id?page=carriers.
  2. Flip a carrier's switch, or click Enable All Carriers and confirm.
  3. 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:

  1. Open /quote-and-apply/:id?page=access.
  2. Search for the advisor. Results show Connected or Not Connected.
  3. Click Add Access. If they are not connected, confirm Add Unrelated Agent?. This prompt does not appear for carrier personnel.

Common blockers

"How do I" response patterns

Open questions

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.

Quoting workspace (/quotes):

Quote request detail (/quotes/:id):

Impaired-risk quote detail (/impaired-risk-quotes/:id):

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

How to use

To create a quote request:

  1. Open /quotes/create (or use the "Create Quote Request" card on /quotes).
  2. Fill in General Info: line, state, and requesting agent.
  3. Fill in Insured Info. If life or LTC joint coverage, complete Joint Insured.
  4. Fill in Illustration fields (line-specific).
  5. Complete Additional Info.
  6. If life/LTC and the selected agent has a default Q&A domain, choose to continue in Quote & Apply or stay.
  7. Submit. Redirected to /quotes/:id.

To create an impaired-risk quote:

  1. Open /impaired-risk-quotes/create (or use the action on a case or eApp).
  2. Fill in Agent and Insured section, including state and birthdate.
  3. Add Impairments.
  4. Fill in Underwriting Info and Coverage Type (including face amount).
  5. Wait for the carrier list to auto-populate. Select target carriers.
  6. Submit. Redirected to /impaired-risk-quotes/:id.

To work an existing quote or impaired-risk quote:

  1. Open /quotes/:id or /impaired-risk-quotes/:id from the workspace or a notification.
  2. Use ?page=<tab> to go directly to a tab.
  3. Use ?offer=<offer-key> on an impaired-risk quote to highlight a specific offer.
  4. 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:

  1. Open /quotes/:id?page=access.
  2. Search for the advisor. Results show Connected or Not Connected.
  3. 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:

  1. Open /impaired-risk-quotes/:id?page=access.
  2. Search for the advisor. Results show Connected or Not Connected.
  3. Click Add Access. If they are not connected, confirm Add Unrelated Agent?. This prompt does not appear for carrier personnel.

Common blockers

"How do I" response patterns

Open questions

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.

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

"How do I" response patterns

Open questions

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)
/applications/retirement-income-calculator (RetirementIncomeCalculator)
/applications/request (ApplicationRequest)
/reports/personal (PersonalReportView)
/reports/scorecard (ScorecardReport)
/reports/accelerated-underwriting (AcceleratedUnderwritingReport)

Quotes and quote-and-apply

/quotes (QuotingView)
/quotes/create (CreateQuoteRequest)
/quotes/:id (QuoteView)
/impaired-risk-quotes/create (ImpairedRiskQuoteCreate)
/impaired-risk-quotes/:id (ImpairedRiskQuoteView)
/quote-and-apply (QuoteAndApply)
/quote-and-apply/:id (ApprovedDomainView)

Forms, appointments, advisors, profile

/appointments/:id (AppointmentView)
/advisors/create (AdvisorCreate)
/profile (AdvisorProfileView, LoggedInUserProfile)
/agents/:id (AdvisorProfileView, AgentView)
/agencies/:id (AdvisorProfileView, AgencyView)
/advisors/:type/:id (AdvisorView, redirect)
/carriers/:id (CarrierView)
/personnel/:id (PersonnelView)

Cases, eApps, clients, and parties

/cases (CasesTable)
/cases/informal/create (CaseCreateInformal)
/cases/submit (CaseSubmission)
/cases/:id (CaseView)
/cases/:id/create-impaired-risk-quote (ImparedRiskQuoteCreateFromCase)
/cases/:id/create-quote-request (QuoteRequestCreateFromCase)
/electronic-applications/:id (ElectronicApplicationView)
/electronic-applications/:id/create-quote-request (QuoteRequestCreateFromElectronicApplication)
/clients/create (ContractPartyCreate)
/clients/:id (ContractPartyView)
/case-management (CaseManagement)
/individuals/:id (PartyView, type Individual)
/entities/:id (PartyView, type Entity)

Commissions, accounting, and contact

/commissions (CommissionsView)
/commissions/pay-periods/:id (PayPeriodView)
/contact (BackNineContactsTable)

Products, marketing, and tables

/products (ProductsTable)
/products/:id (ProductView)
/marketing (MarketingView)
/tables (TableView)

Help center, support, and templates

/support-tickets/:id (SupportTicketView)
/help-center (HelpCenter)
/help-center/series/:id (HelpCenterSeries)
/help-center/articles/:id (Reader)
/custom-chat-templates/create (CustomChatTemplateCreator)
/custom-chat-templates/:id (CustomChatTemplateCreator)

Settings routes and legacy redirect

/settings (SettingsView)
/agencies/:id/settings (SettingsView, AgencyEdit)
/agents/:id/settings (SettingsView, AgentEdit)
/advisors/:type/:id/settings (AdvisorEdit, redirect)

Known route redirects and fallback

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.

Navigation behavior

Visibility and permissions

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:

Legal Information section:

Contact Info section:

Home Address History section:

Business Address section:

Quote & Apply section (from AgentQuoteAndApply)

Whiteglove Settings section (when agent.isWhiteGloveAgent):

User Tutorials (self-view only)

Agent Identifiers section


admin — Admin

email — Email

trainings — Training (Optional)

Training and certification records.


commissions — Commission

Legacy slugs: commission, business

"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:

Applications section:


developer-settings — Developer Settings

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:


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

  1. Open settings:
    • Own settings: /settings or user avatar → Settings.
    • Another agent's settings: open /agents/:id/settings from the agent's profile.
    • An agency's settings: open /agencies/:id/settings from the agency's profile.
  2. Use ?page=<slug> to land directly on a tab (e.g. ?page=commissions).
  3. Use ?action=connect_with_wealthbox to trigger the Wealthbox connection dialog on load.
  4. Fields auto-save as you type (active-save pattern) — there is no explicit "Save" button on most tabs.
  5. Sidebar indicators (✓/✗) show which tabs still have incomplete or invalid fields.
  6. 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.
  7. "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

Common blockers

"How do I" response patterns

Open questions

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.

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

Visibility and permissions

How to use

  1. Open /tables from the navigation menu. The first available tab loads by default.
  2. Use ?page=<section> to open directly to a specific tab (e.g. /tables?page=carriers).
  3. Within a tab, use the filters, search, and sort controls to find records.
  4. Click a row to navigate to the record's detail page.
  5. Click the "+" or "Create" button (where available in a section) to navigate to the create route for that type.
  6. 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

Common blockers

"How do I" response patterns

Open questions