Skip to content
flowplanDocumentationCommunityMarketplaceStart page

Reference

Workflow nodes

Every node a workflow knows – with its type (as it appears in the JSON and the API), its ports and the values later nodes use as placeholders.

On this page
  1. Triggers
  2. Logic
  3. Records
  4. Pages
  5. Notify
  6. AI
  7. HTTP

This list is generated from Flowplan's node catalogue; GET /api/workflows/catalog returns every node's settings as JSON Schema.

Triggers

NodeTypeWhat it doesPortsOutputs
New record ⚡trigger.record.createdA record is created in a database.outrecord, actor, via
Record changed ⚡trigger.record.changedProperties of a record change.outrecord, before, changed, actor
Record done ⚡trigger.record.doneA record becomes done.outrecord, actor
Date reachedtrigger.record.dateA date of a record is reached or overdue.outrecord, date
Form answer ⚡trigger.form.submittedSomeone submits a database's form.outrecord, answers, respondent
Scheduletrigger.scheduleDaily, weekly or monthly at a time.outslot
New pagetrigger.page.createdA page is created.outpage, actor
Page changedtrigger.page.changedA page's title or content changes (2 minutes after the last change).outpage, actor, changes
Page movedtrigger.page.movedA page gets a new parent or space.outpage, from, to, actor
Tag addedtrigger.page.taggedA page gets a tag.outpage, tag, actor
New commenttrigger.comment.createdSomeone comments on a page or record.outcomment, page, record, actor
Mentiontrigger.mentionSomeone is mentioned in a page, record or comment.outpage, record, mentioned, actor
Start manuallytrigger.manualStarts with “Run”, the API or a button.outinputs, startedBy, source
Inbound webhooktrigger.webhookAnother service calls the workflow’s address.outbody, query, headers, receivedAt
E-mail receivedtrigger.mail.receivedAn e-mail arrives at an address that goes to this workflow.outmail, authenticated
New journal daytrigger.journal.dayA day’s page is created in a journal.outday, date, journal

Logic

NodeTypeWhat it doesPortsOutputs
If ⚡logic.ifBranches on conditions.true, falsematched
Set values ⚡logic.setNamed values for later nodes.out–
Stop ⚡logic.stopEnds the run as succeeded or failed.––
Switch ⚡logic.switchBranches on the first matching case.case:…, defaultcase
For eachlogic.foreachRuns the following nodes for every item of a list.item, donecount, results
Waitlogic.waitWaits for a duration, until a point in time or until the next time of day.outwaitedUntil
Approvallogic.approvalWaits until a person approves or rejects.approved, rejected, timeoutdecidedBy, comment, decidedAt

Records

NodeTypeWhat it doesPortsOutputs
Create recordaction.record.createCreates a record in a database.outrecord
Update record ⚡action.record.updateChanges properties of a record.outrecord, before
Find recordsaction.record.findFinds records by conditions.outrecords, first, count
Apply template ⚡action.record.templateApplies a record template to a record.outrecord

Pages

NodeTypeWhat it doesPortsOutputs
Create pageaction.page.createCreates a page below a parent page, from a page template if you like. The title (with placeholders) applies then as well; the template's name only when it comes out empty.outpage
Append to pageaction.page.appendAdds blocks at the end, the start or below a heading.outpage, appended
Tag pageaction.page.tagAdds tags to a page or removes them.outpage
Move pageaction.page.moveMoves a page below a new parent.outpage
Create taskaction.task.createWrites a task into a page, with a person and a due date if you like.outpage, task
Append to journal dayaction.journal.appendWrites Markdown with placeholders into today's, yesterday's or a given day of a journal – at the end or below a heading. A missing day is created as opening it would.outday, date, journal, created, completed
Read journal dayaction.journal.readReads today's, yesterday's or a given day of a journal – its text and what was "Completed this day" – for an AI step, for example. Changes nothing.outcontent, completed, day, date, journal, found

Create task writes a task into a chosen page (or one from a placeholder) or into the own task page of the person the workflow runs as (the page "Tasks" from My tasks, created the first time). Text and due date may contain placeholders; the person is a single one – the person it runs as, whoever triggered it, a person property of the record or a member. With Below the heading, the task goes to the end of the section under that heading (created at the end when missing); consecutive tasks join the same list. The node acts with the rights of the person it runs as: the assignee must be able to open the target page, the own task page is private and only for the person it runs as; locked pages, journals with a PIN and encrypted spaces are refused. A dry run shows what would be written and changes nothing.

Append to journal day writes into a day of a journal. Day: Today or Yesterday – in the workflow's time zone (workflow settings), like $today – or A given date from a date or a placeholder (such as a date property of the record; for a moment in time, its day in that time zone counts). Future days are refused. Content is Markdown – headings, lists, tasks - [ ], bold, links – with placeholders. The placeholders' values go in as text, never as formatting: a value with ** or <b> stays exactly as it is, page values become links to the page, line breaks in a value stay line breaks. Place: At the end of the day or Below a heading – then at the end of the section under the heading with exactly that text, so later runs line up below in order; without that heading, at the end of the day. Empty lines at the end (from the template) stay below the new text. If the day does not exist yet, the step creates it: the newest day the way opening it would – with the template and the open tasks of the day before where Carried-over tasks puts them (also with "On the first write"); a day before a later one with the template only, since its tasks have moved on already. A day in the trash stays there and the step fails. The step acts with the rights of the person it runs as: they must be able to edit the journal; journals with a PIN, locked pages and encrypted spaces are refused. Outputs: day (the day page, for links in later steps), date, journal and created (whether the day was just created). A dry run shows the day, date and place and changes nothing – it does not create a day either.

Read journal day hands a journal day to the next steps – useful when your workflow starts manually or on a schedule and an AI step should know the day. Pick the journal and the day as in Append to journal day. Put {{…content}} into the prompt and the AI gets the day's text plus the "Completed this day" list, just as you see it below the day (Only mine/All). completed holds only the list; found is false when the day doesn't exist yet (the list still counts). The step reads with the rights of the person the workflow runs as; journals with a PIN and encrypted spaces are refused. New journal day and Append to journal day also output the list as completed, e.g. {{trigger.completed | join: "\n"}}.

Notify

NodeTypeWhat it doesPortsOutputs
Notify person ⚡notify.personA notification in the app, by push, email or chat app.outnotified
Send e-mailnotify.emailSends an e-mail to people or addresses.outsent
Chat messagenotify.chatPosts to a chat webhook of the workspace (Slack, Matrix, Teams, Discord).outsent

AI

NodeTypeWhat it doesPortsOutputs
AI: Summarizeai.summarizeSummarizes a text.outsummary
AI: Classifyai.classifyPuts a text into one of the categories.out, unclearcategory, categories, confidence
AI: Extract fieldsai.extractReads named values from a text.outfields, missing
AI: Custom promptai.promptA prompt of your own, answered as text or JSON.outtext, json

HTTP

NodeTypeWhat it doesPortsOutputs
HTTP requesthttp.requestCalls an HTTPS address (fixed host).outstatus, headers, body, json

⚡ – can run in the immediate part: right when a record is saved, in the same change.

Every node can On error retry (up to 5 times), end the run, continue through the error port or skip the error.

Was this helpful?
YesThanks!
No – tell us what's missing

Found a mistake or something missing?Edit on GitHub