npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@instabrain-sdks/api-client

v2.3.3

Published

Official Node.js SDK for InstaBrain APIs - Insurance quotes and application processing

Readme

@instabrain-sdks/api-client

npm version

TypeScript SDK for Node.js. All operations go through InstaBrainClient — request/response types are exported from @instabrain-sdks/api-client.

Products covered: GIGDB, ADB, IB Term, Pure Term.

  • GIGDB & ADB — full client flow: get*Quote()start*Application()saveEftPayment() → SecureSign methods → finalSubmit().
  • IB Term — client flow ends at startIBTermApplication(); use returned agentLink / applicantLink / eAppAgentLink for the InstaBrain frontend.
  • Pure Term — pre-fill flow: getPureTermQuote()startApplication(); use returned links for the InstaBrain frontend.
import { InstaBrainClient } from '@instabrain-sdks/api-client';

const client = InstaBrainClient.forEnvironment('sandbox');
await client.authenticate(userId, accessToken);

Credentials (userId and accessToken) are provisioned during onboarding.


Table of Contents

  1. Installation
  2. Requirements
  3. Authentication
  4. GIGDB
  5. ADB
  6. IB Term
  7. Pure Term
  8. Shared methods — GIGDB & ADB
  9. Reporting
  10. Enums & Constants
  11. Beneficiary Reference
  12. Error Handling
  13. Error codes (APIErrorCode)
  14. Environment Configuration
  15. Token Management
  16. Examples Directory
  17. Support

Installation

npm install @instabrain-sdks/api-client

Note: This is a restricted-access package. Access must be granted during the InstaBrain onboarding process.


Requirements

  • Node.js >= 14.0.0
  • TypeScript >= 4.0 (optional — the SDK ships with full type definitions)

In request field tables, Type matches the SDK TypeScript definitions. Required values:

| Value | Meaning | |---|---| | Yes | Must be sent with a non-null value | | No | Optional; may be omitted | | Yes* | Send one of the fields marked Yes* in that table | | Yes** | Send either dayCount or both startDate and endDate (see table footnote) | | One of † | Send exactly one rating group (see † footnote on that table) | | Conditional | Required only when the condition in the description or notes applies |


Authentication

Method: client.authenticate(userId, accessToken)

Token validity: 30 minutes. Design your system to refresh before expiry.

import { InstaBrainClient } from '@instabrain-sdks/api-client';

const client = InstaBrainClient.forEnvironment('sandbox'); // or 'production'
await client.authenticate(userId, accessToken);
// JWT is stored internally — all subsequent calls include it automatically

| Parameter | Type | Description | |---------------|----------|--------------------------| | userId | number | Account user ID | | accessToken | string | UUID secret access token |

| Environment | Code | |-------------|----------| | Sandbox | sandbox | | Production | production |


GIGDB

Guaranteed Issue Guaranteed Death Benefit — whole life product, no medical exam.

  • Eligible ages: 50–85
  • Face amount: $5,000–$25,000
  • Not available in: NY, MT
  • Requires: isSmoker on both quote and application; birthJurisdiction on application

Integration flow

