Form trigger
Generates a public, hosted form. Each submission fires a workflow run with the form fields as the trigger payload.
📸 Screenshot needed:
triggers__form-public-link.png, Form Trigger inspector showing the list of fields configured (text, email, dropdown), the generated public form URL, a Copy button, and a "Preview form" link.
When to use it
- Lightweight user intake (request a refund, request a demo, log a support ticket).
- Internal-tool forms ("file an expense report").
- Embedded forms on your marketing site.
- One-off polls.
Anything more sophisticated (multi-step wizards, conditional fields beyond simple required-if) is probably better done in a real front-end, Flero's form is intentionally minimal.
Configuration
Form metadata
| Field | Notes |
|---|---|
| Form title | Shown at the top of the public form page |
| Description | Shown below the title |
| Submit button label | Default "Submit" |
| Success message | Shown after submission |
| Redirect URL | Optional. If set, redirects to this URL after submit (overrides the success message). |
Fields
A list of fields, each:
| Field config | Notes |
|---|---|
| Key | The key used in $trigger, e.g. email, subject, attachment |
| Label | Visible label |
| Type | text, textarea, number, email, url, phone, date, time, datetime, select, multi-select, radio, checkbox, file |
| Required | Whether the field must be filled |
| Default value | Optional |
| Placeholder | Optional |
| Validation | Type-specific (regex for text, min/max for number, allowed file extensions for file) |
| Options | For select / radio / multi-select |
Access
| Setting | Notes |
|---|---|
| Visibility | Public (anyone with the URL) or Authenticated (requires Flero login) |
| Allowed domains | Optional. Restrict to specific email domains on authenticated forms. |
| Rate limit | Per-IP submission rate cap |
| CAPTCHA | Optional. Defends against bot submissions. |
Trigger payload
After submission, $trigger looks like:
{
"<fieldKey1>": "user input",
"<fieldKey2>": 42,
"<fileField>": {
"filename": "receipt.pdf",
"size": 12345,
"contentType": "application/pdf",
"data": "<base64-encoded>"
},
"_meta": {
"submittedAt": "2026-05-15T10:00:00Z",
"ipAddress": "203.0.113.5",
"userAgent": "...",
"userId": "<user uuid, if authenticated>"
}
}Reference fields by their Key, not their Label: {{ $trigger.email }}, {{ $trigger.subject }}.
Hosting the form
The form lives at https://app.flero.ai/forms/public/<token> (the URL is generated when you save). Anyone with the link can open it.
Options for distribution:
- Direct link, share the URL in Slack, email, your wiki.
- Embed, paste the embed snippet into any HTML page. Renders as an iframe.
- Custom domain, under Workflow settings → Form → Domain, you can map the form to a subdomain you control (e.g.
forms.acme.com). Requires DNS configuration.
File uploads
File fields are limited to 25 MB per file by default (admin-configurable). Files arrive as base64-encoded data in the trigger payload, useful for small attachments but inefficient for large files.
For large uploads, structure the workflow to:
- Form trigger collects only metadata (filename, size, content type).
- Workflow returns a pre-signed upload URL (e.g. S3 PUT URL).
- Browser uploads directly to S3.
- A second workflow (or a continuation of this one) processes the file from S3.
Too involved for most use cases, for receipts, screenshots, PDFs, the inline base64 path is fine.
Styling
The hosted form uses your workspace branding (logo, primary colour) automatically. For more control:
- Custom CSS under workflow settings → Form → Appearance.
- Custom theme for organisations on the Enterprise plan.
Activating the form
- Save the workflow.
- Set status to Active.
- Share the URL.
While the workflow is draft or inactive, the form URL shows a "This form isn't available" message.
Tips & gotchas
- The trigger fires once per submission, regardless of fields. A 50-field form is one run, not 50.
- CAPTCHAs cost money for high-traffic forms, you pay for each verification. Disable for low-risk internal forms.
- Field keys must be valid identifiers, letters, digits, underscores, no spaces. Use the auto-generated key from the label as a starting point.
- Don't put secrets in field defaults, defaults are visible in the form HTML.
- Form responses appear in the execution explorer like any other trigger, you can build a "submissions" report from there without separate storage.
Related
- Recipe 05: Form submission to CRM
- Webhook trigger, for system-to-system rather than user-to-system
Found something out of date? This page lives in the Flero docs content set.