Every node you can drop on the flow builder canvas, what it does, and when to use it.
Flow nodes#
A node is one step in your flow. When you click the + button on the canvas, the node palette opens — pick a node, drop it on the canvas, click it to configure it. Nodes are grouped by what they do.
Tip: Hover any node in the palette to see a one-line summary. Click it to add it to the canvas.
Actions#
Action nodes do something to the outside world — send a message, place a call, update a record. They're the only nodes that produce a touchpoint a contact will see.
Send SMS#
Sends a text message to the contact.
- Uses the SMS provider configured under Settings → Communications.
- Supports merge fields like
{{contact.firstName}},{{invoice.amount}},{{invoice.due_date}}. - One node = one message. Chain two Send SMS nodes with a Wait in between for a sequence.
Send Email#
Sends an email to the contact.
- Uses your verified sender domain (or the platform default if you haven't set one up yet).
- Subject, body (HTML), and reply-to are all configurable.
- Use merge fields in both the subject and body for personalisation. Use the payment link merge field to insert a contact-specific portal link.
Voice Call#
Places an outbound AI voice call.
- Routed through the configured voice provider (VAPI by default).
- You set the objective of the call (e.g. get the contact to pay or agree to a plan), the max attempts, and the retry interval.
- The AI agent uses the prompt and persona configured under Settings → AI Voice, plus any campaign-specific context.
Offer Payment Plan#
Offers the contact an operator-approved payment plan template.
- You must pick an existing plan template — the platform never invents plan terms on its own.
- On a voice call, the AI reads the plan's terms aloud and asks for acceptance.
- On email/SMS, the message includes a link to a plan-acceptance portal.
Escalate#
Hands the contact off to an internal team or user.
- Use it for legal handoff (e.g. note: ready for legal) or to flag a complex case for a human.
- You pick who gets notified (email, Slack, or in-app) and what the note says.
Update Contact#
Edits a contact field at runtime.
- Set, append, remove, or clear tags, custom fields, or the do-not-contact flag.
- Common uses: tag a contact as promised-to-pay after a positive call; mark resolved once paid; flag risky if the contact got abusive.
- Doesn't send anything — pure data edit.
Update Invoice#
Edits the contact's invoice fields at runtime.
- Change status, notes, or a custom field.
- Scope: just the current invoice (the one driving the campaign) or all the contact's invoices.
- Useful for closing out invoices automatically when a flow completes successfully.
Webhook#
Sends an HTTP request to a URL you provide.
- Use it to push events to your CRM, ticketing system, or accounting platform.
- You configure the URL, method (GET/POST/PUT), headers, and JSON body.
- Merge fields work in the body — pass contact/invoice context to the receiving system.
Commitment Made#
Records a promise-to-pay or a confirmed agreement.
- Use it after a successful voice call or chat where the contact agreed to a specific amount/date.
- Creates an internal record you can report on later — how many contacts committed this month.
Timing#
Timing nodes pause the flow without doing anything to the contact. Drop them between actions to space out reminders.
Wait#
Pauses the flow for a fixed duration before moving on.
- Pick days, hours, or minutes.
- Most common use: 3-day reminder — Send Email → Wait 3 days → Send SMS.
Wait for Send Window#
Pauses until the campaign's configured send window opens.
- If your campaign sends weekdays 9 AM – 5 PM and the flow hits this node at 8 PM on Friday, the next step won't run until Monday at 9 AM.
- Use this before any messaging action that would otherwise fire at a rude hour.
Branches (Decisions)#
Branch nodes split the flow into two paths based on what happened. Every branch node has a yes/true and no/false exit — drag separate paths off each one.
Payment Received#
Routes one way if the contact paid the invoice (in full or in part), the other way if they didn't.
- The canonical "if-paid-stop, if-not-keep-nudging" branch.
- Place it after a Wait so the system has time to detect the payment.
Contact Attribute Check#
Checks a field on the contact record.
- Examples: country = AU?, tag contains "vip"?, language = en?.
- Use it to localise messages or treat priority customers differently.
Invoice Attribute Check#
Same as Contact Attribute Check, but for the invoice driving the flow.
- Examples: amount > 1000?, status = disputed?, days_overdue > 60?.
- Use it to escalate large debts or skip disputed invoices.
Portal Viewed?#
Did the contact open the payment portal link you sent them?
- Use it after a Send Email with a portal link to follow up differently with people who clicked vs people who ignored it.
Plan Accepted?#
Did the contact accept the payment plan you offered?
- Pairs with Offer Payment Plan — accepted → end the flow, declined → keep collecting.
Dispute Raised?#
Did the contact raise a dispute (via the portal or a reply)?
- Route disputed contacts to an Escalate node so a human handles them.
Reasoning (Advanced)#
These nodes use AI to make decisions about what to do next. They cost more (LLM calls) and need careful configuration — try the simpler decision nodes first.
LLM Reasoning#
Uses an LLM to read the touchpoint that just happened (e.g. a voice call transcript) and pick the next branch.
- You define the branches by name (e.g. paid, disputed, unreachable, callback-requested).
- The model picks one and the flow follows that path.
- Use it when the simple yes/no branches above can't capture nuance.
Debuggers#
Debugger nodes only run in test mode. They never fire in a live campaign — useful for dry-runs.
Chatter#
A chat-based stand-in for a voice call.
- Drop it in place of a Voice Call node and click Test flow to chat with the AI agent as if you were the contact.
- Lets you debug prompts and decisions without burning real VAPI minutes.
End#
Every flow needs at least one End node — it marks the contact as "done" with this flow.
- A contact stays "in flight" until they hit an End node.
- You can have multiple End nodes in the same flow (one per branch) and they're all equivalent.
How nodes connect#
- Drag from a node's right edge to another node's left edge to draw a connection.
- Branch nodes have two outputs; drag separate connections off each.
- A node can have many inputs — many earlier steps can feed into the same later step.
- The flow validates on save: an unconnected output, a node with no End in its downstream, or a circular loop will flag a warning before you can launch the campaign.
What's next?#
- See how to create a new flow for an end-to-end walkthrough.
- See how to create a campaign to launch the flow against a real audience.