Skip to main content

Workflow Triggers

Triggers determine when and how your workflows execute. Every workflow must have exactly one trigger node as its first node. The trigger produces the initial data that flows downstream through the rest of the workflow.

Strongly AI provides 16 trigger types covering a wide range of execution patterns, from HTTP-based triggers to time-based schedules, file system monitoring, and event-driven architectures. This page covers the most common ones; the full list is in the builder's Triggers category and the Workflows Overview.


Webhook​

Trigger a workflow over HTTP. Calls are authorized with a Strongly REST API key, or -- for external services like GitHub, Stripe, and Slack -- an HMAC signature using a shared secret. Unauthenticated calls are never accepted.

Use Cases

  • GitHub push/pull request event processing
  • Stripe payment and subscription notifications
  • Slack message and interaction handling
  • Custom webhook integrations from any service

Authorization

MethodHow it works
REST API keyX-API-Key header with the workflows:execute scope, like every REST endpoint; the run is the deployer's, as every run of a deployed workflow is
External HMAC signatureProvider-specific signature using the configured secret; runs as the workflow owner

Configuration

SettingDescriptionRequired
Webhook ProviderSignature verification scheme: GitHub, Stripe, Slack, or Generic HMAC (default: Generic)Yes
Webhook Secret (HMAC)Shared secret for external HMAC signature verification. Needed only when external signed services call the webhook; leave empty for an API-key-only webhook. Stored encryptedNo
Previous Secret (rotation)Set during secret rotation: the old secret is also accepted so in-flight callers are not broken. Remove once all callers use the new secretNo
Allowed EventsFilter specific event types per provider (empty allows all)No
IP WhitelistRestrict access to specific IP addresses or CIDR rangesNo
Max Body Size (bytes)Maximum request body size (default: 1MB, max: 10MB)No
HTTP MethodPOST, PUT, GET, or DELETE (default: POST; webhooks carry a JSON body that is HMAC-signed, so POST is the secure default)Yes
Require TimestampRequire a timestamp on requests for replay protection (default: false)No
Max Timestamp Age (seconds)Maximum accepted timestamp age (default: 300)No
Rate Limit (per minute)Maximum requests per minute (default: 10)No
Rate Limit (per hour)Maximum requests per hour (default: 100)No

Provider-Specific Signature Verification

Each provider uses its own signature header:

ProviderSignature Header
GitHubX-Hub-Signature-256
StripeStripe-Signature (with timestamp)
SlackX-Slack-Signature
GenericX-Webhook-Signature

Security Features

The webhook trigger includes the following security measures:

  • Authorized calls only, never unauthenticated
  • HMAC verification with timing-safe comparison and secret rotation support
  • Optional replay protection via timestamp validation
  • Per-webhook rate limiting (configurable)
  • Request size limits and optional IP whitelisting with CIDR support
  • Generic error messages to prevent detail leakage; secrets are never logged

Outputs

FieldTypeDescription
providerstringWebhook provider (generic, github, stripe, slack)
event_typestring or nullThe provider's event (for example, push); null for generic
headersobjectRequest headers
bodyobjectThe request body (JSON). A call with flat inputs (REST API, agent tool) has them here. A body over 10KB is also stored in full, at request_s3_url
parsed_dataobjectProvider-specific fields parsed from the body
methodstringHTTP method
clientIPstringCaller's IP address
signatureVerifiedbooleanWhether an HMAC signature was verified

Execution metadata also records success, trigger_type, provider, event_type, signatureVerified, and body_size.

Webhook URL Pattern

/api/v1/webhooks/{workflowId}
Signature Verification

The HMAC secret is only needed when external signed services (GitHub, Stripe, Slack, or generic HMAC callers) will call this webhook. When you use it, choose a strong random value; it is stored encrypted.


Schedule​

Trigger workflows on a time-based schedule. Scheduled workflows are deployed as scheduled jobs.

Use Cases

  • Daily report generation
  • Periodic data synchronization
  • Scheduled cleanup and maintenance tasks
  • Batch processing jobs on recurring intervals

