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

# Field types

> A complete reference for every field type available in the FormFlows.ai form builder.

FormFlows.ai provides a comprehensive set of field types organized into five categories. Every field shares a set of common options — label, description, required toggle, and field ID — plus category-specific settings described below.

To add a field, open the form builder, click **Add field**, and select a type from the panel. You can change a field's type after creation from the **Field type** dropdown in its settings panel, as long as the new type is compatible.

<AccordionGroup>
  <Accordion title="Text fields">
    Text fields collect free-form written input from respondents. Use these for names, messages, identifiers, and any other information that doesn't fit a structured format.

    **Short text**

    A single-line input for brief responses such as names, job titles, or reference numbers. Key options:

    * **Placeholder** — hint text shown before the respondent types
    * **Character limit** — set a minimum and/or maximum character count
    * **Default value** — pre-fill the field with a value respondents can overwrite
    * **Pattern validation** — require the response to match a regular expression

    **Long text**

    A multi-line textarea for paragraphs, descriptions, or open-ended feedback. Key options:

    * **Rows** — control the initial visible height of the text area (2–20 rows)
    * **Character limit** — min/max character enforcement with a live counter displayed to the respondent
    * **Rich text mode** — enable a basic formatting toolbar (bold, italic, lists) for respondent input

    **Email**

    A single-line input that validates the response as a properly formatted email address (e.g., `user@example.com`). Useful for contact forms and sign-ups. Key options:

    * **Block disposable addresses** — reject known temporary email domains
    * **Domain allowlist/blocklist** — restrict or exclude specific domains

    **Phone**

    A text input with phone number formatting and validation. Key options:

    * **Default country** — set the initial country code shown in the dial code selector
    * **Format** — choose between international format (e.g., +1 555 000 0000) or local format
    * **Require valid number** — validate that the number is a real dialable number for the selected country

    **URL**

    Collects a web address and validates that it begins with `http://` or `https://`. Key options:

    * **Allowed domains** — restrict submissions to URLs from specific domains
    * **Open in new tab** — when displaying submitted responses, open the URL in a new browser tab

    **Number**

    Accepts numeric input only. Non-numeric characters are blocked at the input level. Key options:

    * **Min / Max** — define the acceptable range of values
    * **Decimal places** — set how many decimal places are allowed (0 for integers only)
    * **Step** — control the increment when a respondent uses keyboard arrow keys
    * **Prefix / Suffix** — display a unit label inside the input (e.g., `$`, `kg`, `%`)
  </Accordion>

  <Accordion title="Choice fields">
    Choice fields present respondents with a defined set of options. They are ideal for structured data you want to analyze and filter later.

    **Radio buttons**

    Displays a vertical or horizontal list of options where only one can be selected. Best for mutually exclusive choices with a small number of options (2–7). Key options:

    * **Options** — add, remove, and reorder choices; assign each a label and an optional value (used in API responses and logic rules)
    * **Allow "Other"** — appends an "Other" option with a text input for custom responses
    * **Layout** — vertical list or horizontal row
    * **Randomize order** — shuffle options on each page load to reduce position bias

    **Checkboxes**

    A list of options where respondents can select any number of items. Use for multi-select scenarios such as interests, features, or agreements. Key options:

    * **Min / Max selections** — require respondents to choose within a range
    * **Allow "Other"** — same as radio buttons
    * **Select all / Deselect all** toggle — adds a convenience button for long lists

    **Dropdown**

    A collapsed select input that expands when clicked. Use when you have many options (8 or more) and want to conserve vertical space. Key options:

    * **Searchable** — adds a search box inside the dropdown for large option lists
    * **Placeholder** — default unselected state label (e.g., "Select a country…")
    * **Option groups** — group related options under subheadings within the dropdown

    **Multi-select**

    A dropdown that allows multiple simultaneous selections, displayed as pills or tags. Key options:

    * **Min / Max selections** — enforce selection limits
    * **Searchable** — filter options by typing
    * **Create new options** — allow respondents to type in options that aren't on the list

    <Tip>
      When you have more than about 10 options, prefer **Dropdown** or **Multi-select** over **Radio buttons** or **Checkboxes** to keep the form visually compact.
    </Tip>
  </Accordion>

  <Accordion title="Date & time fields">
    Date and time fields collect structured temporal information. They render native or custom date/time pickers to ensure consistent formatting.

    **Date picker**

    Opens an interactive calendar for respondents to select a single date. Key options:

    * **Date format** — choose the display format (MM/DD/YYYY, DD/MM/YYYY, YYYY-MM-DD, etc.)
    * **Min date / Max date** — restrict the selectable range; supports relative values like "today", "today + 30 days"
    * **Disable specific dates** — block out dates such as weekends or holidays
    * **Default to today** — automatically populate the field with today's date

    **Time picker**

    Lets respondents select a time of day using a clock interface or scrollable list. Key options:

    * **Format** — 12-hour (AM/PM) or 24-hour
    * **Step** — control the minute increment (5, 10, 15, 30, or 60 minutes)
    * **Min time / Max time** — restrict selectable times to a window (e.g., business hours only)

    **Date range**

    A dual-date picker that captures a start date and an end date in a single field. Common uses include booking requests, availability windows, and project timelines. Key options:

    * All options from Date picker apply to both start and end dates
    * **Min duration / Max duration** — enforce minimum or maximum span between the two selected dates
    * **Disable date gaps** — require the range to be contiguous (no skipped days)

    <Note>
      Date values are stored internally in ISO 8601 format (UTC). The display format you choose only affects how the date appears to respondents and in the FormFlows.ai dashboard — the raw data in exports and the API always uses ISO format.
    </Note>
  </Accordion>

  <Accordion title="File & media fields">
    File and media fields allow respondents to upload content directly within the form. Uploaded files are stored securely and accessible from the submission detail view and via API.

    **File upload**

    A general-purpose file upload input that accepts any file type by default. Key options:

    * **Accepted file types** — restrict uploads to specific extensions (e.g., `.pdf`, `.docx`, `.csv`) or MIME type groups (e.g., images, documents)
    * **Max file size** — set a per-file size limit (up to 500 MB on paid plans)
    * **Max files** — allow respondents to upload multiple files up to a defined count
    * **Drag and drop** — enable a drop zone UI in addition to the click-to-browse button

    **Image upload**

    Optimized for image files. Accepts JPEG, PNG, GIF, WebP, and SVG by default. Key options:

    * **Preview** — show a thumbnail of the uploaded image directly in the form
    * **Crop tool** — prompt respondents to crop the image to a specified aspect ratio after upload
    * **Min/Max dimensions** — enforce pixel width and height constraints

    **Signature**

    Renders an in-browser drawing canvas where respondents can draw their signature with a mouse, stylus, or finger. The signature is captured as a PNG image and attached to the submission. Key options:

    * **Canvas background color** — set the background color of the signing area
    * **Pen color** — set the default ink color
    * **Require confirmation checkbox** — display a "I agree this is my legal signature" checkbox below the canvas
    * **Clear button** — always visible by default; can be hidden if needed

    <Warning>
      Signatures collected through FormFlows.ai are suitable for acknowledgment and consent use cases. For legally binding e-signatures under regulations such as eIDAS or the U.S. ESIGN Act, consult your legal team about the appropriate level of assurance required for your jurisdiction.
    </Warning>
  </Accordion>

  <Accordion title="Advanced fields">
    Advanced fields handle specialized input types, scoring, payment collection, and internal data management.

    **Rating**

    Displays a star-based or numeric rating scale. Key options:

    * **Scale** — choose the maximum value (5, 7, or 10)
    * **Icon** — use stars, hearts, thumbs, or numbered circles
    * **Labels** — add text labels to the lowest and highest values (e.g., "Poor" and "Excellent")

    **Slider**

    A draggable range input for selecting a numeric value along a continuous or stepped scale. Key options:

    * **Min / Max** — define the endpoints of the scale
    * **Step** — set the increment between selectable values
    * **Show value label** — display the current selected value above the thumb
    * **Prefix / Suffix** — add a unit label to the displayed value

    **Payment**

    Collects a payment directly within the form using Stripe. Respondents enter their card details in a PCI-compliant embedded element. Key options:

    * **Amount** — set a fixed price or derive it from a calculated field
    * **Currency** — select from all currencies supported by your Stripe account
    * **Payment description** — text shown on the respondent's bank statement
    * **Require billing address** — collect a full billing address with the payment

    <Info>
      Payment fields require a connected Stripe account. Go to **Settings → Integrations → Stripe** to connect your account before adding a Payment field to a form.
    </Info>

    **Hidden field**

    Not shown to respondents. Used to capture metadata or pass values from external sources into submissions. Key options:

    * **Default value** — set a static value, or use a merge variable to populate it dynamically from URL query parameters (e.g., `?utm_source=newsletter` → `{{utm_source}}`)
    * **Pre-fill from URL** — automatically read the value from a matching query parameter in the form's URL

    **Calculated field**

    Computes a value based on the contents of other fields using a formula. The result can be displayed to the respondent or stored silently. Key options:

    * **Formula** — build an expression using field references (e.g., `{price} * {quantity}`), arithmetic operators, and built-in functions such as `SUM()`, `ROUND()`, `IF()`, and `CONCAT()`
    * **Display to respondent** — toggle whether the calculated value is shown on the form
    * **Output format** — format the result as a number, currency, or text string
  </Accordion>
</AccordionGroup>

## Common field options

Every field type, regardless of category, supports the following options in its settings panel:

| Option                     | Description                                                                |
| -------------------------- | -------------------------------------------------------------------------- |
| **Label**                  | The question or prompt displayed above the field                           |
| **Description**            | Optional helper text shown below the label                                 |
| **Required**               | Prevents form submission if the field is empty                             |
| **Field ID**               | A unique identifier used in the API, webhooks, and conditional logic rules |
| **Conditional visibility** | Show or hide this field based on other responses                           |

## Next steps

<CardGroup cols={2}>
  <Card title="Conditional logic" icon="code-branch" href="/guides/conditional-logic">
    Control which fields appear based on a respondent's answers.
  </Card>

  <Card title="Create a form" icon="plus" href="/guides/create-form">
    Start building a new form from scratch or with AI.
  </Card>
</CardGroup>
