@instabrain-sdks/api-client
v2.3.3
Published
Official Node.js SDK for InstaBrain APIs - Insurance quotes and application processing
Maintainers
Readme
@instabrain-sdks/api-client
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 returnedagentLink/applicantLink/eAppAgentLinkfor 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
- Installation
- Requirements
- Authentication
- GIGDB
- ADB
- IB Term
- Pure Term
- Shared methods — GIGDB & ADB
- Reporting
- Enums & Constants
- Beneficiary Reference
- Error Handling
- Error codes (
APIErrorCode) - Environment Configuration
- Token Management
- Examples Directory
- Support
Installation
npm install @instabrain-sdks/api-clientNote: 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:
isSmokeron both quote and application;birthJurisdictionon 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) → policyNumberSteps 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
ageORdateOfBirth. When both are sent,dateOfBirthtakes priority.
Business Rules
isSmokeris required and affects premium calculation.- Age is validated against 50–85 range after derivation from
dateOfBirth. - 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. |
isLegalUsResidentrequired whenisUsCitizen = false.willOtherCoverageBeReplacedOrFinancedrequired whenhasExistingCoverage = true; must benullorfalsewhenhasExistingCoverage = false.socialSecurityNumbermust be 9 consecutive digits, no dashes (e.g.123456789). TheXXX-XX-XXXXtext 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.staterequired whenbirthJurisdiction.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
- Quote state and
address.statemust match — mismatch returnsStateMismatchIdentified. isSmoker = truerequiresnicotineInfo.lastUseDateinYYYY-MMformat.hasExistingCoverage = falserequiresexistingCoverageData = nullandwillOtherCoverageBeReplacedOrFinancednull or false.- State-specific existing coverage fields are only enforced when
hasExistingCoverage = trueorwillOtherCoverageBeReplacedOrFinanced = true. ApplicationLimitReachedfires (as a top-level error code, notInvalidRequestFormat) 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 = falseisUsCitizen = falseANDisLegalUsResident = false
When declined,
opportunityIdmay 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 = truereturned 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
AuthenticationErrorwhen the opportunity ID is not found or not in scope for your token. Distinct fromAPIValidationErrorwith 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
- GIGDB does not support riders — do not send a
ridersfield. - Only
faceAmountandpaymentFreqcan 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 premiumADB
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 —
occupationfield required on application - No
isSmoker,birthJurisdiction, ornicotineInfofields
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) → policyNumberSteps 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 aflagProductNotAvailableForStateflag.
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 |
ridersmay be an empty array even whenflagProductNotAvailableForState = 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 QuoteAvailable 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
RiderTypevalues ("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
ageORdateOfBirth.
Business Rules
- Rider codes are validated against ADB for the given state — unrecognised codes are rejected.
- 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. |
socialSecurityNumbermust be 9 consecutive digits, no dashes (e.g.123456789).isLegalUsResidentrequired whenisUsCitizen = false.occupationvalues must come fromgetAdbOccupationOptions().
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
- ADB does not accept
isSmoker,birthJurisdiction, ornicotineInfo. - Quote state and
address.statemust match — mismatch returnsStateMismatchIdentified. - Age at application (from
dateOfBirth) must be 20–59. - For CA:
occupationmust contain at least one valid label fromgetAdbOccupationOptions(). - For DC: all three ACA acknowledgement booleans are required.
- ADB does not return
isQuoteChanged. ApplicationLimitReachedapplies — same SSN/email/phone within 30 days for ADB.
Knockout Rules
Returns isDeclined: true on a successful response — the SDK does not throw.
isPayerAlsoOwnerAndInsured = falseisUsCitizen = falseANDisLegalUsResident = 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, orapplicantLink.
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
AuthenticationErrorwhen 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. |
ridersis 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, orheight+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, andflagNicotineUseyou 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 QuoteIB 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, ORhealthClass, OR bothheightandweightInLbs. Do not send all three.HealthClass.Preferreddoes not exist — using it throwsAPIValidationError.
Rider face amounts: ADB Rider $25,000–$250,000 · Dependent Child Rider $5,000–$25,000. Must not exceedfaceAmount.
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. |
driverLicenseStateanddriverLicenseNumberare flat top-level fields, not nested.isHoldingValidDriverLicense = falseis 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,physicianDetailsmust benull. 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
