Building Forms
Answer piping
Type @ to reference any field's answer — in question titles, content blocks, thank-you pages, email notifications, and integration messages. Values update dynamically so each respondent sees personalized content.
How it works
Type @ in any text that supports it (see below). A mention menu appears listing your form’s fields grouped by type: Hidden Fields, Answers, Repeating groups, Calculated Fields, and Metadata. Pick a field and formbase inserts a variable chip at your cursor.
In the editor, piped values show as a chip (e.g. @First name). When a respondent fills out the form, formbase replaces each chip with their actual answer.
To type a plain @ instead — an email address or a handle — press Esc to close the menu and keep typing. The menu also closes on its own when nothing matches what you typed after the @.
Where piping works
- Question titles — a question never offers its own answer, which would be circular
- Content blocks: paragraphs, headings, list items, table cells, links, and image captions
- Thank-you page content
- Translations of any of the above, where the mention carries into each language
Email notification subjects and bodies: self-notification, respondent confirmation, and abandoned-form reminder emails, plus the request invitation
Integration templates: Slack and Discord messages, GitHub and Linear issue titles and descriptions, and Notion and Airtable field mappings
Choice option labels and matrix row and column labels take mentions too, but a narrower menu: only Hidden Fields, Calculated Fields, and Metadata — the values that exist before anyone answers. An option label is how the option reads in the summary, in exports, and in the logic picker, so it cannot depend on another answer.
Button labels and repeating group titles take no mentions. Two related features work differently: redirect query parameters pick a field from a dropdown for each parameter, and input defaults put a value inside a field instead of in text.
Pre-filling an editable field
A mention shows a value as text the respondent can’t change. To put a value inside a field so the respondent can confirm or edit it, use a field reference as the field’s default instead: type @ at the start of a Text Input, Text Area, Email, Phone Number, Website URL, or Number field. That menu lists only Hidden Fields and Calculated Fields, because those have a value before the respondent starts answering. See Default values from other fields.
That is the technique for a share link, where a value can only arrive through a URL parameter and so needs a hidden field
to land in. On a request you don’t need any of it: the caller pre-fills a visible question directly when
they create the request, using prefill, and can mark a key readonly so the recipient sees it but cannot change
it. Build a hidden field when you want to carry data the respondent should never see, not just to pre-fill an answer. See
Requests don’t need a hidden field to pre-fill.
What you can pipe
In body text the @ menu lists five groups, in this order:
| Group | What it includes |
|---|---|
| Hidden Fields | Values seeded from URL parameters or a request’s context. |
| Answers | Any question on the form — text, email, number, choices, ratings, and so on. |
| Repeating groups | Every entry of a repeating group at once. See Referencing repeating groups below. |
| Calculated Fields | Computed scores, totals, or concatenated text. |
| Metadata | Runtime values such as the form ID, a per-submission PIN or code, and the locale. |
A field that a chip points at but that no longer exists shows the tooltip “Referenced field was deleted” and renders as empty at fill time. If you delete a hidden or calculated field and add another with the same name, existing chips reconnect to it on their own. Question references never reconnect that way — titles change and collide, so they stay broken until you re-insert them.
Metadata variables
Beyond field answers, the Metadata group carries runtime values. Some are available everywhere; others only in email templates. The name below is what the chip reads.
Available in both form content and email templates
| Variable | What it shows |
|---|---|
| Form ID | Unique ID for the form itself. |
| 4 Digit PIN / 6 Digit PIN | A numeric PIN, unique per submission. |
| 4 Char Code / 6 Char Code | An alphanumeric code, unique per submission. |
Form content only
| Variable | What it shows |
|---|---|
| Locale | Language code the respondent is reading the form in. |
Email templates only
| Variable | What it shows |
|---|---|
| Form Name | The form's name from your workspace. |
| Submitted At | Date and time the response was submitted. |
| Submission ID | Unique ID for the submission. |
| Submission Type | "New", "Updated", or "Partial". |
| Submission Language | BCP 47 code for the language the respondent used, for example en or nb-NO. |
| PDF Link | Permanent download link for the submission PDF. |
| Authorized E-mail | The signed-in respondent's email. Offered only while Require authentication is on. |
PINs as reference numbers
Drop a 6 Digit PIN into the respondent confirmation email as a reference number. Respondents can quote it in follow-up conversations, and you can search for it in the submissions table.
Examples
Personalized question — “Thanks @First name! How would you rate your experience with @Company?”
Dynamic thank-you — “Your total is @Price. We’ll send a confirmation to @Email within 24 hours.”
Conditional email — “Hi @First name, your lead score is @Lead score. Our team will be in touch.”
Redirect with context — in redirect settings, add a
nameparameter mapped to the Name question and aplanparameter mapped to Plan. The preview shows the URL respondents are sent to:
https://yoursite.com/confirm?name={Name}&plan={Plan}
Referencing repeating groups
Repeating groups let respondents add as many entries as they need, so a single reference can pull in more than one value. How the @ mention resolves depends on what you point it at.
A single member field — formbase joins that field’s values across every entry with · . Mentioning the Name field of three guests shows “Jane Appleseed · Marcus Lee · Priya Patel”.
The whole group — every entry appears inline. Member values within an entry join with · , and entries are separated by commas. A group with Name and Age shows “Jane Appleseed · 34, Marcus Lee · 29”.
In an integration column the whole group appears as numbered, labeled rows instead, so each entry stays readable: “1. Full name: Jane Appleseed, Age: 34, 2. Full name: Marcus Lee, Age: 29”.
Deleting a piped field
A mention left pointing at a deleted field is a publish error, not a warning: the issue indicator in the toolbar flags every stale reference — in form content, email templates, translated emails, and integration message templates — and publishing stops until each one is fixed. Open the flagged location, remove the broken chip, and re-insert the correct field.