Examples
assigned_to property is set dynamically — the form is generated by an earlier step in the workflow that knows the correct assignee. In those cases, the Form Trigger is not the first node; it is placed after a data-lookup node that resolves the user ID or email.
Example 1 — Employee Leave Request
An employee initiates a leave request from the HR self-service portal. The Form Trigger generates a form pre-addressed to the requesting employee. The form expires in 7 days to prevent stale requests from lingering in the system.
{
"node_type": "FormTrigger",
"name": "Employee Leave Request Form",
"config": {
"title": "Employee Leave Request",
"description": "Please complete this form to submit a leave request. Your manager will be notified for approval once you submit.",
"submit_button_label": "Submit Leave Request",
"assigned_to": { "type": "user", "user_id": "{{ $input.employee_user_id }}" },
"expires_in_hours": 168,
"on_expiry": "cancel",
"allow_file_uploads": false,
"send_confirmation_email": true,
"success_message": "Your leave request has been submitted. You will receive an email once your manager reviews it.",
"form_schema": {
"type": "object",
"required": ["leave_type", "start_date", "end_date"],
"properties": {
"leave_type": { "type": "string", "title": "Leave Type", "enum": ["Annual Leave", "Sick Leave", "Parental Leave", "Bereavement Leave", "Unpaid Leave"] },
"start_date": { "type": "string", "format": "date", "title": "Start Date" },
"end_date": { "type": "string", "format": "date", "title": "End Date" },
"reason": { "type": "string", "title": "Notes for Manager", "maxLength": 500 },
"covering_colleague": { "type": "string", "format": "email", "title": "Covering Colleague Email" }
}
}
}
}
Example 2 — New Customer Onboarding Intake
After a deal closes in Salesforce, the workflow triggers a Form Trigger to collect formal onboarding information from the new customer. The form is sent to the primary contact's email with a 5-day deadline. File upload is enabled for contract signing and compliance documentation.
{
"node_type": "FormTrigger",
"name": "Customer Onboarding Intake",
"config": {
"title": "Welcome to Acme Corp — Please Complete Your Onboarding",
"description": "To get your account fully activated, please provide the details below. This takes approximately 5 minutes.",
"submit_button_label": "Complete Onboarding",
"assigned_to": { "type": "email", "email": "{{ $input.customer_primary_email }}" },
"expires_in_hours": 120,
"on_expiry": "escalate",
"allow_file_uploads": true,
"send_confirmation_email": true,
"success_message": "Thank you! Your account will be fully activated within 24 hours. We'll send you a confirmation email with your login credentials.",
"form_schema": {
"type": "object",
"required": ["company_legal_name", "billing_email", "billing_address", "service_tier"],
"properties": {
"company_legal_name": { "type": "string", "title": "Legal Company Name" },
"billing_email": { "type": "string", "format": "email", "title": "Billing Email" },
"billing_address": { "type": "string", "title": "Billing Address", "maxLength": 300 },
"service_tier": { "type": "string", "title": "Service Tier", "enum": ["Starter", "Professional", "Enterprise"] },
"vat_number": { "type": "string", "title": "VAT / Tax Number (if applicable)" },
"primary_contact_phone": { "type": "string", "title": "Primary Contact Phone" }
}
}
}
}
expired port and assigns a follow-up task to the account manager.
Example 3 — Customer Support Ticket Submission
A support intake form embedded on the customer portal. No user assignment — publicly accessible to any authenticated customer. File upload enabled for screenshots and log files. The 24-hour expiry aligns with the company's SLA response commitment.
{
"node_type": "FormTrigger",
"name": "Support Ticket Submission",
"config": {
"title": "Submit a Support Request",
"description": "Describe your issue below. Our support team will respond within 24 hours. For urgent issues, call +1-800-ACME-SUP.",
"submit_button_label": "Submit Support Request",
"assigned_to": null,
"expires_in_hours": null,
"on_expiry": "cancel",
"allow_file_uploads": true,
"send_confirmation_email": true,
"success_message": "Your ticket has been submitted. Reference: {{ $trigger.execution_id }}. You'll receive an email confirmation shortly.",
"form_schema": {
"type": "object",
"required": ["issue_summary", "severity", "product_area", "description"],
"properties": {
"issue_summary": { "type": "string", "title": "Issue Summary", "maxLength": 120 },
"severity": { "type": "string", "title": "Severity", "enum": ["P1 — Critical (system down)", "P2 — High (major degradation)", "P3 — Medium (partial impact)", "P4 — Low (cosmetic/minor)"] },
"product_area": { "type": "string", "title": "Product Area", "enum": ["Billing", "API", "Dashboard", "Integrations", "Account Management", "Other"] },
"description": { "type": "string", "title": "Detailed Description", "maxLength": 2000 }
}
}
}
}
product_area, sets priority based on severity, and emails the customer their ticket reference. P1 tickets additionally trigger a PagerDuty alert to the on-call engineer.
Example 4 — Purchase Request Initiation
Employees submit purchase requests through a form accessible from the company intranet. The form expires in 48 hours to prevent requests from sitting unsubmitted for extended periods.
{
"node_type": "FormTrigger",
"name": "Purchase Request Form",
"config": {
"title": "Purchase Request",
"description": "Submit a purchase request for approval. Requests over $1,000 require CFO sign-off in addition to department head approval. Processing time is typically 2–3 business days.",
"submit_button_label": "Submit Purchase Request",
"assigned_to": { "type": "role", "role": "employee" },
"expires_in_hours": 48,
"on_expiry": "cancel",
"allow_file_uploads": true,
"send_confirmation_email": true,
"success_message": "Your purchase request has been submitted for approval. You'll be notified by email once it is reviewed.",
"form_schema": {
"type": "object",
"required": ["vendor_name", "item_description", "amount", "cost_center", "business_justification"],
"properties": {
"vendor_name": { "type": "string", "title": "Vendor / Supplier Name" },
"item_description": { "type": "string", "title": "Item or Service Description", "maxLength": 500 },
"amount": { "type": "number", "title": "Estimated Total Amount (USD)", "minimum": 1 },
"cost_center": { "type": "string", "title": "Cost Center Code" },
"business_justification": { "type": "string", "title": "Business Justification", "maxLength": 1000 },
"required_by_date": { "type": "string", "format": "date", "title": "Required By Date" }
}
}
}
}
Example 5 — HR Personnel Change Request
Managers submit personnel change requests (salary adjustments, role changes, department transfers) via a secure form sent by the HR system. The form is assigned directly to the submitting manager. File upload supports attaching supporting documentation such as promotion letters or performance reviews.
{
"node_type": "FormTrigger",
"name": "HR Personnel Change Request",
"config": {
"title": "Personnel Change Request",
"description": "Use this form to request a salary adjustment, role change, or department transfer for a direct report. Changes require HR and Finance approval.",
"submit_button_label": "Submit Change Request",
"assigned_to": { "type": "user", "user_id": "{{ $input.requesting_manager_id }}" },
"expires_in_hours": 72,
"on_expiry": "escalate",
"allow_file_uploads": true,
"send_confirmation_email": true,
"success_message": "Your change request has been submitted to HR for review. You will be notified within 3 business days.",
"form_schema": {
"type": "object",
"required": ["employee_id", "change_type", "effective_date", "justification"],
"properties": {
"employee_id": { "type": "string", "title": "Employee ID" },
"change_type": { "type": "string", "title": "Change Type", "enum": ["Salary Adjustment", "Role Change", "Department Transfer", "Promotion", "Contract Type Change"] },
"new_salary": { "type": "number", "title": "New Salary (USD, if applicable)" },
"new_role_title": { "type": "string", "title": "New Job Title (if applicable)" },
"new_department": { "type": "string", "title": "New Department (if applicable)" },
"effective_date": { "type": "string", "format": "date", "title": "Effective Date" },
"justification": { "type": "string", "title": "Business Justification", "maxLength": 1000 }
}
}
}
}