1.  [`getGigdbQuote()`](#gigdb--get-quote)                               Get quote → quoteResponseId
2.  [`startGigdbApplication()`](#gigdb--start-application)              Start app → opportunityId
    ├── isDeclined = true      → STOP (valid knockout, not an error)
    └── isQuoteChanged = true  → call `getExistingGigdbQuote()` to fetch updated premium
3.  [`getExistingGigdbQuote()`](#gigdb--get-existing-quote)                [When isQuoteChanged=true, or resuming a prior session]
4.  [`updateGigdbQuote()`](#gigdb--update-quote)                            [Optional] Change face amount / payment freq (before EFT only)
5.  [`saveEftPayment()`](#save-eft-payment)                       Save bank details — locks the quote
6.  [`prepareDocsAndGetDeliveryChannels()`](#prepare-docs--get-delivery-channels)
    └── isSignCompleted = true → skip to step 9
7.  [`sendPinAndGetDocumentsLink()`](#send-pin--get-documents-link)
8.  [`verifyPin()`](#verify-pin)
9.  [`finalSubmit()`](#final-submit)                       → policyNumber

Steps 5–9 are documented under Shared methods — GIGDB & ADB.


GIGDB — Get Quote

Method: client.getGigdbQuote(request) · Type: ThirdPartyGigdbQuoteRequest


Request Fields

| Field | Type | Required | Description | Validation Error | |---|---|---|---|---| | faceAmount | number | Yes | Coverage amount in dollars ($5,000–$25,000) | Coverage amount (FaceAmount) is required. | | gender | Gender | Yes | Gender.Male, Gender.Female | Gender is required. / Invalid gender. | | stateCode | string | Yes | 2-letter US state code | State code is required. / State code is not valid. / This product is not available for the selected state. | | age | number | Yes* | Applicant age — must be 50–85 | Either age or date of birth must be provided. / Age must be between 50 and 85 for GIGDB. | | dateOfBirth | string (ISO 8601) | Yes* | Date of birth — derived age must be 50–85 | Date of birth must be a valid date. | | paymentFreq | PaymentFrequency | Yes | "Monthly" or "Annually" | Payment frequency is required. / Invalid payment frequency. | | isSmoker | boolean | Yes | Smoker status — affects premium | Smoker status is required. | | firstName | string | No | Alphabetic only — lead capture | First name is invalid. Only alphabetic characters are allowed. | | lastName | string | No | Alphabetic only — lead capture | Last name is invalid. Only alphabetic characters are allowed. | | email | string | No | Lead capture | Please enter a valid email address. | | phoneNum | string | No | 10 digits or E.164 — lead capture | Phone number format is incorrect. Use 10 digits or +1XXXXXXXXXX. / Phone number is invalid. |

*Provide age OR dateOfBirth. When both are sent, dateOfBirth takes priority.


Business Rules

  1. isSmoker is required and affects premium calculation.
  2. Age is validated against 50–85 range after derivation from dateOfBirth.
  3. GIGDB is not available in NY and MT.

Error Codes

| Code | When | |---|---| | InvalidRequestFormat | Any field validation failure — inspect value.fields for details | | StateNotFound | State code not recognized | | AgeNotFound | Neither age nor date of birth supplied, or age could not be derived | | NotAvailableForState | GIGDB not available in the requested state | | QuoteNotEligibleForGivenConditions | State / age / smoker combination not eligible | | CoverageNotAvailable | Face amount outside allowed range for state / age / smoker |


Response

| Field | Type | Description | |---|---|---| | productName | string | "InstaGIGDB" | | selectedQuote.quoteResponseId | string | Pass as quoteResponseId in Start Application | | selectedQuote.quoteAmount | number | Premium at requested payment frequency |


Example

import { InstaBrainClient, Gender, PaymentFrequency } from '@instabrain-sdks/api-client';

const quoteResp = await client.getGigdbQuote({
  faceAmount: 15000,
  gender: Gender.Female,
  stateCode: 'TX',
  age: 65,
  paymentFreq: PaymentFrequency.Monthly,
  isSmoker: false
});

const { quoteResponseId, quoteAmount } = quoteResp.selectedQuote;

GIGDB — Start Application

Method: client.startGigdbApplication(request) · Type: ThirdPartyGigdbAppReq


Top-Level Request Fields

| Field | Type | Required | Applicant-Facing Question | Validation Error | |---|---|---|---|---| | quoteResponseId | string | Yes | — | QuoteResponseId is required. / QuoteResponseId does not exist or does not belong to the requested product. | | firstName | string | Yes | First Name | First name is required. / First name is invalid. Only alphabetic characters are allowed. | | lastName | string | Yes | Last Name | Last name is required. / Last name is invalid. Only alphabetic characters are allowed. | | email | string | Yes | Email Address | Email is required. / Please enter a valid email address. | | phoneNumber | string | Yes | Preferred Phone Number | Phone number is required. / Phone number format is incorrect. Use 10 digits or +1XXXXXXXXXX. | | dateOfBirth | string (ISO 8601) | Yes | Date of Birth | Date of birth is required. / Date of birth must be a valid date in the past. / Age must be between 50 and 85 for GIGDB. | | isUsCitizen | boolean | Yes | Are you a United States citizen? | US citizenship status is required. | | isLegalUsResident | boolean | Conditional | Are you a legal U.S. resident and have you resided in the U.S. for more than 2 years? | Legal US residency status is required for non-US citizens. | | isPayerAlsoOwnerAndInsured | boolean | Yes | This product requires that the payer, the person purchasing the policy, and the owner are the same person. Please confirm that you are both the insured individual and will also be the owner of the policy. | IsPayerAlsoOwnerAndInsured field is required. | | socialSecurityNumber | string | Yes | Social Security Number | Social Security Number is required. / Social Security Number must be in valid format (e.g., XXX-XX-XXXX). | | isSmoker | boolean | Yes | Within the past 2 years have you used tobacco or any other product that contains nicotine? | Smoker status is required. | | hasExistingCoverage | boolean | Yes | See state-specific wording below | Existing coverage field is required | | willOtherCoverageBeReplacedOrFinanced | boolean\|null | Conditional | See state-specific wording below | Please indicate whether any other coverage will be replaced or financed. / Other Coverage be replaced or financed must be either null or false as no existing coverage passed. |

isLegalUsResident required when isUsCitizen = false.
willOtherCoverageBeReplacedOrFinanced required when hasExistingCoverage = true; must be null or false when hasExistingCoverage = false.
socialSecurityNumber must be 9 consecutive digits, no dashes (e.g. 123456789). The XXX-XX-XXXX text in validation messages shows digit positions only.


hasExistingCoverage — State-Specific Question Text

| States | Exact Question | |---|---| | AR, CO, DE, DC, IA, KY, NJ, OK, PA, VA | Do you have any existing life or health coverage in force or is any application for life or health coverage, or reinstatement, now pending? | | AZ, ID, IN, MI, MS, NV | Do you have any existing life or health coverage in force or is any application for life or annuity coverage, or reinstatement, now pending? | | All others | Do you have any existing life insurance or annuity contracts in force or is any application for life insurance, or reinstatement now pending with any insurance company? |


willOtherCoverageBeReplacedOrFinanced — State-Specific Question Text

| States | Exact Question | |---|---| | AR, CO, DE, DC, IA, KY, NJ, OK, PA, VA | If this policy is issued, will any other existing life or health coverage be cancelled, terminated, lapsed or not renewed? | | AZ, ID, IN, MI, MS, NV | If this policy is issued, will any other existing life or annuity coverage be cancelled, terminated, lapsed or not renewed? | | All others | If this policy is issued, will any other existing life insurance or annuity contract be cancelled, lapsed or not renewed, or are you considering using funds from your existing policies or contracts to pay premiums on the new policy or contract? |


Address

| Field | Type | Required | Question | Validation Error | |---|---|---|---|---| | address.addressLine1 | string | Yes | Street | Address line is required. / Street address is invalid. Avoid special characters. | | address.city | string | Yes | City | Address city is required. / City name is invalid. Only letters and spaces are allowed. | | address.state | string | Yes | State | Residence state is required. / Residence state code is invalid. | | address.zipcode | string | Yes | Zip Code | Zip code is required. / Zip code is invalid. It must be in 5-digit format. / Zip code is not found. |


Birth Jurisdiction

| Field | Type | Required | Question | Validation Error | |---|---|---|---|---| | birthJurisdiction.country | string | Yes | Birth Country | Birth jurisdiction details are required. / Birth country is required when applicant is not a U.S. citizen. / Birth country code is invalid. | | birthJurisdiction.state | string | Conditional | State (Birth Jurisdiction) | Birth state is required when applicant is a U.S. citizen. / Birth state code is invalid. |

birthJurisdiction.state required when birthJurisdiction.country = "US".


Nicotine Info (required when isSmoker = true)

| Field | Type | Required | Question | Validation Error | |---|---|---|---|---| | nicotineInfo.lastUseDate | string (YYYY-MM) | Yes (when smoker) | When was the last time you used tobacco or any other product that contains nicotine? | Nicotine details are required when applicant is a smoker. / Last nicotine use date is required when applicant is a smoker. / Nicotine last use date must be in YYYY-MM format. |


Existing Coverage (when hasExistingCoverage = true)

| Field | Type | Required | Question | Validation Error | |---|---|---|---|---| | existingCoverageData.isExistingPolicyBeingTerminated | boolean | No | Are you considering discontinuing making premium payments, surrendering, forfeiting, assigning to the insurer, or otherwise terminating your existing policy or contract? | Please indicate whether any existing policy is being terminated. | | existingCoverageData.existingCoverages[n].nameOfTheCompany | string | Yes | Name of Company (Enter unknown if company name is not available) | Please provide the name of the insurance company. | | existingCoverageData.existingCoverages[n].insuranceAmount | string | Yes | Insurance Amount | Insurance amount must be provided. | | existingCoverageData.existingCoverages[n].dateOfIssue | string (YYYY-MM) | Yes | Date of Issue | Please provide Date of Issue in YYYY-MM format / Date of issue must be in YYYY-MM format. | | existingCoverageData.existingCoverages[n].toBeReplaced | boolean | Yes | To Be Replaced | Replacement coverage answer must be specified. | | existingCoverageData.existingCoverages[n].toBeFinanced | boolean | Yes | Are you considering using funds from your existing policies or contracts to pay premiums due on the new policy or contract? | Financing coverage answer must be specified. |


State-Specific Existing Coverage Fields

| State(s) | Field on existingCoverages[n] | Exact Question | Validation Error | |---|---|---|---| | MA | requestsYieldIndices | Would you like to request yield indices for cash value policies? | Please indicate whether yield indices for cash value policies are requested (required for Massachusetts). | | OK | notifyPresentInsurer | Please notify my present insurer(s) regarding this transaction? | Please indicate whether to notify present insurer(s) (required for Oklahoma). | | DE, GA | wantsPolicySummary | Do you want a policy summary statement from your existing insurer? | Please indicate whether you want a policy summary statement (required for Delaware and Georgia). | | FL | wantsComparativeInformationForm | Indicate whether or not you wish a Comparative Information Form from the proposed company and your existing insurer or insurers? | Please indicate whether you want a Comparative Information Form (required for Florida). |

| State(s) | Field on existingCoverageData | Exact Question | Validation Error | |---|---|---|---| | RI, WV | areExistingPoliciesIssuedByFidelity | Are any of your existing policies issued by Fidelity Life Association? | Please indicate whether any existing policies are issued by Fidelity Life Association (required for RI and WV). |


Replacement / Financing Data (when willOtherCoverageBeReplacedOrFinanced = true)

For KS, populate willOtherCoverageBeReplacedOrFinancedData.areReplacedPoliciesIssuedByFidelity:

| Field | Exact Question | Validation Error | |---|---|---| | areReplacedPoliciesIssuedByFidelity | Are any of the policies you are considering replacing issued by Fidelity Life Association? | Please indicate whether any policies being replaced are issued by Fidelity Life Association (required for Kansas when replacing or financing coverage). |

For WA, populate willOtherCoverageBeReplacedOrFinancedData.otherInsuranceReplacementData. All 7 booleans are required. For each boolean set to true, the paired specify* string is required.

| Field | Exact Question | |---|---| | mayReduceBenefitsIncreasePremiums | Can there be reduced benefits or increased premiums in later years? | | specifyReduceBenefitsIncreasePremiums | Please explain | | hasNewPolicyCharges | Are there penalties, set up or surrender charges for the new policy? | | specifyNewPolicyCharges | Please explain, emphasizing any extra cost for early withdrawal. | | hasPriorPolicyCharges | Will there be penalties or surrender charges under the existing insurance as a result of the proposed transaction? | | specifyPriorPolicyCharges | Please explain | | hasTaxConsequences | Are there adverse tax consequences from the replacement under current tax law? | | specifyTaxConsequences | Please explain | | hasInterestConsiderations | Are interest earnings a consideration in this replacement? | | specifyInterestConsiderations | Please explain what portions of premiums or contributions will produce limited or no earnings. As pertinent, include the need for minimum deposits to enhance earnings, and the reduction of earnings that may result from set up charges, policy fees, and other factors. | | hasMinRequirementsBeforeInterest | Are minimum amounts required to be on deposit before excess interest will be paid? | | specifyMinRequirementsBeforeInterest | Please explain | | hasOtherAdverseEffects | Are there other short or long term effects from the replacement that might be materially adverse? | | specifyOtherAdverseEffects | Please explain |

WA Validation Errors:

| Field | Error | |---|---| | WillOtherCoverageBeReplacedOrFinancedData | State-specific replacement data is required when other coverage will be replaced or financed. | | WillOtherCoverageBeReplacedOrFinancedData.OtherInsuranceReplacementData | Washington replacement disclosure answers are required when replacing or financing coverage. | | WillOtherCoverageBeReplacedOrFinancedData.OtherInsuranceReplacementData[n] | Each Washington replacement disclosure question must be answered. | | WillOtherCoverageBeReplacedOrFinancedData.OtherInsuranceReplacementData[n].Explain | Please explain is required when the answer is Yes. |


Beneficiary Details

See Beneficiary Reference. GIGDB accepts all BeneficiaryType values.

| Field | Type | Required | Validation Error | |---|---|---|---| | beneficiaryDetails.beneficiaryType | string | Yes | Beneficiary details are required. / Please select a valid beneficiary option. | | beneficiaryDetails.beneficiaryPerson.firstName | string | Yes (Person) | Beneficiary first name is required. / Beneficiary's first name is invalid. | | beneficiaryDetails.beneficiaryPerson.lastName | string | Yes (Person) | Beneficiary last name is required. / Beneficiary's last name is invalid. | | beneficiaryDetails.beneficiaryPerson.relationship | string | Yes (Person) | Please specify the relationship with the beneficiary. | | beneficiaryDetails.namedEntity.name | string | Yes (entity types) | Named entity details must be provided for this beneficiary type. / Beneficiary name is required. | | beneficiaryDetails.namedEntity.trustDate | string (YYYY-MM) | Yes (Trust) | Trust date must be in YYYY-MM format. |


Business Rules

  1. Quote state and address.state must match — mismatch returns StateMismatchIdentified.
  2. isSmoker = true requires nicotineInfo.lastUseDate in YYYY-MM format.
  3. hasExistingCoverage = false requires existingCoverageData = null and willOtherCoverageBeReplacedOrFinanced null or false.
  4. State-specific existing coverage fields are only enforced when hasExistingCoverage = true or willOtherCoverageBeReplacedOrFinanced = true.
  5. ApplicationLimitReached fires (as a top-level error code, not InvalidRequestFormat) when the same SSN, email, or phone already has a GIGDB policy generated within the last 30 days.

Knockout Rules

Returns isDeclined: true on a successful response — the SDK does not throw. Check the field explicitly; do not treat it as an exception.

  • isPayerAlsoOwnerAndInsured = false
  • isUsCitizen = false AND isLegalUsResident = false

When declined, opportunityId may be the all-zero UUID (00000000-0000-0000-0000-000000000000).


isQuoteChanged

When isQuoteChanged = true, the carrier adjusted the premium based on application data. Call getExistingGigdbQuote() with the returned opportunityId to retrieve the revised quote, then re-present it to the applicant before proceeding to EFT.


Error Codes

| Code | When | |---|---| | InvalidRequestFormat | Any field validation failure — inspect value.fields | | ApplicationLimitReached | SSN, email, or phone matches a GIGDB policy generated within the last 30 days | | StateMismatchIdentified | Quote state ≠ address.state | | AgentNotFound | Quote cannot be linked to the agent account — verify credentials | | InternalServerError | Unexpected backend failure — retry; contact support if persistent |

ApplicationLimitReached field-level messages:

| Field | Message | |---|---| | SocialSecurityNumber | An application with the same SSN has a policy generated within the last 30 days. | | Email | An application with the same email has a policy generated within the last 30 days. | | PhoneNumber | Two applications with the same phone have policies generated within the last 30 days. |


Response

| Field | Type | Description | |---|---|---| | opportunityId | string | Pass to later client.* calls (EFT, SecureSign, finalSubmit, etc.) | | isDeclined | boolean | true = knockout; stop the flow | | isQuoteChanged | boolean | true = carrier adjusted premium; call getExistingGigdbQuote() before EFT |


Example

import { BeneficiaryType, BeneficiaryRelationship } from '@instabrain-sdks/api-client';

const appResp = await client.startGigdbApplication({
  quoteResponseId,
  firstName: 'Jane', lastName: 'Doe',
  email: '[email protected]', phoneNumber: '5551234567',
  dateOfBirth: '1958-06-15',
  isUsCitizen: true, isPayerAlsoOwnerAndInsured: true,
  socialSecurityNumber: '123456789',
  isSmoker: false, nicotineInfo: null,
  hasExistingCoverage: false, willOtherCoverageBeReplacedOrFinanced: null, existingCoverageData: null,
  address: { addressLine1: '123 Main St', city: 'Austin', state: 'TX', zipcode: '73301' },
  birthJurisdiction: { country: 'US', state: 'TX' },
  beneficiaryDetails: {
    beneficiaryType: BeneficiaryType.Person,
    beneficiaryPerson: { firstName: 'John', lastName: 'Doe', relationship: BeneficiaryRelationship.Spouse }
  }
});

if (appResp.isDeclined) {
  // Valid knockout — stop the flow, do not proceed
  return;
}
if (appResp.isQuoteChanged) {
  // Carrier adjusted the premium — fetch updated quote before saving EFT
  const updated = await client.getExistingGigdbQuote(appResp.opportunityId);
  // Re-present updated.selectedQuote.quoteAmount to the applicant
}
const { opportunityId } = appResp;

GIGDB — Get Existing Quote

Method: client.getExistingGigdbQuote(opportunityId)

When to call:

  • isQuoteChanged = true returned by Start Application — fetch the carrier-adjusted premium before proceeding.
  • Resuming a prior session — re-fetch the quote for an existing opportunity without re-quoting.

Request Parameters

| Parameter | Type | Required | |---|---|---| | opportunityId | string | Yes |


Error Codes

| Code | When | |---|---| | InvalidRequestFormat | OpportunityId is required. / OpportunityId does not exist. / OpportunityId does not match selected product. |

Throws AuthenticationError when the opportunity ID is not found or not in scope for your token. Distinct from APIValidationError with message "does not exist".


Response

| Field | Type | Description | |---|---|---| | productName | string | "InstaGIGDB" | | selectedQuote.quoteResponseId | string | Updated quote response ID | | selectedQuote.quoteAmount | number | Revised premium |


Example

const quoteResp = await client.getExistingGigdbQuote(opportunityId);
const { quoteResponseId, quoteAmount } = quoteResp.selectedQuote;

GIGDB — Update Quote

Method: client.updateGigdbQuote(request) · Type: ThirdPartyGigdbUpdateQuoteReq

Changes face amount or payment frequency after start application. Must be called before save-eft-payment — blocked once payment is saved.


Request Fields

| Field | Type | Required | Validation Error | |---|---|---|---| | opportunityId | string | Yes | OpportunityId is required. / OpportunityId does not exist. / Quote update is not allowed when payment is already made. | | faceAmount | number | Yes | Coverage amount (FaceAmount) is required. | | paymentFreq | PaymentFrequency | Yes | Payment frequency is required. / Invalid payment frequency. |


Business Rules

  1. GIGDB does not support riders — do not send a riders field.
  2. Only faceAmount and paymentFreq can be changed. Smoker status, state, and age cannot be modified.

Error Codes

| Code | When | |---|---| | InvalidRequestFormat | Any field validation failure — inspect value.fields | | PaymentAlreadyMade | EFT already saved — quote update no longer allowed |


Response

Same shape as Get Quote — reflects the recalculated premium.


Example

import { PaymentFrequency } from '@instabrain-sdks/api-client';

const updatedQuote = await client.updateGigdbQuote({
  opportunityId,
  faceAmount: 20000,
  paymentFreq: PaymentFrequency.Annually
});
// updatedQuote.selectedQuote.quoteAmount reflects the new premium

ADB

Accidental Death Benefit — simplified-issue product, no medical exam.

  • Eligible ages: 20–59
  • Face amount: $50,000–$300,000
  • Not available in: MA, NH, AK
  • CA: Supported — occupation field required on application
  • No isSmoker, birthJurisdiction, or nicotineInfo fields

Integration flow

0.  [`getAdbRiderDetails()`](#adb--rider-lookup)                    [Optional] Confirm availability + rider codes
    └── flagProductNotAvailableForState = true → STOP
0b. [`getAdbOccupationOptions()`](#adb--occupation-lookup-ca-only)                   [CA only] Fetch valid occupation labels
1.  [`getAdbQuote()`](#adb--get-quote)                                 Get quote → quoteResponseId
2.  [`startAdbApplication()`](#adb--start-application)                Start app → opportunityId
    └── isDeclined = true → STOP (valid knockout, not an error)
3.  [`getExistingAdbQuote()`](#adb--get-existing-quote)                  [Optional] Re-fetch quote for resumed session
4.  [`updateAdbQuote()`](#adb--update-quote)                              [Optional] Change face amount / payment freq / riders (before EFT only)
5.  [`saveEftPayment()`](#save-eft-payment)                       Save bank details — locks the quote
6.  [`prepareDocsAndGetDeliveryChannels()`](#prepare-docs--get-delivery-channels)
    └── isSignCompleted = true → skip to step 9
7.  [`sendPinAndGetDocumentsLink()`](#send-pin--get-documents-link)
8.  [`verifyPin()`](#verify-pin)
9.  [`finalSubmit()`](#final-submit)                       → policyNumber

Steps 5–9 are documented under Shared methods — GIGDB & ADB.


ADB — Rider Lookup

Method: client.getAdbRiderDetails(stateCode)

Optional pre-quote step. Confirms ADB availability for a state and returns valid rider codes.

CA is not supported. stateCode = "CA" returns a 400 validation error — not a flagProductNotAvailableForState flag.


Request Parameters

| Parameter | Type | Required | Validation Error | |---|---|---|---| | stateCode | string (query) | Yes | State code is required. / State code is not valid. / This state is currently not supported. |


Error Codes

| Code | When | |---|---| | InvalidRequestFormat | State code missing, invalid, or unsupported |


Response

| Field | Type | Description | |---|---|---| | flagProductNotAvailableForState | boolean | true → ADB not available in this state — do not proceed | | riders[n].riderCode | string | Pass as a value in riders[] on Get Quote and Update Quote | | riders[n].riderTitle | string | Display name | | riders[n].riderDescription | string | Coverage description |

riders may be an empty array even when flagProductNotAvailableForState = false — no optional riders configured for that state.


Example

const riderDetails = await client.getAdbRiderDetails('TX');

if (riderDetails.flagProductNotAvailableForState) {
  // ADB not available in this state — do not proceed
  return;
}

const riderCodes = riderDetails.riders.map(r => r.riderCode);
// Pass riderCodes into the riders[] field on Get Quote

Available Rider Codes

| AdbRiderType Enum | Code Value | Description | |---|---|---| | AdbRiderType.FamilyADB | 'FamilyADB' | Accidental death benefit for spouse and eligible dependent children | | AdbRiderType.ReturnOfPremium | 'ReturnOfPremium' | Returns all premiums paid if no claim during policy term | | AdbRiderType.InflationBenefit | 'InflationBenefit' | Face amount increases annually with inflation |

Do not use RiderType values ("ADB Rider", "Dependent Child Rider") — those are IB Term display titles. Do not use "CHILD_TERM" — it does not exist for ADB.


ADB — Occupation Lookup (CA only)

Method: client.getAdbOccupationOptions(query?)

Returns valid occupation label strings for CA residents. Pass returned values directly as the occupation array in Start Application. query is optional — omit to retrieve all options.

const matches = await client.getAdbOccupationOptions('nurse');
const all = await client.getAdbOccupationOptions();

No field-validation errors are returned for this method.


ADB — Get Quote

Method: client.getAdbQuote(request) · Type: ThirdPartyAdbQuoteRequest


Request Fields

| Field | Type | Required | Description | Validation Error | |---|---|---|---|---| | faceAmount | number | Yes | Coverage amount ($50,000–$300,000) | Coverage amount (FaceAmount) is required. | | gender | Gender | Yes | Gender.Male, Gender.Female | Gender is required. / Invalid gender. | | stateCode | string | Yes | 2-letter US state — not MA, NH, AK, CA | State code is required. / State code is not valid. / This state is currently not supported. / This product is not available for the selected state. | | age | number | Yes* | Must be 20–59 | Either age or date of birth must be provided. / Age must be between 20 and 59 for ADB. | | dateOfBirth | string (ISO 8601) | Yes* | Derived age must be 20–59 | Date of birth must be a valid date. | | paymentFreq | PaymentFrequency | Yes | "Monthly" or "Annually" | Payment frequency is required. / Invalid payment frequency. | | riders | AdbRiderType[] | No | riderCode values from Rider Lookup | Riders are invalid. | | firstName | string | No | Alphabetic only | First name is invalid. Only alphabetic characters are allowed. | | lastName | string | No | Alphabetic only | Last name is invalid. Only alphabetic characters are allowed. | | email | string | No | Lead capture | Please enter a valid email address. | | phoneNum | string | No | 10 digits or E.164 | Phone number format is incorrect. Use 10 digits or +1XXXXXXXXXX. / Phone number is invalid. |

*Provide age OR dateOfBirth.


Business Rules

  1. Rider codes are validated against ADB for the given state — unrecognised codes are rejected.
  2. CA is not supported at quote time — returns This state is currently not supported.

Error Codes

| Code | When | |---|---| | InvalidRequestFormat | Any field validation failure — inspect value.fields | | StateNotFound | State code not recognized | | AgeNotFound | Neither age nor date of birth supplied, or age could not be derived | | NotAvailableForState | ADB not available in the requested state | | QuoteNotEligibleForGivenConditions | State / age combination not eligible | | CoverageNotAvailable | Face amount outside allowed range | | RiderNotAvailable | Rider not available for this product or state | | RiderFaceAmountNotValid | Rider benefit amount outside allowed range |


Response

| Field | Type | Description | |---|---|---| | productName | string | "InstaADB" | | selectedQuote.quoteResponseId | string | Pass as quoteResponseId in Start Application | | selectedQuote.quoteAmount | number | Premium at requested payment frequency |


Example

import { InstaBrainClient, Gender, PaymentFrequency, AdbRiderType } from '@instabrain-sdks/api-client';

const quoteResp = await client.getAdbQuote({
  faceAmount: 100000,
  gender: Gender.Male,
  stateCode: 'TX',
  age: 35,
  paymentFreq: PaymentFrequency.Monthly,
  riders: [AdbRiderType.FamilyADB]
});

const { quoteResponseId, quoteAmount } = quoteResp.selectedQuote;

ADB — Start Application

Method: client.startAdbApplication(request) · Type: ThirdPartyAdbAppReq


Top-Level Request Fields

| Field | Type | Required | Applicant-Facing Question | Validation Error | |---|---|---|---|---| | quoteResponseId | string | Yes | — | QuoteResponseId is required. / QuoteResponseId does not exist or does not belong to the requested product. | | firstName | string | Yes | First Name | First name is required. / First name is invalid. Only alphabetic characters are allowed. | | lastName | string | Yes | Last Name | Last name is required. / Last name is invalid. Only alphabetic characters are allowed. | | email | string | Yes | Email Address | Email is required. / Please enter a valid email address. | | phoneNumber | string | Yes | Preferred Phone Number | Phone number is required. / Phone number format is incorrect. Use 10 digits or +1XXXXXXXXXX. | | dateOfBirth | string (ISO 8601) | Yes | Date of Birth | Date of birth is required. / Date of birth must be a valid date in the past. / Age must be between 20 and 59 for ADB. | | isUsCitizen | boolean | Yes | Are you a United States citizen? | US citizenship status is required. | | isLegalUsResident | boolean | Conditional | Are you a legal U.S. resident and have you resided in the U.S. for more than 2 years? | Legal US residency status is required for non-US citizens. | | isPayerAlsoOwnerAndInsured | boolean | Yes | This product requires that the payer, the person purchasing the policy, and the owner are the same person. Please confirm that you are both the insured individual and will also be the owner of the policy. | IsPayerAlsoOwnerAndInsured field is required. | | socialSecurityNumber | string | Yes | Social Security Number | Social Security Number is required. / Social Security Number must be in valid format (e.g., XXX-XX-XXXX). | | hasExistingCoverage | boolean | Yes | See state-specific wording in GIGDB section above | Existing coverage field is required | | willOtherCoverageBeReplacedOrFinanced | boolean\|null | Conditional | See state-specific wording in GIGDB section above | Please indicate whether any other coverage will be replaced or financed. / Other Coverage be replaced or financed must be either null or false as no existing coverage passed. | | occupation | string[] | CA only | Please enter your occupation | At least one occupation is required when residence state is CA. / One or more selected occupations are invalid. | | hasMedicalCoverage | boolean | DC only | Do you have comprehensive medical coverage including the minimum essential coverage required by the Affordable Care Act (ACA) or are you treated as having minimum essential coverage due to your status as a bona fide resident of any possession of the United States? | Medical coverage acknowledgement is required when residence state is DC. | | understandsBenefits | boolean | DC only | Do you understand most supplemental only policies may not pay full benefits if your ACA compliant minimum essential coverage plan is not in force? | Supplemental policy benefits acknowledgement is required when residence state is DC. | | understandsLimitedBenefits | boolean | DC only | Do you understand that the benefits provided under this policy may be limited? | Limited benefits acknowledgement is required when residence state is DC. |

socialSecurityNumber must be 9 consecutive digits, no dashes (e.g. 123456789).
isLegalUsResident required when isUsCitizen = false.
occupation values must come from getAdbOccupationOptions().


Address

| Field | Type | Required | Question | Validation Error | |---|---|---|---|---| | address.addressLine1 | string | Yes | Street | Address line is required. / Street address is invalid. Avoid special characters. | | address.city | string | Yes | City | Address city is required. / City name is invalid. Only letters and spaces are allowed. | | address.state | string | Yes | State | Residence state is required. / Residence state code is invalid. | | address.zipcode | string | Yes | Zip Code | Zip code is required. / Zip code is invalid. It must be in 5-digit format. / Zip code is not found. |


Existing Coverage (when hasExistingCoverage = true)

Base fields are the same as GIGDB: nameOfTheCompany, insuranceAmount, dateOfIssue, toBeReplaced, toBeFinanced.

ADB state-specific per-coverage fields (ADB does not use MA requestsYieldIndices or GA wantsPolicySummary):

| State | Field on existingCoverages[n] | Exact Question | Validation Error | |---|---|---|---| | OK | notifyPresentInsurer | Please notify my present insurer(s) regarding this transaction? | Notify present insurer response is required for Oklahoma when existing coverage is provided. | | FL | wantsComparativeInformationForm | Indicate whether or not you wish a Comparative Information Form from the proposed company and your existing insurer or insurers? | Comparative information form preference is required for Florida when existing coverage is provided. | | DE | wantsPolicySummary | Do you want a policy summary statement from your existing insurer? | Policy summary preference is required for Delaware when existing coverage is provided. |


Beneficiary Details

Same shape as GIGDB. ADB accepts all BeneficiaryType values.


Business Rules

  1. ADB does not accept isSmoker, birthJurisdiction, or nicotineInfo.
  2. Quote state and address.state must match — mismatch returns StateMismatchIdentified.
  3. Age at application (from dateOfBirth) must be 20–59.
  4. For CA: occupation must contain at least one valid label from getAdbOccupationOptions().
  5. For DC: all three ACA acknowledgement booleans are required.
  6. ADB does not return isQuoteChanged.
  7. ApplicationLimitReached applies — same SSN/email/phone within 30 days for ADB.

Knockout Rules

Returns isDeclined: true on a successful response — the SDK does not throw.

  • isPayerAlsoOwnerAndInsured = false
  • isUsCitizen = false AND isLegalUsResident = false

Error Codes

| Code | When | |---|---| | InvalidRequestFormat | Any field validation failure — inspect value.fields | | ApplicationLimitReached | SSN, email, or phone matches an ADB policy generated within the last 30 days | | StateMismatchIdentified | Quote state ≠ address.state | | AgentNotFound | Quote cannot be linked to the agent account — verify credentials | | InternalServerError | Unexpected backend failure — retry; contact support if persistent |


Response

| Field | Type | Description | |---|---|---| | opportunityId | string | All-zero UUID when isDeclined = true | | isDeclined | boolean | true = knockout; stop the flow |

ADB does not return isQuoteChanged, agentLink, eAppAgentLink, or applicantLink.


Example

import { BeneficiaryType, BeneficiaryRelationship } from '@instabrain-sdks/api-client';

const appResp = await client.startAdbApplication({
  quoteResponseId,
  firstName: 'John', lastName: 'Smith',
  email: '[email protected]', phoneNumber: '5559876543',
  dateOfBirth: '1988-03-20',
  isUsCitizen: true, isPayerAlsoOwnerAndInsured: true,
  socialSecurityNumber: '987654321',
  hasExistingCoverage: false, willOtherCoverageBeReplacedOrFinanced: null, existingCoverageData: null,
  address: { addressLine1: '456 Oak Ave', city: 'Dallas', state: 'TX', zipcode: '75201' },
  beneficiaryDetails: {
    beneficiaryType: BeneficiaryType.Person,
    beneficiaryPerson: { firstName: 'Mary', lastName: 'Smith', relationship: BeneficiaryRelationship.Spouse }
  }
});

if (appResp.isDeclined) {
  return;
}
const { opportunityId } = appResp;

ADB — Get Existing Quote

Method: client.getExistingAdbQuote(opportunityId)

When to call: Session resumption — re-fetch the quote for an existing opportunity. ADB does not return isQuoteChanged so this is not needed immediately after Start Application.


Request Parameters

| Parameter | Type | Required | |---|---|---| | opportunityId | string | Yes |


Error Codes

| Code | When | |---|---| | InvalidRequestFormat | OpportunityId is required. / OpportunityId does not exist. / OpportunityId does not match selected product. |

Throws AuthenticationError when the opportunity ID is not found or not in scope for your token.


Response

| Field | Type | Description | |---|---|---| | productName | string | "InstaADB" | | selectedQuote.quoteResponseId | string | Quote response ID | | selectedQuote.quoteAmount | number | Premium |


Example

const quoteResp = await client.getExistingAdbQuote(opportunityId);
const { quoteResponseId, quoteAmount } = quoteResp.selectedQuote;

ADB — Update Quote

Method: client.updateAdbQuote(request) · Type: ThirdPartyAdbUpdateQuoteReq

Changes face amount, payment frequency, or riders after start application. Must be called before save-eft-payment.


Request Fields

| Field | Type | Required | Description | Validation Error | |---|---|---|---|---| | opportunityId | string | Yes | From Start Application | OpportunityId is required. / OpportunityId does not exist. / Quote update is not allowed when payment is already made. | | faceAmount | number | Yes | New coverage amount | Coverage amount (FaceAmount) is required. | | paymentFreq | PaymentFrequency | Yes | "Monthly" or "Annually" | Payment frequency is required. / Invalid payment frequency. | | riders | AdbRiderType[] | Yes | Rider codes — pass [] to clear all riders | Riders are required. / Riders are invalid. |

riders is required on Update Quote (unlike Get Quote where it is optional). Send [] to remove all riders.


Error Codes

| Code | When | |---|---| | InvalidRequestFormat | Any field validation failure — inspect value.fields | | PaymentAlreadyMade | EFT already saved — quote update no longer allowed |


Response

Same shape as Get Quote — reflects the recalculated premium.


Example

import { PaymentFrequency, AdbRiderType } from '@instabrain-sdks/api-client';

const updatedQuote = await client.updateAdbQuote({
  opportunityId,
  faceAmount: 150000,
  paymentFreq: PaymentFrequency.Monthly,
  riders: [AdbRiderType.FamilyADB] // pass [] to clear all riders
});

IB Term

InstaBrain Term — term life product, no medical exam.

This is a pre-fill flow: use getQuote() and startIBTermApplication(), then hand off via agentLink, applicantLink, and eAppAgentLink. Do not call saveEftPayment(), SecureSign methods, or finalSubmit() for IB Term.

  • Eligible ages: 18–60
  • Not available in: WY, NY
  • Term lengths: 10, 20, or 30 years (benefitPeriod)
  • Rating: rateClass, healthClass, or height + weightInLbs

Integration flow

0.  [`getIBTermRiderDetails()`](#ib-term--rider-lookup)                [Optional] Confirm availability + rider codes
    └── flagProductNotAvailableForState = true → STOP
1.  [`getQuote()`](#ib-term--get-quote)                               Get quote → quoteResponseId
2.  [`startIBTermApplication()`](#ib-term--start-application)            Start app → agentLink / applicantLink
    ├── isDeclined = true      → STOP
    └── isQuoteChanged = true  → re-present updated premium, then hand off via links
3.  [`getExistingIBTermQuote()`](#ib-term--get-existing-quote)                [Optional] Re-fetch prior quote for resumed session

→ Direct agent or applicant to agentLink / applicantLink / eAppAgentLink
  All remaining steps (underwriting, payment, signing) complete inside the InstaBrain frontend.
  No further `InstaBrainClient` methods for IB Term.

IB Term — Rider Lookup

Method: client.getIBTermRiderDetails(stateCode, age, flagNicotineUse)


Request Parameters

| Parameter | Type | Required | Validation Error | |---|---|---|---| | stateCode | string | Yes | State code is required. / State code is not valid. | | age | number | Yes | Age is required. / Age must be between 18 and 60. | | flagNicotineUse | boolean | Yes | Nicotine use status is required. |

Send the same stateCode, age, and flagNicotineUse you intend to use on Get Quote.


Error Codes

| Code | When | |---|---| | InvalidRequestFormat | Any parameter missing or invalid |


Response

| Field | Type | Description | |---|---|---| | flagProductNotAvailableForState | boolean | true → not available for this state/age/nicotine combination — do not proceed | | riders[n].riderCode | string | Pass as riders[n].rider on the Get Quote request | | riders[n].riderTitle | string | Display name | | riders[n].riderDescription | string | Coverage description |


Example

const riderDetails = await client.getIBTermRiderDetails('TX', 35, false);

if (riderDetails.flagProductNotAvailableForState) {
  return;
}
// Pass riderDetails.riders[n].riderCode as riders[n].rider on Get Quote


IB Term — Get Quote

Method: client.getQuote(request) · Type: ThirdPartyQuoteReq


Request Fields

Provide exactly one rating group (†) and exactly one age input (‡).

| Field | Type | Required | Description | Validation Error | |---|---|---|---|---| | faceAmount | number | Yes | Coverage amount — age-based limits apply | Coverage amount (FaceAmount) is required. | | benefitPeriod | number | Yes | Term: 10, 20, or 30 years (state/age/nicotine dependent) | Benefit period is required. | | flagTobaccoUse | boolean | No | Defaults to false when omitted | — | | gender | Gender | Yes | Gender.Male, Gender.Female | Gender is required. / Invalid gender. | | stateCode | string | Yes | 2-letter US state — do not send zipCode for IB Term | State code is required. / State code is not valid. / This product is not available for the selected state. | | rateClass | RateClass | One of † | "Preferred Plus", "Preferred", "Standard", "Standard Extra" | Either RateClass, HealthClass, or Height and WeightInLbs must be provided. / Rate class is invalid. Allowed values: Preferred Plus, Preferred, Standard, Standard Extra. | | healthClass | HealthClass | One of † | "excellent", "great", "good", "average" (case-insensitive) | Health class is invalid. Allowed values: excellent, great, good, average. | | height | ThirdPartyQuoteReqHeight \| null | One of † | feet (1–8), inches (0–11) — required with weightInLbs | Height or weight is invalid. | | weightInLbs | number \| null | One of † | Paired with height | — | | age | number | Yes‡ | 18–60 | Either age or date of birth must be provided. / Age must be between 18 and 60. | | dateOfBirth | string (ISO 8601) | Yes‡ | Wins over age when both provided | Date of birth must be a valid date. | | riders | object[] | No | [{ rider: riderCode, riderFaceAmount: number }] — use riderCode from getIBTermRiderDetails() | Riders are invalid. | | paymentFreq | PaymentFrequency | Yes | "Monthly" or "Annually" | Payment frequency is required. / Invalid payment frequency. | | firstName | string | No | Alphabetic only | First name is invalid. Only alphabetic characters are allowed. | | lastName | string | No | Alphabetic only | Last name is invalid. Only alphabetic characters are allowed. | | email | string | No | Lead capture | Please enter a valid email address. | | phoneNum | string | No | 10 digits or E.164 | Phone number format is incorrect. Use 10 digits or +1XXXXXXXXXX. |

Supply exactly one rating group: rateClass, OR healthClass, OR both height and weightInLbs. Do not send all three. HealthClass.Preferred does not exist — using it throws APIValidationError.
Rider face amounts: ADB Rider $25,000–$250,000 · Dependent Child Rider $5,000–$25,000. Must not exceed faceAmount.


Face Amount Limits (age-based)

| Age | Min | Max | |---|---|---| | Up to 55 | $50,000 | $1,000,000 | | 56 | $50,000 | $900,000 | | 57 | $50,000 | $800,000 | | 58 | $50,000 | $700,000 | | 59 | $50,000 | $600,000 | | 60 | $50,000 | $500,000 |


Benefit Period Availability

| Age | Tobacco use | Available periods | |---|---|---| | Up to 45 | Any | 10, 20, 30 | | 45–50 | Non-tobacco | 10, 20, 30 | | 45–50 | Tobacco | 10, 20 | | 51–60 | Any | 10, 20 |


Error Codes

getQuote() throws APIValidationError when the server returns flagStatus: false. Common codes:

| Code | err.response.value | When | |---|---|---| | InvalidRequestFormat | fields object present | Any field validation failure | | StateNotFound | null | State code not recognized | | AgeNotFound | null | Neither age nor date of birth supplied, or age could not be derived | | BenefitPeriodNotAvailable | fields object present | benefitPeriod not allowed for state/age/nicotine | | CoverageNotAvailable | fields object present | faceAmount out of range for state/age/nicotine | | NotAvailableForState | null | Product not available in this state | | QuoteNotEligibleForGivenConditions | null | State/age/nicotine combination not eligible | | OutsideBuildChart | null | Height/weight outside carrier build chart | | RiderNotAvailable | null | Rider not available for this product/state | | RiderFaceAmountNotValid | null | Rider face amount outside allowed range |


Response

| Field | Type | Description | |---|---|---| | productName | string | "InstaTerm" | | selectedQuote.quoteResponseId | string | Pass as quoteResponseId in Start Application | | selectedQuote.quoteAmount | number | Total premium at requested payment frequency | | selectedQuote.premiumSaveWhenSelectingAnnual | number \| null | Annual billing savings vs monthly; null when already annual | | selectedQuote.maxQuoteAmount | number \| null | Upper premium bound for the quoted profile | | selectedQuote.minQuoteAmount | number \| null | Lower premium bound for the quoted profile | | selectedQuote.faceAmount | number | Coverage amount | | selectedQuote.benefitPeriod | number \| null | Term length in years | | selectedQuote.paymentFrequency | string\|null | "Monthly" or "Annually" | | selectedQuote.selectedRiders[n].rider | string | Rider code | | selectedQuote.selectedRiders[n].riderFaceAmount | number | Rider face amount | | selectedQuote.selectedRiders[n].riderQuoteAmount | number | Rider-only premium contribution |


Example

import { Gender, PaymentFrequency, HealthClass } from '@instabrain-sdks/api-client';

const quoteResp = await client.getQuote({
  faceAmount: 500000,
  benefitPeriod: 20,
  flagTobaccoUse: false,
  gender: Gender.Male,
  stateCode: 'TX',
  healthClass: HealthClass.Great,
  age: 35,
  paymentFreq: PaymentFrequency.Monthly
});

const { quoteResponseId, quoteAmount } = quoteResp.selectedQuote;

IB Term — Start Application

Method: client.startIBTermApplication(request) · Type: IBTermStartApplicationReq


Progressive Disclosure

Many fields are optional — validated only when sent. Backend validation fires only when the parent block is present.

Always required: quoteResponseId, firstName, lastName, email, phoneNumber, isUsCitizenOrIsPermanentResident, isPayerAlsoOwnerAndInsured, height, weight, isHoldingValidDriverLicense, areListedConditionsNotApplicable.

Optional — validated when sent: address, dateOfBirth, socialSecurityNumber, birthJurisdiction, driverLicenseState, driverLicenseNumber, hasPrimaryCarePhysician / physicianDetails, tobaccoNicotineUsage, hasExistingCoverage / existingCoverageData, beneficiaryDetails.

Conditional: childRiderInfo — required when Dependent Child Rider is on the quote; must not be sent otherwise.


Always-Required Fields

| Field | Type | Required | Applicant-Facing Question | Validation Error | |---|---|---|---|---| | quoteResponseId | string | Yes | — | QuoteResponseId is required. / QuoteResponseId does not exist or does not belong to the requested product. | | firstName | string | Yes | First Name | First name is required. / First name is invalid. Only alphabetic characters are allowed. | | lastName | string | Yes | Last Name | Last name is required. / Last name is invalid. Only alphabetic characters are allowed. | | email | string | Yes | Email Address | Email is required. / Please enter a valid email address. | | phoneNumber | string | Yes | Preferred Phone Number | Phone number is required. / Phone number format is incorrect. Use 10 digits or +1XXXXXXXXXX. | | isUsCitizenOrIsPermanentResident | boolean | Yes | Are you a US citizen or lawful permanent resident who has resided in the US for more than 2 years? | US citizenship or permanent residency status is required. | | isPayerAlsoOwnerAndInsured | boolean | Yes | Are you the insured, owner, and payor of this policy? | IsPayerAlsoOwnerAndInsured field is required. | | height.feet | number | Yes | — | Height is required. / Height feet is required. / Height feet must be between 1 and 8. | | height.inches | number | Yes | — | Height inches is required. / Height inches must be between 0 and 11. | | weight | number | Yes | — | Weight is required. / Weight must be greater than 0. | | isHoldingValidDriverLicense | boolean | Yes | Do you hold a valid driver's license? | IsHoldingValidDriverLicense is required. | | areListedConditionsNotApplicable | boolean | Yes | By checking the box I confirm the conditions listed are not applicable and able to proceed with the application. | AreListedConditionsNotApplicable is required. |


areListedConditionsNotApplicable — Listed Conditions

true = none apply → application proceeds. false = one or more apply → immediate decline.

Display the full list to the applicant. Only set true when they confirm none apply.

Cardiovascular: Angina / Heart Attack / Stroke · Aortic or Brain Aneurysm · Atrial Fibrillation / Arrhythmia · Cardiomyopathy / Congestive Heart Failure · Cerebrovascular Accident / TIAs · Coronary Artery Blockage / Bypass / Stent · Myocardial Infarction · Myocarditis

Neurological: ALS · Alzheimer's / Dementia / Cognitive Impairment · Cerebral Palsy · Multiple Sclerosis · Parkinson's Disease · Seizures (Grand Mal, Partial, or Focal with moderate control)

Metabolic / Endocrine: Diabetes Type I · Diabetes Type II under age 40 · Liver Disease / Cirrhosis / Hemochromatosis

Mental Health / Developmental: Autism · Schizophrenia or Psychosis · Mentally Challenged (Down's Syndrome, etc.)

Other Medical: Pending medical tests or exams · Lupus (SLE) · Muscular Dystrophy · Organ Transplant · Sleep Apnea (non-compliant or within 6 months of diagnosis) · Drug/Alcohol treatment within past 5 years · Ventilator use

Legal / Insurance History: Adverse action by another insurer · Misdemeanor within past 8 years · Convicted of a felony · Currently disabled · Declined by or submitted more than 3 life insurance applications in past year · No valid driver's license · DUI / License Suspension / Reckless Driving within last 2 years · Pending criminal charges or probation


Optional Fields (validated when sent)

| Field | Type | Notes | Validation Error | |---|---|---|---| | dateOfBirth | string\|null | ISO date; age 18–60 when sent | Date of birth must be a valid date in the past. / Age must be between 18 and 60 for IB Term. | | socialSecurityNumber | string\|null | 9 consecutive digits, no dashes (e.g. 123456789) | Social Security Number must be in valid format (e.g., XXX-XX-XXXX). | | address.addressLine1 | string | When address sent | Address line is required. / Street address is invalid. Avoid special characters. | | address.city | string | When address sent | Address city is required. / City name is invalid. Only letters and spaces are allowed. | | address.state | string | When address sent — must match quote state | Residence state is required. / Residence state code is invalid. | | address.zipcode | string | When address sent | Zip code is required. / Zip code is invalid. It must be in 5-digit format. / Zip code is not found. | | birthJurisdiction.country | string | When birthJurisdiction sent | Birth jurisdiction country is required. | | birthJurisdiction.state | string | When country = "US" | Birth jurisdiction state is required when birth country is US. / Birth state code is invalid. | | driverLicenseState | string\|null | Flat field — independent of isHoldingValidDriverLicense | Residence state code is invalid. (when sent) | | driverLicenseNumber | string\|null | Flat field — validated against driverLicenseState when both sent | Driver license number format is invalid for the selected driver license state. |

driverLicenseState and driverLicenseNumber are flat top-level fields, not nested. isHoldingValidDriverLicense = false is still a knockout regardless of whether these fields are provided.


Primary Care Physician (optional)

| Field | Type | Required | Question | Validation Error | |---|---|---|---|---| | hasPrimaryCarePhysician | boolean\|null | No | Do you have a primary care physician? | — | | physicianDetails.physicianName | string | When hasPrimaryCarePhysician = true | What is the name of your primary care physician? | Physician name is required when HasPrimaryCarePhysician is true. | | physicianDetails.city | string | When hasPrimaryCarePhysician = true | In which city does your physician practice? | Physician city/address is required when HasPrimaryCarePhysician is true. | | physicianDetails.stateCode | string | When hasPrimaryCarePhysician = true | In which state does your physician practice? | Physician state is required when HasPrimaryCarePhysician is true. / Outside Of The USA is not allowed for physician state. / Physician state code is invalid. | | physicianDetails.lastSeen | string (YYYY-MM) | When hasPrimaryCarePhysician = true | When did you last see your physician? | Physician last-seen date is required when HasPrimaryCarePhysician is true. / Physician last-seen date must be in YYYY-MM format and must not be after the current month. |

When hasPrimaryCarePhysician = false, physicianDetails must be null. Error: Physician details must be null when HasPrimaryCarePhysician is false.
The physician-age-55 knockout has been removed — applicants 55+ without a physician are not declined.


Tobacco / Nicotine Usage (optional — validated when sent)

| Field | Type | Required | Question | Validation Error | |---|---|---|---|---| | tobaccoNicotineUsage.lastUsedPeriod | TobaccoNicotineLastUsedPeriod | Yes (in block) | When did you last use tobacco or nicotine products? | Last used period is required. / Last used period must be one of: within the last 12 months, 12 to 23 months, 24 to 35 months, 36 months or greater, never used. | | tobaccoNicotineUsage.productTypesUsed | TobaccoNicotineProductType[] \| null | When lastUsedPeriod !== TobaccoNicotineLastUsedPeriod.Never | Which tobacco or nicotine products have you used? | At least one tobacco or nicotine product type must be selected. | | tobaccoNicotineUsage.lastTimeUsed | string \| null (YYYY-MM) | When lastUsedPeriod !== TobaccoNicotineLastUsedPeriod.Never | When was the most recent time you used tobacco or nicotine? | Last time used tobacco/nicotine date is required. / Last time used tobacco/nicotine date must be in YYYY-MM format. | | tobaccoNicotineUsage.cigarUsagePerYear | number \| null | When productTypesUsed is [TobaccoNicotineProductType.Cigars] only | How many cigars do you smoke per year? (1–999) | Number of times cigars are smoked per year is required when Cigars is selected. / `C