Skip to content

Triggers

Triggers define when and how a workflow executes. Every workflow can have one or more triggers, and each trigger type gives you a different way to start an execution — from an HTTP request, a cron schedule, a form submission, or an external event.

Webhook triggers turn your workflow into an API endpoint. QuickFlo generates a unique URL that accepts HTTP requests — when a request comes in, the workflow executes with the request data as input and can return a fully customizable HTTP response.

This means you can build complete REST APIs, webhook receivers, and backend services entirely inside QuickFlo.

Webhook trigger configuration showing the endpoint URL, HTTP method selector, authentication toggle, and webhook secret
FieldDescription
NameHuman-readable identifier — also used as the URL slug (e.g., query-leads becomes https://run.quickflo.app/w/...query-leads)
MethodHTTP method the endpoint accepts — GET, POST, PUT, PATCH, or DELETE
AuthenticationWhen enabled, generates a Webhook Secret — callers must include it as a Bearer token in the Authorization header or as a ?token= query parameter
Expose ErrorsWhen enabled, error details from failed executions are returned in the HTTP response instead of a generic error

The full HTTP request is available in your workflow via {{ initial.* }}:

{{ initial.name }} // body field
{{ initial.webhook.query.page }} // query parameter
{{ initial.webhook.headers['x-api-key'] }} // request header
{{ initial.webhook.body }} // raw request body
{{ initial.webhook.files }} // uploaded files (multipart)

For JSON request bodies, all top-level fields are spread directly onto initial for convenience. See Template Syntax — Webhook Triggers for the full reference.

By default, webhook-triggered workflows run asynchronously — the caller receives a 202 Accepted response with an executionId immediately. To return a custom response, add a Return step to your workflow. QuickFlo detects this automatically and switches to synchronous execution so the caller waits for the result.

The Return step’s Webhook Response tab lets you configure the status code, response type, and body. QuickFlo supports three response formats:

Return structured JSON data with key-value pairs. Use template expressions to include data from any step in the workflow.

Return step Webhook Response tab configured with JSON response type showing key-value pairs for slots and next_available fields
FieldDescription
Status CodeHTTP status code (200, 201, 400, 500, etc.)
Response BodyKey-value pairs — each key becomes a JSON field in the response

Return raw text content with a custom Content-Type. Perfect for XML APIs, plain text responses, HTML pages, or any non-JSON format.

Return step Webhook Response tab configured with Raw response type showing XML content with application/xml content type
FieldDescription
Content-TypeMIME type for the response (e.g., application/xml, text/plain, text/html)
Response BodyRaw text content — supports template expressions

Return binary file content for downloads. The caller’s browser receives a file download prompt with the filename you specify.

Return step Webhook Response tab configured with File response type showing MIME type, base64 file content, and filename fields
FieldDescription
MIME TypeFile content type (e.g., application/pdf, text/csv, application/octet-stream)
File Content (Base64)Base64-encoded file data — reference a step output containing the file content
FilenameThe download filename (e.g., report.pdf) — sets the Content-Disposition header
Terminal window
# Query an endpoint that returns JSON
curl https://run.quickflo.app/w/@QMnb/query-leads \
-H "Authorization: Bearer <secret>" \
-H "Content-Type: application/json" \
-d '{"region": "US", "limit": 10}'
# Response (from the Return step):
# {
# "slots": [...],
# "next_available": "2026-02-20T09:00:00Z"
# }

Schedule triggers run workflows automatically on a recurring basis using cron expressions. Use them for periodic data syncs, report generation, cleanup tasks, or any automation that runs on a timer.

Schedule trigger configuration showing cron expression, human-readable summary, environment selection, and initial data
FieldDescription
NameHuman-readable identifier (e.g., daily-6am-est)
Cron ExpressionStandard 5-field cron syntax — minute, hour, day-of-month, month, day-of-week
EnvironmentWhich environment to use when the schedule fires (loads that environment’s variables and connections)
Initial DataOptional JSON object passed as {{ initial.* }} to the workflow on each execution
ExpressionSchedule
0 6 * * *Every day at 6:00 AM (UTC)
0 9 * * 1-5Weekdays at 9:00 AM
*/15 * * * *Every 15 minutes
0 0 1 * *First day of every month at midnight
0 */2 * * *Every 2 hours
30 8 * * 1Every Monday at 8:30 AM

QuickFlo displays a human-readable summary of the cron expression below the input field (e.g., “At 06:00 AM, every day (UTC)”). Need help building expressions? The config links to crontab.guru.

The Initial Data field accepts a JSON object that becomes available in the workflow as {{ initial.* }}:

{
"reportType": "daily",
"emailTo": "admin@example.com"
}
{{ initial.reportType }} // "daily"
{{ initial.emailTo }} // "admin@example.com"

This is useful for parameterizing a single workflow that runs on multiple schedules with different configurations — for example, one schedule for a daily report and another for a weekly summary, both using the same workflow with different reportType values.


Form triggers let you create hosted forms with a drag-and-drop builder that trigger a workflow on submission. Forms support custom branding, field validation, password protection, file uploads, CSV bulk submission, and fully customizable response screens.

See the Form Triggers guide for the complete walkthrough.


Event triggers listen for real-time events from connected services. When a matching event occurs, the workflow starts automatically with the event payload as input data.

Event triggers are configured by selecting a connection and an event type. The available events depend on the connected service — for example, a Five9 connection can listen for agent state changes, call events, or queue updates.

Event payloads are spread directly onto {{ initial.* }}:

{{ initial.eventType }}
{{ initial.data.agentId }}
{{ initial.data.newState }}

The structure of the event data depends on the source service. Check the event payload in the Executions panel after a test event to see the exact field structure.


A single workflow can have multiple triggers of different types. For example, you might have:

  • A webhook trigger for on-demand API calls
  • A schedule trigger for nightly batch processing
  • A form trigger for manual submissions from an internal team

All triggers feed into the same workflow — the trigger type and data are available via {{ initial.* }}. Use the Executions page to see which trigger started each execution.