How a flow starts: by hand, on a schedule, from a webhook or from a public form.
Generated from the node definitions in
src/lib/flow/node/trigger/and the English labels (component.flow.node.trigger). Every node also has the common settings.
Contents
- Flow input —
flow/input - Form —
trigger/form - Manual —
trigger/manual - Schedule —
trigger/schedule - Webhook —
trigger/webhook - Gmail trigger —
trigger/gmail - Google Sheets trigger —
trigger/sheets - Google Drive trigger —
trigger/drive - Google Calendar trigger —
trigger/calendar - Notion trigger —
trigger/notion - Airtable trigger —
trigger/airtable - Email (IMAP) trigger —
trigger/imap - Telegram trigger —
trigger/telegram - MCP server —
trigger/mcp - Chat —
trigger/chat
Flow input
flow/input · icon log-in · trigger
Starts a flow that other flows can call
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
mode | Input | select: sample (A JSON example), field (Typed fields), any (Accept anything) | "sample" | |
sample | Sample input (when run directly) | json | mode: sample | |
field | Fields | list of { name: text, type: select, required: boolean } | mode: field |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
"the item it got (unchanged), or what its code returns"
Example node
{
"id": "input",
"type": "flow/input",
"name": "Flow input",
"field": {
"sample": {}
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Form
trigger/form · icon clipboard-list · trigger
Starts the published flow when its public form is sent
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
token | Form URL | token (URL /form/<token>) | ||
title | Title | text | "Tell us" | |
description | Description | textarea | ||
question | Questions | list of { name: text, label: text, kind: select, required: boolean, option: text, isMultiple: boolean, accept: text, placeholder: text, default: text, html: textarea } | [{"name": "message", "label": "Message", "kind": "textarea", "required": true}] | |
button | Button label | text | "Send" | |
respond | Respond | select: submit (When it's sent), last (When the last node finishes (next pages: Form nodes)) | "submit" | |
end | End page | select: text (A message), redirect (Go to a URL) | "text" | |
redirect | Redirect to (URL) | text | end: redirect | |
thanks | Thank-you message | text | "Thanks, we got it." | end: text |
isCaptcha | Captcha | boolean | true | |
limitMinute | Sends a minute (0: no limit) | number | 0 | |
limitDay | Sends a day (0: no limit) | number | 0 |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"answer": "unknown",
"submittedAt": "string"
}
Example node
{
"id": "form",
"type": "trigger/form",
"name": "Form",
"field": {
"title": "Tell us",
"question": [
{
"name": "message",
"label": "Message",
"kind": "textarea",
"required": true
}
],
"thanks": "Thanks, we got it."
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Manual
trigger/manual · icon play · trigger
Starts when you press Run
| Field | Label | Kind | Default | Shown for |
|---|
No fields.
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"startedAt": "string"
}
Example node
{
"id": "manual",
"type": "trigger/manual",
"name": "Manual",
"field": {},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Schedule
trigger/schedule · icon calendar-clock · trigger
Runs the published flow every few minutes, hours or days
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
every | Every | number | 1 | unit: minutes, hours, days |
unit | Unit | select: minutes, hours, days, cron | "hours" | |
at | At (HH:MM, flow timezone; days only) | text | unit: days | |
cron | Cron (minute hour day month weekday) | text | "0 9 * * 1-5" | unit: cron |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"startedAt": "string",
"every": "number",
"unit": "string"
}
Example node
{
"id": "schedule",
"type": "trigger/schedule",
"name": "Schedule",
"field": {
"every": 1,
"unit": "hours"
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Webhook
trigger/webhook · icon webhook · trigger
Starts the published flow when its URL is called
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
token | URL | token (URL /api/hook/<token>) | ||
method | Methods | multi-select: POST, GET, PUT, PATCH, DELETE, HEAD | ["POST"] | |
auth | Auth | select: none, credential (A credential) | "none" | |
credential | Credential (basic, header, bearer or JWT) | credential (http/basic, http/header, http/bearer, http/jwt) | auth: credential | |
respond | Respond | select: immediately (At once (202 with the run id)), last (When the last node finishes), node (With a Respond node), stream (Stream (server-sent events)) | "immediately" | |
data | Response data | select: all (All items), first (First item's JSON), file (First item's file), none (No body) | "first" | respond: last |
status | Response code | number | respond: immediately, last | |
waitMs | Wait for the answer (ms, at most 5 minutes) | number | 60000 | respond: last, node, stream |
header | Response headers (JSON) | json | respond: immediately, last | |
isRaw | Raw body (keep the text as it came) | boolean | false | |
limitMinute | Calls a minute (0: no limit) | number | 60 | |
limitDay | Calls a day (0: no limit) | number | 0 | |
origin | CORS origins (comma list, * for any) | text | ||
ip | IP allowlist (one per line, ranges like 10.0.0.0/8) | textarea | ||
isBot | Ignore bots | boolean | false |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"method": "string",
"header": "unknown",
"query": "unknown",
"body": "unknown",
"jwt": "unknown"
}
Example node
{
"id": "webhook",
"type": "trigger/webhook",
"name": "Webhook",
"field": {
"method": "POST"
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}
Gmail trigger
trigger/gmail · icon mail · plan feature integration
Starts when a new email arrives in Gmail.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
credential | Credential | credential (google/oauth2) | ||
event | Event | select: message.new (A new email) | "message.new" | |
query | Search | text | event: message.new | |
every | Check every (minutes) | number | 5 |
Output dots: next.
Google Sheets trigger
trigger/sheets · icon sheet · plan feature integration
Starts when rows are added or changed.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
credential | Credential | credential (google/oauth2) | ||
event | Event | select: row.new (A row is added), row.changed (A row is added or changed) | "row.new" | |
spreadsheetId | Spreadsheet id | text | event: row.new, row.changed | |
range | Range (Sheet1!A:D) | text | "Sheet1!A:Z" | event: row.new, row.changed |
isHeader | First row names the columns | boolean | true | event: row.new, row.changed |
every | Check every (minutes) | number | 5 |
Output dots: next.
Google Drive trigger
trigger/drive · icon hard-drive · plan feature integration
Starts when files are added or changed.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
credential | Credential | credential (google/oauth2) | ||
event | Event | select: file.new (A file is added), file.updated (A file is added or changed) | "file.new" | |
query | Search | text | "trashed = false" | event: file.new, file.updated |
every | Check every (minutes) | number | 5 |
Output dots: next.
Google Calendar trigger
trigger/calendar · icon calendar · plan feature integration
Starts when events are added or changed.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
credential | Credential | credential (google/oauth2) | ||
event | Event | select: event.new (An event is added), event.updated (An event is added or changed) | "event.new" | |
calendarId | Calendar id | text | "primary" | event: event.new, event.updated |
from | From (ISO time) | text | event: event.new, event.updated | |
until | Until (ISO time) | text | event: event.new, event.updated | |
every | Check every (minutes) | number | 5 |
Output dots: next.
Notion trigger
trigger/notion · icon notebook · plan feature integration
Starts when database pages are added or changed.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
credential | Credential | credential (notion/token) | ||
event | Event | select: page.new (A page is added), page.updated (A page is added or changed) | "page.new" | |
databaseId | Database id | text | event: page.new, page.updated | |
filter | Filter (Notion JSON) | json | event: page.new, page.updated | |
sort | Sorts (Notion JSON) | json | event: page.new, page.updated | |
every | Check every (minutes) | number | 5 |
Output dots: next.
Airtable trigger
trigger/airtable · icon table · plan feature integration
Starts when records are added or changed.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
credential | Credential | credential (airtable/token) | ||
event | Event | select: record.new (A record is added), record.updated (A record is added or changed) | "record.new" | |
base | Base id | text | event: record.new, record.updated | |
table | Table (name or id) | text | event: record.new, record.updated | |
formula | Filter formula | text | event: record.new, record.updated | |
view | View | text | event: record.new, record.updated | |
every | Check every (minutes) | number | 5 |
Output dots: next.
Email (IMAP) trigger
trigger/imap · icon inbox · plan feature integration
Starts a run for each new email in a mailbox.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
credential | IMAP credential | credential (email/imap) | ||
mailbox | Mailbox | text | "INBOX" | |
search | Which emails | select: unseen (Unread ones), all, custom (A custom search) | "unseen" | |
query | IMAP search (JSON, e.g. {"from": "[email protected]"}) | json | search: custom | |
action | After | select: read (Mark it read), leave (Leave it as it is) | "read" | |
format | Format | select: simple, resolved (With its headers), raw (Raw source) | "simple" | |
isAttachment | Download attachments (as files) | boolean | false | |
every | Check every (minutes) | number | 5 |
Output dots: next.
Telegram trigger
trigger/telegram · icon send · plan feature integration
Starts on your bot's updates (messages, button presses).
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
credential | Telegram bot | credential (telegram/bot) | ||
token | Webhook URL | token (URL /api/hook/<token>) | ||
update | Updates | multi-select: message (Messages), edited_message (Edited messages), channel_post (Channel posts), callback_query (Button presses), inline_query (Inline queries), my_chat_member (The bot added or removed) | ["message"] |
Output dots: next.
MCP server
trigger/mcp · icon plug-zap · plan feature trigger.mcp
Offers the workspace's tool flows to MCP clients.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
token | Server URL | token (URL /api/mcp/<token>) | ||
auth | Auth | select: none, bearer (Bearer token), header (A header) | "bearer" | |
header | Header name | text | "X-Api-Key" | auth: header |
secret | Secret | text | auth: bearer, header |
Output dots: next.
Chat
trigger/chat · icon messages-square · plan feature trigger.chat
Starts the flow for each chat message.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
token | Chat page | token (URL /chat/<token>) | ||
isPublic | Public (off: only Studio's chat panel) | boolean | true | |
title | Title | text | "Chat with us" | |
subtitle | Subtitle | text | ||
initial | Opening messages (one a line) | textarea | "Hi! How can I help?" | |
placeholder | Box placeholder | text | "Type a message" | |
isStart | Start with a button | boolean | false | |
start | Button label | text | "Start chatting" | isStart: True |
isLoad | Load the previous conversation | boolean | true | |
isUpload | Allow file uploads | boolean | false | |
accept | Allowed file types (.pdf, image/*) | text | isUpload: True | |
auth | Who can chat | select: none (Anyone with the link), basic (With a user name and password), user (Signed-in Mooflair users) | "none" | |
credential | Basic auth credential | credential (http/basic) | auth: basic | |
respond | Reply with | select: node (Chat respond nodes), last (The last node's text) | "node" | |
css | Custom CSS | textarea | ||
isCaptcha | Captcha before the first message | boolean | false | |
limitSession | Messages per chat at most (0: no limit) | number | 50 | |
limitMinute | Messages a minute per chat | number | 10 | |
Output dots: next.