Workflow Node Types Reference

7 min read

WittyForm workflows use a node-based system to automate actions after form submissions. Each workflow starts with a Trigger node and chains one or more action nodes. This reference documents all 8 node types with their configuration schemas and behavior.


1. Trigger

The Trigger node is the entry point of every workflow. It runs when a new form response is submitted.

Configuration

{
  "type": "trigger",
  "label": "On submission"
}

The workflow fires once per submission. To run actions only for certain submissions (for example, only when a budget field is above a threshold), add a Condition node after the trigger and branch on its result.


2. Send Email

Sends an email when the workflow reaches this node. Supports template variables in the subject, body, reply-to address, and sender name.

fromName is the display name recipients see next to the address. Leave it out and the workspace sender name is used, falling back to WittyForm. Because it can interpolate an answer, the value is stripped of characters that would break the header (line breaks, angle brackets, quotes, commas, semicolons) and truncated to 78 characters.

Configuration

{
  "type": "send_email",
  "to": "{{respondent.email}}",
  "subject": "New submission: {{form.title}}",
  "body": "New response
Name: {{field_name}}
Email: {{field_email}}",
  "replyTo": "[email protected]",
  "fromName": "{{field_name}}"
}

Template Variables

Use double-brace syntax to insert dynamic values into the subject and body. Variables are resolved from the saved response, so response IDs and timestamps are authoritative.

  • {{respondent.email}}: The first email field answer, when present
  • {{form.id}}: The form's ID
  • {{form.title}}: The form's title
  • {{field_id}} or {{Field label}}: The value of a specific response field
  • {{response.id}}: The unique saved response ID
  • {{response.submitted_at}}: Saved submission timestamp in ISO UTC
  • {{response.submitted_date}}: Saved submission date in UTC
  • {{response.submitted_time}}: Saved submission time in UTC

3. Webhook

Sends an HTTP request to an external URL with the form response data. Use this to push data to any third-party system.

Configuration

{
  "type": "webhook",
  "url": "https://api.example.com/form-submissions",
  "method": "POST",              // "POST" | "PUT" | "PATCH" | "GET"
  "headers": {
    "X-Custom-Header": "source=wittyform"
  },
  "payloadTemplate": null        // null = send the standard JSON payload
}

Payload Template

Leave payloadTemplate empty to send the standard JSON payload. To send a custom JSON string, include template variables directly in the string:

"payloadTemplate": "{"event":"form_submitted","form_id":"{{form.id}}","customer_email":"{{field_email}}"}"

Delivery

Workflow webhooks use a fixed server timeout and are recorded in Workflow Logs. If a request fails, the workflow result records the node error so you can inspect it later.


4. Notification

Sends an in-app notification to one or more workspace members. Notifications appear in the bell icon in the WittyForm dashboard.

Configuration

{
  "type": "notification",
  "title": "New form submission",
  "message": "{{field_name}} submitted {{form.title}}"
}

Where It Appears

The notification shows up under the bell icon in the WittyForm dashboard for the workspace. Both the title and message support double-brace template variables so you can include response data.


5. Slack

Posts a message to Slack using an incoming webhook URL. Create the webhook in your Slack workspace, then paste its URL into the node.

Configuration

{
  "type": "slack",
  "webhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX",
  "channel": "#form-submissions",        // Optional: channel name or ID
  "message": "New submission from {{field_name}} ({{field_email}})"
}

Message Format

The message is plain text with Slack markdown and supports double-brace template variables so you can include response data. The optional channel overrides the webhook's default channel where your Slack configuration allows it.


6. Condition

A Condition node evaluates a rule and branches the workflow into two paths: True (condition met) and False (condition not met).

Configuration

{
  "type": "condition",
  "conditions": [
    {
      "fieldId": "field_budget",
      "operator": "greater_than",
      "value": 10000
    },
    {
      "fieldId": "field_company_size",
      "operator": "greater_than",
      "value": 50
    }
  ],
  "match": "all"                  // "all" | "any"
}

Operators

OperatorWorks WithDescription
equalsAll typesExact match.
not_equalsAll typesDoes not match the specified value.
containsStringsValue contains the specified substring.
not_containsStringsValue does not contain the specified substring.
greater_thanNumbersValue is greater than the specified number.
less_thanNumbersValue is less than the specified number.
is_emptyAll typesField was left blank or not answered.
is_not_emptyAll typesField has a value.

Value Comparisons

The value field in a condition rule supports literal strings and numbers. Template variables are not evaluated inside condition values.


7. Redirect

The Redirect node overrides the default thank-you page and sends the respondent to a custom URL after the server confirms the saved submission.

Configuration

{
  "type": "redirect",
  "url": "https://yoursite.com/thank-you?response_id={{response.id}}"
}

URL Template

The URL supports the same saved-response template variables listed above. Common patterns:

  • https://yoursite.com/thank-you?id={{response.id}}: Pass the response ID to your own system
  • https://yoursite.com/audit?submitted={{response.submitted_at}}: Pass the authoritative submission timestamp
  • https://calendly.com/team/meeting?name={{field_name}}&email={{field_email}} : Pre-fill a Calendly booking with form data

Conditional Redirects

Combine a Redirect node with a Condition node to send different respondents to different URLs based on their answers.


8. Update Lead Score

Modifies the lead score of the CRM contact associated with the form respondent. Requires that the form has CRM integration enabled (auto-create contacts or field mapping).

Configuration

{
  "type": "update_lead_score",
  "operation": "add",            // "add" | "subtract" | "set"
  "points": 20,                  // Number of points to apply
  "label": "Submitted demo request"
}

Operations

OperationBehaviorExample
addAdd points to the current score.Current score: 45, points: 20, new score: 65.
subtractSubtract points from the current score.Current score: 45, points: 10, new score: 35.
setSet the score to an exact value, ignoring the current score.Current score: 45, points: 100, new score: 100.

Score Rules

  • points is a fixed number. The resulting score is always clamped to the range 0 to 100 automatically, so a contact never drops below 0 or rises above 100 no matter how many forms they submit.
  • The optional label describes the adjustment so you can recognize it later.
  • Each score update is logged in the contact's activity timeline with the source form and the resulting score.
Note: If the form response does not match an existing CRM contact (no matching email) and auto-create contacts is disabled, the Update Lead Score node is skipped silently. Check your Workflow Logs for "skipped" entries if scores are not updating as expected.

Ready to Build Forms That Actually Convert?

Get lifetime access for just $37. No subscriptions or recurring fees. Create beautiful forms and own the tool forever.

14-day money-back· Instant access
Workflow Node Types Reference