Schedule Types

1. Run at intervals

Choose an interval that divides the hour or day evenly: every 1, 2, 3, 4, 5, 6, 10, 12, 15, 20 or 30 minutes, or every 1, 2, 3, 4, 6, 8 or 12 hours. For once a day use Run daily; for any other cadence, a cron expression.

2. Run daily

Run once per day at a time in 24-hour format (for example, 09:00).

3. Custom (Cron)

Use standard 5-field cron syntax:

# Every weekday at 9 AM
0 9 * * 1-5

# First day of every month at midnight
0 0 1 * *

# Every 30 minutes during business hours
*/30 9-17 * * 1-5

# Quarterly on the 1st at 6 AM
0 6 1 */3 *

Cron Format Reference

+-------------- minute (0 - 59)
| +------------ hour (0 - 23)
| | +---------- day of month (1 - 31)
| | | +-------- month (1 - 12)
| | | | +------ day of week (0 - 6) (Sunday=0)
| | | | |
* * * * *

Configuration

SettingDescriptionRequired
Schedule TypeRun at intervals, Run daily, or Custom (Cron) (default: Run daily)Yes
IntervalHow often, from the even intervals above (default: every hour)With Run at intervals
Time (24-hour format)Time of day (default: 09:00)With Run daily
Cron ExpressionStandard 5-field cron (default: 0 9 * * *)With Custom (Cron)
TimezoneUTC, Eastern, Central, Pacific, London, or Tokyo (default: UTC)Yes

A schedule runs only while its workflow is deployed; to stop it, undeploy the workflow. Deploying with an invalid cron, a daily time that is not HH:MM, or an interval not in the list is refused with the reason.

Outputs

FieldTypeDescription
trigger_timestringWhen the scheduler fired (ISO 8601, UTC)
local_timestringtrigger_time in the schedule's timezone
cron_expressionstringThe cron the schedule runs on
timezonestringThe schedule's IANA timezone
next_executionstringThe schedule's next run, in its timezone
execution_contextobjectday_of_week, date and time of local_time

Execution metadata also records success, trigger_type, cron, and timezone.

Timezone Configuration

Always specify the correct timezone for scheduled workflows. The schedule executes based on the configured timezone, which may differ from your local time or server time.


REST API Trigger​

Expose a workflow as an authenticated REST API endpoint with role-based access control and input validation.

Use Cases

  • Custom API endpoints for internal microservices
  • Mobile and web application backends
  • Third-party integration endpoints
  • Synchronous request-response workflows

Configuration

A REST API workflow is called at POST /api/v1/workflows/<workflow id>/execute; its status (GET /api/v1/workflows/:id/status) gives the address.

SettingDescriptionRequired
HTTP MethodPOST, GET, PUT, DELETE, PATCH, or Any Method (default: POST)Yes
Require AuthenticationWhether callers must be authenticatedNo (default: true)
Allowed RolesRoles permitted to call the endpoint: owner, admin, user, viewer (default: owner, admin, user)No
Expected InputsInput field definitions with type and validationNo
Default Query ParametersDefault query parameters as JSONNo

Expected Inputs Schema

Define expected input fields with validation:

PropertyDescription
NameField name (e.g., userId)
TypeData type: string, number, integer, boolean, array, object
RequiredWhether the field is mandatory
DefaultDefault value if not provided
DescriptionField description for API documentation

Outputs

FieldTypeDescription
methodstringHTTP method
bodyobjectRequest body
queryobjectQuery parameters
headersobjectRequest headers
paramsobjectURL path parameters
userobjectAuthenticated user info

Execution metadata also records success, authenticated, processedAt and requestId.

Response Handling

Use the webhook-response destination node to send structured responses back to the API caller. The workflow output returned by the webhook-response node becomes the HTTP response body.


Chat Trigger​

Trigger workflows from chat and conversational interfaces with automatic conversation history management.

Use Cases

  • Conversational AI assistants
  • Customer support chatbots
  • Interactive Q&A workflows
  • Multi-turn dialogue systems

