# Formstep Docs — Building Forms

# Building Forms overview

You build a form in an editor that works like a document, add questions, content and logic, and publish when it is ready.

## How a form is built

The editor works like a document: you type, add blocks, and move them around. Questions and content sit on the canvas as respondents will see them. Logic, hidden fields, and calculated fields work in the background, so the form can react to each answer. AI chat can build or change a form for you from a sentence.

![The form editor: the form on the canvas with its questions, the Blocks panel on the right listing every question and block, and the top bar with Edit, Translate, Preview and Publish changes.](https://formstep.io/docs/images/building-forms/editor-layout.png)

The editor: the form on the canvas, the blocks beside it.

## Draft and published

Your edits save as a draft. Respondents keep seeing the last published version until you publish again, so you can work on a live form without anyone noticing. Before you publish, Formstep checks the draft and stops on anything that would break. Use Preview to try the form as a respondent first.

## Pages in this section

The editor

- [Understanding the editor](https://formstep.io/docs/building-forms/understanding-the-editor/) — The parts of the form editor: the top bar, the canvas, the side panel and its four tabs, the slash menu, AI chat, and keyboard shortcuts.

- [Form structure](https://formstep.io/docs/building-forms/form-structure/) — Split a form into pages with a progress bar, put blocks side by side in columns, and move, change, or hide blocks with the block menu.

- [Question types](https://formstep.io/docs/building-forms/field-types/) — The questions you can add to a form, from text and choice to signatures, payments, and scheduling, and when to use each one.

- [Question settings](https://formstep.io/docs/building-forms/field-configuration/) — Labels, placeholders, default values, choice options, and validation rules.

- [Content blocks & formatting](https://formstep.io/docs/building-forms/content-blocks/) — Add headings, text, images, videos, maps, embeds, and tables between your questions, format text with the toolbar, and show earlier answers with @.

Files, payments and more

- [File uploads & signatures](https://formstep.io/docs/building-forms/file-uploads-signatures/) — Collect files and drawn signatures from respondents.

- [Documents block](https://formstep.io/docs/building-forms/documents-block/) — Hand files to the respondent (a contract draft, a price list, a how-to) as a download list inside the form.

- [Payment collection](https://formstep.io/docs/building-forms/payment-collection/) — Accept one-time payments from respondents via Stripe.

- [Respondent email verification](https://formstep.io/docs/building-forms/email-verification/) — On the Business plan, respondents confirm their email address with a 6-digit code before they can submit, so every address you collect is real and reachable.

- [Repeating groups](https://formstep.io/docs/building-forms/repeating-groups/) — Let a respondent fill in the same questions as many times as they need, such as one name and age per guest, and see where the answers show up.

Logic and data

- [Conditional logic](https://formstep.io/docs/building-forms/conditional-logic/) — Show, hide, require, and jump to pages based on answers, or calculate values and stop a submission.

- [Hidden fields](https://formstep.io/docs/building-forms/hidden-fields/) — Pass data the respondent never sees into a form, from the address of a share link or the context of a request, and save it with each submission.

- [Calculated fields](https://formstep.io/docs/building-forms/calculated-fields/) — Work out scores, totals, and text from form answers.

- [@ mentions](https://formstep.io/docs/building-forms/answer-piping/) — Type @ to show an answer somewhere else in your form, from question titles to the thank-you page and emails.

- [AI Validation](https://formstep.io/docs/building-forms/ai-validation/) — Check answers and uploaded files against a rule you write in one sentence.

After they submit

- [Thank-you page & redirect](https://formstep.io/docs/building-forms/custom-thank-you/) — Customize the thank-you page respondents see after they submit, with text, links, images, and their answers, or send them to your own web page.

- [Live results](https://formstep.io/docs/building-forms/live-results/) — Show respondents the answer counts after they submit, put the results on a big screen, and add an AI summary of what they mean.

Languages and publishing

- [Multilingual forms](https://formstep.io/docs/building-forms/translating-form-content/) — Set the language you write a form in, translate questions, text, and emails by hand or with AI, and control which language each respondent sees.

- [Form settings](https://formstep.io/docs/building-forms/form-settings/) — Choose who can open a form, what happens after someone submits, and which emails go out, all in the Settings dialog.

- [Publish history](https://formstep.io/docs/building-forms/version-history/) — View the published versions of your form and revert to an earlier one.

- [Publish checks](https://formstep.io/docs/building-forms/publish-checks/) — What Formstep checks before your form goes live, which findings block publishing, and how to clear the ones you are most likely to meet.

# Understanding the editor

The parts of the form editor: the top bar, the canvas, the side panel and its four tabs, the slash menu, AI chat, and keyboard shortcuts.

## Layout

The editor works like a document: you type, add blocks, and move them around. It has four areas.

![The form editor on a published form: the top toolbar with Edit, Translate, and Preview, then Publish history, Integrations, Settings, the green issue indicator, Publish changes, and the primary Inbox button; the canvas in the center; and the side panel on the right, open on its Blocks tab, with the rail of Blocks, Fields, Logic, and Theme icons at the edge.](https://formstep.io/docs/images/building-forms/editor-layout.png)

The editor: top bar, canvas, and side panel.

- The top bar switches between **Edit**, **Translate**, and **Preview**. On the right are Publish history, Integrations, Settings, the issue indicator, and **Publish**.

- The canvas, in the center, shows your form as respondents see it.

- The side panel, on the right, has four tabs. See [Side panel](#side-panel).

- AI chat opens from the button at the bottom right. See [AI chat](#ai-chat).

More on the top bar:

- **Translate**: [Multilingual forms](https://formstep.io/docs/building-forms/translating-form-content/)

- **Preview** lets you fill in the form as a respondent would, with logic working. Nothing is saved, and uploads and payments are simulated.

- **Publish history**: [Publish history](https://formstep.io/docs/building-forms/version-history/)

- **Settings**: [Form settings](https://formstep.io/docs/building-forms/form-settings/). **Integrations**: [Integrations](https://formstep.io/docs/integrations/overview/)

- The issue indicator and **Publish**: [Publish checks](https://formstep.io/docs/building-forms/publish-checks/)

- **Inbox**, once the form is published, opens the form's own page with its requests and submissions. See the [submission inbox](https://formstep.io/docs/submissions-analytics/submission-inbox/).

## Side panel

Click an icon on the rail to open a tab, and click it again to close the panel. On a wide screen, drag the panel's left edge to resize it.

| Tab | What it holds |
| - | - |
| Blocks | Every block you can add, with a search box. Click a block to add it below the cursor, or drag it onto the canvas. See [Question types](https://formstep.io/docs/building-forms/field-types/) |
| Fields | The field keys automations read and prefill your answers by. Click a name to jump to its question. See [Field keys](https://formstep.io/docs/requests/field-keys/) |
| Logic | Every logic rule in plain words. Click a rule to go to it, or add one. See [Conditional logic](https://formstep.io/docs/building-forms/conditional-logic/) |
| Theme | Colors, fonts, presets, and dark mode. See [Appearance & theming](https://formstep.io/docs/branding-domains/appearance-theming/), which also covers the cover and logo |

On a narrow window, the panel opens from the bottom. On a phone, Fields and Theme are in the top bar's **⋯** menu, and you add blocks by typing `/`.

## Slash menu

To add a block from the keyboard, type `/` on an empty line, or press `⌘`+`/` (

`Ctrl`+`/`

), and keep typing to filter. The menu shows only the blocks that fit where the cursor is.

![The slash menu open on the canvas after typing a slash, showing its block categories, Basic Blocks and Form Fields first, with their listed block types.](https://formstep.io/docs/images/building-forms/slash-menu.png)

Slash menu: the block picker.

To change a block you added, click its drag handle (⋮⋮). See [Form structure](https://formstep.io/docs/building-forms/form-structure/) and [Question settings](https://formstep.io/docs/building-forms/field-configuration/).

## AI chat

The AI mascot at the bottom right opens AI chat, and a second click closes it. It can write, check, and edit your form: say “add a phone number and a date picker” and it adds them. It uses your AI credits. See [Use AI chat](https://formstep.io/docs/ai/using-ai/).

![The AI chat floating over the bottom-right of the editor, beside the side panel's rail, showing starter prompt suggestions, the message input, and the remaining AI credits above the input; the AI mascot that opens and closes it stands under the rail.](https://formstep.io/docs/images/building-forms/ai-chat-panel.png)

AI chat, floating over the editor.

## Keyboard shortcuts

On a Mac use Cmd; on Windows and Linux use Ctrl.

| Shortcut | What it does |
| - | - |
| Cmd + / | Open the block menu at the cursor |
| Cmd + B / I / U / S | Bold, italic, underline, strikethrough |
| Cmd + K | On the canvas: link the selected text. Anywhere else: search for any form, folder, workspace, or setting |
| Cmd + A | Once: the current block's text. Again: every block |
| Shift + Enter | Line break inside the block, instead of a new block |
| Cmd + Enter | Leave the block and start a new paragraph below |
| Tab / Shift + Tab | Indent or outdent a list item |

## Next steps

[Question types](https://formstep.io/docs/building-forms/field-types/) — Every question you can add

[Form structure](https://formstep.io/docs/building-forms/form-structure/) — Pages, columns and moving blocks

[Publish checks](https://formstep.io/docs/building-forms/publish-checks/) — What blocks a publish, and what only warns

[Use AI chat](https://formstep.io/docs/ai/using-ai/) — Build and change a form by asking

# Form structure

Split a form into pages with a progress bar, put blocks side by side in columns, and move, change, or hide blocks with the block menu.

## Pages

A form starts as one page. Split a longer form into pages, so respondents see a few questions at a time. Pages also let logic skip whole steps.

### Add a page

1. **Insert a Page Break**

   Click Page Break in the Blocks tab, or type /page on the canvas. Everything below it becomes the next page.

2. **Add questions and content**

   Add any questions, text, columns, and media to each page.

3. **Name the page (optional)**

   Open the page break’s block menu and pick Set page name. Named pages are easier to choose in logic jumps.

![The slash menu filtered to page blocks after typing /page, offering Page Break and Thank You Page.](https://formstep.io/docs/images/building-forms/pages-columns.png)

Type /page to add a page break.

Formstep adds **Next** and **Back** buttons, and **Submit** on the last page. **Back** returns to the pages the respondent saw. The [thank-you page](https://formstep.io/docs/building-forms/custom-thank-you/) does not count as a page.

### Progress bar

A form with more than one page shows a thin progress bar at the top. It counts every page in the form, so when logic skips pages, the bar jumps ahead. Skipped pages count as hidden: their questions are not required, and their answers are dropped. See [Conditional logic](https://formstep.io/docs/building-forms/conditional-logic/).

## Columns

Columns put blocks side by side, for example a name and an email on one row.

1. **Insert a Columns block**

   Click 2 Columns in the Blocks tab, or type /columns on the canvas.

2. **Add blocks inside each column**

   Click inside a column and add any block.

3. **Move blocks between columns**

   Drag a block from one column and drop it into another. To add a third column, drag a block to the side of a row.

On phones, columns stack on top of each other.

> **What cannot go in a column**
>
> Logic, Hidden Field, Calculated Field, Page Break, Thank You Page, and Repeating Group only work outside columns.

## Move and change blocks

Drag a block by the handle (⋮⋮) on its left edge to move it up, down, to another page, or into a column. Click the handle to open the block menu. It shows only what fits that block, such as **Turn into**, **Options**, **Validation**, **Mark as required**, **Duplicate**, **Move up**, and **Delete**.

- **Turn into** changes a question to a related type without losing what you typed. Text inputs convert into each other, choice questions (Ranking and picture choice included) into each other, and Star Rating and Linear Scale into each other.

- **Hide** keeps a block in the form but hides it from respondents. Logic can show it later.

- **Create repeating group** wraps the block, or the selected blocks, into a [repeating group](https://formstep.io/docs/building-forms/repeating-groups/).

To change several blocks at once, drag a rectangle around them or shift-click a second block, then use the handle menu. The settings each question has are on [Question settings](https://formstep.io/docs/building-forms/field-configuration/).

## Next steps

[Conditional logic](https://formstep.io/docs/building-forms/conditional-logic/) — Skip pages and show blocks based on answers

[Repeating groups](https://formstep.io/docs/building-forms/repeating-groups/) — Questions respondents fill in again and again

# Question types

The questions you can add to a form, from text and choice to signatures, payments, and scheduling, and when to use each one.

Add a question from the **Blocks** tab on the right of the editor, under **Questions**, or type `/` on the canvas and look under **Form Fields**. Hover a block to preview it. The names below are the labels you see there.

![The Blocks tab of the side panel: a search box, the hint to click a block or drag it into place, and the question tiles under Questions, with the rail of Blocks, Fields, Logic, and Theme beside it.](https://formstep.io/docs/images/building-forms/blocks-tab.png)

The Blocks tab: click a block or drag it onto the canvas.

## Text and input

These questions collect typed answers. Email, Website URL, and Phone Number also check the format as the respondent types.

| Type | What it does | Good for |
| - | - | - |
| Text Input | Single-line text field. Optional minimum and maximum length and a pattern. | Names, job titles, short answers |
| Text Area | Multi-line text field that grows as the respondent types. Same rules as Text Input. | Messages, feedback, cover letters |
| Email | Checks the address format. Can receive the confirmation email. | Contact forms, registrations |
| Website URL | Checks that the answer is a web address. | Portfolios, social profiles |
| Phone Number | Country picker with flags; checks the number for that country. | Support requests, order forms |
| Number | Numbers only, with an optional minimum and maximum. | Ages, quantities, budgets |

Only these six have a [placeholder and a default value](https://formstep.io/docs/building-forms/field-configuration/#common-settings), and you can turn each into any of the others.

## Choice

| Type | What it does | Good for |
| - | - | - |
| Radio Buttons | Vertical list where exactly one option can be picked. | Yes/no questions, plan selection |
| Decision | A ready-made choice of approve, decline, or changes, so an automation can act on the verdict. See [Decisions & approvals](https://formstep.io/docs/requests/decisions-and-approvals/) | Approvals, sign-offs, quote acceptance |
| Checkboxes | Any number of options can be ticked. | Preferences, wishlists, consent |
| Dropdown | Compact picker that opens on click, with search. | Countries, departments, long lists |
| Toggle Switch | A switch whose answer is on or off. | Opt-ins, terms acceptance |
| Single Picture Choice | Image cards with labels; only one can be picked. | Product selection, visual preference |
| Multi Picture Choice | Image cards with labels; several can be picked. | Design preference sets, visual quizzes |

## Rating and scale

The Summary tab shows a chart for each of these.

| Type | What it does | Good for |
| - | - | - |
| Star Rating | A row of stars, 5 by default, up to 10. | Satisfaction scores, reviews |
| Linear Scale | A numbered scale, up to 10. | NPS, agreement scales |
| Ranking | Drag-to-reorder list. Every option is always ranked, so it never blocks submission. | Priority lists, preference order |
| Matrix / Grid | Rows are sub-questions, columns are the answers; one column per row. | Satisfaction surveys, comparison grids |

## Date and time

| Type | What it does | Good for |
| - | - | - |
| Date Picker | Calendar popup with an optional earliest and latest date. | Birthdates, event dates, deadlines |
| Time Picker | Time-of-day input with an optional earliest and latest time. | Meeting times, availability windows |

## Files and documents

| Type | What it does | Good for |
| - | - | - |
| File Upload | Respondents drag in files or browse for them. You set the accepted types, the size cap, and how many files. See [File uploads & signatures](https://formstep.io/docs/building-forms/file-uploads-signatures/) | Resumes, photos, receipts |
| Signature | Respondents draw with a mouse or finger; Formstep stores it as an image. | Contracts, consent forms, waivers |
| Documents | Files you give the respondent to download. A request can add files for its one recipient. See [Documents block](https://formstep.io/docs/building-forms/documents-block/) | Contract drafts, price lists, terms |

Uploaded files, signatures, and the documents you add count toward your workspace's storage. See [Limits & quotas](https://formstep.io/docs/subscription-billing/limits-quotas/).

## Payments and scheduling

| Type | What it does | Good for |
| - | - | - |
| Payment | One-time payment through Stripe when the respondent submits. Logic can change the amount. See [Payment collection](https://formstep.io/docs/building-forms/payment-collection/) | Registration fees, orders, donations |
| Schedule appointment | Book a time from your Cal.com calendar inside the form. See [Cal.com](https://formstep.io/docs/integrations/cal-com/) | Consultations, interviews, demos |

> **Looking for CAPTCHA?**
>
> Bot protection is a form setting, not a question. See [Bot protection](https://formstep.io/docs/sharing-publishing/captcha-bot-protection/).

## Blocks that are not questions

- Text and media: Heading 1 to 3, Bullet List, Numbered List, Table, Image, YouTube Embed, Google Maps Embed, and Embed anything. See [Content blocks](https://formstep.io/docs/building-forms/content-blocks/).

- Layout: 2 Columns and Page Break (see [Form structure](https://formstep.io/docs/building-forms/form-structure/)), Repeating Group (see [Repeating groups](https://formstep.io/docs/building-forms/repeating-groups/)), and Thank You Page (see [Thank-you page & redirect](https://formstep.io/docs/building-forms/custom-thank-you/)).

- Logic and data: [Logic](https://formstep.io/docs/building-forms/conditional-logic/) shows, hides, requires, and jumps. [Hidden fields](https://formstep.io/docs/building-forms/hidden-fields/) and [calculated fields](https://formstep.io/docs/building-forms/calculated-fields/) hold values. [AI Validation](https://formstep.io/docs/building-forms/ai-validation/) checks answers against a rule you write.

## Next steps

[Question settings](https://formstep.io/docs/building-forms/field-configuration/) — The settings and rules each question has

[Content blocks & formatting](https://formstep.io/docs/building-forms/content-blocks/) — Headings, text, images and tables between questions

# Question settings

Labels, placeholders, default values, choice options, and validation rules. Set what every question shares, and fill a default from another field with @.

## Where the settings are

Type a question's title and options on the canvas. For everything else, click the drag handle on the block's left edge and use **Turn into**, **Options**, or **Validation**.

## Common settings

These options appear on every question, whatever its type.

| Setting | What it does |
| - | - |
| Title | The question label respondents see. It supports bold, italic, and links |
| Hide title / Show title | Hides the label but keeps the question. Useful when a paragraph above already says what to enter |
| Mark as required / Mark as optional | New questions are required. A question that logic hides is never required |
| Edit placeholder / Edit default value | The placeholder is a grey hint; the default value is a real answer the respondent can change. Text Input, Text Area, Email, Website URL, Phone Number, and Number have both. Press Cmd + D (Ctrl + D) in the input to switch |

The name automations use for a question, its [field key](https://formstep.io/docs/requests/field-keys/), is set in the editor's **Fields** tab.

> **Adding help text**
>
> To explain a question, type a paragraph above or below it. A hidden title still names the column in exports.

## Choice options

| Setting | Applies to | What it does |
| - | - | - |
| Options list | All choice types | The answers respondents pick from. Click to edit, drag to reorder |
| Randomize order | Radio Buttons, Checkboxes, Dropdown, Ranking | Shuffles the options for each respondent to reduce bias |
| Allow multiple / single selection | Single Picture Choice, Multi Picture Choice | Switches picture choice between one pick and several |

With the cursor in an option, press Cmd + H (Ctrl + H) to hide it, or Cmd + D (Ctrl + D) to select it by default.

For Star Rating and Linear Scale, change the maximum, up to 10, with **Increase** and **Decrease** in the block menu.

## Default values from other fields

A default value can come from a hidden field or a calculated field instead of fixed text. This works on the six inputs that have a default value.

1. Click into the question's input.

2. Type `@` as the first character. A menu lists your hidden and calculated fields; keep typing to filter.

3. Pick a field. The input switches to default value mode on its own and shows the field as a chip, for example @recipient.

To remove it, click the **×** on the chip. To type a literal `@`, press `Esc` when the menu opens.

For example, a link ending in `?recipient=Jeff` fills a question that uses the `recipient` hidden field with “Jeff”. The respondent can change it. If the hidden field is empty, so is the question. A calculated field fills the question with its first value only; to show a value that keeps updating, use an [@ mention](https://formstep.io/docs/building-forms/answer-piping/). See [Hidden fields](https://formstep.io/docs/building-forms/hidden-fields/) and [Calculated fields](https://formstep.io/docs/building-forms/calculated-fields/).

## Validation rules

Formstep checks answers as the respondent types, shows errors next to the question, and blocks submit until they are fixed. Email, Website URL, Phone Number, Number, Date Picker, and Time Picker check their format on their own.

To add a rule, open the block menu and pick **Validation**. The rules depend on the question type:

| Rule | Applies to | Effect |
| - | - | - |
| Min length / Max length | Text Input, Text Area, Website URL | Number of characters, not counting spaces at the ends |
| Regex | Text Input, Text Area, Website URL, Email | The answer must match a pattern |
| Minimum / Maximum | Number, Star Rating, Linear Scale | Limits the range |
| Step | Number | The answer must be a multiple of the step; 1 means whole numbers only |
| Earliest date / Latest date | Date Picker | Limits the dates |
| Earliest time / Latest time | Time Picker | Limits the times |
| Min selections / Max selections | Checkboxes, picture choice | How many options may be ticked |
| Require all rows / Min answered rows | Matrix / Grid | How many rows must have an answer |
| Min files, Max files, Max size, Accepted types | File Upload | See [File uploads & signatures](https://formstep.io/docs/building-forms/file-uploads-signatures/) |
| Require email verification | Email (Business) | See [Respondent email verification](https://formstep.io/docs/building-forms/email-verification/) |

Other question types have no rules besides required.

A regex pattern describes the shape of an answer. For example, `^\d{5}$` accepts exactly five digits, such as a US ZIP code. An answer that does not match shows “Invalid value”, so say the expected format near the question. A pattern checks the format only: it cannot tell whether a card number or ID is real.

## Next steps

[Question types](https://formstep.io/docs/building-forms/field-types/) — Every question you can add

[Conditional logic](https://formstep.io/docs/building-forms/conditional-logic/) — Show, hide or require questions based on answers

# Content blocks & formatting

Add headings, text, images, videos, maps, embeds, and tables between your questions, format text with the toolbar, and show earlier answers with @.

## Available blocks

Add a block from the **Blocks** tab, or type `/` on the canvas. To add a paragraph, start typing.

| Block | Use it for |
| - | - |
| Heading 1 / 2 / 3 | Section titles and visual hierarchy |
| Paragraph | Plain text: instructions, intros, disclaimers |
| Bullet List / Numbered List | Lists, with formatting in each item |
| Image | Logos, illustrations, and photos from your device. The block menu adds a caption, aligns, or replaces it |
| Table | Prices, comparisons, or a schedule. See [Tables](#tables) |
| 2 Columns | Blocks side by side. See [Form structure](https://formstep.io/docs/building-forms/form-structure/#columns) |

## Embeds

Add an embed block, then open its block menu to set what it shows.

| Block | How you set it | Use it for |
| - | - | - |
| YouTube Embed | Set URL: paste a YouTube URL or video ID | Explainer videos, tutorials, demos |
| Google Maps Embed | Set location: enter an address or place name | Office, event venue, delivery area |
| Embed anything | Set embed code: paste an embed snippet | Loom, Spotify, or any page that can be embedded |

Large media makes the form slower to load. Add a video or map only when it helps the respondent.

## Text formatting

![Selected text on the canvas with the floating formatting toolbar above it](https://formstep.io/docs/images/building-forms/format-toolbar.png)

Select text to see the formatting toolbar.

Select text in a paragraph, heading, list item, or table cell to see the formatting toolbar. It has bold, italic, underline, strikethrough, inline code, equations, links, font, font size, and a highlight or underline color. The keyboard shortcuts are on [Understanding the editor](https://formstep.io/docs/building-forms/understanding-the-editor/#shortcuts).

## Tables

A **Table** shows information such as prices or a schedule, and respondents can only read it. Click a cell to edit it. Hover a row or column and click its grip to add, duplicate, or delete a row or column. Drag the grip to move a row or column, and drag a border to resize. Cells take the same formatting as paragraphs, including `@` mentions.

## Earlier answers in your text

Type `@` in text to show an earlier answer. For example, “Thanks, @First name” shows the respondent's name. See [@ mentions](https://formstep.io/docs/building-forms/answer-piping/).

## Next steps

[@ mentions](https://formstep.io/docs/building-forms/answer-piping/) — Show earlier answers in your text

[Form structure](https://formstep.io/docs/building-forms/form-structure/) — Pages, columns and moving blocks

# File uploads & signatures

Collect files and drawn signatures from respondents. Set accepted types, size caps, and file counts, and see how uploads count toward your storage.

## File upload

Add **File Upload** from the Blocks tab, or type `/` and pick it. To set its rules, click the drag handle and open **Validation**:

| Rule | What it does |
| - | - |
| Min files | How many files the respondent must attach. |
| Max files | The most files allowed. Set it to 1 for a single file. |
| Max size (MB) | The largest size per file. A single file can never be larger than 1 GB. |
| Accepted types | Pick the file types you accept, such as PDF, Word, Excel, images, video, audio, or ZIP. Pick several to allow several. Leave it empty to accept any file. |

The question shows respondents these rules, such as “Max 5 MB”. Open a submission in the [inbox](https://formstep.io/docs/submissions-analytics/submission-inbox/) to view or download its files. In logic, use **has file** and **has no file**.

> **Uploads count toward your storage**
>
> Every file, signatures included, counts toward the workspace owner's storage. When it is full, the form refuses uploads. Set a Max size if you collect large files. See [Limits & quotas](https://formstep.io/docs/subscription-billing/limits-quotas/).

## Signatures

A **Signature** question lets respondents draw a signature with a mouse or a finger. Formstep stores it as an image. In logic, use **is signed** and **is not signed**.

Respondents cannot change what they signed: a form with a signature does not allow [edit after submit](https://formstep.io/docs/submissions-analytics/edit-after-submit/).

## Next steps

[Documents block](https://formstep.io/docs/building-forms/documents-block/) — Give respondents files to read

[Submission inbox](https://formstep.io/docs/submissions-analytics/submission-inbox/) — View and download each submission's files

# Documents block

Hand files to the respondent (a contract draft, a price list, a how-to) as a download list inside the form.

## What it is

A Documents block is a list of files you upload, with a title. Every respondent sees the same list, and can open or download each file. The block asks no question. To collect files from respondents instead, use a [File Upload](https://formstep.io/docs/building-forms/file-uploads-signatures/) question.

## Add one

1. **Insert the block**

   Click Documents in the Blocks tab, or type / and pick it. Give it a title such as "Please read before you answer".

2. **Add your files**

   Click **Add document** or drop files onto the block.

3. **Name each row**

   Click a name to change it, for example "Lease contract draft" instead of "lease\_v3\_final.pdf".

4. **Publish**

   The files go live with the form.

| What | Limit |
| - | - |
| File types | PDF and images |
| Per document | 25 MB |
| Per block | 100 MB, and 20 documents shown |

> **Office documents**
>
> Word, Excel and PowerPoint files are not accepted yet. Export them as PDF first.

## Ask for confirmation

To make respondents confirm they read the files, add a required **Toggle Switch** below the block, titled “I have read the lease contract”. For several statements, use Checkboxes. For a signature, add a Signature question.

## Check answers against the documents

An [AI Validation](https://formstep.io/docs/building-forms/ai-validation/) below the block can read its documents and compare answers with them, as in “@Total amount matches the total on @Your invoice.” It reads the documents this respondent is shown, including the ones a request added.

## In submissions and exports

Each submission records which documents the respondent was shown. You see the list in the submission, in exports, and in the PDF.

## Different files for each recipient

A [request](https://formstep.io/docs/requests/overview/) created by an automation can add files for its one recipient, up to 100 MB. They show below your files, marked “For you”. Developers: see [Documents for one recipient](https://formstep.io/docs/developers/requests-api/#documents).

## Next steps

[AI Validation](https://formstep.io/docs/building-forms/ai-validation/) — Check answers against the documents

[File uploads & signatures](https://formstep.io/docs/building-forms/file-uploads-signatures/) — Collect files and signatures from respondents

# Payment collection

Accept one-time payments from respondents via Stripe. Connect your account, set a price or change it with logic, and find each payment with its submission.

## Connect Stripe

Connect a Stripe account once, and every form in the workspace can charge through it. A person has to do this; an AI agent or workflow cannot.

1. **Open Integrations**

   In the sidebar, open **Integrations** and find **Stripe** under Payments & scheduling. Or click **Connect** on a Payment question.

2. **Click Connect**

   Stripe opens to approve the connection. You can create a Stripe account there if you have none.

3. **Complete Stripe onboarding**

   Stripe asks for your identity, bank account, and business details, then sends you back to Formstep.

Payments go straight to your Stripe account, and receipts show your business name. You pay Stripe's usual fees; Formstep adds none. Card details never pass through Formstep.

The badge on the Payment question shows whether the account can take payments. Connected means it can. Verifying means Stripe is reviewing the account, which usually needs nothing from you. For Setup incomplete or Restricted, open your Stripe Dashboard; for Disconnected, reconnect.

### Several Stripe accounts

The first account is the workspace default. To use another account, connect it too, then click **Make default** (owner only), or pick it under **Stripe account** on one form's Payment question.

Disconnecting an account cancels open payments on its forms, and they stop taking payments until they have another account. Completed payments stay in your Stripe account.

## Set the price

Pick a currency and type an amount on the Payment question. Stripe has a minimum per currency, such as $0.50 for USD and EUR or £0.30 for GBP. The Payment question takes one-time charges only, not subscriptions.

Supported currencies: USD, EUR, GBP, JPY, CAD, AUD, CHF, SEK, NOK, DKK, NZD, SGD, HKD, AED, TRY.

> **Publishing waits for a complete setup**
>
> A form with a Payment question publishes only when each one has a currency and a valid amount, and the Stripe account can take payments.

## Change the price with logic

To change the price based on answers, add a logic rule with the **Set payment amount** action. It can **set** the price, or **increase** or **decrease** it, by a fixed number or by a [calculated field](https://formstep.io/docs/building-forms/calculated-fields/). Rules start from the price on the question and run top to bottom.

Example: the question says $50. A “Rush delivery” switch increases it by 15, and a “Member” switch decreases it by 5. With both on, the respondent pays $60.

Logic can also read a Payment question: **amount equals**, **is greater than**, **is less than**, **is completed**, and **is not completed**.

## What respondents see

The respondent clicks **Complete Payment**, pays in Stripe Checkout, and comes back to submit the form. They cannot change the amount. If a payment fails, **Retry payment** opens Checkout again.

After payment, the answers that set the price are locked, so the respondent cannot change what they paid for. A form with a Payment question does not allow [edit after submit](https://formstep.io/docs/submissions-analytics/edit-after-submit/).

## Find payments

Each payment shows with its submission in the List view on the form's Submissions tab: its status (pending, paid, failed, or canceled), the amount, and a link to the Stripe receipt. Emails, PDFs, exports, and integrations include the payment too.

Handle

[refunds](https://docs.stripe.com/refunds)

and

[disputes](https://docs.stripe.com/disputes)

in your Stripe Dashboard: you are the merchant. The submission then shows Refunded, Partially refunded, or Disputed. Formstep may refund payments in cases of abuse.

## Next steps

[Conditional logic](https://formstep.io/docs/building-forms/conditional-logic/) — The rules that set the payment amount

[Calculated fields](https://formstep.io/docs/building-forms/calculated-fields/) — Work out a total to charge

# Respondent email verification

On the Business plan, respondents confirm their email address with a 6-digit code before they can submit, so every address you collect is real and reachable.

This needs the Business plan. [Compare plans](https://formstep.io/pricing/)

## What it does

Turn it on for an **Email** question, and the respondent confirms the address with a 6-digit code that Formstep emails them. They cannot submit until the code is right, so you do not receive fake or mistyped addresses.

## Turn it on

1. **Open the email question's block menu**

   Click the drag handle next to the Email question and open **Validation**.

2. **Turn on Require email verification**

   The switch is under **Verification**.

3. **Publish**

   The published form now asks respondents to verify before they can submit.

It is not available inside [repeating groups](https://formstep.io/docs/building-forms/repeating-groups/).

## What respondents see

1. When the respondent types a correctly formatted address, a **Verify email** action appears under the input.

2. Formstep emails a 6-digit code to that address. The code expires after 10 minutes.

3. The respondent enters the code and the question shows a green Verified pill.

**Resend** works after 30 seconds. After five wrong codes, the respondent has to ask for a new one. Temporary email addresses are refused. Codes come from your [custom email domain](https://formstep.io/docs/branding-domains/custom-domains/#custom-email-domains) if you set one.

If two email questions hold the same address, one code covers both. A changed address needs a new code. A verified address cannot be changed later, even where [edit after submit](https://formstep.io/docs/submissions-analytics/edit-after-submit/) is on.

> **Verifying an answer vs. requiring sign-in**
>
> This rule verifies an email _answer_. To require respondents to sign in before they can open the form at all, use the [authentication gate](https://formstep.io/docs/sharing-publishing/authentication-gate/) instead.

## Next steps

[Authentication gate](https://formstep.io/docs/sharing-publishing/authentication-gate/) — Ask people to sign in before they open the form

[Validation rules](https://formstep.io/docs/building-forms/field-configuration/#validation-rules) — Every rule a question can check

# Repeating groups

Let a respondent fill in the same questions as many times as they need, such as one name and age per guest, and see where the answers show up.

## What a repeating group is

A repeating group holds one or more questions. Respondents add as many items as they need, each with its own answers. Use it for event guests (a name and age per person), order lines (product, quantity, and price), team contacts, or work history.

## Add a repeating group

1. **Insert the group**

   Click **Repeating Group** in the Blocks tab, or type / and pick it.

2. **Name the group**

   Give it a title, such as "Additional guests".

3. **Add questions inside**

   Add questions inside the group, such as Text Input, Number, or Dropdown.

4. **Edit the add-button label**

   Change "Add one more" to fit, such as "Add another guest".

To group questions you already have, select them and pick **Create repeating group** in the block menu. **Remove grouping** undoes it.

A group cannot go inside another group or a column. Payment, Schedule appointment, Documents, and email verification do not work inside a group.

## What respondents see

The first item shows like any other part of the form. With two or more, each item becomes a numbered card with an X to remove it. A group holds up to 100 items. Required questions are required in every item.

On a [request](https://formstep.io/docs/requests/overview/) that locks a question in the group, the recipient cannot add or remove items.

## Groups and conditional logic

[Logic](https://formstep.io/docs/building-forms/conditional-logic/) can show or hide the whole group, but cannot read or target the questions inside it.

## Where the answers show up

- In the [submission inbox](https://formstep.io/docs/submissions-analytics/submission-inbox/), as numbered cards, one per item.

- In the [question summary](https://formstep.io/docs/submissions-analytics/question-summary/), as one card per group, with counts per question.

- In [exports](https://formstep.io/docs/submissions-analytics/exports/), as one column for the whole group, with items separated by |.

## Use group answers in text

An @ mention of a question in the group lists its answers from every item. A mention of the whole group lists all items. See [@ mentions](https://formstep.io/docs/building-forms/answer-piping/#referencing-repeating-groups).

## Next steps

[Mention a repeating group](https://formstep.io/docs/building-forms/answer-piping/#referencing-repeating-groups) — Show a group's answers in your text

[Conditional logic](https://formstep.io/docs/building-forms/conditional-logic/) — Show or hide the whole group

# Conditional logic

Show, hide, require, and jump to pages based on answers, or calculate values and stop a submission. Write a rule, combine conditions, and test it in Preview.

## What logic can do

A logic block holds one or more rules. Each rule reads **When** these conditions are true, **Do** these actions.

| Action | What it does |
| - | - |
| Show / Hide | Shows or hides any block: a question, a paragraph, an image, or one option of a choice question. |
| Make required / Make optional | Requires a question on some paths only, or relaxes it on others. |
| Set next page | Skips to a page, so different answers lead down different paths. |
| Calculate value | Works out a total, score, or price in a [calculated field](https://formstep.io/docs/building-forms/calculated-fields/). |
| Set payment amount | Sets, raises, or lowers the price of a [Payment question](https://formstep.io/docs/building-forms/payment-collection/#dynamic-pricing). |
| Prevent navigation to next page | Stops the respondent from going on, with an optional message saying why. |
| Prevent form submission | Stops submission until conditions are met, such as terms accepted, with an optional message saying why. |

## Add a logic block

A logic block sits on the canvas between questions, like any other block.

1. **Add a Logic block**

   Click **Logic** in the Blocks tab, or type `/logic` on the canvas.

2. **Set the conditions**

   Pick a question, an operator, and a value. **Add condition** adds another row.

3. **Choose actions**

   Pick an action, such as Show or Set next page, and what it acts on: a question, block, option, or page.

4. **Add more rules (optional)**

   One logic block can hold several rules, each with its own conditions and actions.

To show a block only sometimes, hide it with **Hide** in its block menu, then add a rule that shows it.

The **Logic** tab of the side panel lists every rule in plain words, such as _When Plan is Pro, show VAT number_. Click a rule to jump to it. **Needs attention** shows rules that point at a deleted question.

## Conditions

A condition can read questions, hidden fields, calculated fields, and the respondent's language. With two or more conditions, click the **And** or **Or** pill to switch: with **And** all must be true, with **Or** one is enough.

**Add a set of conditions** adds a group with its own And/Or, for rules like “plan is Pro _and_ (country is Norway _or_ Sweden)”. A set cannot hold another set.

![A logic block whose When section joins Plan is Pro and a set headed Any of these, holding Country is Norway and Country is Sweden, with an And pill on the outer bracket and an Or pill inside the set, and a Do action that shows the VAT number question.](https://formstep.io/docs/images/building-forms/logic-block.png)

Plan is Pro and (country is Norway or Sweden): an And rule with an Or set inside.

### Operators

The operators depend on the question. The main ones are below; most also have an opposite, such as **is not empty**. Text comparisons ignore capital letters and spaces at either end.

- Text, email, web address, and phone: is, is not, contains, starts with, ends with, is empty.

- Numbers, ratings, and scales: is, is greater than, is less than (or equal to), is between, is empty.

- Dates and times: is, is before, is after, is between.

- Radio Buttons and Dropdown: is, is not. Checkboxes and picture choice: has checked any of, all of, or exactly.

- Others: Toggle Switch is on or off, Signature is signed, File Upload has file, Payment is completed, Ranking option is ranked first, Matrix row answer is.

Logic can show or hide **Schedule appointment** and **Documents**, but cannot read them. See [Cal.com scheduling with logic](https://formstep.io/docs/integrations/cal-com/#logic).

> **A hidden question has no value**
>
> When logic hides a question, its answer is ignored in conditions, calculations, and the payment amount, and is not saved. The same goes for questions on a skipped page. A hidden question is never required. Hidden _fields_ always keep their value.

## When rules disagree

When two matching rules disagree, for example one shows a block and another hides it, the first rule in the form wins, and the editor flags the rule that never applies. To show a block for several answers, one rule with conditions joined by **Or** is easier to read than several rules.

## Common patterns

### Show a follow-up question

After a 1 to 5 Star Rating, a rule says: when rating **is less than or equal to** 3, **Show** “What could we improve?”.

### Branch to different pages

An event registration form asks: “Are you attending in person or remotely?” Three rules follow:

- When attendance **is** “In person”, **Set next page** “Venue details”.

- When attendance **is** “Remote”, **Set next page** “Streaming setup”.

- When arrival time **is not empty**, **Set next page** “Confirmation”. Arrival time is a required question on “Venue details”.

A jump happens when the respondent clicks Next on the page with the question it reads. The third rule lets in-person attendees skip “Streaming setup”, so both paths end on “Confirmation”.

### Calculate a score and branch on it

Three Star Ratings add up into a calculated field, “Lead score”, with **Calculate value**. A second rule: when Lead score **is greater than** 12, **Set next page** “Priority follow-up”.

### Stop submission below a total

When Order total **is less than** 10, **Prevent form submission**. Type the reason in **Message shown to respondent**, such as “Your order must total at least 10”, so they know what to change.

> **Test logic with Preview**
>
> **Preview** runs your logic. Fill in the form there to check every branch before you publish.

## Next steps

[Calculated fields](https://formstep.io/docs/building-forms/calculated-fields/) — Work out a total, score or price

[Form structure](https://formstep.io/docs/building-forms/form-structure/) — Split a form into pages to jump between

# Hidden fields

Pass data the respondent never sees into a form, from the address of a share link or the context of a request, and save it with each submission.

## What they are for

- Track where answers come from, such as an email campaign or a social media post.

- Link answers to your systems with a contact, deal, or order ID.

- Change the form with [logic](https://formstep.io/docs/building-forms/conditional-logic/), for example show extra questions for `plan=enterprise`.

- Check answers against what you know with [AI Validation](https://formstep.io/docs/building-forms/ai-validation/), for example an order number an uploaded invoice must mention.

## Add a hidden field

Click **Hidden Field** in the Blocks tab, or type `/` and pick it. It cannot go inside a column or a repeating group. Then set:

- **Field type**: text (the default) or number.

- **Parameter name**: the URL parameter that fills it, such as `utm_source` or `contact_id`. It is also the field's [field key](https://formstep.io/docs/requests/field-keys/).

## Fill it from the URL

When someone opens a share link with a matching parameter, the hidden field takes its value:

```
https://form.formstep.io/abc123?utm_source=newsletter&contact_id=12345
```

- Values are read once, when the form opens.

- A number hidden field ignores values that are not numbers, so `?score=abc` leaves it empty.

- To add parameters to a share link without editing the URL, use the link's [Query parameters](https://formstep.io/docs/sharing-publishing/sharing-embedding/#query-parameters). UTM tags and campaign tracking are explained there too.

To show a URL value in a question the respondent can edit, such as their name, see [Default values from other fields](https://formstep.io/docs/building-forms/field-configuration/#default-values).

## On a request

Request links ignore URL parameters, so the recipient cannot change your values. A request fills hidden fields from its context, and can fill visible questions directly. See [Prefill, locked fields and hidden fields](https://formstep.io/docs/requests/creating-requests/#three-buckets).

## Where values show up

Hidden fields have their own columns in the Submissions table, marked with an eye-slash icon. They also appear in exports and integrations.

## Next steps

[Query parameters](https://formstep.io/docs/sharing-publishing/sharing-embedding/#query-parameters) — Add values to a share link without editing the URL

[Prefill, locked fields and hidden fields](https://formstep.io/docs/requests/creating-requests/#three-buckets) — Fill hidden fields from a request

# Calculated fields

Work out scores, totals, and text from form answers. Give a calculated field a starting value, then change it with logic rules as respondents answer.

## How it works

A calculated field holds a number or a text. It starts at an initial value, and [logic rules](https://formstep.io/docs/building-forms/conditional-logic/) with the **Calculate value** action change it, for example add 10 when an answer is Yes.

## Add a calculated field

Click **Calculated Field** in the Blocks tab, or type `/` and pick it. It cannot go inside a column or a repeating group. Then set:

- **Field type**: number or text.

- **Name**: used in logic and @ mentions, and as its field key in integrations.

- **Initial value**: a value such as `0`, or a [hidden field](https://formstep.io/docs/building-forms/hidden-fields/) of the same type.

## Operations

| Field type | Operations |
| - | - |
| Number | add, subtract, multiply, divide, set to, reset to initial |
| Text | set to, append text, prepend text, reset to initial |

Each operation takes a fixed value, such as 10, or the value of another question or field. Answers to questions hidden by logic do not count. Every matching rule runs, top to bottom, on the running value.

## Examples

For a quiz score, “Total score” starts at 0. One rule adds 10 when Q1 is “Yes”, and another adds the value of Q2 when Q2 is greater than 5.

For a price, one rule sets Price to 10 when size is “Small”, and another sets it to 20 when size is “Large”. A last rule with no conditions multiplies Price by the quantity, since a rule with no conditions always runs. To charge this price, see [Change the price with logic](https://formstep.io/docs/building-forms/payment-collection/#dynamic-pricing).

For a full name, a text field appends @First name, a space, and @Last name.

Logic can also read a calculated field, for example “when Total is greater than 50, go to the Premium page”. To show the value to the respondent, use an [@ mention](https://formstep.io/docs/building-forms/answer-piping/). To start a question with it, see [Default values from other fields](https://formstep.io/docs/building-forms/field-configuration/#default-values).

## Next steps

[Conditional logic](https://formstep.io/docs/building-forms/conditional-logic/) — The rules that change a calculated field

[Change the price with logic](https://formstep.io/docs/building-forms/payment-collection/#dynamic-pricing) — Charge the price your form works out

# @ mentions

Type @ to show an answer somewhere else in your form, from question titles to the thank-you page and emails. Each respondent sees their own values.

## How it works

Type `@` and pick a question or field. It shows as a chip, such as @First name, and the respondent sees their answer in its place. To type a plain `@`, press `Esc`.

## Where mentions work

- Question titles. A question cannot mention its own answer.
- Paragraphs, headings, list items, table cells, links, and image captions
- The thank-you page
- Translations of all of these, where the mention carries into each language
- Email subjects and bodies: notifications, confirmations, reminders, and the request invitation
- Messages and field mappings in integrations

Option labels can mention only hidden fields, calculated fields, and metadata. Button labels and repeating group titles take no mentions.

A mention shows a value as text. To put a value inside a question, where the respondent can edit it, see [Default values from other fields](https://formstep.io/docs/building-forms/field-configuration/#default-values).

## What you can mention

The @ menu lists your questions, [hidden fields](https://formstep.io/docs/building-forms/hidden-fields/), [calculated fields](https://formstep.io/docs/building-forms/calculated-fields/), repeating groups, and metadata about the submission. The metadata you will use most:

| Variable | What it shows |
| - | - |
| 4 or 6 Digit PIN, 4 or 6 Char Code | A number or code unique to the submission, in the form and in emails |
| Form Name | The form’s name, in emails |
| Submitted At | When the response was submitted, in emails |
| PDF Link | A link to the submission PDF, in emails |

> **PINs as reference numbers**
>
> Put a **6 Digit PIN** in the confirmation email as a reference number. You can search for it in the submissions table.

## Mention a repeating group

A [repeating group](https://formstep.io/docs/building-forms/repeating-groups/) can have many items:

- A mention of one question in the group joins its answers from every item with a middle dot (·). The Name question of three guests shows “Jane Appleseed · Marcus Lee · Priya Patel”.

- A mention of the whole group shows every item, with commas between items. A group with Name and Age shows “Jane Appleseed · 34, Marcus Lee · 29”.

## Delete a mentioned question

A mention of a deleted question or field blocks publishing. The issue indicator lists each one, in the form, emails, [translations](https://formstep.io/docs/building-forms/translating-form-content/#field-reference-checks), and integrations. Remove the chip and insert the right one. A hidden or calculated field added back under the same name reconnects on its own.

## Next steps

[Hidden fields](https://formstep.io/docs/building-forms/hidden-fields/) — Pass in data the respondent never sees

[Calculated fields](https://formstep.io/docs/building-forms/calculated-fields/) — Work out a score, a total or a full name

# AI Validation

Check answers and uploaded files against a rule you write in one sentence. Respondents see a note when something does not fit, and you see every result.

This needs the Pro plan or higher. [Compare plans](https://formstep.io/pricing/)

## What it does

An AI Validation is a block under the questions it checks. You write a rule in one sentence and name the answers it reads with `@`. It catches mistakes a normal validation rule cannot: a document that is not what you asked for, two answers that contradict each other, or an answer that is filled in but makes no sense.

- The respondent sees a note under the question when something does not fit. They can fix the answer or submit anyway, because a check only warns and never blocks the submission.

- You see the result on every submission: Passed, or Needs review with a short reason written for you. Automations get the same result.

## What you can check

| What you want | A rule that checks it |
| - | - |
| The right document | @Invoice is an invoice for order @order\_number, dated in 2026. |
| Names that match | The name on @Passport matches @Full name, and the passport has not expired. |
| Two answers that agree | @Work email uses the same domain as @Company website. |
| A plausible answer | @Company website is the website of a real company, not a social media profile. |
| The right kind of file | @Bank statement is a bank statement from the last three months, not a screenshot of an app. |
| Enough detail | @Damage description says what was damaged, where and when. |
| Answers that match a document you sent | @Total amount matches the total on @Your invoice. |

A rule can name a [hidden field](https://formstep.io/docs/building-forms/hidden-fields/) as the value to compare against, such as an order number or a customer name your system already knows. In the first example, `@order_number` comes from the request, and the respondent never sees it.

A rule can also name a [Documents block](https://formstep.io/docs/building-forms/documents-block/) above it, to check answers against the files you hand the respondent, including the ones a request adds. In the last example, the check reads the invoice in the block and compares it with the total the respondent entered. A rule that names a Documents block still needs at least one answer, and it does not run while the block shows no document.

## Add an AI Validation

1. **Insert the block**

   Under the question you want to check, click **AI Validation** in the Blocks tab, or type `/ai`. The block starts out naming the question above it. It cannot go inside a column or a repeating group.

2. **Write the rule**

   Write one sentence that says what a good answer looks like. Type @ to name questions and Documents blocks above the block, and hidden fields. The check reads only what you name.

3. **Try it in Preview**

   Open Preview and answer as a respondent would. Preview runs the real check, so you see the note respondents will see.

![A Company website question in the editor with an AI Validation block under it reading: Company website is the website of a real company, not a social media profile.](https://formstep.io/docs/images/building-forms/ai-validation-block.png)

An AI Validation under the question it checks. Respondents see only the note it shows.

![Typing @ inside an AI Validation opens a picker listing the questions above it under Answers and the hidden fields under Hidden Fields.](https://formstep.io/docs/images/building-forms/ai-validation-mention.png)

Type @ to name what the rule reads: questions and Documents blocks above the block, and hidden fields.

> **A rule that names nothing never runs**
>
> If the sentence names no answer the check can read, with no `@` or only questions below the block, the block says so: “Name a question or file above with @, or this check never runs.”

## Write a good rule

- Check one idea per block. To check two things, add two blocks. Each gets its own note and its own result.

- Be concrete about names, numbers, dates and document types: “dated in 2026” checks better than “recent”.

- Name every answer the rule needs. The check reads only the answers you name with `@`.

- Write in any language. The respondent's note follows the language the form is shown in.

## What respondents see

The check runs once the respondent has filled in the answers it names and moved on. “Checking…” shows while it runs. Next and Submit wait up to 8 seconds for it.

![A Company website answer of instagram.com/maersk with a note under it saying a company website is needed rather than an Instagram profile, marked Checked automatically.](https://formstep.io/docs/images/building-forms/ai-validation-note.png)

The note sits under the answer it is about, written for the respondent in the form's language.

- The note is written for the respondent, in the language the form is shown in. It says what is missing and how to fix it. It never mentions AI or your rule, and never shows a hidden field's value. It says “the order number we have for you” instead.

- When the answers fit, a quiet “Looks good.” shows instead.

- Changing an answer checks again. The same answers are never checked, or charged for, twice: coming back to a saved draft shows the earlier result.

- A check that cannot run shows nothing. Without a plan or enough credits, or when the check fails, the respondent carries on as if there were no check.

## Results on each submission

Every submission records each check as it stood on the submitted answers. On the [request page](https://formstep.io/docs/requests/managing-requests/#request-page), and in a submission's details on the Submissions tab, each check sits right after the last answer it read, with an icon for its result:

| Result | What it means |
| - | - |
| Passed (green check) | The answers fit the rule. |
| Needs review (amber warning) | Something did not fit. The reason, written for you in the form’s language, says what. |
| Not checked (dashed circle) | The check did not run on these answers: no plan or credits, it was still running at submit, an answer it names was empty, or a Documents block it names had no document it could read. |

![A request's answers: Company website passed its AI Validation, and the Work email check needs review because the email uses gmail.com instead of the company's domain.](https://formstep.io/docs/images/requests/request-page-ai-validation.png)

Each check right after the answers it read: what it found, then the rule it checked.

An automation gets the same results with the answers, so it can send flagged submissions to a person to review. Developers: see [Webhooks reference](https://formstep.io/docs/developers/webhooks-reference/#payload).

## Files it can read

A check reads PDF, Word, Excel, CSV, plain text, Markdown and HTML documents, and JPEG, PNG, GIF and WebP images: up to five files per check, each up to 4.5 MB. When a file cannot be read (another type, too large, or damaged), the note asks the respondent for a clearer photo or the original file.

Documents from a Documents block count toward the same limits. When the check cannot read one of them, it does not run, because the respondent cannot fix a file you sent. The submission records Not checked instead.

## Plans and AI credits

AI Validation is on the Pro and Business plans. On Free you can add the block, but checks do not run. Each check uses the workspace owner's AI credits, including the checks any member runs in Preview.

| A check that reads | Credits it uses |
| - | - |
| Text answers | Under 1 |
| A photo, or a one-page PDF | \~1 |
| Each further PDF page | \~0.4 |

When the owner's credits run out, checks stop until the owner adds more. Respondents notice nothing, the submission records Not checked, and the editor and an email tell the owner. See [AI credits & usage](https://formstep.io/docs/ai/ai-credits-usage/).

## What is sent, and what is kept

A check sends your rule, the answers it names and the files it reads to the AI model, and nothing else from the form. The model only returns a result and a note. It cannot act on anything written in an answer or a file, so the worst a planted instruction can do is change a check's result, which you see on the submission.

The result is stored with the submission. The note a respondent saw is kept with their link for up to 30 days, so the same answers are not checked again, and is deleted with the submission, the request or the form.

## Next steps

[Documents block](https://formstep.io/docs/building-forms/documents-block/) — Give respondents files a check can compare answers with

[Hidden fields](https://formstep.io/docs/building-forms/hidden-fields/) — Values the respondent never sees, such as an order number

[AI credits & usage](https://formstep.io/docs/ai/ai-credits-usage/) — What a check costs and how to buy credits

[The Requests page](https://formstep.io/docs/requests/managing-requests/) — See each check's result on a request

# Thank-you page & redirect

Customize the thank-you page respondents see after they submit, with text, links, images, and their answers, or send them to your own web page.

## Add a thank-you page

Without one, respondents see “Thanks for your response!” To make your own, click **Thank You Page** in the Blocks tab, or type `/` and pick it. A green **Thank You Page** divider appears at the end of the form, and everything below it is the thank-you page. To go back to the default, click the trash icon on the divider.

A form has one thank-you page, and it is always last. It can hold:

- Headings, paragraphs, lists, and tables

- Images, YouTube videos, Google Maps, and embeds

- Links, including link buttons to your site, store, or calendar

- Columns, to lay any of the above out side by side

- Earlier answers: type `@` to mention one, as in “Thanks @name, we'll review your application”. See [@ mentions](https://formstep.io/docs/building-forms/answer-piping/).

Questions, logic, and page breaks cannot go on it. The thank-you page is translated with the rest of the form in **Translate**. See [Multilingual forms](https://formstep.io/docs/building-forms/translating-form-content/).

> **Show the next step**
>
> Respondents are still paying attention right after they submit, so use the thank-you page to point them to the next step, such as booking a call or reading a confirmation.

## Send respondents to your own page

1. Open **Settings**, then the **Submissions** tab.

2. Under **After someone submits**, pick **Go to a web page**.

3. Type the address in **Web page**. `yoursite.com/welcome` becomes `https://yoursite.com/welcome`.

After submitting, the respondent sees “Redirecting in 3 seconds…”, and then the browser opens your page. If you built a thank-you page, it shows during those 3 seconds.

Under **After someone submits** you pick one option: go to a web page, offer another response, or [show live results](https://formstep.io/docs/building-forms/live-results/). A form that redirects shows no **Submit again** button and no results.

### Pass answers to your page

Under **Redirect URL query parameters**, add a row per parameter: a name, and the question or field whose value it sends. You can send answers, hidden fields, calculated fields, and details such as the submission ID. A preview shows the finished address:

```
https://yoursite.com/welcome?email=alice%40example.com&plan=pro
```

Use it to greet respondents by name on your page, or to fill in a form on your site. Empty answers are left out. A question inside a [repeating group](https://formstep.io/docs/building-forms/repeating-groups/) sends one parameter per item: `?guest=Alice&guest=Bob`.

## Next steps

[Live results](https://formstep.io/docs/building-forms/live-results/) — Show how everyone answered after a submit

[@ mentions](https://formstep.io/docs/building-forms/answer-piping/) — Greet respondents with their own answers

# Live results

Show respondents the answer counts after they submit, put the results on a big screen, and add an AI summary of what they mean.

## Turn it on

1. Open **Settings**, then the **Submissions** tab.

2. Under **After someone submits**, pick **Show live results**. This replaces the other choices there, such as going to a web page.

3. Save. The next respondent sees the results after they submit.

The **Live results link** under the choices is the address of the results page. Click it to copy it. Publish the form first: the link appears once the form has a share link.

![After someone submits with four cards and Show live results picked; under them the Live results link, then the AI summary switch with what the summary is based on and a link to the Summary tab](https://formstep.io/docs/images/building-forms/settings-live-results.png)

Settings, Submissions tab, with Show live results picked and the AI summary shown.

## What respondents see

After they submit, respondents see the thank-you page with “Showing results in 3 seconds…”, then the results. Someone who comes back to the form after submitting goes straight to the results. If the form lets people [change their answers](https://formstep.io/docs/submissions-analytics/edit-after-submit/), the **Edit your response** button stays under the results.

![Live results under the form's cover and logo: the AI summary card with a headline and three points, then a star rating with its bars and a linear scale as columns with the average marked](https://formstep.io/docs/images/building-forms/live-results.png)

The results after a submit, and on the results page.

Each choice, switch, rating, scale, ranking, and matrix question gets a chart with its answer counts, in your form's button color. Text, email, phone, contact, file, signature, and payment questions never appear, and no result shows a name or a written answer.

## AI summary

An AI summary puts a short recap above the results: a headline and up to three points about what the answers add up to. Your team generates it on the form's [Summary](https://formstep.io/docs/submissions-analytics/question-summary/) view, which explains what it reads and what it costs. To show it to respondents too:

1. Generate a summary on the Summary view and read it there.

2. In **Settings**, the **Submissions** tab, with **Show live results** picked, switch **AI summary** on.

3. Save. Visitors now see it at the top of the results.

The summary does not update on its own. The card says how many responses it is based on and when it was generated, so visitors know it can trail the live counts. Switching **AI summary** off hides it from respondents; your team still sees it on the Summary view.

## The results page

Every share link has a results page: the link followed by `/results`, such as `form.formstep.io/aB3dE9xY/results`. Anyone with it sees the results without answering, and every share link of a form opens the same results. Open it on a projector or a TV while people answer: new responses appear within a few seconds, and on a wide screen the results sit in two columns with larger text.

## What counts

- Completed responses from the form's share links. Answers to [requests](https://formstep.io/docs/requests/overview/) stay with the request and are not counted.

- The latest 5,000 responses. Older ones are left out, and the page says so.

- The published form: a question you add or rename shows after you publish.

- Deleting a response takes it out of the results.

## Privacy and access

- A form behind a [password](https://formstep.io/docs/sharing-publishing/authentication-gate/#password-protect) keeps its results behind it: respondents who entered the password see them after they submit, and the results page does not open.

- A closed form keeps its results page. A deleted form or a revoked link takes it away.

- Pick another choice under After someone submits, and the results page closes.

- Questions and options show as written, in the form's language.

## Next steps

[Thank-you page & redirect](https://formstep.io/docs/building-forms/custom-thank-you/) — The other choices after someone submits

[Aggregated summary](https://formstep.io/docs/submissions-analytics/question-summary/) — Where your team generates the AI summary

# Multilingual forms

Set the language you write a form in, translate questions, text, and emails by hand or with AI, and control which language each respondent sees.

## The form's language

Set it under **Form language** in **Settings**, **General**. It is the language you write the form in, and it sets the language of Formstep's own buttons, error messages, default emails, and date and number formats. Changing it does not translate your questions or text: for that, add a language below.

Formstep supports 65 languages, from Afrikaans to Vietnamese, including regional ones such as British English, Mexican Spanish, Canadian French, and Brazilian Portuguese. Type a name or code in the picker to find one.

Forms and PDFs read right to left in Arabic, Hebrew, Persian, Urdu, and other right-to-left languages.

## Translate your form

The translation editor is on every plan. In the editor, click **Translate** in the top bar. Each row shows the **Original** and its **Translation**, with a status. The **Form content** and **Emails** tabs keep form text and email text apart. Changes save as you type.

![The translation editor with the original text on the left and the translation on the right](https://formstep.io/docs/images/building-forms/translate-editor.png)

Translate form content and email text side by side.

1. Click **Add language** and pick a language.

2. Type each translation, or let AI suggest one.

3. Publish the form. Respondents see a language only after you publish.

### What you can translate

- Headings, paragraphs, lists, and tables
- Question titles, placeholders, options, and scale and matrix labels
- Image captions and the thank-you page
- Your own text for the confirmation, reminder, and request invitation emails

Answers, files, and Cal.com event names are not translated. Keep `@` mentions in the translation, and translate only the text around them.

## AI translation

Use AI for a first draft, then review it. Each row has a **Suggest** button, and the buttons above the rows act on many rows at once, such as **Translate everything**, **Refresh outdated**, or **Polish translations**. AI suggestions use [AI credits](https://formstep.io/docs/ai/ai-credits-usage/).

AI fills the rows as suggestions. Accept or decline each one, or use **Accept all**. Have a native speaker check legal and payment text before you publish.

## Translation statuses

| Status | What it means | What to do |
| - | - | - |
| Up to date | The translation matches the current text. | Nothing. |
| Not translated | No translation yet. | Translate it, or ask AI. |
| Outdated | You changed the original after translating it. | Click "Show previous version" to compare, then update it. |
| AI suggested — review | AI drafted it, and you have not accepted it yet. | Accept or decline it. |
| Invalid reference | The text mentions a question that no longer exists. | Fix the mention, or click "Mark as valid". |

Each language shows how many rows are complete, missing, and outdated.

## Publish a language

Rows you have not translated show in the original language, so you can publish before everything is done, but the form will mix languages. The issue indicator warns about missing and outdated rows.

If a translation mentions a question that no longer exists, the row shows a warning and publishing stops until you fix it.

## Which language respondents see

Once a translation is published, respondents first see “Pick your language to start”. They skip it when their link sets the language, or when they picked one on this form before in the same browser. They can switch to another published language at any time.

To choose the language for them, send a link ending in `?lang=` and the language code, such as `?lang=fr` for French, or set a default language on a [share link](https://formstep.io/docs/sharing-publishing/sharing-embedding/). A request opens in the request's language. A language you have not published is ignored.

> **Check a language before you share it**
>
> Open the form with `?lang=` and the language code, and send a test response.

## Emails and PDFs

- Emails to respondents use your translated text in their language. Without a translation, Formstep sends its own default email in that language instead of your original text.

- PDFs show the form in the language the respondent used, as it was when they submitted.

For a guide to the whole process, from translating a form to reading the answers in your language, see [how to make a multilingual form](https://formstep.io/blog/multilingual-forms/).

## Next steps

[Use AI chat](https://formstep.io/docs/ai/using-ai/) — Translate and polish with AI chat

[Form settings](https://formstep.io/docs/building-forms/form-settings/) — Set the form's language under General

# Form settings

Choose who can open a form, what happens after someone submits, and which emails go out, all in the Settings dialog.

![The Settings dialog on its General tab, with the tabs General, Public link access, Submissions, Emails, and Danger zone down the side and an Integrations row below them](https://formstep.io/docs/images/building-forms/settings-dialog.png)

Settings, General tab. Click Save changes to apply.

## General

| Setting | What it does |
| - | - |
| Form name | The name in your workspace. Respondents do not see it |
| Form language | The language of buttons and messages. It does not translate your questions. See [Multilingual forms](https://formstep.io/docs/building-forms/translating-form-content/#source-language) |
| Show Formstep branding | Turning it off needs Pro or Business |

## Public link access

These settings decide who can open the form through the Public link. Requests skip them, because each request link belongs to one person.

- **Require sign-in** and **Password**: see [Authentication gate](https://formstep.io/docs/sharing-publishing/authentication-gate/).

- **Spam protection**: a Cloudflare Turnstile check before each submission. Always on for Free forms; on Pro and Business you can turn it off. See [Bot protection](https://formstep.io/docs/sharing-publishing/captcha-bot-protection/).

## Submissions

![The Submissions tab: Accepting submissions with Open, Until a date, and Closed; Delete submissions with Never, On a date, and After; After someone submits with four cards; and Let people change their answers](https://formstep.io/docs/images/building-forms/settings-submissions.png)

Settings, Submissions tab.

| Setting | What it does | More |
| - | - | - |
| Accepting submissions | Open, Until a date, or Closed | [Scheduled close](https://formstep.io/docs/sharing-publishing/scheduled-close/) |
| Delete submissions | Delete answers on a date, or after a number of days. Setting a rule needs Business | [Submission retention](https://formstep.io/docs/submissions-analytics/submission-retention/) |
| After someone submits | Show thank-you page, Show live results, Offer another response, or Go to a web page | [Thank-you page & redirect](https://formstep.io/docs/building-forms/custom-thank-you/), [Live results](https://formstep.io/docs/building-forms/live-results/) |
| AI summary | With live results on: show the AI summary your team generates on the Summary view above the results | [AI summary](https://formstep.io/docs/building-forms/live-results/#ai-summary) |
| Let people change their answers | An edit link after submit | [Edit after submit](https://formstep.io/docs/submissions-analytics/edit-after-submit/) |

Settings marked Public link only do not apply to requests.

### Drafts

Formstep saves answers as the respondent goes, and restores them when they come back. On Free, drafts from the Public link stay in the respondent's browser. On Pro and Business, they are saved on the server, so a reminder email can bring the respondent back on any device. Request drafts are always saved on the server.

## Emails

Each email has its own card with a switch, a **Preview**, and a subject and body you can change with [@ mentions](https://formstep.io/docs/building-forms/answer-piping/).

| Card | What it sends | More |
| - | - | - |
| Custom domain | Sends every email from your own domain | [Custom email domains](https://formstep.io/docs/branding-domains/custom-domains/#custom-email-domains) |
| Notify on new submission | An email to you or your team for each response, with a PDF of the answers if you want | [Email notifications](https://formstep.io/docs/submissions-analytics/self-notifications/) |
| Send confirmation to respondent | A confirmation to the person who answered, or to the recipient of a request | [Respondent confirmation](https://formstep.io/docs/submissions-analytics/self-notifications/#respondent-confirmation) |
| Send reminders | Reminders for unfinished answers and open requests | [Reminders](https://formstep.io/docs/requests/invitations-and-reminders/#reminders) |
| Request invitation | The email that sends a request link | [Invitations](https://formstep.io/docs/requests/invitations-and-reminders/#invitation) |

On Free, new-submission notifications go to the workspace owner's address only. See [Limits & quotas](https://formstep.io/docs/subscription-billing/limits-quotas/) for what each plan includes.

Emails to respondents use the form's language; translate your own text in [Translate](https://formstep.io/docs/building-forms/translating-form-content/). Emails to your team use the workspace's **Notification email language**.

## Integrations and Danger zone

- **Integrations** opens the integrations dialog, also the plug icon next to the gear. See [Integrations](https://formstep.io/docs/integrations/overview/).

- In **Danger zone**, **Delete all submissions** and **Delete analytics data** cannot be undone. **Delete form** moves the form to [Trash](https://formstep.io/docs/workspaces-teams/trash/) for 30 days.

## Next steps

[Thank-you page & redirect](https://formstep.io/docs/building-forms/custom-thank-you/) — What respondents see after they submit

[Close a form or cap responses](https://formstep.io/docs/sharing-publishing/scheduled-close/) — Close on a date, or cap responses per share link

[Email notifications](https://formstep.io/docs/submissions-analytics/self-notifications/) — An email for each new response

[Authentication gate](https://formstep.io/docs/sharing-publishing/authentication-gate/) — Sign-in or a password on the public link

# Publish history

View the published versions of your form and revert to an earlier one. Every plan can browse the history, and going back to a version needs Business.

## How it works

Each publish saves a version: the form, its theme, logo, cover, emails, and translations. Business keeps the last 50 versions per form. Free and Pro keep the live version, plus older ones that a submission or an open link still uses.

## Open publish history

In the editor, click **Publish history**, the clock icon in the top bar. Versions are listed newest first, and the live one is marked Live. Click a version to preview its **Form**, **Emails**, and **Translations**.

![The Publish History dialog: versions with their dates on the left, a preview of the selected version with Form, Emails, and Translations tabs, and Revert to this version](https://formstep.io/docs/images/building-forms/publish-history.png)

Publish history: pick a version, preview it, and revert.

To throw away edits you have not published yet, click **Revert unpublished changes** here.

## Go back to an earlier version

Going back needs the workspace owner to be on Business. Pick a version and click **Revert to this version**, then choose:

| Button | What it does |
| - | - |
| Open as draft | Loads the version into your editor as a draft. The live form stays unchanged until you publish again. |
| Publish now | Restores the version and publishes it right away. Use this to undo a mistake fast. |

A revert restores the form, cover, logo, theme, translations, and email text. Access settings, email recipients, integrations, and retention stay as they are.

> **Reverting replaces your current draft**
>
> Reverting overwrites unpublished changes in the editor. Publish your draft first if you might want it back.

## Next steps

[Publish checks](https://formstep.io/docs/building-forms/publish-checks/) — What blocks a publish, and what only warns

[Plans & pricing](https://formstep.io/docs/subscription-billing/plans-pricing/) — What each plan includes

# Publish checks

What Formstep checks before your form goes live, which findings block publishing, and how to clear the ones you are most likely to meet.

## Where to find the checks

Your edits save as a draft, and respondents see the last published version until you click **Publish**. The issue indicator beside Publish is green when all is well, amber for warnings, and red for errors. Click it to see the list, and click an entry to go where you fix it. The list updates as you type.

![Close-up of the editor toolbar on a published form with changes to publish: Edit, Translate, and Preview, then Publish history, Integrations, Settings, the green issue indicator, Publish changes, and the Inbox button.](https://formstep.io/docs/images/building-forms/preview-publish.png)

The issue indicator sits beside Publish changes.

## Errors and warnings

| Level | What happens when you press Publish |
| - | - |
| Error | Publishing stops, and nothing goes live. The same checks apply when an automation or AI agent publishes. |
| Warning | A **Review needed** dialog lists the warnings. Fix them, or click **Publish** to go ahead. |

For a settings warning, **Publish** also applies the fix the warning names, such as turning off a password gate that has no password. You fix content warnings yourself.

## Common errors

| Message | How to fix |
| - | - |
| Variable “Email” references a deleted field and will show as empty. | An @ mention points at a question you deleted. Remove the mention or pick another question. |
| A reference points to a field that no longer exists. | An email, a redirect parameter, an integration, or a translation still uses a deleted question. The entry names the place to update. |
| A logic rule references a deleted field or page. | Update or remove the rule. The Logic tab lists it under Needs attention. |
| Field key “total” is used by more than one field. | Give each field its own key in the Fields tab. See [Field keys](https://formstep.io/docs/requests/field-keys/). |
| Complete setup for this Payment question before publishing. | Set a currency and amount, and connect Stripe. See [Payment collection](https://formstep.io/docs/building-forms/payment-collection/). |
| Connect Cal.com before publishing forms that schedule appointments. | Connect Cal.com and pick an event type. See [Cal.com](https://formstep.io/docs/integrations/cal-com/). |

## Common warnings

- “Page 2 has no content respondents can see.” The page holds only logic or hidden blocks, so respondents would walk into a blank step. Add content or remove the page break.

- “A page jump sends respondents back from Page 3 to Page 2.” Respondents could loop between the two pages. Similar warnings flag a jump that targets its own page, or one on the last page, where Next submits the form. Review the rule.

- “Field key “company\_name” will no longer exist after this publish.” Workflows that read it stop getting that answer. See [When a key is about to disappear](https://formstep.io/docs/requests/field-keys/#removed-keys).

- “French: 12 strings missing.” Some text has no translation yet, or changed after it was translated. See [Multilingual forms](https://formstep.io/docs/building-forms/translating-form-content/).

- “Slack connection expired.” The form publishes, but submissions stop reaching that app until you reconnect it.

- “The decision question has no approve, decline or changes option.” Requests would finish with no outcome. Insert a Decision question from the / menu.

## Settings that Publish fixes for you

When you publish anyway, Formstep turns these settings off or cleans them up:

- A password gate with no password is turned off, so respondents can open the form.

- [Edit after submit](https://formstep.io/docs/submissions-analytics/edit-after-submit/) is turned off on a form that does not allow it.

- New-submission notifications with no valid address are turned off, and invalid addresses are dropped from the list.

- A confirmation or reminder email with no email question to send to is turned off.

- A redirect address that is not a valid web address is cleared, and respondents see your thank-you page.

## Other reasons a publish is refused

These appear as a red notification when you press Publish:

- The form is in the trash. Restore it first.

- An email question has [respondent email verification](https://formstep.io/docs/building-forms/email-verification/) switched on and the workspace owner's plan is not Business. Upgrade, or switch verification off.

- A field key you typed is already published on another field. Give each field its own key and publish again.

## Next steps

[Publish history](https://formstep.io/docs/building-forms/version-history/) — Browse past versions and go back to one

[Field keys](https://formstep.io/docs/requests/field-keys/) — Keep workflows matching after an edit
