Execute workflows automatically when external systems send HTTP requests to a unique webhook URL. Perfect for integrating with third-party services, processing real-time events, and building event-driven automation.
Overview
Webhook triggers create a secure HTTP endpoint that external systems can call to start your workflow. When the webhook receives a request, it automatically creates a new workflow run with the request data as input.
Configurable HTTP methods (GET, POST, PUT, DELETE)
Custom response codes
Immediate response with workflow run tracking
Full event history and logging
How Webhook Triggers Work
Execution Flow
External System β HTTP Request β Webhook URL β Trigger Validation β
β Workflow Run Created β Immediate Response β Workflow Executes
External system sends HTTP request to webhook URL
Platform validates authentication and HTTP method
Trigger creates new workflow run with request data
Immediate response returned with run ID and status
Workflow executes asynchronously in background
Event logged with full request/response details
Response Behavior
Webhooks use immediate response mode:
HTTP response returned within milliseconds
Response includes workflow run ID
Workflow continues executing asynchronously
External system doesn't wait for workflow completion
Example webhook response:
Understanding Webhook Input Data
CRITICAL CONCEPT: The webhook request body is passed directly as your workflow's input. Understanding how to configure your input schema and access webhook data is essential for successful integration.
How Webhook Data Becomes Workflow Input
When a webhook receives a request, the entire request body is automatically passed as the workflow's input data.
The flow:
External system sends JSON data to webhook URL
Platform receives the request body
Request body becomes workflow input
Fields defined in your input schema are accessible using {{field_name}}
Configuring Workflow Input Schema for Webhooks
Your workflow's input schema defines what data the workflow expects. For webhook triggers, you must define each field you want to access in your workflow.
Supported field types:
string - Text data
number - Numeric values
boolean - True/false values
array - Lists of items
object - Nested objects (accepts any structure)
Important: Object Type Limitation
You must define each top-level field, but object fields accept any internal structure:
β You must list each field in properties
β You can specify a field is type object
β You cannot define the internal structure/properties of an object field
β All nested data within object fields is accessible via dot notation
Input Schema Examples
Example 1: Simple Fields
Webhook payload:
Workflow input schema (you must define all fields):
Access in workflow:
Example 2: Object Fields (No Internal Schema Needed)
Webhook payload:
Workflow input schema:
Key point:
We must define customer as a field in properties
We specify customer is type object
We don't need to define its internal properties (id, name, email, address)
The system automatically accepts any structure inside the customer object
Access nested data with dot notation:
Even though we didn't define id, name, email, or address in the schema, we can still access them because customer is type object!
Example 3: Array Fields
Webhook payload:
Workflow input schema:
Access in workflow:
Strategy: Define Top-Level Fields You Need
Best Practice: Define each top-level field from the webhook payload that your workflow will access. Use type object for complex nested structures.
Example - Stripe webhook:
Webhook sends this payload:
Your workflow input schema (define what you'll use):
Even though we only defined id, type, and data (as object), you can still access all nested data:
The data field is defined as type object, so all its nested content is automatically accessible!
Accessing Webhook Data in Workflow Nodes
Once your input schema is configured, reference webhook data using parameter substitution syntax: {{field_name}}
Simple Fields
Nested Fields (Dot Notation)
Array Elements
Use in Node Configurations
Email node example:
API call node example:
Processing Complex Data with JavaScript
For complex transformations or accessing deeply nested data, use JavaScript nodes:
JavaScript node example:
Real-World Integration Examples
Example 1: Stripe Payment Webhook
Stripe payload structure:
Your workflow input schema:
Workflow logic:
Node 1 - Validate event type:
Node 2 - Send confirmation email:
Node 3 - Update database with order status:
Example 2: GitHub Pull Request Webhook
GitHub payload:
Your workflow input schema:
Access data in workflow:
Example workflow:
Node 1 - Post PR comment:
Node 2 - Notify team on Slack:
Example 3: Form Submission
Form payload:
Your workflow input schema:
Use in workflow:
Example workflow:
Node 1 - Send auto-reply:
Node 2 - Create CRM lead:
Node 3 - Notify sales team:
Common Mistakes and Solutions
Mistake 1: Trying to Define Object Properties
Problem (β This doesn't work):
Solution (β Correct):
You can still access {{customer.name}} and {{customer.email}} - you just don't define them in the schema!
Mistake 2: Not Defining a Field at All
Problem:
Solution (β Define all top-level fields):
Mistake 3: Field Name Mismatch
Problem:
Solution: Match field names exactly:
Mistake 4: Case Sensitivity
Problem:
Solution: Field names are case-sensitive:
Use in workflow:
Mistake 5: Wrong Data Type
Problem:
Solution: Match the actual type the webhook sends:
Then convert in workflow if needed:
Testing Your Webhook Integration
Step 1: Identify Webhook Payload Structure
Before creating your input schema, understand what data the webhook will send:
const eventType = {{type}};
if (eventType !== "charge.succeeded") {
throw new Error("Unsupported event type: " + eventType);
}
To: {{data.object.receipt_email}}
Subject: Payment Received - Order {{data.object.metadata.order_id}}
Body: Thank you! We received your payment of ${{data.object.amount}}.
Order ID: {{data.object.metadata.order_id}}
Amount: {{data.object.amount}}
Currency: {{data.object.currency}}
Status: "paid"