Configuration

SettingDescriptionRequired
Session ID FieldInput field name containing the session/conversation IDNo (default: sessionId)
Message FieldInput field name containing the message contentNo (default: message)
Include HistoryInclude previous messages in the conversationNo (default: true)
Max History LengthMaximum number of history messages to include (1-50)No (default: 10)

Inputs

FieldTypeRequiredDescription
messagestringYesChat message content
sessionIdstringNoSession/conversation identifier
userIdstringNoUser identifier

Outputs

FieldTypeDescription
messagestringMessage content
sessionIdstringSession/conversation ID
historyarrayPrevious conversation messages
currentMessageobjectCurrent message: role, content, timestamp, userId, userName
userIdstringUser identifier, when the input has one
userNamestringUser name, when the input has one
channelstringChannel the message came from (default default)
messageMetadataobjecttimestamp, historyLength and isFirstMessage

Email Trigger​

Start a workflow when new emails arrive in an IMAP mailbox. Deploy the workflow and it checks the mailbox every Poll Interval; each check passes on the matching emails that no earlier check returned, oldest first, up to Max Emails (the rest wait for the next check). A check that finds none runs nothing after the trigger. A draft run checks once.

Use Cases

  • Automated email processing and routing
  • Support ticket creation from incoming emails
  • Invoice and attachment extraction
  • Email-driven approval workflows

Configuration

SettingDescriptionRequired
IMAP HostIMAP server hostname (e.g., imap.gmail.com)Yes
PortIMAP port (993 for SSL, 143 for non-SSL)No (default: 993)
Use SSLConnect using SSL/TLSNo (default: true)
UsernameEmail account usernameYes
PasswordEmail account password or app-specific password (encrypted)Yes
MailboxMailbox/folder to checkNo (default: INBOX)
Search CriteriaWhich emails a check considersNo (default: Unread)
Mark as ReadMark the emails a check returns as read in the mailbox. Either way, an email is returned onceNo (default: true)
Max EmailsMost new emails one check returns (1-100)No (default: 10)
Poll IntervalHow often the deployed workflow checks: 1, 2, 3, 4, 5, 6, 10, 12, 15, 20 or 30 minutes, or 1, 2, 3, 4, 6, 8 or 12 hoursYes (default: 15 minutes)

Search Criteria Options

ValueDescription
UNSEENUnread emails only
ALLAll emails
FLAGGEDFlagged/starred emails
RECENTRecent emails
TODAYEmails received today (since midnight UTC)

Outputs

FieldTypeDescription
emailsarrayEmail objects with id (the IMAP UID), messageId, subject, from, to, date, bodyText, bodyHtml, attachments (each filename, path, contentType, size) and hasAttachments
countnumberNumber of emails returned
mailboxstringMailbox name that was searched
searchCriteriastringSearch criteria used

Execution metadata also records host, mailbox and emailsFetched.


Form Trigger​

Accept public form submissions with configurable fields, file uploads, reCAPTCHA protection, and rate limiting.

Use Cases

  • Contact and inquiry forms
  • File upload portals
  • Survey and feedback collection
  • Support ticket submission
  • Application and registration workflows

Your form's address

Deploy the workflow: only a deployed workflow accepts submissions, with its deployed version's settings. The Form node's Configuration tab shows the address (Copy copies it):

POST /api/v1/forms/{workflowId}

Post the form as multipart/form-data (needed for file uploads) or application/json. Browsers on other sites may post to it.

Configuration

SettingDescriptionRequired
Form IDIdentifier passed to the workflow as formIdNo (default: form)
Enable CAPTCHARequire reCAPTCHA v3 verificationNo (default: on)
reCAPTCHA Secret KeyGoogle reCAPTCHA v3 secret key (stored encrypted). While CAPTCHA is on, a form without it refuses every submissionWith CAPTCHA
CAPTCHA Score ThresholdMinimum reCAPTCHA score (0.0-1.0)No (default: 0.5)
Rate Limit (per hour)Maximum submissions per hour from one IP address (1-1000)No (default: 10)
Max File Size (MB)Largest file accepted (1-100); up to 10 files and 50 fields per submissionNo (default: 10)
Form FieldsThe fields the form sends, each with a name, type and Required flagNo
Validation RulesExtra checks per defined field (JSON)No
Success MessageReturned to the submitter when the submission is acceptedNo
Redirect URLReturned to the submitter as redirect, for the page to go toNo

