Workflows are in beta. The APIs documented here are stable to build against, but details may evolve before general availability — check the changelog for updates.
What are Workflows?
A workflow is a graph of nodes connected by routing rules — each node’s orderedcases decide what runs next. It orchestrates a whole sequence per contact: call them, branch on whether they picked up, retry twice with a 2-minute gap if they didn’t, extract what they said if they did, push the result to your CRM, and follow up on WhatsApp — each contact walking the graph independently. Running the same sequence over many contacts at once uses a campaign — a concept kept deliberately separate from agent batch calling, which places a single call per contact with no graph behind it.
Typical uses:
- Lead qualification — call, score the conversation from extracted fields, route hot leads to an API and cold leads to a WhatsApp nurture message.
- Collections and reminders — call, capture a promise-to-pay date, record it via your API, schedule the follow-up.
- Unreachable-contact handling — retry ladders with configurable gaps, then a fallback channel.
Why workflows
One definition, every channel
Calls, WhatsApp messages, HTTP calls, waits and retries live in a single graph instead of stitched-together automations across separate tools.
Safe iteration
Drafts are private until published, and publishing again never changes a contact already mid-run on an older version — you can keep editing without risking what’s live.
Built-in retry ladders
Configurable delayed re-attempts live inside the graph itself via the
retry node — no separate scheduler or cron job to babysit unreachable contacts.Full execution replay
Every contact’s path through the graph is recorded node by node with its matched case and outputs, so “why didn’t this fire” has a concrete answer instead of a guess.
The object model
Workflow
The named container. Holds one mutable draft and any number of immutable published versions.
Draft and versions
You edit the draft, then publish it as a frozen version. Runs always execute published versions — publishing again never changes anything already running.
Campaign
Runs one published version over a batch of uploaded contacts. Pins its version at creation time.
Execution
One contact’s journey through the graph — node attempts, matched cases, and a terminal outcome.
Nodes at a glance
Each node routes onward through ordered cases — condition expressions over the execution’s variables. See Nodes for every node’s configuration, Conditions and variables for the expression language, and AiSensy WhatsApp integration for connecting an AiSensy account to the
aisensy_whatsapp node.
Authentication and conventions
All workflow endpoints live on the standard API host and authenticate with your Bolna API key:- List endpoints paginate with
limit/offsetand return{items, total, limit, offset}. - Errors carry a machine-readable code in
detail.code(for examplerevision_conflict,duplicate_run,invalid_state), with any extra context alongside it. - Action endpoints use a
:verbsuffix — for examplePOST /workflow-campaigns/{id}:start— with an empty JSON body.
Next Steps
Quickstart
Create, publish and run your first workflow, from the dashboard or with curl
Using the editor
A tour of the visual canvas, toolbar and validation
Nodes
Every node type with its configuration and examples
Conditions and variables
The expression language behind branching
Campaigns
Run a workflow over thousands of contacts

