> ## Documentation Index
> Fetch the complete documentation index at: https://docs-terra.withunify.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Field Types

> Complete reference for Terra's 18+ form field types

# Field Types

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

## Input Fields

| Type     | Description             | Key Properties                           |
| -------- | ----------------------- | ---------------------------------------- |
| `text`   | Single/multi-line text  | `inputType`, `multiline`, `placeholder`  |
| `number` | Numeric input           | `prefix`, `suffix`, `numberType`         |
| `date`   | Date picker             | `minDate`, `maxDate`, `minAge`, `maxAge` |
| `choice` | Radio/checkbox/dropdown | `options`, `multiple`, `renderAs`        |

## Composite Fields

| Type        | Description               | Key Properties                         |
| ----------- | ------------------------- | -------------------------------------- |
| `address`   | Street, city, state, zip  | `includeUnit`                          |
| `bank`      | Routing + account numbers | `enableBankLookup`, `showCheckExample` |
| `files`     | File upload               | `accept`, `maxFiles`, `maxSizeBytes`   |
| `signature` | E-signature capture       | `requireTypedName`, `legalText`        |

## Display Fields

| Type        | Description            | Key Properties                    |
| ----------- | ---------------------- | --------------------------------- |
| `info`      | Markdown content block | `content`, `variant`              |
| `section`   | Section header         | `description`                     |
| `divider`   | Visual separator       | —                                 |
| `image`     | Display image          | `src`, `alt`, `caption`           |
| `link`      | Clickable link         | `url`, `linkText`, `openInNewTab` |
| `statement` | Plain text             | `text`                            |

## Structural Fields

| Type       | Description      | Key Properties                           |
| ---------- | ---------------- | ---------------------------------------- |
| `group`    | Nested container | `elements`, `collapsible`                |
| `repeated` | Repeatable group | `min`, `max`, `buttonLabel`, `itemTitle` |

## Integration Fields

| Type                      | Description                    | Key Properties                 |
| ------------------------- | ------------------------------ | ------------------------------ |
| `plaid_id_verification`   | Document + selfie verification | `plaidTemplateId`              |
| `plaid_bank_verification` | Secure bank connection         | `disclaimer`                   |
| `language_preference`     | Language selector              | `showNativeNames`, `showFlags` |

***

## Detailed Reference

### Text Field

```typescript theme={null}
{
  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

```typescript theme={null}
{
  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)

```typescript theme={null}
{
  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" }, ... }
  ]
}
```

***

<Card title="Adding Custom Fields" icon="plus" href="/core-systems/forms/form-builder-internals">
  Learn how to create new field types
</Card>