Fields and validation

Each submission is checked in the run against the form's fields; the result is the output's validation. The run goes ahead either way, so branch on validation.is_valid.

  • Required fields must be present. A File Upload field is present when a file is uploaded under its name.
  • Email, Number and Checkbox values are type-checked; other types (text, textarea, select, date, url, tel) are taken as sent.
  • A submitted value with no field defined for it is kept and listed in validation.warnings.

Validation Rules are JSON keyed by field name, and apply to defined fields only: min_length, max_length, pattern (a regex the value must match from its start), and min_value / max_value for Number fields.

{"name": {"min_length": 2}, "age": {"min_value": 18, "max_value": 120}}

Spam protection

  • CAPTCHA: Google reCAPTCHA v3 (score based, no puzzle). Send the token as the g-recaptcha-response field. Get keys from Google reCAPTCHA Admin.
  • Honeypot: add a hidden input named _honeypot. A submission that fills it gets the success response but does not run.
  • Rate limit: over the limit, the submitter gets 429 with a Retry-After header.

Responses to the submitter

StatusWhen
200Accepted: {success, message, id} (the run's id), plus redirect when set. Validation happens in the run
400The form could not be read, or CAPTCHA was missing or failed
402A budget or the organization's credits are exhausted
404No deployed workflow with a Form trigger at that address
409The workflow is already running and does not take concurrent runs
429Too many submissions from this address
500CAPTCHA is on but no secret key is set, or the run could not start

Outputs

FieldTypeDescription
formIdstringForm identifier
form_dataobjectSubmitted values, by field name (a submission over 5,000 characters is also stored, at form_data_s3_url)
filesarrayUploaded files: name, size, mime_type, fieldName, s3_url
validationobjectis_valid, errors, warnings, validated_field_count
submission_metadataobjecttimestamp, ipAddress, userAgent, referrer

Execution metadata also records success, trigger_type, formId, field_count, file_count, and is_valid.


File Trigger​

Start a workflow when files are added to or updated in an S3 data source. Deploy the workflow and it checks the location every Poll Interval; each check passes on the files modified since the previous check, oldest first. A check that finds none runs nothing after the trigger.

The first check records where the location stands and passes on nothing, so turning the trigger on does not replay files already there. Changing the bucket or prefix starts over the same way.

Use Cases

  • Process new files dropped into a bucket prefix
  • Monitor data landing zones for new CSV/JSON files
  • Re-run a pipeline when a reference file is updated

Configuration

SettingDescriptionRequired
S3 Data SourceThe S3 data source to watch (its bucket and credentials)Yes
PrefixWatch only keys under this prefix (empty = the whole bucket)No
Filename Pattern (Regex)Only files whose name matches this regular expression, e.g. .*\.csv$No
Poll IntervalHow often the deployed workflow checks: 1, 2, 3, 4, 5, 6, 10, 12, 15, 20 or 30 minutes, or 1, 2, 3, 4, 6, 8 or 12 hoursYes (default: 15 minutes)

Outputs

FieldTypeDescription
filesarrayFiles added or updated since the previous check, each with key, name, size, lastModified, etag and uri (s3://bucket/key)
countnumberNumber of files
bucketstringThe data source's bucket
prefixstringThe watched prefix

To process each file, follow the trigger with a Loop over files and an S3 Source (download) or a parser.


RSS Feed Trigger​

Start a workflow when an RSS or Atom feed has new items. Deploy the workflow and it checks the feed every Poll Interval; with Only New Items, each check passes on the items no earlier check returned. A check that finds none runs nothing after the trigger.

Use Cases

  • News and content aggregation
  • Blog post monitoring and notifications
  • Competitor content tracking
  • Automated content curation pipelines

Configuration

SettingDescriptionRequired
Feed URLURL of the RSS or Atom feedYes
Poll IntervalHow often the deployed workflow checks: 1, 2, 3, 4, 5, 6, 10, 12, 15, 20 or 30 minutes, or 1, 2, 3, 4, 6, 8 or 12 hoursYes (default: 15 minutes)
Max ItemsMost items one check reads from the feed (1-100)No (default: 20)
Only New ItemsLeave out items an earlier check returnedNo (default: true)
Include Full ContentInclude full article content when availableNo (default: true)

Outputs

FieldTypeDescription
itemsarrayFeed items with id, title, link, published, author, categories, summary, and content when Include Full Content is on
countnumberNumber of items returned
feedTitlestringTitle of the feed
feedLinkstringThe feed's website link
feedDescriptionstringThe feed's description
feedUrlstringURL of the feed that was fetched

SSE Trigger​

Trigger workflows when Server-Sent Events are received from an external SSE endpoint. Supports automatic reconnection and event type filtering.

Use Cases

  • Real-time event stream processing
  • Live data feed consumption
  • Server push notification handling
  • Streaming API integration

Configuration

SettingDescriptionRequired
SSE Endpoint URLURL of the SSE endpoint to connect toYes
Event TypesComma-separated event types to listen for (empty listens to all)No
HeadersCustom headers for the SSE connection (key-value pairs)No
Auto ReconnectAutomatically reconnect on connection lossNo (default: true)
Reconnect Delay (ms)Delay before reconnection attemptNo (default: 3000)

Outputs

FieldTypeDescription
eventTypestringSSE event type
dataanyParsed event data (JSON if valid, otherwise string)
eventIdstringSSE event ID

Error Trigger​

The Error trigger (error-trigger) starts a deployed workflow when a run of another workflow in your organization fails: its status is failed, error or timeout. Use it for one place that handles failures, such as logging them, opening an incident or alerting a team.

Configuration

SettingDescriptionRequired
Filter by WorkflowStart only for failed runs of these workflows, picked by name (none = any workflow in your organization). Through the API, filterByWorkflow is a list of workflow idsNo
Filter by Node TypesStart only when one of the run's failed nodes has one of these node types, such as code or llm (empty = any)No
Include Stack TraceInclude the failed node's stack trace in the outputNo (default: true)
  • The filters are applied before a run starts: a failure they do not match starts nothing.
  • The run is started as the user who deployed the workflow, who must be able to use the failed workflow. It appears in the workflow's executions with the trigger error.
  • A workflow's own failed run never starts it.

Outputs

FieldTypeDescription
errorobjectmessage (the failed node's error, else the run's; it names the node as on the canvas, e.g. Node 'Code' failed: ...), type (the run's status: failed, error or timeout), timestamp, and stackTrace when included
workflowobjectThe failed run: workflowId, workflowName, executionId
nodeobjectThe failed node the trigger heard the run for: nodeId, nodeType, nodeName (the first failed node, or with Filter by Node Types the first of those types; empty when the run failed before any node ran)
contextobjectrunErrorMessage and failedNodes, every failed node of the run

Multi-Modal Input​

Accept mixed media types as workflow input, including text, images, audio, and files in a single request.

Use Cases

  • AI workflows requiring multiple input types (text + image)
  • Document processing with mixed media
  • Multi-format data ingestion pipelines
  • Interactive applications with diverse input types

Configuration

SettingDescriptionRequired
Accepted TypesArray of accepted media types (text, image, audio, file)No (default: all)
Max File Size (MB)Maximum file size in megabytes (1-100)No (default: 10)
Max ItemsMaximum number of input items (1-50)No (default: 10)

Outputs

FieldTypeDescription
itemsarrayEach item with type, index, metadata and either content (text, or a URL) or path (binary content, stored for the run); an item that could not be processed has type error and the error
inputSummaryobjecttotalItems, byType (count per type) and acceptedTypes
textContentstringAll text items joined by new lines (null when there are none)
mediaItemsarrayEvery item that is not text

Event​

The Event trigger (event) starts a deployed workflow when a platform event happens. A draft never starts on its own: deploy the workflow for its Event trigger to listen.

Configuration

SettingDescriptionRequired
Event TypesWorkflow Completed, Workflow Failed, AI Model Deployed or Undeployed, Data Uploaded, Add-on Status Changed, Marketplace App Installed or UninstalledNo (empty with no custom types = every event)
Custom Event TypesYour own event names, such as order.created, emitted through POST /api/v1/workflows/eventsNo
Source WorkflowHear Workflow Completed and Workflow Failed only from this workflow's runs (Any workflow = every workflow you may use)No

Run this workflow when another one ends. When a run ends, the platform emits workflow.completed (the run completed, completed with gaps, or ended in partial success) or workflow.failed (it failed, errored or timed out); a stopped or cancelled run emits nothing. To run workflow B whenever workflow A completes, give B an Event trigger with Event Types = Workflow Completed and Source Workflow = A, then deploy B. Each of A's completed runs, draft or deployed, starts a run of B.

  • B's run is started as the user who deployed B, who must be able to use A; it appears in B's executions with the trigger event.
  • Only workflows of A's organization hear A's runs, and a workflow's own runs never start it again.
  • If B is already running at its concurrency limit, that event does not start it; the refusal is recorded on A's run.

Outputs

FieldTypeDescription
event_typestringThe event, e.g. workflow.completed
event_dataobjectThe event's payload. For a run's end: workflow_id, workflow_name, execution_id, status, duration_ms, error_message (failed runs) and trigger_type
sourcestringWho emitted it: workflow-controller for a run's end, otherwise what the emitter passed
emitted_at / received_atstringWhen it was emitted and received (ISO 8601)

To be told about a run's end yourself rather than start a workflow, use an alert rule.


Queue​

The Queue trigger (queue) runs the workflow once per message on a queue: an SQS queue, a RabbitMQ queue or a Kafka topic. Deploy the workflow and it consumes the queue; for each message it starts a run with the message as the trigger's output, and acknowledges the message when that run ends, whatever its outcome (SQS deletes it, RabbitMQ acks it, Kafka commits its offset once every earlier offset of its partition has ended too).

Configuration

SettingDescriptionRequired
QueueData source (an SQS, RabbitMQ or Kafka data source) or Add-on (a RabbitMQ or Kafka add-on)Yes
Queue Data Source / Queue Add-onWhich one. An SQS data source is one queue (its queue URL)Yes
Queue / TopicThe RabbitMQ queue or Kafka topicRabbitMQ, Kafka
Kafka Consumer GroupKafka only; default: one for this workflowNo
  • The workflow's Max Concurrent Runs (Lifecycle tab; 1-10, default 1) caps how many messages' runs are in flight.
  • While a message's run is in flight, SQS keeps it hidden from other consumers and RabbitMQ holds it unacked. A run the platform refuses to start (a spent budget, the run limit) keeps its message and is retried.
  • Undeploying or restarting the workflow acknowledges nothing unfinished, so the queue hands those messages out again.
  • The workflow's lifecycle policy must be Always On or Scheduled Window.
  • A RabbitMQ queue that does not exist yet is waited for: the deployed workflow keeps checking, and starts consuming once the first publish (a RabbitMQ destination declares its queue) creates it. A broker restart is ridden out the same way.
  • To put messages on the queue, send them to the queue itself: an SQS, RabbitMQ or Kafka destination node, or the producer's own client.

Outputs

FieldTypeDescription
messageanyThe message body: its JSON value, or its text
messageIdstringThe broker's id (Kafka: topic:partition:offset)
attributesobjectSQS message attributes, RabbitMQ headers, or the Kafka key and headers
prioritynumber or nullThe RabbitMQ message priority (a priority queue hands out higher priorities first)
sourcestringsqs, rabbitmq or kafka
enqueued_atstring or nullWhen the message was put on the queue
processed_atstringWhen its run started

Agent Trigger​

The Agent trigger (agent-trigger) sends a message to an agent endpoint and captures the streamed response, which makes it useful for scheduled agent heartbeats and agent-driven workflows. Configure the agent URL, the message to send (sent exactly as written), a thread pattern that controls conversation grouping (daily, weekly, single, or per execution; default daily), and a response timeout (10-600 seconds, default 300). The trigger outputs the thread ID, the agent's response text, the tools it called, and the run duration.


Task Due​

The Task Due trigger (task-due-trigger) fires when a platform task's due date is reached. You can filter which task firings start the workflow by subject kind, subject app, or assigned agent, and bound how many times a task must have fired before matching (for example, set a maximum fire count of 0 to fire only on a task's first activation). Leave all filters empty to match all due tasks within the workflow's tenant scope. The triggered workflow receives the full task object, including its description, subject reference, due date, recurrence, fire count, and tags.


Streaming Workflow Triggers​

Streaming workflows use a separate trigger set from the batch palette. It includes the WebSocket trigger (websocket-trigger), which accepts real-time WebSocket connections for bidirectional audio and text streaming. See the streaming palette in the workflow builder for the full set.


Architecture Notes​

Trigger Execution Model​

Triggers are the entry point for every workflow execution. Each workflow has exactly one trigger node, and the trigger type determines how the workflow is invoked:

  • Request-based triggers (webhook, REST API, chat, form, multi-modal input) are invoked through the platform backend when an HTTP request arrives at the appropriate endpoint.
  • Queue triggers run a deployed workflow once per message on its SQS, RabbitMQ or Kafka queue.
  • Schedule triggers run on the configured schedule. When the schedule fires, the workflow executes.
  • Polling triggers (email, RSS, file) run a deployed workflow every Poll Interval; each check passes on only what is new, and a check with nothing new runs nothing after the trigger.
  • Event-driven triggers (event, error, SSE, task due) react to events from the platform, other workflows, or external systems.

Common Patterns​

Webhook Event Routing​

Webhook Trigger (GitHub)
-> Switch-Case (Route by event_type)
-> [push] Process push event
-> [pull_request] Process PR event
-> [issues] Process issue event

Scheduled Batch Processing​

Schedule Trigger (Daily at 2 AM)
-> REST API Call (Fetch records)
-> Loop (Process each record)
-> MongoDB Destination (Update database)
-> SMTP (Send completion report)

Form Submission Processing​

Form Trigger (with CAPTCHA)
-> Conditional (validation.is_valid)
-> [true] MongoDB Destination (Store submission) -> SMTP (Notify the team)
-> [false] Slack (Flag the rejected submission)

Centralized Error Handling​

Error Trigger (Filter by Node Types: llm, http-request)
-> Switch-Case (Route on error.type)
-> [timeout] Alert on-call team
-> [default] Log to monitoring system

Troubleshooting​

Webhook Not Triggering​

  • Verify the webhook URL matches the pattern /api/v1/webhooks/{workflowId}
  • Confirm the caller is authorized: a valid REST API key, or (for external signed services) an HMAC secret matching what the service is configured with
  • Check that the workflow is deployed and active
  • If using IP whitelisting, verify the sender IP is in the allowed range
  • Review execution logs for signature verification failures

Schedule Not Running​

  • Verify the workflow is deployed
  • Confirm timezone settings are correct for the intended execution time
  • Review the workflow's run history in the Workflow Monitor
  • Validate the cron expression syntax

REST API Returning Errors​

  • Verify authentication credentials and user roles match the allowedRoles configuration
  • Check that the request body matches the expectedInputs schema
  • Ensure the HTTP method matches the configured method
  • Confirm the workflow is deployed and the call goes to POST /api/v1/workflows/<workflow id>/execute

Email Trigger Not Processing​

  • Test IMAP connectivity with the configured host and port
  • Verify credentials (use app-specific passwords for Gmail)
  • Confirm SSL settings match the server requirements
  • Check that the search criteria matches available emails
  • Verify the mailbox name is correct

Next Steps​