Adaptive Mode Integration Guide

This guide explains how Adaptive Mode uses the data you pass in to automatically skip questions in the SDK flow, helping you shorten the experience for your users while still collecting everything required for tax documentation.

Adaptive Mode allows clients to hide and/or lock questions in the Taxbit React SDK based on information they supply about the user. Adaptive evaluates each field independently and determines whether that question needs to appear in the SDK flow. If valid information is provided, the SDK removes the question entirely; if information is missing or invalid, the SDK asks the user for it.

This guide explains:

  • What Adaptive does
  • The difference between Skip & Lock vs Skip & Edit modes
  • How Adaptive decides whether to hide a question
  • How to pass data into the SDK
  • The rules around skipping fields (including special cases like FTIN and mailing address)
  • All supported fields for W-9, W-8BEN, and W-8BEN-E, with full JSON examples

Enabling Adaptive Mode

Adaptive Mode is enabled via an SDK property:

<TaxbitQuestionnaire adaptiveMode="skipLock" data={...} />

Once enabled, you can specify one of:

  • full (default mode)
  • skipLock
  • skipEdit

Adaptive Behavior Overview

Adaptive Mode (skipLock, skipEdit) determines, for every field you pass in:

  • If the information is complete and valid → the SDK skips the question
  • If the information is missing, incomplete, or invalid→ the SDK shows the question
  • If operating in Skip & Lock mode → skipped fields also become locked on the Review screen
  • If operating in Skip & Edit mode → skipped fields remain editable on the Review screen

Adaptive Mode is entirely about minimizing what the user needs to see inside Taxbit’s SDK flow.

Full Mode does not skip any questions. Any data you pass in is simply pre-filled, and all questions still appear in the SDK flow and remain editable to the user.

How Adaptive Determines Whether a Field Is Skipped

Adaptive uses three signals:

  1. Whether the field exists in the data
  2. Whether the value is valid
  3. Whether the field is optional or required under the form type

These signals determine whether the SDK should hide the question or display it.

Valid Data → Field Is Always Skipped

If all required components of a field are present and valid, the SDK does not show that question to the user.

Empty Value (“”)

Send an empty string for a field when that question has already been shown to the user in your own experience, and the user chose not to answer it.

When the SDK receives "":

  • It assumes:
    • You presented the question
    • The user intentionally left it blank
    • The SDK should not ask the same question again How this works in the SDK:
    • If the field is optional in the SDK:
      • "" → the question will be skipped in the flow
      • In Skip & Lock mode, it will also be locked on the review screen
      • In Skip & Edit mode, it will be editable on the review screen
    • If the field is required in the SDK:
      • "" is treated as missing required data
      • The SDK will still show the question and require the user to provide a value
      • Required fields are never skipped just because "" was passed

Important: don’t use "" to hide questions the user never saw

Some fields (for example, mailing address on a W-8 or U.S. TIN on a W-8) are optional in the SDK, but users should still have the option to provide them.

  • Because of that:
    • You should only pass "" if:
      • You have already shown that field in your own UI, and
      • The user decided not to fill it out
    • You should not pass "" just to make the SDK ask fewer questions if the user never had the chance to provide that information. This would cause the collected form to be invalid based on tax documentation rules.

Field Omitted Entirely → Field Is Skipped (but not locked)

If you omit a field entirely from the data object:

  • For optional fields:
    • The SDK treats the field as “never collected”
    • The question is skipped in the flow
    • The value is not locked on the review screen (because you never collected it)
  • For required fields:
    • The SDK will still collect it
    • The question will appear in the flow
    • Omitting a required field never causes it to be skippedIt cannot be locked because it must be supplied by the user

Invalid or Incomplete Data → Field Is Not Skipped

If any data is invalid or incomplete, the SDK displays that field so the user can fix it.

Examples:

  • Partial address
  • Invalid US postal code
  • Wrong date format
  • Invalid US TIN format

Special Case: FTIN

  • Non-US TINs that have syntax warnings will still be skipped (and locked when in Skip & Lock mode)
  • If ftinNotLegallyRequired = true, it overrides the FTIN entirely and the SDK treats the field as not required

Using the data Prop

The data prop is where clients pass the information used for Adaptive Mode’s skip logic:

<TaxbitQuestionnaire
  adaptiveMode="skipLock"
  data={{
    accountHolder: { ... }
  }}
/>

Each tax document type supports different fields. Full JSON examples and accepted fields are below.

W-9 Individual

{
  "accountHolder": {
    "isUsPerson": true,
    "usAccountType": "INDIVIDUAL",
    "name": "Jane Doe",
    "tin": "776568989",
    "address": {
      "firstLine": "123 Main St",
      "secondLine": "",
      "city": "Seattle",
      "stateOrProvince": "WA",
      "postalCode": "98101",
      "country": "US"
    }
  }
}

W-9 Entity (C Corporation)

{
  "accountHolder": {
    "isUsPerson": true,
    "usAccountType": "C_CORPORATION",
    "name": "Martinez Corporation",
		"dbaName": "Martinex Solutions",
    "tin": "776568989",
    "address": {
      "firstLine": "123 Main St",
      "secondLine": "",
      "city": "Seattle",
      "stateOrProvince": "WA",
      "postalCode": "98101",
      "country": "US"
    }
  }
}

W-8BEN

{
  "accountHolder": {
    "isUsPerson": false,
    "accountOwnerType": "INDIVIDUAL",
    "name": "Maria Fernandez",
    "ftin": "A1234567",
    "address": {
      "firstLine": "45 Calle Real",
      "secondLine": "Apt 3",
      "city": "Madrid",
      "stateOrProvince": "MD",
      "postalCode": "28001",
      "country": "ES"
    },
    "mailingAddress": {
      "firstLine": "PO Box 123",
      "secondLine": "",
      "city": "Madrid",
      "stateOrProvince": "MD",
      "postalCode": "28002",
      "country": "ES"
    },
    "mailingAddressIsDifferent": true,
    "countryOfCitizenship": "ES",
    "dateOfBirth": "01/01/1990",
    "ftinNotLegallyRequired": false
  }
}

W-8BEN-E

{
  "accountHolder": {
    "isUsPerson": false,
    "accountOwnerType": "ENTITY",
    "countryOfCitizenship": "US",
    "foreignAccountType": "CORPORATION",
    "name": "Fernandez Consulting Group",
    "ftin": "B9876543",
    "tin": "",
    "address": {
      "firstLine": "100 Business Rd",
      "secondLine": "Suite 500",
      "city": "Barcelona",
      "stateOrProvince": "BC",
      "postalCode": "08001",
      "country": "ES"
    },
    "mailingAddress": {},
    "mailingAddressIsDifferent": false,
    "ftinNotLegallyRequired": false
  }
}