Skip to main content

Field Types

Terra supports 18+ field types, from simple text inputs to complex Plaid integrations.

Input Fields

TypeDescriptionKey Properties
textSingle/multi-line textinputType, multiline, placeholder
numberNumeric inputprefix, suffix, numberType
dateDate pickerminDate, maxDate, minAge, maxAge
choiceRadio/checkbox/dropdownoptions, multiple, renderAs

Composite Fields

TypeDescriptionKey Properties
addressStreet, city, state, zipincludeUnit
bankRouting + account numbersenableBankLookup, showCheckExample
filesFile uploadaccept, maxFiles, maxSizeBytes
signatureE-signature capturerequireTypedName, legalText

Display Fields

TypeDescriptionKey Properties
infoMarkdown content blockcontent, variant
sectionSection headerdescription
dividerVisual separator
imageDisplay imagesrc, alt, caption
linkClickable linkurl, linkText, openInNewTab
statementPlain texttext

Structural Fields

TypeDescriptionKey Properties
groupNested containerelements, collapsible
repeatedRepeatable groupmin, max, buttonLabel, itemTitle

Integration Fields

TypeDescriptionKey Properties
plaid_id_verificationDocument + selfie verificationplaidTemplateId
plaid_bank_verificationSecure bank connectiondisclaimer
language_preferenceLanguage selectorshowNativeNames, showFlags

Detailed Reference

Text Field

{
  type: "text",
  id: "full-name",
  label: { en: "Full Legal Name" },
  placeholder: { en: "Enter your name as it appears on your ID" },
  inputType: "text",  // "text" | "email" | "tel" | "url"
  multiline: false,
  validation: {
    required: true,
    minLength: 2,
    maxLength: 100
  }
}

Choice Field

{
  type: "choice",
  id: "employment-status",
  label: { en: "Employment Status" },
  options: [
    { value: "employed", label: { en: "Employed" } },
    { value: "self-employed", label: { en: "Self-Employed" } },
    { value: "unemployed", label: { en: "Unemployed" } },
    { value: "retired", label: { en: "Retired" } }
  ],
  multiple: false,        // Radio buttons
  renderAs: "radio",      // "radio" | "checkbox" | "dropdown"
  optionLayout: "vertical"
}

Repeated Field (Household Members)

{
  type: "repeated",
  id: "household-members",
  label: { en: "Household Members" },
  buttonLabel: { en: "Add Member" },
  itemTitle: { en: "Household Member" },
  min: 0,
  max: 10,
  summaryFields: ["name", "relationship"],
  elements: [
    { type: "text", id: "name", label: { en: "Name" } },
    { type: "date", id: "dob", label: { en: "Date of Birth" } },
    { type: "choice", id: "relationship", label: { en: "Relationship" }, ... }
  ]
}

Adding Custom Fields

Learn how to create new field types